IyAtKi1NYWtlZmlsZS0qLSB0byBidWlsZCBHTlUgbWFrZSBvbiBWTVMKIwojIENvcHlyaWdodCAoQykgMTk5Ni0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBNYWtlLgojCiMgR05VIE1ha2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKIyB2ZXJzaW9uLgojCiMgR05VIE1ha2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCiMgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAojIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCiMgVk1TIGV4dGVuc2lvbnMgZnJvbSBHTlUgTWFrZSAzLjYwIGltcG9ydGVkIGJ5CiMgIEtsYXVzIEvkbXBmIChra2FlbXBmQHJtaS5kZSkKIyBNb2RpZmllZCBmb3IgdmVyc2lvbiAzLjc4LjEgYnkgSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbS4KIyBNb2RpZmllZCBmb3IgdmVyc2lvbiAzLjgwIGJ5IHppbnNlckBkZWN1cy5kZQojIE1vZGlmaWVkIGZvciB2ZXJzaW9ucyAzLjgxLCAzLjk5LjkwIGJ5IEhhcnRtdXQgQmVja2VyCgpDQyA9IGNjCkNQID0gY29weQoKJS5vYmo6ICUuYwoJJChDQykgJChDRkxBR1MpL29iaj0kQCAkPAojCiMJTWFrZWZpbGUgZm9yIEdOVSBNYWtlCiMKCmlmZXEgKCQoQ0MpLGNjKQpjaW5jbHVkZSA9IC9uZXN0ZWQ9bm9uZS9pbmNsdWRlPShbXSxbLmdsb2JdKQpjcHJlZml4ID0gL3ByZWZpeD0oYWxsLGV4Y2VwdD0oZ2xvYixnbG9iZnJlZSkpCmN3YXJuID0gL3N0YW5kYXJkPXJlbGF4ZWQvd2Fybj0oZGlzYWJsZT1xdWVzdGNvbXBhcmUpCkNGTEFHUyA9ICQoZGVmaW5lcykgJChjaW5jbHVkZSkkKGNwcmVmaXgpJChjd2FybikKZWxzZQpDRkxBR1MgPSAkKGRlZmluZXMpICQoY2luY2x1ZGUpCmVuZGlmCiNMREZMQUdTID0gL2RlYgpMREZMQUdTID0KCmlmZXEgKCQoQ0MpLGNjKQpkZWZpbmVzID0gL2RlZmluZT0oInVubGluaz1yZW1vdmUiLCJIQVZFX0NPTkZJR19IIiwiVk1TIiwiYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZT1hbGxvY192YXJfZXhwYW5kX2Zvcl9maWxlIikKZWxzZQppZmVxICgkKEFSQ0gpLFZBWCkKZGVmaW5lcyA9IC9kZWZpbmU9KCJIQVZFX0NPTkZJR19IIiwiR0NDX0lTX05BVElWRSIsIlZBWCIpCmVsc2UKZGVmaW5lcyA9IC9kZWZpbmU9KCJIQVZFX0NPTkZJR19IIiwiR0NDX0lTX05BVElWRSIpCmVuZGlmCmVuZGlmCgpMT0FEX0FWRyA9IC9kZWZpbmU9Ik5PX0xEQVYiCgojIElmIHlvdSBkb24ndCB3YW50IGFyY2hpdmUgc3VwcG9ydCwgY29tbWVudCB0aGVzZSBvdXQuCkFSQ0hJVkVTID0gLGFyLm9iaixhcnNjYW4ub2JqCkFSQ0hJVkVTX1NSQyA9IGFyLmMgYXJzY2FuLmMKCiMgSWYgeW91ciBzeXN0ZW0gbmVlZHMgZXh0cmEgbGlicmFyaWVzIGxvYWRlZCBpbiwgZGVmaW5lIHRoZW0gaGVyZS4KIyBTeXN0ZW0gViBwcm9iYWJseSBuZWVkIC1sUFcgZm9yIGFsbG9jYS4KIyBpZiBvbiB2YXgsIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUKI0xPQURMSUJFUyA9ICxjLm9wdC9vcHQKaWZlcSAoJChDQyksY2MpCiNMT0FETElCRVMgPSxzeXMkJGxpYnJhcnk6dmF4Y3J0bC5vbGIvbGliCkNSVDAgPQplbHNlCkxPQURMSUJFUyA9LGdudV9jY19saWJyYXJ5OmxpYmdjYy5vbGIvbGliCmVuZGlmCgojIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhbGxvY2EsIG9yIHRoZSBvbmUgcHJvdmlkZWQgaXMgYmFkLAojIGdldCBpdCBmcm9tIHRoZSBFbWFjcyBkaXN0cmlidXRpb24gYW5kIGRlZmluZSB0aGVzZS4KI0FMTE9DQSA9ICxhbGxvY2Eub2JqCiNBTExPQ0FTUkMgPSBhbGxvY2EuYwoKIyBJZiB0aGVyZSBhcmUgcmVtb3RlIGV4ZWN1dGlvbiBmYWNpbGl0aWVzIGRlZmluZWQsCiMgZW5hYmxlIHRoZW0gd2l0aCBzd2l0Y2hlcyBoZXJlIChzZWUgcmVtb3RlLSouYykuClJFTU9URSA9CgojIEFueSBleHRyYSBvYmplY3QgZmlsZXMgeW91ciBzeXN0ZW0gbmVlZHMuCmV4dHJhcyA9ICxzaWduYW1lLm9iaixyZW1vdGUtc3R1Yi5vYmosdm1zZnVuY3Rpb25zLm9iaix2bXNpZnkub2JqCiMsZGlyZWN0b3J5Lm9iagojIGFzIGFuIGFsdGVybmF0aXZlOgpnbG9iID0gLFsuZ2xvYl1nbG9iLm9iaixbLmdsb2JdZm5tYXRjaC5vYmoKZ2V0b3B0ID0gLGdldG9wdC5vYmosZ2V0b3B0MS5vYmoKIyBEaXJlY3RvcnkgdG8gaW5zdGFsbCAnbWFrZScgaW4uCmJpbmRpciA9IFtdCiMgRGlyZWN0b3J5IHRvIGluc3RhbGwgdGhlIG1hbiBwYWdlIGluLgptYW5kaXIgPSBbXQojIE51bWJlciB0byBwdXQgb24gdGhlIG1hbiBwYWdlIGZpbGVuYW1lLgptYW5leHQgPSAxCgpndWlsZSA9ICxndWlsZS5vYmoKCm9ianMgPSBjb21tYW5kcy5vYmosam9iLm9iaixvdXRwdXQub2JqLGRpci5vYmosZmlsZS5vYmosbWlzYy5vYmosaGFzaC5vYmosXAogICAgICAgbG9hZC5vYmosbWFpbi5vYmoscmVhZC5vYmoscmVtYWtlLm9iaixydWxlLm9iaixpbXBsaWNpdC5vYmosXAogICAgICAgZGVmYXVsdC5vYmosdmFyaWFibGUub2JqLGV4cGFuZC5vYmosZnVuY3Rpb24ub2JqLHN0cmNhY2hlLm9iaixcCiAgICAgICB2cGF0aC5vYmosdmVyc2lvbi5vYmosdm1zX3Byb2duYW1lLm9iaix2bXNfZXhpdC5vYmosXAogICAgICAgdm1zX2V4cG9ydF9zeW1ib2wub2JqJChndWlsZSkkKEFSQ0hJVkVTKSQoZXh0cmFzKSQoZ2V0b3B0KSQoZ2xvYikKCnNyY3MgPSBjb21tYW5kcy5jIGpvYi5jIG91dHB1dC5jIGRpci5jIGZpbGUuYyBtaXNjLmMgZ3VpbGUuYyBoYXNoLmMgXAoJbG9hZC5jIG1haW4uYyByZWFkLmMgcmVtYWtlLmMgcnVsZS5jIGltcGxpY2l0LmMgXAoJZGVmYXVsdC5jIHZhcmlhYmxlLmMgZXhwYW5kLmMgZnVuY3Rpb24uYyBzdHJjYWNoZS5jIFwKCXZwYXRoLmMgdmVyc2lvbi5jIHZtc2Z1bmN0aW9ucy5jIHZtc2lmeS5jIHZtc19wcm9nbmFtZS5jIHZtc19leGl0LmMgXAoJdm1zX2V4cG9ydF9zeW1ib2wuYyAkKEFSQ0hJVkVTX1NSQykgJChBTExPQ0FTUkMpIFwKCWNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIGpvYi5oIG91dHB1dC5oIG1ha2VpbnQuaCBydWxlLmggdmFyaWFibGUuaAoKCi5QSE9OWTogYWxsIGRvYwphbGw6IGNvbmZpZy5oIG1ha2UuZXhlCgpkb2M6IG1ha2UuaW5mbyBtYWtlLmR2aQoKCm1ha2UuZXhlOiAkKG9ianMpCgkkKExEKSQoTERGTEFHUykvZXhlPSRAICReJChMT0FETElCRVMpJChDUlQwKQoKLlBIT05ZOiBjbGVhbiByZWFsY2xlYW4KY2xlYW46CgktcHVyZ2UgWy4uLl0KCS0kKFJNKSBtYWtlLmV4ZTssKi5vYmo7CgktJChSTSkgWy5nbG9iXSoub2JqOwoKYXIub2JqOiBhci5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIGZpbGVkZWYuaCBoYXNoLmggZGVwLmggXAogICAgIFsuZ2xvYl1mbm1hdGNoLmgKYXJzY2FuLm9iajogYXJzY2FuLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmgKY29tbWFuZHMub2JqOiBjb21tYW5kcy5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIGZpbGVkZWYuaCBcCiAgICAgaGFzaC5oIGRlcC5oIHZhcmlhYmxlLmggam9iLmggb3V0cHV0LmggY29tbWFuZHMuaApkZWZhdWx0Lm9iajogZGVmYXVsdC5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIGZpbGVkZWYuaCBcCiAgICAgaGFzaC5oIHZhcmlhYmxlLmggcnVsZS5oIGRlcC5oIGpvYi5oIG91dHB1dC5oIGNvbW1hbmRzLmgKZGlyLm9iajogZGlyLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmggaGFzaC5oIGZpbGVkZWYuaCBcCiAgICAgZGVwLmggWy5nbG9iXWdsb2IuaApleHBhbmQub2JqOiBleHBhbmQuYyBtYWtlaW50LmggY29uZmlnLmggZ251bWFrZS5oIGdldHRleHQuaCBmaWxlZGVmLmggXAogICAgIGhhc2guaCBqb2IuaCBvdXRwdXQuaCBjb21tYW5kcy5oIHZhcmlhYmxlLmggcnVsZS5oCmZpbGUub2JqOiBmaWxlLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmggZmlsZWRlZi5oIGhhc2guaCBcCiAgICAgZGVwLmggam9iLmggb3V0cHV0LmggY29tbWFuZHMuaCB2YXJpYWJsZS5oIGRlYnVnLmgKWy5nbG9iXWZubWF0Y2gub2JqOiBbLmdsb2JdZm5tYXRjaC5jIGNvbmZpZy5oIFsuZ2xvYl1mbm1hdGNoLmgKZnVuY3Rpb24ub2JqOiBmdW5jdGlvbi5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIGZpbGVkZWYuaCBcCiAgICAgaGFzaC5oIHZhcmlhYmxlLmggZGVwLmggam9iLmggb3V0cHV0LmggY29tbWFuZHMuaCBkZWJ1Zy5oCmdldG9wdC5vYmo6IGdldG9wdC5jIGNvbmZpZy5oIGdldHRleHQuaCBnZXRvcHQuaApnZXRvcHQxLm9iajogZ2V0b3B0MS5jIGNvbmZpZy5oIGdldG9wdC5oClsuZ2xvYl1nbG9iLm9iajogWy5nbG9iXWdsb2IuYyBjb25maWcuaCBbLmdsb2JdZm5tYXRjaC5oIFsuZ2xvYl1nbG9iLmgKZ3VpbGUub2JqOiBndWlsZS5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oCmhhc2gub2JqOiBoYXNoLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmggaGFzaC5oCmltcGxpY2l0Lm9iajogaW1wbGljaXQuYyBtYWtlaW50LmggY29uZmlnLmggZ251bWFrZS5oIGdldHRleHQuaCBmaWxlZGVmLmggXAogICAgIGhhc2guaCBydWxlLmggZGVwLmggZGVidWcuaCB2YXJpYWJsZS5oIGpvYi5oIG91dHB1dC5oIGNvbW1hbmRzLmgKam9iLm9iajogam9iLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0Lmggam9iLmggb3V0cHV0LmggZGVidWcuaCBcCiAgICAgZmlsZWRlZi5oIGhhc2guaCBjb21tYW5kcy5oIHZhcmlhYmxlLmggZGVidWcuaCB2bXNqb2JzLmMKbG9hZC5vYmo6IGxvYWQuYyBtYWtlaW50LmggY29uZmlnLmggZ251bWFrZS5oIGdldHRleHQuaAptYWluLm9iajogbWFpbi5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIGZpbGVkZWYuaCBoYXNoLmggXAogICAgIGRlcC5oIHZhcmlhYmxlLmggam9iLmggb3V0cHV0LmggY29tbWFuZHMuaCBydWxlLmggZGVidWcuaCBnZXRvcHQuaAptaXNjLm9iajogbWlzYy5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIGZpbGVkZWYuaCBoYXNoLmggXAogICAgIGRlcC5oIGRlYnVnLmgKb3V0cHV0Lm9iajogb3V0cHV0LmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0Lmggam9iLmggb3V0cHV0LmgKcmVhZC5vYmo6IHJlYWQuYyBtYWtlaW50LmggY29uZmlnLmggZ251bWFrZS5oIGdldHRleHQuaCBbLmdsb2JdZ2xvYi5oIFwKICAgICBmaWxlZGVmLmggaGFzaC5oIGRlcC5oIGpvYi5oIG91dHB1dC5oIGNvbW1hbmRzLmggdmFyaWFibGUuaCBydWxlLmggXAogICAgIGRlYnVnLmgKcmVtYWtlLm9iajogcmVtYWtlLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmggZmlsZWRlZi5oIFwKICAgICBoYXNoLmggam9iLmggb3V0cHV0LmggY29tbWFuZHMuaCBkZXAuaCB2YXJpYWJsZS5oIGRlYnVnLmgKcmVtb3RlLXN0dWIub2JqOiByZW1vdGUtc3R1Yi5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIFwKICAgICBmaWxlZGVmLmggaGFzaC5oIGpvYi5oIG91dHB1dC5oIGNvbW1hbmRzLmgKcnVsZS5vYmo6IHJ1bGUuYyBtYWtlaW50LmggY29uZmlnLmggZ251bWFrZS5oIGdldHRleHQuaCBmaWxlZGVmLmggaGFzaC5oIFwKICAgICBkZXAuaCBqb2IuaCBvdXRwdXQuaCBjb21tYW5kcy5oIHZhcmlhYmxlLmggcnVsZS5oCnNpZ25hbWUub2JqOiBzaWduYW1lLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmgKc3RyY2FjaGUub2JqOiBzdHJjYWNoZS5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIGhhc2guaAp2YXJpYWJsZS5vYmo6IHZhcmlhYmxlLmMgbWFrZWludC5oIGNvbmZpZy5oIGdudW1ha2UuaCBnZXR0ZXh0LmggZmlsZWRlZi5oIFwKICAgICBoYXNoLmggZGVwLmggam9iLmggb3V0cHV0LmggY29tbWFuZHMuaCB2YXJpYWJsZS5oIHJ1bGUuaAp2ZXJzaW9uLm9iajogdmVyc2lvbi5jIGNvbmZpZy5oCnZtc2Z1bmN0aW9ucy5vYmo6IHZtc2Z1bmN0aW9ucy5jIG1ha2VpbnQuaCBjb25maWcuaCBnbnVtYWtlLmggZ2V0dGV4dC5oIFwKICAgICBkZWJ1Zy5oIGpvYi5oIG91dHB1dC5oIHZtc2Rpci5oCnZtc2lmeS5vYmo6IHZtc2lmeS5jCnZwYXRoLm9iajogdnBhdGguYyBtYWtlaW50LmggY29uZmlnLmggZ251bWFrZS5oIGdldHRleHQuaCBmaWxlZGVmLmggaGFzaC5oIFwKICAgICB2YXJpYWJsZS5oCnZtc19wcm9nbmFtZS5vYmo6IHZtc19wcm9nbmFtZS5jCnZtc19leGl0Lm9iajogdm1zX2V4aXQuYwp2bXNfZXhwb3J0X3N5bWJvbC5vYmo6IHZtc19leHBvcnRfc3ltYm9sLmMKCmNvbmZpZy5oOiBjb25maWcuaC12bXMKCSQoQ1ApICQ8ICRACg==