Li4gSXRlcmF0b3JzL0l0ZXJhdG9yIE1ldGFmdW5jdGlvbnMvL2l0ZXJhdG9yX2NhdGVnb3J5IHw2MAoKaXRlcmF0b3JfY2F0ZWdvcnkKPT09PT09PT09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKICAgICAgICA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfY2F0ZWdvcnkKICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yOjpjYXRlZ29yeSB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXRlcmF0b3IgY2F0ZWdvcnkgdGFnczogCgoqIGBgZm9yd2FyZF9pdGVyYXRvcl90YWdgYAoqIGBgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWdgYAoqIGBgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWdgYAoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9pdGVyYXRvcl9jYXRlZ29yeS5ocHA+CiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2l0ZXJhdG9yX3RhZ3MuaHBwPgoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYEl0ZXJhdG9yYGAgIHwgfEZvcndhcmQgSXRlcmF0b3J8ICAgIHwgVGhlIGl0ZXJhdG9yIHRvIG9idGFpbiBhIGNhdGVnb3J5IGZvci4gICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciBhbnkgfEZvcndhcmQgSXRlcmF0b3J8XCBzIGBgaXRlcmBgOgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGl0ZXJhdG9yX2NhdGVnb3J5PGl0ZXI+Ojp0eXBlIHRhZzsgCgo6UmV0dXJuIHR5cGU6CiAgICB8SW50ZWdyYWwgQ29uc3RhbnR8LgoKOlNlbWFudGljczoKICAgIGBgdGFnYGAgaXMgYGBmb3J3YXJkX2l0ZXJhdG9yX3RhZ2BgIGlmIGBgaXRlcmBgIGlzIGEgbW9kZWwgb2YgfEZvcndhcmQgSXRlcmF0b3J8LCAKICAgIGBgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWdgYCBpZiBgYGl0ZXJgYCBpcyBhIG1vZGVsIG9mIHxCaWRpcmVjdGlvbmFsIEl0ZXJhdG9yfCwKICAgIG9yIGBgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWdgYCBpZiBgYGl0ZXJgYCBpcyBhIG1vZGVsIG9mIHxSYW5kb20gQWNjZXNzIEl0ZXJhdG9yfDsKCjpQb3N0Y29uZGl0aW9uOgogICAgIGBgZm9yd2FyZF9pdGVyYXRvcl90YWc6OnZhbHVlIDwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWc6OnZhbHVlYGAsCiAgICAgIGBgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWc6OnZhbHVlIDwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc6OnZhbHVlYGAuCgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpBbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnLCB0eXBlbmFtZSBJdGVyYXRvciA+CiAgICBzdHJ1Y3QgYWxnb3JpdGhtX2ltcGwKICAgIHsKICAgICAgICAvLyAqTyhuKSogaW1wbGVtZW50YXRpb24KICAgIH07CgogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4KICAgIHN0cnVjdCBhbGdvcml0aG1faW1wbDxyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyxJdGVyYXRvcj4KICAgIHsKICAgICAgICAvLyAqTygxKSogaW1wbGVtZW50YXRpb24KICAgIH07CiAgICAKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+CiAgICBzdHJ1Y3QgYWxnb3JpdGhtCiAgICAgICAgOiBhbGdvcml0aG1faW1wbDwKICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTxJdGVyYXRvcj46OnR5cGUKICAgICAgICAgICAgLCBJdGVyYXRvcgogICAgICAgICAgICA+CiAgICB7CiAgICB9OwoKCgpTZWUgYWxzbwotLS0tLS0tLQoKfEl0ZXJhdG9yc3wsIHxiZWdpbnwgLyB8ZW5kfCwgfGFkdmFuY2V8LCB8ZGlzdGFuY2V8LCB8bmV4dHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==