
SGkgTWljaGFsLA0KDQogICAgVGhpcyBwcm9ibGVtIGlzIHRyaWdnZXJyZWQgYnkgbGlidmlydCBw eXRob24ncyBleGFtcGxlIGV2ZW50LXRlc3QucHkuIHRoZSBvcmlnaW5hbCBleGFtcGxlcyBoYXMg cmVzb3VjZSBsZWFrIGlzc3VlDQoNCmF0IHRoZSByZW1vdmVfaGFuZGxlIGFuZCByZW1vdmVfdGlt ZXIuIA0KDQogICAgd2l0aCAicHl0aG9uIC11IGV2ZW50LXRlc3QucHkiIHJ1biB0aGlzIGV4YW1w bGUgYW5kICJzeXN0ZW1jdGwgcmVzdGFydCBsaWJ2aXJ0ZC5zZXJ2aWNlIiB3aWxsIHRyaWdnZXIg cmVzb3VyY2UgbGVhayBwcm9ibGVtLg0KDQp3aXRoIGxzb2YgLXAgPGV2ZW50LXRlc3QucGlkPiBj YW4gc2VlIHNvY2tldCBoYW5kbGVyJ3MgbnVtYmVyIGluY3JlYXNlZCAsIGFmdGVyIHJlc3RhcnQg bGlidmlydGQuc2VyaXZjZSBlYWNoIHRpbWUuDQoNCiAgICB0aGUgcmVhc29uIGlzIHJlbW92ZV9o YW5kbGUgYW5kIHJlbW92ZV90aW1lciBkbyBub3QgcmV0dXJuIHRoZSByZW1vdmUgaGFuZGxlIGlu Zm9ybWF0aW9uIHRvIGxpYnZpcnQtcHl0aG9uJ3MgZnJhbWV3b3JrLiANCg0KbGl0dGxlIHBhdGNo IHdhcyBhcHBseSB0byB0aGlzIGV4YW1wbGUsIHRvIGZpeCB0aGlzIHByb2JsZW0uDQoNCiAgIE5v dywgcnVuIHRoaXMgZXhhbXBsZSBhZ2FpbiBhbmQgcmVzdGFydCBsaWJ2aXJ0ZC5zZXJ2aWNlICwg Y2FsbCBzZXF1ZW5jZSB2aXJOZXRTb2NrZXRSZW1vdmVJT0NhbGxiYWNrLT52aXJOZXRTb2NrZXRF dmVudEZyZWUgDQoNCmNhbiBiZSBvYnNlcnZlZCAsIHRoZSBuby1yZWN1cnNpdmUgbXV0ZXgsIGxv Y2sgd2l0aCByZWN1cnNpdmUgaXNzdWUgY2FuIGJlIHNlZW4uIA0KDQogICAgeW91IGNhbiBjaGVj ayB0aGUgZGV0YWlsIHN0YWNrIHRyYWNlIGFuZCBvdXIgY29tbWVudHMgYWJvdXQgdGhlIGxvY2sn cyBpc3N1ZSBpbiBmdW5jdGlvbiB2aXJOZXRTb2NrZXRFdmVudEZyZWUgIGluIHRoZSBmb2xsb3dp bmcuDQoNCg0KDQoNCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KDQogZGVmIGFkZF90aW1lcihzZWxmLCBpbnRl cnZhbCwgY2IsIG9wYXF1ZSk6DQoNCiAgICAgICAgdGltZXJJRCA9IHNlbGYubmV4dFRpbWVySUQg KyAxDQoNCiAgICAgICAgc2VsZi5uZXh0VGltZXJJRCA9IHNlbGYubmV4dFRpbWVySUQgKyAxDQoN Cg0KDQoNCiAgICAgICAgaCA9IHNlbGYudmlyRXZlbnRMb29wUHVyZVRpbWVyKHRpbWVySUQsIGlu dGVydmFsLCBjYiwgb3BhcXVlKQ0KDQogICAgICAgIHNlbGYudGltZXJzLmFwcGVuZChoKQ0KDQot ICAgICAgIHNlbGYudGltZXJzX29wYXF1ZVt0aW1lcklEXSA9IG9wYXF1ZQ0KDQogICAgICAgIHNl bGYuaW50ZXJydXB0KCkNCg0KDQoNCg0KICAgICAgICBkZWJ1ZygiQWRkIHRpbWVyICVkIGludGVy dmFsICVkIiAlICh0aW1lcklELCBpbnRlcnZhbCkpDQoNCg0KDQoNCiAgICAgICAgcmV0dXJuIHRp bWVySUQNCg0KDQoNCg0KDQoNCg0KICAgICBkZWYgcmVtb3ZlX2hhbmRsZShzZWxmLCBoYW5kbGVJ RCk6DQoNCiAgICAgICAgIGhhbmRsZXMgPSBbXQ0KDQotICAgICAgICBvcGFxdWUgPSBOb25lDQoN CiAgICAgICAgIGZvciBoIGluIHNlbGYuaGFuZGxlczoNCg0KICAgICAgICAgICAgIGlmIGguZ2V0 X2lkKCkgPT0gaGFuZGxlSUQ6DQoNCiAgICAgICAgICAgICAgICAgc2VsZi5wb2xsLnVucmVnaXN0 ZXIoaC5nZXRfZmQoKSkNCg0KLSAgICAgICAgICAgICAgICBvcGFxdWUgPSBzZWxmLm9wYXF1ZXNb aGFuZGxlSURdDQoNCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYub3BhcXVlc1toYW5kbGVJRF0N Cg0KICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVtb3ZlIGhhbmRsZSAlZCBmZCAlZCIgJSAoaGFu ZGxlSUQsIGguZ2V0X2ZkKCkpKQ0KDQogICAgICAgICAgICAgZWxzZToNCg0KICAgICAgICAgICAg ICAgICBoYW5kbGVzLmFwcGVuZChoKQ0KDQogICAgICAgICBzZWxmLmhhbmRsZXMgPSBoYW5kbGVz DQoNCiAgICAgICAgIHNlbGYuaW50ZXJydXB0KCkNCg0KLSAgICAgICAgcmV0dXJuIG9wYXF1ZQ0K DQoNCg0KDQogICAgICMgU3RvcCBmaXJpbmcgdGhlIHBlcmlvZGljIHRpbWVyDQoNCiAgICAgZGVm IHJlbW92ZV90aW1lcihzZWxmLCB0aW1lcklEKToNCg0KICAgICAgICAgdGltZXJzID0gW10NCg0K LSAgICAgICAgb3BhcXVlID0gTm9uZQ0KDQogICAgICAgICBmb3IgaCBpbiBzZWxmLnRpbWVyczoN Cg0KICAgICAgICAgICAgIGlmIGguZ2V0X2lkKCkgIT0gdGltZXJJRDoNCg0KICAgICAgICAgICAg ICAgICB0aW1lcnMuYXBwZW5kKGgpDQoNCi0gICAgICAgICAgICBlbHNlOg0KDQotICAgICAgICAg ICAgICAgIG9wYXF1ZSA9IHNlbGYudGltZXJzX29wYXF1ZVt0aW1lcklEXQ0KDQogICAgICAgICAg ICAgICAgIGRlYnVnKCJSZW1vdmUgdGltZXIgJWQiICUgdGltZXJJRCkNCg0KICAgICAgICAgc2Vs Zi50aW1lcnMgPSB0aW1lcnMNCg0KICAgICAgICAgc2VsZi5pbnRlcnJ1cHQoKQ0KDQotICAgICAg ICByZXR1cm4gb3BhcXVlDQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQoNCg0KDQoN Cj4+T24gMDcvMTUvMjAxNyAwNTowMCBQTSwgUGVuZyBIYW8gd3JvdGU6DQoNCj4+IHZpck5ldFNv Y2tldFJlbW92ZUlPQ2FsbGJhY2sgZ2V0IHNvY2sncyBPYmplY3RMb2NrIGFuZCB3aWxsIGNhbGwN Cg0KPj4gdmlyTmV0U29ja2V0RXZlbnRGcmVlLiB2aXJOZXRTb2NrZXRFdmVudEZyZWUgbWF5IGJl IGZyZWUgc29jaw0KDQo+PiBvYmplY3QgYW5kIHZpck5ldFNvY2tldFJlbW92ZUlPQ2FsbGJhY2sg d2lsbCBhY2Nlc3MgYSBudWxsIHBvaW50ZXINCg0KPj4gaW4gcmVsZWFzZSBzb2NrJ3MgT2JqZWN0 TG9jay4NCg0KPj4gDQoNCj4+IFNpZ25lZC1vZmYtYnk6IExpdSBZdW4gPGxpdS55dW5oQHp0ZS5j b20uY24+DQoNCj4+IFNpZ25lZC1vZmYtYnk6IFBlbmcgSGFvIDxwZW5nLmhhbzJAenRlLmNvbS5j bj4NCg0KPj4gLS0tDQoNCj4+ICBzcmMvcnBjL3Zpcm5ldHNvY2tldC5jIHwgNiArKystLS0NCg0K Pj4gIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQoNCj4+ IA0KDQo+DQoNCj5JIGRvbid0IHRoaW5rIHRoaXMgY2FuIHdvcmsuDQoNCj4NCg0KPj4gZGlmZiAt LWdpdCBhL3NyYy9ycGMvdmlybmV0c29ja2V0LmMgYi9zcmMvcnBjL3Zpcm5ldHNvY2tldC5jDQoN Cj4+IGluZGV4IGQyMjhjOGEuLjhiNTUwZTggMTAwNjQ0DQoNCj4+IC0tLSBhL3NyYy9ycGMvdmly bmV0c29ja2V0LmMNCg0KPj4gKysrIGIvc3JjL3JwYy92aXJuZXRzb2NrZXQuYw0KDQo+PiBAQCAt MjE0MCwxNCArMjE0MCwxMiBAQCBzdGF0aWMgdm9pZCB2aXJOZXRTb2NrZXRFdmVudEZyZWUodm9p ZCAqb3BhcXVlKQ0KDQo+PiAgICAgIHZpckZyZWVDYWxsYmFjayBmZg0KDQo+PiAgICAgIHZvaWQg KmVvcGFxdWUNCg0KPj4gIA0KDQo+PiAtICAgIHZpck9iamVjdExvY2soc29jaykNCg0KPj4gICAg ICBmZiA9IHNvY2stPmZmDQoNCj4+ICAgICAgZW9wYXF1ZSA9IHNvY2stPm9wYXF1ZQ0KDQo+PiAg ICAgIHNvY2stPmZ1bmMgPSBOVUxMDQoNCj4+ICAgICAgc29jay0+ZmYgPSBOVUxMDQoNCj4+ICAg ICAgc29jay0+b3BhcXVlID0gTlVMTA0KDQo+PiAtICAgIHZpck9iamVjdFVubG9jayhzb2NrKQ0K DQo+DQoNCj5JIHRoaW5rIHdlIG5lZWQgdGhlIGxvY2sgaGVyZS4gVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgZnJvbSB0aGUgZXZlbnQNCg0KPmxvb3AgdGhyZWFkLiBTbyBldmVuIGlmIHZpck5ldFNv Y2tldFVwZGF0ZUlPQ2FsbGJhY2soKSBsb2NrcyB0aGUgQHNvY2tldA0KDQo+dGhpcyBjb2RlIGNh biBzZWUgaXQgdW5sb2NrZWQuIE9yIGxvY2tlZC4gQnV0IHRoZSBjcnVjaWFsIHBhcnQgaXMgaXQn cw0KDQo+bW9kaWZ5aW5nIHRoZSBvYmplY3QgYW5kIHRodXMgc2hvdWxkIGhhdmUgbG9jayBoZWxk Lg0KDQo+DQoNCiAgIEkgaGF2ZSBjaGVjayB0aGUgY29kZSAsIGluIGRlZmF1bHQgaW1wbGVtZW50 YXRpb24gb2YgZXZlbnRQb2xsLCB2aXJFdmVudFBvbGxSdW5PbmNlIGFsd2F5cyBkaXNwYXRjaCBh bmQgY2xlYXIgaW4gb25lIHRocmVhZCBsb29wLA0KDQpzbywgdGhlIGxvY2sgaW4gdGhlIHZpck5l dFNvY2tldEV2ZW50RnJlZSBtYXkgYmUgdW5uZXNzYXJ5Lg0KDQoNCg0KDQo+PiAtDQoNCj4+ICsg IA0KDQo+PiAgICAgIGlmIChmZikNCg0KPj4gICAgICAgICAgZmYoZW9wYXF1ZSkNCg0KPj4gIA0K DQo+PiBAQCAtMjIwNyw2ICsyMjA1LDcgQEAgdm9pZCB2aXJOZXRTb2NrZXRVcGRhdGVJT0NhbGxi YWNrKHZpck5ldFNvY2tldFB0ciBzb2NrLA0KDQo+PiAgDQoNCj4+ICB2b2lkIHZpck5ldFNvY2tl dFJlbW92ZUlPQ2FsbGJhY2sodmlyTmV0U29ja2V0UHRyIHNvY2spDQoNCj4+ICB7DQoNCj4+ICsg ICAgdmlyT2JqZWN0UmVmKHNvY2spDQoNCg0KDQoNClRoaXMgc2hvdWxkIGJlIG1pc3Rha2Ugd2hl biBnZW5lcmF0ZSB0aGUgcGF0Y2guIFRoZSBjb3JyZWN0IG9uZSBpcyANCg0KICAgICArICAgIHZp ck9iamVjdFVucmVmKHNvY2spDQoNCj4+ICAgICAgdmlyT2JqZWN0TG9jayhzb2NrKQ0KDQo+DQoN Cj5JIHRoaW5rIHRoaXMgaXMgd2hhdCBhY3R1YWxseSBmaXhlcyB5b3VyIHByb2JsZW0uIEhvd2V2 ZXIsIEkgYWxzbyB0aGluaw0KDQo+aXQgaW50cm9kdWNlcyB1bmV2ZW4gcmF0aW8gb2YgcmVmOnVu cmVmIGNhbGxzLg0KDQo+DQoNCj4+ICANCg0KPj4gICAgICBpZiAoc29jay0+d2F0Y2ggPCAwKSB7 DQoNCj4+IEBAIC0yMjIwLDYgKzIyMTksNyBAQCB2b2lkIHZpck5ldFNvY2tldFJlbW92ZUlPQ2Fs bGJhY2sodmlyTmV0U29ja2V0UHRyIHNvY2spDQoNCj4+ICAgICAgc29jay0+d2F0Y2ggPSAtMQ0K DQo+PiAgDQoNCj4+ICAgICAgdmlyT2JqZWN0VW5sb2NrKHNvY2spDQoNCj4+ICsgICAgdmlyT2Jq ZWN0UmVmKHNvY2spDQoNCg0KDQoNCg0KVGhpcyBzaG91bGQgYmUgbWlzdGFrZSB3aGVuIGdlbmVy YXRlIHRoZSBwYXRjaC4gVGhlIGNvcnJlY3Qgb25lIGlzIA0KDQoNCiAgICAgKyAgICB2aXJPYmpl Y3RVbnJlZihzb2NrKQ0KDQo+DQoNCj5JdCBkZWZpbml0ZWx5IGRvZXMgc28gYmVjYXVzZSB5b3Ug cmVmIHR3aWNlLiBBbnl3YXksIGRvIHlvdSBwZXJoYXBzIGhhdmUNCg0KPmEgYmFja3RyYWNlIHRv IHNoYXJlPw0KDQogICAgDQoNCiMwICBfX2xsbF9sb2NrX3dhaXQgKCkNCg0KICAgIGF0IC4uL25w dGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2xvd2xldmVsbG9jay5TOjEzNQ0KDQoj MSAgMHgwMDAwN2ZkZTYyMDdjZDAyIGluIF9MX2xvY2tfNzkxICgpIGZyb20gL2xpYjY0L2xpYnB0 aHJlYWQuc28uMA0KDQojMiAgMHgwMDAwN2ZkZTYyMDdjYzA4IGluIF9fR0lfX19wdGhyZWFkX211 dGV4X2xvY2sgKA0KDQogICAgbXV0ZXg9bXV0ZXhAZW50cnk9MHgxMTljM2UwKSBhdCBwdGhyZWFk X211dGV4X2xvY2suYzo2NA0KDQojMyAgMHgwMDAwN2ZkZTVhOTdlZTE1IGluIHZpck11dGV4TG9j ayAobT1tQGVudHJ5PTB4MTE5YzNlMCkNCg0KICAgIGF0IHV0aWwvdmlydGhyZWFkLmM6ODkNCg0K IzQgIDB4MDAwMDdmZGU1YTk2MDhhZSBpbiB2aXJPYmplY3RMb2NrIChhbnlvYmo9YW55b2JqQGVu dHJ5PTB4MTE5YzNkMCkNCg0KICAgIGF0IHV0aWwvdmlyb2JqZWN0LmM6MzIzDQoNCiM1ICAweDAw MDA3ZmRlNWFhYTc1MmMgaW4gdmlyTmV0U29ja2V0RXZlbnRGcmVlIChvcGFxdWU9MHgxMTljM2Qw KQ0KDQogICAgYXQgcnBjL3Zpcm5ldHNvY2tldC5jOjIxMzQNCg0KIzYgIDB4MDAwMDdmZGU1YWU1 N2Y4NyBpbiBsaWJ2aXJ0X3ZpckV2ZW50UmVtb3ZlSGFuZGxlRnVuYyAoDQoNCiAgICB3YXRjaD08 b3B0aW1pemVkIG91dD4pIGF0IGxpYnZpcnQtb3ZlcnJpZGUuYzo1NDk2DQoNCiM3ICAweDAwMDA3 ZmRlNWFhYWFjNjkgaW4gdmlyTmV0U29ja2V0UmVtb3ZlSU9DYWxsYmFjayAoc29jaz0weDExOWMz ZDApDQoNCiAgICBhdCBycGMvdmlybmV0c29ja2V0LmM6MjIxMg0KDQojOCAgMHgwMDAwN2ZkZTVh YTk2ZDc2IGluIHZpck5ldENsaWVudE1hcmtDbG9zZSAoY2xpZW50PTB4MTE5YzY1MCwgcmVhc29u PTApDQoNCiAgICBhdCBycGMvdmlybmV0Y2xpZW50LmM6Nzc5DQoNCiM5ICAweDAwMDA3ZmRlNWFh OTcwZWIgaW4gdmlyTmV0Q2xpZW50SW5jb21pbmdFdmVudCAoc29jaz0weDExOWMzZDAsIGV2ZW50 cz05LA0KDQogICAgb3BhcXVlPTB4MTE5YzY1MCkgYXQgcnBjL3Zpcm5ldGNsaWVudC5jOjE5ODUN Cg0KIzEwIDB4MDAwMDdmZGU1YWU0YjM0NyBpbiBsaWJ2aXJ0X3ZpckV2ZW50SW52b2tlSGFuZGxl Q2FsbGJhY2sgKA0KDQogICAgc2VsZj08b3B0aW1pemVkIG91dD4sIGFyZ3M9PG9wdGltaXplZCBv dXQ+KSBhdCBsaWJ2aXJ0LW92ZXJyaWRlLmM6NTcxOA0KDQojMTEgMHgwMDAwN2ZkZTYyMzZmYWE0 IGluIFB5RXZhbF9FdmFsRnJhbWVFeCAoKSBmcm9tIC9saWI2NC9saWJweXRob24yLjcuc28uMS4w DQoNCiMxMiAweDAwMDA3ZmRlNjIzNzEwYmQgaW4gUHlFdmFsX0V2YWxDb2RlRXggKCkgZnJvbSAv bGliNjQvbGlicHl0aG9uMi43LnNvLjEuMA0KDQotLS1UeXBlIDxyZXR1cm4+IHRvIGNvbnRpbnVl LCBvciBxIDxyZXR1cm4+IHRvIHF1aXQtLS0NCg0KIzEzIDB4MDAwMDdmZGU2MjM2Zjc2ZiBpbiBQ eUV2YWxfRXZhbEZyYW1lRXggKCkgZnJvbSAvbGliNjQvbGlicHl0aG9uMi43LnNvLjEuMA0KDQoj MTQgMHgwMDAwN2ZkZTYyMzZmODYwIGluIFB5RXZhbF9FdmFsRnJhbWVFeCAoKSBmcm9tIC9saWI2 NC9saWJweXRob24yLjcuc28uMS4wDQoNCiMxNSAweDAwMDA3ZmRlNjIzNmY4NjAgaW4gUHlFdmFs X0V2YWxGcmFtZUV4ICgpIGZyb20gL2xpYjY0L2xpYnB5dGhvbjIuNy5zby4xLjANCg0KIzE2IDB4 MDAwMDdmZGU2MjM2Zjg2MCBpbiBQeUV2YWxfRXZhbEZyYW1lRXggKCkgZnJvbSAvbGliNjQvbGli cHl0aG9uMi43LnNvLjEuMA0KDQojMTcgMHgwMDAwN2ZkZTYyMzcxMGJkIGluIFB5RXZhbF9FdmFs Q29kZUV4ICgpIGZyb20gL2xpYjY0L2xpYnB5dGhvbjIuNy5zby4xLjANCg0KIzE4IDB4MDAwMDdm ZGU2MjJmZTA1ZCBpbiBmdW5jdGlvbl9jYWxsICgpIGZyb20gL2xpYjY0L2xpYnB5dGhvbjIuNy5z by4xLjANCg0KIzE5IDB4MDAwMDdmZGU2MjJkOTBiMyBpbiBQeU9iamVjdF9DYWxsICgpIGZyb20g L2xpYjY0L2xpYnB5dGhvbjIuNy5zby4xLjANCg0KIzIwIDB4MDAwMDdmZGU2MjM2YzJmNyBpbiBQ eUV2YWxfRXZhbEZyYW1lRXggKCkgZnJvbSAvbGliNjQvbGlicHl0aG9uMi43LnNvLjEuMA0KDQoj MjEgMHgwMDAwN2ZkZTYyMzZmODYwIGluIFB5RXZhbF9FdmFsRnJhbWVFeCAoKSBmcm9tIC9saWI2 NC9saWJweXRob24yLjcuc28uMS4wDQoNCiMyMiAweDAwMDA3ZmRlNjIzNmY4NjAgaW4gUHlFdmFs X0V2YWxGcmFtZUV4ICgpIGZyb20gL2xpYjY0L2xpYnB5dGhvbjIuNy5zby4xLjANCg0KIzIzIDB4 MDAwMDdmZGU2MjM3MTBiZCBpbiBQeUV2YWxfRXZhbENvZGVFeCAoKSBmcm9tIC9saWI2NC9saWJw eXRob24yLjcuc28uMS4wDQoNCiMyNCAweDAwMDA3ZmRlNjIyZmRmNjggaW4gZnVuY3Rpb25fY2Fs bCAoKSBmcm9tIC9saWI2NC9saWJweXRob24yLjcuc28uMS4wDQoNCiMyNSAweDAwMDA3ZmRlNjIy ZDkwYjMgaW4gUHlPYmplY3RfQ2FsbCAoKSBmcm9tIC9saWI2NC9saWJweXRob24yLjcuc28uMS4w DQoNCiMyNiAweDAwMDA3ZmRlNjIyZTgwYTUgaW4gaW5zdGFuY2VtZXRob2RfY2FsbCAoKQ0KDQoN Cg0KDQo+DQoNCj5NaWNoYWwNCg0KDQoNCg0KDQoNCg0KDQpCZXN0UmVnYXJkcw0KDQogIExpdVl1 bg0KDQoNCg0KDQoNCg0K5Y6f5aeL6YKu5Lu2