Li4gTWV0YWZ1bmN0aW9ucy9Db25jZXB0cy8vTWV0YWZ1bmN0aW9uIHwxMAoKTWV0YWZ1bmN0aW9uCj09PT09PT09PT09PQoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCi4uIF9gbnVsbGFyeS1tZXRhZnVuY3Rpb25gOgoKQSAqbWV0YWZ1bmN0aW9uKiBpcyBhIGNsYXNzIG9yIGEgY2xhc3MgdGVtcGxhdGUgdGhhdCByZXByZXNlbnRzIGEgCmZ1bmN0aW9uIGludm9jYWJsZSBhdCBjb21waWxlLXRpbWUuIEFuIG5vbi1udWxsYXJ5IG1ldGFmdW5jdGlvbiBpcyAKaW52b2tlZCBieSBpbnN0YW50aWF0aW5nIHRoZSBjbGFzcyB0ZW1wbGF0ZSB3aXRoIHBhcnRpY3VsYXIgCnRlbXBsYXRlIHBhcmFtZXRlcnMgKG1ldGFmdW5jdGlvbiBhcmd1bWVudHMpOyB0aGUgcmVzdWx0IG9mIHRoZSAKbWV0YWZ1bmN0aW9uIGFwcGxpY2F0aW9uIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgaW5zdGFudGlhdGlvbidzIApuZXN0ZWQgYGB0eXBlYGAgdHlwZWRlZi4gQWxsIG1ldGFmdW5jdGlvbidzIGFyZ3VtZW50cyBtdXN0IGJlIHR5cGVzIAooaS5lLiBvbmx5ICp0eXBlIHRlbXBsYXRlIHBhcmFtZXRlcnMqIGFyZSBhbGxvd2VkKS4gQSBtZXRhZnVuY3Rpb24gCmNhbiBoYXZlIGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMuIEEgKm51bGxhcnkgbWV0YWZ1bmN0aW9uKiBpcyAKcmVwcmVzZW50ZWQgYXMgYSAodGVtcGxhdGUpIGNsYXNzIHdpdGggYSBuZXN0ZWQgYGB0eXBlYGAgdHlwZW5hbWUgCm1lbWJlci4gCgouLiB8bnVsbGFyeSBtZXRhZnVuY3Rpb258IHJlcGxhY2U6OiBgbnVsbGFyeS1tZXRhZnVuY3Rpb25gXwoKCkV4cHJlc3Npb24gcmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8SW4gdGhlIGZvbGxvd2luZyB0YWJsZS4uLnwgYGBmYGAgaXMgYSB8TWV0YWZ1bmN0aW9ufC4KCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICB8IENvbXBsZXhpdHkgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBmOjp0eXBlYGAgICAgICAgICAgICAgICAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgfCBVbnNwZWNpZmllZC4gICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgZjw+Ojp0eXBlYGAgICAgICAgICAgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgIHwgVW5zcGVjaWZpZWQuICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGY8YTEsLi4sYW4+Ojp0eXBlYGAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICB8IFVuc3BlY2lmaWVkLiAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGY6OnR5cGUgeDsKCjpQcmVjb25kaXRpb246CiAgICBgYGZgYCBpcyBhIG51bGxhcnkgfE1ldGFmdW5jdGlvbnw7IGBgZjo6dHlwZWBgIGlzIGEgKnR5cGUtbmFtZSouCgo6U2VtYW50aWNzOgogICAgYGB4YGAgaXMgdGhlIHJlc3VsdCBvZiB0aGUgbWV0YWZ1bmN0aW9uIGludm9jYXRpb24uCgoKLi4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGY8Pjo6dHlwZSB4OwoKOlByZWNvbmRpdGlvbjoKICAgIGBgZmBgIGlzIGEgbnVsbGFyeSB8TWV0YWZ1bmN0aW9ufDsgYGBmPD46OnR5cGVgYCBpcyBhICp0eXBlLW5hbWUqLgoKOlNlbWFudGljczoKICAgIGBgeGBgIGlzIHRoZSByZXN1bHQgb2YgdGhlIG1ldGFmdW5jdGlvbiBpbnZvY2F0aW9uLgoKCi4uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBmPGExLFwgfC4uLnwgXGFcICpuKlw+Ojp0eXBlIHg7Cgo6UHJlY29uZGl0aW9uOgogICAgYGBmYGAgaXMgYW4gKm4qLWFyeSB8TWV0YWZ1bmN0aW9ufDsgfGExLi4uYW58IGFyZSB0eXBlczsgCiAgICBgYGY8YTEsLi4uYW4+Ojp0eXBlYGAgaXMgYSAqdHlwZS1uYW1lKi4KICAgIAo6U2VtYW50aWNzOgogICAgYGB4YGAgaXMgdGhlIHJlc3VsdCBvZiB0aGUgbWV0YWZ1bmN0aW9uIGludm9jYXRpb24gCiAgICB3aXRoIHRoZSBhY3R1YWwgYXJndW1lbnRzIHxhMS4uLmFufC4KCgpNb2RlbHMKLS0tLS0tCgoqIHxpZGVudGl0eXwKKiB8cGx1c3wKKiB8YmVnaW58CiogfGluc2VydHwKKiB8Zm9sZHwKCgpTZWUgYWxzbwotLS0tLS0tLQoKfE1ldGFmdW5jdGlvbnN8LCB8TWV0YWZ1bmN0aW9uIENsYXNzfCwgfExhbWJkYSBFeHByZXNzaW9ufCwgfEludm9jYXRpb258LCB8YXBwbHl8LCB8bGFtYmRhfCwgfGJpbmR8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=