Li4gU2VxdWVuY2VzL0NsYXNzZXMvL2xpc3QgfDIwCgpsaXN0Cj09PT0KCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpBIGBgbGlzdGBgIGlzIGEgfHZhcmlhZGljfCwgYGZvcndhcmRgX18sIGBleHRlbnNpYmxlYF9fIHNlcXVlbmNlIG9mIHR5cGVzIHRoYXQgCnN1cHBvcnRzIGNvbnN0YW50LXRpbWUgaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIGVsZW1lbnRzICBhdCB0aGUgYmVnaW5uaW5nLCBhbmQgCmxpbmVhci10aW1lIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiBlbGVtZW50cyBhdCB0aGUgZW5kIGFuZCBpbiB0aGUgbWlkZGxlLiAKCl9fIGBGb3J3YXJkIFNlcXVlbmNlYF8KX18gYEV4dGVuc2libGUgU2VxdWVuY2VgXwoKSGVhZGVyCi0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBTZXF1ZW5jZSBmb3JtICAgICB8IEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBWYXJpYWRpYyAgICAgICAgICB8IGBgI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0LmhwcD5gYCAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBOdW1iZXJlZCAgICAgICAgICB8IGBgI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0L2xpc3RgYFwgKm4qXCBgYC5ocHA+YGAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpNb2RlbCBvZgotLS0tLS0tLQoKKiB8VmFyaWFkaWMgU2VxdWVuY2V8CiogfEZvcndhcmQgU2VxdWVuY2V8CiogfEV4dGVuc2libGUgU2VxdWVuY2V8CiogfEZyb250IEV4dGVuc2libGUgU2VxdWVuY2V8CgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkluIHRoZSBmb2xsb3dpbmcgdGFibGUsIGBgbGBgIGlzIGEgYGBsaXN0YGAsIGBgcG9zYGAgYW5kIGBgbGFzdGBgIGFyZSBpdGVyYXRvcnMgaW50byBgYGxgYCwgCmBgcmBgIGlzIGEgfEZvcndhcmQgU2VxdWVuY2V8LCBhbmQgfHQxLi4udG58IGFuZCBgYHhgYCBhcmUgYXJiaXRyYXJ5IHR5cGVzLgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VtYW50aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCAuLiBwYXJzZWQtbGl0ZXJhbDo6ICAgICAgICAgICAgICAgICAgIHwgYGBsaXN0YGAgb2YgZWxlbWVudHMgfHQxLi4udG58OyBzZWUgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfFZhcmlhZGljIFNlcXVlbmNlfC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBsaXN0PHx0MS4uLnRufD4gICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBsaXN0XCAqbipcIDx8dDEuLi50bnw+ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCAuLiBwYXJzZWQtbGl0ZXJhbDo6ICAgICAgICAgICAgICAgICAgIHwgSWRlbnRpY2FsIHRvIGBgbGlzdGBgXCAqbipcIGBgPGBgXCB8dDEuLi50bnxcIGBgPmBgOyAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VlIHxWYXJpYWRpYyBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBsaXN0PHx0MS4uLnRufD46OnR5cGUgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBsaXN0XCAqbipcIDx8dDEuLi50bnw+Ojp0eXBlICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGJlZ2luPGw+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgQW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZyBvZiBgYGxgYDsgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VlIHxGb3J3YXJkIFNlcXVlbmNlfC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVuZDxsPjo6dHlwZWBgICAgICAgICAgICAgICAgICAgICAgIHwgQW4gaXRlcmF0b3IgdG8gdGhlIGVuZCBvZiBgYGxgYDsgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VlIHxGb3J3YXJkIFNlcXVlbmNlfC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYHNpemU8bD46OnR5cGVgYCAgICAgICAgICAgICAgICAgICAgIHwgVGhlIHNpemUgb2YgYGBsYGA7IHNlZSB8Rm9yd2FyZCBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVtcHR5PGw+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgfHRydWUgaWYgYW5kIG9ubHkgaWZ8IGBgbGBgIGlzIGVtcHR5OyBzZWUgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfEZvcndhcmQgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGZyb250PGw+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGZpcnN0IGVsZW1lbnQgaW4gYGBsYGA7IHNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfEZvcndhcmQgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGluc2VydDxsLHBvcyx4Pjo6dHlwZWBgICAgICAgICAgICAgIHwgQSBuZXcgYGBsaXN0YGAgb2YgZm9sbG93aW5nIGVsZW1lbnRzOiAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgYmVnaW48bD46OnR5cGVgYCwgYGBwb3NgYCksIGBgeGBgLCAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgcG9zYGAsIGBgZW5kPGw+Ojp0eXBlYGApOyBzZWUgfEV4dGVuc2libGUgU2VxdWVuY2V8LiAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGluc2VydF9yYW5nZTxsLHBvcyxyPjo6dHlwZWBgICAgICAgIHwgQSBuZXcgYGBsaXN0YGAgb2YgZm9sbG93aW5nIGVsZW1lbnRzOiAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgYmVnaW48bD46OnR5cGVgYCwgYGBwb3NgYCksICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgYmVnaW48cj46OnR5cGVgYCwgYGBlbmQ8cj46OnR5cGVgYCkgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgcG9zYGAsIGBgZW5kPGw+Ojp0eXBlYGApOyBzZWUgfEV4dGVuc2libGUgU2VxdWVuY2V8LiAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlPGwscG9zPjo6dHlwZWBgICAgICAgICAgICAgICAgIHwgQSBuZXcgYGBsaXN0YGAgb2YgZm9sbG93aW5nIGVsZW1lbnRzOiAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgYmVnaW48bD46OnR5cGVgYCwgYGBwb3NgYCksICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgbmV4dDxwb3M+Ojp0eXBlYGAsIGBgZW5kPGw+Ojp0eXBlYGApOyBzZWUgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfEV4dGVuc2libGUgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlPGwscG9zLGxhc3Q+Ojp0eXBlYGAgICAgICAgICAgIHwgQSBuZXcgYGBsaXN0YGAgb2YgZm9sbG93aW5nIGVsZW1lbnRzOiAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgYmVnaW48bD46OnR5cGVgYCwgYGBwb3NgYCksICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2BgbGFzdGBgLCBgYGVuZDxsPjo6dHlwZWBgKTsgc2VlIHxFeHRlbnNpYmxlIFNlcXVlbmNlfC4gIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGNsZWFyPGw+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgQW4gZW1wdHkgYGBsaXN0YGA7IHNlZSB8RXh0ZW5zaWJsZSBTZXF1ZW5jZXwuICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYHB1c2hfZnJvbnQ8bCx4Pjo6dHlwZWBgICAgICAgICAgICAgIHwgQSBuZXcgYGBsaXN0YGAgY29udGFpbmluZyBgYHhgYCBhcyBpdHMgZmlyc3QgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWxlbWVudDsgc2VlIHxGcm9udCBFeHRlbnNpYmxlIFNlcXVlbmNlfC4gICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYHBvcF9mcm9udDxsPjo6dHlwZWBgICAgICAgICAgICAgICAgIHwgQSBuZXcgYGBsaXN0YGAgY29udGFpbmluZyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50cyAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2YgYGBsYGAgaW4gIHRoZSBzYW1lIG9yZGVyOyBzZWUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfEZyb250IEV4dGVuc2libGUgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiBsaXN0PGZsb2F0LGRvdWJsZSxsb25nIGRvdWJsZT4gZmxvYXRzOwogICAgdHlwZWRlZiBwdXNoX2Zyb250PGZsb2F0aW5nX3R5cGVzLGludD46OnR5cGUgdHlwZXM7CiAgICAKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBmcm9udDx0eXBlcz46OnR5cGUsIGludCA+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8U2VxdWVuY2VzfCwgfFZhcmlhZGljIFNlcXVlbmNlfCwgfEZvcndhcmQgU2VxdWVuY2V8LCB8RXh0ZW5zaWJsZSBTZXF1ZW5jZXwsIHx2ZWN0b3J8LCB8bGlzdF9jfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK