IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICBDQURFTkNFIENPUFlSSUdIVCBOT1RJQ0UKIyAgICAgICAgIKkgMjAwOC0yMDEzIENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBGb3VuZGF0aW9uIEZsb3cgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcGVyZm9ybSBzcGVjaWFsaXplZAojIHRhc2tzLgojCiMgVGhpcyB3b3JrIG1heSBub3QgYmUgY29waWVkLCByZS1wdWJsaXNoZWQsIHVwbG9hZGVkLCBvciBkaXN0cmlidXRlZCBpbiBhbnkgd2F5LAojIGluIGFueSBtZWRpdW0sIHdoZXRoZXIgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KIyBmcm9tIENhZGVuY2UuIE5vdHdpdGhzdGFuZGluZyBhbnkgcmVzdHJpY3Rpb25zIGhlcmVpbiwgc3ViamVjdCB0byBjb21wbGlhbmNlCiMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIENhZGVuY2Ugc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdW5kZXIKIyB3aGljaCB0aGlzIG1hdGVyaWFsIHdhcyBwcm92aWRlZCwgdGhpcyBtYXRlcmlhbCBtYXkgYmUgY29waWVkIGFuZCBpbnRlcm5hbGx5CiMgZGlzdHJpYnV0ZWQgc29sZWx5IGZvciBpbnRlcm5hbCBwdXJwb3NlcyBmb3IgdXNlIHdpdGggQ2FkZW5jZSB0b29scy4KIwojIFRoaXMgd29yayBpcyBDYWRlbmNlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBhbmQgbWF5IHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUKIyBnaXZlbiB0byB0aGlyZCBwYXJ0aWVzLCBuZWl0aGVyIGluIG9yaWdpbmFsIG5vciBpbiBtb2RpZmllZCB2ZXJzaW9ucywgd2l0aG91dAojIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIENhZGVuY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCiMgdGhlIHByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgQ2FkZW5jZSBvciBpdHMgbGljZW5zb3JzLCBhbmQKIyBpcyBzdXBwbGllZCBzdWJqZWN0IHRvLCBhbmQgbWF5IGJlIHVzZWQgb25seSBieSBDYWRlbmNlJ3MgY3VycmVudCBjdXN0b21lcnMKIyBpbiBhY2NvcmRhbmNlIHdpdGgsIGEgcHJldmlvdXNseSBleGVjdXRlZCBsaWNlbnNlIGFncmVlbWVudCBiZXR3ZWVuIENhZGVuY2UKIyBhbmQgaXRzIGN1c3RvbWVyLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEJZIENBREVOQ0UgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAojIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBDQURFTkNFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwKIyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAojIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgojIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgIE1BVEVSSUFMLCBFVkVOIElGCiMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnByb2MgY29udjJtbW1jIHt9IHsKCiAgIGdsb2JhbCByZGFfSW5wdXQKCiAgIGlmIHshW2luZm8gZXhpc3RzIHNsb3dfbGlic119IHsKICAgICAgc2V0IHNsb3dfbGlicyBbbGlzdF0KICAgfSAKICAgaWYgeyFbaW5mbyBleGlzdHMgZmFzdF9saWJzXX0gewogICAgICBzZXQgZmFzdF9saWJzIFtsaXN0XQogICB9IAoKICAgaWYgeyRyZGFfSW5wdXQodWlfdGltZWxpYixtYXgpICE9ICIifSB7CiAgICAgIGZvcmVhY2ggbGliICRyZGFfSW5wdXQodWlfdGltZWxpYixtYXgpIHsKICAgICAgICAgZm9yZWFjaCBnbG9iX2xpYiBbZ2xvYiAkbGliXSB7CiAgICAgICAgICAgIGlmIHtbZmlsZSBpc2RpcmVjdG9yeSAkZ2xvYl9saWJdfSB7CiAgICAgICAgICAgICAgIGZvcmVhY2ggbmVzdGVkX2dsb2JfbGliIFtnbG9iICRnbG9iX2xpYi9cKl0gewogICAgICAgICAgICAgICAgICBsYXBwZW5kIHNsb3dfbGlicyAkbmVzdGVkX2dsb2JfbGliCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgbGFwcGVuZCBzbG93X2xpYnMgJGdsb2JfbGliCiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICB9CiAgICAgIGZvcmVhY2ggbGliICRyZGFfSW5wdXQodWlfdGltZWxpYikgewogICAgICAgICBmb3JlYWNoIGdsb2JfbGliIFtnbG9iICRsaWJdIHsKICAgICAgICAgICAgaWYge1tmaWxlIGlzZGlyZWN0b3J5ICRnbG9iX2xpYl19IHsKICAgICAgICAgICAgICAgZm9yZWFjaCBuZXN0ZWRfZ2xvYl9saWIgW2dsb2IgJGdsb2JfbGliL1wqXSB7CiAgICAgICAgICAgICAgICAgIGxhcHBlbmQgc2xvd19saWJzICRuZXN0ZWRfZ2xvYl9saWIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBsYXBwZW5kIHNsb3dfbGlicyAkZ2xvYl9saWIKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0KICAgIyAgIHNldCBzbG93X2xpYnMgW2NvbmNhdCAkcmRhX0lucHV0KHVpX3RpbWVsaWIsbWF4KSAkcmRhX0lucHV0KHVpX3RpbWVsaWIpXQogICB9IGVsc2UgewogICAgICBmb3JlYWNoIGxpYiAkcmRhX0lucHV0KHVpX3RpbWVsaWIpIHsKICAgICAgICAgZm9yZWFjaCBnbG9iX2xpYiBbZ2xvYiAkbGliXSB7CiAgICAgICAgICAgIGlmIHtbZmlsZSBpc2RpcmVjdG9yeSAkZ2xvYl9saWJdfSB7CiAgICAgICAgICAgICAgIGZvcmVhY2ggbmVzdGVkX2dsb2JfbGliIFtnbG9iICRnbG9iX2xpYi9cKl0gewogICAgICAgICAgICAgICAgICBsYXBwZW5kIHNsb3dfbGlicyAkbmVzdGVkX2dsb2JfbGliCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgbGFwcGVuZCBzbG93X2xpYnMgJGdsb2JfbGliCiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICB9CiAgICMgICBzZXQgc2xvd19saWJzICRyZGFfSW5wdXQodWlfdGltZWxpYikKICAgfQogICBpZiB7JHJkYV9JbnB1dCh1aV90aW1lbGliLG1pbikgIT0gIiJ9IHsKICAgICAgZm9yZWFjaCBsaWIgJHJkYV9JbnB1dCh1aV90aW1lbGliLG1pbikgewogICAgICAgICBmb3JlYWNoIGdsb2JfbGliIFtnbG9iICRsaWJdIHsKICAgICAgICAgICAgaWYge1tmaWxlIGlzZGlyZWN0b3J5ICRnbG9iX2xpYl19IHsKICAgICAgICAgICAgICAgZm9yZWFjaCBuZXN0ZWRfZ2xvYl9saWIgW2dsb2IgJGdsb2JfbGliL1wqXSB7CiAgICAgICAgICAgICAgICAgIGxhcHBlbmQgZmFzdF9saWJzICRuZXN0ZWRfZ2xvYl9saWIKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBsYXBwZW5kIGZhc3RfbGlicyAkZ2xvYl9saWIKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yZWFjaCBsaWIgJHJkYV9JbnB1dCh1aV90aW1lbGliKSB7CiAgICAgICAgIGZvcmVhY2ggZ2xvYl9saWIgW2dsb2IgJGxpYl0gewogICAgICAgICAgICBpZiB7W2ZpbGUgaXNkaXJlY3RvcnkgJGdsb2JfbGliXX0gewogICAgICAgICAgICAgICBmb3JlYWNoIG5lc3RlZF9nbG9iX2xpYiBbZ2xvYiAkZ2xvYl9saWIvXCpdIHsKICAgICAgICAgICAgICAgICAgbGFwcGVuZCBmYXN0X2xpYnMgJG5lc3RlZF9nbG9iX2xpYgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIGxhcHBlbmQgZmFzdF9saWJzICRnbG9iX2xpYgogICAgICAgICAgICB9CiAgICAgICAgIH0gCiAgICAgIH0KICAgIyAgIHNldCBmYXN0X2xpYnMgW2NvbmNhdCAkcmRhX0lucHV0KHVpX3RpbWVsaWIsbWluKSAkcmRhX0lucHV0KHVpX3RpbWVsaWIpXQogICB9IGVsc2UgewogICAgICBzZXQgZmFzdF9saWJzICRzbG93X2xpYnMKICAgfQogICAKICAgI3B1dHMgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiAKICAgI3B1dHMgIlBRUlM6ICRzbG93X2xpYnMiCiAgICNwdXRzICJQUVJTOiAkZmFzdF9saWJzIgogICAjcHV0cyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIAogICAKICAgc2V0IHNkY19maWxlcyBbbGlzdF0KICAgZm9yZWFjaCBmaWxlICRyZGFfSW5wdXQodWlfdGltaW5nY29uX2ZpbGUpIHsKICAgICAgbGFwcGVuZCBzZGNfZmlsZXMgJGZpbGUKICAgfQogICAKICAgc2V0IGlsbV9zZGNfZmlsZXMgW2xpc3RdCiAgIGlmIHtbaW5mbyBleGlzdHMgcmRhX0lucHV0KHVpX3RpbWluZ2Nvbl9maWxlLGZ1bGwpXX0gewogICAgICBmb3JlYWNoIGZpbGUgJHJkYV9JbnB1dCh1aV90aW1pbmdjb25fZmlsZSxmdWxsKSB7CiAgICAgICAgIGxhcHBlbmQgaWxtX3NkY19maWxlcyAkZmlsZQogICAgICB9CiAgIH0KICAgCiAgIGlmIHskcmRhX0lucHV0KHVpX2NkYl9maWxlLG1heCkgIT0gIiJ9IHsKICAgICAgc2V0IHNsb3dfY2RicyBbY29uY2F0ICRyZGFfSW5wdXQodWlfY2RiX2ZpbGUsbWF4KSAkcmRhX0lucHV0KHVpX2NkYl9maWxlKV0KICAgfSBlbHNlIHsKICAgICAgaWYgeyRyZGFfSW5wdXQodWlfY2RiX2ZpbGUpICE9ICIifSB7CiAgICAgICAgIHNldCBzbG93X2NkYnMgJHJkYV9JbnB1dCh1aV9jZGJfZmlsZSkKICAgICAgfQogICB9CiAgIGlmIHskcmRhX0lucHV0KHVpX2NkYl9maWxlLG1pbikgIT0gIiJ9IHsKICAgICAgc2V0IGZhc3RfY2RicyBbY29uY2F0ICRyZGFfSW5wdXQodWlfY2RiX2ZpbGUsbWluKSAkcmRhX0lucHV0KHVpX2NkYl9maWxlKV0KICAgfSBlbHNlIHsKICAgICAgaWYgeyRyZGFfSW5wdXQodWlfY2RiX2ZpbGUpICE9ICIifSB7CiAgICAgICAgIHNldCBmYXN0X2NkYnMgJHJkYV9JbnB1dCh1aV9jZGJfZmlsZSkKICAgICAgfSBlbHNlIHsKICAgICAgICAgaWYge1tpbmZvIGV4aXN0cyBzbG93X2NkYnNdICYmICgkc2xvd19jZGJzICE9ICIiKX0gewogICAgICAgICAgICBzZXQgZmFzdF9jZGJzICRzbG93X2NkYnMKICAgICAgICB9CiAgICAgfQogICB9CgogICBzZXQgYmNfY2FwX3RhYmxlICIiCiAgIHNldCB3Y19jYXBfdGFibGUgIiIKICAKICAgaWYge1tsbGVuZ3RoICRyZGFfSW5wdXQodWlfY2FwdGJsX2ZpbGUpXSA+IDF9IHsKICAgICAgZm9yIHtzZXQgaSAwfSB7JGk8W2xsZW5ndGggJHJkYV9JbnB1dCh1aV9jYXB0YmxfZmlsZSldfSB7aW5jciBpfSB7CiAgICAgICAgIGlmIHtbbGluZGV4ICRyZGFfSW5wdXQodWlfY2FwdGJsX2ZpbGUpICRpXSA9PSAiLWJlc3QifSB7CiAgICAgICAgICAgIHNldCBiY19jYXBfdGFibGUgW2ZpbGUgbm9ybWFsaXplIFtsaW5kZXggJHJkYV9JbnB1dCh1aV9jYXB0YmxfZmlsZSkgW2V4cHIgJGkrMV1dXQogICAgICAgICB9CiAgICAgICAgIGlmIHtbbGluZGV4ICRyZGFfSW5wdXQodWlfY2FwdGJsX2ZpbGUpICRpXSA9PSAiLXdvcnN0In0gewogICAgICAgICAgICBzZXQgd2NfY2FwX3RhYmxlIFtmaWxlIG5vcm1hbGl6ZSBbbGluZGV4ICRyZGFfSW5wdXQodWlfY2FwdGJsX2ZpbGUpIFtleHByICRpKzFdXV0KICAgICAgICAgfQogICAgICB9CiAgIH0gZWxzZSB7CiAgICAgIHNldCB3Y19jYXBfdGFibGUgW2ZpbGUgbm9ybWFsaXplICRyZGFfSW5wdXQodWlfY2FwdGJsX2ZpbGUpXQogICAgICBzZXQgYmNfY2FwX3RhYmxlIFtmaWxlIG5vcm1hbGl6ZSAkcmRhX0lucHV0KHVpX2NhcHRibF9maWxlKV0KICAgfQogICAKICAgc2V0IGJjX3F4X3RlY2hfZmlsZSAiIgogICBzZXQgd2NfcXhfdGVjaF9maWxlICIiCiAgIAogICBpZiB7W2xsZW5ndGggJHJkYV9JbnB1dCh1aV9xeHRlY2hfZmlsZSldID4gMX0gewogICAgICBmb3Ige3NldCBpIDB9IHskaTxbbGxlbmd0aCAkcmRhX0lucHV0KHVpX3F4dGVjaF9maWxlKV19IHtpbmNyIGl9IHsKICAgICAgICAgaWYge1tsaW5kZXggJHJkYV9JbnB1dCh1aV9xeHRlY2hfZmlsZSkgJGldID09ICItYmVzdCJ9IHsKICAgICAgICAgICAgc2V0IGJjX3F4X3RlY2hfZmlsZSBbZmlsZSBub3JtYWxpemUgW2xpbmRleCAkcmRhX0lucHV0KHVpX3F4dGVjaF9maWxlKSBbZXhwciAkaSsxXV1dCiAgICAgICAgIH0KICAgICAgICAgaWYge1tsaW5kZXggJHJkYV9JbnB1dCh1aV9xeHRlY2hfZmlsZSkgJGldID09ICItd29yc3QifSB7CiAgICAgICAgICAgIHNldCB3Y19xeF90ZWNoX2ZpbGUgW2ZpbGUgbm9ybWFsaXplIFtsaW5kZXggJHJkYV9JbnB1dCh1aV9xeHRlY2hfZmlsZSkgW2V4cHIgJGkrMV1dXQogICAgICAgICB9CiAgICAgIH0KICAgfSBlbHNlIHsKICAgICAgc2V0IHdjX3F4X3RlY2hfZmlsZSBbZmlsZSBub3JtYWxpemUgJHJkYV9JbnB1dCh1aV9xeHRlY2hfZmlsZSldCiAgICAgIHNldCBiY19xeF90ZWNoX2ZpbGUgW2ZpbGUgbm9ybWFsaXplICRyZGFfSW5wdXQodWlfcXh0ZWNoX2ZpbGUpXQogICB9CiAgIAogICAKIyAgIGlmIHskd2NfY2FwX3RhYmxlID09ICIifSB7CiMgICAgICBQdXRzICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgCiMgICAgICBQdXRzICJcW1BRUlNcXVxbRVJST1JcXSBObyBjYXAgdGFibGVzIGRlZmluZWQgZm9yIHRoaXMgdGVzdGNhc2UgLi4uIGFib3J0aW5nIgojICAgICAgUHV0cyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIAojICAgICAgZXhpdCAxCiMgICB9CiAgIAogICBpZiB7KFtpbmZvIGV4aXN0cyBkZ25fbWF4X3RlbXBdID09IDApIHx8IChbaW5mbyBleGlzdHMgZGduX21heF90ZW1wXSAmJiAkZGduX21heF90ZW1wID09ICIiKX0gewogICAgICBzZXQgbWF4X3RlbXAgIiIKICAgfSBlbHNlIHsKICAgICAgc2V0IG1heF90ZW1wICRkZ25fbWF4X3RlbXAKICAgfQogICAKICAgaWYgeyhbaW5mbyBleGlzdHMgZGduX21pbl90ZW1wXSA9PSAwKSB8fCAoW2luZm8gZXhpc3RzIGRnbl9taW5fdGVtcF0gJiYgJGRnbl9taW5fdGVtcCA9PSAiIil9IHsKICAgICAgc2V0IG1pbl90ZW1wICIiCiAgIH0gZWxzZSB7CiAgICAgIHNldCBtaW5fdGVtcCBbZXhwciBhYnMoJGRnbl9taW5fdGVtcCldCiAgIH0KCiAgIHNldCBwcmVfcm91dGVfcmVzX2ZhY3RvciAkcmRhX0lucHV0KHVpX3ByZVJvdXRlX3JlcykKICAgc2V0IHByZV9yb3V0ZV9jbGtfcmVzX2ZhY3RvciAxLjAKICAgc2V0IHBvc3Rfcm91dGVfcmVzX2ZhY3RvciAkcmRhX0lucHV0KHVpX3Bvc3RSb3V0ZV9yZXMpCiAgIHNldCBwb3N0X3JvdXRlX2Nsa19yZXNfZmFjdG9yICIxLjAgMS4wIDEuMCIKICAgc2V0IHByZV9yb3V0ZV9jYXBfZmFjdG9yICRyZGFfSW5wdXQodWlfcHJlUm91dGVfY2FwKQogICBzZXQgcHJlX3JvdXRlX2Nsa19jYXBfZmFjdG9yIDEuMAogICBzZXQgcG9zdF9yb3V0ZV9jYXBfZmFjdG9yICRyZGFfSW5wdXQodWlfcG9zdFJvdXRlX2NhcCkKICAgc2V0IHBvc3Rfcm91dGVfY2xrX2NhcF9mYWN0b3IgIjEuMCAxLjAgMS4wIgogICBzZXQgcG9zdF9yb3V0ZV94Y2FwX2ZhY3RvciAkcmRhX0lucHV0KHVpX3Bvc3RSb3V0ZV94Y2FwKQogICBzZXQgc2hyaW5rX2ZhY3RvciAkcmRhX0lucHV0KHVpX3Nocl9zY2FsZSkKIyAgIHNldCByZWxhdGl2ZV9jX3RocmVzaCAkcmRhX0lucHV0KHVpX3JlbF9jX3RocmVzaCkKIyAgIHNldCB0b3RhbF9jX3RocmVzaCAkcmRhX0lucHV0KHVpX3RvdF9jX3RocmVzaCkKIyAgIHNldCBjb3VwbGluZ19jX3RocmVzaCAkcmRhX0lucHV0KHVpX2NwbF9jX3RocmVzaCkKCiAgIGNyZWF0ZV9yY19jb3JuZXIgLW5hbWUgcmNfbWF4ICBcCiAgICAgICAgICAgICAgICAgICAgLXByZVJvdXRlX3JlcyAkcHJlX3JvdXRlX3Jlc19mYWN0b3IgXAogICAgICAgICAgICAgICAgICAgIC1wcmVSb3V0ZV9jbGtyZXMgJHByZV9yb3V0ZV9jbGtfcmVzX2ZhY3RvciBcCiAgICAgICAgICAgICAgICAgICAgLXByZVJvdXRlX2NhcCAkcHJlX3JvdXRlX2NhcF9mYWN0b3IgXAogICAgICAgICAgICAgICAgICAgIC1wcmVSb3V0ZV9jbGtjYXAgJHByZV9yb3V0ZV9jbGtfY2FwX2ZhY3RvciBcCiAgICAgICAgICAgICAgICAgICAgLXBvc3RSb3V0ZV9yZXMgJHBvc3Rfcm91dGVfcmVzX2ZhY3RvciBcCiAgICAgICAgICAgICAgICAgICAgLXBvc3RSb3V0ZV9jbGtyZXMgJHBvc3Rfcm91dGVfY2xrX3Jlc19mYWN0b3IgXAogICAgICAgICAgICAgICAgICAgIC1wb3N0Um91dGVfY2FwICRwb3N0X3JvdXRlX2NhcF9mYWN0b3IgXAogICAgICAgICAgICAgICAgICAgIC1wb3N0Um91dGVfY2xrY2FwICRwb3N0X3JvdXRlX2Nsa19jYXBfZmFjdG9yIFwKICAgICAgICAgICAgICAgICAgICAtcG9zdFJvdXRlX3hjYXAgJHBvc3Rfcm91dGVfeGNhcF9mYWN0b3IKICAKICAgaWYgeyR3Y19jYXBfdGFibGUgIT0gIiJ9IHsKICAgICAgdXBkYXRlX3JjX2Nvcm5lciAtbmFtZSByY19tYXggLWNhcF90YWJsZSAkd2NfY2FwX3RhYmxlCiAgIH0KICAgaWYgeyRtYXhfdGVtcCAhPSAiIn0gewogICAgICB1cGRhdGVfcmNfY29ybmVyIC1uYW1lIHJjX21heCAtVCAkbWF4X3RlbXAKICAgfQoKICAgaWYgeyR3Y19xeF90ZWNoX2ZpbGUgIT0gIiIgfSB7CiAgICAgIHVwZGF0ZV9yY19jb3JuZXIgLW5hbWUgcmNfbWF4IC1xeF90ZWNoX2ZpbGUgJHdjX3F4X3RlY2hfZmlsZQogICB9CiAgICAKICAgY3JlYXRlX3JjX2Nvcm5lciAtbmFtZSByY19taW4gIFwKICAgICAgICAgICAgICAgICAgICAtcHJlUm91dGVfcmVzICRwcmVfcm91dGVfcmVzX2ZhY3RvciBcCiAgICAgICAgICAgICAgICAgICAgLXByZVJvdXRlX2Nsa3JlcyAkcHJlX3JvdXRlX2Nsa19yZXNfZmFjdG9yIFwKICAgICAgICAgICAgICAgICAgICAtcHJlUm91dGVfY2FwICRwcmVfcm91dGVfY2FwX2ZhY3RvciBcCiAgICAgICAgICAgICAgICAgICAgLXByZVJvdXRlX2Nsa2NhcCAkcHJlX3JvdXRlX2Nsa19jYXBfZmFjdG9yIFwKICAgICAgICAgICAgICAgICAgICAtcG9zdFJvdXRlX3JlcyAkcG9zdF9yb3V0ZV9yZXNfZmFjdG9yIFwKICAgICAgICAgICAgICAgICAgICAtcG9zdFJvdXRlX2Nsa3JlcyAkcG9zdF9yb3V0ZV9jbGtfcmVzX2ZhY3RvciBcCiAgICAgICAgICAgICAgICAgICAgLXBvc3RSb3V0ZV9jYXAgJHBvc3Rfcm91dGVfY2FwX2ZhY3RvciBcCiAgICAgICAgICAgICAgICAgICAgLXBvc3RSb3V0ZV9jbGtjYXAgJHBvc3Rfcm91dGVfY2xrX2NhcF9mYWN0b3IgXAogICAgICAgICAgICAgICAgICAgIC1wb3N0Um91dGVfeGNhcCAkcG9zdF9yb3V0ZV94Y2FwX2ZhY3RvcgogICAKICAgaWYgeyRiY19jYXBfdGFibGUgIT0gIiJ9IHsKICAgICAgdXBkYXRlX3JjX2Nvcm5lciAtbmFtZSByY19taW4gLWNhcF90YWJsZSAkYmNfY2FwX3RhYmxlCiAgIH0KICAgaWYgeyRtaW5fdGVtcCAhPSAiIn0gewogICAgICB1cGRhdGVfcmNfY29ybmVyIC1uYW1lIHJjX21pbiAtVCAkbWluX3RlbXAKICAgfQoKICAgaWYgeyRiY19xeF90ZWNoX2ZpbGUgIT0gIiIgfSB7CiAgICAgIHVwZGF0ZV9yY19jb3JuZXIgLW5hbWUgcmNfbWluIC1xeF90ZWNoX2ZpbGUgJGJjX3F4X3RlY2hfZmlsZQogICB9CiAgICAKICAgaWYge1tpbmZvIGV4aXN0cyBzbG93X2NkYnNdICYmICgkc2xvd19jZGJzICE9ICIiKX0gewogICAgICBjcmVhdGVfbGlicmFyeV9zZXQgLW5hbWUgbGlic19tYXggLXRpbWluZyAkc2xvd19saWJzIC1zaSAkc2xvd19jZGJzIAogICAgICBjcmVhdGVfbGlicmFyeV9zZXQgLW5hbWUgbGlic19taW4gLXRpbWluZyAkZmFzdF9saWJzIC1zaSAkZmFzdF9jZGJzIAogICB9IGVsc2UgewogICAgICBjcmVhdGVfbGlicmFyeV9zZXQgLW5hbWUgbGlic19tYXggLXRpbWluZyAkc2xvd19saWJzCiAgICAgIGNyZWF0ZV9saWJyYXJ5X3NldCAtbmFtZSBsaWJzX21pbiAtdGltaW5nICRmYXN0X2xpYnMKICAgfQogICAKICAgY3JlYXRlX2RlbGF5X2Nvcm5lciAtbmFtZSBjb3JuZXJfbWF4IC1saWJyYXJ5X3NldCBsaWJzX21heCAtcmNfY29ybmVyIHJjX21heAogICBjcmVhdGVfZGVsYXlfY29ybmVyIC1uYW1lIGNvcm5lcl9taW4gLWxpYnJhcnlfc2V0IGxpYnNfbWluIC1yY19jb3JuZXIgcmNfbWluCiAgIFB1dHMgIlxbSU5GT1xdIGNyZWF0ZV9jb25zdHJhaW50X21vZGUgc2V0dXBfZnVuY19tb2RlIHdpdGggIgogICBQdXRzICJcW0lORk9cXSAgIFNEQyBmaWxlczogJHNkY19maWxlcyIKICAgaWYgeyRpbG1fc2RjX2ZpbGVzICE9ICIifSB7CiAgICAgUHV0cyAiXFtJTkZPXF0gICBJTE0gU0RDIGZpbGVzOiAkaWxtX3NkY19maWxlcyIgCiAgICAgY3JlYXRlX2NvbnN0cmFpbnRfbW9kZSAtbmFtZSBzZXR1cF9mdW5jX21vZGUgLXNkY19maWxlcyAkc2RjX2ZpbGVzIC1pbG1fc2RjX2ZpbGVzIGlsbV9zZGNfZmlsZXMKICAgfSBlbHNlIHsKICAgICBjcmVhdGVfY29uc3RyYWludF9tb2RlIC1uYW1lIHNldHVwX2Z1bmNfbW9kZSAtc2RjX2ZpbGVzICRzZGNfZmlsZXMgCiAgIH0KICAgY3JlYXRlX2FuYWx5c2lzX3ZpZXcgLW5hbWUgc2V0dXBfZnVuYyAtY29uc3RyYWludF9tb2RlIHNldHVwX2Z1bmNfbW9kZSAtZGVsYXlfY29ybmVyIGNvcm5lcl9tYXgKIyAgIFB1dHMgIlxbSU5GT1xdIGNyZWF0ZV9jb25zdHJhaW50X21vZGUgaG9sZF9mdW5jX21vZGUgd2l0aCAiCiMgICBQdXRzICJcW0lORk9cXSAgIFNEQyBmaWxlczogJHNkY19maWxlcyIKIyAgIGlmIHskaWxtX3NkY19maWxlcyAhPSAiIn0gewojICAgICBQdXRzICJcW0lORk9cXSAgIElMTSBTREMgZmlsZXM6ICRpbG1fc2RjX2ZpbGVzIiAKIyAgICAgY3JlYXRlX2NvbnN0cmFpbnRfbW9kZSAtbmFtZSBob2xkX2Z1bmNfbW9kZSAtc2RjX2ZpbGVzICRzZGNfZmlsZXMgLWlsbV9zZGNfZmlsZXMgaWxtX3NkY19maWxlcwojICAgfSBlbHNlIHsKIyAgICAgY3JlYXRlX2NvbnN0cmFpbnRfbW9kZSAtbmFtZSBob2xkX2Z1bmNfbW9kZSAtc2RjX2ZpbGVzICRzZGNfZmlsZXMgCiMgICB9CiAgIGNyZWF0ZV9hbmFseXNpc192aWV3IC1uYW1lIGhvbGRfZnVuYyAtY29uc3RyYWludF9tb2RlIHNldHVwX2Z1bmNfbW9kZSAtZGVsYXlfY29ybmVyIGNvcm5lcl9taW4KICAgc2V0X2FuYWx5c2lzX3ZpZXcgLXNldHVwIHtzZXR1cF9mdW5jfSAtaG9sZCB7aG9sZF9mdW5jfSAKICAgc2V0X2RlZmF1bHRfdmlldyAtc2V0dXAge3NldHVwX2Z1bmN9IC1ob2xkIHtob2xkX2Z1bmN9IAogICBzZXRfaW50ZXJhY3RpdmVfY29uc3RyYWludF9tb2RlcyBbYWxsX2NvbnN0cmFpbnRfbW9kZXMgLWFjdGl2ZV0gCn0KCnByb2MgY3JlYXRlX2xwX2NvbmZpZ19maWxlIHt9IHsKCiAgIGdsb2JhbCB2YXJzCgogICBzZXQgb3AgW29wZW4gbHBfY29uZmlnLmF1dG8udGNsIHddCgogICBpZiB7W2ZpbGUgZXhpc3RzIHNldHVwLmF1dG8udGNsXX0gewogICAgICBzb3VyY2Ugc2V0dXAuYXV0by50Y2wKICAgfQogICBpZiB7W2ZpbGUgZXhpc3RzIGlubm92dXNfY29uZmlnLmF1dG8udGNsXX0gewogICAgICBzb3VyY2UgaW5ub3Z1c19jb25maWcuYXV0by50Y2wKICAgfQoKICAgcHV0cyAkb3AgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKICAgcHV0cyAkb3AgIiMgTG93IHBvd2VyIGNvbmZpZ3VyYXRpb24gZmlsZSBvdmVybGF5LiAgVGhpcyBmaWxlIGNvbnRhaW5zIGZvdW5kYXRpb24gZmxvdyB2YXJpYWJsZXMiCiAgIHB1dHMgJG9wICIjIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBMUCBmbG93IGFuZCBzaG91bGQgYmUgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGUgc2V0dXAudGNsIgogICBwdXRzICRvcCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgogICBwdXRzICRvcCAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpZSBjZWxsIGluZm9ybWF0aW9uIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBUaGUgdmFyaWFibGUgdmFycyh0aWVfY2VsbHMpIGlzIGRlZmluZWQgaW4gdGhlIHNldHVwLnRjbCBhbmQgaXMgdXNlZCB0byBkZWZpbmUgYSAiCiAgIHB1dHMgJG9wICIjIFwiZ2xvYmFsXCIgdGllIGNlbGwgbGlzdC4gVGhpcyBsaXN0IHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IGZvciBlYWNoIHBvd2VyIGRvbWFpbi4iCiAgIHB1dHMgJG9wICIjIEl0IGNhbiBiZSBvdmVycmlkZGVuIGZvciBhIGdpdmVuIHBvd2VyIGRvbWFpbiBieSBzZXR0aW5nIHZhcnMoPHBvd2VyX2RvbWFpbj4sdGllX2NlbGxzKS4iCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIgogICBwdXRzICRvcCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgogICBwdXRzICRvcCAiIyAgICAgICAgICAgICAgICAgICAgICAgICBQbGFjZW1lbnQgT3B0aW9ucyIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiNzZXQgdmFycyhyZXNpemVfc2hpZnRlcl9hbmRfaXNvX2luc3RzKSA8dHJ1ZSB8IGZhbHNlPiIKICAgcHV0cyAkb3AgIiMiCiAgIGlmIHtbaW5mbyBleGlzdHMgdmFycyhwb3dlcl9kb21haW5zKV19IHsKICAgICAgZm9yZWFjaCBkb21haW4gJHZhcnMocG93ZXJfZG9tYWlucykgewogICAgICAgICBpZiB7W2luZm8gZXhpc3RzIHZhcnModGllX2NlbGxzKV19IHsKICAgICAgICAgICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoJGRvbWFpbix0aWVfY2VsbHMpXHRcIiR2YXJzKHRpZV9jZWxscylcIiIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoJGRvbWFpbix0aWVfY2VsbHMpICAgIDx0aWUgY2VsbHMgZm9yIDxwb3dlcl9kb21haW4+PiIKICAgICAgICAgfQogICAgICB9CiAgIH0KICAgcHV0cyAkb3AgIiMiCiAgIHB1dHMgJG9wICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGxlciBjZWxsIGluZm9ybWF0aW9uIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBUaGUgdmFyaWFibGUgdmFycyhmaWxsZXJfY2VsbHMpIGlzIGRlZmluZWQgaW4gdGhlIHNldHVwLnRjbCBhbmQgaXMgdXNlZCB0byBkZWZpbmUgYSAiCiAgIHB1dHMgJG9wICIjIFwiZ2xvYmFsXCIgZmlsbGVyIGNlbGwgbGlzdC4gVGhpcyBsaXN0IHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IGZvciBlYWNoIHBvd2VyIGRvbWFpbi4iCiAgIHB1dHMgJG9wICIjIEl0IGNhbiBiZSBvdmVycmlkZGVuIGZvciBhIGdpdmVuIHBvd2VyIGRvbWFpbiBieSBzZXR0aW5nIHZhcnMoPHBvd2VyX2RvbWFpbj4sZmlsbGVyX2NlbGxzKS4iCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIGlmIHtbaW5mbyBleGlzdHMgdmFycyhwb3dlcl9kb21haW5zKV19IHsKICAgICAgZm9yZWFjaCBkb21haW4gJHZhcnMocG93ZXJfZG9tYWlucykgewogICAgICAgICBpZiB7W2luZm8gZXhpc3RzIHZhcnMoZmlsbGVyX2NlbGxzKV19IHsKICAgICAgICAgICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoJGRvbWFpbixmaWxsZXJfY2VsbHMpXHRcIiR2YXJzKGZpbGxlcl9jZWxscylcIiIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoJGRvbWFpbixmaWxsZXJfY2VsbHMpIDxmaWxsZXIgY2VsbHMgZm9yIDxwb3dlcl9kb21haW4+PiIKICAgICAgICAgfQogICAgICB9CiAgIH0KICAgcHV0cyAkb3AgIiMiCiAgIHB1dHMgJG9wICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICAgICAgICAgICAgICBXZWxsdGFwIGNlbGwgaW5mb3JtYXRpb24iCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIFRoZSB2YXJpYWJsZSB2YXJzKHdlbGx0YXBzKSBpcyBkZWZpbmVkIGluIHRoZSBzZXR1cC50Y2wgYW5kIGlzIHVzZWQgdG8gZGVmaW5lIGEgIgogICBwdXRzICRvcCAiIyBcImdsb2JhbFwiIHdlbGx0YXAgY2VsbCBsaXN0LiBUaGlzIGxpc3Qgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQgZm9yIGVhY2ggcG93ZXIgZG9tYWluLiIKICAgcHV0cyAkb3AgIiMgSXQgY2FuIGJlIG92ZXJyaWRkZW4gZm9yIGEgZ2l2ZW4gcG93ZXIgZG9tYWluIGJ5IHNldHRpbmcgdmFycyg8cG93ZXJfZG9tYWluPix3ZWxsdGFwcykuIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyAgICB2ZXJpZnlfcnVsZSA6IG1heGltdW0gZGlzdGFuY2UgKGluIG1pY3JvbnMpIGJldHdlZW4gd2VsbHRhcCBjZWxscyBhbmQgc3RhbmRhcmQgY2VsbHMgIgogICBwdXRzICRvcCAiIyAgICAgICAgICAgICAgICAgIGluIG1pY3JvbnMiCiAgIHB1dHMgJG9wICIjICAgICAgICBtYXhfZ2FwIDogc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2Ygb25lIHdlbGwtdGFwIGNlbGwgIgogICBwdXRzICRvcCAiIyAgICAgICAgICAgICAgICAgIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgIHRoZSBmb2xsb3dpbmcgd2VsbC10YXAgY2VsbCBpbiB0aGUgc2FtZSByb3ciCiAgIHB1dHMgJG9wICIjICBjZWxsX2ludGVydmFsIDogc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiBvbmUgd2VsbC10YXAgY2VsbCAiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICAgICAgdG8gdGhlIGNlbnRlciBvZiB0aGUgZm9sbG93aW5nIHdlbGwtdGFwIGNlbGwgaW4gdGhlIHNhbWUgcm93IgogICBwdXRzICRvcCAiIyIKICAgcHV0cyAkb3AgIiMgTk9URTogbWF4X2dhcCBhbmQgY2VsbF9pbnRlcnZhbCBwYXJhbWV0ZXJzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIHVzZXIgaGFzIHRvIGRlZmluZSAiCiAgIHB1dHMgJG9wICIjICAgICAgIG9ubHkgb25lIG9mIHRoZXNlIHBhcmFtZXRlcnMgdG8gYWRkIHdlbGx0YXAgY2VsbHMiCiAgIHB1dHMgJG9wICIjIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBpZiB7W2luZm8gZXhpc3RzIHZhcnMocG93ZXJfZG9tYWlucyldfSB7CiAgICAgIGZvcmVhY2ggZG9tYWluICR2YXJzKHBvd2VyX2RvbWFpbnMpIHsKICAgICAgICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKHdlbGx0YXBzKV19IHsKICAgICAgICAgICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoJGRvbWFpbix2YXJzKHdlbGx0YXBzKSkgICAgICAgICAgICAgICAgIDx3ZWxsdGFwIGNlbGwgbGlzdCBmb3IgPHBvd2VyX2RvbWFpbj4+IgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwdXRzICRvcCAiIyBzZXQgdmFycygkZG9tYWluLHdlbGx0YXBzKSAgICAgICAgICAgICAgICAgPHdlbGx0YXAgY2VsbCBsaXN0IGZvciA8cG93ZXJfZG9tYWluPj4iCiAgICAgICAgIH0gCiAgICAgICAgIHB1dHMgJG9wICIjIHNldCB2YXJzKCRkb21haW4sd2VsbHRhcHMsY2hlY2tlcmJvYXJkKSAgPHRydWUgb3IgZmFsc2U+IgogICAgICAgICBwdXRzICRvcCAiIyBzZXQgdmFycygkZG9tYWluLHdlbGx0YXBzLG1heF9nYXApICAgICAgIDxtYXggZ2FwIGluIG1pY3JvbnM+IgogICAgICAgICBwdXRzICRvcCAiIyBzZXQgdmFycygkZG9tYWluLHdlbGx0YXBzLGNlbGxfaW50ZXJ2YWwpIDxjZWxsIGludGVydmFsIGluIG1pY3JvbnM+IgogICAgICAgICBwdXRzICRvcCAiIyBzZXQgdmFycygkZG9tYWluLHdlbGx0YXBzLHJvd19vZmZzZXQpICAgIDxyb3cgb2Zmc2V0IGluIG1pY3JvbnM+IgogICAgICAgICBwdXRzICRvcCAiIyBzZXQgdmFycygkZG9tYWluLHdlbGx0YXBzLHZlcmlmeV9ydWxlKSAgIDx2ZXJpZnkgcnVsZSBkaXN0YW5jZT4iCiAgICAgIH0KICAgfQogICBwdXRzICRvcCAiIyIKICAgcHV0cyAkb3AgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKICAgcHV0cyAkb3AgIiMgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZGNhcCBjZWxsIGluZm9ybWF0aW9uIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBUaGUgdmFyaWFibGVzIHZhcnMocHJlX2VuZGNhcCkgYW5kIHZhcnMocG9zdF9lbmRjYXApIGFyZSBzZXQgaW4gdGhlIHNldHVwLnRjbCBmaWxlIGFuZCIKICAgcHV0cyAkb3AgIiMgYXJlIHVzZWQgdG8gZGVmaW5lIFwiZ2xvYmFsXCIgZW5kY2FwIGNlbGxzLiBUaGVzZSB1c2VkIGJ5IGRlZmF1bHQgZm9yIGVhY2ggcG93ZXIgZG9tYWluLiIKICAgcHV0cyAkb3AgIiMgVGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgYSBnaXZlbiBwb3dlciBkb21haW4gc2V0dGluZyB2YXJzKDxwb3dlcl9kb21haW4+LHByZV9lbmRjYXApIgogICBwdXRzICRvcCAiIyBhbmQvb3IgdmFycyg8cG93ZXJfZG9tYWluPixwb3N0X2VuZGNhcCkuIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBpZiB7W2luZm8gZXhpc3RzIHZhcnMocG93ZXJfZG9tYWlucyldfSB7CiAgICAgIGZvcmVhY2ggZG9tYWluICR2YXJzKHBvd2VyX2RvbWFpbnMpIHsKICAgICAgICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoJGRvbWFpbixwcmVfZW5kY2FwKSAgPHByZSBlbmRjYXAgY2VsbCBmb3IgPHBvd2VyX2RvbWFpbj4+IgogICAgICAgICBwdXRzICRvcCAiIyBzZXQgdmFycygkZG9tYWluLHBvc3RfZW5kY2FwKSA8cG9zdCBlbmRjYXAgY2VsbCBmb3IgPHBvd2VyX2RvbWFpbj4+IgogICAgICB9CiAgIH0KICAgcHV0cyAkb3AgIiMiCiAgIHB1dHMgJG9wICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBvbiBuZXQgYnVmZmVyaW5nIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBCeSBkZWZhdWx0IFNPQ0UgZG9lcyBhbHdheXMtb24tbmV0IHN5bnRoZXNpcyBmb3IgU1JQRyBjb250cm9sIHNpZ25hbCBhbmQgUFNPIGVuYWJsZSAiCiAgIHB1dHMgJG9wICIjIHNpZ25hbHMgYXMgcGFydCBvZiBvcHREZXNpZ24gLXByZUNUUywgYnV0IHRoaXMgY2FuIGJlIG1hbnVhbGx5IGRvbmUgZm9yIHNwZWNpZmljIG5ldHMgaWYiCiAgIHB1dHMgJG9wICIjIG5lY2Vzc2FyeS4gIFRvIGRvIHRoaXMsIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhbmQgdW5jb21tZW50IHRoZSBwcmVfcHJlY3RzLnRjbCIKICAgcHV0cyAkb3AgIiMgcGx1Zy1pbiB0ZW1wbGF0ZSIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoYWx3YXlzX29uX2J1ZmZlcnMpICAgICAgICAgICAgICAgICAgIDxsaXN0IG9mIGFsd2F5cyBvbiBidWZmZXJzPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoYWx3YXlzX29uX25ldHMpICAgICAgICAgICAgICAgICAgICAgIDxsaXN0IG9mIGFsd2F5cyBvbiBuZXRzPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoYWx3YXlzX29uX25ldHMsbWF4X2Zhbm91dCkgICAgICAgICAgIDxtYXggZmFub3V0IGxpbWl0IGZvciBhbHdheXMgb24gbmV0cz4gKG9wdGlvbmFsKSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoYWx3YXlzX29uX25ldHMsbWF4X3RyYW4pICAgICAgICAgICAgIDxtYXggdHJhbnNpdGlvbiBvbiBhbHdheXMgb24gbmV0cz4gKG9wdGlvbmFsKSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoYWx3YXlzX29uX25ldHMsbWF4X3NrZXcpICAgICAgICAgICAgIDxtYXggc2tldyBmb3IgYWx3YXlzIG9uIG5ldHM+IChvcHRpb25hbCkiCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKGFsd2F5c19vbl9uZXRzLG1heF9kZWxheSkgICAgICAgICAgICA8bWF4IGRlbGF5IGZvciBhbHdheXMgb24gbmV0cz4gKG9wdGlvbmFsKSIKICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKHBvd2VyX2RvbWFpbnMpXX0gewogICAgICBmb3JlYWNoIGRvbWFpbiAkdmFycyhwb3dlcl9kb21haW5zKSB7CiAgICAgICAgIHB1dHMgJG9wICIjIHNldCB2YXJzKCRkb21haW4sYWx3YXlzX29uX2J1ZmZlcnMpICA8YnVmZmVycyBmb3IgPHBvd2VyIGRvbWFpbj4+IgogICAgICB9CiAgIH0KICAgcHV0cyAkb3AgIiMiCiAgIHB1dHMgJG9wICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICAgICAgICAgIFNlY29uZGFyeSBwb3dlci9ncm91bmQgcm91dGluZyIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgQXV0b21hdGljIHNlY29uZGFyeSBwb3dlciByb3V0aW5nIGNhbiBiZSBlbmFibGVkIHRoZSBmb3VuZGF0aW9uIGZsb3dzIGJ5IHNldHRpbmcgIgogICBwdXRzICRvcCAiIyB2YXJzKHJvdXRlX3NlY29uZGFyeV9wZ19uZXRzKSB0byB0cnVlIGFuZCBwcm92aWRpbmcgY2VsbCBwaW4gcGFpciBpbmZvcm1hdGlvbiB0byIKICAgcHV0cyAkb3AgIiMgaWRlbnRpZnkgdGhlIGNvbm5lY3Rpb25zIHJlcXVpcmluZyByb3V0aW5nIChQVEJVRkZEMTpUVkREIExWTExIQ0Q0OlZEREwsIGUuZy4pICIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMocm91dGVfc2Vjb25kYXJ5X3BnX25ldHMpICAgICAgICAgXFt0cnVlIHwgZmFsc2VcXSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoc2Vjb25kYXJ5X3BnLGNlbGxfcGluX3BhaXJzKSAgICAgPHNlY29uZGFyeSBwb3dlciBjZWxsIHBpbiBwYWlyIGxpc3Q+IgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiI0luIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIGNhbiBvcHRpb25hbGx5IGRlZmluZWQgZWl0aGVyIGdsb2JhbGx5IG9yIHBlciBwL2cgbmV0IgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBzZXQgdmFycyhzZWNvbmRhcnlfcGcsbWF4X2Zhbm91dCkgICAgICAgICAgIDxtYXggZmFub3V0IGZvciBzZWNvbmRhcnkgcG93ZXIgcm91dGluZz4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKHNlY29uZGFyeV9wZyxwYXR0ZXJuKSAgICAgICAgICAgICAgPHNlY29uZGFyeSBwb3dlciByb3V0aW5nIHBhdHRlcm4gdHJ1bmsgfCBzdGVpbmVyPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoc2Vjb25kYXJ5X3BnLG5vbl9kZWZhdWx0X3J1bGUpICAgICA8bm9uLWRlZmF1bHQgcnVsZSBmb3Igc2Vjb25kYXJ5IHAvZy8gcm91dGluZz4iCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIFRvIG9wdGlvbmFsbHkgb3ZlcnJpZGUgZm9yIGEgZ2l2ZW4gcC9nIG5ldChzKSwgdXNlIHRoZSB2YXJzKHJvdXRlX3NlY29uZGFyeV9wZ19uZXRzKSB0byAiCiAgIHB1dHMgJG9wICIjIGRlZmluZSB0aGUgbGlzdCBvZiBuZXRzIHRvIGJlIG92ZXJyaWRkZW4gYW5kIHRoZW4gb3ZlcnJpZGUgdmFycyg8cC9nIG5ldD4sPG9wdGlvbj4pIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBzZXQgdmFycyhzZWNvbmRhcnlfcGcsbmV0cykgICAgICAgICAgICAgICAgICA8bGlzdCBvZiBwb3dlci9ncm91bmQgbmV0cz4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwL2dfbmV0PixtYXhfZmFub3V0KSAgICAgICAgICAgICAgIDxtYXggZmFub3V0PiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHAvZ19uZXQ+LHBhdHRlcm4pICAgICAgICAgICAgICAgICAgPHRydW5rIHwgc3RlaW5lcj4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwL2dfbmV0Pixub25fZGVmYXVsdF9ydWxlKSAgICAgICAgIDxub24gZGVmYXVsdCBydWxlPiIKICAgcHV0cyAkb3AgIiMiCiAgIHB1dHMgJG9wICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQ0xQIG9wdGlvbnMiCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKGNscF9vcHRpb25zKSAgPG9wdGlvbnMgZm9yIHJ1bkNMUD4iCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKGNscF9vcHRpb25zKSAgXCJcIiIKICAgcHV0cyAkb3AgIiMiCiAgIHB1dHMgJG9wICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICBNb2RpZnkgcG93ZXIgZG9tYWlucywgcm93IGNyZWF0aW9uIGZvciBwb3dlciBkb21haW5zIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBUaGUgZm91bmRhdGlvbiBmbG93cyBjb250YWluIGEgc2FtcGxlIHBvc3RfaW5pdF90Y2wgKFBMVUcvcG9zdF9pbml0LnRjbCkgcGx1Zy1pbiB0byBkbyAiCiAgIHB1dHMgJG9wICIjIHBvd2VyIGRvbWFpbiBtb2RpZmljYXRpb24gYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgZm9sbG9pbmcgdmFyaWFibGVzOiIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKHBvd2VyX2RvbWFpbnMpXX0gewogICAgICBmb3JlYWNoIGRvbWFpbiAkdmFycyhwb3dlcl9kb21haW5zKSB7CiAgICAgICAgIHB1dHMgJG9wICIjIHNldCB2YXJzKCRkb21haW4sYmJveCkgICAgICAgICA8bGx4IGxseSB1cnggdXJ5PjsgYm9uZGFyeSBjb29yZGluYXRlcyBpbiBtaWNyb25zIgogICAgICAgICBwdXRzICRvcCAiIyBzZXQgdmFycygkZG9tYWluLHJzX2V4dHMpICAgICAgPHRvcCBib3QgbGVmdCByaWdodD47IGRpc3RhbmNlIGluIG1pY3JvbnMgICIKICAgICAgICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoJGRvbWFpbixtaW5fZ2FwcykgICAgIDx0b3AgYm90IGxlZnQgcmlnaHQ+OyBkaXN0YW5jZSBpbiBtaWNyb25zIgogICAgICB9CiAgIH0KICAgcHV0cyAkb3AgIiMiCiAgIHB1dHMgJG9wICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgU2h1dC1vZmYgUGxhbm5pbmcgIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBUaGUgZm91bmRhdGlvbiBmbG93cyBjb250YWluIGEgc2FtcGxlIHBvc3RfaW5pdF90Y2wgKFBMVUcvcG9zdF9pbml0LnRjbCkgcGx1Zy1pbiB0byBkbyAiCiAgIHB1dHMgJG9wICIjIHBvd2VyIHN3aXRjaCBpbnNlcnRpb24gYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sc3dpdGNoYWJsZSkgICAgICAgICA8dHJ1ZSB8IGZhbHNlPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sc3dpdGNoX3R5cGUpICAgICAgICA8Y29sdW1uIHwgcmluZz4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHN3aXRjaF9jZWxsKSAgICAgICAgPFBTTyBjZWxsIG5hbWU+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixpbnB1dF9lbmFibGVfcGluKSAgIDxQU08gY2VsbCBpbnB1dCBlbmFibGUgcGluPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sb3V0cHV0X2VuYWJsZV9waW4pICA8UFNPIGNlbGwgb3V0cHV0IGVuYWJsZSBwaW4+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixpbnB1dF9lbmFibGVfbmV0KSAgIDxQU08gY2VsbCBpbnB1dCBlbmFibGUgbmV0PiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sb3V0cHV0X2VuYWJsZV9uZXQpICA8UFNPIGNlbGwgb3V0cHV0IGVuYWJsZSBuZXQ+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixzd2l0Y2hfaW5zdGFuY2UpICAgIDxzd2l0Y2hNb2R1bGVJbnN0YW5jZT4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHRvcF9vZmZzZXQpICAgICAgICAgPHRvcCBvZmZzZXQgaW4gbWljcm9ucz4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGJvdHRvbV9vZmZzZXQpICAgICAgPGJvdHRvbSBvZmZzZXQgaW4gbWljcm9ucz4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHJpZ2h0X29mZnNldCkgICAgICAgPHJpZ2h0IG9mZnNldCBpbiBtaWNyb25zPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sbGVmdF9vZmZzZXQpICAgICAgICA8bGVmdCBvZmZzZXQgaW4gbWljcm9ucz4iCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIEJlbG93IHZhcmlhYmxlcyBhcmUgZm9yIGNvbHVtbiBiYXNlZCBwc28gaW1wbGVtZXRhdGlvbiIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sY2hlY2tlcl9ib2FyZCkgICAgIDx0cnVlIHwgZmFsc2U+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixob3Jpem9uYWxfcGl0Y2gpICAgPGluIG1pY3JvbnM+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixjb2x1bW5faGVpZ2h0KSAgICAgPFN3aXRjaCBjZWxsIGNvbHVtbiBoZWlnaHQgaW4gbWljcm9ucz4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHNraXBfcm93cykgICAgICAgICA8TnVtYmVyIG9mIHJvd3MgdG8gc2tpcD4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGJhY2tfdG9fYmFja19jaGFpbikgPHRydWV8ZmFsc2U+IgogICBwdXRzICRvcCAiIyAuLi4gQ29ubmVjdHMgdGhlIGVuYWJsZU5ldE91dCBhdCB0aGUgdG9wIG9mIGEgY29sdW1uIHRvIHRoZSBlbmFibGVOZXRJbiBhdCB0aGUgdG9wIG9mICIKICAgcHV0cyAkb3AgIiMgLi4uIHRoZSBuZXh0IGNvbHVtbiwgYW5kIGNvbm5lY3RzIHRoZSBlbmFibGVOZXRPdXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY29sdW1uIHRvIHRoZSAiCiAgIHB1dHMgJG9wICIjIC4uLiBlbmFibGVOZXRJbiBhdCB0aGUgYm90dG9tIG9mIHRoZSBuZXh0IGNvbHVtbiIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgQmVsb3cgdmFyaWFibGVzIGFyZSBmb3IgcmluZyBiYXNlZCBwc28gaW1wbGVtZXRhdGlvbiIKICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sdG9wX3JpbmcpICAgICA8MXwwPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sYm90dG9tX3JpbmcpICA8MXwwPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4scmlnaHRfcmluZykgICA8MXwwPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sbGVmdF9yaW5nKSAgICA8MXwwPiIKICAgcHV0cyAkb3AgIiMgLi4uIGRlZmluZXMgd2hpY2ggc2lkZSBvZiB0aGUgcG93ZXIgZG9tYWluIHRvIGluc2VydCBzd2l0Y2hlczoiCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHRvcF9zd2l0Y2hfY2VsbCkgICAgPHBzbyBjZWxsIG5hbWU+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixib3R0b21fc3dpdGNoX2NlbGwpIDxwc28gY2VsbCBuYW1lPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sbGVmdF9zd2l0Y2hfY2VsbCkgICA8cHNvIGNlbGwgbmFtZT4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHJpZ2h0X3N3aXRjaF9jZWxsKSAgPHBzbyBjZWxsIG5hbWU+IgogICBwdXRzICRvcCAiIyAuLi4gZGVmaW5lIHBzbyBjZWxsIG5hbWUgZm9yIGVhY2ggc2lkZSBvZiB0aGUgcG93ZXIgZG9tYWluIgogICBwdXRzICRvcCAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPix0b3BfZmlsbGVyX2NlbGwpICAgIDxmaWxsZXIgY2VsbCBuYW1lPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sYm90dG9tX2ZpbGxlcl9jZWxsKSA8ZmlsbGVyIGNlbGwgbmFtZT4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGxlZnRfZmlsbGVyX2NlbGwpICAgPGZpbGxlciBjZWxsIG5hbWU+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixyaWdodF9maWxsZXJfY2VsbCkgIDxmaWxsZXIgY2VsbCBuYW1lPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sY29ybmVyX2NlbGxfbGlzdCkgICA8Y29ybmVyIGNlbGwgbmFtZT4iCiAgIHB1dHMgJG9wICIjIC4uLiBkZWZpbmUgZmlsbGVyIGNlbGwgbmFtZSBmb3IgZWFjaCBzaWRlIG9mIHRoZSBwb3dlciBkb21haW4iCiAgIHB1dHMgJG9wICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGRpc3RyaWJ1dGUpICAgICAgICAgPHRydWUgb3IgZmFsc2U+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPix0b3Bfc3dpdGNoZXMpICAgICAgIDxpbnRlZ2VyPiIKICAgcHV0cyAkb3AgIiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sYm90dG9tX3N3aXRjaGVzKSAgICA8aW50ZWdlcj4iCiAgIHB1dHMgJG9wICIjIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGxlZnRfc3dpdGNoZXMpICAgICAgPGludGVnZXI+IgogICBwdXRzICRvcCAiIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixyaWdodF9zd2l0Y2hlcykgICAgIDxpbnRlZ2VyPiIKICAgcHV0cyAkb3AgIiMgLi4uIGRlZmluZSB0aGUgbnVtYmVyIG9mIHN3aXRjaGVzIGZvciBlYWNoIHNpZGUgb2YgdGhlIHBvd2VyIGRvbWFpbiIKICAgcHV0cyAkb3AgIiMiCgogICBjbG9zZSAkb3AKCiAgIFB1dHMgIjxGRj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBQdXRzICI8RkY+IENyZWF0ZWQgbG93IHBvd2VyIGNvbmZpZyBmaWxlIFwibHBfY29uZmlnLmF1dG8udGNsXCIiCiAgIFB1dHMgIjxGRj4gICAgVGhpcyBmaWxlIGlzIHVzZWQgdG8gZGVmaW5lIHZhcmlhYmxlcyBzcGVjaWZpYyB0byB0aGUgTFAgZm91bmRhdGlvbiBmbG93LiIKICAgUHV0cyAiPEZGPiAgICBBbGwgdGhlIGluZm9ybWFpdG9uIGluIHRoaXMgZmlsZSBpcyBvcHRpb25hbCBidXQgaXMgaW50ZW5kZWQgdG8gaGVscCAiCiAgIFB1dHMgIjxGRj4gICAgYXV0b21hdGUgc29tZSBvZiB0aGUgbW9zdCBjb21tb24gTFAgY29tbWFuZHMuICBQbGVhc2UgZWRpdCBhbmQgY29weSIKICAgUHV0cyAiPEZGPiAgICB0byBscF9jb25maWcudGNsIHRvIGVuYWJsZSAobWFrZSBzdXJlIGl0IGlzIHNvdXJjZWQgZnJvbSBzZXR1cC50Y2wpLiIKCn0KCnByb2MgY3JlYXRlX2ludnNfdGFnX2ZpbGUge30gewoKICAgZ2xvYmFsIHZhcnMKICAgZ2xvYmFsIHRhZ3MKCiAgIHNldCBzdGVwcyBbbGlzdCAiZmVlZHRocm91Z2giICJhc3NpZ25fcGluIiAibW9kZWxfZ2VuIiAicGFydGl0aW9uIiBcCiAgICAgICAgICAgICAgICAgImluaXQiICJwbGFjZSIgInByZWN0cyIgImN0cyIgInBvc3RjdHMiICJwb3N0Y3RzX2hvbGQiICJyb3V0ZSIgXAogICAgICAgICAgICAgICAgICJwb3N0cm91dGUiICJwb3N0cm91dGVfaG9sZCIgInNpZ25vZmYiICJhc3NlbWJsZSJdCgogICBzZXQgdGFncyhpbml0KSBbbGlzdCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBzZXRfcmNfZmFjdG9yIFwKICAgICAgZGVyYXRlX3RpbWluZyBcCiAgICAgIGNyZWF0ZV9yY19jb3JuZXIgXAogICAgICBjcmVhdGVfbGlicmFyeV9zZXQgXAogICAgICBjcmVhdGVfZGVsYXlfY29ybmVyIFwKICAgICAgY3JlYXRlX2NvbnN0cmFpbnRfbW9kZSBcCiAgICAgIGNyZWF0ZV9hbmFseXNpc192aWV3IFwKICAgICAgdXBkYXRlX2RlbGF5X2Nvcm5lciBcCiAgICAgIHVwZGF0ZV9saWJyYXJ5X3NldCBcCiAgICAgIGRlcmF0ZV90aW1pbmcgXAogICAgICBzZXRfZGVmYXVsdF92aWV3IFwKICAgICAgc2V0X3Bvd2VyX2FuYWx5c2lzX21vZGUgXAogICAgICBpbml0X2Rlc2lnbiBcCiAgICAgIGxvYWRfZmxvb3JwbGFuIFwKICAgICAgZ2VuZXJhdGVfdHJhY2tzIFwKICAgICAgbG9hZF9jcGYgXAogICAgICBjb21taXRfY3BmIFwKICAgICAgcmVhZF9hY3Rpdml0eV9maWxlIFwKICAgICAgc3BlY2lmeV9pbG0gXAogICAgICBsb2FkX2lsbV9ub25fc2RjX2ZpbGUgXAogICAgICBpbml0aWFsaXplX3RpbWluZyBcCiAgICAgIGxvYWRfc2NhbiBcCiAgICAgIHNwZWNpZnlfc3BhcmVfZ2F0ZXMgXAogICAgICBzZXRfZG9udF91c2UgXAogICAgICBzZXRfbWF4X3JvdXRlX2xheWVyIFwKICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgaW5zZXJ0X3dlbGx0YXBzX2VuZGNhcHMgXAogICAgICB0aW1lX2Rlc2lnbiBcCiAgICAgIGNoZWNrX2Rlc2lnbiBcCiAgICAgIGNoZWNrX3RpbWluZyBcCiAgICAgIHJlcG9ydF9wb3dlcl9kb21haW5zIFwKICAgICAgZmZfcmVwbGFjZV9mbGV4bW9kZWxfd2l0aF9mdWxsX25ldGxpc3QgXAogICBdCiAgIHNldCB0YWdzKHBsYWNlKSBbbGlzdCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgcmVzdG9yZV9kZXNpZ24gXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZGVzaWduX21vZGUgXAogICAgICAgICBzZXRfZGVsYXlfY2FsX21vZGUgXAogICAgICAgICBzZXRfcGxhY2VfbW9kZSBcCiAgICAgICAgIHNldF9vcHRfbW9kZSBcCiAgICAgICAgIHNldF90aWVfaGlsb19tb2RlIFwKICAgICAgICAgY2xlYW51cF9zcGVjaWZ5X2Nsb2NrX3RyZWUgXAogICAgICAgICBzcGVjaWZ5X2Nsb2NrX3RyZWUgXAogICAgICBzcGVjaWZ5X2p0YWcgXAogICAgICBwbGFjZV9qdGFnIFwKICAgICAgcGxhY2VfZGVzaWduIFwKICAgICAgcGxhY2Vfb3B0X2Rlc2lnbiBcCiAgICAgIGFkZF90aWVfY2VsbHMgXAogICAgICB0aW1lX2Rlc2lnbiBcCiAgICAgIHNhdmVfZGVzaWduIFwKICAgICAgcmVwb3J0X3Bvd2VyIFwKICAgICAgdmVyaWZ5X3Bvd2VyX2RvbWFpbiBcCiAgICAgIHJ1bl9jbHAgXAogICBdCiAgIHNldCB0YWdzKHByZWN0cykgW2xpc3QgXAogICAgICBzZXRfZGlzdHJpYnV0ZV9ob3N0IFwKICAgICAgc2V0X211bHRpX2NwdV91c2FnZSBcCiAgICAgIGluaXRpYWxpemVfc3RlcCBcCiAgICAgICAgIHNldF9kZXNpZ25fbW9kZSBcCiAgICAgICAgIHNldF9pbG1fdHlwZSBcCiAgICAgICAgIGNsZWFudXBfc3BlY2lmeV9jbG9ja190cmVlIFwKICAgICAgICAgY3JlYXRlX2Nsb2NrX3RyZWVfc3BlYyBcCiAgICAgICAgIHNwZWNpZnlfY2xvY2tfdHJlZSBcCiAgICAgICAgIHNldF91c2VmdWxfc2tld19tb2RlIFwKICAgICAgICAgc2V0X29wdF9tb2RlIFwKICAgICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgICAgc2V0X2RlbGF5X2NhbF9tb2RlIFwKICAgICAgICAgc2V0X2RvbnRfdXNlIFwKICAgICAgb3B0X2Rlc2lnbiBcCiAgICAgIGNrX2Nsb25lX2dhdGUgXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgXQogICBzZXQgdGFncyhjdHMpIFtsaXN0IFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZGVzaWduX21vZGUgXAogICAgICAgICBzZXRfY3RzX21vZGUgXAogICAgICAgICBzZXRfY2NvcHRfbW9kZSBcCiAgICAgICAgIHNldF9uYW5vcm91dGVfbW9kZSBcCiAgICAgIGVuYWJsZV9jbG9ja19nYXRlX2NlbGxzIFwKICAgICAgY2xlYW51cF9zcGVjaWZ5X2Nsb2NrX3RyZWUgXAogICAgICBjcmVhdGVfY2xvY2tfdHJlZV9zcGVjIFwKICAgICAgc3BlY2lmeV9jbG9ja190cmVlIFwKICAgICAgY2xvY2tfZGVzaWduIFwKICAgICAgY2NvcHRfZGVzaWduIFwKICAgICAgZGlzYWJsZV9jbG9ja19nYXRlX2NlbGxzIFwKICAgICAgcnVuX2Nsb2NrX2VjbyBcCiAgICAgIHVwZGF0ZV90aW1pbmcgXAogICAgICB0aW1lX2Rlc2lnbiBcCiAgICAgIHNhdmVfZGVzaWduIFwKICAgICAgcmVwb3J0X3Bvd2VyIFwKICAgICAgdmVyaWZ5X3Bvd2VyX2RvbWFpbiBcCiAgICAgIHJ1bl9jbHAgXAogICBdCiAgIHNldCB0YWdzKHBvc3RjdHMpIFtsaXN0IFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZGVzaWduX21vZGUgXAogICAgICAgICBzZXRfZGVsYXlfY2FsX21vZGUgXAogICAgICAgICBzZXRfYW5hbHlzaXNfbW9kZSBcCiAgICAgICAgIHNldF9vcHRfbW9kZSBcCiAgICAgIG9wdF9kZXNpZ24gXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgXQogICBzZXQgdGFncyhwb3N0Y3RzX2hvbGQpIFtsaXN0IFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZG9udF91c2UgXAogICAgICAgICBzZXRfb3B0X21vZGUgXAogICAgICBvcHRfZGVzaWduIFwKICAgICAgc2F2ZV9kZXNpZ24gXAogICAgICByZXBvcnRfcG93ZXIgXAogICAgICB2ZXJpZnlfcG93ZXJfZG9tYWluIFwKICAgICAgcnVuX2NscCBcCiAgIF0KICAgc2V0IHRhZ3Mocm91dGUpIFtsaXN0IFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfbmFub3JvdXRlX21vZGUgXAogICAgICAgICBhZGRfZmlsbGVyX2NlbGxzIFwKICAgICAgcm91dGVfc2Vjb25kYXJ5X3BnX25ldHMgXAogICAgICBjaGVja19wbGFjZSBcCiAgICAgIHJvdXRlX2Rlc2lnbiBcCiAgICAgIHJ1bl9jbG9ja19lY28gXAogICAgICBzcHJlYWRfd2lyZXMgXAogICAgICBpbml0aWFsaXplX3RpbWluZyBcCiAgICAgIHRpbWVfZGVzaWduIFwKICAgICAgc2F2ZV9kZXNpZ24gXAogICAgICByZXBvcnRfcG93ZXIgXAogICAgICB2ZXJpZnlfcG93ZXJfZG9tYWluIFwKICAgICAgcnVuX2NscCBcCiAgIF0KICAgc2V0IHRhZ3MocG9zdHJvdXRlKSBbbGlzdCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgICAgc2V0X2V4dHJhY3RfcmNfbW9kZSBcCiAgICAgICAgIHNldF9hbmFseXNpc19tb2RlIFwKICAgICAgICAgc2V0X2RlbGF5X2NhbF9tb2RlIFwKICAgICAgYWRkX21ldGFsZmlsbCBcCiAgICAgIG9wdF9kZXNpZ24gXAogICAgICB0cmltX21ldGFsZmlsbCBcCiAgICAgIHNhdmVfZGVzaWduIFwKICAgICAgcmVwb3J0X3Bvd2VyIFwKICAgICAgdmVyaWZ5X3Bvd2VyX2RvbWFpbiBcCiAgICAgIHJ1bl9jbHAgXAogICBdCiAgIHNldCB0YWdzKHBvc3Ryb3V0ZV9ob2xkKSBbbGlzdCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2RvbnRfdXNlX21vZGUgXAogICAgICAgICBzZXRfb3B0X21vZGUgXAogICAgICBvcHRfZGVzaWduIFwKICAgICAgdHJpbV9tZXRhbGZpbGwgXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgXQogICBzZXQgdGFncyhzaWdub2ZmKSBbbGlzdCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgaW5pdGlhbGl6ZV90aW1pbmcgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfYW5hbHlzaXNfbW9kZSBcCiAgICAgICAgIHNldF9leHRyYWN0X3JjX21vZGUgXAogICAgICBleHRyYWN0X3JjIFwKICAgICAgZHVtcF9zcGVmIFwKICAgICAgc2lnbm9mZl90aW1lX2Rlc2lnbiBcCiAgICAgIHRpbWVfZGVzaWduX3NldHVwIFwKICAgICAgdGltZV9kZXNpZ25faG9sZCBcCiAgICAgIHN0cmVhbV9vdXQgXAogICAgICBzYXZlX29hX2Rlc2lnbiBcCiAgICAgIGNyZWF0ZV9pbG0gXAogICAgICBzdW1tYXJ5X3JlcG9ydCBcCiAgICAgIHZlcmlmeV9jb25uZWN0aXZpdHkgXAogICAgICB2ZXJpZnlfZ2VvbWV0cnkgXAogICAgICB2ZXJpZnlfbWV0YWxfZGVuc2l0eSBcCiAgICAgIHZlcmlmeV9wcm9jZXNzX2FudGVubmEgXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgCiAgIF0KICAgc2V0IHRhZ3MoZmVlZHRocm91Z2gpIFtsaXN0IFwKICAgICAgaW5pdGlhbGl6ZV90aW1pbmcgXAogICAgICBsb2FkX2NwZiBcCiAgICAgIGNvbW1pdF9jcGYgXAogICAgICBydW5fY2xwX2luaXQgXAogICAgICBzYXZlX2luaXRfZGJzIFwKICAgICAgc2V0X2J1ZGdldGluZ19tb2RlIFwKICAgICAgdXBkYXRlX2NvbnN0cmFpbnRfbW9kZSBcCiAgICAgIHNldF9wdG5fdXNlcl9jbnNfZmlsZSBcCiAgICAgIHNldF9wbGFjZV9tb2RlIFwKICAgICAgc2V0X3Byb3RvX21vZGVsIFwKICAgICAgcGxhY2VfZGVzaWduIFwKICAgICAgdGltZV9kZXNpZ24gXAogICAgICBzYXZlX3BsYWNlX2RicyBcCiAgICAgIGluc2VydF9wdG5fZmVlZHRocm91Z2ggXAogICAgICB0cmlhbF9yb3V0ZSBcCiAgICAgIHRyaWFsX3JvdXRlX3RpbWVfZGVzaWduIFwKICAgXQogICBzZXQgdGFncyhhc3NpZ25fcGluKSBbbGlzdCBcCiAgICAgIGFzc2lnbl9wdG5fcGlucyBcCiAgICAgIGNoZWNrX3Bpbl9hc3NpZ25tZW50IFwKICAgICAgcmVwb3J0X3VuYWxpZ25lZF9uZXRzIFwKICAgICAgdHJpYWxfcm91dGUgXAogICBdCiAgIHNldCB0YWdzKG1vZGVsX2dlbikgW2xpc3QgXAogICAgICBjcmVhdGVfcHNfcGVyX21pY3Jvbl9tb2RlbCBcCiAgICAgIGlkZW50aWZ5X3Byb3RvX21vZGVsIFwKICAgICAgcmVwb3J0X3Byb3RvX21vZGVsIFwKICAgICAgc2V0SWxtTW9kZSBcCiAgICAgIGNyZWF0ZV9wcm90b19tb2RlbCBcCiAgICAgIGNyZWF0ZV9mbGV4ZmlsbGVyX3JvdXRlX2Jsb2NrYWdlIFwKICAgICAgcmVwb3J0X3Byb3RvX21vZGVsIFwKICAgICAgc2F2ZURlc2lnbiBcCiAgIF0KICAgc2V0IHRhZ3MocGFydGl0aW9uKSBbbGlzdCBcCiAgICAgIHRpbWVfZGVzaWduX3Byb3RvIFwKICAgICAgc2V0X3BzcG1fdmFycyBcCiAgICAgIHNldF9idWRnZXRpbmdfbW9kZSBcCiAgICAgIHNldF9wdG5fcGluX3N0YXR1cyBcCiAgICAgIGRlcml2ZV90aW1pbmdfYnVkZ2V0IFwKICAgICAgc2F2ZV9idWRnZXRfZGJzIFwKICAgICAgcnVuX2NscCBcCiAgICAgIHBhcnRpdGlvbiBcCiAgICAgIHNhdmVfcGFydGl0aW9uIFwKICAgXQogICBzZXQgdGFncyhhc3NlbWJsZSkgW2xpc3QgXAogICAgICBhc3NlbWJsZV9kZXNpZ24gXAogICAgICBzcGVjaWZ5X2lsbSBcCiAgICAgIGxvYWRfaWxtX25vbl9zZGNfZmlsZSBcCiAgICAgIGxvYWRfY3BmIFwKICAgICAgY29tbWl0X2NwZiBcCiAgICAgIGluaXRpYWxpemVfdGltaW5nIFwKICAgICAgdXBkYXRlX3RpbWluZyBcCiAgICAgIHByZV9zaWdub2ZmX2Vjb192ZXJpZnlfY29ubmVjdGl2aXR5IFwKICAgICAgcHJlX3NpZ25vZmZfZWNvX3ZlcmlmeV9nZW9tZXRyeSBcCiAgICAgIHNldF9tb2R1bGVfdmlldyBcCiAgICAgIGRlbGV0ZV9maWxsZXJfY2VsbHMgXAogICAgICBvcHRfZGVzaWduIFwKICAgICAgZXh0cmFjdF9yYyBcCiAgICAgIHNpZ25vZmZfb3B0X2Rlc2lnbiBcCiAgICAgIHNpZ25vZmZfdGltZV9kZXNpZ24gXAogICAgICBhZGRfZmlsbGVyX2NlbGxzIFwKICAgICAgZWNvX3JvdXRlIFwKICAgICAgcG9zdF9zaWdub2ZmX2Vjb192ZXJpZnlfY29ubmVjdGl2aXR5IFwKICAgICAgcG9zdF9zaWdub2ZmX2Vjb192ZXJpZnlfZ2VvbWV0cnkgXAogICBdCgogICBzZXQgb3AgW29wZW4gaW52cy5hdXRvLnRjbCB3XQoKICAgcHV0cyAkb3AgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKICAgcHV0cyAkb3AgIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENETlMgRk9VTkRBVElPTiBGTE9XIgogICBwdXRzICRvcCAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIGZsb3cgdGFncyBmaWxlLiAgRWFjaCBmbG93IHN0ZXAgaXMgYSBzZXF1ZW5jZSBvZiBjb21tYW5kcyBhbmQiIAogICBwdXRzICRvcCAiIyBlYWNoIGNvbW1hbmQgaGFzIGEgdGFnIGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgZWFjaCB0YWcgaGFzIGZvdXIgYXR0cmlidXRlczoiCiAgIHB1dHMgJG9wICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgIHB1dHMgJG9wICIjICAgICAgIHByZV90Y2wgLT4gZmlsZSB0byBiZSBzb3VyY2VkIHByaW9yIHRvIHRoZSBjb21tYW5kIgogICBwdXRzICRvcCAiIyAgICAgIHBvc3RfdGNsIC0+IGZpbGUgdG8gYmUgc291cmNlZCBhZnRlciB0aGUgY29tbWFuZCIKICAgcHV0cyAkb3AgIiMgICByZXBsYWNlX3RjbCAtPiBmaWxlIHRvIGJlIHNvdXJjZWQgaW5zdGVhZCBvZiB0aGUgY29tbWFuZCIKICAgcHV0cyAkb3AgIiMgICAgICAgICAgc2tpcCAtPiBza2lwIHRoZSBjb21tYW5kIGVudGlyZWx5ICh0cnVlIHwgZmFsc2UpIgogICBwdXRzICRvcCAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBwdXRzICRvcCAiIyBUaGVzZSBhdHRyaWJ1dGVzIHByb3ZpZGUgbW9yZSBncmFudWxhcml0eSB0aGF0IHRoZSBwbHVnLWlucyBhbmQgYXJlIGludGVuZGVkIHRvIgogICBwdXRzICRvcCAiIyBhbGxvdyBmb3IgZmxvdyBjdXN0b21pemF0aW9uIGF0IGEgdmVyeSBkZXRhaWxlZCBsZXZlbC4gIFRvIGVuYWJsZSwgc2ltcGx5IHVuY29tbWVudCIKICAgcHV0cyAkb3AgIiMgdGhlIHRhZywgYXNzaWduIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSwgYW5kIG1ha2Ugc3VyZSB0aGlzIGZpbGUgZ2V0cyBzb3VyY2VkIgogICBwdXRzICRvcCAiIyBmcm9tIHRoZSBzZXR1cC50Y2wgb3IgaW5ub3Z1c19jb25maWcudGNsLiAgS2VlcCBpbiBtaW5kLCB0aGVzZSB0YWdzIHdpbGwgb25seSIKICAgcHV0cyAkb3AgIiMgYmUgZXZhbHVhdGVkIGlmIHRoZSBjb21tYW5kIHRoZXkgYXJlIGFzc29jaWF0ZWQgaXMgZXhlY3V0ZWQgYXMgcGFydCBvZiB0aGUgZmxvdyIKICAgcHV0cyAkb3AgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AgIiMgICAgICAgICB2ZXJib3NlIC0+IFByaW50IHRhZyByZWxhdGVkIGNvbW1lbnRzIGZvciBpbXBvcnRlZCB0YWdzIgogICBwdXRzICRvcCAiIyB2ZXJib3NpdHlfbGV2ZWwgLT4gUHJpbnQgdGFnIHJlbGF0ZWQgY29tbWVudHMgZm9yIEFMTCBwb3NzaWJsZSB0YWdzIFxbTE9XIHwgSElHSFxdIgogICBwdXRzICRvcCAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgoKICAgZm9yZWFjaCBzdGVwICRzdGVwcyB7CiAgICAgIGZvcmVhY2ggY29tbWFuZCAkdGFncygkc3RlcCkgewogICAgICAgICBmb3JlYWNoIHRhZyAicHJlX3RjbCBwb3N0X3RjbCByZXBsYWNlX3RjbCBza2lwIiB7CiAgICAgICAgICAgIHNldCBzdHJpbmcgIiNzZXQgdmFycygkc3RlcCwkY29tbWFuZCwkdGFnKSIKICAgICAgICAgICAgc2V0IGxlbmd0aCBbc3RyaW5nIGxlbmd0aCAkc3RyaW5nXQogICAgICAgICAgICBzZXQgZGlmZiBbZXhwciA2MC0kbGVuZ3RoXQogICAgICAgICAgICBzZXQgc3BhY2VzIFtzdHJpbmcgcmVwZWF0ICIgIiAkZGlmZl0KICAgICAgICAgICAgaWYgeyR0YWcgPT0gInNraXAifSB7CiAgICAgICAgICAgICAgIHB1dHMgJG9wIFtmb3JtYXQgIiVzJXMlcyIgJHN0cmluZyAkc3BhY2VzICI8dHJ1ZSBvciBmYWxzZT4iXQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBwdXRzICRvcCBbZm9ybWF0ICIlcyVzJXMiICRzdHJpbmcgJHNwYWNlcyAiPGZpbGU+Il0KICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0KICAgICAgcHV0cyAkb3AgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgfQoKfQoKcHJvYyBwYWQge2Ege2FkZCAwfX0gewogICAKICAgaWYge1tleHByIFtzdHJpbmcgbGVuZ3RoICRhXSArICRhZGRdIDwgNn0gewogICAgICByZXR1cm4gIlx0XHRcdFx0IgogICB9IGVsc2VpZiB7W2V4cHIgW3N0cmluZyBsZW5ndGggJGFdICsgJGFkZF0gPCAxMn0geyAKICAgICAgcmV0dXJuICJcdFx0XHQiCiAgIH0gZWxzZWlmIHtbZXhwciBbc3RyaW5nIGxlbmd0aCAkYV0gKyAkYWRkXSA8IDE4fSB7IAogICAgICByZXR1cm4gIlx0XHQiCiAgIH0gZWxzZWlmIHtbZXhwciBbc3RyaW5nIGxlbmd0aCAkYV0gKyAkYWRkXSA8IDI0fSB7IAogICAgICByZXR1cm4gIlx0IgogICB9Cgp9Cgpwcm9jIGZvcm1hdF9zdHJpbmcge2EgYiB7bGFyZ2UgMH19IHsKCiAgIHNldCBhZGQgMAoKICAgaWYge1tyZWdleHAgIiMiICRhXX0gewogICAgICByZWdzdWIgIiMiICRhICIiIGEKICAgICAgc2V0IGFkZCAxCiAgIH0KCiMgICBwdXRzICIkYSwgW3N0cmluZyBsZW5ndGggJGFdIgoKICAgaWYgeyRsYXJnZX0gewogICAgICBpZiB7W2V4cHIgW3N0cmluZyBsZW5ndGggJGFdICsgJGFkZF0gPCA0fSB7CiAgICAgICAgIHNldCB0YWJzICJcdFx0XHRcdFx0XHRcdFx0XHRcdCIKICAgICAgfSBlbHNlaWYge1tleHByIFtzdHJpbmcgbGVuZ3RoICRhXSArICRhZGRdIDwgOH0geyAKICAgICAgICAgc2V0IHRhYnMgIlx0XHRcdFx0XHRcdFx0XHRcdCIKICAgICAgfSBlbHNlaWYge1tleHByIFtzdHJpbmcgbGVuZ3RoICRhXSArICRhZGRdIDwgMTJ9IHsgCiAgICAgICAgIHNldCB0YWJzICJcdFx0XHRcdFx0XHRcdFx0IgogICAgICB9IGVsc2VpZiB7W2V4cHIgW3N0cmluZyBsZW5ndGggJGFdICsgJGFkZF0gPCAxNn0geyAKICAgICAgICAgc2V0IHRhYnMgIlx0XHRcdFx0XHRcdFx0IgogICAgICB9IGVsc2VpZiB7W2V4cHIgW3N0cmluZyBsZW5ndGggJGFdICsgJGFkZF0gPCAyMH0geyAKICAgICAgICAgc2V0IHRhYnMgIlx0XHRcdFx0XHRcdCIKICAgICAgfSBlbHNlaWYge1tleHByIFtzdHJpbmcgbGVuZ3RoICRhXSArICRhZGRdIDwgMjR9IHsgCiAgICAgICAgIHNldCB0YWJzICJcdFx0XHRcdFx0IgogICAgICB9IGVsc2VpZiB7W2V4cHIgW3N0cmluZyBsZW5ndGggJGFdICsgJGFkZF0gPCAyOH0geyAKICAgICAgICAgc2V0IHRhYnMgIlx0XHRcdFx0IgogICAgICB9IGVsc2VpZiB7W2V4cHIgW3N0cmluZyBsZW5ndGggJGFdICsgJGFkZF0gPCAzMn0geyAKICAgICAgICAgc2V0IHRhYnMgIlx0XHRcdCIKICAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0IHRhYnMgIlx0XHQiCiAgICAgIH0KICAgfSBlbHNlIHsKICAgICAgaWYge1tleHByIFtzdHJpbmcgbGVuZ3RoICRhXSArICRhZGRdIDwgNH0gewogICAgICAgICBzZXQgdGFicyAiXHRcdFx0XHRcdFx0IgogICAgICB9IGVsc2VpZiB7W2V4cHIgW3N0cmluZyBsZW5ndGggJGFdICsgJGFkZF0gPCA4fSB7IAogICAgICAgICBzZXQgdGFicyAiXHRcdFx0XHRcdCIKICAgICAgfSBlbHNlaWYge1tleHByIFtzdHJpbmcgbGVuZ3RoICRhXSArICRhZGRdIDwgMTJ9IHsgCiAgICAgICAgIHNldCB0YWJzICJcdFx0XHRcdCIKICAgICAgfSBlbHNlaWYge1tleHByIFtzdHJpbmcgbGVuZ3RoICRhXSArICRhZGRdIDwgMTZ9IHsgCiAgICAgICAgIHNldCB0YWJzICJcdFx0XHQiCiAgICAgIH0gZWxzZWlmIHtbZXhwciBbc3RyaW5nIGxlbmd0aCAkYV0gKyAkYWRkXSA8IDIwfSB7IAogICAgICAgICBzZXQgdGFicyAiXHRcdCIKICAgICAgfSBlbHNlIHsKICAgICAgICAgc2V0IHRhYnMgIlx0IgogICAgICB9CiAgIH0KCiAgICMgSGFuZGxlIHRoZSBlbXB0eSBzdHJpbmcgY29ycmVjdGx5CiAgIGlmIHskYiA9PSB7fX0geyBzZXQgYiB7e319IH0KCiAgIGlmIHskYWRkfSB7CiAgICAgIHJldHVybiBbZm9ybWF0ICIjc2V0ICRhJXMlcyIgJHRhYnMgJGJdIAogICB9IGVsc2UgewogICAgICByZXR1cm4gW2Zvcm1hdCAic2V0ICRhJXMlcyIgJHRhYnMgJGJdIAogICB9Cn0KCnByb2MgZ2V0X2xpbmVfbWF0Y2gge3BhdHRlcm4gZmlsZSB7bGFzdCAxfX0gewoKICAgc2V0IGlwIFtvcGVuICRmaWxlIHJdCgogICB3aGlsZSB7W2dldHMgJGlwIGxpbmVdPj0wfSB7CiAgICAgIGlmIHtbcmVnZXhwICIkcGF0dGVybiIgJGxpbmVdPjB9IHsKICAgICAgICBpZiB7JGxhc3R9IHsKICAgICAgICAgICBzZXQgbWF0Y2ggJGxpbmUKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBsYXBwZW5kIG1hdGNoICRsaW5lCiAgICAgICAgIH0KICAgICAgfQogICB9CiAgIGlmIHtbaW5mbyBleGlzdHMgbWF0Y2hdfSB7IAogICAgICByZXR1cm4gJG1hdGNoCiAgIH0KfQoKc2V0IG9wMSBbb3BlbiBzZXR1cC5hdXRvLnRjbCB3XQpzZXQgb3AyIFtvcGVuIGlubm92dXNfY29uZmlnLmF1dG8udGNsIHddCgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRE5TIEZPVU5EQVRJT04gRkxPVyIKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMSAiIyBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIGZsb3cgc2V0dXAgZmlsZS4gIEl0IGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IGRlc2lnbiIKcHV0cyAkb3AxICIjIGRhdGEgdG8gZHJpdmUgYWxsIHRoZSBDRE5TIGZvdW5kYXRpb24gZmxvd3MuIEVhY2ggZmxvdyBjYW4gYWxzbyBoYXZlIGFuIgpwdXRzICRvcDEgIiMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGVmaW5lIGZsb3cgc3BlY2lmaWMgaW5mb3JtYXRpb246IiAKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMSAiIyBJTk5PVlVTIC0+ICAgaW5ub3Z1c19jb25maWcudGNsIChmb3IgZmxhdCBhbmQgaGllciBpbXBsZW1lbnRhdGlvbiBmbG93cykiCnB1dHMgJG9wMSAiIyAgICAgICAgICsgICAgIGxwX2NvbmZpZy50Y2wgKGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGZsYXQgYW5kIGhpZXIgbHAgZmxvd3MpIgojcHV0cyAkb3AxICIjICAgICAgICAgLT4gcHJvdG9fY29uZmlnLnRjbCAoZm9yIHRoZSBwcm90b3R5cGluZyBmbG93KSIKI3B1dHMgJG9wMSAiIyAgICAgRVRTIC0+ICAgZXRzX2NvbmZpZy50Y2wiCiNwdXRzICRvcDEgIiMgICAgIEVQUyAtPiAgIGVwc19jb25maWcudGNsIgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIEEgc2luZ2xlIHNldHVwLnRjbCBpcyBhbGwgdGhhdCBpcyByZXF1aXJlZC4gIFRoZXNlIGFkZGl0aW9uYWwgZmlsZXMgYXJlIHRvIGVuYWJsZSAiCnB1dHMgJG9wMSAiIyB0aGUgc2hhcmluZyBvZiBhIHNldHVwLnRjbCAoZGVzaWduIGRhdGEpIGFtb25nc3QgZGVzaWduIGdyb3VwcyB3aGlsZSBhbHNvIGFsbG93aW5nIiAKcHV0cyAkb3AxICIjIGRpZmZlcmVudCBmbG93IG9wdGlvbnMgdG8gYmUgc2V0IGluIHRoZSAqX2NvbmZpZy5jbCBmaWxlcyBmb3IgZGlmZmVyZW50IGJsb2NrcyBvciBydW5zIgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICIiCgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTk5PVlVTIEZPVU5EQVRJT04gRkxPVyIKcHV0cyAkb3AyICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiIyBUaGlzIGlzIHRoZSBJTk5PVlVTIGZvdW5kYXRpb24gZmxvdyBjb25maWd1cmF0aW9uIGZpbGUuICBJdCBjb250YWlucyBhbGwgdGhlIG5lY2Vzc2FyeSBmbG93IgpwdXRzICRvcDIgIiMgb3B0aW9ucyB0byBkcml2ZSB0aGUgQ0ROUyBmbGF0IGFuZC9vciBoaWVyIGltcGxlbWVudGF0aW9uIGZsb3dzLiAiCnB1dHMgJG9wMiAiIyBGb3IgbG93IHBvd2VyIGZsb3dzLCBhbiBvcHRpb25hbC9hZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZmlsZSAobHBfY29uZmlnLnRjbCkgY2FuIGJlICIKcHV0cyAkb3AyICIjIHVzZWQgdG8gZW5hYmxlIGxvdyBwb3dlciBmb3VuZGF0aW9uIGZsb3cgZmVhdHVyZXMgYW5kIGRlZmluZSBkb21haW4gc3BlY2lmaWMgaW5mb3JtYXRpb24uIgpwdXRzICRvcDIgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKaWYgeyFbaW5mbyBleGlzdHMgdmFycyh2ZXJzaW9uKV19IHsKICAgIHNldCB2YXJzKHZlcnNpb24pIDE3LjEuMAp9CmlmIHtbbGluZGV4IFtzcGxpdCAkdmFycyh2ZXJzaW9uKSAiLiJdICAwXSA8PSAxMCAmJiBbbGxlbmd0aCBbYWxsX2FuYWx5c2lzX3ZpZXdzXV0gPT0gMn0gewogICBwdXRzICJDb252ZXJ0aW5nIGRlZmF1bHQgdGltaW5nIGVudmlyb25tZW50IHRvIE1NTUMiIAogICBjb252Mm1tbWMKfQoKZ2xvYmFsIHJkYV9JbnB1dAoKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAiIyBUaGUgdmFyaWFibGUgdmFycyh2ZXJzaW9uKSB0ZWxscyB0aGUgY29kZSBnZW5lcmF0b3Igd2hpY2ggdmVyc2lvbiBvZiBJTk5PVlVTIHlvdSB3aWxsIGJlIgpwdXRzICRvcDEgIiMgdGFyZ2V0aW5nLiIKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMSAic2V0IHZhcnModmVyc2lvbikgJHZhcnModmVyc2lvbikiCiNwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKI3B1dHMgJG9wMSAiIyBGb3Igbm9uLWNvZGdlbiBmbG93LCB0aGUgZm9sbG93aW5nIG11c3QgYmUgc2V0IC0gaXQgc2hvdWxkIHBvaW50IHRvIHRoZSBmb3VuZGF0aW9uICIgCiNwdXRzICRvcDEgIiMgZmxvdyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKI3B1dHMgJG9wMSAiI3NldCB2YXJzKHNjcmlwdF9yb290KSBTQ1JJUFRTIgojcHV0cyAkb3AxICIiCiNwdXRzICRvcDIgIiMgVGhlIHZhcnMoZmxvdykgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIGZsb3cgdG8gcnVuLiBJZiBub3Qgc2V0LCIgCiNwdXRzICRvcDIgIiMgbW1tYyB3aWxsIGJlIHVzZWQuICBTdXBwb3J0ZWQgdmFsdWVzIGFyZToiCiNwdXRzICRvcDIgIiMgICAgLSBkZWZhdWx0IChtaW5tYXggdGltaW5nKSIKI3B1dHMgJG9wMiAiIyAgICAtIHByX21tbWMgKG1pbm1heCB0aW1pbmcgcHJlLXJvdXRlLCBtbW1jIHRpbWluZyBwb3N0LXJvdXRlKSIKI3B1dHMgJG9wMiAiIyAgICAtIG1tbWMgICAgKG1tbWMgdGltaW5nKSIKI3B1dHMgJG9wMiAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgojaWYge1tpbmZvIGV4aXN0cyA6OkNQRjo6Y3BmQ29tbWl0dGVkXX0gewojICAgcHV0cyAkb3AyICJzZXQgdmFycyhmbG93KSAgICAgbW1tYyIKI30gZWxzZSB7CiMgICBwdXRzICRvcDIgInNldCB2YXJzKGZsb3cpICAgICBkZWZhdWx0IgojfQpwdXRzICRvcDIgInNldCB2YXJzKHBsdWdfZGlyKSBQTFVHL0lOTk9WVVMiCnB1dHMgJG9wMiAic2V0IHZhcnMoZGJzX2RpcikgIERCUyIKcHV0cyAkb3AyICJzZXQgdmFycyhsb2dfZGlyKSAgTE9HIgpwdXRzICRvcDIgInNldCB2YXJzKHJwdF9kaXIpICBSUFQiCnB1dHMgJG9wMiAiIyBZb3UgY2FuIHNldCBhIHJlcG9ydCBkaXJlY3RvcnkgcGVyIHN0ZXAgdXNpbmcgdmFycyg8c3RlcD4scnB0X2RpcikgLi4uIgpwdXRzICRvcDIgIiIKCmlmIHtbaW5mbyBleGlzdHMgcmRhX0lucHV0KHVpX25ldGxpc3QpXX0gewogICBzZXQgdmFycyhuZXRsaXN0KSBbbGlzdF0KICAgZm9yZWFjaCAgZmlsZSAkcmRhX0lucHV0KHVpX25ldGxpc3QpIHsKICAgICAgbGFwcGVuZCB2YXJzKG5ldGxpc3QpIFtmaWxlIG5vcm1hbGl6ZSAkZmlsZV0KICAgfSAgCn0gZWxzZSB7CiAgIGNhdGNoIHtzZXQgdmFycyhuZXRsaXN0KSBbZmlsZSBub3JtYWxpemUgW2xpbmRleCBbZ2V0X2xpbmVfbWF0Y2ggIlJlYWRpbmcgbmV0bGlzdCBmaWxlIiBbZ2V0TG9nRmlsZU5hbWVdXSAzXV19Cn0KY2F0Y2gge3NldCB2YXJzKGZwX2ZpbGUpIFtmaWxlIG5vcm1hbGl6ZSBbbGluZGV4IFtnZXRfbGluZV9tYXRjaCAiUmVhZGluZyBmbG9vcnBsYW4iIFtnZXRMb2dGaWxlTmFtZV1dIDRdXX0KI2NhdGNoIHtzZXQgdmFycyhjdHNfc3BlYykgW3JlZ3N1YiAtYWxsICInIiAgW2xpbmRleCBbZ2V0X2xpbmVfbWF0Y2ggIlJlYWRpbmcgY2xvY2sgdHJlZSBzcGVjIGZpbGUiIFtnZXRMb2dGaWxlTmFtZV1dIDVdICIiXX0KI2NhdGNoIHtzZXQgdmFycyhjdHNfc3BlYykgW3JlZ3N1YiAtYWxsICJcIiIgJHZhcnMoY3RzX3NwZWMpXSAiIn0Kc2V0IHZhcnMoY3RzX3NwZWMpICIiCnNldCBzcGVjT3B0IFtja0dldENrU3BlY09wdGlvbl0KIGZvciB7IHNldCBpIDAgfSB7ICRpIDwgW2xsZW5ndGggJHNwZWNPcHRdIH0geyBpbmNyIGkgfSB7CiAgIGlmIHsgW3N0cmluZyBtYXRjaCAtbm9jYXNlIFtsaW5kZXggJHNwZWNPcHQgJGldICItZmlsZSIgXSB8fCAgW3N0cmluZyBtYXRjaCAtbm9jYXNlIFtsaW5kZXggJHNwZWNPcHQgJGldICItc3BlY0ZpbGUiIF0gIH0gewogICAgICBpbmNyIGkKICAgICAgc2V0IGNsa0ZpbGUgW2xpbmRleCAkc3BlY09wdCAkaV0KICAgICAgaWYgeyBbZmlsZSBleGlzdHMgJGNsa0ZpbGUgXSB9IHsKICAgICAgICAgaWYgeyBbbHNlYXJjaCAtZXhhY3QgJHZhcnMoY3RzX3NwZWMpICRjbGtGaWxlXSA9PSAtMSB9IHsKICAgICAgICAgICAgICBsYXBwZW5kIHZhcnMoY3RzX3NwZWMpIFtmaWxlIG5vcm1hbGl6ZSAkY2xrRmlsZV0KICAgICAgICAgfQogICAgICB9CiAgIH0KfQoKZm9yZWFjaCBvcHRpb24gW2dldERlc2lnbk1vZGUgLXF1aWV0XSB7CiAgIGlmIHtbbGluZGV4ICRvcHRpb24gMF0gPT0gInByb2Nlc3MifSB7CiAgICAgIHNldCB2YXJzKHByb2Nlc3MpIFtsaW5kZXggJG9wdGlvbiAxXW5tCiAgIH0KfQpjYXRjaCB7c2V0IHZhcnMobWF4X3JvdXRlX2xheWVyKSBbZ2V0TWF4Um91dGVMYXllcl19CgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAiIyBEZWZpbmUgZGVzaWduIGRhdGEgLi4uIgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyB2YXJzKGRlc2lnbikgW2RiQ2VsbE5hbWUgW2RiZ1RvcENlbGxdXV0KCmlmIHtbbGluZGV4IFtzcGxpdCAkdmFycyh2ZXJzaW9uKSAiLiJdICAwXSA+IDEwfSB7CiAgIGlmIHtbaW5mbyBleGlzdHMgaW5pdF92ZXJpbG9nXSAmJiAoJGluaXRfdmVyaWxvZyAhPSAiIil9IHsgCiAgICAgc2V0IHZhcnMobmV0bGlzdCkgJGluaXRfdmVyaWxvZwogICB9CiAgIGlmIHtbaW5mbyBleGlzdHMgaW5pdF9vYV9yZWZfbGliXSAmJiAoJGluaXRfb2FfcmVmX2xpYiAhPSAiIil9IHsgCiAgICAgc2V0IHZhcnMob2FfcmVmX2xpYikgJGluaXRfb2FfcmVmX2xpYgogICB9CiMgICAgICBjYXRjaCB7c2V0IHJlc3RvcmVfZGVzaWduIFtnZXRfbGluZV9tYXRjaCAicmVzdG9yZURlc2lnbiIgW2dldExvZ0ZpbGVOYW1lXX0KIyAgICAgIHNldCB2YXJzKG5ldGxpc3RfdHlwZSkgb2EKIyAgICAgIHNldCB2YXJzKG9hX2Rlc2lnbl9saWIpICBbbGluZGV4ICRyZXN0b3JlX2Rlc2lnbiAxXQojICAgICAgc2V0IHZhcnMob2FfZGVzaWduX2NlbGwpIFtsaW5kZXggJHJlc3RvcmVfZGVzaWduIDJdCiMgICAgICBzZXQgdmFycyhvYV9kZXNpZ25fdmlldykgW2xpbmRleCAkcmVzdG9yZV9kZXNpZ24gM10KICAgaWYge1tpbmZvIGV4aXN0cyBpbml0X2Fic3RyYWN0X3ZpZXddICYmICgkaW5pdF9hYnN0cmFjdF92aWV3ICE9ICIiKX0gewogICAgICBzZXQgdmFycyhvYV9hYnN0cmFjdF9uYW1lKSAkaW5pdF9hYnN0cmFjdF92aWV3CiAgIH0KICAgaWYge1tpbmZvIGV4aXN0cyBpbml0X29hX2Rlc2lnbl9saWJdICYmICgkaW5pdF9vYV9kZXNpZ25fbGliICE9ICIiKX0gewogICAgICBzZXQgdmFycyhvYV9kZXNpZ25fbGliKSAkaW5pdF9vYV9kZXNpZ25fbGliCiAgIH0KICAgaWYge1tpbmZvIGV4aXN0cyBpbml0X29hX2Rlc2lnbl9jZWxsXSAmJiAoJGluaXRfb2FfZGVzaWduX2NlbGwgIT0gIiIpfSB7CiAgICAgIHNldCB2YXJzKG9hX2Rlc2lnbl9jZWxsKSAkaW5pdF9vYV9kZXNpZ25fY2VsbAogICB9CiAgIGlmIHtbaW5mbyBleGlzdHMgaW5pdF9vYV9kZXNpZ25fdmlld10gJiYgKCRpbml0X29hX2Rlc2lnbl92aWV3ICE9ICIiKX0gewogICAgICBzZXQgdmFycyhvYV9kZXNpZ25fdmlldykgJGluaXRfb2FfZGVzaWduX3ZpZXcKICAgfQogICBpZiB7W2luZm8gZXhpc3RzIGluaXRfYWJzdHJhY3Rfdmlld10gJiYgKCRpbml0X2Fic3RyYWN0X3ZpZXcgIT0gIiIpfSB7CiAgICAgIHNldCB2YXJzKG9hX2Fic3RyYWN0X25hbWUpICRpbml0X2Fic3RyYWN0X3ZpZXcKICAgfQogICBpZiB7W2luZm8gZXhpc3RzIGluaXRfbGF5b3V0X3ZpZXddICYmICgkaW5pdF9sYXlvdXRfdmlldyAhPSAiIil9IHsKICAgICAgc2V0IHZhcnMob2FfbGF5b3V0X25hbWUpICRpbml0X2xheW91dF92aWV3CiAgIH0KICAgcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKICAgcHV0cyAkb3AxICIjIFZhcmlhYmxlcyBmb3IgT0EgZGVzaWduIGltcG9ydCBhbmQgZXhwb3J0IgogICBwdXRzICRvcDEgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICBpZiB7W2luZm8gZXhpc3RzIHZhcnMob2FfZGVzaWduX2xpYildfSB7CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMobmV0bGlzdF90eXBlKSAgICAgb2EiCiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMob2FfZGVzaWduX2xpYikgICAgJHZhcnMob2FfZGVzaWduX2xpYikiCiAgIH0gZWxzZSB7CiAgICAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKG9hX2Rlc2lnbl9saWIpICAgIDxPQSBkZXNpZ24gbGlicmFyeT4iCiAgIH0KICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKG9hX2Rlc2lnbl9jZWxsKV19IHsKICAgICAgcHV0cyAkb3AxICJzZXQgdmFycyhvYV9kZXNpZ25fY2VsbCkgICAgJHZhcnMob2FfZGVzaWduX2NlbGwpIgogICB9IGVsc2UgewogICAgICBwdXRzICRvcDEgIiNzZXQgdmFycyhvYV9kZXNpZ25fY2VsbCkgICA8T0EgZGVzaWduIGNlbGw+IgogICB9CiAgIGlmIHtbaW5mbyBleGlzdHMgdmFycyhvYV9kZXNpZ25fdmlldyldfSB7CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMob2FfZGVzaWduX3ZpZXcpICAgICR2YXJzKG9hX2Rlc2lnbl92aWV3KSIKICAgfSBlbHNlIHsKICAgICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob2FfZGVzaWduX3ZpZXcpICAgPE9BIGRlc2lnbiB2aWV3PiIKICAgfQogICBwdXRzICRvcDEgIiNzZXQgdmFycyhkYnNfZm9ybWF0KSAgICAgICBvYSIKICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKG9hX3JlZl9saWIpXX0gewogICAgICBwdXRzICRvcDEgInNldCB2YXJzKG9hX3JlZl9saWIpICAgICAgICAkdmFycyhvYV9yZWZfbGliKSIKICAgfSBlbHNlIHsKICAgICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob2FfcmVmX2xpYikgICAgICAgPE9BIHJlZmVyZW5jZSBsaWJyYXJ5PiIKICAgfQogICBpZiB7W2luZm8gZXhpc3RzIHZhcnMob2FfYWJzdHJhY3RfbmFtZSldfSB7CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMob2FfYWJzdHJhY3RfbmFtZSkgICR2YXJzKG9hX2Fic3RyYWN0X25hbWUpIgogICB9IGVsc2UgewogICAgICBwdXRzICRvcDEgIiNzZXQgdmFycyhvYV9hYnN0cmFjdF9uYW1lKSA8T0EgYWJzdHJhY3QgbmFtZT4iCiAgIH0KICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKG9hX2xheW91dF9uYW1lKV19IHsKICAgICAgcHV0cyAkb3AxICJzZXQgdmFycyhvYV9sYXlvdXRfbmFtZSkgICAgJHZhcnMob2FfbGF5b3V0X25hbWUpIgogICB9IGVsc2UgewogICAgICBwdXRzICRvcDEgIiNzZXQgdmFycyhvYV9sYXlvdXRfbmFtZSkgICA8T0EgbGF5b3V0IG5hbWU+IgogICB9CiAgIGlmIHtbaW5mbyBleGlzdHMgdmFycyhuZXRsaXN0KV19IHsKIyAgICAgIHB1dHMgJG9wMSBbZm9ybWF0ICJzZXQgdmFycyhuZXRsaXN0KSVzJXMiIFtwYWQgdmFycyhuZXRsaXN0KV0gJHZhcnMobmV0bGlzdCldCiAgICAgIHB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyB2YXJzKG5ldGxpc3QpIFwiJHZhcnMobmV0bGlzdClcIl0KICAgICAgcHV0cyAkb3AxIFtmb3JtYXRfc3RyaW5nIHZhcnMobmV0bGlzdF90eXBlKSB2ZXJpbG9nXQogICB9CiAgIHB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCn0gZWxzZSB7CiAgIGlmIHtbaW5mbyBleGlzdHMgdmFycyhuZXRsaXN0KV19IHsKIyAgICAgIHB1dHMgJG9wMSBbZm9ybWF0ICJzZXQgdmFycyhuZXRsaXN0KSVzJXMiIFtwYWQgdmFycyhuZXRsaXN0KV0gJHZhcnMobmV0bGlzdCldCiAgICAgIHB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyB2YXJzKG5ldGxpc3QpIFwiJHZhcnMobmV0bGlzdClcIl0KICAgICAgcHV0cyAkb3AxIFtmb3JtYXRfc3RyaW5nIHZhcnMobmV0bGlzdF90eXBlKSB2ZXJpbG9nXQogICB9CiAgIHB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCiAgIHB1dHMgJG9wMSAiIyBWYXJpYWJsZXMgZm9yIE9BIGRlc2lnbiBpbXBvcnQgYW5kIGV4cG9ydCIKICAgcHV0cyAkb3AxICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob2FfZGVzaWduX2xpYikgICAgPE9BIGRlc2lnbiBsaWJyYXJ5PiIKICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob2FfZGVzaWduX2NlbGwpICAgPE9BIGRlc2lnbiBjZWxsPiIKICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob2FfZGVzaWduX3ZpZXcpICAgPE9BIGRlc2lnbiB2aWV3PiIKICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob2FfcmVmX2xpYikgICAgICAgPE9BIHJlZmVyZW5jZSBsaWJyYXJ5PiIKICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob2FfYWJzdHJhY3RfbmFtZSkgPE9BIGFic3RyYWN0IG5hbWU+IgogICBwdXRzICRvcDEgIiNzZXQgdmFycyhvYV9sYXlvdXRfbmFtZSkgICA8T0EgbGF5b3V0IG5hbWU+Igp9CmlmIHtbaW5mbyBleGlzdHMgdmFycyhmcF9maWxlKV19IHsKICAgcHV0cyAkb3AxIFtmb3JtYXRfc3RyaW5nIHZhcnMoZnBfZmlsZSkgJHZhcnMoZnBfZmlsZSldCn0gZWxzZSB7CiAgIHB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyAjdmFycyhmcF9maWxlKSA8Zmxvb3JwbGFuX2ZpbGU+XQp9CnB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyAjdmFycyhvYV9mcCkgPE9BX2Zsb29ycGxhbj5dCnB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyAjdmFycyhkZWZfZmlsZXMpIDxkZWZfZmlsZXM+XQojcHV0cyAkb3AxICIjc2V0IHZhcnMoc2Nhbl9kZWYpICAgICAgIDxzY2FuX2RlZj4iCnB1dHMgJG9wMSAiIyBOT1RFOiB2YXJzKGN0c19zcGVjKSBpcyBvbmx5IHJlcXVpcmVkIGZvciBjdHMgZmxvd3MuIgpwdXRzICRvcDEgIiMgICAgICAgRm9yIGNjb3B0IGZsb3dzLCBpdCBpcyBub3QgcmVxdWlyZWQiCmlmIHtbZmlsZSBleGlzdHMgJHZhcnMoY3RzX3NwZWMpXX0gewogICBwdXRzICRvcDEgW2Zvcm1hdF9zdHJpbmcgdmFycyhjdHNfc3BlYykgXCIkdmFycyhjdHNfc3BlYylcIl0gCn0gZWxzZSB7CiAgIHB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyAjdmFycyhjdHNfc3BlYykgPGN0c19zcGVjPl0KfQppZiB7W2luZm8gZXhpc3RzIHZhcnMocHJvY2VzcyldfSB7CiAgIHB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyB2YXJzKHByb2Nlc3MpICR2YXJzKHByb2Nlc3MpXQp9IGVsc2UgewogICBwdXRzICRvcDEgW2Zvcm1hdF9zdHJpbmcgI3ZhcnMocHJvY2VzcykgPHByb2Nlc3M+XQp9CmlmIHtbaW5mbyBleGlzdHMgdmFycyhtYXhfcm91dGVfbGF5ZXIpXX0gewogICBwdXRzICRvcDEgW2Zvcm1hdF9zdHJpbmcgdmFycyhtYXhfcm91dGVfbGF5ZXIpICR2YXJzKG1heF9yb3V0ZV9sYXllcildCn0gZWxzZSB7CiAgIHB1dHMgJG9wMSBbZm9ybWF0X3N0cmluZyAjdmFycyhtYXhfcm91dGVfbGF5ZXIpIDxtYXhfcm91dGVfbGF5ZXI+XQp9CnB1dHMgJG9wMSAiIyBOT1RFOiBXaGVuIGdlbmVyYXRlX3RyYWNrcyBpcyBzZXQsIHRoZSB0cmFja3MgaW4gdGhlIERFRiBhcmUgaWdub3JlZDsgZXZlbiB0aGUgcGl0Y2giCnB1dHMgJG9wMSAiIyAgICAgICBUbyBnZW5lcmF0ZSBuZXcgdHJhY2tzIGJ1dCBwcmVzZXJ2ZSB0aGUgcGl0Y2gsIHVzZSB2YXJzKGhvbm9yX3BpdGNoKSB0cnVlIgpwdXRzICRvcDEgW2Zvcm1hdF9zdHJpbmcgI3ZhcnMoZ2VuZXJhdGVfdHJhY2tzKSAiPHRydWUgfCBmYWxzZT4iXQpwdXRzICRvcDEgW2Zvcm1hdF9zdHJpbmcgI3ZhcnMoaG9ub3JfcGl0Y2gpICI8dHJ1ZSB8IGZhbHNlPiJdCmlmIHtbaW5mbyBleGlzdHMgcmRhX0lucHV0KHVpX3B3cm5ldCldICYmICgkcmRhX0lucHV0KHVpX3B3cm5ldCkgIT0gIiIpfSB7CiAgIHB1dHMgJG9wMSAic2V0IHZhcnMocG93ZXJfbmV0cykgICBcIiRyZGFfSW5wdXQodWlfcHdybmV0KVwiIgp9IGVsc2UgewogICBwdXRzICRvcDEgIiNzZXQgdmFycyhwb3dlcl9uZXRzKSAgICAgICAgICAgICA8bGlzdCBvZiBwb3dlciBuZXRzPiIKfQppZiB7W2luZm8gZXhpc3RzIHJkYV9JbnB1dCh1aV9nbmRuZXQpXSAmJiAoJHJkYV9JbnB1dCh1aV9nbmRuZXQpICE9ICIiKX0gewogICBwdXRzICRvcDEgInNldCB2YXJzKGdyb3VuZF9uZXRzKSAgXCIkcmRhX0lucHV0KHVpX2duZG5ldClcIiIKfSBlbHNlIHsKICAgcHV0cyAkb3AxICIjc2V0IHZhcnMoZ3JvdW5kX25ldHMpICAgICAgICAgICAgPGxpc3Qgb2YgZ3JvdW5kIG5ldHM+Igp9CnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDEgIiMgRm9yIGhpZXJhcmNoaWNhbCBkZXNpZ25zLCBkZWZpbmUgdmFycyhwYXJ0aXRpb25fbGlzdCkgd2hpY2ggc2hvdWxkIGJlIGEgbGlzdCAiCnB1dHMgJG9wMSAiIyBvZiBhbGwgZGVmaW5lZCBwYXJ0aXRpb25zIChETyBOT1QgSU5DTFVERSBUSEUgVE9QIFBBUlRJVElPTikuIgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIFRvIGFzc2lzdCB0aGUgYnVkZ2V0aW5nIHByb2Nlc3MsIGFsc28gZGVmaW5lIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2ggcGFydGl0aW9uIgpwdXRzICRvcDEgIiMgLSBzZXQgdmFycyg8cGFydGl0aW9uPixjdHNfc3BlYykgPGZpbGU+IgpwdXRzICRvcDEgIiMgLSBzZXQgdmFycyg8cGFydGl0aW9uPixsYXRlbmN5X3NkYykgPGZpbGU+IgpwdXRzICRvcDEgIiMiCnB1dHMgJG9wMSAiIyBUaGVzZSBmaWxlcyBzaG91bGQgY29udGFpbiB0aGUgZXhwZWN0ZWQgY2xvY2sgbGF0ZW5jeSBmb3IgdGhlIGNsb2NrIHRyZWUocykiCnB1dHMgJG9wMSAiIyBGb3IgZXhhbXBsZSwgaWYgcGFydGl0aW9uIEEgaGFzIGFuIGV4cGVjdGVkIGNsb2NrIGxhdGVuY3kgb2YgNTAwcHMgb3V0IG9mIGEgdG90YWwgY2xvY2siCnB1dHMgJG9wMSAiIyBsYXRlbmN5IG9mIDFucywgdGhlIHRvcCBsZXZlbCBjb25zdHJhaW50cyB3b3VsZCBoYXZlICdzZXRfY2xvY2tfbGF0ZW5jeSAxLjAgPGNsb2NrIHBpbj4nIgpwdXRzICRvcDEgIiMgYW5kIEEgd291bGQgaGF2ZSBhIGxhdGVuY3kgc2RjIGZpbGUgY29udGFpbmluZyAnc2V0X2Nsb2NrX2xhdGVuY3kgMC41IDxwdG4gY2xvY2sgcGluPiciCnB1dHMgJG9wMSAiIyBMaWtld2lzZSwgdGhlIHRvcCBsZXZlbCBDVFMgc3BlYyB3b3VsZCBjb250YWluICdNYXhEZWxheSAxbnMnIGFuZCB0aGUgdmFycyhBLGN0c19zcGVjKSIKcHV0cyAkb3AxICIjIHdvdWxkIGNvbnRhaW4gJ01hY3JvTW9kZWwgQS88cHRuIGNsb2NrIHBpbj4gNTAwcHMgNTAwcHMgNTAwcHMgNTAwcHMgMGZGIgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIER1cmluZyBhc3NlbWJseSwgdGhlIGZvdW5kYXRpb24gZmxvdyBkZWZhdWx0cyB0byBhc3NlbWJseSB0aGUgJ3NpZ25vZmYnIGRhdGFiYXNlcyIKcHV0cyAkb3AxICIjIGZyb20gZWFjaCBwYXJ0aXRpb24gc3ViLWRpcmVjdG9yeS4gIFRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgZGF0YWJhc2UgdG8gdXNlIGZvciBhbnkiCnB1dHMgJG9wMSAiIyBwYXJ0aXRpb24gKGluY2x1ZGluZyB0aGUgdG9wKSwgc3BlY2lmeSB0aGUgZm9sbG93aW5nOiIKcHV0cyAkb3AxICIjICAgIC0gdmFycyg8cHRuPixhc3NlbWJsZV9kYnMpICA8cGF0aCB0byBJTk5PVlVTIGRhdGFiYXNlIGRpcmVjdG9yeT4iCnB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDEgIiMgSWYgdmFycyh1c2VfZmxleG1vZGVscykgaXMgc2V0IHRvIHRydWUsIEZsZXhtb2RlbHMgd2lsbCBiZSB1c2VkLiBTb21lIGFkZGl0aW9uYWwiCnB1dHMgJG9wMSAiIyBvcHRpb25zIGZvciBmbGV4bW9kZWwgdXNhZ2UgYXJlOiIKcHV0cyAkb3AxICIjICAgIHNldCB2YXJzKHVzZV9wcm90b19uZXRfZGVsYXlfbW9kZWwpIGZhbHNlIgpwdXRzICRvcDEgIiMgICAgc2V0IHZhcnMoZmxleG1vZGVsX2FzX3B0bikgdHJ1ZSIKcHV0cyAkb3AxICIjICAgIHNldCB2YXJzKGZsZXhtb2RlbF9hcnRfYmFzZWQpIHRydWUiCnB1dHMgJG9wMSAiIyAgICBzZXQgdmFycyhjcmVhdGVfZmxleGZpbGxlcl9ibG9ja2FnZSkgdHJ1ZSIKcHV0cyAkb3AxICIjICAgIHNldCB2YXJzKGVuYWJsZV9ucmdyKSB0cnVlIgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIElmIHZhcnMoaW5zZXJ0X2ZlZWR0aHJvdWdoKSBpcyBzZXQgdG8gdHJ1ZSwgZmVlZHRocm91Z2ggaW5zZXJ0aW9uIHdpbGwgYmUgY2FsbGVkIgpwdXRzICRvcDEgIiMgIGJlZm9yZSBwYXJ0aXRpb25pbmcuIFNvbWUgYWRkaXRpb25hbCBvcHRpb25zIGZvciBwYXJ0aXRpb25pbmcgYXJlOiIKcHV0cyAkb3AxICIjICAgIHNldCB2YXJzKGFidXR0ZWRfZGVzaWduKSB0cnVlIgpwdXRzICRvcDEgIiMgICAgc2V0IHZhcnMocGxhY2VtZW50X2Jhc2VkX3B0bikgdHJ1ZSIKcHV0cyAkb3AxICIjICAgIHNldCB2YXJzKGJ1ZGdldF9tb2RlKSB7IHRyaWFsX2lwbyBnaWdhX29wdCBwcm90b19uZXRfZGVsYXlfbW9kZWwgfSIKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMSAiIyBGbGV4aWxtIGNyZWF0aW9uIGNhbiBiZSBlbmFibGVkIGZvciB0aGUgcGFydGl0aW9ucywgdXNpbmcgdmFycyhlbmFibGVfZmxleGlsbSkgdHJ1ZSIKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMSAiIyBGaW5hbGx5LCBlYWNoIHBhcnRpdGlvbiBjYW4gaGF2ZSBpdHMgb3duIGlubm92dXNfY29uZmlnLnRjbCAoSU5DTFVESU5HIFRIRSBUT1AgUEFSVElUSU9OKS4iCnB1dHMgJG9wMSAiIyBUbyBlbmFibGUgdGhpcywgZGVmaW5lIHZhcnMoPHBhcnRpdGlvbj4sPGlubm92dXNfY29uZmlnX3RjbD4iCnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpzZXQgdmFycyhwYXJ0aXRpb25fbGlzdCkgIiIKZGJGb3JFYWNoQ2VsbFB0biBbZGJHZXQgdG9wXSBwdG4gewogICBsYXBwZW5kIHZhcnMocGFydGl0aW9uX2xpc3QpIFtkYlB0bk5hbWUgJHB0bl0KfQppZiB7JHZhcnMocGFydGl0aW9uX2xpc3QpICE9ICIifSB7CiAgIHB1dHMgJG9wMSAic2V0IHZhcnMocGFydGl0aW9uX2xpc3QpICAgICAgICBcW2xpc3QgJHZhcnMocGFydGl0aW9uX2xpc3QpXF0iCiAgIGZvcmVhY2ggcGFydCAkdmFycyhwYXJ0aXRpb25fbGlzdCkgewogICAgICBwdXRzICRvcDEgIiNzZXQgdmFycygkcGFydCxjdHNfc3BlYykgICAgICAgPHBhcnRpdGlvbiBjdHMgc3BlYyBmaWxlPiIKICAgICAgcHV0cyAkb3AxICIjc2V0IHZhcnMoJHBhcnQsbGF0ZW5jeV9zZGMpICAgIDxwYXJ0aXRpb24gbGF0ZW5jeSBzZGMgZmlsZT4iCiAgICAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKCRwYXJ0LGFzc2VtYmxlX2RicykgICA8ZGF0YWJhc2UgZGlyZWN0b3J5PiIKICAgICAgcHV0cyAkb3AxICIjc2V0IHZhcnMoJHBhcnQsaWxtX2RpcikgICAgICAgIDxwYXRoIHRvIElMTSBkaXJldG9yeT4iCiAgICAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKCRwYXJ0LGxlZl9maWxlKSAgICAgICA8cGF0aCB0byBMRUYgZmlsZT4iCiAgICAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKCRwYXJ0LGlubm92dXNfY29uZmlnX3RjbCkgPHBhcnRpdGlvbiBzcGVjaWZpYyBpbm5vdnVzX2NvbmZpZy50Y2w+IgogICB9Cn0gZWxzZSB7CiAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKHBhcnRpdGlvbl9saXN0KSAgICAgICAgICAgICA8bGlzdCBvZiBwYXJ0aXRpb25zPiIKICAgcHV0cyAkb3AxICIjc2V0IHZhcnMoPHBhcnRpdGlvbj4sY3RzX3NwZWMpICAgICAgIDxwYXJ0aXRpb24gY3RzIHNwZWMgZmlsZT4iCiAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKDxwYXJ0aXRpb24+LGxhdGVuY3lfc2RjKSAgICA8cGFydGl0aW9uIGxhdGVuY3kgc2RjIGZpbGU+IgogICBwdXRzICRvcDEgIiNzZXQgdmFycyg8cGFydGl0aW9uPixhc3NlbWJsZV9kYnMpICAgPGRhdGFiYXNlIGRpcmVjdG9yeT4iCiAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKDxwYXJ0aXRpb24+LGlsbV9kaXIpICAgICAgICA8cGF0aCB0byBJTE0gZGlyZXRvcnk+IgogICBwdXRzICRvcDEgIiNzZXQgdmFycyg8cGFydGl0aW9uPixsZWZfZmlsZSkgICAgICAgPHBhdGggdG8gTEVGIGZpbGU+IgogICBwdXRzICRvcDEgIiNzZXQgdmFycyg8cGFydGl0aW9uPixpbm5vdnVzX2NvbmZpZ190Y2wpIDxwYXJ0aXRpb24gc3BlY2lmaWMgaW5ub3Z1c19jb25maWcudGNsPiIKfQoKaWYgeyghW2NhdGNoIHtkYkdldCB0b3AuaXNQcm90b01vZGVsQ29tbWl0dGVkfSB2YWxdKSAmJiAkdmFsfSB7CiAgIHB1dHMgJG9wMSAic2V0IHZhcnModXNlX2ZsZXhtb2RlbHMpIHRydWUiCn0gZWxzZSB7CiAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKHVzZV9mbGV4bW9kZWxzKSA8Ym9vbGVhbj4iCn0KCnB1dHMgJG9wMSAiIgoKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDEgIiMgT3B0aW9uYWxseSBkZWZpbmUgdXNlciBJTE1zIHRvIGJlIHNwZWNpZmllZCBkdXJpbmcgdGhlIGZsb3cuIFRoZXNlIHdpbGwgYmUgc3BlY2lmaWVkICIKcHV0cyAkb3AxICIjIGR1cmluZyB0aGUgZmxhdCBpbml0IHN0ZXAgYW5kIHRoZSBoaWVyYXJjaGljYWwgcGFydGl0aW9uaW5nIHN0ZXAuIFRoZSBJTE1zIHNob3VsZCIKcHV0cyAkb3AxICIjIG5vdCBiZSBoaWVyYXJoaWNhbCBwYXJ0aXRpb25zICh0aGV5IGFyZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkuICBTZWUgYmVsb3cgZm9yICIKcHV0cyAkb3AxICIjIGhhbmRsaW5nIHBhcnRpdGlvbiBJTE1zIGR1cmluZyBwb3N0IGFzc2VtYmx5IGNsb3N1cmUuIgpwdXRzICRvcDEgIiMgLSB2YXJzKGlsbV9saXN0KSAgPGxpc3Qgb2YgaWxtIG1vZHVsZXM+IgpwdXRzICRvcDEgIiMgLSB2YXJzKDxpbG0+LGlsbV9kaXIpICA8cGF0aCB0byBJTE0gZGlyZXRvcnk+IgpwdXRzICRvcDEgIiMgLSB2YXJzKDxpbG0+LGxlZl9maWxlKSA8cGF0aCB0byBMRUYgZmlsZT4iCnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICIjIHNldCB2YXJzKGlsbV9saXN0KSBcW2xpc3RcXSIKaWYge1tpbmZvIGV4aXN0cyByZGFfSW5wdXQodWlfaWxtZGlyKV0gJiYgKCRyZGFfSW5wdXQodWlfaWxtZGlyKSAhPSAiIil9IHsKICAgc2V0IGlsbV9saXN0IFtsaXN0XQogICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICRyZGFfSW5wdXQodWlfaWxtZGlyKV19IHtpbmNyIGl9IHsKICAgICAgc2V0IGlsbSBbbGluZGV4ICRyZGFfSW5wdXQodWlfaWxtZGlyKSAkaV0KICAgICAgaW5jciBpCiAgICAgIHNldCBkaXIgW2xpbmRleCAkcmRhX0lucHV0KHVpX2lsbWRpcikgJGldCiAgICAgIGxhcHBlbmQgaWxtX2xpc3QgJGlsbQogICAgICBzZXQgdmFycygkaWxtLGlsbV9kaXIpICRkaXIKICAgfQogICBpZiB7JGlsbV9saXN0ICE9ICIifSB7CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoaWxtX2xpc3QpIFxbbGlzdCAkaWxtX2xpc3RcXSIKICAgICAgZm9yZWFjaCBpbG0gJGlsbV9saXN0IHsKICAgICAgICAgcHV0cyAkb3AxICJzZXQgdmFycygkaWxtLGlsbV9kaXIpICR2YXJzKCRpbG0saWxtX2RpcikiCiAgICAgIH0KICAgfQp9CnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICIjIERlZmluZSBsZWYgZmlsZXMgLi4uIgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAic2V0IHZhcnMobGVmX2ZpbGVzKSBcIlxcIgpmb3JlYWNoIGZpbGUgJHJkYV9JbnB1dCh1aV9sZWZmaWxlKSB7CiAgIHB1dHMgJG9wMSAiICAgW2ZpbGUgbm9ybWFsaXplICRmaWxlXSBcXCIKfQpwdXRzICRvcDEgIlwiIgoKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDEgIiMgRGVmaW5lIGxpYnJhcnkgc2V0cyAuLi4iCnB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIHNldCB2YXJzKGxpYnJhcnlfc2V0cykgPGxpc3Qgb2YgbGlicmFyeSBzZXRzPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxzZXQ+LHRpbWluZykgPGxpc3Qgb2YgbGliIGZpbGVzPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxzZXQ+LHNpKSA8bGlzdCBvZiBjZGIvdWRuIGZpbGVzPiIKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpzZXQgbGlicmFyeV9zZXRzIFtsaXN0XQoKZm9yZWFjaCBsaWJyYXJ5X3NldCBbYWxsX2xpYnJhcnlfc2V0c10gewogICBpZiB7W2xsZW5ndGggW2FsbF9saWJyYXJ5X3NldHNdXSA+IDJ9IHsKIyAgICAgIGlmIHtbcmVnZXhwICJeZGVmYXVsdCIgJGxpYnJhcnlfc2V0XSA9PSAwfSB7CiAgICAgICAgIGlmIHtbaW5mbyBleGlzdHMgOjpDUEY6OmNwZkNvbW1pdHRlZF19IHsKICAgICAgICAgICAgaWYgeyhbcmVnZXhwICJeZG9tYWluXyIgJGxpYnJhcnlfc2V0XSA9PSAwKX0gewogICAgICAgICAgICAgICBsYXBwZW5kIGxpYnJhcnlfc2V0cyAkbGlicmFyeV9zZXQKICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsYXBwZW5kIGxpYnJhcnlfc2V0cyAkbGlicmFyeV9zZXQKICAgICAgICAgfQojICAgICAgfQogICB9IGVsc2UgewogICAgICBsYXBwZW5kIGxpYnJhcnlfc2V0cyAkbGlicmFyeV9zZXQKICAgfQp9CgppZiB7JGxpYnJhcnlfc2V0cyAhPSAiIn0gewogICBwdXRzICRvcDEgInNldCB2YXJzKGxpYnJhcnlfc2V0cykgXCIkbGlicmFyeV9zZXRzXCIiCn0KCmZvcmVhY2ggbGlicmFyeV9zZXQgJGxpYnJhcnlfc2V0cyB7CiAgIGZvcmVhY2ggb3B0aW9uICJ0aW1pbmcgc2kgYW9jdiIgewogICAgICBpZiB7W2dldF9saWJyYXJ5X3NldCAkbGlicmFyeV9zZXQgLSRvcHRpb25dICE9ICIifSB7CiAgICAgICAgIHNldCBmaWxlX2xpc3QgW2dldF9saWJyYXJ5X3NldCAkbGlicmFyeV9zZXQgLSRvcHRpb25dCiAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJGxpYnJhcnlfc2V0LCRvcHRpb24pIFwiXFwiCiAgICAgICAgIGZvcmVhY2ggZmlsZSAkZmlsZV9saXN0IHsKICAgICAgICAgICAgcHV0cyAkb3AxICIgICBbZmlsZSBub3JtYWxpemUgJGZpbGVdIFxcIiAKICAgICAgICAgfSAKICAgICAgICAgcHV0cyAkb3AxICJcIiIgCiAgICAgIH0KICAgfQp9CgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAiIyBEZWZpbmUgcmMgY29ybmVycyAuLi4iCnB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIHNldCB2YXJzKHJjX2Nvcm5lcnMpIDxsaXN0IG9mIHJjIGNvcm5lcnM+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4sVCkgPHRlbXBlcmF0dXJlPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxyY19jb3JuZXI+LGNhcF90YWJsZSkgPGNhcCB0YWJsZSBmb3IgY29ybmVyPiIKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpzZXQgcmNfY29ybmVycyBbbGlzdF0KZm9yZWFjaCByY19jb3JuZXIgW2FsbF9yY19jb3JuZXJzXSB7CiMgICBpZiB7W2xsZW5ndGggW2FsbF9yY19jb3JuZXJzXV0gPiAxfSB7CiMgICAgICBpZiB7W3JlZ2V4cCAiXmRlZmF1bHQiICRyY19jb3JuZXIgXSA9PSAwfSB7CiMgICAgICAgICBsYXBwZW5kIHJjX2Nvcm5lcnMgJHJjX2Nvcm5lcgojICAgICAgfQojICAgfSBlbHNlIHsKICAgICAgbGFwcGVuZCByY19jb3JuZXJzICRyY19jb3JuZXIKIyAgIH0KfQppZiB7JHJjX2Nvcm5lcnMgIT0gIiJ9IHsKICAgcHV0cyAkb3AxICJzZXQgdmFycyhyY19jb3JuZXJzKSBcIiRyY19jb3JuZXJzXCIiCn0KZm9yZWFjaCByY19jb3JuZXIgJHJjX2Nvcm5lcnMgewogICBmb3JlYWNoIG9wdGlvbiAiVCBjYXBfdGFibGUiIHsKICAgICAgaWYge1tnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLSRvcHRpb25dICE9ICIifSB7CiAgICAgICAgIGlmIHskb3B0aW9uID09ICJjYXBfdGFibGUifSB7CiAgICAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lciwkb3B0aW9uKSBbZmlsZSBub3JtYWxpemUgW2dldF9yY19jb3JuZXIgJHJjX2Nvcm5lciAtJG9wdGlvbl1dIgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwdXRzICRvcDEgInNldCB2YXJzKCRyY19jb3JuZXIsJG9wdGlvbikgW2dldF9yY19jb3JuZXIgJHJjX2Nvcm5lciAtJG9wdGlvbl0iIAogICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIHsoJG9wdGlvbiA9PSAiVCIpICYmIChbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC0kb3B0aW9uXSA9PSAiIil9IHsKICAgICAgICAgICAgcHV0cyAkb3AxICIjc2V0IHZhcnMoJHJjX2Nvcm5lciwkb3B0aW9uKSAyNSA7ICMgRURJVCBGT1IgQ09SUkVDVCBUIFZBTFVFIgogICAgICAgICB9CiAgICAgICAgIGlmIHsoJG9wdGlvbiA9PSAiY2FwX3RhYmxlIikgJiYgKFtnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLSRvcHRpb25dID09ICIiKX0gewogICAgICAgICAgICBwdXRzICRvcDEgIiNzZXQgdmFycygkcmNfY29ybmVyLCRvcHRpb24pIDsgIyBFRElUIEZPUiBDT1JSRUNUIENBUCBUQUJMRSBERUZJTklUSU9OIgogICAgICAgICB9CiAgICAgIH0KICAgfQogICBwdXRzICRvcDEgIiNzZXQgdmFycygkcmNfY29ybmVyLGF0Zl9maWxlKSIKfQoKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDEgIiMgT3B0aW9uYWxseSBkZWZpbmUgUVJDIHRlY2hub2xvZ3kgaW5mb3JtYXRpb24iCnB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxyY19jb3JuZXI+LHF4X3RlY2hfZmlsZSkgPHF4X3RlY2hfZmlsZSBmb3IgY29ybmVyPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxyY19jb3JuZXI+LHF4X2xpYl9maWxlKSAgPHF4X2xpYl9maWxlIGZvciBjb3JuZXI+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4scXhfY29uZl9maWxlKSA8cXhfY29uZl9maWxlIGZvciBjb3JuZXI+IgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCmZvcmVhY2ggcmNfY29ybmVyICRyY19jb3JuZXJzIHsKICAgZm9yZWFjaCBvcHRpb24gInF4X3RlY2hfZmlsZSBxeF9saWJfZmlsZSBxeF9jb25mX2ZpbGUiIHsKICAgICAgaWYge1tnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLSRvcHRpb25dICE9ICIifSB7CiAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lciwkb3B0aW9uKSBbZmlsZSBub3JtYWxpemUgW2dldF9yY19jb3JuZXIgJHJjX2Nvcm5lciAtJG9wdGlvbl1dIiAKICAgICAgfQogICB9Cn0KCnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICIjIFNjYWxlIGZhY3RvcnMgYXJlIGFsc28gb3B0aW9uYWwgYnV0IGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIGZvciBwcmVfcm91dGUgb3B0aW1pemF0aW9uICIKcHV0cyAkb3AxICIjIGluIG9yZGVyIHRvIG9idGFpbiB0aGUgYmVzdCBmbG93IGNvbnZlcmdlbmNlIGFuZCBRb1IuICBTY2FsaW5nIGZhY3RvcnMgYXJlIGFwcGxpZWQgcGVyIgpwdXRzICRvcDEgIiMgcmMgY29ybmVyIGJ5IHNldHRpbmcgdGhlIGluZGl2aWR1YWwgdmFsdWVzIE9SIHZpYSBhIHNjYWxlX3RjbCBmaWxlIHdoaWNoIG11c3QgY29udGFpbiIgCnB1dHMgJG9wMSAiIyBzeW50YWN0aWNhbGx5IGNvcnJlY3QgdXBkYXRlX3JjX2Nvcm5lciBjb21tYW5kcyBmb3IgYSBnaXZlbiByY19jb3JuZXIiCnB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxyY19jb3JuZXI+LHNjYWxlX3RjbCkgICAgICAgICAgICAgICAgIDxmaWxlPiIKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4scHJlX3JvdXRlX3Jlc19mYWN0b3IpICAgICAgPHByZS1yb3V0ZSByZXNpc3RhbmNlIHNjYWxlIGZhY3Rvcj4iCnB1dHMgJG9wMSAiIyBzZXQgdmFycyg8cmNfY29ybmVyPixwcmVfcm91dGVfY2xrX3Jlc19mYWN0b3IpICA8cHJlLXJvdXRlIGNsb2NrIHJlc2lzdGFuY2Ugc2NhbGUgZmFjdG9yPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxyY19jb3JuZXI+LHBvc3Rfcm91dGVfcmVzX2ZhY3RvcikgICAgIDxwb3N0LXJvdXRlIHJlc2lzdGFuY2Ugc2NhbGUgZmFjdG9yICh0cmlwbGV0cyk+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4scG9zdF9yb3V0ZV9jbGtfcmVzX2ZhY3RvcikgPHBvc3Qtcm91dGUgY2xvY2sgcmVzaXN0YW5jZSBzY2FsZSBmYWN0b3I+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4scHJlX3JvdXRlX2NhcF9mYWN0b3IpICAgICAgPHByZS1yb3V0ZSBjYXBhY2l0YW5jZSBzY2FsZSBmYWN0b3I+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4scHJlX3JvdXRlX2Nsa19jYXBfZmFjdG9yKSAgPHByZS1yb3V0ZSBjbG9jayBjYXBhY2l0YW5jZSBzY2FsZSBmYWN0b3I+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4scG9zdF9yb3V0ZV9jYXBfZmFjdG9yKSAgICAgPHBvc3Qtcm91dGUgY2FwYWNpdGFuY2Ugc2NhbGUgZmFjdG9yICh0cmlwbGV0cyk+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPHJjX2Nvcm5lcj4scG9zdF9yb3V0ZV9jbGtfY2FwX2ZhY3RvcikgPHBvc3Qtcm91dGUgY2xvY2sgY2FwYWNpdGFuY2Ugc2NhbGUgZmFjdG9yPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxyY19jb3JuZXI+LHBvc3Rfcm91dGVfeGNhcF9mYWN0b3IpICAgIDxwb3N0LXJvdXRlIGNvdXBsaW5nIGNhcGFjaXRhbmNlIHNjYWxlIGZhY3RvciAodHJpcGxldHMpPiIKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgoKZm9yZWFjaCByY19jb3JuZXIgJHJjX2Nvcm5lcnMgewogICBpZiB7W2dldF9yY19jb3JuZXIgJHJjX2Nvcm5lciAtcHJlUm91dGVfcmVzXSAhPSAiIn0gewogICAgICBwdXRzICRvcDEgInNldCB2YXJzKCRyY19jb3JuZXIscHJlX3JvdXRlX3Jlc19mYWN0b3IpIFx0XHRbZm9ybWF0ICU0LjJmIFtleHByIFtnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLXByZVJvdXRlX3Jlc10qMS4wXV0iIAogICB9CiAgIGlmIHtbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wcmVSb3V0ZV9jbGtyZXNdICE9ICIifSB7CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lcixwcmVfcm91dGVfY2xrX3Jlc19mYWN0b3IpIFx0W2Zvcm1hdCAlNC4yZiBbZXhwciBbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wcmVSb3V0ZV9jbGtyZXNdKjEuMF1dIiAKICAgIH0KICAgaWYge1tnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLXBvc3RSb3V0ZV9yZXNdICE9ICIifSB7CiAgICAgIHNldCB0cmlwbGV0cyBbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wb3N0Um91dGVfcmVzXQogICAgICBzZXQgc2NhbGFyIFtsaW5kZXggJHRyaXBsZXRzIDBdCiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAxfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSAxLjAgMS4wXQogICAgICB9CiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAyfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSBbZXhwciBbbGluZGV4ICRzY2FsYXIgMV0qMS4wXSAxLjBdCiAgICAgIH0KICAgICAgaWYge1tsbGVuZ3RoICRzY2FsYXJdID09IDN9IHsKICAgICAgICAgc2V0IHBzdHJpbmcgW2Zvcm1hdCAiJTQuMmYgJTQuMmYgJTQuMmYiIFtleHByIFtsaW5kZXggJHNjYWxhciAwXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAxXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAyXSoxLjBdXQogICAgICB9CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lcixwb3N0X3JvdXRlX3Jlc19mYWN0b3IpIFx0XHRcIiRwc3RyaW5nXCIiCiAgIH0KICAgaWYge1tnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLXBvc3RSb3V0ZV9jbGtyZXNdICE9ICIifSB7CiAgICAgIHNldCB0cmlwbGV0cyBbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wb3N0Um91dGVfY2xrcmVzXQogICAgICBzZXQgc2NhbGFyIFtsaW5kZXggJHRyaXBsZXRzIDBdCiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAxfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSAxLjAgMS4wXQogICAgICB9CiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAyfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSBbZXhwciBbbGluZGV4ICRzY2FsYXIgMV0qMS4wXSAxLjBdCiAgICAgIH0KICAgICAgaWYge1tsbGVuZ3RoICRzY2FsYXJdID09IDN9IHsKICAgICAgICAgc2V0IHBzdHJpbmcgW2Zvcm1hdCAiJTQuMmYgJTQuMmYgJTQuMmYiIFtleHByIFtsaW5kZXggJHNjYWxhciAwXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAxXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAyXSoxLjBdXQogICAgICB9CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lcixwb3N0X3JvdXRlX2Nsa19yZXNfZmFjdG9yKSBcdFx0XCIkcHN0cmluZ1wiIgogICAgfQogICBpZiB7W2dldF9yY19jb3JuZXIgJHJjX2Nvcm5lciAtcHJlUm91dGVfY2FwXSAhPSAiIn0gewogICAgICBwdXRzICRvcDEgInNldCB2YXJzKCRyY19jb3JuZXIscHJlX3JvdXRlX2NhcF9mYWN0b3IpIFx0XHRbZm9ybWF0ICU0LjJmIFtleHByIFtnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLXByZVJvdXRlX2NhcF0qMS4wXV0iIAogICB9CiAgIGlmIHtbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wcmVSb3V0ZV9jbGtjYXBdICE9ICIifSB7CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lcixwcmVfcm91dGVfY2xrX2NhcF9mYWN0b3IpIFx0W2Zvcm1hdCAlNC4yZiBbZXhwciBbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wcmVSb3V0ZV9jbGtjYXBdKjEuMF1dIiAKICAgIH0KICAgaWYge1tnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLXBvc3RSb3V0ZV9jYXBdICE9ICIifSB7CiAgICAgIHNldCB0cmlwbGV0cyBbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wb3N0Um91dGVfY2FwXQogICAgICBzZXQgc2NhbGFyIFtsaW5kZXggJHRyaXBsZXRzIDBdCiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAxfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSAxLjAgMS4wXQogICAgICB9CiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAyfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSBbZXhwciBbbGluZGV4ICRzY2FsYXIgMV0qMS4wXSAxLjBdCiAgICAgIH0KICAgICAgaWYge1tsbGVuZ3RoICRzY2FsYXJdID09IDN9IHsKICAgICAgICAgc2V0IHBzdHJpbmcgW2Zvcm1hdCAiJTQuMmYgJTQuMmYgJTQuMmYiIFtleHByIFtsaW5kZXggJHNjYWxhciAwXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAxXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAyXSoxLjBdXQogICAgICB9CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lcixwb3N0X3JvdXRlX2NhcF9mYWN0b3IpIFx0XHRcIiRwc3RyaW5nXCIiCiAgIH0KICAgaWYge1tnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLXBvc3RSb3V0ZV9jbGtjYXBdICE9ICIifSB7CiAgICAgIHNldCB0cmlwbGV0cyBbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wb3N0Um91dGVfY2xrY2FwXQogICAgICBzZXQgc2NhbGFyIFtsaW5kZXggJHRyaXBsZXRzIDBdCiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAxfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSAxLjAgMS4wXQogICAgICB9CiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAyfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSBbZXhwciBbbGluZGV4ICRzY2FsYXIgMV0qMS4wXSAxLjBdCiAgICAgIH0KICAgICAgaWYge1tsbGVuZ3RoICRzY2FsYXJdID09IDN9IHsKICAgICAgICAgc2V0IHBzdHJpbmcgW2Zvcm1hdCAiJTQuMmYgJTQuMmYgJTQuMmYiIFtleHByIFtsaW5kZXggJHNjYWxhciAwXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAxXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAyXSoxLjBdXQogICAgICB9CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lcixwb3N0X3JvdXRlX2Nsa19jYXBfZmFjdG9yKSBcdFx0XCIkcHN0cmluZ1wiIgogICB9CiAgIGlmIHtbZ2V0X3JjX2Nvcm5lciAkcmNfY29ybmVyIC1wb3N0Um91dGVfeGNhcF0gIT0gIiJ9IHsKICAgICAgc2V0IHRyaXBsZXRzIFtnZXRfcmNfY29ybmVyICRyY19jb3JuZXIgLXBvc3RSb3V0ZV94Y2FwXQogICAgICBzZXQgc2NhbGFyIFtsaW5kZXggJHRyaXBsZXRzIDBdCiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAxfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSAxLjAgMS4wXQogICAgICB9CiAgICAgIGlmIHtbbGxlbmd0aCAkc2NhbGFyXSA9PSAyfSB7CiAgICAgICAgIHNldCBwc3RyaW5nIFtmb3JtYXQgIiU0LjJmICU0LjJmICU0LjJmIiBbZXhwciBbbGluZGV4ICRzY2FsYXIgMF0qMS4wXSBbZXhwciBbbGluZGV4ICRzY2FsYXIgMV0qMS4wXSAxLjBdCiAgICAgIH0KICAgICAgaWYge1tsbGVuZ3RoICRzY2FsYXJdID09IDN9IHsKICAgICAgICAgc2V0IHBzdHJpbmcgW2Zvcm1hdCAiJTQuMmYgJTQuMmYgJTQuMmYiIFtleHByIFtsaW5kZXggJHNjYWxhciAwXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAxXSoxLjBdIFtleHByIFtsaW5kZXggJHNjYWxhciAyXSoxLjBdXQogICAgICB9CiAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHJjX2Nvcm5lcixwb3N0X3JvdXRlX3hjYXBfZmFjdG9yKSBcdFx0XCIkcHN0cmluZ1wiIgogICB9CiAgIHB1dHMgJG9wMSAgIiIgCn0KcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDEgIiMgRGVmaW5lIG9wZXJhdGluZyBjb25kaXRpb25zIChvcHRpb25hbCkiCnB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjIHNldCB2YXJzKG9wY29uZHMpIDxsaXN0IG9mIG9wZXJhdGluZyBjb25kaXRpb25zPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxvcGNvbmQ+LGxpYnJhcnlfZmlsZSkgPGxpYnJhcnkgZmlsZSA+IgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPG9wY29uZD4sUCkgPHByb2Nlc3Mgc2NhbGUgZmFjdG9yPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxvcGNvbmQ+LFYpIDx2b2x0YWdlPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxvcGNvbmQ+LFQpIDx0ZW1wZXJhdHVyZT4iCnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKaWYgeyFbaW5mbyBleGlzdHMgOjpDUEY6OmNwZkNvbW1pdHRlZF19IHsKICAgc2V0IG9wY29uZHMgW2xpc3RdCiAgIGZvcmVhY2ggb3Bjb25kIFthbGxfb3BfY29uZHNdIHsKICAgIyAgIGlmIHtbcmVnZXhwICJeZGVmYXVsdCIgJG9wY29uZCBdID09IDB9IHsKICAgICAgICAgbGFwcGVuZCBvcGNvbmRzICRvcGNvbmQKICAgIyAgIH0KICAgfQogICBpZiB7JG9wY29uZHMgIT0gIiJ9IHsKICAgICAgcHV0cyAkb3AxICIjc2V0IHZhcnMob3Bjb25kcykgXCIkb3Bjb25kc1wiIgogICB9CiAgIGZvcmVhY2ggb3Bjb25kICRvcGNvbmRzIHsKICAgICAgZm9yZWFjaCBvcHRpb24gImxpYnJhcnlfZmlsZSBQIFYgVCIgewogICAgICAgICBpZiB7W2dldF9vcF9jb25kICRvcGNvbmQgLSRvcHRpb25dICE9ICIifSB7CiAgICAgICAgICAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKCRvcGNvbmQsJG9wdGlvbikgW2dldF9vcF9jb25kICRvcGNvbmQgLSRvcHRpb25dIiAKICAgICAgICAgfQogICAgICB9CiAgIH0KfQoKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDEgIiMgRGVmaW5lIGRlbGF5IGNvcm5lcnMgLi4uIgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMSAiIyBzZXQgdmFycyhkZWxheV9jb3JuZXJzKSA8bGlzdCBvZiBkZWxheSBjb3JuZXJzPiIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxkZWxheV9jb3JuZXI+LGxpYnJhcnlfc2V0KSA8bGlicmFyeV9zZXQ+IChwcmV2aW91c2x5IGRlZmluZWQpIgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPGRlbGF5X2Nvcm5lcj4sb3Bjb25kKSA8b3Bjb25kPiAocHJldmlvdXNseSBkZWZpbmVkKSAob3B0aW9uYWwpIgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPGRlbGF5X2Nvcm5lcj4scmNfY29ybmVyKSBsaWJyYXJ5X3NldD4gKHByZXZpb3VzbHkgZGVmaW5lZCkiCnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKc2V0IGRlbGF5X2Nvcm5lcnMgW2xpc3RdCmZvcmVhY2ggZGVsYXlfY29ybmVyIFthbGxfZGVsYXlfY29ybmVyc10gewojICAgaWYge1tsbGVuZ3RoIFthbGxfZGVsYXlfY29ybmVyc11dID4gMn0gewojICAgICAgaWYge1tyZWdleHAgIl5kZWZhdWx0IiAkZGVsYXlfY29ybmVyIF0gPT0gMH0gewojICAgICAgICAgbGFwcGVuZCBkZWxheV9jb3JuZXJzICRkZWxheV9jb3JuZXIKIyAgICAgIH0KIyAgIH0gZWxzZSB7CiAgICAgIGxhcHBlbmQgZGVsYXlfY29ybmVycyAkZGVsYXlfY29ybmVyCiMgICB9Cn0KaWYgeyRkZWxheV9jb3JuZXJzICE9ICIifSB7CiAgIHB1dHMgJG9wMSAic2V0IHZhcnMoZGVsYXlfY29ybmVycykgXCIkZGVsYXlfY29ybmVyc1wiIgp9CmZvcmVhY2ggZGMgJGRlbGF5X2Nvcm5lcnMgewogICAgc2V0IGF0dHJpYnV0ZV9saXN0ICJyY19jb3JuZXIgbGlicmFyeV9zZXQgb3Bjb25kX2xpYnJhcnkgb3Bjb25kIGlyZHJvcF9maWxlIGxhdGVfbGlicmFyeV9zZXQgZWFybHlfbGlicmFyeV9zZXQgCiAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVfb3Bjb25kX2xpYnJhcnkgZWFybHlfb3Bjb25kX2xpYnJhcnkgbGF0ZV9vcGNvbmQgZWFybHlfb3Bjb25kIGxhdGVfaXJkcm9wX2ZpbGUgZWFybHlfaXJkcm9wX2ZpbGUiCgogICBmb3JlYWNoIGF0dHIgJGF0dHJpYnV0ZV9saXN0IHsKICAgIyBFeHRyYWN0aW9uIHRoZSBjb3JuZXIgbGV2ZWwgcHJvcGVydGllcwogICAgICBpZiB7W2dldF9kZWxheV9jb3JuZXIgJGRjIC0kYXR0cl0gIT0gIiJ9IHsgCiAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJGRjLCRhdHRyKSBcdFtnZXRfZGVsYXlfY29ybmVyICRkYyAtJGF0dHJdIgogICAgICB9CiAgICMgRXh0cmFjdGlvbiB0aGUgcG93ZXIgZG9tYWluIGxldmVsIHByb3BlcnRpZXMKICAgICAgc2V0IGRvbWFpbnMgW2dldF9kZWxheV9jb3JuZXIgJGRjIC1wb3dlcl9kb21haW5fbGlzdF0KICAgICAgaWYgeyRkb21haW5zICE9ICIifSB7CiAgICAgICAgaWYgeyFbaW5mbyBleGlzdHMgZG9uZSgkZGMscG93ZXJfZG9tYWlucyldfSB7CiAgICAgICAgICAgcHV0cyAkb3AxICJzZXQgdmFycygkZGMscG93ZXJfZG9tYWlucykgXCIkZG9tYWluc1wiIgogICAgICAgICAgICBmb3JlYWNoIHBkIFtnZXRfZGVsYXlfY29ybmVyICRkYyAtcG93ZXJfZG9tYWluX2xpc3RdIHsKICAgICAgICAgICAgICBwdXRzICRvcDEgIiMgQXR0cmlidXRlcyBmb3IgcG93ZXIgZG9tYWluICRwZCIKICAgICAgICAgICAgICAgZm9yZWFjaCBhdHRyICRhdHRyaWJ1dGVfbGlzdCB7CiAgICAgICAgICAgICAgICAgIGlmIHtbZ2V0X2RlbGF5X2Nvcm5lciAtcG93ZXJfZG9tYWluICRwZCAkZGMgLSRhdHRyXSAhPSAiIn0gewogICAgICAgICAgICAgICAgICAgICBzZXQgZG9uZSgkZGMsJHBkLCRhdHRyKSBUUlVFCiAgICAgICAgICAgICAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJGRjLCRwZCwkYXR0cikgXHRbZ2V0X2RlbGF5X2Nvcm5lciAkZGMgLXBvd2VyX2RvbWFpbiAkcGQgLSRhdHRyXSIKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9CiAgICAgICAgICAgc2V0IGRvbmUoJGRjLHBvd2VyX2RvbWFpbnMpIFRSVUUKICAgICAgICAgfSAKICAgICAgfQogICB9Cn0KCgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAiIyBPcHRpb25hbGx5IGRlZmluZSBkZXJhdGluZyBmYWN0b3JzIGZvciBPQ1YgaGVyZSAoY2xvY2sgYW5kIGRhdGEpLiAiCnB1dHMgJG9wMSAiIyBEZXJhdGluZyBmYWN0b3JzIGFyZSBhcHBsaWVkIHBlciBkZWxheSBjb3JuZXIgdXNpbmcgZWl0aGVyIGluZGl2aWR1YWwiCnB1dHMgJG9wMSAiIyB2YWx1ZXMgT1IgdmlhIGEgZGVyYXRlX3RjbCBmaWxlIHdoaWNoIG11c3QgY29udGFpbiBzeW50YWN0aWNhbGx5IGNvcnJlY3QiCnB1dHMgJG9wMSAiIyBzZXRfdGltaW5nX2RlcmF0ZSBjb21tYW5kcyBmb3IgYSBnaXZlbiBkZWxheV9jb3JuZXIiCnB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AxICIjc2V0IHZhcnMoPGRlbGF5X2Nvcm5lcj4sZGVyYXRlX3RjbCkgICAgICAgIDxmaWxlPiIKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDEgIiNzZXQgdmFycyg8ZGVsYXlfY29ybmVyPixkYXRhX2NlbGxfbGF0ZSkgICAgPGZsb2F0PiIKcHV0cyAkb3AxICIjc2V0IHZhcnMoPGRlbGF5X2Nvcm5lcj4sZGF0YV9jZWxsX2Vhcmx5KSAgIDxmbG9hdD4iCnB1dHMgJG9wMSAiI3NldCB2YXJzKDxkZWxheV9jb3JuZXI+LGRhdGFfbmV0X2xhdGUpICAgICA8ZmxvYXQ+IgpwdXRzICRvcDEgIiNzZXQgdmFycyg8ZGVsYXlfY29ybmVyPixkYXRhX25ldF9lYXJseSkgICAgPGZsb2F0PiIKcHV0cyAkb3AxICIjc2V0IHZhcnMoPGRlbGF5X2Nvcm5lcj4sY2xvY2tfY2VsbF9sYXRlKSAgIDxmbG9hdD4iCnB1dHMgJG9wMSAiI3NldCB2YXJzKDxkZWxheV9jb3JuZXI+LGNsb2NrX2NlbGxfZWFybHkpICA8ZmxvYXQ+IgpwdXRzICRvcDEgIiNzZXQgdmFycyg8ZGVsYXlfY29ybmVyPixjbG9ja19uZXRfbGF0ZSkgICAgPGZsb2F0PiIKcHV0cyAkb3AxICIjc2V0IHZhcnMoPGRlbGF5X2Nvcm5lcj4sY2xvY2tfbmV0X2Vhcmx5KSAgIDxmbG9hdD4iCnB1dHMgJG9wMSAiI3NldCB2YXJzKDxkZWxheV9jb3JuZXI+LGNlbGxfY2hlY2tfbGF0ZSkgICA8ZmxvYXQ+IgpwdXRzICRvcDEgIiNzZXQgdmFycyg8ZGVsYXlfY29ybmVyPixjZWxsX2NoZWNrX2Vhcmx5KSAgPGZsb2F0PiIKcHV0cyAkb3AxICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgoKc2V0IG1hcChlYXJseV9jZWxsX2NoZWNrX2RlcmF0ZV9mYWN0b3IpIGVhcmx5X2NlbGxfY2hlY2sKc2V0IG1hcChlYXJseV9jbGtfY2VsbF9kZXJhdGVfZmFjdG9yKSBjbG9ja19jZWxsX2Vhcmx5CnNldCBtYXAoZWFybHlfZGF0YV9jZWxsX2RlcmF0ZV9mYWN0b3IpIGRhdGFfY2VsbF9lYXJseQpzZXQgbWFwKGxhdGVfY2VsbF9jaGVja19kZXJhdGVfZmFjdG9yKSBsYXRlX2NlbGxfY2hlY2sKc2V0IG1hcChsYXRlX2Nsa19jZWxsX2RlcmF0ZV9mYWN0b3IpIGNsb2NrX2NlbGxfbGF0ZQpzZXQgbWFwKGxhdGVfZGF0YV9jZWxsX2RlcmF0ZV9mYWN0b3IpIGRhdGFfY2VsbF9sYXRlCgojdGltZURlc2lnbiAtcHJlUGxhY2UKI2ZvcmVhY2ggdmlldyBbYWxsX3NldHVwX2FuYWx5c2lzX3ZpZXdzXSB7CiMgICBmb3JlYWNoIHR5cGUgImVhcmx5X2NlbGxfY2hlY2tfZGVyYXRlX2ZhY3RvciBlYXJseV9jbGtfY2VsbF9kZXJhdGVfZmFjdG9yIGVhcmx5X2RhdGFfY2VsbF9kZXJhdGVfZmFjdG9yIFwKIyAgICAgICAgICAgICAgICAgbGF0ZV9jZWxsX2NoZWNrX2RlcmF0ZV9mYWN0b3IgbGF0ZV9jbGtfY2VsbF9kZXJhdGVfZmFjdG9yIGxhdGVfZGF0YV9jZWxsX2RlcmF0ZV9mYWN0b3IiIHsKIwojICAgICAgcHV0cyAkb3AxICJzZXQgdmFycyhbZ2V0X2FuYWx5c2lzX3ZpZXcgJHZpZXcgLWRlbGF5X2Nvcm5lcl0sJG1hcCgkdHlwZSkpIFtnZXRfcHJvcGVydHkgW2xpbmRleCBbYWxsX3JlZ2lzdGVyc10gMF0gJHR5cGUgLXZpZXcgJHZpZXddIgojICAgfQojfQojdGltZURlc2lnbiAtcHJlUGxhY2UgLWhvbGQKI2ZvcmVhY2ggdmlldyBbYWxsX2hvbGRfYW5hbHlzaXNfdmlld3NdIHsKIyAgIGZvcmVhY2ggdHlwZSAiZWFybHlfY2VsbF9jaGVja19kZXJhdGVfZmFjdG9yIGVhcmx5X2Nsa19jZWxsX2RlcmF0ZV9mYWN0b3IgZWFybHlfZGF0YV9jZWxsX2RlcmF0ZV9mYWN0b3IgXAojICAgICAgICAgICAgICAgICBsYXRlX2NlbGxfY2hlY2tfZGVyYXRlX2ZhY3RvciBsYXRlX2Nsa19jZWxsX2RlcmF0ZV9mYWN0b3IgbGF0ZV9kYXRhX2NlbGxfZGVyYXRlX2ZhY3RvciIgewojCiMgICAgICBwdXRzICRvcDEgInNldCB2YXJzKFtnZXRfYW5hbHlzaXNfdmlldyAkdmlldyAtZGVsYXlfY29ybmVyXSwkbWFwKCR0eXBlKSkgW2dldF9wcm9wZXJ0eSBbbGluZGV4IFthbGxfcmVnaXN0ZXJzXSAwXSAkdHlwZSAtdmlldyAkdmlld10iCiMgICB9CiN9CgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAiIyBEZWZpbmUgY29uc3RyYWludCBtb2RlcyAuLi4gIgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMSAiIyBzZXQgdmFycyhjb25zdHJhaW50X21vZGVzKSAgICAgICAgPGxpc3Qgb2YgY29uc3RyYWludCBtb2Rlcz4iCnB1dHMgJG9wMSAiIyBzZXQgdmFycyg8bW9kZT4scHJlX2N0c19zZGMpICAgICAgPHByZSBjdHMgY29uc3RyYWludCBmaWxlPiAocmVxdWlyZWQpIgpwdXRzICRvcDEgIiMgc2V0IHZhcnMoPG1vZGU+LHBvc3RfY3RzX3NkYykgICAgIDxwb3N0IGN0cyBjb25zdHJhaW50IGZpbGU+IChvcHRpb25hbCkiCnB1dHMgJG9wMSAiIyBzZXQgdmFycyg8bW9kZT4saW5jcl9jdHNfc2RjKSAgICAgPGluY3JlbWVudGFsIHBvc3QgY3RzIGNvbnN0cmFpbnQgZmlsZT4gKG9wdGlvbmFsKSIKcHV0cyAkb3AxICIjIHNldCB2YXJzKDxtb2RlPixwcmVfY3RzX2lsbV9zZGMpICA8cHJlIGN0cyBpbG0gY29uc3RyYWludCBmaWxlPiAob3B0aW9uYWwpIgpwdXRzICRvcDEgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnNldCBjb25zdHJhaW50X21vZGVzIFtsaXN0XQpmb3JlYWNoIGNvbnN0cmFpbnRfbW9kZSBbYWxsX2NvbnN0cmFpbnRfbW9kZXNdIHsKIyAgIGlmIHtbbGxlbmd0aCBbYWxsX2NvbnN0cmFpbnRfbW9kZXNdXSA+IDJ9IHsKIyAgICAgIGlmIHtbcmVnZXhwICJeZGVmYXVsdF9tb2RlIiAkY29uc3RyYWludF9tb2RlIF0gPT0gMH0gewojICAgICAgICAgbGFwcGVuZCBjb25zdHJhaW50X21vZGVzICRjb25zdHJhaW50X21vZGUKIyAgICAgIH0KIyAgIH0gZWxzZSB7CiAgICAgIGxhcHBlbmQgY29uc3RyYWludF9tb2RlcyAkY29uc3RyYWludF9tb2RlCiMgICB9Cn0KaWYgeyRjb25zdHJhaW50X21vZGVzICE9ICIifSB7CiAgIHB1dHMgJG9wMSAic2V0IHZhcnMoY29uc3RyYWludF9tb2RlcykgXCIkY29uc3RyYWludF9tb2Rlc1wiIgp9CmZvcmVhY2ggY29uc3RyYWludF9tb2RlICRjb25zdHJhaW50X21vZGVzIHsKICAgaWYge1tnZXRfY29uc3RyYWludF9tb2RlICRjb25zdHJhaW50X21vZGUgLXNkY19maWxlc10gIT0gIiJ9IHsKIyAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJGNvbnN0cmFpbnRfbW9kZSxwcmVfY3RzX3NkYykgXCJbZmlsZSBub3JtYWxpemUgW2dldF9jb25zdHJhaW50X21vZGUgJGNvbnN0cmFpbnRfbW9kZSAtc2RjX2ZpbGVzXV1cIiIgCiAgICAgc2V0IHByZV9jdHNfc2RjX2xpc3QgW2xpc3RdCiAgICAgZm9yZWFjaCBmaWxlIFtnZXRfY29uc3RyYWludF9tb2RlICRjb25zdHJhaW50X21vZGUgLXNkY19maWxlc10gIHsKICAgICAgICBsYXBwZW5kIHByZV9jdHNfc2RjX2xpc3QgW2ZpbGUgbm9ybWFsaXplICRmaWxlXQogICAgIH0KICAgICBwdXRzICRvcDEgInNldCB2YXJzKCRjb25zdHJhaW50X21vZGUscHJlX2N0c19zZGMpIFwiW2pvaW4gJHByZV9jdHNfc2RjX2xpc3RdXCIiIAogICAgICBpZiB7W2luZm8gZXhpc3RzIGRnbl9wb3N0X2N0c19zZGNdICYmICgkZGduX3Bvc3RfY3RzX3NkYyAhPSAiIikgfSB7CiAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJGNvbnN0cmFpbnRfbW9kZSxwb3N0X2N0c19zZGMpIFwiJGRnbl9wb3N0X2N0c19zZGNcIiIgCiAgICAgIH0KICAgfQogICBpZiB7W2dldF9jb25zdHJhaW50X21vZGUgJGNvbnN0cmFpbnRfbW9kZSAtaWxtX3NkY19maWxlc10gIT0gIiJ9IHsKIyAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJGNvbnN0cmFpbnRfbW9kZSxwcmVfY3RzX2lsbV9zZGMpIFwiW2ZpbGUgbm9ybWFsaXplIFtnZXRfY29uc3RyYWludF9tb2RlICRjb25zdHJhaW50X21vZGUgLWlsbV9zZGNfZmlsZXNdXVwiIiAKICAgICBzZXQgaWxtX2N0c19zZGNfbGlzdCBbbGlzdF0KICAgICBmb3JlYWNoIGZpbGUgW2dldF9jb25zdHJhaW50X21vZGUgJGNvbnN0cmFpbnRfbW9kZSAtaWxtX3NkY19maWxlc10gIHsKICAgICAgICBsYXBwZW5kIGlsbV9jdHNfc2RjX2xpc3QgW2ZpbGUgbm9ybWFsaXplICRmaWxlXQogICAgIH0KICAgICBwdXRzICRvcDEgInNldCB2YXJzKCRjb25zdHJhaW50X21vZGUscHJlX2N0c19pbG1fc2RjKSBcIltqb2luICRpbG1fY3RzX3NkY19saXN0XVwiIiAKICAgfQp9CgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAiIyBEZWZpbmUgc2V0dXAgYW5kIGhvbGQgYW5hbHlzaXMgdmlld3MgLi4uIGVhY2ggYW5hbHlzaXMgdmlldyByZXF1aXJlcyIKcHV0cyAkb3AxICIjIGEgZGVsYXkgY29ybmVyIGFuZCBhIGNvbnN0cmFpbnQgbW9kZSIKcHV0cyAkb3AxICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgoKI3NldCBhbmFseXNpc192aWV3cyAiIgpzZXQgYW5hbHlzaXNfdmlld3MgW2NvbmNhdCBbYWxsX3NldHVwX2FuYWx5c2lzX3ZpZXdzXSBbYWxsX2hvbGRfYW5hbHlzaXNfdmlld3NdXQojZm9yZWFjaCB2aWV3IFthbGxfYW5hbHlzaXNfdmlld3NdIHsKIyAgIGlmIHtbbGxlbmd0aCBbYWxsX2FuYWx5c2lzX3ZpZXdzXV0gPiAyfSB7CiMgICAgICBpZiB7W3JlZ2V4cCAiXmRlZmF1bHQiICR2aWV3IF0gPT0gMH0gewojICAgICAgICAgbGFwcGVuZCBhbmFseXNpc192aWV3cyAkdmlldwojICAgICAgfQojICAgfSBlbHNlIHsKIyAgICAgIGxhcHBlbmQgYW5hbHlzaXNfdmlld3MgJHZpZXcKIyAgIH0KI30KZm9yZWFjaCB2aWV3ICRhbmFseXNpc192aWV3cyB7CiAgIGZvcmVhY2ggb3B0aW9uICJkZWxheV9jb3JuZXIgY29uc3RyYWludF9tb2RlIiB7CiAgICAgIGlmIHtbZ2V0X2FuYWx5c2lzX3ZpZXcgJHZpZXcgLSRvcHRpb25dICE9ICIifSB7CiAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHZpZXcsJG9wdGlvbikgW2dldF9hbmFseXNpc192aWV3ICR2aWV3IC0kb3B0aW9uXSIgCiAgICAgIH0KICAgfQp9CnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICIjIEVESVQvVkVSSUZZIFRIRVNFIExJU1RTISEiCnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICJzZXQgdmFycyhzZXR1cF9hbmFseXNpc192aWV3cykgXCJbYWxsX3NldHVwX2FuYWx5c2lzX3ZpZXdzXVwiIgpwdXRzICRvcDEgInNldCB2YXJzKGhvbGRfYW5hbHlzaXNfdmlld3MpICBcIlthbGxfaG9sZF9hbmFseXNpc192aWV3c11cIiIKI3B1dHMgJG9wMSAic2V0IHZhcnMoc2V0dXBfYW5hbHlzaXNfdmlld3MpIFwiJGFuYWx5c2lzX3ZpZXdzXCIiCiNwdXRzICRvcDEgInNldCB2YXJzKGhvbGRfYW5hbHlzaXNfdmlld3MpIFwiJGFuYWx5c2lzX3ZpZXdzXCIiCgpwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMSAiIyBEZWZpbmUgYWN0aXZlIHNldHVwIGFuZCBob2xkIGFuYWx5c2lzIHZpZXcgbGlzdHMgYW5kIGRlZmF1bHQgdmlld3MiCnB1dHMgJG9wMSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICJzZXQgdmFycyhkZWZhdWx0X3NldHVwX3ZpZXcpICBcW2xpbmRleCBcJHZhcnMoc2V0dXBfYW5hbHlzaXNfdmlld3MpIDBcXSIKcHV0cyAkb3AxICJzZXQgdmFycyhkZWZhdWx0X2hvbGRfdmlldykgICBcW2xpbmRleCBcJHZhcnMoaG9sZF9hbmFseXNpc192aWV3cykgMFxdIgojcHV0cyAkb3AxICJzZXQgdmFycyhhY3RpdmVfc2V0dXBfdmlld3MpIFwkdmFycyhzZXR1cF9hbmFseXNpc192aWV3cykiCiNwdXRzICRvcDEgInNldCB2YXJzKGFjdGl2ZV9ob2xkX3ZpZXdzKSAgXCR2YXJzKGhvbGRfYW5hbHlzaXNfdmlld3MpIgpwdXRzICRvcDEgInNldCB2YXJzKGFjdGl2ZV9zZXR1cF92aWV3cykgIFwkdmFycyhzZXR1cF9hbmFseXNpc192aWV3cykiCnB1dHMgJG9wMSAic2V0IHZhcnMoYWN0aXZlX2hvbGRfdmlld3MpICAgXCR2YXJzKGhvbGRfYW5hbHlzaXNfdmlld3MpIgpwdXRzICRvcDEgIiIKcHV0cyAkb3AxICIjc2V0IHZhcnMoZ2RzX2ZpbGVzKSAgICAgICAgIDxsaXN0IG9mIGdkcyBmaWxlcz4iCnB1dHMgJG9wMSAiI3NldCB2YXJzKGdkc19sYXllcl9tYXApICAgICA8Z2RzIGxheWVyIG1hcCBmaWxlPiIKcHV0cyAkb3AxICIjc2V0IHZhcnMocXJjX2xheWVyX21hcCkgICAgIDxxcmMgbGF5ZXIgbWFwIGZpbGU+IgpwdXRzICRvcDEgIiNzZXQgdmFycyhxcmNfbGlicmFyeSkgICAgICAgPHFyYyBsaWJyYXJ5IGRpcmVjdG9yeT4iCnB1dHMgJG9wMSAiI3NldCB2YXJzKHFyY19jb25maWdfZmlsZSkgICA8cXJjIGNvbmZpZyBmaWxlPiIKcHV0cyAkb3AxICIiCnB1dHMgJG9wMiAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjIEVuYWJsZSBvbkNoaXBWYXJpYXRpb24gKGZvciBNTU1DIGZsb3dzKS4gIE9wdGlvbnMgYXJlOiIKcHV0cyAkb3AyICIjIHByZV9wbGFjZSwgcHJlX3ByZWN0cywgcHJlX2N0cywgcHJlX3Bvc3RjdHMsIHByZV9wb3N0cm91dGUsIHByZV9zaWdub2ZmLCBmYWxzZSIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgInNldCB2YXJzKGVuYWJsZV9vY3YpICAgICAgICBwcmVfY3RzIgpwdXRzICRvcDIgIiIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgT3B0aW9uYWxseSBlbmFibGUgYW9jdiIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgInNldCB2YXJzKGVuYWJsZV9hb2N2KSAgICAgICBmYWxzZSIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgT3B0aW9uYWxseSBlbmFibGUgY3Bwcjsgb3B0aW9ucyBhcmU6IHNldHVwLCBob2xkLCBib3RoLCBub25lIgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMiAic2V0IHZhcnMoZW5hYmxlX2NwcHIpICAgICAgIGJvdGgiCnB1dHMgJG9wMiAiIgojcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgojcHV0cyAkb3AyICIjIE9wdGlvbmFsbHkgZW5hYmxlIHNpZ25hbFN0b3JtIGRlbGF5IGNhbGN1bGF0aW9uIGR1cmluZyB0aGUgZmxvdy4iCiNwdXRzICRvcDIgIiMgVGhpcyBpcyBhIHJlcXVpcmVtZW50IHdoZW4gdXNpbmcgRUNTTS9DQ1MgbW9kZWxzLiAgVGhlIGZvbGxvd2luZyBhcmUiCiNwdXRzICRvcDIgIiMgdmFsdWUgb3B0aW9uczogcHJlX3BsYWNlIHByZV9wcmVjdHMgcHJlX3Bvc3RjdHMgcHJlX3Bvc3Ryb3V0ZSBwcmVfc2lnbm9mZiBmYWxzZSIKI3B1dHMgJG9wMiAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKI3B1dHMgJG9wMiAic2V0IHZhcnMoZW5hYmxlX3NzKSAgICAgICAgIGZhbHNlIgojcHV0cyAkb3AyICIiCnB1dHMgJG9wMiAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjIE9wdGlvbmFsbHkgZW5hYmxlIHNpZ25vZmYgRUNPIGZvciB0aGUgaGllcmFyaGljYWwgZmxvdyIKcHV0cyAkb3AyICIjIElGICdpbG0nLCBUSEVOIFRIRSBGT0xMT1dJTkcgU0hPVUxEIEJFIFNFVCBJTiBUSEUgc2V0dXAudGNsIgpwdXRzICRvcDIgIiMgLSB2YXJzKDxwdG4+LGlsbV9kaXIpICAgPHBhdGggdG8gSUxNIGRpcmV0b3J5PiIKcHV0cyAkb3AyICIjIC0gdmEjcnMoPHB0bj4sbGVmX2ZpbGUpICA8cGF0aCB0byBMRUYgZmlsZT4iCnB1dHMgJG9wMiAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICJzZXQgdmFycyhlbmFibGVfc2lnbm9mZl9lY28pICAgICAgICAgICAgZmFsc2UiCnB1dHMgJG9wMiAiIgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMiAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb3cgT3B0aW9ucyIKcHV0cyAkb3AyICIjIE9wdGlvbmFsbHkgZW5hYmxlIGRlc2lnbiBtb2RlIG9wdGlvbnM6IgpwdXRzICRvcDIgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGZsb3dfZWZmb3QpICAgICAgIDxleHByZXNzIHwgc3RhbmRhcmQgfCBleHRyZW1lPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMocG93ZXJfZWZmb3J0KSAgICAgPG5vbmUgfCBsb3cgfCBoaWdoPiIKcHV0cyAkb3AyICIiCnB1dHMgJG9wMiAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhY2VtZW50IE9wdGlvbnMiCnB1dHMgJG9wMiAiIyBOT1RFOiBXaGVuIHBsYWNlX29wdF9kZXNpZ24gaXMgZW5hYmxlZCwgdGhlIHByZWN0cyBzdGVwIHdpbGwgYmUgc2tpcHBlZCIKcHV0cyAkb3AyICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiNzZXQgdmFycyhpbl9wbGFjZV9vcHQpICAgICB0cnVlIgpwdXRzICRvcDIgIiNzZXQgdmFycyhub19wcmVfcGxhY2Vfb3B0KSB0cnVlIgpwdXRzICRvcDIgIiNzZXQgdmFycyhwbGFjZV9vcHRfZGVzaWduKSAgPHRydWUgfCBmYWxzZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKHBsYWNlX2lvX3BpbnMpICAgICA8dHJ1ZSB8IGZhbHNlPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY2xvY2tfZ2F0ZV9hd2FyZSkgIDx0cnVlIHwgZmFsc2U+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhjb25nZXN0aW9uX2VmZm9ydCkgPGF1dG8gfCBsb3cgfCBoaWdoPiIKcHV0cyAkb3AyICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpmb3JlYWNoIG9wdGlvbiBbZ2V0UGxhY2VNb2RlIC1xdWlldF0gewogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJjbGtHYXRlQXdhcmUifSB7CiAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnMoY2xvY2tfZ2F0ZV9hd2FyZSkgIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJjb25nRWZmb3J0In0gewogICAgICBwdXRzICRvcDIgInNldCB2YXJzKGNvbmdlc3Rpb25fZWZmb3J0KSBbbGluZGV4ICRvcHRpb24gMV0iCiAgIH0KICAgaWYge1tsaW5kZXggJG9wdGlvbiAwXSA9PSAicGxhY2VJb1BpbnMifSB7CiAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnMocGxhY2VfaW9fcGlucykgICAgIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQp9CnB1dHMgJG9wMiAiIgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMiAiIyAgICAgICAgICAgICAgICAgICAgIFRpZS9GaWxsZXIvVGFwIENlbGwgT3B0aW9ucyIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiMgICAgICAgICAgICAgICAgICAgICAgICAgVGllIGNlbGwgaW5mb3JtYXRpb24iCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKZm9yZWFjaCBvcHRpb24gW2dldFRpZUhpTG9Nb2RlIC1xdWlldF0gewogICBzd2l0Y2ggLWV4YWN0IC0tIFtsaW5kZXggJG9wdGlvbiAwXSB7CiAgICAgICJjZWxsIiB7CiAgICAgICAgIGlmIHtbbGluZGV4ICRvcHRpb24gMV0gIT0gIiJ9IHsKICAgICAgICAgICAgcHV0cyAkb3AyICJzZXQgdmFycyh0aWVfY2VsbHMpIFwiW2xpbmRleCAkb3B0aW9uIDFdXCIiCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHB1dHMgJG9wMiAiI3NldCB2YXJzKHRpZV9jZWxscykgPHRpZV9jZWxscz4iCiAgICAgICAgIH0KICAgICAgfQogICAgICAibWF4RGlzdGFuY2UiIHsKICAgICAgICAgaWYge1tsaW5kZXggJG9wdGlvbiAxXSAhPSAwfSB7CiAgICAgICAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnModGllX2NlbGxzLG1heF9kaXN0YW5jZSkgW2xpc3QgW2xpbmRleCAkb3B0aW9uIDFdXSIKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHV0cyAkb3AyICIjc2V0IHZhcnModGllX2NlbGxzLG1heF9kaXN0YW5jZSkgPGZsb2F0PiIKICAgICAgICAgfQogICAgICB9CiAgICAgICJtYXhGYW5vdXQiIHsKICAgICAgICAgaWYge1tsaW5kZXggJG9wdGlvbiAxXSAhPSAwfSB7CiAgICAgICAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnModGllX2NlbGxzLG1heF9mYW5vdXQpIFtsaXN0IFtsaW5kZXggJG9wdGlvbiAxXV0iCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHB1dHMgJG9wMiAiI3NldCB2YXJzKHRpZV9jZWxscyxtYXhfZmFub3V0KSA8aW50PiIKICAgICAgICAgfQogICAgICB9CiAgIH0KfQpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiIyAgICAgICAgICAgICAgICAgICAgIEZpbGxlciBjZWxsIGluZm9ybWF0aW9uIgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCmZvcmVhY2ggb3B0aW9uIFtnZXRGaWxsZXJNb2RlIC1xdWlldF0gewogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJjb3JlIn0gewogICAgICBpZiB7W2xpbmRleCAkb3B0aW9uIDFdICE9ICIifSB7CiAgICAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnMoZmlsbGVyX2NlbGxzKSBcIltsaW5kZXggJG9wdGlvbiAxXVwiIgogICAgICB9IGVsc2UgewogICAgICAgICBwdXRzICRvcDIgIiNzZXQgdmFycyhmaWxsZXJfY2VsbHMpIDxmaWxsZXJfY2VsbHM+IgogICAgICB9CiAgIH0KfQpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiMgICAgICAgICAgICAgICAgICAgICBXZWxsdGFwIGNlbGwgaW5mb3JtYXRpb24iCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiIyAgICB2ZXJpZnlfcnVsZSA6IG1heGltdW0gZGlzdGFuY2UgKGluIG1pY3JvbnMpIGJldHdlZW4gd2VsbHRhcCBjZWxscyBhbmQgc3RhbmRhcmQgY2VsbHMgIgpwdXRzICRvcDIgIiMgICAgICAgICAgICAgICAgICBpbiBtaWNyb25zIgpwdXRzICRvcDIgIiMgICAgICAgIG1heF9nYXAgOiBzcGVjaWZpZXMgdGhlIG1heGltdW0gZGlzdGFuY2UgZnJvbSB0aGUgcmlnaHQgZWRnZSBvZiBvbmUgd2VsbC10YXAgY2VsbCAiCnB1dHMgJG9wMiAiIyAgICAgICAgICAgICAgICAgIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgIHRoZSBmb2xsb3dpbmcgd2VsbC10YXAgY2VsbCBpbiB0aGUgc2FtZSByb3ciCnB1dHMgJG9wMiAiIyAgY2VsbF9pbnRlcnZhbCA6IHNwZWNpZmllcyB0aGUgbWF4aW11bSBkaXN0YW5jZSBmcm9tIHRoZSBjZW50ZXIgb2Ygb25lIHdlbGwtdGFwIGNlbGwgIgpwdXRzICRvcDIgIiMgICAgICAgICAgICAgICAgICB0byB0aGUgY2VudGVyIG9mIHRoZSBmb2xsb3dpbmcgd2VsbC10YXAgY2VsbCBpbiB0aGUgc2FtZSByb3ciCnB1dHMgJG9wMiAiIyIKcHV0cyAkb3AyICIjIE5PVEU6IG1heF9nYXAgYW5kIGNlbGxfaW50ZXJ2YWwgcGFyYW1ldGVycyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCB1c2VyIGhhcyB0byBkZWZpbmUgIgpwdXRzICRvcDIgIiMgICAgICAgb25seSBvbmUgb2YgdGhlc2UgcGFyYW1ldGVycyB0byBhZGQgd2VsbHRhcCBjZWxscyIKcHV0cyAkb3AyICIjIgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiNzZXQgdmFycyh3ZWxsdGFwcykgICAgICAgICAgICAgICAgICAgICAgICAgPHdlbGx0YXAgY2VsbHM+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh3ZWxsdGFwcyxjaGVja2VyYm9hcmQpICAgICAgICAgICAgPHRydWUgb3IgZmFsc2U+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh3ZWxsdGFwcyxtYXhfZ2FwKSAgICAgICAgICAgICAgICAgPG1heCBnYXA+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh3ZWxsdGFwcyxjZWxsX2ludGVydmFsKSAgICAgICAgICAgPGNlbGwgaW50ZXJ2YWw+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh3ZWxsdGFwcyx2ZXJpZnlfcnVsZSkgICAgICAgICAgICAgPGRpc3RhbmNlIGludGVydmFsPiIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRjYXAgY2VsbCBpbmZvcm1hdGlvbiIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMocHJlX2VuZGNhcCkgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgZW5kY2FwIGNlbGw+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhwb3N0X2VuZGNhcCkgICAgICAgICAgICAgICAgICAgICAgPHBvc3QgZW5kY2FwIGNlbGw+IgpwdXRzICRvcDIgIiIKaWYge1tpbmZvIGV4aXN0cyA6OkNQRjo6Y3BmQ29tbWl0dGVkXSB8fCBbaW5mbyBleGlzdHMgOjpNU1Y6OmllZWUxODAxTG9hZGVkXX0gewogICBwdXRzICRvcDEgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKICAgcHV0cyAkb3AxICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUCBGbG93IE9wdGlvbnMiCiAgIHB1dHMgJG9wMSAiIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgc2V0IGxwZmlsZSB7fQogICBpZiB7W2luZm8gZXhpc3RzIDo6Q1BGOjpjcGZDb21taXR0ZWRdICYmICQ6OkNQRjo6Y3BmQ29tbWl0dGVkICYmCiAgICAgICBbaW5mbyBleGlzdHMgOjpDUEY6OmNwZl9maWxlXSAmJiAkOjpDUEY6OmNwZl9maWxlICE9ICIifSB7CiAgICAgIHNldCBscGZvcm1hdCBjcGYKICAgICAgc2V0IGxwZmlsZSBnZW5fc2V0dXAuW3BpZF0uJGxwZm9ybWF0OyAjICQ6OkNQRjo6Y3BmX2ZpbGUgaXMgbm90IHVzZWQgZGlyZWN0bHkKICAgaWYge1tsaW5kZXggW3NwbGl0ICR2YXJzKHZlcnNpb24pICIuIl0gIDBdIDwgMTV9IHsKICAgICAgc2F2ZUNQRiAkbHBmaWxlCiAgIH0gZWxzZSB7CiAgICAgIHdyaXRlX3Bvd2VyX2ludGVudCAtY3BmICRscGZpbGUKICAgfSAKICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyA6Ok1TVjo6aWVlZTE4MDFMb2FkZWRdICYmICQ6Ok1TVjo6aWVlZTE4MDFMb2FkZWQgJiYKICAgICAgICAgICAgIFtpbmZvIGV4aXN0cyA6Ok1TVl9VUEY6OnVwZl9maWxlXX0gewogICAgICBzZXQgbHBmaWxlIFtmaWxlIG5vcm1hbGl6ZSAkOjpNU1ZfVVBGOjp1cGZfZmlsZV0KICAgICAgc2V0IGxwZm9ybWF0IGllZWUxODAxCiAgIH0KCiAgIGlmIHskbHBmaWxlID09IHt9fSB7CiAgICAgIHB1dHMgIldBUk5JTkc6IENhbm5vdCBkZXRlcm1pbmUgQ1BGIG9yIElFRUUgMTgwMSBmaWxlIC4uLiIKICAgfSBlbHNlIHsKICAgICAgc2V0IHZhcnMoJHtscGZvcm1hdH1fZmlsZSkgJGxwZmlsZQogICAgIHB1dHMgJG9wMSAic2V0IHZhcnMoJHtscGZvcm1hdH1fZmlsZSkgICAgICAgXCIkdmFycygke2xwZm9ybWF0fV9maWxlKVwiIgogICAgICBwdXRzICRvcDEgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgICAgIHB1dHMgJG9wMSAiIyBEZWZpbmUgdGhlIGZvbGxvd2luZyB0byBzZWxlY3RpdmVseSBjb21taXQgc2VjdGlvbnMgb2YgdGhlIFtzdHJpbmcgdG91cHBlciAkbHBmb3JtYXRdIGZpbGUiCiAgICAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKCR7bHBmb3JtYXR9X3Bvd2VyX2RvbWFpbikgICAgIDx0cnVlIHwgZmFsc2U+IgogICAgICBwdXRzICRvcDEgIiNzZXQgdmFycygke2xwZm9ybWF0fV9wb3dlcl9zd2l0Y2gpICAgICA8dHJ1ZSB8IGZhbHNlPiIKICAgICAgcHV0cyAkb3AxICIjc2V0IHZhcnMoJHtscGZvcm1hdH1faXNvbGF0aW9uKSAgICAgICAgPHRydWUgfCBmYWxzZT4iCiAgICAgIHB1dHMgJG9wMSAiI3NldCB2YXJzKCR7bHBmb3JtYXR9X2xldmVsX3NoaWZ0ZXIpICAgIDx0cnVlIHwgZmFsc2U+IgogICAgICBwdXRzICRvcDEgIiNzZXQgdmFycygke2xwZm9ybWF0fV9zdGF0ZV9yZXRlbnRpb24pICA8dHJ1ZSB8IGZhbHNlPiIKICAgICAgcHV0cyAkb3AxICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICAgICBwdXRzICRvcDEgIiNzZXQgdmFycygke2xwZm9ybWF0fV9rZWVwX3Jvd3MpICAgICAgICA8dHJ1ZSB8IGZhbHNlPiIKICAgICAgcHV0cyAkb3AxICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgICAgcHV0cyAkb3AxICIjIFRoZSB2YXJzKHBvd2VyX2RvbWFpbnMpIGlzIG9wdGlvbmFsLiAgSWYgbm90IGRlZmluZWQsIHRoZSBwb3dlciIgCiAgICAgIHB1dHMgJG9wMSAiIyBwb3dlciBkb21haW4gbGlzdCB3aWxsIGJlIHBpY2tlZCB1cCBhdXRvbWF0aWNhbGx5IgogICAgICBwdXRzICRvcDEgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogICAgICBzZXQgcG93ZXJfZG9tYWlucyBbbGlzdF0KICAgICAgZGJGb3JFYWNoUG93ZXJEb21haW4gW2RiZ0hlYWRdIHBkIHsKICAgICAgICAgbGFwcGVuZCBwb3dlcl9kb21haW5zIFtkYlBvd2VyRG9tYWluTmFtZSAkcGRdCiAgICAgIH0KICAgICAgaWYgeyRwb3dlcl9kb21haW5zICE9ICIifSB7CiAgICAgICAgIHB1dHMgJG9wMSAic2V0IHZhcnMocG93ZXJfZG9tYWlucykgXCIkcG93ZXJfZG9tYWluc1wiIgogICAgICB9IGVsc2UgewogICAgICAgICBwdXRzICRvcDEgIiNzZXQgdmFycyhwb3dlcl9kb21haW5zKSAgICAgICAgICAgICAgICAgICAgICAgPGxpc3Qgb2YgcG93ZXIgZG9tYWlucz4iCiAgICAgIH0KICAgICAgcHV0cyAkb3AxICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgICAgcHV0cyAkb3AxICIjIEFkZGl0aW9uYWwgb3B0aW9uYWwgbG93IHBvd2VyIHZhcmlhYmxlcyBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgbHBfY29uZmlnLnRjbCBmaWxlLiIKICAgICAgcHV0cyAkb3AxICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKICAgfQp9CnB1dHMgJG9wMiAiIgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvY2sgVHJlZSBPcHRpb25zIgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiNzZXQgdmFycyhyb3V0ZV9jbG9ja19uZXRzKSA8dHJ1ZSB8IGZhbHNlPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY3RzX2NlbGxzKSAgICAgICAgPGxpc3Qgb2YgY2xvY2sgYnVmZmVycz4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGNsb2NrX2dhdGVfY2VsbHMpIDxsaXN0IG9mIGNsb2NrIGdhdGluZyBjZWxscz4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGNsb2NrX2dhdGVfY2xvbmUpIDx0cnVlIHwgZmFsc2U+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhjbG9ja19lY28pICAgICAgICA8cHJlX3JvdXRlIHwgcG9zdF9yb3V0ZSB8IGJvdGggfCBub25lPiIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY2xrX3RyZWVfdG9wX2xheWVyKSAgICAgPHRyZWVfdG9wX3ByZWZlcnJlZF9sYXllcj4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGNsa190cmVlX2JvdHRvbV9sYXllcikgIDx0cmVlX2JvdHRvbV9wcmVmZXJyZWRfbGF5ZXI+ICIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY2xrX3RyZWVfbmRyKSAgICAgICAgICAgPHRyZWVfbm9uX2RlZmF1bHRfcnVsZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGNsa190cmVlX3NoaWVsZF9uZXQpICAgIDx0cmVlX3NoaWVsZF9uZXQ+ICIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY2xrX2xlYWZfdG9wX2xheWVyKSAgICAgPGxlYWZfdG9wX3ByZWZlcnJlZF9sYXllcj4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGNsa19sZWFmX2JvdHRvbV9sYXllcikgIDxsZWFmX2JvdHRvbV9wcmVmZXJyZWRfbGF5ZXI+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhjdHNfbGVhZl9uZHIpICAgICAgICAgICA8bGVhZl9ub25fZGVmYXVsdF9sYXllcj4iCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiIyBBZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBlbmFibGUvc3VwcG9ydCBjY29wdCIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY3RzX2VuZ2luZSkgPGNsb2NrRGVzaWduIHwgY2NvcHREZXNpZ24+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhjdHNfYnVmZmVyX2NlbGxzKSA8bGlzdCBvZiBidWZmZXJzPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY3RzX2ludmVydGVyX2NlbGxzKSA8bGlzdCBvZiBpbnZlcnRlcnM+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhjdHNfdXNlX2ludmVydGVycykgPHRydWUgfCBmYWxzZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGN0c19pb19vcHQpIDxvbiBzZWNvbmRhcnkgb2ZmPiIKI3B1dHMgJG9wMiAiI3NldCB2YXJzKGNjb3B0X2ludGVncmF0aW9uKSA8bmF0aXZlIHwgc2NyaXB0ZWQ+IgojcHV0cyAkb3AyICIjc2V0IHZhcnMoY2NvcHRfZXhlY3V0YWJsZSkgPHBhdGggdG8gY2NvcHQgZXhlY3V0YWJsZT4iCgpwdXRzICRvcDIgIiIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemF0aW9uIE9wdGlvbnMiCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjIEZvciBkaWZmaWN1bHQgdGltaW5nIGRlc2lnbnMsICdzZXQgdmFycyhoaWdoX3RpbWluZ19lZmZvcnQpIHRydWUnIgpwdXRzICRvcDIgIiMgVGhpcyBlbmFibGVzIGEgdmFyaWV0eSBvZiBvcHRpb25zIHRocm91Z2hvdXQgdGhlIGZsb3cgZm9yIG9wdGltYWwiCnB1dHMgJG9wMiAiIyBRb1IgYXQgdGhlIGV4cGVuc2Ugb2YgcnVudGltZSIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiNzZXQgdmFycyhoaWdoX3RpbWluZ19lZmZvcnQpICAgICAgICAgICAgIDx0cnVlIHwgZmFsc2U+IgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiNwdXRzICRvcDIgIiNzZXQgdmFycyhjcml0aWNhbF9yYW5nZSkgICAgICAgICAgICAgICAgIDxmbG9hdD4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKHByZXNlcnZlX2Fzc2VydGlvbnMpICAgICAgICAgICAgPHRydWUgfCBmYWxzZT4iIApwdXRzICRvcDIgIiNzZXQgdmFycyhjbG9ja19nYXRlX2F3YXJlX29wdCkgICAgICAgICAgIDx0cnVlIHwgZmFsc2U+IgojcHV0cyAkb3AyICIjc2V0IHZhcnMocG93ZXJfZWZmb3J0KSAgICAgICAgICAgICAgICAgICA8bm9uZSB8IGxvdyB8IGhpZ2g+IgojcHV0cyAkb3AyICIjc2V0IHZhcnMocG93ZXJfcmF0aW8pICAgICAgICAgICAgICAgICAgICA8ZmxvYXQ+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhmaXhfaG9sZF9hbGxvd190bnNfZGVncmFkYXRpb24pIDx0cnVlIHwgZmFsc2U+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh1c2VmdWxfc2tldykgICAgICAgICAgICAgICAgICAgIDx0cnVlIHwgZmFsc2U+IgojcHV0cyAkb3AyICIjc2V0IHZhcnMoc2tld19idWZmZXJzKSAgICAgICAgICAgICAgICAgICA8dHJ1ZSB8IGZhbHNlPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoZml4X2hvbGQpICAgICAgICAgICAgICAgICAgICAgICA8ZmFsc2UgfCBwb3N0Y3RzIHwgcG9zdHJvdXRlID4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGZpeF9ob2xkX2lnbm9yZV9pb3MpICAgICAgICAgICAgPHRydWUgfCBmYWxzZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGRlbGF5X2NlbGxzKSAgICAgICAgICAgICAgICAgICAgPGxpc3Qgb2YgZGVsYXkgY2VsbHM+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhkb250X3VzZV9saXN0KSAgICAgICAgICAgICAgICAgIDxsaXN0IG9mIGNlbGxzPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoZG9udF91c2VfZmlsZSkgICAgICAgICAgICAgICAgICA8ZmlsZSBvZiBkb250IHVzZSBjb21tYW5kcz4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKHVzZV9saXN0KSAgICAgICAgICAgICAgICAgICAgICAgPGxpc3Qgb2YgY2VsbHM+IgpwdXRzICRvcDIgIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCmZvcmVhY2ggb3B0aW9uIFtnZXRPcHRNb2RlIC1xdWlldF0gewogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJjcml0aWNhbFJhbmdlIn0gewogICAgICBwdXRzICRvcDIgIiNzZXQgdmFycyhjcml0aWNhbF9yYW5nZSkgICAgICAgICAgICAgICAgIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJwcmVzZXJ2ZUFzc2VydGlvbnMifSB7CiAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnMocHJlc2VydmVfYXNzZXJ0aW9ucykgICAgICAgICAgICBbbGluZGV4ICRvcHRpb24gMV0iCiAgIH0gCiMgICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJsZWFrYWdlUG93ZXJFZmZvcnQifSB7CiMgICAgICBwdXRzICRvcDIgInNldCB2YXJzKGxlYWthZ2VfcG93ZXJfZWZmb3J0KSAgICAgICAgICAgW2xpbmRleCAkb3B0aW9uIDFdIgojICAgfQojICAgaWYge1tsaW5kZXggJG9wdGlvbiAwXSA9PSAiZHluYW1pY1Bvd2VyRWZmb3J0In0gewojICAgICAgcHV0cyAkb3AyICJzZXQgdmFycyhkeW5hbWljX3Bvd2VyX2VmZm9ydCkgICAgICAgICAgIFtsaW5kZXggJG9wdGlvbiAxXSIKIyAgIH0KICAgaWYge1tsaW5kZXggJG9wdGlvbiAwXSA9PSAiZml4SG9sZEFsbG93U2V0dXBUbnNEZWdyYWRlIn0gewogICAgICBwdXRzICRvcDIgInNldCB2YXJzKGZpeF9ob2xkX2FsbG93X3Ruc19kZWdyYWRhdGlvbikgW2xpbmRleCAkb3B0aW9uIDFdIgogICB9CiAgIGlmIHtbbGluZGV4ICRvcHRpb24gMF0gPT0gImNsa0dhdGVBd2FyZSJ9IHsKICAgICAgcHV0cyAkb3AyICJzZXQgdmFycyhjbG9ja19nYXRlX2F3YXJlX29wdCkgICAgICAgICAgIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJ1c2VmdWxTa2V3In0gewogICAgICBwdXRzICRvcDIgInNldCB2YXJzKHVzZWZ1bF9za2V3KSAgICAgICAgICAgICAgICAgICAgW2xpbmRleCAkb3B0aW9uIDFdIgogICB9Cn0KI2ZvcmVhY2ggb3B0aW9uIFtnZXRVc2VmdWxTa2V3TW9kZSAtcXVpZXRdIHsKIyAgIGlmIHtbbGluZGV4ICRvcHRpb24gMF0gPT0gInVzZUNlbGxzIn0gewojICAgICAgaWYge1tsaW5kZXggJG9wdGlvbiAxXSAhPSAiIn0gewojICAgICAgICAgcHV0cyAkb3AyICJzZXQgdmFycyhza2V3X2J1ZmZlcnMpIFwiXFwiCiMgICAgICAgICBmb3JlYWNoIGNlbGwgW2xpbmRleCAkb3B0aW9uIDFdIHsKIyAgICAgICAgICAgIHB1dHMgJG9wMiAiICAgJGNlbGwgXFwiCiMgICAgICAgICB9CiMgICAgICAgICBwdXRzICRvcDIgIlwiIiAKIyAgICAgIH0gCiMgICB9CiN9CmNhdGNoIHtzZXQgZm9vIFtnZXRfbGluZV9tYXRjaCAic2V0IGRvbid0IHVzZSBieSBVc2VyIiBbZ2V0TG9nRmlsZU5hbWVdXX0KaWYge1tpbmZvIGV4aXN0cyBmb29dICYmICgkZm9vICE9ICIiKSB9IHsKICAgcHV0cyAkb3AyICJzZXQgdmFycyhkb250X3VzZV9saXN0KSBcIlxcIgogICBmb3JlYWNoIGxpbmUgW2dldF9saW5lX21hdGNoICJzZXQgZG9uJ3QgdXNlIGJ5IFVzZXIiIFtnZXRMb2dGaWxlTmFtZV0gMF0gewojICAgICAgbGFwcGVuZCB2YXJzKGRvbnRfdXNlX2xpc3QpIFtsaW5kZXggW3NwbGl0IFtsaW5kZXggJGxpbmUgMF0gIi8iXSAxXQogICAgICAgcHV0cyAkb3AyICIgICBbbGluZGV4IFtzcGxpdCBbbGluZGV4ICRsaW5lIDBdICIvIl0gMV0gXFwiCiAgIH0KICAgcHV0cyAkb3AyICJcIiIKfQpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgQW5hbHlzaXMgT3B0aW9ucyIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMoYWN0aXZpdHlfZmlsZSkgICAgICAgIDxhY3Rpdml0eSBmaWxlPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoYWN0aXZpdHlfZmlsZV9mb3JtYXQpIDxUQ0YgfCBTQUYgfCBWQ0Q+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhyZXBvcnRfcG93ZXIpICAgICAgICAgPHRydWUgb3IgZmFsc2U+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhwb3dlcl9hbmFseXNpc192aWV3KSAgPHBvd2VyIGFuYWx5c2lzIHZpZXc+IgpwdXRzICRvcDIgIiIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFub3JvdXRlIE9wdGlvbnMiCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiI3NldCB2YXJzKG11bHRpX2N1dF9lZmZvcnQpICAgICAgICA8bG93IHwgbWVkaXVtIHwgaGlnaD4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGFudGVubmFfZGlvZGUpICAgICAgICAgICA8Y2VsbCBuYW1lPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMobGl0aG9fZHJpdmVuX3JvdXRpbmcpICAgIDx0cnVlIHwgZmFsc2U+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh2ZXJpZnlfbGl0aG8pICAgICAgICAgICAgPHRydWUgfCBmYWxzZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGxwYV90ZWNoX2ZpbGUpICAgICAgICAgICA8ZmlsZSBuYW1lPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoZml4X2xpdGhvKSAgICAgICAgICAgICAgIDx0cnVlIHwgZmFsc2U+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhscGFfY29uZl9maWxlKSAgICAgICAgICAgPGZpbGUgbmFtZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKHBvc3Ryb3V0ZV9zcHJlYWRfd2lyZXMpICA8dHJ1ZSB8IGZhbHNlPiIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKZm9yZWFjaCBvcHRpb24gW2dldE5hbm9Sb3V0ZU1vZGUgLXF1aWV0XSB7CiAgIGlmIHtbbGluZGV4ICRvcHRpb24gMF0gPT0gImRyb3V0ZVVzZU11bHRpQ3V0VmlhRWZmb3J0In0gewogICAgICBwdXRzICRvcDIgInNldCB2YXJzKG11bHRpX2N1dF9lZmZvcnQpICAgICBbbGluZGV4ICRvcHRpb24gMV0iCiAgIH0KICAgaWYge1tsaW5kZXggJG9wdGlvbiAwXSA9PSAicm91dGVXaXRoTGl0aG9Ecml2ZW4ifSB7CiAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnMobGl0aG9fZHJpdmVuX3JvdXRpbmcpIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQp9CgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRyYWN0aW9uIE9wdGlvbnMiCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGNvdXBsaW5nX2NfdGhyZXNoKSAgICAgICA8ZmxvYXQ+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhyZWxhdGl2ZV9jX3RocmVzaCkgICAgICAgPGZsb2F0PiIKcHV0cyAkb3AyICIjc2V0IHZhcnModG90YWxfY190aHJlc2gpICAgICAgICAgIDxmbG9hdD4iCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCmZvcmVhY2ggb3B0aW9uIFtnZXRFeHRyYWN0UkNNb2RlIC1xdWlldF0gewogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJjb3VwbGluZ19jX3RoIn0gewogICAgICBwdXRzICRvcDIgIiNzZXQgdmFycyhjb3VwbGluZ19jX3RocmVzaCkgICAgICAgW2xpbmRleCAkb3B0aW9uIDFdIgogICB9CiAgIGlmIHtbbGluZGV4ICRvcHRpb24gMF0gPT0gInJlbGF0aXZlX2NfdGgifSB7CiAgICAgIHB1dHMgJG9wMiAiI3NldCB2YXJzKHJlbGF0aXZlX2NfdGhyZXNoKSAgICAgICBbbGluZGV4ICRvcHRpb24gMV0iCiAgIH0KICAgaWYge1tsaW5kZXggJG9wdGlvbiAwXSA9PSAidG90YWxfY190aCJ9IHsKICAgICAgcHV0cyAkb3AyICIjc2V0IHZhcnModG90YWxfY190aHJlc2gpICAgICAgICAgIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQp9CnB1dHMgJG9wMiAiIyBTaWdub2ZmIGV4dHJhY3Rpb24gcmVxdWlyZXMgcXJjX3RlY2ggZmlsZTsgaWYgeW91IGRvbnQgaGF2ZSBvbmUsIHBsZWFzZSBzd2l0Y2ggdG8gZWZmb3J0IGxvdy4iCnB1dHMgJG9wMiAiIyBCdXQga2VlcCBpbiBtaW5kLCBlZmZvcnQgbG93IGlzIE5PVCBhbGxvd2VkIGZvciBwcm9jZXNzIG5vZGVzIDMybm0gYW5kIGJlbG93IgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiNzZXQgdmFycyhwb3N0cm91dGVfZXh0cmFjdGlvbl9lZmZvcnQpIDxsb3cgfCBtZWRpdW0gfCBoaWdoPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoc2lnbm9mZl9leHRyYWN0aW9uX2VmZm9ydCkgICA8bG93IHwgbWVkaXVtIHwgaGlnaCB8IHNpZ25vZmY+IgpwdXRzICRvcDIgIiIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmFsIEludGVncml0eSBPcHRpb25zIgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiNzZXQgdmFycyhkZWx0YV9kZWxheV90aHJlc2hvbGQpICA8ZmxvYXQ+IChpbiBuYW5vc2Vjb25kcykiCnB1dHMgJG9wMiAiI3NldCB2YXJzKGNlbHRpY19zZXR0aW5ncykgICAgICAgIDxzdHJpbmc+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhzaV9hbmFseXNpc190eXBlKSAgICAgICA8ZGVmYXVsdCB8IHBlc3NpbWlzdGljPiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoYWNjZXB0YWJsZV93bnMpICAgICAgICAgPGZsb2F0PiIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKZm9yZWFjaCBvcHRpb24gW2dldFNJTW9kZSAtcXVpZXRdIHsKICAgaWYge1tsaW5kZXggJG9wdGlvbiAwXSA9PSAiZGVsdGFEZWxheVRocmVzaG9sZCJ9IHsKICAgICAgcHV0cyAkb3AyICJzZXQgdmFycyhkZWx0YV9kZWxheV90aHJlc2hvbGQpIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQogICBpZiB7W2xpbmRleCAkb3B0aW9uIDBdID09ICJpbnNDZWx0SUNQcmVUQ0wifSB7CiAgICAgIHB1dHMgJG9wMiAic2V0IHZhcnMoY2VsdGljX3NldHRpbmdzKSAgICAgICBbbGluZGV4ICRvcHRpb24gMV0iCiAgIH0KICAgaWYge1tsaW5kZXggJG9wdGlvbiAwXSA9PSAiYW5hbHlzaXNUeXBlIn0gewogICAgICBwdXRzICRvcDIgInNldCB2YXJzKHNpX2FuYWx5c2lzX3R5cGUpICAgICAgIFtsaW5kZXggJG9wdGlvbiAxXSIKICAgfQp9CgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgT3B0aW9uYWxseSBkZWZpbmUgdGhlIGZvbGxvd2luZyB3aGVuIGFwcGxpY2FibGUiCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGFzc2lnbl9idWZmZXIpICAgICB7MSAtYnVmZmVyIDxidWZmZXIgbmFtZT59IgpwdXRzICRvcDIgIiNzZXQgdmFycyhidWZmZXJfdGllX2Fzc2lnbikgPHRydWUgfCBmYWxzZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKGp0YWdfcm93cykgICAgICAgICA8bnVtYmVyIG9mIHJvd3MgZm9yIGp0YWcgcGxhY2VtZW50PiIKcHV0cyAkb3AyICIjc2V0IHZhcnMoanRhZ19jZWxscykgICAgICAgIDxsaXN0IG9mIGp0YWcgY2VsbHM+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhzcGFyZV9jZWxscykgICAgICAgPGxpc3Qgb2Ygc3BhcmUgY2VsbHMgaW5zdGFuY2VzPiIKCgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgQmVsb3cgYXJlIHRoZSBhdmFpbGFibGUgcGx1Zy1pbnMgZm9yIHRoZSBmbGF0IGZvdW5kYXRpb24gZmxvdy4gIEVhY2ggIgpwdXRzICRvcDIgIiMgc2hvdWxkIHBvaW50IHRvIGEgZmlsZS4gSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgdGhlIGZsb3cgd2lsbCBwcmludCIKcHV0cyAkb3AyICIjIGEgd2FybmluZyBhbiBjb250aW51ZS4gIFRoZSBwbGFjZV90Y2wgYW5kIGN0c190Y2wgYXJlIHVuaXF1ZSBpbiB0aGF0ICIKcHV0cyAkb3AyICIjIHRoZXkgUkVQTEFDRSB0aGUgcGxhY2VEZXNpZ24gYW5kIGNsb2NrRGVzaWduIGNhbGxzLCByZXNwZWN0aXZlbHkuIgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgInNldCB2YXJzKGFsd2F5c19zb3VyY2VfdGNsKSAgICAgICAgICAgXCR2YXJzKHBsdWdfZGlyKS9hbHdheXNfc291cmNlLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhmaW5hbF9hbHdheXNfc291cmNlX3RjbCkgICAgIFwkdmFycyhwbHVnX2RpcikvZmluYWxfYWx3YXlzX3NvdXJjZS50Y2wiCnB1dHMgJG9wMiAic2V0IHZhcnMocHJlX2luaXRfdGNsKSAgICAgICAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3ByZV9pbml0LnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwb3N0X2luaXRfdGNsKSAgICAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcG9zdF9pbml0LnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwcmVfcGxhY2VfdGNsKSAgICAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX3BsYWNlLnRjbCIKcHV0cyAkb3AyICIjc2V0IHZhcnMocGxhY2VfdGNsKSAgICAgICAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcGxhY2UudGNsIgpwdXRzICRvcDIgInNldCB2YXJzKHBvc3RfcGxhY2VfdGNsKSAgICAgICAgICAgICAgXCR2YXJzKHBsdWdfZGlyKS9wb3N0X3BsYWNlLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwcmVfcHJlY3RzX3RjbCkgICAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX3ByZWN0cy50Y2wiCnB1dHMgJG9wMiAic2V0IHZhcnMocG9zdF9wcmVjdHNfdGNsKSAgICAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3Bvc3RfcHJlY3RzLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwcmVfY3RzX3RjbCkgICAgICAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX2N0cy50Y2wiCnB1dHMgJG9wMiAiI3NldCB2YXJzKGN0c190Y2wpICAgICAgICAgICAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL2N0cy50Y2wiCnB1dHMgJG9wMiAic2V0IHZhcnMocG9zdF9jdHNfdGNsKSAgICAgICAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3Bvc3RfY3RzLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwcmVfcG9zdGN0c190Y2wpICAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX3Bvc3RjdHMudGNsIgpwdXRzICRvcDIgInNldCB2YXJzKHBvc3RfcG9zdGN0c190Y2wpICAgICAgICAgICAgXCR2YXJzKHBsdWdfZGlyKS9wb3N0X3Bvc3RjdHMudGNsIgpwdXRzICRvcDIgInNldCB2YXJzKHByZV9yb3V0ZV90Y2wpICAgICAgICAgICAgICAgXCR2YXJzKHBsdWdfZGlyKS9wcmVfcm91dGUudGNsIgpwdXRzICRvcDIgInNldCB2YXJzKHBvc3Rfcm91dGVfdGNsKSAgICAgICAgICAgICAgXCR2YXJzKHBsdWdfZGlyKS9wb3N0X3JvdXRlLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwcmVfcG9zdGN0c19ob2xkX3RjbCkgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX3Bvc3RjdHNfaG9sZC50Y2wiCnB1dHMgJG9wMiAic2V0IHZhcnMocG9zdF9wb3N0Y3RzX2hvbGRfdGNsKSAgICAgICBcJHZhcnMocGx1Z19kaXIpL3Bvc3RfcG9zdGN0c19ob2xkLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwcmVfcG9zdHJvdXRlX3RjbCkgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX3Bvc3Ryb3V0ZS50Y2wiCnB1dHMgJG9wMiAic2V0IHZhcnMocG9zdF9wb3N0cm91dGVfdGNsKSAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3Bvc3RfcG9zdHJvdXRlLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwcmVfcG9zdHJvdXRlX2hvbGRfdGNsKSAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX3Bvc3Ryb3V0ZV9ob2xkLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwb3N0X3Bvc3Ryb3V0ZV9ob2xkX3RjbCkgICAgIFwkdmFycyhwbHVnX2RpcikvcG9zdF9wb3N0cm91dGVfaG9sZC50Y2wiCnB1dHMgJG9wMiAic2V0IHZhcnMocHJlX3NpZ25vZmZfdGNsKSAgICAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3ByZV9zaWdub2ZmLnRjbCIKcHV0cyAkb3AyICJzZXQgdmFycyhwb3N0X3NpZ25vZmZfdGNsKSAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcG9zdF9zaWdub2ZmLnRjbCIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiMgQmVsb3cgYXJlIHRoZSBwbHVnLWlucyBhdmFpbGFibGUgZm9yIHRoZSBoaWVyYXJjaGljYWwgZmxvdyAuLi4gbm90ZSIKcHV0cyAkb3AyICIjIHRoZSBhZGRpdGlvbmFsIHBsdWctaW5zIGZvciB0aGUgcGFydGl0aW9uIGFuZCBhc3NlbWJsZSBzdGVwcy4gICIKcHV0cyAkb3AyICIjIEtlZXAgaW4gbWluZCAiCnB1dHMgJG9wMiAiIyAgICAtIFRoZSBwYXJ0aXRpb25pbmcgc3RlcCB3aWxsIGFsc28gbG9hZCB0aGUgcHJlL3Bvc3QgaW5pdCIKcHV0cyAkb3AyICIjICAgICAgYW5kIHByZS9wb3N0IHBsYWNlIHBsdWctaW5zIChzZWUgYWJvdmUpLiIKcHV0cyAkb3AyICIjICAgIC0gVGhlIGFzc2VtYmxlIHN0ZXAgd2lsbCBhbHNvIGxvYWQgdGhlIHByZS9wb3N0IHNpZ25vZmYiCnB1dHMgJG9wMiAiIyAgICAgIHBsdWctaW5zIGFzIHdlbGwuICAiCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMoYWx3YXlzX3NvdXJjZV90Y2wpICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcG9zdF9zaWdub2ZmLnRjbCIKcHV0cyAkb3AyICIjc2V0IHZhcnMoZmluYWxfYWx3YXlzX3NvdXJjZV90Y2wpICAgIFwkdmFycyhwbHVnX2RpcikvZmluYWxfYWx3YXlzX3NvdXJjZS50Y2wiCnB1dHMgJG9wMiAiI3NldCB2YXJzKHByZV9tb2RlbF9nZW5fdGNsKSAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3ByZV9tb2RlbF9nZW4udGNsIgpwdXRzICRvcDIgIiNzZXQgdmFycyhwb3N0X21vZGVsX2dlbl90Y2wpICAgICAgICAgXCR2YXJzKHBsdWdfZGlyKS9wb3N0X21vZGVsX2dlbi50Y2wiCnB1dHMgJG9wMiAiI3NldCB2YXJzKHByZV9waW5fYXNzaWduX3RjbCkgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3ByZV9waW5fYXNzaWduLnRjbCIKcHV0cyAkb3AyICIjc2V0IHZhcnMocG9zdF9waW5fYXNzaWduX3RjbCkgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcG9zdF9waW5fYXNzaWduLnRjbCIKcHV0cyAkb3AyICIjc2V0IHZhcnMocHJlX3BhcnRpdGlvbl90Y2wpICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX3BhcnRpdGlvbi50Y2wiCnB1dHMgJG9wMiAiI3NldCB2YXJzKHBvc3RfcGFydGl0aW9uX3RjbCkgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3Bvc3RfcGFydGl0aW9uLnRjbCIKcHV0cyAkb3AyICIjc2V0IHZhcnMocHJlX2Fzc2VtYmxlX3RjbCkgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcHJlX2Fzc2VtYmxlLnRjbCIKcHV0cyAkb3AyICIjc2V0IHZhcnMocG9zdF9hc3NlbWJsZV90Y2wpICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcG9zdF9hc3NlbWJsZS50Y2wiCnB1dHMgJG9wMiAiI3NldCB2YXJzKHByZV9zaWdub2ZmX3RjbCkgICAgICAgICAgICBcJHZhcnMocGx1Z19kaXIpL3ByZV9zaWdub2ZmLnRjbCIKcHV0cyAkb3AyICIjc2V0IHZhcnMocG9zdF9zaWdub2ZmX3RjbCkgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvcG9zdF9zaWdub2ZmLnRjbCIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiMgQWxsIG90aGVyIHBsdWctaW5zIGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBmbGF0IGltcGxlbWVudGF0aW9uIgpwdXRzICRvcDIgIiMgb2YgdGhlIHBhcnRpdGlvbnMuIFRvIGVuYWJsZSBwbHVnLWlucyBmb3IgcGFydGl0aW9uIGltcGxlbWVudGF0aW9uIgpwdXRzICRvcDIgIiMgZGVmaW5lIGluIHRoZSB2YXJzKDxwYXJ0Pixpbm5vdnVzX2NvbmZpZ190Y2wpIGZpbGUgZm9yIHRoYXQgcGFydGl0aW9uIgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiIyBUbyBpbnNlcnQgbWV0YWwgZmlsbCBkdXJpbmcgdGhlIGZsb3cgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdHdvIHZhcmlhYmxlczoiCnB1dHMgJG9wMiAiIyAtIHZhcnMobWV0YWxmaWxsKSAgICBcW3ByZV9wb3N0cm91dGUsIHByZV9zaWdub2ZmXF0iCnB1dHMgJG9wMiAiIyAtIHZhcnMobWV0YWxmaWxsX3RjbCkgPHBhdGggdG8gbWV0YWxmaWxsIHBsdWctaW4gZmlsZT4iCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMobWV0YWxmaWxsKSAgICAgICAgICAgICAgICAgIHByZV9wb3N0cm91dGUiCnB1dHMgJG9wMiAiI3NldCB2YXJzKG1ldGFsZmlsbF90Y2wpICAgICAgICAgICAgIFwkdmFycyhwbHVnX2RpcikvbWV0YWxmaWxsLnRjbCIKCnB1dHMgJG9wMiAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgpwdXRzICRvcDIgIiMgRGlzdHJpYnV0aW9uIHNldHVwIC4uLiB2YXJzKGRpc3RyaWJ1dGUpIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCnB1dHMgJG9wMiAiIyBsc2YsIHJzaCwgbG9jYWwsIG9yIGN1c3RvbSIKcHV0cyAkb3AyICIjIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdmFycyhkaXN0cmlidXRlKSwgYWRkaXRpb24gdmFyaWFibGVzIgpwdXRzICRvcDIgIiMgbWF5IGJlIHJlcXVpcmVkLiAgU29tZSBleGFtcGxlcyBhcmUgc2hvd24gYmVsb3ciCnB1dHMgJG9wMiAiIyBBbHNvLCBhIHRpbWVvdXQgY2FuIGJlIHNldCAodW5pdCBpcyBzZWNvbmRzKSIKcHV0cyAkb3AyICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpwdXRzICRvcDIgIiNzZXQgdmFycyhkaXN0cmlidXRlKSAgICAgICAgICAgY3VzdG9tIgpwdXRzICRvcDIgIiNzZXQgdmFycyhkaXN0cmlidXRlX3RpbWVvdXQpICAgMzYwMCIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY3VzdG9tLHNjcmlwdCkgICAgICAgIHsvZ3JpZC9zZmkvZmFybS9iaW4vZ3JpZHN1YiAtVyA3MjowMCAtUCBTT0M3LjEgLVIgXCJTRklBUkNIPT1PUFQ2NCAmJiBPU1JFTD09RUU0MFwiIC1xIGxueDY0fSIKcHV0cyAkb3AyICIjc2V0IHZhcnMobHNmLHF1ZXVlKSAgICAgICAgICAgIGxueDY0IgpwdXRzICRvcDIgIiNzZXQgdmFycyhsc2YscmVzb3VyY2UpICAgICAgICAgXCJTRklBUkNIPT1PUFQ2NCAmJiBPU1JFTD09RUU0MFwiIgpwdXRzICRvcDIgIiNzZXQgdmFycyhsc2YsYXJncykgICAgICAgICAgICAgXCItVyA3MjowMCAtUCBTT0M4LjFcIiIKcHV0cyAkb3AyICIjc2V0IHZhcnMobG9jYWxfY3B1cykgICAgICAgICAgIDIiCnB1dHMgJG9wMiAiI3NldCB2YXJzKHJlbW90ZV9ob3N0cykgICAgICAgICAyIgpwdXRzICRvcDIgIiNzZXQgdmFycyhjcHVfcGVyX3JlbW90ZV9ob3N0KSAgMiIKcHV0cyAkb3AyICIjc2V0IHZhcnMocnNoLGhvc3RzKSAgICAgICAgICAgIDxsaXN0IG9mIGhvc3RzPiIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMiAiIyBDYXB0dXJlIHFvciBhbmQgcnVuIHRpbWUgbWV0cmljcyAuLi4iCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMoY2FwdHVyZV9tZXRyaWNzKSBmYWxzZSIKcHV0cyAkb3AyICJzZXQgdmFycyhyZXBvcnRfcnVuX3RpbWUpIHRydWUiCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICIjc2V0IHZhcnMoaHRtbF9zdW1tYXJ5KSA8ZmlsZW5hbWU+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh0aW1lX2luZm9fcnB0KSA8ZmlsZW5hbWU+IgpwdXRzICRvcDIgIiNzZXQgdmFycyh0aW1lX2luZm9fZGJzKSA8ZmlsZW5hbWU+IgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AyICIjIE1ha2VmaWxlIG9wdGlvbnMgLi4uIgpwdXRzICRvcDIgIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCnB1dHMgJG9wMiAiI3NldCB2YXJzKG1ha2VfdG9vbCkgPGlubm92dXMgZXhlY3V0YWJsZT4iCnB1dHMgJG9wMiAiI3NldCB2YXJzKG1ha2VfdG9vbF9hcmdzKSBcIi02NCAtbm93aW5cIiIKcHV0cyAkb3AyICIjc2V0IHZhcnMobWFrZV9zeW5fdG9vbCkgPHJjIGV4ZWN1dGFibGU+IgpwdXRzICRvcDIgIiNzZXQgdmFycyhtYWtlX3N5bl90b29sX2FyZ3MpIFwiLTY0XCIiCnB1dHMgJG9wMiAiI3NldCB2YXJzKG1ha2VfYnJvd3NlcikgbW96aWxsYSIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMiAiIyBBYm9ydCBpZiB0aGVyZSBhcmUgZXJyb3JzIGluIHRoZSBzZXR1cC50Y2wiCnB1dHMgJG9wMiAiIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKcHV0cyAkb3AyICJzZXQgdmFycyhhYm9ydCkgdHJ1ZSIKcHV0cyAkb3AyICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCnB1dHMgJG9wMiAiIyBTZW5kIG1haWwgZHVyaW5nIGZsb3cgZXhlY3V0aW9uOyAgdmFycyhtYWlsLHN0ZXBzKSBkZWZhdWx0cyB0byBBTEwgc3RlcHMuIgpwdXRzICRvcDIgIiNzZXQgdmFycyhtYWlsLHRvKSAgICAgICAgICAgICAgXCI8bGlzdCBvZiBlbWFpbCBhZGRyZXNzZXM+XCIiCnB1dHMgJG9wMiAiI3NldCB2YXJzKG1haWwsc3RlcHMpICAgICAgICAgICBcIjxsaXN0IG9mIHN0ZXBzPlwiIgpwdXRzICRvcDIgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKcHV0cyAkb3AxICJwdXRzIFwiPEZGPiBGaW5pc2hlZCBsb2FkaW5nIHNldHVwLnRjbCBmaWxlXCIiCnB1dHMgJG9wMiAicHV0cyBcIjxGRj4gRmluaXNoZWQgbG9hZGluZyB0aGUgSU5OT1ZVUyBjb25maWd1cmF0aW9uIGZpbGVcIiIKCmNsb3NlICRvcDEKY2xvc2UgJG9wMgoKUHV0cyAiPEZGPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iClB1dHMgIjxGRj4gRmluaXNoZWQgZ2VuZXJhdGluZyBzZXR1cCBmaWxlIFwic2V0dXAuYXV0by50Y2xcIiAuLi4gIgpQdXRzICI8RkY+IHBsZWFzZSBlZGl0IGFuZCByZW5hbWUgdG8gc2V0dXAudGNsIHRvIGVuYWJsZSIKUHV0cyAiPEZGPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iClB1dHMgIjxGRj4gRmluaXNoZWQgZ2VuZXJhdGluZyBJTk5PVlVTIGNvbmZpZyBmaWxlIFwiaW5ub3Z1c19jb25maWcuYXV0by50Y2xcIiAuLi4gIgpQdXRzICI8RkY+IHBsZWFzZSBlZGl0IGFuZCByZW5hbWUgdG8gaW5ub3Z1c19jb25maWcudGNsIHRvIGVuYWJsZSIKUHV0cyAiPEZGPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiNwdXRzICIgICAgIFBsZWFzZSBjaGVjayBmb3IgY29ycmVjdG5lc3MgYW5kIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFzIG5lY2Vzc2FyeSIKaWYge1tpbmZvIGV4aXN0cyBscGZpbGVdfSB7CiAgIGNyZWF0ZV9scF9jb25maWdfZmlsZQogICBQdXRzICI8RkY+IEZpbmlzaGVkIGdlbmVyYXRpbmcgbG93IHBvd2VyIGNvbmZpZyBmaWxlIFwibHBfY29uZmlnLmF1dG8udGNsXCIgLi4uICIKICAgUHV0cyAiPEZGPiBwbGVhc2UgZWRpdCBhbmQgcmVuYW1lIHRvIGxwX2NvbmZpZy50Y2wgdG8gZW5hYmxlIgogICBQdXRzICI8RkY+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKfQpjcmVhdGVfaW52c190YWdfZmlsZQpQdXRzICI8RkY+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKUHV0cyAiPEZGPiBGaW5pc2hlZCBnZW5lcmF0aW5nIElOTk9WVVMgdGFnIGZpbGUgXCJpbnZzLmF1dG8udGNsXCIgLi4uICIKUHV0cyAiPEZGPiBUaGlzIGZpbGUgaXMgZm9yIGRldGFpbGVkIGZsb3cgY3VzdG9taXphdGlvbiBhbmQgaW4gcHVyZWx5IG9wdGlvbmFsLiIKUHV0cyAiPEZGPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCmlmIHtbaW5mbyBleGlzdHMgZG9uZV19IHsgCiAgIGZvcmVhY2ggdmFyIFthcnJheSBuYW1lcyBkb25lXSB7CiAgICAgIHVuc2V0IGRvbmUoJHZhcikKICAgfQp9Cg==