IyAtKi1NYWtlZmlsZS0qLSB0byBidWlsZCBHTlUgbWFrZSBvbiBWTVMKIwojIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBNYWtlLgojCiMgR05VIE1ha2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKIyB2ZXJzaW9uLgojCiMgR05VIE1ha2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCiMgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAojIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCiMgVk1TIGV4dGVuc2lvbnMgZnJvbSBHTlUgTWFrZSAzLjYwIGltcG9ydGVkIGJ5CiMgIEtsYXVzIEvkbXBmIChra2FlbXBmQHJtaS5kZSkKIyBNb2RpZmllZCBmb3IgdmVyc2lvbiAzLjc4LjEgYnkgSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbS4KIyBNb2RpZmllZCBmb3IgdmVyc2lvbiAzLjgwIGJ5IHppbnNlckBkZWN1cy5kZQojIE1vZGlmaWVkIGZvciB2ZXJzaW9ucyAzLjgxLCAzLjk5LjkwIGJ5IEhhcnRtdXQgQmVja2VyCgpDQyA9IGNjCkNQID0gY29weQoKJS5vYmo6ICUuYwoJJChDQykgJChDRkxBR1MpL29iaj0kQCAkPAojCiMJTWFrZWZpbGUgZm9yIEdOVSBNYWtlCiMKCmlmZXEgKCQoQ0MpLGNjKQpDRkxBR1MgPSAkKGRlZmluZXMpIC9pbmNsdWRlPShbXSxbLmdsb2JdKS9wcmVmaXg9KGFsbCxleGNlcHQ9KGdsb2IsZ2xvYmZyZWUpKS9zdGFuZGFyZD1yZWxheGVkL3dhcm49KGRpc2FibGU9cXVlc3Rjb21wYXJlKQplbHNlCkNGTEFHUyA9ICQoZGVmaW5lcykgL2luY2x1ZGU9KFtdLFsuZ2xvYl0pCmVuZGlmCiNMREZMQUdTID0gL2RlYgpMREZMQUdTID0KCmlmZXEgKCQoQ0MpLGNjKQpkZWZpbmVzID0gL2RlZmluZT0oInVubGluaz1yZW1vdmUiLCJIQVZFX0NPTkZJR19IIiwiVk1TIiwiYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZT1hbGxvY192YXJfZXhwYW5kX2Zvcl9maWxlIikKZWxzZQppZmVxICgkKEFSQ0gpLFZBWCkKZGVmaW5lcyA9IC9kZWZpbmU9KCJIQVZFX0NPTkZJR19IIiwiR0NDX0lTX05BVElWRSIsIlZBWCIpCmVsc2UKZGVmaW5lcyA9IC9kZWZpbmU9KCJIQVZFX0NPTkZJR19IIiwiR0NDX0lTX05BVElWRSIpCmVuZGlmCmVuZGlmCgpMT0FEX0FWRyA9IC9kZWZpbmU9Ik5PX0xEQVYiCgojIElmIHlvdSBkb24ndCB3YW50IGFyY2hpdmUgc3VwcG9ydCwgY29tbWVudCB0aGVzZSBvdXQuCkFSQ0hJVkVTID0gLGFyLm9iaixhcnNjYW4ub2JqCkFSQ0hJVkVTX1NSQyA9IGFyLmMgYXJzY2FuLmMKCiMgSWYgeW91ciBzeXN0ZW0gbmVlZHMgZXh0cmEgbGlicmFyaWVzIGxvYWRlZCBpbiwgZGVmaW5lIHRoZW0gaGVyZS4KIyBTeXN0ZW0gViBwcm9iYWJseSBuZWVkIC1sUFcgZm9yIGFsbG9jYS4KIyBpZiBvbiB2YXgsIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUKI0xPQURMSUJFUyA9ICxjLm9wdC9vcHQKaWZlcSAoJChDQyksY2MpCiNMT0FETElCRVMgPSxzeXMkJGxpYnJhcnk6dmF4Y3J0bC5vbGIvbGliCkNSVDAgPQplbHNlCkxPQURMSUJFUyA9LGdudV9jY19saWJyYXJ5OmxpYmdjYy5vbGIvbGliCmVuZGlmCgojIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhbGxvY2EsIG9yIHRoZSBvbmUgcHJvdmlkZWQgaXMgYmFkLAojIGdldCBpdCBmcm9tIHRoZSBFbWFjcyBkaXN0cmlidXRpb24gYW5kIGRlZmluZSB0aGVzZS4KI0FMTE9DQSA9ICxhbGxvY2Eub2JqCiNBTExPQ0FTUkMgPSBhbGxvY2EuYwoKIyBJZiB0aGVyZSBhcmUgcmVtb3RlIGV4ZWN1dGlvbiBmYWNpbGl0aWVzIGRlZmluZWQsCiMgZW5hYmxlIHRoZW0gd2l0aCBzd2l0Y2hlcyBoZXJlIChzZWUgcmVtb3RlLSouYykuClJFTU9URSA9CgojIEFueSBleHRyYSBvYmplY3QgZmlsZXMgeW91ciBzeXN0ZW0gbmVlZHMuCmV4dHJhcyA9ICxzaWduYW1lLm9iaixyZW1vdGUtc3R1Yi5vYmosdm1zZnVuY3Rpb25zLm9iaix2bXNpZnkub2JqCiMsZGlyZWN0b3J5Lm9iagojIGFzIGFuIGFsdGVybmF0aXZlOgpnbG9iID0gLFsuZ2xvYl1nbG9iLm9iaixbLmdsb2JdZm5tYXRjaC5vYmoKZ2V0b3B0ID0gLGdldG9wdC5vYmosZ2V0b3B0MS5vYmoKIyBEaXJlY3RvcnkgdG8gaW5zdGFsbCAnbWFrZScgaW4uCmJpbmRpciA9IFtdCiMgRGlyZWN0b3J5IHRvIGluc3RhbGwgdGhlIG1hbiBwYWdlIGluLgptYW5kaXIgPSBbXQojIE51bWJlciB0byBwdXQgb24gdGhlIG1hbiBwYWdlIGZpbGVuYW1lLgptYW5leHQgPSAxCgojZ3VpbGUgPSAsZ3VpbGUub2JqCgpvYmpzID0gY29tbWFuZHMub2JqLGpvYi5vYmosb3V0cHV0Lm9iaixkaXIub2JqLGZpbGUub2JqLG1pc2Mub2JqLGhhc2gub2JqLFwKICAgICAgIGxvYWQub2JqLG1haW4ub2JqLHJlYWQub2JqLHJlbWFrZS5vYmoscnVsZS5vYmosaW1wbGljaXQub2JqLFwKICAgICAgIGRlZmF1bHQub2JqLHZhcmlhYmxlLm9iaixleHBhbmQub2JqLGZ1bmN0aW9uLm9iaixzdHJjYWNoZS5vYmosXAogICAgICAgdnBhdGgub2JqLHZlcnNpb24ub2JqXAogICAgICAgJChBUkNISVZFUykkKEFMTE9DQSkkKGV4dHJhcykkKGdldG9wdCkkKGdsb2IpJChndWlsZSkKCnNyY3MgPSBjb21tYW5kcy5jIGpvYi5jIG91dHB1dC5jIGRpci5jIGZpbGUuYyBtaXNjLmMgZ3VpbGUuYyBoYXNoLmMgXAoJbG9hZC5jIG1haW4uYyByZWFkLmMgcmVtYWtlLmMgcnVsZS5jIGltcGxpY2l0LmMgXAoJZGVmYXVsdC5jIHZhcmlhYmxlLmMgZXhwYW5kLmMgZnVuY3Rpb24uYyBzdHJjYWNoZS5jIFwKCXZwYXRoLmMgdmVyc2lvbi5jIHZtc2Z1bmN0aW9ucy5jIHZtc2lmeS5jICQoQVJDSElWRVNfU1JDKSAkKEFMTE9DQVNSQykgXAoJY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggam9iLmggb3V0cHV0LmggbWFrZWludC5oIHJ1bGUuaCB2YXJpYWJsZS5oCgoKLlBIT05ZOiBhbGwgZG9jCmFsbDogY29uZmlnLmggbWFrZS5leGUKCmRvYzogbWFrZS5pbmZvIG1ha2UuZHZpCgoKbWFrZS5leGU6ICQob2JqcykKCSQoTEQpJChMREZMQUdTKS9leGU9JEAgJF4kKExPQURMSUJFUykkKENSVDApCgouUEhPTlk6IGNsZWFuIHJlYWxjbGVhbgpjbGVhbjoKCS1wdXJnZSBbLi4uXQoJLSQoUk0pIG1ha2UuZXhlOywqLm9iajsKCS0kKFJNKSBbLmdsb2JdKi5vYmo7CgojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGRlcGVuZGVuY2llcy4KIyBtYWtlaW50Lmg6IGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmgKIyBmaWxlZGVmLmg6IGhhc2guaAphci5vYmo6IGFyLmMgbWFrZWludC5oIGZpbGVkZWYuaCBkZXAuaCBbLmdsb2JdZm5tYXRjaC5oCmFyc2Nhbi5vYmo6IGFyc2Nhbi5jIG1ha2VpbnQuaApjb21tYW5kcy5vYmo6IGNvbW1hbmRzLmMgbWFrZWludC5oIGRlcC5oIGNvbW1hbmRzLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggam9iLmgKZGVmYXVsdC5vYmo6IGRlZmF1bHQuYyBtYWtlaW50LmggcnVsZS5oIGRlcC5oIGpvYi5oIGZpbGVkZWYuaCBjb21tYW5kcy5oIHZhcmlhYmxlLmgKZGlyLm9iajogZGlyLmMgbWFrZWludC5oIGhhc2guaCBbLmdsb2JdZ2xvYi5oCmV4cGFuZC5vYmo6IGV4cGFuZC5jIG1ha2VpbnQuaCBjb21tYW5kcy5oIGZpbGVkZWYuaCBqb2IuaCBydWxlLmggdmFyaWFibGUuaApmaWxlLm9iajogZmlsZS5jIG1ha2VpbnQuaCBjb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIGpvYi5oIGRlYnVnLmgKZnVuY3Rpb24ub2JqOiBmdW5jdGlvbi5jIG1ha2VpbnQuaCB2YXJpYWJsZS5oIGRlcC5oIGNvbW1hbmRzLmggZmlsZWRlZi5oIGRlYnVnLmggam9iLmgKZ2V0b3B0Lm9iajogZ2V0b3B0LmMgZ2V0b3B0LmggY29uZmlnLmggZ2V0dGV4dC5oCmdldG9wdDEub2JqOiBnZXRvcHQxLmMgZ2V0b3B0LmggY29uZmlnLmgKZ3VpbGUub2JqOiBndWlsZS5jIG1ha2VpbnQuaCBkZWJ1Zy5oIGRlcC5oIGdtay1kZWZhdWx0LmgKaGFzaC5vYmo6IGhhc2guYyBtYWtlaW50LmggaGFzaC5oCmltcGxpY2l0Lm9iajogaW1wbGljaXQuYyBtYWtlaW50LmggcnVsZS5oIGRlcC5oIGZpbGVkZWYuaCBkZWJ1Zy5oIHZhcmlhYmxlLmggam9iLmggY29tbWFuZHMuaApqb2Iub2JqOiBqb2IuYyB2bXNqb2JzLmMgbWFrZWludC5oIGNvbW1hbmRzLmggam9iLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggZGVidWcuaApvdXRwdXQub2JqOiBvdXRwdXQuYyB2bXNqb2JzLmMgbWFrZWludC5oIG91dHB1dC5oIGZpbGVkZWYuaCBkZWJ1Zy5oCmxvYWQub2JqOiBsb2FkLmMgbWFrZWludC5oIGRlYnVnLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKbWFpbi5vYmo6IG1haW4uYyBtYWtlaW50LmggY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBqb2IuaCBydWxlLmggZGVidWcuaCBnZXRvcHQuaAptaXNjLm9iajogbWlzYy5jIG1ha2VpbnQuaCBkZXAuaCBkZWJ1Zy5oCnJlYWQub2JqOiByZWFkLmMgbWFrZWludC5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggWy5nbG9iXWdsb2IuaCBkZWJ1Zy5oIHJ1bGUuaCBqb2IuaApyZW1ha2Uub2JqOiByZW1ha2UuYyBtYWtlaW50LmggY29tbWFuZHMuaCBqb2IuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBkZWJ1Zy5oCnJlbW90ZS1zdHViLm9iajogcmVtb3RlLXN0dWIuYyBtYWtlaW50LmggZmlsZWRlZi5oIGpvYi5oIGNvbW1hbmRzLmgKcnVsZS5vYmo6IHJ1bGUuYyBtYWtlaW50LmggY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBydWxlLmggam9iLmgKc2lnbmFtZS5vYmo6IHNpZ25hbWUuYyBtYWtlaW50LmgKc3RyY2FjaGUub2JqOiBzdHJjYWNoZS5jIG1ha2VpbnQuaCBoYXNoLmgKdmFyaWFibGUub2JqOiB2YXJpYWJsZS5jIG1ha2VpbnQuaCBjb21tYW5kcy5oIHZhcmlhYmxlLmggZGVwLmggZmlsZWRlZi5oIGpvYi5oIHJ1bGUuaAp2ZXJzaW9uLm9iajogdmVyc2lvbi5jIGNvbmZpZy5oCnZtc2Z1bmN0aW9ucy5vYmo6IHZtc2Z1bmN0aW9ucy5jIG1ha2VpbnQuaCB2bXNkaXIuaCBkZWJ1Zy5oIGpvYi5oCnZtc2lmeS5vYmo6IHZtc2lmeS5jCnZwYXRoLm9iajogdnBhdGguYyBtYWtlaW50LmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKWy5nbG9iXWZubWF0Y2gub2JqOiBbLmdsb2JdZm5tYXRjaC5jIFsuZ2xvYl1mbm1hdGNoLmggY29uZmlnLmgKWy5nbG9iXWdsb2Iub2JqOiBbLmdsb2JdZ2xvYi5jIFsuZ2xvYl1nbG9iLmggWy5nbG9iXWZubWF0Y2guaCBjb25maWcuaAoKY29uZmlnLmg6IGNvbmZpZy5oLXZtcwoJJChDUCkgJDwgJEAK