Ly8gIGNvbW1vbl90eXBlLmhwcCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KCi8vICBDb3B5cmlnaHQgMjAxMCBWaWNlbnRlIEouIEJvdGV0IEVzY3JpYmEKCi8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0CgojaWZuZGVmIEJPT1NUX1RZUEVfVFJBSVRTX0VYVF9ERUNMVkFMX19IUFAKI2RlZmluZSBCT09TVF9UWVBFX1RSQUlUU19FWFRfREVDTFZBTF9fSFBQCgojaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgojaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRkX3J2YWx1ZV9yZWZlcmVuY2UuaHBwPgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDKyswMyBpbXBsZW1lbnRhdGlvbiBvZiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgVmljZW50ZSBKLiBCb3RldCBFc2NyaWJhICAgICAgICAgICAgICAgLy8KLy9+IDIwLjMuNCBGdW5jdGlvbiB0ZW1wbGF0ZSBkZWNsdmFsIFtkZWNsdmFsXQovL34gMSBUaGUgbGlicmFyeSBwcm92aWRlcyB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgZGVjbHZhbCB0byBzaW1wbGlmeSB0aGUgZGVmaW5pdGlvbiBvZiBleHByZXNzaW9ucyB3aGljaCBvY2N1ciBhcwovL34gdW5ldmFsdWF0ZWQgb3BlcmFuZHMuCi8vfiAyIFJlbWFya3M6IElmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCwgdGhlIHByb2dyYW0gaXMgaWxsLWZvcm1lZC4KLy9+IDMgUmVtYXJrczogVGhlIHRlbXBsYXRlIHBhcmFtZXRlciBUIG9mIGRlY2x2YWwgbWF5IGJlIGFuIGluY29tcGxldGUgdHlwZS4KLy9+IFsgRXhhbXBsZToKCi8vfiB0ZW1wbGF0ZSA8Y2xhc3MgVG8sIGNsYXNzIEZyb20+Ci8vfiBkZWNsdHlwZShzdGF0aWNfY2FzdDxUbz4oZGVjbHZhbDxGcm9tPigpKSkgY29udmVydChGcm9tJiYpOwoKLy9+IGRlY2xhcmVzIGEgZnVuY3Rpb24gdGVtcGxhdGUgY29udmVydCB3aGljaCBvbmx5IHBhcnRpY2lwYXRzIGluIG92ZXJsb2FkaW5nIGlmIHRoZSB0eXBlIEZyb20gY2FuIGJlCi8vfiBleHBsaWNpdGx5IGNvbnZlcnRlZCB0byB0eXBlIFRvLiBGb3IgYW5vdGhlciBleGFtcGxlIHNlZSBjbGFzcyB0ZW1wbGF0ZSBjb21tb25fdHlwZSAoMjAuNy42LjYpLiCXZW5kCi8vfiBleGFtcGxlIF0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KCm5hbWVzcGFjZSBib29zdCB7CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICB0eXBlbmFtZSBhZGRfcnZhbHVlX3JlZmVyZW5jZTxUPjo6dHlwZSBkZWNsdmFsKCk7IC8vbm9leGNlcHQ7IC8vIGFzIHVuZXZhbHVhdGVkIG9wZXJhbmQKCn0gIC8vIG5hbWVzcGFjZSBib29zdAoKI2VuZGlmICAvLyBCT09TVF9UWVBFX1RSQUlUU19FWFRfREVDTFZBTF9fSFBQCg==