SGksCgpjb3VsZCB5b3UgbWVyZ2UgdGhhdCBpbiBmcmFtZXdvcmtzIGJyYW5jaCwgdG9vPwoKR2V0 IHNvbWUgY29uZmxpY3RzIGFuZCB3b250IG1lc3MgdXAgeW91ciBjaGFuZ2UgOykKCi0tLS0tIFVy c3Byw7xuZ2xpY2hlIE1haWwgLS0tLS0KPiBHaXQgY29tbWl0IGI3Njg3NDkyMzA4NzJiNWFjZjBl MjgxNmRkODU1NDA5ZjZkNzA3MzMgYnkgS2V2aW4gRnVuay4KPiBDb21taXR0ZWQgb24gMTEvMTIv MjAxMyBhdCAyMzo1MS4KPiBQdXNoZWQgYnkga2Z1bmsgaW50byBicmFuY2ggJ21hc3RlcicuCj4g Cj4gRml4IGFzc2VydCBpbiB+UVBlcnNpc3RlbnRNb2RlbEluZGV4Cj4gCj4gS2F0ZUNvbXBsZXRp b25XaWRnZXQgbWF5IGNhbGwgUUFJTTo6c2V0Q3VycmVudEluZGV4IGR1cmluZyBhIHJlc2V0IG9m Cj4gdGhlIG1vZGVsLCBpbnNpZGUgS2F0ZUNvbXBsZXRpb25XaWRnZXQ6Om1vZGVsQ29udGVudENo YW5nZWQoKS4gQXQgdGhpcwo+IHBvaW50LCBtb2RlbCBpbmRpY2VzIGFyZSBpbnZhbGlkLCBidXQg UUFJTSB3YXNuJ3QgaW5mb3JtZWQgYWJvdXQgaXQuCj4gCj4gVGhlIG1haW4gcHJvYmxlbSBpcyB0 aGF0IEthdGVDb21wbGV0aW9uTW9kZWwgZG9lc24ndCB1c2UgdGhlCj4gKHJlbGF0aXZlbHkpIG5l dyB7YmVnaW4sZW5kfVJlc2V0TW9kZWwgYmxvY2tzIHRvIG1ha2UgcGVyc2lzdGVudCBtb2RlbAo+ IGluZGljZXMgaW52YWxpZCB3aGVuIHdlIHN0YXJ0IHJlc2V0dGluZyB0aGUgbW9kZWwuIEluc3Rl YWQgcmVzZXQoKSBpcyB1c2VkCj4gKmFmdGVyKiB3ZSBoYXZlIHJlc2V0IHRoZSBtb2RlbC4gSG93 ZXZlciwgS2F0ZUNvbXBsZXRpb25Nb2RlbCBtYXkgZW1pdAo+IGNvbnRlbnRHZW9tZXRyeUNoYW5n ZWQgdG9vIGVhcmx5IChiZWZvcmUgYSByZXNldCgpKSBhbmQgaGVuY2UgdHJpZ2dlcmluZwo+IFFB SU06OnNldEN1cnJlbnRJbmRleCB3aGlsZSBRQUlNIGlzIHN0aWxsIHJlZmVyZW5jaW5nIG5vdyBp bnZhbGlkCj4gcGVyc2lzdGVudCBtb2RlbCBpbmRpY2VzLgo+IAo+IE90aGVyIGNoYW5nZXM6Cj4g UmVtb3ZlIGNvbnRlbnRHZW9tZXRyeUNoYW5nZWQuIEluc3RlYWQsIHVzZSBsYXlvdXRDaGFuZ2Vk KCkgYW5kCj4gbW9kZWxSZXNldCgpIHNpZ25hbHMgdG8gcmVhY3QgdG8gbW9kZWwgY2hhbmdlcy4K PiAKPiBUaGlzIGFsc28gcG9ydHMgS2F0ZUNvbXBsZXRpb25Nb2RlbCBhd2F5IGZyb20gZGVwcmVj YXRlZCBRQUlNIG1ldGhvZHMKPiBzdWNoIGFzIFFBSU06OnJlc2V0KCkKPiAKPiBCVUc6IDIzNjk0 OAo+IFJFVklFVzogMTEzOTE3Cj4gRklYRUQtSU46IDQuMTMKPiAKPiBNICArMzggICAtMzYgICBw YXJ0L2NvbXBsZXRpb24va2F0ZWNvbXBsZXRpb25tb2RlbC5jcHAKPiBNICArNSAgICAtNCAgICBw YXJ0L2NvbXBsZXRpb24va2F0ZWNvbXBsZXRpb25tb2RlbC5oCj4gTSAgKzQgICAgLTIgICAgcGFy dC9jb21wbGV0aW9uL2thdGVjb21wbGV0aW9ud2lkZ2V0LmNwcAo+IAo+IGh0dHA6Ly9jb21taXRz LmtkZS5vcmcva2F0ZS9iNzY4NzQ5MjMwODcyYjVhY2YwZTI4MTZkZDg1NTQwOWY2ZDcwNzMzCj4g Cj4gZGlmZiAtLWdpdCBhL3BhcnQvY29tcGxldGlvbi9rYXRlY29tcGxldGlvbm1vZGVsLmNwcAo+ IGIvcGFydC9jb21wbGV0aW9uL2thdGVjb21wbGV0aW9ubW9kZWwuY3BwCj4gaW5kZXggM2ZhODA4 MC4uMjJhZjQ5NSAxMDA2NDQKPiAtLS0gYS9wYXJ0L2NvbXBsZXRpb24va2F0ZWNvbXBsZXRpb25t b2RlbC5jcHAKPiArKysgYi9wYXJ0L2NvbXBsZXRpb24va2F0ZWNvbXBsZXRpb25tb2RlbC5jcHAK PiBAQCAtNTA0LDcgKzUwNCw3IEBAIFFNb2RlbEluZGV4IEthdGVDb21wbGV0aW9uTW9kZWw6Omlu ZGV4Rm9yR3JvdXAoIEdyb3VwICogZwo+ICkgY29uc3QKPiAgICByZXR1cm4gY3JlYXRlSW5kZXgo cm93LCAwLCAwKTsKPiAgfQo+ICAKPiAtdm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpjbGVhckdy b3VwcyggYm9vbCBzaG91bGRSZXNldCApCj4gK3ZvaWQgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6Y2xl YXJHcm91cHMoKQo+ICB7Cj4gICAgY2xlYXJFeHBhbmRpbmcoKTsKPiAgICBtX3VuZ3JvdXBlZC0+ Y2xlYXIoKTsKPiBAQCAtNTM2LDkgKzUzNiw2IEBAIHZvaWQgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6 Y2xlYXJHcm91cHMoIGJvb2wgc2hvdWxkUmVzZXQgKQo+ICAKPiAgICBtX2VtcHR5R3JvdXBzLmFw cGVuZChtX2Jlc3RNYXRjaGVzKTsKPiAgICBtX2dyb3VwSGFzaC5pbnNlcnQoQmVzdE1hdGNoZXNQ cm9wZXJ0eSwgbV9iZXN0TWF0Y2hlcyk7Cj4gLQo+IC0gIGlmKHNob3VsZFJlc2V0KQo+IC0gICAg cmVzZXQoKTsKPiAgfQo+ICAKPiAgUVNldDxLYXRlQ29tcGxldGlvbk1vZGVsOjpHcm91cCo+IEth dGVDb21wbGV0aW9uTW9kZWw6OmNyZWF0ZUl0ZW1zKGNvbnN0Cj4gIEhpZXJhcmNoaWNhbE1vZGVs SGFuZGxlciYgX2hhbmRsZXIsIGNvbnN0IFFNb2RlbEluZGV4JiBpLCBib29sIG5vdGlmeU1vZGVs KQo+ICB7Cj4gQEAgLTU3Nyw5ICs1NzQsMTAgQEAgUVNldDxLYXRlQ29tcGxldGlvbk1vZGVsOjpH cm91cCo+Cj4gS2F0ZUNvbXBsZXRpb25Nb2RlbDo6ZGVsZXRlSXRlbXMoY29uc3QgUU1vZGVsSQo+ ICAKPiAgdm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpjcmVhdGVHcm91cHMoKQo+ICB7Cj4gKyAg YmVnaW5SZXNldE1vZGVsKCk7Cj4gICAgLy9BZnRlciBjbGVhcmluZyB0aGUgbW9kZWwsIGl0IGhh cyB0byBiZSByZXNldCwgZWxzZSB3ZSB3aWxsIGJlIGluIGFuCj4gICAgaW52YWxpZCBzdGF0ZSB3 aGlsZSBpbnNlcnRpbmcKPiAgICAvL25ldyBncm91cHMuCj4gLSAgY2xlYXJHcm91cHModHJ1ZSk7 Cj4gKyAgY2xlYXJHcm91cHMoKTsKPiAgCj4gICAgYm9vbCBoYXNfZ3JvdXBzPWZhbHNlOwo+ICAg IGZvcmVhY2ggKENvZGVDb21wbGV0aW9uTW9kZWwqIHNvdXJjZU1vZGVsLCBtX2NvbXBsZXRpb25N b2RlbHMpIHsKPiBAQCAtNjAwLDEwICs1OTgsNyBAQCB2b2lkIEthdGVDb21wbGV0aW9uTW9kZWw6 OmNyZWF0ZUdyb3VwcygpCj4gICAgbWFrZUdyb3VwSXRlbXNVbmlxdWUoKTsKPiAgICAKPiAgICB1 cGRhdGVCZXN0TWF0Y2hlcygpOwo+IC0KPiAtICByZXNldCgpOwo+IC0KPiAtICBlbWl0IGNvbnRl bnRHZW9tZXRyeUNoYW5nZWQoKTsKPiArICBlbmRSZXNldE1vZGVsKCk7Cj4gIH0KPiAgCj4gIEth dGVDb21wbGV0aW9uTW9kZWw6Okdyb3VwKiBLYXRlQ29tcGxldGlvbk1vZGVsOjpjcmVhdGVJdGVt KGNvbnN0Cj4gIEhpZXJhcmNoaWNhbE1vZGVsSGFuZGxlciYgaGFuZGxlciwgY29uc3QgUU1vZGVs SW5kZXgmIHNvdXJjZUluZGV4LCBib29sCj4gIG5vdGlmeU1vZGVsKQo+IEBAIC02NjAsOSArNjU1 LDcgQEAgdm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpzbG90Um93c0luc2VydGVkKCBjb25zdAo+ IFFNb2RlbEluZGV4ICYgcGFyZW50LCBpbnQgc3Rhcgo+ICAgICAgYWZmZWN0ZWRHcm91cHMgKz0g Y3JlYXRlSXRlbXMoaGFuZGxlciwgcGFyZW50LmlzVmFsaWQoKSA/Cj4gICAgICBwYXJlbnQuY2hp bGQoaSwgMCkgOiAgaGFuZGxlci5tb2RlbCgpLT5pbmRleChpLCAwKSwgdHJ1ZSk7Cj4gIAo+ICAg IGZvcmVhY2ggKEdyb3VwKiBnLCBhZmZlY3RlZEdyb3VwcykKPiAtICAgICAgaGlkZU9yU2hvd0dy b3VwKGcpOwo+IC0KPiAtICAgIGVtaXQgY29udGVudEdlb21ldHJ5Q2hhbmdlZCgpOwo+ICsgICAg ICBoaWRlT3JTaG93R3JvdXAoZywgdHJ1ZSk7Cj4gIH0KPiAgCj4gIHZvaWQgS2F0ZUNvbXBsZXRp b25Nb2RlbDo6c2xvdFJvd3NSZW1vdmVkKCBjb25zdCBRTW9kZWxJbmRleCAmIHBhcmVudCwgaW50 Cj4gIHN0YXJ0LCBpbnQgZW5kICkKPiBAQCAtNjc4LDkgKzY3MSw3IEBAIHZvaWQgS2F0ZUNvbXBs ZXRpb25Nb2RlbDo6c2xvdFJvd3NSZW1vdmVkKCBjb25zdAo+IFFNb2RlbEluZGV4ICYgcGFyZW50 LCBpbnQgc3RhcnQKPiAgICB9Cj4gIAo+ICAgIGZvcmVhY2ggKEdyb3VwKiBnLCBhZmZlY3RlZEdy b3VwcykKPiAtICAgIGhpZGVPclNob3dHcm91cChnKTsKPiAtCj4gLSAgZW1pdCBjb250ZW50R2Vv bWV0cnlDaGFuZ2VkKCk7Cj4gKyAgICBoaWRlT3JTaG93R3JvdXAoZywgdHJ1ZSk7Cj4gIH0KPiAg Cj4gIEthdGVDb21wbGV0aW9uTW9kZWw6Okdyb3VwKiBLYXRlQ29tcGxldGlvbk1vZGVsOjpmZXRj aEdyb3VwKCBpbnQgYXR0cmlidXRlLAo+ICBjb25zdCBRU3RyaW5nJiBzY29wZSwgYm9vbCBmb3Jj ZUdyb3VwaW5nICkKPiBAQCAtOTM4LDMxICs5MjksMzIgQEAgdm9pZCBLYXRlQ29tcGxldGlvbk1v ZGVsOjpzZXRDdXJyZW50Q29tcGxldGlvbigKPiBLVGV4dEVkaXRvcjo6Q29kZUNvbXBsZXRpb25N b2RlbAo+ICAKPiAgICBtX2N1cnJlbnRNYXRjaFttb2RlbF0gPSBjb21wbGV0aW9uOwo+ICAKPiAt ICBib29sIG5lZWRzUmVzZXQgPSBmYWxzZTsKPiArICBjb25zdCBib29sIHJlc2V0TW9kZWwgPSAo Y2hhbmdlVHlwZSAhPSBOYXJyb3cpOwo+ICsgIGlmIChyZXNldE1vZGVsKSB7Cj4gKyAgICBiZWdp blJlc2V0TW9kZWwoKTsKPiArICB9Cj4gICAgCj4gICAgaWYgKCFoYXNHcm91cHMoKSkgewo+IC0g ICAgbmVlZHNSZXNldCB8PSBjaGFuZ2VDb21wbGV0aW9ucyhtX3VuZ3JvdXBlZCwgY2hhbmdlVHlw ZSk7Cj4gKyAgICBjaGFuZ2VDb21wbGV0aW9ucyhtX3VuZ3JvdXBlZCwgY2hhbmdlVHlwZSwgIXJl c2V0TW9kZWwpOwo+ICAgIH0gZWxzZSB7Cj4gICAgICBmb3JlYWNoIChHcm91cCogZywgbV9yb3dU YWJsZSkgewo+ICAgICAgICBpZihnICE9IG1fYXJndW1lbnRIaW50cykKPiAtICAgICAgICBuZWVk c1Jlc2V0IHw9IGNoYW5nZUNvbXBsZXRpb25zKGcsIGNoYW5nZVR5cGUpOwo+ICsgICAgICAgIGNo YW5nZUNvbXBsZXRpb25zKGcsIGNoYW5nZVR5cGUsICFyZXNldE1vZGVsKTsKPiAgICAgIH0KPiAg ICAgIGZvcmVhY2ggKEdyb3VwKiBnLCBtX2VtcHR5R3JvdXBzKSB7Cj4gICAgICAgIGlmKGcgIT0g bV9hcmd1bWVudEhpbnRzKQo+IC0gICAgICAgIG5lZWRzUmVzZXQgfD0gY2hhbmdlQ29tcGxldGlv bnMoZywgY2hhbmdlVHlwZSk7Cj4gKyAgICAgICAgY2hhbmdlQ29tcGxldGlvbnMoZywgY2hhbmdl VHlwZSwgIXJlc2V0TW9kZWwpOwo+ICAgICAgfQo+ICAgIH0KPiAgCj4gICAgLy8gTk9URTogYmVz dCBtYXRjaGVzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gcmVzb3J0Cj4gICAgcmVzb3J0KCk7Cj4gIAo+ IC0gIGtEZWJ1ZygpPDwibmVlZHNSZXNldCI8PG5lZWRzUmVzZXQ7Cj4gLSAgaWYobmVlZHNSZXNl dCkKPiAtICAgIHJlc2V0KCk7Cj4gKyAgaWYgKHJlc2V0TW9kZWwpIHsKPiArICAgIGVuZFJlc2V0 TW9kZWwoKTsKPiArICB9Cj4gIAo+ICAgIGNsZWFyRXhwYW5kaW5nKCk7IC8vV2UgbmVlZCB0byBk byB0aGlzLCBvciBiZSBhd2FyZSBvZiBleHBhbmRpbmctd2lkZ2V0cwo+ICAgIHdoaWxlIGZpbHRl cmluZy4KPiAtICBlbWl0IGNvbnRlbnRHZW9tZXRyeUNoYW5nZWQoKTsKPiAtICBrRGVidWcoKTsK PiAgfQo+ICAKPiAgUVN0cmluZyBLYXRlQ29tcGxldGlvbk1vZGVsOjpjb21tb25QcmVmaXhJbnRl cm5hbChjb25zdCBRU3RyaW5nCj4gICZmb3JjZVByZWZpeCkgY29uc3QKPiBAQCAtMTAyNCwxNSAr MTAxNiwxNCBAQCBRU3RyaW5nIEthdGVDb21wbGV0aW9uTW9kZWw6OmNvbW1vblByZWZpeChRTW9k ZWxJbmRleAo+IHNlbGVjdGVkSW5kZXgpIGNvbnN0Cj4gICAgcmV0dXJuIGNvbW1vblByZWZpeDsK PiAgfQo+ICAKPiAtYm9vbCBLYXRlQ29tcGxldGlvbk1vZGVsOjpjaGFuZ2VDb21wbGV0aW9ucygg R3JvdXAgKiBnLCBjaGFuZ2VUeXBlcwo+IGNoYW5nZVR5cGUgKQo+ICt2b2lkIEthdGVDb21wbGV0 aW9uTW9kZWw6OmNoYW5nZUNvbXBsZXRpb25zKCBHcm91cCAqIGcsIGNoYW5nZVR5cGVzCj4gY2hh bmdlVHlwZSwgYm9vbCBub3RpZnlNb2RlbCApCj4gIHsKPiAtICBib29sIG5vdGlmeU1vZGVsID0g dHJ1ZTsKPiAgICBpZihjaGFuZ2VUeXBlICE9IE5hcnJvdykgewo+IC0gICAgbm90aWZ5TW9kZWwg PSBmYWxzZTsKPiAgICAgIGctPmZpbHRlcmVkID0gZy0+cHJlZmlsdGVyOwo+ICAgICAgLy9JbiB0 aGUgIkJyb2FkZW4iIG9yICJDaGFuZ2UiIGNhc2UsIGp1c3QgcmUtZmlsdGVyIGV2ZXJ5dGhpbmcs Cj4gICAgICAvL2FuZCBkb24ndCBub3RpZnkgdGhlIG1vZGVsLiBUaGUgbW9kZWwgaXMgbm90aWZp ZWQgYWZ0ZXJ3YXJkcyB0aHJvdWdoIGEKPiAgICAgIHJlc2V0KCkuCj4gICAgfQo+ICsKPiAgICAv L1RoaXMgY29kZSBkZXRlcm1pbmVzIHdoYXQgb2YgdGhlIGZpbHRlcmVkIGl0ZW1zIHN0aWxsIGZp dCwgYW5kIGNvbXB1dGVzCj4gICAgdGhlIHJhbmdlcyB0aGF0IHdlcmUgcmVtb3ZlZCwgZ2l2aW5n Cj4gICAgLy90aGVtIHRvIGJlZ2luUmVtb3ZlUm93cyguLikgaW4gYmF0Y2hlcwo+ICAgIAo+IEBA IC0xMDU0LDE0ICsxMDQ1LDEzIEBAIGJvb2wgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6Y2hhbmdlQ29t cGxldGlvbnMoIEdyb3VwICoKPiBnLCBjaGFuZ2VUeXBlcyBjaGFuZ2VUeXBlICkKPiAgICAgIH0K PiAgICB9Cj4gICAgCj4gLSAgaWYoZGVsZXRlVW50aWwgIT0gLTEpIHsKPiArICBpZihkZWxldGVV bnRpbCAhPSAtMSAmJiBub3RpZnlNb2RlbCkgewo+ICAgICAgYmVnaW5SZW1vdmVSb3dzKGluZGV4 Rm9yR3JvdXAoZyksIDAsIGRlbGV0ZVVudGlsKTsKPiAgICAgIGVuZFJlbW92ZVJvd3MoKTsKPiAg ICB9Cj4gICAgCj4gICAgZy0+ZmlsdGVyZWQgPSBuZXdGaWx0ZXJlZDsKPiAgICBoaWRlT3JTaG93 R3JvdXAoZywgbm90aWZ5TW9kZWwpOwo+IC0gIHJldHVybiAhbm90aWZ5TW9kZWw7Cj4gIH0KPiAg Cj4gIGludCBLYXRlQ29tcGxldGlvbk1vZGVsOjpHcm91cDo6b3JkZXJOdW1iZXIoKSBjb25zdCB7 Cj4gQEAgLTExOTMsNyArMTE4Myw5IEBAIHZvaWQgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6c2V0U29y dGluZ0VuYWJsZWQoIGJvb2wKPiBlbmFibGUgKQo+ICB7Cj4gICAgaWYgKG1fc29ydGluZ0VuYWJs ZWQgIT0gZW5hYmxlKSB7Cj4gICAgICBtX3NvcnRpbmdFbmFibGVkID0gZW5hYmxlOwo+ICsgICAg YmVnaW5SZXNldE1vZGVsKCk7Cj4gICAgICByZXNvcnQoKTsKPiArICAgIGVuZFJlc2V0TW9kZWwo KTsKPiAgICB9Cj4gIH0KPiAgCj4gQEAgLTEyNTYsOCArMTI0OCw5IEBAIGNvbnN0IFFMaXN0PCBR TGlzdCA8IGludCA+ID4gJgo+IEthdGVDb21wbGV0aW9uTW9kZWw6OmNvbHVtbk1lcmdlcyggKSBj b25zdAo+ICAKPiAgdm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpzZXRDb2x1bW5NZXJnZXMoIGNv bnN0IFFMaXN0PCBRTGlzdCA8IGludCA+ID4gJgo+ICBjb2x1bW5NZXJnZXMgKQo+ICB7Cj4gKyAg YmVnaW5SZXNldE1vZGVsKCk7Cj4gICAgbV9jb2x1bW5NZXJnZXMgPSBjb2x1bW5NZXJnZXM7Cj4g LSAgcmVzZXQoKTsKPiArICBlbmRSZXNldE1vZGVsKCk7Cj4gIH0KPiAgCj4gIGludCBLYXRlQ29t cGxldGlvbk1vZGVsOjp0cmFuc2xhdGVDb2x1bW4oIGludCBzb3VyY2VDb2x1bW4gKSBjb25zdAo+ IEBAIC0xNTU3LDcgKzE1NTAsOSBAQCB2b2lkIEthdGVDb21wbGV0aW9uTW9kZWw6OnNldFNvcnRp bmdBbHBoYWJldGljYWwoIGJvb2wKPiBhbHBoYWJldGljYWwgKQo+ICB7Cj4gICAgaWYgKG1fc29y dGluZ0FscGhhYmV0aWNhbCAhPSBhbHBoYWJldGljYWwpIHsKPiAgICAgIG1fc29ydGluZ0FscGhh YmV0aWNhbCA9IGFscGhhYmV0aWNhbDsKPiArICAgIGJlZ2luUmVzZXRNb2RlbCgpOwo+ICAgICAg cmVzb3J0KCk7Cj4gKyAgICBlbmRSZXNldE1vZGVsKCk7Cj4gICAgfQo+ICB9Cj4gIAo+IEBAIC0x NTcxLDExICsxNTY2LDEzIEBAIHZvaWQgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6c2V0U29ydGluZ0Nh c2VTZW5zaXRpdml0eSgKPiBRdDo6Q2FzZVNlbnNpdGl2aXR5IGNzICkKPiAgewo+ICAgIGlmICht X3NvcnRpbmdDYXNlU2Vuc2l0aXZpdHkgIT0gY3MpIHsKPiAgICAgIG1fc29ydGluZ0Nhc2VTZW5z aXRpdml0eSA9IGNzOwo+ICsgICAgYmVnaW5SZXNldE1vZGVsKCk7Cj4gICAgICByZXNvcnQoKTsK PiArICAgIGVuZFJlc2V0TW9kZWwoKTsKPiAgICB9Cj4gIH0KPiAgCj4gLXZvaWQgS2F0ZUNvbXBs ZXRpb25Nb2RlbDo6cmVzb3J0KCApCj4gK3ZvaWQgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6cmVzb3J0 KCkKPiAgewo+ICAgIGZvcmVhY2ggKEdyb3VwKiBnLCBtX3Jvd1RhYmxlKQo+ICAgICAgZy0+cmVz b3J0KCk7Cj4gQEAgLTE1ODUsNyArMTU4Miw2IEBAIHZvaWQgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6 cmVzb3J0KCApCj4gIAo+ICAgIC8vIGNhbGwgdXBkYXRlQmVzdE1hdGNoZXMgaGVyZSwgc28gdGhl eSBhcmUgbW92ZWQgdG8gdGhlIHRvcCBhZ2Fpbi4KPiAgICB1cGRhdGVCZXN0TWF0Y2hlcygpOwo+ IC0gIGVtaXQgY29udGVudEdlb21ldHJ5Q2hhbmdlZCgpOwo+ICB9Cj4gIAo+ICBib29sIEthdGVD b21wbGV0aW9uTW9kZWw6Okl0ZW06OmlzVmFsaWQoICkgY29uc3QKPiBAQCAtMTY1NCw2ICsxNjUw LDcgQEAgdm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpzZXRNYXhpbXVtSW5oZXJpdGFuY2VEZXB0 aCgKPiBpbnQgbWF4RGVwdGggKQo+ICAKPiAgdm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpyZWZp bHRlciggKQo+ICB7Cj4gKyAgYmVnaW5SZXNldE1vZGVsKCk7Cj4gICAgbV91bmdyb3VwZWQtPnJl ZmlsdGVyKCk7Cj4gIAo+ICAgIGZvcmVhY2ggKEdyb3VwKiBnLCBtX3Jvd1RhYmxlKQo+IEBAIC0x NjY3LDYgKzE2NjQsNyBAQCB2b2lkIEthdGVDb21wbGV0aW9uTW9kZWw6OnJlZmlsdGVyKCApCj4g ICAgdXBkYXRlQmVzdE1hdGNoZXMoKTsKPiAgCj4gICAgY2xlYXJFeHBhbmRpbmcoKTsgLy9XZSBu ZWVkIHRvIGRvIHRoaXMsIG9yIGJlIGF3YXJlIG9mIGV4cGFuZGluZy13aWRnZXRzCj4gICAgd2hp bGUgZmlsdGVyaW5nLgo+ICsgIGVuZFJlc2V0TW9kZWwoKTsKPiAgfQo+ICAKPiAgdm9pZCBLYXRl Q29tcGxldGlvbk1vZGVsOjpHcm91cDo6cmVmaWx0ZXIoICkKPiBAQCAtMjA0OCwyMCArMjA0Niwx OSBAQCB2b2lkCj4gS2F0ZUNvbXBsZXRpb25Nb2RlbDo6cmVtb3ZlQ29tcGxldGlvbk1vZGVsKENv ZGVDb21wbGV0aW9uTW9kZWwgKiBtb2RlbCkKPiAgICBpZiAoIW1vZGVsIHx8ICFtX2NvbXBsZXRp b25Nb2RlbHMuY29udGFpbnMobW9kZWwpKQo+ICAgICAgcmV0dXJuOwo+ICAKPiArICBiZWdpblJl c2V0TW9kZWwoKTsKPiAgICBtX2N1cnJlbnRNYXRjaC5yZW1vdmUobW9kZWwpOwo+ICAKPiAtICBj bGVhckdyb3VwcyhmYWxzZSk7Cj4gKyAgY2xlYXJHcm91cHMoKTsKPiAgCj4gICAgbW9kZWwtPmRp c2Nvbm5lY3QodGhpcyk7Cj4gIAo+ICAgIG1fY29tcGxldGlvbk1vZGVscy5yZW1vdmVBbGwobW9k ZWwpOwo+ICsgIGVuZFJlc2V0TW9kZWwoKTsKPiAgCj4gICAgaWYgKCFtX2NvbXBsZXRpb25Nb2Rl bHMuaXNFbXB0eSgpKSB7Cj4gICAgICAvLyBUaGlzIHBlcmZvcm1zIHRoZSByZXNldAo+ICAgICAg Y3JlYXRlR3JvdXBzKCk7Cj4gLSAgfWVsc2V7Cj4gLSAgICBlbWl0IGNvbnRlbnRHZW9tZXRyeUNo YW5nZWQoKTsKPiAtICAgIHJlc2V0KCk7Cj4gICAgfQo+ICB9Cj4gIAo+IEBAIC0yMjUyLDYgKzIy NDksMTAgQEAgdm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpyb3dTZWxlY3RlZChjb25zdAo+IFFN b2RlbEluZGV4JiByb3cpIHsKPiAgCj4gIHZvaWQgS2F0ZUNvbXBsZXRpb25Nb2RlbDo6Y2xlYXJD b21wbGV0aW9uTW9kZWxzKCkKPiAgewo+ICsgIGlmIChtX2NvbXBsZXRpb25Nb2RlbHMuaXNFbXB0 eSgpKQo+ICsgICAgcmV0dXJuOwo+ICsKPiArICBiZWdpblJlc2V0TW9kZWwoKTsKPiAgICBmb3Jl YWNoIChDb2RlQ29tcGxldGlvbk1vZGVsICogbW9kZWwsIG1fY29tcGxldGlvbk1vZGVscykKPiAg ICAgIG1vZGVsLT5kaXNjb25uZWN0KHRoaXMpOwo+ICAKPiBAQCAtMjI2MCw2ICsyMjYxLDcgQEAg dm9pZCBLYXRlQ29tcGxldGlvbk1vZGVsOjpjbGVhckNvbXBsZXRpb25Nb2RlbHMoKQo+ICAgIG1f Y3VycmVudE1hdGNoLmNsZWFyKCk7Cj4gIAo+ICAgIGNsZWFyR3JvdXBzKCk7Cj4gKyAgZW5kUmVz ZXRNb2RlbCgpOwo+ICB9Cj4gIAo+ICAjaW5jbHVkZSAia2F0ZWNvbXBsZXRpb25tb2RlbC5tb2Mi Cj4gZGlmZiAtLWdpdCBhL3BhcnQvY29tcGxldGlvbi9rYXRlY29tcGxldGlvbm1vZGVsLmgKPiBi L3BhcnQvY29tcGxldGlvbi9rYXRlY29tcGxldGlvbm1vZGVsLmgKPiBpbmRleCA1ZmVkYmNjLi5h MTBhNTMzIDEwMDY0NAo+IC0tLSBhL3BhcnQvY29tcGxldGlvbi9rYXRlY29tcGxldGlvbm1vZGVs LmgKPiArKysgYi9wYXJ0L2NvbXBsZXRpb24va2F0ZWNvbXBsZXRpb25tb2RlbC5oCj4gQEAgLTE4 Myw3ICsxODMsNiBAQCBjbGFzcyBLQVRFUEFSVF9URVNUU19FWFBPUlQgS2F0ZUNvbXBsZXRpb25N b2RlbCA6IHB1YmxpYwo+IEV4cGFuZGluZ1dpZGdldE1vZGVsCj4gICAgICB2b2lkIGV4cGFuZElu ZGV4KGNvbnN0IFFNb2RlbEluZGV4JiBpbmRleCk7Cj4gICAgICAvL0VtaXR0ZWQgd2hlbmV2ZXIg c29tZXRoaW5nIGhhcyBjaGFuZ2VkIGFib3V0IHRoZSBncm91cCBvZgo+ICAgICAgYXJndW1lbnQt aGludHMKPiAgICAgIHZvaWQgYXJndW1lbnRIaW50c0NoYW5nZWQoKTsKPiAtICAgIHZvaWQgY29u dGVudEdlb21ldHJ5Q2hhbmdlZCgpOwo+ICAKPiAgICBwdWJsaWMgUV9TTE9UUzoKPiAgICAgIHZv aWQgc2V0U29ydGluZ0VuYWJsZWQoYm9vbCBlbmFibGUpOwo+IEBAIC0zMTEsNiArMzEwLDcgQEAg Y2xhc3MgS0FURVBBUlRfVEVTVFNfRVhQT1JUIEthdGVDb21wbGV0aW9uTW9kZWwgOiBwdWJsaWMK PiBFeHBhbmRpbmdXaWRnZXRNb2RlbAo+ICAKPiAgICBwcml2YXRlOgo+ICAgICAgUVN0cmluZyBj b21tb25QcmVmaXhJbnRlcm5hbChjb25zdCBRU3RyaW5nICZmb3JjZVByZWZpeCkgY29uc3Q7Cj4g KyAgICAvLy8gQG5vdGUgcGVyZm9ybXMgbW9kZWwgcmVzZXQKPiAgICAgIHZvaWQgY3JlYXRlR3Jv dXBzKCk7Cj4gICAgICAvLy9DcmVhdGVzIGFsbCBzdWItaXRlbXMgb2YgaW5kZXggaSwgb3IgdGhl IGl0ZW0gY29ycmVzcG9uZGluZyB0byBpbmRleAo+ICAgICAgaS4gUmV0dXJucyB0aGUgYWZmZWN0 ZWQgZ3JvdXBzLgo+ICAgICAgLy8vaSBtdXN0IGJlIGFuIGluZGV4IGluIHRoZSBzb3VyY2UgbW9k ZWwKPiBAQCAtMzE5LDggKzMxOSw5IEBAIGNsYXNzIEtBVEVQQVJUX1RFU1RTX0VYUE9SVCBLYXRl Q29tcGxldGlvbk1vZGVsIDogcHVibGljCj4gRXhwYW5kaW5nV2lkZ2V0TW9kZWwKPiAgICAgIC8v L2kgbXVzdCBiZSBhbiBpbmRleCBpbiB0aGUgc291cmNlIG1vZGVsCj4gICAgICBRU2V0PEdyb3Vw Kj4gZGVsZXRlSXRlbXMoY29uc3QgUU1vZGVsSW5kZXgmIGkpOwo+ICAgICAgR3JvdXAqIGNyZWF0 ZUl0ZW0oY29uc3QgSGllcmFyY2hpY2FsTW9kZWxIYW5kbGVyJiwgY29uc3QgUU1vZGVsSW5kZXgm IGksCj4gICAgICBib29sIG5vdGlmeU1vZGVsID0gZmFsc2UpOwo+IC0gICAgdm9pZCBjbGVhckdy b3Vwcyhib29sIHJlc2V0ID0gdHJ1ZSk7Cj4gLSAgICB2b2lkIGhpZGVPclNob3dHcm91cChHcm91 cCogZywgYm9vbCBub3RpZnlNb2RlbCA9IHRydWUpOwo+ICsgICAgLy8vIEBub3RlIE1ha2Ugc3Vy ZSB5b3UncmUgaW4gYSB7YmVnaW4sZW5kfVJlc2V0TW9kZWwgYmxvY2sgd2hlbiBjYWxsaW5nCj4g dGhpcyEKPiArICAgIHZvaWQgY2xlYXJHcm91cHMoKTsKPiArICAgIHZvaWQgaGlkZU9yU2hvd0dy b3VwKEdyb3VwKiBnLCBib29sIG5vdGlmeU1vZGVsID0gZmFsc2UpOwo+ICAgICAgLy8vIFdoZW4g Zm9yY2VHcm91cGluZyBpcyBlbmFibGVkLCBhbGwgZ2l2ZW4gYXR0cmlidXRlcyB3aWxsIGJlIHVz ZWQgZm9yCj4gICAgICBncm91cGluZywgcmVnYXJkbGVzcyBvZiB0aGUgY29tcGxldGlvbiBzZXR0 aW5ncy4KPiAgICAgIEdyb3VwKiBmZXRjaEdyb3VwKGludCBhdHRyaWJ1dGUsIGNvbnN0IFFTdHJp bmcmIHNjb3BlID0gUVN0cmluZygpLCBib29sCj4gICAgICBmb3JjZUdyb3VwaW5nID0gZmFsc2Up Owo+ICAgICAgLy9JZiB0aGlzIHJldHVybnMgbm9uemVybyBvbiBhbiBpbmRleCwgdGhlIGluZGV4 IGlzIHRoZSBoZWFkZXIgb2YgdGhlCj4gICAgICByZXR1cm5lZCBncm91cAo+IEBAIC0zMzYsNyAr MzM3LDcgQEAgY2xhc3MgS0FURVBBUlRfVEVTVFNfRVhQT1JUIEthdGVDb21wbGV0aW9uTW9kZWwg OiBwdWJsaWMKPiBFeHBhbmRpbmdXaWRnZXRNb2RlbAo+ICAgICAgfTsKPiAgCj4gICAgICAvL1Jl dHVybnMgd2hldGhlciB0aGUgbW9kZWwgbmVlZHMgdG8gYmUgcmVzZXQKPiAtICAgIGJvb2wgY2hh bmdlQ29tcGxldGlvbnMoR3JvdXAqIGcsIGNoYW5nZVR5cGVzIGNoYW5nZVR5cGUpOwo+ICsgICAg dm9pZCBjaGFuZ2VDb21wbGV0aW9ucyhHcm91cCogZywgY2hhbmdlVHlwZXMgY2hhbmdlVHlwZSwg Ym9vbAo+IG5vdGlmeU1vZGVsKTsKPiAgCj4gICAgICBib29sIGhhc0NvbXBsZXRpb25Nb2RlbCgp IGNvbnN0Owo+ICAKPiBkaWZmIC0tZ2l0IGEvcGFydC9jb21wbGV0aW9uL2thdGVjb21wbGV0aW9u d2lkZ2V0LmNwcAo+IGIvcGFydC9jb21wbGV0aW9uL2thdGVjb21wbGV0aW9ud2lkZ2V0LmNwcAo+ IGluZGV4IDRiYjA3N2UuLjQxZDZkN2MgMTAwNjQ0Cj4gLS0tIGEvcGFydC9jb21wbGV0aW9uL2th dGVjb21wbGV0aW9ud2lkZ2V0LmNwcAo+ICsrKyBiL3BhcnQvY29tcGxldGlvbi9rYXRlY29tcGxl dGlvbndpZGdldC5jcHAKPiBAQCAtMzI1LDcgKzMyNSw4IEBAIHZvaWQgS2F0ZUNvbXBsZXRpb25X aWRnZXQ6OnN0YXJ0Q29tcGxldGlvbihjb25zdAo+IEtUZXh0RWRpdG9yOjpSYW5nZSYgd29yZCwg Y29uc3QKPiAgCj4gICAgbV9sYXN0SW52b2NhdGlvblR5cGUgPSBpbnZvY2F0aW9uVHlwZTsKPiAg Cj4gLSAgZGlzY29ubmVjdCh0aGlzLT5tb2RlbCgpLCBTSUdOQUwoY29udGVudEdlb21ldHJ5Q2hh bmdlZCgpKSwgdGhpcywKPiBTTE9UKG1vZGVsQ29udGVudENoYW5nZWQoKSkpOwo+ICsgIGRpc2Nv bm5lY3QodGhpcy0+bW9kZWwoKSwgU0lHTkFMKGxheW91dENoYW5nZWQoKSksIHRoaXMsCj4gU0xP VChtb2RlbENvbnRlbnRDaGFuZ2VkKCkpKTsKPiArICBkaXNjb25uZWN0KHRoaXMtPm1vZGVsKCks IFNJR05BTChtb2RlbFJlc2V0KCkpLCB0aGlzLAo+IFNMT1QobW9kZWxDb250ZW50Q2hhbmdlZCgp KSk7Cj4gIAo+ICAgIG1fZG9udFNob3dBcmd1bWVudEhpbnRzID0gdHJ1ZTsKPiAgCj4gQEAgLTQx Miw3ICs0MTMsOCBAQCB2b2lkIEthdGVDb21wbGV0aW9uV2lkZ2V0OjpzdGFydENvbXBsZXRpb24o Y29uc3QKPiBLVGV4dEVkaXRvcjo6UmFuZ2UmIHdvcmQsIGNvbnN0Cj4gICAgY3Vyc29yUG9zaXRp b25DaGFuZ2VkKCk7Cj4gIAo+ICAgIGlmICghbV9jb21wbGV0aW9uUmFuZ2VzLmlzRW1wdHkoKSkg ewo+IC0gICAgY29ubmVjdCh0aGlzLT5tb2RlbCgpLCBTSUdOQUwoY29udGVudEdlb21ldHJ5Q2hh bmdlZCgpKSwgdGhpcywKPiBTTE9UKG1vZGVsQ29udGVudENoYW5nZWQoKSkpOwo+ICsgICAgY29u bmVjdCh0aGlzLT5tb2RlbCgpLCBTSUdOQUwobGF5b3V0Q2hhbmdlZCgpKSwgdGhpcywKPiBTTE9U KG1vZGVsQ29udGVudENoYW5nZWQoKSkpOwo+ICsgICAgY29ubmVjdCh0aGlzLT5tb2RlbCgpLCBT SUdOQUwobW9kZWxSZXNldCgpKSwgdGhpcywKPiBTTE9UKG1vZGVsQ29udGVudENoYW5nZWQoKSkp Owo+ICAgICAgLy9Ob3cgdGhhdCBhbGwgbW9kZWxzIGhhdmUgYmVlbiBub3RpZmllZCwgY2hlY2sg d2hldGhlciB0aGUgd2lkZ2V0Cj4gICAgICBzaG91bGQgYmUgZGlzcGxheWVkIGluc3RhbnRseQo+ ICAgICAgbW9kZWxDb250ZW50Q2hhbmdlZCgpOwo+ICAgIH0KPiAKPiAKCi0tIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSBEci4tSW5nLiBDaHJpc3RvcGggQ3VsbG1hbm4gLS0tLS0tLS0t CkFic0ludCBBbmdld2FuZHRlIEluZm9ybWF0aWsgR21iSCAgICAgIEVtYWlsOiBjdWxsbWFubkBB YnNJbnQuY29tClNjaWVuY2UgUGFyayAxICAgICAgICAgICAgICAgICAgICAgICAgIFRlbDogICAr NDktNjgxLTM4MzYwLTIyCjY2MTIzIFNhYXJicsO8Y2tlbiAgICAgICAgICAgICAgICAgICAgICBG YXg6ICAgKzQ5LTY4MS0zODM2MC0yMApHRVJNQU5ZICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBXV1c6ICAgaHR0cDovL3d3dy5BYnNJbnQuY29tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkdlc2Now6RmdHNm w7xocnVuZzogRHIuLUluZy4gQ2hyaXN0aWFuIEZlcmRpbmFuZApFaW5nZXRyYWdlbiBpbSBIYW5k ZWxzcmVnaXN0ZXIgZGVzIEFtdHNnZXJpY2h0cyBTYWFyYnLDvGNrZW4sIEhSQiAxMTIzNApfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpLV3JpdGUtRGV2ZWwg bWFpbGluZyBsaXN0CktXcml0ZS1EZXZlbEBrZGUub3JnCmh0dHBzOi8vbWFpbC5rZGUub3JnL21h aWxtYW4vbGlzdGluZm8va3dyaXRlLWRldmVsCg==