LyogbW9kdWxlLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIG1vZHVsZQogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCiAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCiAqCiAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAogKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CiAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKICoKICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCiAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCiAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCiAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICovCgojaWZuZGVmIFBZU1FMSVRFX01PRFVMRV9ICiNkZWZpbmUgUFlTUUxJVEVfTU9EVUxFX0gKI2luY2x1ZGUgIlB5dGhvbi5oIgoKI2RlZmluZSBQWVNRTElURV9WRVJTSU9OICIyLjMuMyIKCmV4dGVybiBQeU9iamVjdCogcHlzcWxpdGVfRXJyb3I7CmV4dGVybiBQeU9iamVjdCogcHlzcWxpdGVfV2FybmluZzsKZXh0ZXJuIFB5T2JqZWN0KiBweXNxbGl0ZV9JbnRlcmZhY2VFcnJvcjsKZXh0ZXJuIFB5T2JqZWN0KiBweXNxbGl0ZV9EYXRhYmFzZUVycm9yOwpleHRlcm4gUHlPYmplY3QqIHB5c3FsaXRlX0ludGVybmFsRXJyb3I7CmV4dGVybiBQeU9iamVjdCogcHlzcWxpdGVfT3BlcmF0aW9uYWxFcnJvcjsKZXh0ZXJuIFB5T2JqZWN0KiBweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yOwpleHRlcm4gUHlPYmplY3QqIHB5c3FsaXRlX0ludGVncml0eUVycm9yOwpleHRlcm4gUHlPYmplY3QqIHB5c3FsaXRlX0RhdGFFcnJvcjsKZXh0ZXJuIFB5T2JqZWN0KiBweXNxbGl0ZV9Ob3RTdXBwb3J0ZWRFcnJvcjsKCmV4dGVybiBQeU9iamVjdCogcHlzcWxpdGVfT3B0aW1pemVkVW5pY29kZTsKCi8qIHRoZSBmdW5jdGlvbnMgdGltZS50aW1lKCkgYW5kIHRpbWUuc2xlZXAoKSAqLwpleHRlcm4gUHlPYmplY3QqIHRpbWVfdGltZTsKZXh0ZXJuIFB5T2JqZWN0KiB0aW1lX3NsZWVwOwoKLyogQSBkaWN0aW9uYXJ5LCBtYXBwaW5nIGNvbHVtIHR5cGVzIChJTlRFR0VSLCBWQVJDSEFSLCBldGMuKSB0byBjb252ZXJ0ZXIKICogZnVuY3Rpb25zLCB0aGF0IGNvbnZlcnQgdGhlIFNRTCB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uIHZhbHVlLgogKiBUaGUga2V5IGlzIHVwcGVyY2FzZS4KICovCmV4dGVybiBQeU9iamVjdCogY29udmVydGVyczsKCmV4dGVybiBpbnQgX2VuYWJsZV9jYWxsYmFja190cmFjZWJhY2tzOwoKI2RlZmluZSBQQVJTRV9ERUNMVFlQRVMgMQojZGVmaW5lIFBBUlNFX0NPTE5BTUVTIDIKI2VuZGlmCg==