IyBDb3B5cmlnaHQgKEMpIDE5ODgsIDE5ODksIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIE1ha2UuCiMKIyBWTVMgZXh0ZW5zaW9ucyBmcm9tIEdOVSBNYWtlIDMuNjAgaW1wb3J0ZWQgYnkKIyAgS2xhdXMgS+RtcGYgKGtrYWVtcGZAcHJvZ2lzLmRlKSBvZiBwcm9HSVMgU29mdHdhcmUsIEFhY2hlbiwgR2VybWFueQojCiMgR05VIE1ha2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQojIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgR05VIE1ha2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIEdOVSBNYWtlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCgpDQyA9IGNjL3dhcm4KQ1AgPSBjb3B5CgolLm9iajogJS5jCgkkKENDKSAkKENGTEFHUykvb2JqPSRAICQ8CiMKIwlNYWtlZmlsZSBmb3IgR05VIE1ha2UKIwoKQ0ZMQUdTID0gJChkZWZpbmVzKSAvZGVidWcvbm9vcHQvaW5jbHVkZT0oW10sWy5nbG9iXSkKI0xERkxBR1MgPSAvZGViCkxERkxBR1MgPQoKZGVmaW5lcyA9IC9kZWZpbmU9KCJ1bmxpbms9cmVtb3ZlIiwiSEFWRV9DT05GSUdfSCIsIlZNUyIsImFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGU9YWxsb2NfdmFyX2V4cGFuZF9mb3JfZmlsZSIpCgpMT0FEX0FWRyA9IC9kZWZpbmU9Ik5PX0xEQVYiCgojIElmIHlvdSBkb24ndCB3YW50IGFyY2hpdmUgc3VwcG9ydCwgY29tbWVudCB0aGVzZSBvdXQuCkFSQ0hJVkVTID0gLGFyLm9iaixhcnNjYW4ub2JqCkFSQ0hJVkVTX1NSQyA9IGFyLmMgYXJzY2FuLmMKCiMgSWYgeW91ciBzeXN0ZW0gbmVlZHMgZXh0cmEgbGlicmFyaWVzIGxvYWRlZCBpbiwgZGVmaW5lIHRoZW0gaGVyZS4KIyBTeXN0ZW0gViBwcm9iYWJseSBuZWVkIC1sUFcgZm9yIGFsbG9jYS4KIyBpZiBvbiB2YXgsIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUKI0xPQURMSUJFUyA9ICxjLm9wdC9vcHQKTE9BRExJQkVTID0sc3lzJCRsaWJyYXJ5OnZheGNydGwub2xiL2xpYgoKIyBJZiB5b3VyIHN5c3RlbSBkb2Vzbid0IGhhdmUgYWxsb2NhLCBvciB0aGUgb25lIHByb3ZpZGVkIGlzIGJhZCwKIyBnZXQgaXQgZnJvbSB0aGUgRW1hY3MgZGlzdHJpYnV0aW9uIGFuZCBkZWZpbmUgdGhlc2UuCkFMTE9DQSA9ICxhbGxvY2Eub2JqCkFMTE9DQVNSQyA9IGFsbG9jYS5jCgojIElmIHRoZXJlIGFyZSByZW1vdGUgZXhlY3V0aW9uIGZhY2lsaXRpZXMgZGVmaW5lZCwKIyBlbmFibGUgdGhlbSB3aXRoIHN3aXRjaGVzIGhlcmUgKHNlZSByZW1vdGUtKi5jKS4KUkVNT1RFID0KCiMgQW55IGV4dHJhIG9iamVjdCBmaWxlcyB5b3VyIHN5c3RlbSBuZWVkcy4KZXh0cmFzID0gLHNpZ25hbWUub2JqLHJlbW90ZS1zdHViLm9iaix2bXNmdW5jdGlvbnMub2JqLHZtc2lmeS5vYmoKIyxkaXJlY3Rvcnkub2JqCiMgYXMgYW4gYWx0ZXJuYXRpdmU6Cmdsb2IgPSAsWy5nbG9iXWdsb2Iub2JqLFsuZ2xvYl1mbm1hdGNoLm9iagpnZXRvcHQgPSAsZ2V0b3B0Lm9iaixnZXRvcHQxLm9iagojIERpcmVjdG9yeSB0byBpbnN0YWxsIGBtYWtlJyBpbi4KYmluZGlyID0gW10KIyBEaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgbWFuIHBhZ2UgaW4uCm1hbmRpciA9IFtdCiMgTnVtYmVyIHRvIHB1dCBvbiB0aGUgbWFuIHBhZ2UgZmlsZW5hbWUuCm1hbmV4dCA9IDEKCm9ianMgPSBjb21tYW5kcy5vYmosam9iLm9iaixkaXIub2JqLGZpbGUub2JqLG1pc2Mub2JqLFwKICAgICAgIG1haW4ub2JqLHJlYWQub2JqLHJlbWFrZS5vYmoscnVsZS5vYmosaW1wbGljaXQub2JqLFwKICAgICAgIGRlZmF1bHQub2JqLHZhcmlhYmxlLm9iaixleHBhbmQub2JqLGZ1bmN0aW9uLm9iaixcCiAgICAgICB2cGF0aC5vYmosdmVyc2lvbi5vYmokKEFSQ0hJVkVTKSQoQUxMT0NBKSQoZXh0cmFzKSQoZ2V0b3B0KSQoZ2xvYikKc3JjcyA9IGNvbW1hbmRzLmMgam9iLmMgZGlyLmMgZmlsZS5jIG1pc2MuYyBcCgltYWluLmMgcmVhZC5jIHJlbWFrZS5jIHJ1bGUuYyBpbXBsaWNpdC5jIFwKCWRlZmF1bHQuYyB2YXJpYWJsZS5jIGV4cGFuZC5jIGZ1bmN0aW9uLmMgXAoJdnBhdGguYyB2ZXJzaW9uLmMgdm1zZnVuY3Rpb25zLmMgdm1zaWZ5LmMgJChBUkNISVZFU19TUkMpICQoQUxMT0NBU1JDKSBcCgljb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCBqb2IuaCBtYWtlLmggcnVsZS5oIHZhcmlhYmxlLmgKCgouUEhPTlk6IGFsbCBkb2MKYWxsOiBjb25maWcuaCBtYWtlLmV4ZQoKZG9jOiBtYWtlLmluZm8gbWFrZS5kdmkKCgptYWtlLmV4ZTogJChvYmpzKQoJJChMRCkkKExERkxBR1MpL2V4ZT0kQCAkXiQoTE9BRExJQkVTKQoKLlBIT05ZOiBjbGVhbiByZWFsY2xlYW4KY2xlYW46CgktJChSTSkgbWFrZS5leGU7LCoub2JqOyoKCiMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZGVwZW5kZW5jaWVzLgpjb21tYW5kcy5vYmo6IGNvbW1hbmRzLmMgbWFrZS5oIGRlcC5oIGNvbW1hbmRzLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggam9iLmgKam9iLm9iajogam9iLmMgbWFrZS5oIGNvbW1hbmRzLmggam9iLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKZGlyLm9iajogZGlyLmMgbWFrZS5oCmZpbGUub2JqOiBmaWxlLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKbWlzYy5vYmo6IG1pc2MuYyBtYWtlLmggZGVwLmgKbWFpbi5vYmo6IG1haW4uYyBtYWtlLmggY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBqb2IuaApyZWFkLm9iajogcmVhZC5jIG1ha2UuaCBjb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oCnJlbWFrZS5vYmo6IHJlbWFrZS5jIG1ha2UuaCBjb21tYW5kcy5oIGpvYi5oIGRlcC5oIGZpbGVkZWYuaApydWxlLm9iajogcnVsZS5jIG1ha2UuaCBjb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIHJ1bGUuaAppbXBsaWNpdC5vYmo6IGltcGxpY2l0LmMgbWFrZS5oIHJ1bGUuaCBkZXAuaCBmaWxlZGVmLmgKZGVmYXVsdC5vYmo6IGRlZmF1bHQuYyBtYWtlLmggcnVsZS5oIGRlcC5oIGZpbGVkZWYuaCBjb21tYW5kcy5oIHZhcmlhYmxlLmgKdmFyaWFibGUub2JqOiB2YXJpYWJsZS5jIG1ha2UuaCBjb21tYW5kcy5oIHZhcmlhYmxlLmggZGVwLmggZmlsZWRlZi5oCmV4cGFuZC5vYmo6IGV4cGFuZC5jIG1ha2UuaCBjb21tYW5kcy5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oCmZ1bmN0aW9uLm9iajogZnVuY3Rpb24uYyBtYWtlLmggdmFyaWFibGUuaCBkZXAuaCBjb21tYW5kcy5oIGpvYi5oCnZwYXRoLm9iajogdnBhdGguYyBtYWtlLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKdmVyc2lvbi5vYmo6IHZlcnNpb24uYwphcnNjYW4ub2JqOiBhcnNjYW4uYwphci5vYmo6IGFyLmMgbWFrZS5oIGZpbGVkZWYuaApzaWduYW1lLm9iajogc2lnbmFtZS5jCnJlbW90ZS1zdHViLm9iajogcmVtb3RlLXN0dWIuYwpbLmdsb2JdZ2xvYi5vYmo6IFsuZ2xvYl1nbG9iLmMKWy5nbG9iXWZubWF0Y2gub2JqOiBbLmdsb2JdZm5tYXRjaC5jCmdldG9wdC5vYmo6IGdldG9wdC5jCmdldG9wdDEub2JqOiBnZXRvcHQxLmMKCmNvbmZpZy5oOiBjb25maWcuaC12bXMKCSQoQ1ApICQ8ICRACg==