IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICBDQURFTkNFIENPUFlSSUdIVCBOT1RJQ0UKIyAgICAgICAgIKkgMjAwOC0yMDEzIENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBGb3VuZGF0aW9uIEZsb3cgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcGVyZm9ybSBzcGVjaWFsaXplZAojIHRhc2tzLgojCiMgVGhpcyB3b3JrIG1heSBub3QgYmUgY29waWVkLCByZS1wdWJsaXNoZWQsIHVwbG9hZGVkLCBvciBkaXN0cmlidXRlZCBpbiBhbnkgd2F5LAojIGluIGFueSBtZWRpdW0sIHdoZXRoZXIgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KIyBmcm9tIENhZGVuY2UuIE5vdHdpdGhzdGFuZGluZyBhbnkgcmVzdHJpY3Rpb25zIGhlcmVpbiwgc3ViamVjdCB0byBjb21wbGlhbmNlCiMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIENhZGVuY2Ugc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdW5kZXIKIyB3aGljaCB0aGlzIG1hdGVyaWFsIHdhcyBwcm92aWRlZCwgdGhpcyBtYXRlcmlhbCBtYXkgYmUgY29waWVkIGFuZCBpbnRlcm5hbGx5CiMgZGlzdHJpYnV0ZWQgc29sZWx5IGZvciBpbnRlcm5hbCBwdXJwb3NlcyBmb3IgdXNlIHdpdGggQ2FkZW5jZSB0b29scy4KIwojIFRoaXMgd29yayBpcyBDYWRlbmNlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBhbmQgbWF5IHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUKIyBnaXZlbiB0byB0aGlyZCBwYXJ0aWVzLCBuZWl0aGVyIGluIG9yaWdpbmFsIG5vciBpbiBtb2RpZmllZCB2ZXJzaW9ucywgd2l0aG91dAojIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIENhZGVuY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCiMgdGhlIHByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgQ2FkZW5jZSBvciBpdHMgbGljZW5zb3JzLCBhbmQKIyBpcyBzdXBwbGllZCBzdWJqZWN0IHRvLCBhbmQgbWF5IGJlIHVzZWQgb25seSBieSBDYWRlbmNlJ3MgY3VycmVudCBjdXN0b21lcnMKIyBpbiBhY2NvcmRhbmNlIHdpdGgsIGEgcHJldmlvdXNseSBleGVjdXRlZCBsaWNlbnNlIGFncmVlbWVudCBiZXR3ZWVuIENhZGVuY2UKIyBhbmQgaXRzIGN1c3RvbWVyLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEJZIENBREVOQ0UgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAojIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBDQURFTkNFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwKIyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAojIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgojIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgIE1BVEVSSUFMLCBFVkVOIElGCiMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIExvdyBwb3dlciBjb25maWd1cmF0aW9uIGZpbGUgb3ZlcmxheS4gIFRoaXMgZmlsZSBjb250YWlucyBmb3VuZGF0aW9uIGZsb3cgdmFyaWFibGVzCiMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIExQL0NQRiBmbG93IGFuZCBzaG91bGQgYmUgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGUgc2V0dXAudGNsCiMgYW5kIGlubm92dXNfY29uZmlnLnRjbCBmaWxlcwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYWNlbWVudCBPcHRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHNldCB2YXJzKHJlc2l6ZV9zaGlmdGVyX2FuZF9pc29faW5zdHMpIDx0cnVlIHwgZmFsc2U+CiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWUgY2VsbCBpbmZvcm1hdGlvbgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGUgdmFyaWFibGUgdmFycyh0aWVfY2VsbHMpIGlzIGRlZmluZWQgaW4gdGhlIGlubm92dXNfY29uZmlnLnRjbCBhbmQgaXMgdXNlZCB0byBkZWZpbmUgYSAKIyAiZ2xvYmFsIiB0aWUgY2VsbCBsaXN0LiBUaGlzIGxpc3Qgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQgZm9yIGVhY2ggcG93ZXIgZG9tYWluLgojIEl0IGNhbiBiZSBvdmVycmlkZGVuIGZvciBhIGdpdmVuIHBvd2VyIGRvbWFpbiBieSBzZXR0aW5nIHZhcnMoPHBvd2VyX2RvbWFpbj4sdGllX2NlbGxzKS4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgc2V0IHZhcnMoZG9tYWluLHRpZV9jZWxscykgPHRpZSBjZWxscyBmb3IgPHBvd2VyX2RvbWFpbj4+CiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgICAgICAgICAgICAgICAgICAgICAgRmlsbGVyIGNlbGwgaW5mb3JtYXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhlIHZhcmlhYmxlIHZhcnMoZmlsbGVyX2NlbGxzKSBpcyBkZWZpbmVkIGluIHRoZSBpbm5vdnVzX2NvbmZpZy50Y2wgYW5kIGlzIHVzZWQgdG8gZGVmaW5lIGEgCiMgImdsb2JhbCIgZmlsbGVyIGNlbGwgbGlzdC4gVGhpcyBsaXN0IHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IGZvciBlYWNoIHBvd2VyIGRvbWFpbi4KIyBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgYSBnaXZlbiBwb3dlciBkb21haW4gYnkgc2V0dGluZyB2YXJzKDxwb3dlcl9kb21haW4+LGZpbGxlcl9jZWxscykuCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHNldCB2YXJzKGRvbWFpbixmaWxsZXJfY2VsbHMpIDxmaWxsZXIgY2VsbHMgZm9yIDxwb3dlcl9kb21haW4+PgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICAgICBXZWxsdGFwIGNlbGwgaW5mb3JtYXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhlIHZhcmlhYmxlIHZhcnMod2VsbHRhcHMpIGlzIGRlZmluZWQgaW4gdGhlIGlubm92dXNfY29uZmlnLnRjbCBhbmQgaXMgdXNlZCB0byBkZWZpbmUgYSAKIyAiZ2xvYmFsIiB3ZWxsdGFwIGNlbGwgbGlzdC4gVGhpcyBsaXN0IHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0IGZvciBlYWNoIHBvd2VyIGRvbWFpbi4KIyBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgYSBnaXZlbiBwb3dlciBkb21haW4gYnkgc2V0dGluZyB2YXJzKDxwb3dlcl9kb21haW4+LHdlbGx0YXBzKS4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgICAgdmVyaWZ5X3J1bGUgOiBtYXhpbXVtIGRpc3RhbmNlIChpbiBtaWNyb25zKSBiZXR3ZWVuIHdlbGx0YXAgY2VsbHMgYW5kIHN0YW5kYXJkIGNlbGxzIAojICAgICAgICAgICAgICAgICAgaW4gbWljcm9ucwojICAgICAgICBtYXhfZ2FwIDogc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2Ygb25lIHdlbGwtdGFwIGNlbGwgCiMgICAgICAgICAgICAgICAgICB0byB0aGUgbGVmdCBlZGdlIG9mICB0aGUgZm9sbG93aW5nIHdlbGwtdGFwIGNlbGwgaW4gdGhlIHNhbWUgcm93CiMgIGNlbGxfaW50ZXJ2YWwgOiBzcGVjaWZpZXMgdGhlIG1heGltdW0gZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIG9uZSB3ZWxsLXRhcCBjZWxsIAojICAgICAgICAgICAgICAgICAgdG8gdGhlIGNlbnRlciBvZiB0aGUgZm9sbG93aW5nIHdlbGwtdGFwIGNlbGwgaW4gdGhlIHNhbWUgcm93CiMKIyBOT1RFOiBtYXhfZ2FwIGFuZCBjZWxsX2ludGVydmFsIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgdXNlciBoYXMgdG8gZGVmaW5lIAojICAgICAgIG9ubHkgb25lIG9mIHRoZXNlIHBhcmFtZXRlcnMgdG8gYWRkIHdlbGx0YXAgY2VsbHMKIwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPix3ZWxsdGFwcykgCQkgICAgICAgIDx3ZWxsdGFwIGNlbGwgbGlzdCBmb3IgPHBvd2VyX2RvbWFpbj4+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sd2VsbHRhcHMsY2hlY2tlcmJvYXJkKSAgPHRydWUgb3IgZmFsc2U+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sd2VsbHRhcHMsbWF4X2dhcCkgICAgICAgPG1heCBnYXAgaW4gbWljcm9ucz4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPix3ZWxsdGFwcyxjZWxsX2ludGVydmFsKSA8Y2VsbCBpbnRlcnZhbCBpbiBtaWNyb25zPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHdlbGx0YXBzLHJvd19vZmZzZXQpICAgIDxyb3cgb2Zmc2V0IGluIG1pY3JvbnM+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sd2VsbHRhcHMsdmVyaWZ5X3J1bGUpICAgPHZlcmlmeSBydWxlIGRpc3RhbmNlPgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRjYXAgY2VsbCBpbmZvcm1hdGlvbgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGUgdmFyaWFibGVzIHZhcnMocHJlX2VuZGNhcCkgYW5kIHZhcnMocG9zdF9lbmRjYXApIGFyZSBzZXQgaW4gdGhlIGlubm92dXNfY29uZmlnLnRjbCBmaWxlIGFuZAojIGFyZSB1c2VkIHRvIGRlZmluZSAiZ2xvYmFsIiBlbmRjYXAgY2VsbHMuIFRoZXNlIHVzZWQgYnkgZGVmYXVsdCBmb3IgZWFjaCBwb3dlciBkb21haW4uCiMgVGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgYSBnaXZlbiBwb3dlciBkb21haW4gc2V0dGluZyB2YXJzKDxwb3dlcl9kb21haW4+LHByZV9lbmRjYXApCiMgYW5kL29yIHZhcnMoPHBvd2VyX2RvbWFpbj4scG9zdF9lbmRjYXApLgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixwcmVfZW5kY2FwKSAgPHByZSBlbmRjYXAgY2VsbCBmb3IgPHBvd2VyX2RvbWFpbj4+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4scG9zdF9lbmRjYXApIDxwb3N0IGVuZGNhcCBjZWxsIGZvciA8cG93ZXJfZG9tYWluPj4KIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgb24gbmV0IGJ1ZmZlcmluZwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCeSBkZWZhdWx0IFNPQ0UgZG9lcyBhbHdheXMtb24tbmV0IHN5bnRoZXNpcyBmb3IgU1JQRyBjb250cm9sIHNpZ25hbCBhbmQgUFNPIGVuYWJsZSAKIyBzaWduYWxzIGFzIHBhcnQgb2Ygb3B0RGVzaWduIC1wcmVDVFMsIGJ1dCB0aGlzIGNhbiBiZSBtYW51YWxseSBkb25lIGZvciBzcGVjaWZpYyBuZXRzIGlmCiMgbmVjZXNzYXJ5LiAgVG8gZG8gdGhpcywgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB1bmNvbW1lbnQgdGhlIHByZV9wcmVjdHMudGNsCiMgcGx1Zy1pbiB0ZW1wbGF0ZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZXQgdmFycyhhbHdheXNfb25fYnVmZmVycykgICAgICAgICAgICAgICAgCTxsaXN0IG9mIGFsd2F5cyBvbiBidWZmZXJzPgojIHNldCB2YXJzKGFsd2F5c19vbl9uZXRzKSAgICAgICAgICAgICAgICAgIAk8bGlzdCBvZiBhbHdheXMgb24gbmV0cz4KIyBzZXQgdmFycyhhbHdheXNfb25fbmV0cyxtYXhfZmFub3V0KSAgICAgICAJPG1heCBmYW5vdXQgbGltaXQgZm9yIGFsd2F5cyBvbiBuZXRzPiAob3B0aW9uYWwpCiMgc2V0IHZhcnMoYWx3YXlzX29uX25ldHMsbWF4X3RyYW4pICAgICAgICAgCTxtYXggdHJhbnNpdGlvbiBvbiBhbHdheXMgb24gbmV0cz4gKG9wdGlvbmFsKQojIHNldCB2YXJzKGFsd2F5c19vbl9uZXRzLG1heF9za2V3KSAgICAgICAgIAk8bWF4IHNrZXcgZm9yIGFsd2F5cyBvbiBuZXRzPiAob3B0aW9uYWwpCiMgc2V0IHZhcnMoYWx3YXlzX29uX25ldHMsbWF4X2RlbGF5KSAgICAgICAgCTxtYXggZGVsYXkgZm9yIGFsd2F5cyBvbiBuZXRzPiAob3B0aW9uYWwpCiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sYWx3YXlzX29uX2J1ZmZlcnMpICA8YnVmZmVycyBmb3IgPHBvd2VyIGRvbWFpbj4+CiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kYXJ5IHBvd2VyL2dyb3VuZCByb3V0aW5nCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEF1dG9tYXRpYyBzZWNvbmRhcnkgcG93ZXIgcm91dGluZyBjYW4gYmUgZW5hYmxlZCB0aGUgZm91bmRhdGlvbiBmbG93cyBieSBzZXR0aW5nIAojIHZhcnMocm91dGVfc2Vjb25kYXJ5X3BnX25ldHMpIHRvIHRydWUgYW5kIHByb3ZpZGluZyBjZWxsIHBpbiBwYWlyIGluZm9ybWF0aW9uIHRvCiMgaWRlbnRpZnkgdGhlIGNvbm5lY3Rpb25zIHJlcXVpcmluZyByb3V0aW5nIChQVEJVRkZEMTpUVkREIExWTExIQ0Q0OlZEREwsIGUuZy4pIAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZXQgdmFycyhyb3V0ZV9zZWNvbmRhcnlfcGdfbmV0cykgICAgICAgICBbdHJ1ZSB8IGZhbHNlXQojIHNldCB2YXJzKHNlY29uZGFyeV9wZyxjZWxsX3Bpbl9wYWlycykgICAgIDxzZWNvbmRhcnkgcG93ZXIgY2VsbCBwaW4gcGFpciBsaXN0PgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0luIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIGNhbiBvcHRpb25hbGx5IGRlZmluZWQgZWl0aGVyIGdsb2JhbGx5IG9yIHBlciBwL2cgbmV0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHNldCB2YXJzKHNlY29uZGFyeV9wZyxtYXhfZmFub3V0KSAgICAgICAJPG1heCBmYW5vdXQgZm9yIHNlY29uZGFyeSBwb3dlciByb3V0aW5nPgojIHNldCB2YXJzKHNlY29uZGFyeV9wZyxwYXR0ZXJuKSAgICAgICAgICAJPHNlY29uZGFyeSBwb3dlciByb3V0aW5nIHBhdHRlcm4gdHJ1bmsgfCBzdGVpbmVyPgojIHNldCB2YXJzKHNlY29uZGFyeV9wZyxub25fZGVmYXVsdF9ydWxlKSAJPG5vbi1kZWZhdWx0IHJ1bGUgZm9yIHNlY29uZGFyeSBwL2cvIHJvdXRpbmc+CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRvIG9wdGlvbmFsbHkgb3ZlcnJpZGUgZm9yIGEgZ2l2ZW4gcC9nIG5ldChzKSwgdXNlIHRoZSB2YXJzKHJvdXRlX3NlY29uZGFyeV9wZ19uZXRzKSB0byAKIyBkZWZpbmUgdGhlIGxpc3Qgb2YgbmV0cyB0byBiZSBvdmVycmlkZGVuIGFuZCB0aGVuIG92ZXJyaWRlIHZhcnMoPHAvZyBuZXQ+LDxvcHRpb24+KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZXQgdmFycyhzZWNvbmRhcnlfcGcsbmV0cykgICAgICAgICAgCSAgICA8bGlzdCBvZiBwb3dlci9ncm91bmQgbmV0cz4KIyBzZXQgdmFycyg8cC9nX25ldD4sbWF4X2Zhbm91dCkgICAgICAgCSAgICA8bWF4IGZhbm91dD4KIyBzZXQgdmFycyg8cC9nX25ldD4scGF0dGVybikgICAgICAgICAgCSAgICA8dHJ1bmsgfCBzdGVpbmVyPgojIHNldCB2YXJzKDxwL2dfbmV0Pixub25fZGVmYXVsdF9ydWxlKSAJICAgIDxub24gZGVmYXVsdCBydWxlPgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQ0xQIG9wdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgc2V0IHZhcnMoY2xwX29wdGlvbnMpICA8b3B0aW9ucyBmb3IgcnVuQ0xQPgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZXQgdmFycyhjbHBfb3B0aW9ucykgICIiCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgICAgICAgICAgIE1vZGlmeSBwb3dlciBkb21haW5zLCByb3cgY3JlYXRpb24gZm9yIHBvd2VyIGRvbWFpbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhlIGZvdW5kYXRpb24gZmxvd3MgY29udGFpbiBhIHNhbXBsZSBwb3N0X2luaXRfdGNsIChQTFVHL3Bvc3RfaW5pdC50Y2wpIHBsdWctaW4gdG8gZG8gCiMgcG93ZXIgZG9tYWluIG1vZGlmaWNhdGlvbiBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBmb2xsb2luZyB2YXJpYWJsZXM6CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGJib3gpICAgICAgICAgPGxseCBsbHkgdXJ4IHVyeT47IGJvbmRhcnkgY29vcmRpbmF0ZXMgaW4gbWljcm9ucwojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHJzX2V4dHMpICAgICAgPHRvcCBib3QgbGVmdCByaWdodD47IGRpc3RhbmNlIGluIG1pY3JvbnMgIAojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LG1pbl9nYXBzKSAgICAgPHRvcCBib3QgbGVmdCByaWdodD47IGRpc3RhbmNlIGluIG1pY3JvbnMKIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIFNodXQtb2ZmIFBsYW5uaW5nIAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGUgZm91bmRhdGlvbiBmbG93cyBjb250YWluIGEgc2FtcGxlIHBvc3RfaW5pdF90Y2wgKFBMVUcvcG9zdF9pbml0LnRjbCkgcGx1Zy1pbiB0byBkbyAKIyBwb3dlciBzd2l0Y2ggaW5zZXJ0aW9uIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sc3dpdGNoYWJsZSkgICAgICAgICA8dHJ1ZSB8IGZhbHNlPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHN3aXRjaF90eXBlKSAgICAgICAgPGNvbHVtbiB8IHJpbmc+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sc3dpdGNoX2NlbGwpICAgICAgICA8UFNPIGNlbGwgbmFtZT4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixpbnB1dF9lbmFibGVfcGluKSAgIDxQU08gY2VsbCBpbnB1dCBlbmFibGUgcGluPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LG91dHB1dF9lbmFibGVfcGluKSAgPFBTTyBjZWxsIG91dHB1dCBlbmFibGUgcGluPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGlucHV0X2VuYWJsZV9uZXQpICAgPFBTTyBjZWxsIGlucHV0IGVuYWJsZSBuZXQ+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sb3V0cHV0X2VuYWJsZV9uZXQpICA8UFNPIGNlbGwgb3V0cHV0IGVuYWJsZSBuZXQ+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sc3dpdGNoX2luc3RhbmNlKSAgICA8c3dpdGNoTW9kdWxlSW5zdGFuY2U+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sdG9wX29mZnNldCkgICAgICAgICA8dG9wIG9mZnNldCBpbiBtaWNyb25zPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGJvdHRvbV9vZmZzZXQpICAgICAgPGJvdHRvbSBvZmZzZXQgaW4gbWljcm9ucz4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixyaWdodF9vZmZzZXQpICAgICAgIDxyaWdodCBvZmZzZXQgaW4gbWljcm9ucz4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixsZWZ0X29mZnNldCkgICAgICAgIDxsZWZ0IG9mZnNldCBpbiBtaWNyb25zPgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCZWxvdyB2YXJpYWJsZXMgYXJlIGZvciBjb2x1bW4gYmFzZWQgcHNvIGltcGxlbWV0YXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sY2hlY2tlcl9ib2FyZCkgICAgIDx0cnVlIHwgZmFsc2U+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4saG9yaXpvbmFsX3BpdGNoKSAgIDxpbiBtaWNyb25zPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGNvbHVtbl9oZWlnaHQpICAgICA8U3dpdGNoIGNlbGwgY29sdW1uIGhlaWdodCBpbiBtaWNyb25zPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHNraXBfcm93cykgICAgICAgICA8TnVtYmVyIG9mIHJvd3MgdG8gc2tpcD4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixiYWNrX3RvX2JhY2tfY2hhaW4pIDx0cnVlfGZhbHNlPgojIC4uLiBDb25uZWN0cyB0aGUgZW5hYmxlTmV0T3V0IGF0IHRoZSB0b3Agb2YgYSBjb2x1bW4gdG8gdGhlIGVuYWJsZU5ldEluIGF0IHRoZSB0b3Agb2YgCiMgLi4uIHRoZSBuZXh0IGNvbHVtbiwgYW5kIGNvbm5lY3RzIHRoZSBlbmFibGVOZXRPdXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY29sdW1uIHRvIHRoZSAKIyAuLi4gZW5hYmxlTmV0SW4gYXQgdGhlIGJvdHRvbSBvZiB0aGUgbmV4dCBjb2x1bW4KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmVsb3cgdmFyaWFibGVzIGFyZSBmb3IgcmluZyBiYXNlZCBwc28gaW1wbGVtZXRhdGlvbgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPix0b3BfcmluZykgICAgIDwxfDA+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sYm90dG9tX3JpbmcpICA8MXwwPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHJpZ2h0X3JpbmcpICAgPDF8MD4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixsZWZ0X3JpbmcpICAgIDwxfDA+CiMgLi4uIGRlZmluZXMgd2hpY2ggc2lkZSBvZiB0aGUgcG93ZXIgZG9tYWluIHRvIGluc2VydCBzd2l0Y2hlczoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sdG9wX3N3aXRjaF9jZWxsKSAgICA8cHNvIGNlbGwgbmFtZT4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixib3R0b21fc3dpdGNoX2NlbGwpIDxwc28gY2VsbCBuYW1lPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LGxlZnRfc3dpdGNoX2NlbGwpICAgPHBzbyBjZWxsIG5hbWU+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4scmlnaHRfc3dpdGNoX2NlbGwpICA8cHNvIGNlbGwgbmFtZT4KIyAuLi4gZGVmaW5lIHBzbyBjZWxsIG5hbWUgZm9yIGVhY2ggc2lkZSBvZiB0aGUgcG93ZXIgZG9tYWluCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHRvcF9maWxsZXJfY2VsbCkgICAgPGZpbGxlciBjZWxsIG5hbWU+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sYm90dG9tX2ZpbGxlcl9jZWxsKSA8ZmlsbGVyIGNlbGwgbmFtZT4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixsZWZ0X2ZpbGxlcl9jZWxsKSAgIDxmaWxsZXIgY2VsbCBuYW1lPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHJpZ2h0X2ZpbGxlcl9jZWxsKSAgPGZpbGxlciBjZWxsIG5hbWU+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sY29ybmVyX2NlbGxfbGlzdCkgICA8Y29ybmVyIGNlbGwgbmFtZT4KIyAuLi4gZGVmaW5lIGZpbGxlciBjZWxsIG5hbWUgZm9yIGVhY2ggc2lkZSBvZiB0aGUgcG93ZXIgZG9tYWluCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHRvcF9zd2l0Y2hlcykgICAgICAgPCI8bnVtYmVyPiAtZGlzdHJpYnV0ZSI+CiMgc2V0IHZhcnMoPHBvd2VyX2RvbWFpbj4sYm90dG9tX3N3aXRjaGVzKSAgICA8IjxudW1iZXI+IC1kaXN0cmlidXRlIj4KIyBzZXQgdmFycyg8cG93ZXJfZG9tYWluPixsZWZ0X3N3aXRjaGVzKSAgICAgIDwiPG51bWJlcj4gLWRpc3RyaWJ1dGUiPgojIHNldCB2YXJzKDxwb3dlcl9kb21haW4+LHJpZ2h0X3N3aXRjaGVzKSAgICAgPCI8bnVtYmVyPiAtZGlzdHJpYnV0ZSI+CiMgLi4uIGRlZmluZSB0aGUgbnVtYmVyIG9mIHN3aXRjaGVzIGZvciBlYWNoIHNpZGUgb2YgdGhlIHBvd2VyIGRvbWFpbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK