[office/skrooge] /: AI Assistant
Stéphane MANKOWSKI <[email protected]> Sat, 18 Jul 2026 14:21:33 +0000 (UTC)
| Newsgroups | gmane.comp.kde.cvs,gmane.comp.kde.doc |
|---|---|
| Message-ID | <[email protected]> |
R2l0IGNvbW1pdCAxY2VjYTE0ZWZiY2QxZmIzNThjNTEzNmI2ODg2Mzk0OWFlNjlmZWMzIGJ5IFN0 w6lwaGFuZSBNQU5LT1dTS0kuCkNvbW1pdHRlZCBvbiAxOC8wNy8yMDI2IGF0IDE0OjIxLgpQdXNo ZWQgYnkgc21hbmtvd3NraSBpbnRvIGJyYW5jaCAnbWFzdGVyJy4KCkFJIEFzc2lzdGFudAoKQSAg Ky0gICAgLS0gICAgZG9jL2FpX2Fzc2lzdGFudC5wbmcKTSAgKzU0ICAgLTUgICAgZG9jL2luZGV4 LmRvY2Jvb2sKTSAgKzIgICAgLTIgICAgZG9jL2tkZV9kb2Nib29rCkEgICstICAgIC0tICAgIGRv Yy9zZXR0aW5nc19haV9hc3Npc3RhbnQucG5nCk0gICsyICAgIC0yICAgIHBsdWdpbnMvZ2VuZXJp Yy9za2dfbW9udGhseS9ncmFudGxlZV9maWx0ZXJzL3NrZ2RvY3VtZW50ZmlsdGVyLmNwcApNICAr MSAgICAtMCAgICBwbHVnaW5zL3Nrcm9vZ2UvQ01ha2VMaXN0cy50eHQKQSAgKzI2ICAgLTAgICAg cGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvQ01ha2VMaXN0cy50eHQKQSAgKzIz ICAgLTAgICAgcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvbWV0YWRhdGEuanNv bgpBICArMjIgICAtMCAgICBwbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dh c3Npc3RhbnRfc2V0dGluZ3Mua2NmZwpBICArNiAgICAtMCAgICBwbHVnaW5zL3Nrcm9vZ2Uvc2ty b29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRfc2V0dGluZ3Mua2NmZ2MKQSAgKzEzMyAgLTAg ICAgcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0YW50cGx1Z2lu LmNwcCAgICAgW0xpY2Vuc2U6IEdQTCh2My4wKyldCkEgICs5NyAgIC0wICAgIHBsdWdpbnMvc2ty b29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3NrZ2Fzc2lzdGFudHBsdWdpbi5oICAgICBbTGljZW5z ZTogR1BMKHYzLjArKV0KQSAgKzkxMSAgLTAgICAgcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlh c3Npc3RhbnQvc2tnYXNzaXN0YW50cGx1Z2luZG9ja3dpZGdldC5jcHAgICAgIFtMaWNlbnNlOiBH UEwodjMuMCspXQpBICArODAgICAtMCAgICBwbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lz dGFudC9za2dhc3Npc3RhbnRwbHVnaW5kb2Nrd2lkZ2V0LmggICAgIFtMaWNlbnNlOiBHUEwodjMu MCspXQpBICArMzAgICAtMCAgICBwbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9z a2dhc3Npc3RhbnRwbHVnaW53aWRnZXQuY3BwICAgICBbTGljZW5zZTogR1BMKHYzLjArKV0KQSAg KzMzICAgLTAgICAgcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0 YW50cGx1Z2lud2lkZ2V0LmggICAgIFtMaWNlbnNlOiBHUEwodjMuMCspXQpBICArMTkzICAtMCAg ICBwbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRwbHVnaW53 aWRnZXRfZG9jay51aQpBICArMTM0ICAtMCAgICBwbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFz c2lzdGFudC9za2dhc3Npc3RhbnRwbHVnaW53aWRnZXRfcHJlZi51aQpBICArMTIgICAtMCAgICBw bHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za3Jvb2dlX2FpYXNzaXN0YW50LnJj CkEgICsyMTggIC0wICAgIHBsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3Nrcm9v Z2Vfc3lzdGVtX3Byb21wdC5tZApNICArMCAgICAtMSAgICBza2diYW5rbW9kZWxlci9za2dkb2N1 bWVudGJhbmsuY3BwCk0gICs0ICAgIC04ICAgIHNrZ3NxbGNpcGhlci9xNnNxbF9zcWxpdGUuY3Bw Ck0gICsxICAgIC0xICAgIHNrZ3NxbGNpcGhlci9xNnNxbF9zcWxpdGVfcC5oCgpodHRwczovL2lu dmVudC5rZGUub3JnL29mZmljZS9za3Jvb2dlLy0vY29tbWl0LzFjZWNhMTRlZmJjZDFmYjM1OGM1 MTM2YjY4ODYzOTQ5YWU2OWZlYzMKCmRpZmYgLS1naXQgYS9kb2MvYWlfYXNzaXN0YW50LnBuZyBi L2RvYy9haV9hc3Npc3RhbnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MC4uNGU2YzcyZWViCkJpbmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvZG9jL2FpX2Fzc2lzdGFu dC5wbmcgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2MvaW5kZXguZG9jYm9vayBiL2RvYy9pbmRleC5k b2Nib29rCmluZGV4IDlhYTEyZDljOS4uODAzNzczZTg2IDEwMDY0NAotLS0gYS9kb2MvaW5kZXgu ZG9jYm9vaworKysgYi9kb2MvaW5kZXguZG9jYm9vawpAQCAtMjgxLDYgKzI4MSw3IEBACiAJICAg IDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJ1bmRvX3JlZG8iPlRoZSB1bmRvIC8gcmVk byBicm93c2VyPC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgogCSAgICA8bGlzdGl0ZW0+PHBhcmE+ PGxpbmsgbGlua2VuZD0icHJvcGVydHlfZWRpdG9yIj5UaGUgcHJvcGVydHkgZWRpdG9yPC9saW5r PjwvcGFyYT48L2xpc3RpdGVtPgogCSAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0i bWVzc2FnZV9saXN0Ij5UaGUgbWVzc2FnZXMgbGlzdDwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4K KwkgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9ImFpX2Fzc2lzdGFudCI+RGlja2Vu cyAtIEFJIEFzc2lzdGFudDwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KIAkgIDwvaXRlbWl6ZWRs aXN0PgogCTwvcGFyYT4KICAgICAgIDwvc2VjdDI+CkBAIC0zMzgsOCArMzM5LDggQEAKIAkgIDxt ZWRpYW9iamVjdD4KIAkgICAgPGltYWdlb2JqZWN0PjxpbWFnZWRhdGEgZmlsZXJlZj0iaGlzdG9y eV9icm93c2VyLnBuZyIgZm9ybWF0PSJQTkciLz48L2ltYWdlb2JqZWN0PgogCSAgICA8dGV4dG9i amVjdD48cGhyYXNlPlRoZSBoaXN0b3J5IGJyb3dzZXI8L3BocmFzZT48L3RleHRvYmplY3Q+Ci0J ICA8L21lZGlhb2JqZWN0PgotCTwvc2NyZWVuc2hvdD4KKwkgICAgPC9tZWRpYW9iamVjdD4KKwkg IDwvc2NyZWVuc2hvdD4KIAkKIAk8cGFyYT4KIAkgIFRoZSBoaXN0b3J5IGJyb3dzZXIgc2hvd3Mg dGhyZWUgY29sdW1uczoKQEAgLTQ0Miw2ICs0NDMsMzggQEAKIAkKIAk8cGFyYT5FYWNoIGNvbnRl eHQgd2lsbCBiZSBkZXNjcmliZWQgaW4gYSBzcGVjaWZpYyBjaGFwdGVyIGluIHRoaXMgaGFuZGJv b2suPC9wYXJhPgogICAgICAgPC9zZWN0Mj4KKworICAgICAgPHNlY3QyIGlkPSJhaV9hc3Npc3Rh bnQiPgorCTx0aXRsZT5EaWNrZW5zIC0gQUkgQXNzaXN0YW50PC90aXRsZT4KKwk8cGFyYT4KKwkg IERpY2tlbnMgaXMgdGhlICZza3Jvb2dlOyBBSSBhc3Npc3RhbnQgZG9jay4gCisJICBZb3UgY2Fu IHVzZSBpdCB0byBhc2sgcXVlc3Rpb25zIGFib3V0IHRoZSBjdXJyZW50IGRvY3VtZW50LCByZXF1 ZXN0IHN1bW1hcmllcyBvZiB5b3VyIGZpbmFuY2lhbCBzaXR1YXRpb24sIG9yIGFzayBmb3IgaWRl YXMgc3VjaCBhcyB3YXlzIHRvIHJlZHVjZSBtb250aGx5IGV4cGVuc2VzLiAKKwkgIFRoZSBhc3Np c3RhbnQga2VlcHMgdGhlIGNvbnZlcnNhdGlvbiBjb250ZXh0LCBzbyBmb2xsb3ctdXAgcXVlc3Rp b25zIGNhbiByZWZlciB0byBwcmV2aW91cyBhbnN3ZXJzLgorCTwvcGFyYT4KKwk8c2NyZWVuc2hv dD4KKwkgIDxtZWRpYW9iamVjdD4KKwkgICAgPGltYWdlb2JqZWN0PjxpbWFnZWRhdGEgZmlsZXJl Zj0iYWlfYXNzaXN0YW50LnBuZyIgZm9ybWF0PSJQTkciLz48L2ltYWdlb2JqZWN0PgorCSAgICA8 dGV4dG9iamVjdD48cGhyYXNlPlRoZSBBSSBhc3Npc3RhbnQgZG9jazwvcGhyYXNlPjwvdGV4dG9i amVjdD4KKwkgIDwvbWVkaWFvYmplY3Q+CisJPC9zY3JlZW5zaG90PgkKKwk8cGFyYT4KKwkgIFRv IHVzZSBEaWNrZW5zLCB5b3UgbXVzdCBjb25maWd1cmUgYW4gT3BlbkFJLWNvbXBhdGlibGUgY2hh dCBjb21wbGV0aW9uIHNlcnZlciBpbiA8bGluayBsaW5rZW5kPSJzZXR0aW5nc19haV9hc3Npc3Rh bnQiPlNldHRpbmdzPC9saW5rPi4KKwk8L3BhcmE+CisJPHBhcmE+CisJICBXaGVuIHRoZSBhc3Np c3RhbnQgbmVlZHMgZGF0YSBmcm9tIHlvdXIgZG9jdW1lbnQsIGl0IGNhbiBleGVjdXRlIHJlYWQt b25seSBTUUxpdGUgcXVlcmllcyBvbiB0aGUgb3BlbmVkICZza3Jvb2dlOyBkYXRhYmFzZS4gT25s eSBzaW5nbGUgPHVzZXJpbnB1dD5TRUxFQ1Q8L3VzZXJpbnB1dD4gc3RhdGVtZW50cyBhcmUgYWNj ZXB0ZWQuIElmIGludGVybmV0IHNlYXJjaGVzIGFyZSBlbmFibGVkIGluIHRoZSA8bGluayBsaW5r ZW5kPSJzZXR0aW5nc19haV9hc3Npc3RhbnQiPnNldHRpbmdzPC9saW5rPiwgdGhlIGFzc2lzdGFu dCBjYW4gYWxzbyBzZWFyY2ggdGhlIHdlYiB0aHJvdWdoIER1Y2tEdWNrR28gdG8gYW5zd2VyIHF1 ZXN0aW9ucyB0aGF0IHJlcXVpcmUgZXh0ZXJuYWwgb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4K Kwk8L3BhcmE+CisJPHBhcmE+CisJICBUaGUgZG9jayBwcm92aWRlcyBhIHNlc3Npb24gc2VsZWN0 b3IuIFVzZSA8Z3VpYnV0dG9uPlNhdmUgY3VycmVudCBBSSBzZXNzaW9uPC9ndWlidXR0b24+IHRv IHN0b3JlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBpbiB0aGUgZG9jdW1lbnQsIGFuZCA8Z3Vp YnV0dG9uPkRlbGV0ZSBBSSBzZXNzaW9uPC9ndWlidXR0b24+IHRvIHJlbW92ZSBhIHNhdmVkIG9u ZS4gPGd1aWJ1dHRvbj5SZXNldCB0aGUgY3VycmVudCBBSSBzZXNzaW9uPC9ndWlidXR0b24+IGNs ZWFycyB0aGUgY3VycmVudCBjb252ZXJzYXRpb24uIFlvdSBjYW4gcHJlc3MgPGtleWNvbWJvPiZD dHJsOzxrZXljYXA+UmV0dXJuPC9rZXljYXA+PC9rZXljb21ibz4gaW4gdGhlIHF1ZXN0aW9uIGVk aXRvciB0byBzZW5kIHRoZSBxdWVzdGlvbi4KKwk8L3BhcmE+CisJPHBhcmE+CisJICBUaGUgaGVs cCBidXR0b24gZGlzcGxheXMgZXhhbXBsZSBxdWVzdGlvbnMuIFRoZSA8bGluayBsaW5rZW5kPSJz ZXR0aW5nc19haV9hc3Npc3RhbnQiPnNldHRpbmdzPC9saW5rPiBidXR0b24gb3BlbnMgdGhlIGFz c2lzdGFudCBwcmVmZXJlbmNlcy4gVGhlIHJlYXNvbmluZyBzZWxlY3RvciBsZXRzIHlvdSBjaG9v c2Ugd2hldGhlciB0aGUgYXNzaXN0YW50IHJlYXNvbmluZywgYW5kIG9wdGlvbmFsbHkgdG9vbCBh bnN3ZXJzLCBhcmUgZGlzcGxheWVkIGluIHRoZSBjb252ZXJzYXRpb24uCisJPC9wYXJhPgorCTxp bXBvcnRhbnQ+CisJICA8cGFyYT4KKwkgICAgRmluYW5jaWFsIGRvY3VtZW50cyBjYW4gY29udGFp biBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFByZWZlciBhIGxvY2FsIHNlcnZlciBpZiB5b3UgZG8g bm90IHdhbnQgZG9jdW1lbnQgZGF0YSBvciBxdWVzdGlvbnMgdG8gYmUgc2VudCB0byBhIHJlbW90 ZSBzZXJ2aWNlLiBSZXZpZXcgdGhlIGludGVybmV0IHNlYXJjaCBvcHRpb24gYmVmb3JlIGVuYWJs aW5nIGl0LCBlc3BlY2lhbGx5IHdoZW4geW91ciBxdWVzdGlvbnMgbWF5IGNvbnRhaW4gcGVyc29u YWwgb3IgZmluYW5jaWFsIGRldGFpbHMuCisJICA8L3BhcmE+CisJPC9pbXBvcnRhbnQ+CisgICAg ICA8L3NlY3QyPgogICAgICAgCiAgICAgICA8c2VjdDIgaWQ9Im11bHRpLXRhYnMiPgogCTx0aXRs ZT5NdWx0aXBsZSBUYWJzPC90aXRsZT4KQEAgLTIzMjIsOCArMjM1NSw4IEBAIGZpbGUgaXMgb3Bl bmVkLiBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIGRpZmZlcmVudCBhY2NvdW50 ICgmZWc7ICJFVEYiCiAJICAgICAgPGltYWdlb2JqZWN0PgogCSAgICAgICAgPGltYWdlZGF0YSBm aWxlcmVmPSJhc3NpZ25fc2NoZWR1bGUucG5nIiBmb3JtYXQ9IlBORyIvPgogCSAgICAgIDwvaW1h Z2VvYmplY3Q+Ci0JICAgIDwvbWVkaWFvYmplY3Q+Ci0JICA8L3NjcmVlbnNob3Q+CisJICA8L21l ZGlhb2JqZWN0PgorCTwvc2NyZWVuc2hvdD4KIAk8L3NlY3QyPgogICAgICAgPC9zZWN0MT4KICAg ICAgIApAQCAtMjY5Nyw3ICsyNzMwLDIzIEBAIGZpbGUgaXMgb3BlbmVkLiBJdCBpcyBhbHNvIHJl Y29tbWVuZGVkIHRvIGNyZWF0ZSBhIGRpZmZlcmVudCBhY2NvdW50ICgmZWc7ICJFVEYiCiAgICAg ICAgICAgICA8L21lZGlhb2JqZWN0PgogICAgICAgICA8L3NjcmVlbnNob3Q+CiAgICAgICAgIDxw YXJhPllvdSBjYW4gYWN0aXZhdGUgdGhlIGltcG9ydCBiYWNrZW5kcyBmcm9tIHRoZSBsaXN0IGhl cmUuPC9wYXJhPiAgICAgICAgCi0gICAgICAgIDwvc2VjdDE+ICAgICAgICAgICAgICAgIAorICAg ICAgICA8L3NlY3QxPiAgICAgCisKKyAgICAgICAgPHNlY3QxIGlkPSJzZXR0aW5nc19haV9hc3Np c3RhbnQiPgorICAgICAgICA8dGl0bGU+QUkgQXNzaXN0YW50PC90aXRsZT4KKyAgICAgICAgCisg ICAgICAgIDxzY3JlZW5zaG90PgorICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAg ICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0ic2V0 dGluZ3NfYWlfYXNzaXN0YW50LnBuZyIgZm9ybWF0PSJQTkciLz4KKyAgICAgICAgICAgIDwvaW1h Z2VvYmplY3Q+CisgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICA8L3NjcmVlbnNo b3Q+CisJCTxwYXJhPgorCQkJVGhlIHNlcnZlciBVUkwgY2FuIGJlIGEgbG9jYWwgc2VydmVyLCBz dWNoIGFzIHRoZSBkZWZhdWx0IDx1c2VyaW5wdXQ+aHR0cDovLzEyNy4wLjAuMTo4MDgwPC91c2Vy aW5wdXQ+LAorCQkJb3IgYSByZW1vdGUgY29tcGF0aWJsZSBzZXJ2aWNlLiBJZiB0aGUgc2Vydmlj ZSByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiwgZW50ZXIgaXRzIEFQSSB0b2tlbi4KKwkJPC9wYXJh PiAgICAgCisgICAgICAgIDwvc2VjdDE+ICAJCSAgICAgICAgICAgCiAgICAgPC9jaGFwdGVyPiAg ICAKICAgICAKICAgICA8Y2hhcHRlciBpZD0iaG93dG8iPgpkaWZmIC0tZ2l0IGEvZG9jL2tkZV9k b2Nib29rIGIvZG9jL2tkZV9kb2Nib29rCmluZGV4IGU1MjI1OThlNC4uMzExYTNhNzQ5IDEwMDc1 NQotLS0gYS9kb2Mva2RlX2RvY2Jvb2sKKysrIGIvZG9jL2tkZV9kb2Nib29rCkBAIC0zLDcgKzMs NyBAQAogIyAva2RlX2RvY2Jvb2sgaW5kZXguZG9jYm9vayBpbmRleC5odG1sCiAKICMgTGV0J3Mg Y2FsbCB0aGUgS0RFIGNhdGFsb2cgZmlyc3QKLWV4cG9ydCBYTUxfQ0FUQUxPR19GSUxFUz0iL3Vz ci9zaGFyZS9rZjUva2RvY3Rvb2xzL2N1c3RvbWl6YXRpb24vY2F0YWxvZy54bWwiCitleHBvcnQg WE1MX0NBVEFMT0dfRklMRVM9Ii91c3Ivc2hhcmUva2Y2L2tkb2N0b29scy9jdXN0b21pemF0aW9u L2NhdGFsb2cueG1sIgogCiAjIENoZWNrIGlmIGRvY2Jvb2sgaXMgd2VsbCBmb3JtZWQKIGVjaG8g IlJ1bm5pbmcgY2hlY2tYTUzigKYgIjsKQEAgLTE2LDcgKzE2LDcgQEAgZWNobyAiIC0+IE9LICEi OwogCiAjIENvbnZlcnQgdG8gaHRtbAogZWNobyAiUnVubmluZyB4c2x0cHJvY+KApiAiOwoteHNs dHByb2MgLW8gJDIgL3Vzci9zaGFyZS9rZjUva2RvY3Rvb2xzL2N1c3RvbWl6YXRpb24va2RlLW5v Y2h1bmsueHNsICQxOworeHNsdHByb2MgLW8gJDIgL3Vzci9zaGFyZS9rZjYva2RvY3Rvb2xzL2N1 c3RvbWl6YXRpb24va2RlLW5vY2h1bmsueHNsICQxOwogaWYgWyAkPyAtZ3QgMCBdOyB0aGVuCiAg IGVjaG8gIiAtPiB4c2x0cHJvYyBmYWlsZWQgISI7CiAgIGV4aXQgMTsKZGlmZiAtLWdpdCBhL2Rv Yy9zZXR0aW5nc19haV9hc3Npc3RhbnQucG5nIGIvZG9jL3NldHRpbmdzX2FpX2Fzc2lzdGFudC5w bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5mNjliMmQzN2MKQmluYXJ5 IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9kb2Mvc2V0dGluZ3NfYWlfYXNzaXN0YW50LnBuZyBkaWZm ZXIKZGlmZiAtLWdpdCBhL3BsdWdpbnMvZ2VuZXJpYy9za2dfbW9udGhseS9ncmFudGxlZV9maWx0 ZXJzL3NrZ2RvY3VtZW50ZmlsdGVyLmNwcCBiL3BsdWdpbnMvZ2VuZXJpYy9za2dfbW9udGhseS9n cmFudGxlZV9maWx0ZXJzL3NrZ2RvY3VtZW50ZmlsdGVyLmNwcAppbmRleCBhYThiNTcyNzIuLjk2 MDgzNjAyOSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9nZW5lcmljL3NrZ19tb250aGx5L2dyYW50bGVl X2ZpbHRlcnMvc2tnZG9jdW1lbnRmaWx0ZXIuY3BwCisrKyBiL3BsdWdpbnMvZ2VuZXJpYy9za2df bW9udGhseS9ncmFudGxlZV9maWx0ZXJzL3NrZ2RvY3VtZW50ZmlsdGVyLmNwcApAQCAtMTc0LDgg KzE3NCw4IEBAIFFWYXJpYW50IFNLR0R1bXBGaWx0ZXI6OmRvRmlsdGVyKGNvbnN0IFFWYXJpYW50 ICZpbnB1dCwgY29uc3QgUVZhcmlhbnQgJmFyZ3VtZW50CiAgICAgICAgICAgICBpbnQgbmIgPSBt ZXRhT2JqZWN0LT5wcm9wZXJ0eUNvdW50KCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IG5iOyArK2kpIHsKICAgICAgICAgICAgICAgICBRVmFyaWFudCB2YWwgPSBTS0dEdW1wRmls dGVyOjpkb0ZpbHRlcihvYmotPnByb3BlcnR5KG1ldGFPYmplY3QtPnByb3BlcnR5KGkpLm5hbWUo KSksIFFWYXJpYW50KCksIGF1dG9lc2NhcGUpOwotICAgICAgICAgICAgICAgIHRhYmxlICs9IFFT dHJpbmdMaXRlcmFsKCI8dHI+PHRkPiIpICUgU0tHU2VydmljZXM6OnN0cmluZ1RvSHRtbChtZXRh T2JqZWN0LT5wcm9wZXJ0eShpKS5uYW1lKCkpICUgIjwvdGQ+PHRkPiIgJSBTS0dTZXJ2aWNlczo6 c3RyaW5nVG9IdG1sKHZhbC50b1N0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAlICI8L3Rk PjwvdHI+IjsKKyAgICAgICAgICAgICAgICB0YWJsZSArPSBRU3RyaW5nTGl0ZXJhbCgiPHRyPjx0 ZD4iKSAlIFNLR1NlcnZpY2VzOjpzdHJpbmdUb0h0bWwobWV0YU9iamVjdC0+cHJvcGVydHkoaSku bmFtZSgpKSAlICI8L3RkPjx0ZD4iCisgICAgICAgICAgICAgICAgICAgICUgU0tHU2VydmljZXM6 OnN0cmluZ1RvSHRtbCh2YWwudG9TdHJpbmcoKSkgJSAiPC90ZD48L3RyPiI7CiAgICAgICAgICAg ICB9CiAgICAgICAgICAgICB0YWJsZSArPSBRU3RyaW5nTGl0ZXJhbCgiPC90YWJsZT4iKTsKICAg ICAgICAgICAgIHJldHVybiBRVmFyaWFudCh0YWJsZSk7CmRpZmYgLS1naXQgYS9wbHVnaW5zL3Nr cm9vZ2UvQ01ha2VMaXN0cy50eHQgYi9wbHVnaW5zL3Nrcm9vZ2UvQ01ha2VMaXN0cy50eHQKaW5k ZXggYzU0YWZhYzkxLi45ZDdhMjNlYTkgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvc2tyb29nZS9DTWFr ZUxpc3RzLnR4dAorKysgYi9wbHVnaW5zL3Nrcm9vZ2UvQ01ha2VMaXN0cy50eHQKQEAgLTMsNiAr Myw3IEBACiAjKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDI0IEcuIERFIEJVUkUgc3VwcG9y dEBtYW5rb3dza2kuZnIKICMqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMy4wLW9yLWxh dGVyCiAjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCitBRERfU1VCRElSRUNUT1JZKHNrcm9vZ2VfYWlhc3Np c3RhbnQpCiBBRERfU1VCRElSRUNUT1JZKHNrcm9vZ2VfYmFuaykKIEFERF9TVUJESVJFQ1RPUlko c2tyb29nZV9idWRnZXQpCiBBRERfU1VCRElSRUNUT1JZKHNrcm9vZ2VfY2FsY3VsYXRvcikKZGlm ZiAtLWdpdCBhL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L0NNYWtlTGlzdHMu dHh0IGIvcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvQ01ha2VMaXN0cy50eHQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4wMjZiMjEzNjkKLS0tIC9kZXYv bnVsbAorKysgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9DTWFrZUxpc3Rz LnR4dApAQCAtMCwwICsxLDI2IEBACisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjKiBTUERYLUZpbGVD b3B5cmlnaHRUZXh0OiAyMDI2IFMuIE1BTktPV1NLSSBzdGVwaGFuZUBtYW5rb3dza2kuZnIKKyMq IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMy4wLW9yLWxhdGVyCisjKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCitNRVNTQUdFKCBTVEFUVVMgIi4uOjogQ01BS0UgUExVR0lOX0FJQVNTSVNUQU5UIDo6 Li4iKQorCitQUk9KRUNUKHBsdWdpbl9haWFzc2lzdGFudCkKKworTElOS19ESVJFQ1RPUklFUyAo JHtMSUJSQVJZX09VVFBVVF9QQVRIfSkKKworU0VUKHNrcm9vZ2VfYWlhc3Npc3RhbnRfU1JDUwor ICAgIHNrZ2Fzc2lzdGFudHBsdWdpbi5jcHAKKyAgICBza2dhc3Npc3RhbnRwbHVnaW53aWRnZXQu Y3BwCisgICAgc2tnYXNzaXN0YW50cGx1Z2luZG9ja3dpZGdldC5jcHApCisKK2tpMThuX3dyYXBf dWkoc2tyb29nZV9haWFzc2lzdGFudF9TUkNTIHNrZ2Fzc2lzdGFudHBsdWdpbndpZGdldF9kb2Nr LnVpKQora2NvbmZpZ19hZGRfa2NmZ19maWxlcyhza3Jvb2dlX2FpYXNzaXN0YW50X1NSQ1Mgc2tn YXNzaXN0YW50X3NldHRpbmdzLmtjZmdjKQora2kxOG5fd3JhcF91aShza3Jvb2dlX2FpYXNzaXN0 YW50X1NSQ1Mgc2tnYXNzaXN0YW50cGx1Z2lud2lkZ2V0X3ByZWYudWkpCisKK0tDT1JFQURET05T X0FERF9QTFVHSU4oc2tyb29nZV9haWFzc2lzdGFudCBTT1VSQ0VTICR7c2tyb29nZV9haWFzc2lz dGFudF9TUkNTfSBJTlNUQUxMX05BTUVTUEFDRSAic2tnX2d1aSIpCitUQVJHRVRfTElOS19MSUJS QVJJRVMoc2tyb29nZV9haWFzc2lzdGFudCBLRjY6OlBhcnRzIFF0Njo6TmV0d29yayBza2diYXNl bW9kZWxlciBza2diYXNlZ3VpKQorCisjIyMjIyMjIyMjIyBpbnN0YWxsIGZpbGVzICMjIyMjIyMj IyMjIyMjIworSU5TVEFMTChGSUxFUyAke1BST0pFQ1RfU09VUkNFX0RJUn0vc2tyb29nZV9haWFz c2lzdGFudC5yYyAgREVTVElOQVRJT04gICR7S0RFX0lOU1RBTExfS1hNTEdVSURJUn0vc2tyb29n ZV9haWFzc2lzdGFudCApCitJTlNUQUxMKEZJTEVTICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9za2dh c3Npc3RhbnRfc2V0dGluZ3Mua2NmZyAgREVTVElOQVRJT04gICR7S0RFX0lOU1RBTExfS0NGR0RJ Un0gKQorSU5TVEFMTChGSUxFUyBza3Jvb2dlX3N5c3RlbV9wcm9tcHQubWQgIERFU1RJTkFUSU9O ICAke0tERV9JTlNUQUxMX0RBVEFESVJ9L3Nrcm9vZ2UgKQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9z a3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvbWV0YWRhdGEuanNvbiBiL3BsdWdpbnMvc2tyb29n ZS9za3Jvb2dlX2FpYXNzaXN0YW50L21ldGFkYXRhLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi42ZTc0MjEwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL3Nr cm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9tZXRhZGF0YS5qc29uCkBAIC0wLDAgKzEsMjMgQEAK K3sKKyAgICAiS1BsdWdpbiI6IHsKKyAgICAgICAgIkF1dGhvcnMiOiBbCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgIkVtYWlsIjogInN0ZXBoYW5lQG1hbmtvd3NraS5mciIsCisgICAg ICAgICAgICAgICAgIk5hbWUiOiAiU3RlcGhhbmUgTUFOS09XU0tJLG1pcmFrcyIKKyAgICAgICAg ICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgIkNhdGVnb3J5IjogIlBsdWdpbnMiLAorICAgICAg ICAiRGVzY3JpcHRpb24iOiAiQSBTa3Jvb2dlIEFJIGFzc2lzdGFudCBwbHVnaW4gdXNpbmcgYSBs b2NhbCBPcGVuQUktY29tcGF0aWJsZSBzZXJ2ZXIiLAorICAgICAgICAiRGVzY3JpcHRpb25bZnJd IjogIlVuIG1vZHVsZSBkJ2Fzc2lzdGFudCBJQSBwb3VyIFNrcm9vZ2UgdXRpbGlzYW50IHVuIHNl cnZldXIgbG9jYWwgY29tcGF0aWJsZSBPcGVuQUkiLAorICAgICAgICAiRW5hYmxlZEJ5RGVmYXVs dCI6IHRydWUsCisgICAgICAgICJJY29uIjogImltLXVzZXIiLAorICAgICAgICAiTGljZW5zZSI6 ICJHUEwiLAorICAgICAgICAiTmFtZSI6ICJTa3Jvb2dlIEFJIGFzc2lzdGFudCBwbHVnaW4iLAor ICAgICAgICAiU2VydmljZVR5cGVzIjogWworICAgICAgICAgICAgIlNLRyBHVUkvUGx1Z2luIgor ICAgICAgICBdLAorICAgICAgICAiVmVyc2lvbiI6ICIxLjAiLAorICAgICAgICAiV2Vic2l0ZSI6 ICJodHRwczovL3Nrcm9vZ2Uub3JnLyIKKyAgICB9LAorICAgICJYLUtydW5uZXItSUQiOiAiU2ty b29nZSBBSSBhc3Npc3RhbnQgcGx1Z2luIgorfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9za3Jvb2dl L3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0YW50X3NldHRpbmdzLmtjZmcgYi9wbHVnaW5z L3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRfc2V0dGluZ3Mua2NmZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjljNDRlMzhmNwotLS0gL2Rldi9u dWxsCisrKyBiL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3NrZ2Fzc2lzdGFu dF9zZXR0aW5ncy5rY2ZnCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j b2Rpbmc9IlVURi04Ij8+Cis8a2NmZyB4bWxucz0iaHR0cDovL3d3dy5rZGUub3JnL3N0YW5kYXJk cy9rY2ZnLzEuMCIKKyAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT Y2hlbWEtaW5zdGFuY2UiCisgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cua2Rl Lm9yZy9zdGFuZGFyZHMva2NmZy8xLjAKKyAgICAgIGh0dHA6Ly93d3cua2RlLm9yZy9zdGFuZGFy ZHMva2NmZy8xLjAva2NmZy54c2QiID4KKyAgPGtjZmdmaWxlLz4KKyAgPGdyb3VwIG5hbWU9InNr cm9vZ2VfYWlhc3Npc3RhbnQiPgorICAgIDxlbnRyeSBuYW1lPSJzZXJ2ZXJVcmwiIHR5cGU9IlN0 cmluZyI+CisgICAgICA8ZGVmYXVsdD5odHRwOi8vMTI3LjAuMC4xOjgwODA8L2RlZmF1bHQ+Cisg ICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0iYXBpVG9rZW4iIHR5cGU9IlN0cmluZyI+Cisg ICAgICA8ZGVmYXVsdD48L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0i ZW5hYmxlV2ViU2VhcmNoIiB0eXBlPSJCb29sIj4KKyAgICAgIDxkZWZhdWx0PnRydWU8L2RlZmF1 bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0iZmFtaWx5U2l0dWF0aW9uIiB0eXBl PSJTdHJpbmciPgorICAgICAgPGxhYmVsPkZhbWlseSBTaXR1YXRpb248L2xhYmVsPgorICAgICAg PGRlZmF1bHQ+PC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgIDwvZ3JvdXA+Cis8L2tjZmc+CmRp ZmYgLS1naXQgYS9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dhc3Npc3Rh bnRfc2V0dGluZ3Mua2NmZ2MgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9z a2dhc3Npc3RhbnRfc2V0dGluZ3Mua2NmZ2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi45ODc1MGI4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2ty b29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRfc2V0dGluZ3Mua2NmZ2MKQEAgLTAsMCArMSw2 IEBACisjIENvZGUgZ2VuZXJhdGlvbiBvcHRpb25zIGZvciBrY29uZmlnX2NvbXBpbGVyCitGaWxl PXNrZ2Fzc2lzdGFudF9zZXR0aW5ncy5rY2ZnCitDbGFzc05hbWU9c2tnYXNzaXN0YW50X3NldHRp bmdzCitTaW5nbGV0b249dHJ1ZQorTXV0YXRvcnM9Y29sX2JhY2tncm91bmQsY29sX2ZvcmVncm91 bmQKKyMgd2lsbCBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBjb2RlIGZvciBzZXR0aW5nIHRob3NlIHZh cmlhYmxlcwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQv c2tnYXNzaXN0YW50cGx1Z2luLmNwcCBiL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0 YW50L3NrZ2Fzc2lzdGFudHBsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi5iYWQxMmMzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2ty b29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRwbHVnaW4uY3BwCkBAIC0wLDAgKzEsMTMzIEBA CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDI2IFMu IE1BTktPV1NLSSBzdGVwaGFuZUBtYW5rb3dza2kuZnIKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMy4wLW9yLWxhdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBmaWxlCisg KiBUaGlzIGZpbGUgaXMgU2tyb29nZSBwbHVnaW4gZm9yIEFJIGFzc2lzdGFudC4KKyAqCisgKiBA YXV0aG9yIFN0ZXBoYW5lIE1BTktPV1NLSQorICovCisjaW5jbHVkZSAic2tnYXNzaXN0YW50cGx1 Z2luLmgiCisKKyNpbmNsdWRlIDxrYWN0aW9uY29sbGVjdGlvbi5oPgorI2luY2x1ZGUgPGtwbHVn aW5mYWN0b3J5Lmg+CisKKyNpbmNsdWRlIDxxYWN0aW9uLmg+CisjaW5jbHVkZSA8cWRvY2t3aWRn ZXQuaD4KKworI2luY2x1ZGUgInNrZ2Fzc2lzdGFudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgInNr Z2Fzc2lzdGFudHBsdWdpbmRvY2t3aWRnZXQuaCIKKyNpbmNsdWRlICJza2dhc3Npc3RhbnRwbHVn aW53aWRnZXQuaCIKKyNpbmNsdWRlICJza2dtYWlucGFuZWwuaCIKKyNpbmNsdWRlICJza2d0cmFj ZXMuaCIKKworLyoqCisgKiBUaGlzIHBsdWdpbiBmYWN0b3J5LgorICovCitLX1BMVUdJTl9DTEFT U19XSVRIX0pTT04oU0tHQXNzaXN0YW50UGx1Z2luLCAibWV0YWRhdGEuanNvbiIpCisKK1NLR0Fz c2lzdGFudFBsdWdpbjo6U0tHQXNzaXN0YW50UGx1Z2luKFFXaWRnZXQgKmlXaWRnZXQsIFFPYmpl Y3QgKmlQYXJlbnQsIGNvbnN0IEtQbHVnaW5NZXRhRGF0YSAmIC8qbWV0YURhdGEqLywgY29uc3Qg UVZhcmlhbnRMaXN0ICYgLyppQXJnKi8pCisgICAgOiBTS0dJbnRlcmZhY2VQbHVnaW4oaVBhcmVu dCkKKyAgICAsIG1fY3VycmVudERvY3VtZW50KG51bGxwdHIpCisgICAgLCBtX2RvY2tXaWRnZXQo bnVsbHB0cikKK3sKKyAgICBRX1VOVVNFRChpV2lkZ2V0KQorICAgIFNLR1RSQUNFSU5GVU5DKDEw KQorfQorCitTS0dBc3Npc3RhbnRQbHVnaW46On5TS0dBc3Npc3RhbnRQbHVnaW4oKQoreworICAg IFNLR1RSQUNFSU5GVU5DKDEwKQorICAgIG1fY3VycmVudERvY3VtZW50ID0gbnVsbHB0cjsKKyAg ICBtX2RvY2tXaWRnZXQgPSBudWxscHRyOworfQorCitib29sIFNLR0Fzc2lzdGFudFBsdWdpbjo6 c2V0dXBBY3Rpb25zKFNLR0RvY3VtZW50ICppRG9jdW1lbnQpCit7CisgICAgU0tHVFJBQ0VJTkZV TkMoMTApCisKKyAgICBtX2N1cnJlbnREb2N1bWVudCA9IGlEb2N1bWVudDsKKyAgICBpZiAobV9j dXJyZW50RG9jdW1lbnQgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg fQorCisgICAgc2V0Q29tcG9uZW50TmFtZShRU3RyaW5nTGl0ZXJhbCgic2tyb29nZV9haWFzc2lz dGFudCIpLCB0aXRsZSgpKTsKKyAgICBzZXRYTUxGaWxlKFFTdHJpbmdMaXRlcmFsKCJza3Jvb2dl X2FpYXNzaXN0YW50LnJjIikpOworCisgICAgYXV0byBkb2NrQ29udGVudCA9IG5ldyBTS0dBc3Np c3RhbnRQbHVnaW5Eb2NrV2lkZ2V0KFNLR01haW5QYW5lbDo6Z2V0TWFpblBhbmVsKCksIG1fY3Vy cmVudERvY3VtZW50KTsKKyAgICBpZiAoZG9ja0NvbnRlbnQgIT0gbnVsbHB0cikgeworICAgICAg ICBtX2RvY2tXaWRnZXQgPSBuZXcgUURvY2tXaWRnZXQoU0tHTWFpblBhbmVsOjpnZXRNYWluUGFu ZWwoKSk7CisgICAgICAgIGlmIChtX2RvY2tXaWRnZXQgIT0gbnVsbHB0cikgeworICAgICAgICAg ICAgbV9kb2NrV2lkZ2V0LT5zZXRPYmplY3ROYW1lKFFTdHJpbmdMaXRlcmFsKCJza2dfYWlhc3Np c3RhbnRfZG9jd2lkZ2V0IikpOworICAgICAgICAgICAgbV9kb2NrV2lkZ2V0LT5zZXRBbGxvd2Vk QXJlYXMoUXQ6OkxlZnREb2NrV2lkZ2V0QXJlYSB8IFF0OjpSaWdodERvY2tXaWRnZXRBcmVhKTsK KyAgICAgICAgICAgIG1fZG9ja1dpZGdldC0+c2V0V2luZG93VGl0bGUodGl0bGUoKSk7CisgICAg ICAgICAgICBtX2RvY2tXaWRnZXQtPnNldFdpZGdldChkb2NrQ29udGVudCk7CisKKyAgICAgICAg ICAgIFFBY3Rpb24gKnRvZ2dsZSA9IG1fZG9ja1dpZGdldC0+dG9nZ2xlVmlld0FjdGlvbigpOwor ICAgICAgICAgICAgUUFjdGlvbiAqcGFuZWxBY3Rpb24gPSBhY3Rpb25Db2xsZWN0aW9uKCktPmFk ZEFjdGlvbihRU3RyaW5nTGl0ZXJhbCgidmlld19haWFzc2lzdGFudCIpKTsKKyAgICAgICAgICAg IHJlZ2lzdGVyR2xvYmFsQWN0aW9uKFFTdHJpbmdMaXRlcmFsKCJ2aWV3X2FpYXNzaXN0YW50Iiks IHBhbmVsQWN0aW9uKTsKKyAgICAgICAgICAgIHBhbmVsQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1 ZSk7CisgICAgICAgICAgICBwYW5lbEFjdGlvbi0+c2V0Q2hlY2tlZCh0b2dnbGUtPmlzQ2hlY2tl ZCgpKTsKKyAgICAgICAgICAgIHBhbmVsQWN0aW9uLT5zZXRUZXh0KHRvZ2dsZS0+dGV4dCgpKTsK KyAgICAgICAgICAgIGNvbm5lY3QocGFuZWxBY3Rpb24sICZRQWN0aW9uOjp0cmlnZ2VyZWQsIHRv Z2dsZSwgJlFBY3Rpb246OnRyaWdnZXIpOworICAgICAgICAgICAgY29ubmVjdCh0b2dnbGUsICZR QWN0aW9uOjp0b2dnbGVkLCBwYW5lbEFjdGlvbiwgJlFBY3Rpb246OnNldENoZWNrZWQpOworICAg ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NLR1RhYlBhZ2UgKlNLR0Fz c2lzdGFudFBsdWdpbjo6Z2V0V2lkZ2V0KCkKK3sKKyAgICBTS0dUUkFDRUlORlVOQygxMCkKKyAg ICByZXR1cm4gbmV3IFNLR0Fzc2lzdGFudFBsdWdpbldpZGdldChTS0dNYWluUGFuZWw6OmdldE1h aW5QYW5lbCgpLCBtX2N1cnJlbnREb2N1bWVudCk7Cit9CisKK1FEb2NrV2lkZ2V0ICpTS0dBc3Np c3RhbnRQbHVnaW46OmdldERvY2tXaWRnZXQoKQoreworICAgIFNLR1RSQUNFSU5GVU5DKDEwKQor ICAgIHJldHVybiBtX2RvY2tXaWRnZXQ7Cit9CisKK1FXaWRnZXQgKlNLR0Fzc2lzdGFudFBsdWdp bjo6Z2V0UHJlZmVyZW5jZVdpZGdldCgpCit7CisgICAgU0tHVFJBQ0VJTkZVTkMoMTApCisgICAg UVdpZGdldCAqdyA9IG5ldyBRV2lkZ2V0KCk7CisgICAgdWkuc2V0dXBVaSh3KTsKKyAgICBRU3Ry aW5nTGlzdCBtb2RlbHMgPSBRU3RyaW5nTGlzdCgpIDw8IFFTdHJpbmdMaXRlcmFsKCJnb29nbGUv Z2VtbWEtNC0xMmItcWF0IikgPDwgUVN0cmluZ0xpdGVyYWwoInF3ZW4vcXdlbjIuNS1jb2Rlci0x NGIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUVN0cmluZ0xp dGVyYWwoInF3ZW4vcXdlbjMuNS05YiIpOworICAgIHVpLmtMYWJlbC0+c2V0VGV4dChpMThuYygi TGFiZWwgZm9yIHRoZSBBSSBhc3Npc3RhbnQgcGx1Z2luIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIjxwPjxzdHJvbmc+RGlja2Vuczwvc3Ryb25nPiBpcyB5b3VyIEFJIGNvbXBhbmlv bi4gVG8gZW5hYmxlIGl0LCB5b3UgbXVzdCBzcGVjaWZ5IGFuIDxzdHJvbmc+T3BlbkFJPC9zdHJv bmc+LWNvbXBhdGlibGUgc2VydmVyLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZ b3UgY2FuIHVzZSBhIHJlbW90ZSBzZXJ2ZXIsIGJ1dCBmb3IgcmVhc29ucyBvZiBjb25maWRlbnRp YWxpdHkgcmVnYXJkaW5nIHlvdXIgc2Vuc2l0aXZlIGRhdGEsIGl0IGlzIHJlY29tbWVuZGVkIHRv IHVzZSBhIGxvY2FsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uZS48L3A+RXhh bXBsZSBvZiB3b3JraW5nIHdlbGwgbG9jYWwgbW9kZWxzOjxicj4lMSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1vZGVscy5qb2luKFFTdHJpbmdMaXRlcmFsKCIsICIpKSkpOworICAg IHJldHVybiB3OworfQorCitLQ29uZmlnU2tlbGV0b24gKlNLR0Fzc2lzdGFudFBsdWdpbjo6Z2V0 UHJlZmVyZW5jZVNrZWxldG9uKCkKK3sKKyAgICBTS0dUUkFDRUlORlVOQygxMCkKKyAgICByZXR1 cm4gc2tnYXNzaXN0YW50X3NldHRpbmdzOjpzZWxmKCk7Cit9CisKK1FTdHJpbmcgU0tHQXNzaXN0 YW50UGx1Z2luOjp0aXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGkxOG5jKCJOb3VuLCBzb21l dGhpbmcgdXNlZCB0byBhc3Npc3QgdGhlIHVzZXIiLCAiRGlja2VucyAtIEFJIEFzc2lzdGFudCIp OworfQorCitRU3RyaW5nIFNLR0Fzc2lzdGFudFBsdWdpbjo6aWNvbigpIGNvbnN0Cit7CisgICAg cmV0dXJuIFFTdHJpbmdMaXRlcmFsKCJxYSIpOworfQorCitpbnQgU0tHQXNzaXN0YW50UGx1Z2lu OjpnZXRPcmRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDIwMDsKK30KKworYm9vbCBTS0dBc3Np c3RhbnRQbHVnaW46OmlzSW5QYWdlc0Nob29zZXIoKSBjb25zdAoreworICAgIHJldHVybiB0cnVl OworfQorCisjaW5jbHVkZSAic2tnYXNzaXN0YW50cGx1Z2luLm1vYyIKZGlmZiAtLWdpdCBhL3Bs dWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3NrZ2Fzc2lzdGFudHBsdWdpbi5oIGIv cGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0YW50cGx1Z2luLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4zYWQzZWIzZWEKLS0tIC9kZXYv bnVsbAorKysgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dhc3Npc3Rh bnRwbHVnaW4uaApAQCAtMCwwICsxLDk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTUERY LUZpbGVDb3B5cmlnaHRUZXh0OiAyMDI2IFMuIE1BTktPV1NLSSBzdGVwaGFuZUBtYW5rb3dza2ku ZnIKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMy4wLW9yLWxhdGVyCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworI2lmbmRlZiBTS0dBU1NJU1RBTlRQTFVHSU5fSAorI2RlZmluZSBTS0dB U1NJU1RBTlRQTFVHSU5fSAorLyoqIEBmaWxlCisgKiBBbiBBSSBhc3Npc3RhbnQgcGx1Z2luLgor ICovCisjaW5jbHVkZSAic2tnaW50ZXJmYWNlcGx1Z2luLmgiCisjaW5jbHVkZSAidWlfc2tnYXNz aXN0YW50cGx1Z2lud2lkZ2V0X3ByZWYuaCIKKworY2xhc3MgUURvY2tXaWRnZXQ7CisKKy8qKgor ICogQW4gQUkgYXNzaXN0YW50IHBsdWdpbgorICovCitjbGFzcyBTS0dBc3Npc3RhbnRQbHVnaW4g OiBwdWJsaWMgU0tHSW50ZXJmYWNlUGx1Z2luCit7CisgICAgUV9PQkpFQ1QKKyAgICBRX0lOVEVS RkFDRVMoU0tHSW50ZXJmYWNlUGx1Z2luKQorCitwdWJsaWM6CisgICAgLyoqCisgICAgICogRGVm YXVsdCBDb25zdHJ1Y3RvcgorICAgICAqLworICAgIGV4cGxpY2l0IFNLR0Fzc2lzdGFudFBsdWdp bihRV2lkZ2V0ICppV2lkZ2V0LCBRT2JqZWN0ICppUGFyZW50LCBjb25zdCBLUGx1Z2luTWV0YURh dGEgJm1ldGFEYXRhLCBjb25zdCBRVmFyaWFudExpc3QgJmlBcmcpOworCisgICAgLyoqCisgICAg ICogRGVmYXVsdCBEZXN0cnVjdG9yCisgICAgICovCisgICAgflNLR0Fzc2lzdGFudFBsdWdpbigp IG92ZXJyaWRlOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIHRvIGluaXRpYWxpc2UgdGhlIHBs dWdpbgorICAgICAqIEBwYXJhbSBpRG9jdW1lbnQgdGhlIG1haW4gZG9jdW1lbnQKKyAgICAgKiBA cmV0dXJuIHRydWUgaWYgdGhlIHBsdWdpbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGRvY3VtZW50 CisgICAgICovCisgICAgYm9vbCBzZXR1cEFjdGlvbnMoU0tHRG9jdW1lbnQgKmlEb2N1bWVudCkg b3ZlcnJpZGU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcGFnZSB3aWRnZXQgb2YgdGhlIHBsdWdp bi4KKyAgICAgKiBAcmV0dXJuIFRoZSBwYWdlIHdpZGdldCBvZiB0aGUgcGx1Z2luCisgICAgICov CisgICAgU0tHVGFiUGFnZSAqZ2V0V2lkZ2V0KCkgb3ZlcnJpZGU7CisKKyAgICAvKioKKyAgICAg KiBUaGUgcHJlZmVyZW5jZSB3aWRnZXQgb2YgdGhlIHBsdWdpbi4KKyAgICAgKiBAcmV0dXJuIFRo ZSBwcmVmZXJlbmNlIHdpZGdldCBvZiB0aGUgcGx1Z2luCisgICAgICovCisgICAgUVdpZGdldCAq Z2V0UHJlZmVyZW5jZVdpZGdldCgpIG92ZXJyaWRlOworCisgICAgLyoqCisgICAgICogVGhlIHBy ZWZlcmVuY2Ugc2tlbGV0b24gb2YgdGhlIHBsdWdpbi4KKyAgICAgKiBAcmV0dXJuIFRoZSBwcmVm ZXJlbmNlIHNrZWxldG9uIG9mIHRoZSBwbHVnaW4KKyAgICAgKi8KKyAgICBLQ29uZmlnU2tlbGV0 b24gKmdldFByZWZlcmVuY2VTa2VsZXRvbigpIG92ZXJyaWRlOworCisgICAgLyoqCisgICAgICog VGhlIGRvY2sgd2lkZ2V0IG9mIHRoZSBwbHVnaW4uCisgICAgICogQHJldHVybiBUaGUgZG9jayB3 aWRnZXQgb2YgdGhlIHBsdWdpbgorICAgICAqLworICAgIFFEb2NrV2lkZ2V0ICpnZXREb2NrV2lk Z2V0KCkgb3ZlcnJpZGU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdGl0bGUgb2YgdGhlIHBsdWdp bi4KKyAgICAgKiBAcmV0dXJuIFRoZSB0aXRsZSBvZiB0aGUgcGx1Z2luCisgICAgICovCisgICAg UVN0cmluZyB0aXRsZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLyoqCisgICAgICogVGhlIGlj b24gb2YgdGhlIHBsdWdpbi4KKyAgICAgKiBAcmV0dXJuIFRoZSBpY29uIG9mIHRoZSBwbHVnaW4K KyAgICAgKi8KKyAgICBRU3RyaW5nIGljb24oKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8qKgor ICAgICAqIE11c3QgYmUgaW1wbGVtZW50ZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcGx1 Z2luLgorICAgICAqIEByZXR1cm4gaW50ZWdlciB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDk5OSAoZGVm YXVsdCA9IDk5OSkKKyAgICAgKi8KKyAgICBpbnQgZ2V0T3JkZXIoKSBjb25zdCBvdmVycmlkZTsK KworICAgIC8qKgorICAgICAqIE11c3QgYmUgaW1wbGVtZW50ZWQgdG8ga25vdyBpZiBhIHBsdWdp biBtdXN0IGJlIGRpc3BsYXkgaW4gcGFnZXMgY2hvb3Nlci4KKyAgICAgKiBAcmV0dXJuIHRydWUg b2YgZmFsc2UgKGRlZmF1bHQgPSBmYWxzZSkKKyAgICAgKi8KKyAgICBib29sIGlzSW5QYWdlc0No b29zZXIoKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBRX0RJU0FCTEVfQ09QWShT S0dBc3Npc3RhbnRQbHVnaW4pCisKKyAgICBTS0dEb2N1bWVudCAqbV9jdXJyZW50RG9jdW1lbnQ7 CisgICAgUURvY2tXaWRnZXQgKm1fZG9ja1dpZGdldDsKKyAgICBVaTo6c2tnYXNzaXN0YW50cGx1 Z2luX3ByZWYgdWl7fTsKK307CisKKyNlbmRpZiAvLyBTS0dBU1NJU1RBTlRQTFVHSU5fSApkaWZm IC0tZ2l0IGEvcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0YW50 cGx1Z2luZG9ja3dpZGdldC5jcHAgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFu dC9za2dhc3Npc3RhbnRwbHVnaW5kb2Nrd2lkZ2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLjJiZWQyMGFiMQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvc2ty b29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3NrZ2Fzc2lzdGFudHBsdWdpbmRvY2t3aWRnZXQuY3Bw CkBAIC0wLDAgKzEsOTExIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTUERYLUZpbGVDb3B5 cmlnaHRUZXh0OiAyMDI2IFMuIE1BTktPV1NLSSBzdGVwaGFuZUBtYW5rb3dza2kuZnIKKyAqIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMy4wLW9yLWxhdGVyCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworLyoqIEBmaWxlCisgKiBBIGRvY2sgd2lkZ2V0IGZvciB0aGUgQUkgYXNzaXN0YW50IHBs dWdpbi4KKyAqLworI2luY2x1ZGUgInNrZ2Fzc2lzdGFudHBsdWdpbmRvY2t3aWRnZXQuaCIKKwor I2luY2x1ZGUgPHFldmVudGxvb3AuaD4KKyNpbmNsdWRlIDxxZmlsZS5oPgorI2luY2x1ZGUgPHFq c29uZG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxxanNvbm9iamVjdC5oPgorI2luY2x1ZGUgPHFqc29u cGFyc2VlcnJvci5oPgorI2luY2x1ZGUgPHFuZXR3b3JrcmVwbHkuaD4KKyNpbmNsdWRlIDxxbmV0 d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDxxcmVndWxhcmV4cHJlc3Npb24uaD4KKyNpbmNsdWRl IDxxc2hvcnRjdXQuaD4KKyNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgorI2luY2x1ZGUgPHF0ZXh0 Y3Vyc29yLmg+CisjaW5jbHVkZSA8cXVybHF1ZXJ5Lmg+CisKKyNpbmNsdWRlICJza2dhc3Npc3Rh bnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJza2dtYWlucGFuZWwuaCIKKyNpbmNsdWRlICJza2dw cm9wZXJ0eW9iamVjdC5oIgorI2luY2x1ZGUgInNrZ3NlcnZpY2VzLmgiCisjaW5jbHVkZSAic2tn c2hvdy5oIgorI2luY2x1ZGUgInNrZ3RyYWNlcy5oIgorI2luY2x1ZGUgInNrZ3RyYW5zYWN0aW9u bW5nLmgiCisKKyNkZWZpbmUgUFJFRklYX0FJQVNTSVNUQU5UX1NFU1NJT04gUVN0cmluZ0xpdGVy YWwoIlNLR19BSV9TRVNTSU9OXyIpCisKK1NLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6OlNL R0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQoUVdpZGdldCAqaVBhcmVudCwgU0tHRG9jdW1lbnQg KmlEb2N1bWVudCkKKyAgICA6IFNLR1dpZGdldChpUGFyZW50LCBpRG9jdW1lbnQpCit7CisgICAg U0tHVFJBQ0VJTkZVTkMoMTApCisgICAgaWYgKGlEb2N1bWVudCA9PSBudWxscHRyKSB7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aS5zZXR1cFVpKHRoaXMpOworCisgICAgdWkua1Nh dmVDdXJyZW50QWlTZXNzaW9uLT5zZXRJY29uKFNLR1NlcnZpY2VzOjpmcm9tVGhlbWUoUVN0cmlu Z0xpdGVyYWwoImRvY3VtZW50LXNhdmUiKSkpOworICAgIHVpLmtEZWxldGVBaVNlc3Npb24tPnNl dEljb24oU0tHU2VydmljZXM6OmZyb21UaGVtZShRU3RyaW5nTGl0ZXJhbCgiZWRpdC1kZWxldGUi KSkpOworICAgIHVpLmtBc2tCdXR0b24tPnNldEljb24oU0tHU2VydmljZXM6OmZyb21UaGVtZShR U3RyaW5nTGl0ZXJhbCgibWVkaWEtcGxheWJhY2stc3RhcnQiKSkpOworICAgIHVpLmtDbGVhckJ1 dHRvbi0+c2V0SWNvbihTS0dTZXJ2aWNlczo6ZnJvbVRoZW1lKFFTdHJpbmdMaXRlcmFsKCJlZGl0 LWNsZWFyIikpKTsKKyAgICB1aS5rSGVscEJ1dHRvbi0+c2V0SWNvbihTS0dTZXJ2aWNlczo6ZnJv bVRoZW1lKFFTdHJpbmdMaXRlcmFsKCJoZWxwLWFib3V0IikpKTsKKyAgICB1aS5rU2V0dGluZ3NC dXR0b24tPnNldEljb24oU0tHU2VydmljZXM6OmZyb21UaGVtZShRU3RyaW5nTGl0ZXJhbCgic2V0 dGluZ3MtY29uZmlndXJlIikpKTsKKworICAgIHVpLmtEaXNwbGF5UmVhc29uaW5nLT5hZGRHcm91 cGVkSXRlbShRU3RyaW5nTGl0ZXJhbCgiMCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpMThuYygiT3B0aW9uIHRvIGRpc3BsYXkgb3Igbm90IHRoZSByZWFzb25p bmcgb2YgdGhlIGFzc2lzdGFudCIsICJObyByZWFzb25pbmciKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFTdHJpbmdMaXRlcmFsKCJkaXNwbGF5X3JlYXNvbmluZyIpKTsKKyAg ICB1aS5rRGlzcGxheVJlYXNvbmluZy0+YWRkR3JvdXBlZEl0ZW0oUVN0cmluZ0xpdGVyYWwoIjEi KSwgaTE4bmMoIk9wdGlvbiB0byBkaXNwbGF5IG9yIG5vdCB0aGUgcmVhc29uaW5nIG9mIHRoZSBh c3Npc3RhbnQiLCAiUmVhc29uaW5nIHRhZyIpKSwgUVN0cmluZygpLAorICAgICAgICBRU3RyaW5n KCksIFFTdHJpbmdMaXRlcmFsKCJkaXNwbGF5X3JlYXNvbmluZyIpOworICAgIHVpLmtEaXNwbGF5 UmVhc29uaW5nLT5hZGRHcm91cGVkSXRlbShRU3RyaW5nTGl0ZXJhbCgiMiIpLCBpMThuYygiT3B0 aW9uIHRvIGRpc3BsYXkgb3Igbm90IHRoZSByZWFzb25pbmcgb2YgdGhlIGFzc2lzdGFudCIsICJD dXJyZW50IHJlYXNvbmluZyIpKSwgUVN0cmluZygpLAorICAgICAgICBRU3RyaW5nKCksIFFTdHJp bmdMaXRlcmFsKCJkaXNwbGF5X3JlYXNvbmluZyIpOworICAgIHVpLmtEaXNwbGF5UmVhc29uaW5n LT5hZGRHcm91cGVkSXRlbShRU3RyaW5nTGl0ZXJhbCgiMyIpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpMThuYygiT3B0aW9uIHRvIGRpc3BsYXkgb3Igbm90IHRo ZSByZWFzb25pbmcgb2YgdGhlIGFzc2lzdGFudCIsICJBbGwgcmVhc29uaW5nIiksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcoKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZygpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nTGl0ZXJhbCgiZGlzcGxheV9yZWFzb25p bmciKSk7CisgICAgdWkua0Rpc3BsYXlSZWFzb25pbmctPmFkZEdyb3VwZWRJdGVtKFFTdHJpbmdM aXRlcmFsKCI0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkx OG5jKCJPcHRpb24gdG8gZGlzcGxheSBvciBub3QgdGhlIHJlYXNvbmluZyBvZiB0aGUgYXNzaXN0 YW50IiwgIkFsbCByZWFzb25pbmcgYW5kIHRvb2xzIGFuc3dlcnMiKSksCisgICAgICAgIFFTdHJp bmcoKSwgUVN0cmluZygpLCBRU3RyaW5nTGl0ZXJhbCgiZGlzcGxheV9yZWFzb25pbmciKTsKKyAg ICB1aS5rRGlzcGxheVJlYXNvbmluZy0+c2V0U3RhdGUoUVN0cmluZ0xpdGVyYWwoIjEiKSk7CisK KyAgICAvLyBBZGQgaGVscCB0ZXh0IHRvIHRoZSBoZWxwIGFyZWEKKyAgICBRTGlzdDxRU3RyaW5n PiBoZWxwVGV4dHMgPSB7aTE4bmMoIkV4YW1wbGUgb2YgYSBJQSBxdWVzdGlvbiIsICJIb3cgbXVj aCBkbyBJIGhhdmUgaW4gbXkgY3VycmVudCBhY2NvdW50cz8iKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaTE4bmMoIkV4YW1wbGUgb2YgYSBJQSBxdWVzdGlvbiIsICJXaGF0IGlz IHRoZSB0b3RhbCBhbW91bnQgb2YgbXkgZXhwZW5zZXMgZm9yIHRoaXMgbW9udGg/IiksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5jKCJFeGFtcGxlIG9mIGEgSUEgcXVlc3Rp b24iLCAiQ2FuIHlvdSBwcm92aWRlIGEgc3VtbWFyeSBvZiBteSByZWNlbnQgdHJhbnNhY3Rpb25z PyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuYygiRXhhbXBsZSBvZiBh IElBIHF1ZXN0aW9uIiwgIldoYXQgYXJlIHRoZSB0b3AgNSBjYXRlZ29yaWVzIHdoZXJlIEkgc3Bl bmQgdGhlIG1vc3QgbW9uZXk/IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkx OG5jKCJFeGFtcGxlIG9mIGEgSUEgcXVlc3Rpb24iLCAiQ2FuIHlvdSBzdWdnZXN0IHdheXMgdG8g cmVkdWNlIG15IG1vbnRobHkgZXhwZW5zZXM/Iil9OworICAgIGZvciAoY29uc3QgUVN0cmluZyAm aGVscFRleHQgOiBoZWxwVGV4dHMpIHsKKyAgICAgICAgYXV0byBsYWJlbCA9IG5ldyBRTGFiZWwo IjxhIGhyZWY9XCIiICsgaGVscFRleHQgKyAiXCI+IiArIGhlbHBUZXh0ICsgIjwvYT4iKTsKKyAg ICAgICAgbGFiZWwtPnNldFdvcmRXcmFwKHRydWUpOworICAgICAgICBjb25uZWN0KGxhYmVsLCAm UUxhYmVsOjpsaW5rQWN0aXZhdGVkLCB0aGlzLCBbdGhpc10oY29uc3QgUVN0cmluZyAmbGluaykg eworICAgICAgICAgICAgdWkua1VzZXJQcm9tcHQtPnNldFBsYWluVGV4dChsaW5rKTsKKyAgICAg ICAgfSk7CisgICAgICAgIHVpLmtIZWxwQXJlYV8yLT5hZGRXaWRnZXQobGFiZWwpOworICAgIH0K KworICAgIHVpLmtIZWxwQXJlYS0+aGlkZSgpOworCisgICAgY29ubmVjdCh1aS5rQXNrQnV0dG9u LCAmUVB1c2hCdXR0b246OmNsaWNrZWQsIHRoaXMsICZTS0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lk Z2V0OjpvbkFzayk7CisgICAgY29ubmVjdCh1aS5rVXNlclByb21wdCwgJlFQbGFpblRleHRFZGl0 Ojp0ZXh0Q2hhbmdlZCwgdGhpcywgJlNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6Om9uVXNl clByb21wdENoYW5nZWQpOworICAgIGNvbm5lY3QodWkua0NsZWFyQnV0dG9uLCAmUVB1c2hCdXR0 b246OmNsaWNrZWQsIHRoaXMsICZTS0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lkZ2V0OjpvbkNsZWFy KTsKKyAgICBjb25uZWN0KHVpLmtEaXNwbGF5UmVhc29uaW5nLCAmU0tHU2hvdzo6c3RhdGVDaGFu Z2VkLCB0aGlzLCAmU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6cmVmcmVzaENvbnZlcnNh dGlvbik7CisgICAgY29ubmVjdCh1aS5rU2F2ZUN1cnJlbnRBaVNlc3Npb24sICZRUHVzaEJ1dHRv bjo6Y2xpY2tlZCwgdGhpcywgJlNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6Om9uU2F2ZUN1 cnJlbnRBaVNlc3Npb24pOworICAgIGNvbm5lY3QodWkua0RlbGV0ZUFpU2Vzc2lvbiwgJlFQdXNo QnV0dG9uOjpjbGlja2VkLCB0aGlzLCAmU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6b25E ZWxldGVBaVNlc3Npb24pOworICAgIGNvbm5lY3QodWkua0hlbHBCdXR0b24sICZRUHVzaEJ1dHRv bjo6Y2xpY2tlZCwgdGhpcywgW3RoaXNdKCkgeworICAgICAgICB1aS5rSGVscEFyZWEtPnNldFZp c2libGUoIXVpLmtIZWxwQXJlYS0+aXNWaXNpYmxlKCkpOworICAgIH0pOworICAgIGNvbm5lY3Qo dWkua0FpU2Vzc2lvbnMsICZRQ29tYm9Cb3g6OmN1cnJlbnRJbmRleENoYW5nZWQsIHRoaXMsICZT S0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lkZ2V0OjpvbkFpU2Vzc2lvbkNoYW5nZWQpOworICAgIGNv bm5lY3QodWkua1NldHRpbmdzQnV0dG9uLCAmUVB1c2hCdXR0b246OmNsaWNrZWQsIHRoaXMsIFt0 aGlzXSgpIHsKKyAgICAgICAgYXV0byAqbWFpblBhbmVsID0gU0tHTWFpblBhbmVsOjpnZXRNYWlu UGFuZWwoKTsKKyAgICAgICAgaWYgKG1haW5QYW5lbCAhPSBudWxscHRyKSB7CisgICAgICAgICAg ICBtYWluUGFuZWwtPm9wdGlvbnNQcmVmZXJlbmNlcyhRU3RyaW5nTGl0ZXJhbCgiU2tyb29nZSBB SSBhc3Npc3RhbnQgcGx1Z2luIikpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBhdXRvIGFz a1Nob3J0Y3V0ID0gbmV3IFFTaG9ydGN1dChRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBRdDo6S2V5 X1JldHVybiksIHVpLmtVc2VyUHJvbXB0KTsKKyAgICBjb25uZWN0KGFza1Nob3J0Y3V0LCAmUVNo b3J0Y3V0OjphY3RpdmF0ZWQsIHRoaXMsICZTS0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lkZ2V0Ojpv bkFzayk7CisKKyAgICBjb25uZWN0KGlEb2N1bWVudCwgJlNLR0RvY3VtZW50Ojptb2RpZmllZCwg dGhpcywgJlNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6OnNsb3RSZWZyZXNoU2Vzc2lvbnNM aXN0KTsKKworICAgIHJlZnJlc2hTZXNzaW9uc0xpc3QoZmFsc2UpOworfQorCitTS0dBc3Npc3Rh bnRQbHVnaW5Eb2NrV2lkZ2V0Ojp+U0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldCgpCit7Cisg ICAgaWYgKG1fcGVuZGluZ1JlcGx5ICE9IG51bGxwdHIpIHsKKyAgICAgICAgbV9wZW5kaW5nUmVw bHktPmFib3J0KCk7CisgICAgfQorfQorCit2b2lkIFNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRn ZXQ6Om9uVXNlclByb21wdENoYW5nZWQoKQoreworICAgIHVpLmtBc2tCdXR0b24tPnNldEVuYWJs ZWQoIXVpLmtVc2VyUHJvbXB0LT50b1BsYWluVGV4dCgpLnRyaW1tZWQoKS5pc0VtcHR5KCkgJiYg bV9wZW5kaW5nUmVwbHkgPT0gbnVsbHB0cik7Cit9CisKK1FVcmwgU0tHQXNzaXN0YW50UGx1Z2lu RG9ja1dpZGdldDo6Z2V0Q29tcGxldGlvbkVuZHBvaW50KCkgY29uc3QKK3sKKyAgICBRU3RyaW5n IHVybFRleHQgPSBza2dhc3Npc3RhbnRfc2V0dGluZ3M6OnNlcnZlclVybCgpLnRyaW1tZWQoKTsK KyAgICBpZiAodXJsVGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIFFVcmwoKTsKKyAg ICB9CisgICAgaWYgKCF1cmxUZXh0LmNvbnRhaW5zKFFTdHJpbmdMaXRlcmFsKCI6Ly8iKSkpIHsK KyAgICAgICAgdXJsVGV4dCA9IFFTdHJpbmdMaXRlcmFsKCJodHRwOi8vIikgKyB1cmxUZXh0Owor ICAgIH0KKworICAgIFFVcmwgZW5kcG9pbnQodXJsVGV4dCk7CisgICAgaWYgKCFlbmRwb2ludC5p c1ZhbGlkKCkpIHsKKyAgICAgICAgcmV0dXJuIGVuZHBvaW50OworICAgIH0KKworICAgIFFTdHJp bmcgcGF0aCA9IGVuZHBvaW50LnBhdGgoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0 aCA9PSBRU3RyaW5nTGl0ZXJhbCgiLyIpKSB7CisgICAgICAgIHBhdGggPSBRU3RyaW5nTGl0ZXJh bCgiL3YxL2NoYXQvY29tcGxldGlvbnMiKTsKKyAgICB9IGVsc2UgaWYgKCFwYXRoLmVuZHNXaXRo KFFTdHJpbmdMaXRlcmFsKCIvdjEvY2hhdC9jb21wbGV0aW9ucyIpKSkgeworICAgICAgICBpZiAo cGF0aC5lbmRzV2l0aCh1Jy8nKSkgeworICAgICAgICAgICAgcGF0aC5jaG9wKDEpOworICAgICAg ICB9CisgICAgICAgIGlmICghcGF0aC5lbmRzV2l0aChRU3RyaW5nTGl0ZXJhbCgiL3YxIikpKSB7 CisgICAgICAgICAgICBwYXRoICs9IFFTdHJpbmdMaXRlcmFsKCIvdjEiKTsKKyAgICAgICAgfQor ICAgICAgICBwYXRoICs9IFFTdHJpbmdMaXRlcmFsKCIvY2hhdC9jb21wbGV0aW9ucyIpOworICAg IH0KKyAgICBlbmRwb2ludC5zZXRQYXRoKHBhdGgpOworCisgICAgcmV0dXJuIGVuZHBvaW50Owor fQorCit2b2lkIFNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6OnNldEJ1c3koYm9vbCBpQnVz eSkKK3sKKyAgICB1aS5rQXNrQnV0dG9uLT5zZXRJY29uKFNLR1NlcnZpY2VzOjpmcm9tVGhlbWUo aUJ1c3kgPyBRU3RyaW5nTGl0ZXJhbCgibWVkaWEtcGxheWJhY2stc3RvcCIpIDogUVN0cmluZ0xp dGVyYWwoIm1lZGlhLXBsYXliYWNrLXN0YXJ0IikpKTsKKyAgICB1aS5rQ2xlYXJCdXR0b24tPnNl dEVuYWJsZWQoIWlCdXN5KTsKKyAgICB1aS5rVXNlclByb21wdC0+c2V0RW5hYmxlZCghaUJ1c3kp OworICAgIHVpLmtBaVNlc3Npb25Nbmd0LT5zZXRFbmFibGVkKCFpQnVzeSk7Cit9CisKK1FTdHJp bmcgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6Z2V0U3lzdGVtUHJvbXB0KCkKK3sKKyAg ICAvLyBSZWFkIHNrcm9vZ2Vfc3lzdGVtX3Byb21wdC5tZCBmaWxlIGNvbnRlbnQKKyAgICBRU3Ry aW5nIHN5c3RlbVByb21wdFBhdGggPSBRU3RhbmRhcmRQYXRoczo6bG9jYXRlKFFTdGFuZGFyZFBh dGhzOjpHZW5lcmljRGF0YUxvY2F0aW9uLCBRU3RyaW5nTGl0ZXJhbCgic2tyb29nZS9za3Jvb2dl X3N5c3RlbV9wcm9tcHQubWQiKSk7CisgICAgUUZpbGUgZmlsZShzeXN0ZW1Qcm9tcHRQYXRoKTsK KyAgICBpZiAoZmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkgfCBRSU9EZXZpY2U6OlRleHQp KSB7CisgICAgICAgIFFUZXh0U3RyZWFtIHN0cmVhbSgmZmlsZSk7CisKKyAgICAgICAgYXV0byBz eXN0ZW1Qcm9tcHQgPSBzdHJlYW0ucmVhZEFsbCgpOworICAgICAgICBhdXRvIHVzZXJGYW1pbHlT aXR1YXRpb24gPSBza2dhc3Npc3RhbnRfc2V0dGluZ3M6OmZhbWlseVNpdHVhdGlvbigpLnRyaW1t ZWQoKTsKKyAgICAgICAgaWYgKCF1c2VyRmFtaWx5U2l0dWF0aW9uLmlzRW1wdHkoKSkgeworICAg ICAgICAgICAgc3lzdGVtUHJvbXB0ICs9ICJcblxuIyMgIFVzZXIgZmFtaWx5IHNpdHVhdGlvblxu XG4iICsgdXNlckZhbWlseVNpdHVhdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3lz dGVtUHJvbXB0OworICAgIH0KKyAgICByZXR1cm4gUVN0cmluZygpOworfQorCitRU3RyaW5nIFNL R0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6Om1hcmtkb3duVG9IdG1sKGNvbnN0IFFTdHJpbmcg JmlDb250ZW50KQoreworICAgIFFUZXh0RG9jdW1lbnQgZG9jOworICAgIGRvYy5zZXRNYXJrZG93 bihpQ29udGVudCk7CisgICAgcmV0dXJuIGRvYy50b0h0bWwoKTsKK30KKwordm9pZCBTS0dBc3Np c3RhbnRQbHVnaW5Eb2NrV2lkZ2V0OjpvbkNsZWFyKCkKK3sKKyAgICBTS0dUUkFDRUlORlVOQygx MCkKKyAgICB1aS5rVXNlclByb21wdC0+Y2xlYXIoKTsKKyAgICB1aS5rQW5zd2VyLT5jbGVhcigp OworICAgIG1fbWVzc2FnZXMgPSBRSnNvbkFycmF5KCk7CisgICAgdWkua0FpU2Vzc2lvbnMtPnNl dEN1cnJlbnRJbmRleCgwKTsKK30KKwordm9pZCBTS0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lkZ2V0 OjpvbkFzaygpCit7CisgICAgU0tHVFJBQ0VJTkZVTkMoMTApCisgICAgdWkua0hlbHBBcmVhLT5z ZXRWaXNpYmxlKGZhbHNlKTsKKyAgICBpZiAobV9wZW5kaW5nUmVwbHkgIT0gbnVsbHB0cikgewor ICAgICAgICAvLyBTdG9wIHRoZSBwZW5kaW5nIHJlcXVlc3QgaWYgdGhlcmUgaXMgb25lCisgICAg ICAgIG1fcGVuZGluZ1JlcGx5LT5hYm9ydCgpOworICAgICAgICBtX3BlbmRpbmdSZXBseSA9IG51 bGxwdHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU3RhcnQgYSBuZXcgcmVxdWVzdAorICAg ICAgICBjb25zdCBRU3RyaW5nIHF1ZXN0aW9uID0gdWkua1VzZXJQcm9tcHQtPnRvUGxhaW5UZXh0 KCkudHJpbW1lZCgpOworICAgICAgICBpZiAocXVlc3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAg ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9tZXNzYWdlcy5pc0VtcHR5 KCkpIHsKKyAgICAgICAgICAgIFFKc29uT2JqZWN0IG1zZzsKKyAgICAgICAgICAgIG1zZy5pbnNl cnQoUVN0cmluZ0xpdGVyYWwoInJvbGUiKSwgUVN0cmluZ0xpdGVyYWwoInN5c3RlbSIpKTsKKyAg ICAgICAgICAgIG1zZy5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoImNvbnRlbnQiKSwgZ2V0U3lzdGVt UHJvbXB0KCkpOworICAgICAgICAgICAgbV9tZXNzYWdlcy5wdXNoX2JhY2sobXNnKTsKKyAgICAg ICAgfQorCisgICAgICAgIC8vIEFkZCB1c2VyIHF1ZXN0aW9uIHRvIHRoZSBjb252ZXJzYXRpb24g aGlzdG9yeQorICAgICAgICBRSnNvbk9iamVjdCBtc2c7CisgICAgICAgIG1zZy5pbnNlcnQoUVN0 cmluZ0xpdGVyYWwoInJvbGUiKSwgUVN0cmluZ0xpdGVyYWwoInVzZXIiKSk7CisgICAgICAgIG1z Zy5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoImNvbnRlbnQiKSwgcXVlc3Rpb24pOworICAgICAgICBt X21lc3NhZ2VzLnB1c2hfYmFjayhtc2cpOworICAgICAgICBtX3Rvb2xDYWxsRGVwdGggPSAwOwor CisgICAgICAgIFNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6OnJlZnJlc2hDb252ZXJzYXRp b24oKTsKKyAgICAgICAgc2VuZENvbXBsZXRpb25SZXF1ZXN0KCk7CisgICAgfQorfQorCit2b2lk IFNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6OnNlbmRDb21wbGV0aW9uUmVxdWVzdCgpCit7 CisgICAgU0tHVFJBQ0VJTkZVTkMoMTApCisgICAgaWYgKG1fcGVuZGluZ1JlcGx5ICE9IG51bGxw dHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFFVcmwgZW5kcG9pbnQg PSBnZXRDb21wbGV0aW9uRW5kcG9pbnQoKTsKKyAgICBpZiAoIWVuZHBvaW50LmlzVmFsaWQoKSkg eworICAgICAgICBhdXRvICptYWluUGFuZWwgPSBTS0dNYWluUGFuZWw6OmdldE1haW5QYW5lbCgp OworICAgICAgICBpZiAobWFpblBhbmVsICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1haW5Q YW5lbC0+ZGlzcGxheU1lc3NhZ2Uoc2tnYXNzaXN0YW50X3NldHRpbmdzOjpzZXJ2ZXJVcmwoKS50 cmltbWVkKCkuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IGkxOG5jKCJFcnJvciBtZXNzYWdlIiwgIlNlcnZlciBVUkwgaXMgZW1wdHkuIFBsZWFz ZSBjb25maWd1cmUgaXQgaW4gdGhlIHNldHRpbmdzLiIpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IGkxOG5jKCJFcnJvciBtZXNzYWdlIiwgIkludmFsaWQgc2Vy dmVyIFVSTDogJTEiLCBlbmRwb2ludC50b1N0cmluZygpKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU0tHRG9jdW1lbnQ6OkVycm9yKTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgUUpzb25PYmplY3QgcGF5bG9hZDsKKyAgICBwYXlsb2Fk Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgibWVzc2FnZXMiKSwgZ2V0UmVxdWVzdE1lc3NhZ2VzKG1f bWVzc2FnZXMpKTsKKyAgICBwYXlsb2FkLmluc2VydChRU3RyaW5nTGl0ZXJhbCgidGVtcGVyYXR1 cmUiKSwgMS4wKTsKKyAgICBwYXlsb2FkLmluc2VydChRU3RyaW5nTGl0ZXJhbCgic3RyZWFtIiks IGZhbHNlKTsKKyAgICBwYXlsb2FkLmluc2VydChRU3RyaW5nTGl0ZXJhbCgidG9vbHMiKSwgZ2V0 VG9vbHMoKSk7CisKKyAgICBRTmV0d29ya1JlcXVlc3QgcmVxdWVzdChlbmRwb2ludCk7CisgICAg cmVxdWVzdC5zZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50VHlwZUhlYWRlciwgUVN0 cmluZ0xpdGVyYWwoImFwcGxpY2F0aW9uL2pzb24iKSk7CisKKyAgICBRU3RyaW5nIHRva2VuID0g c2tnYXNzaXN0YW50X3NldHRpbmdzOjphcGlUb2tlbigpLnRyaW1tZWQoKTsKKyAgICBpZiAoIXRv a2VuLmlzRW1wdHkoKSkgeworICAgICAgICByZXF1ZXN0LnNldFJhd0hlYWRlcigiQXV0aG9yaXph dGlvbiIsICJCZWFyZXIgIiArIHRva2VuLnRvVXRmOCgpKTsKKyAgICB9CisKKyAgICBhdXRvIHBh eWxvYWRTdHJpbmcgPSBRSnNvbkRvY3VtZW50KHBheWxvYWQpLnRvSnNvbihRSnNvbkRvY3VtZW50 OjpDb21wYWN0KTsKKyAgICBtX3BlbmRpbmdSZXBseSA9IG1fbmV0d29ya01hbmFnZXIucG9zdChy ZXF1ZXN0LCBwYXlsb2FkU3RyaW5nKTsKKyAgICBjb25uZWN0KG1fcGVuZGluZ1JlcGx5LCAmUU5l dHdvcmtSZXBseTo6ZmluaXNoZWQsIHRoaXMsICZTS0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lkZ2V0 OjpvblJlcGx5RmluaXNoZWQpOworCisgICAgc2V0QnVzeSh0cnVlKTsKK30KKworUUpzb25BcnJh eSBTS0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lkZ2V0OjpnZXRUb29scygpCit7CisgICAgUUpzb25B cnJheSB0b29sczsKKyAgICAvLyBBZGQgdGhlIFNRTGl0ZSBTRUxFQ1QgdG9vbAorICAgIHsKKyAg ICAgICAgUUpzb25PYmplY3QgdG9vbDsKKyAgICAgICAgdG9vbC5pbnNlcnQoUVN0cmluZ0xpdGVy YWwoInR5cGUiKSwgUVN0cmluZ0xpdGVyYWwoImZ1bmN0aW9uIikpOworICAgICAgICBRSnNvbk9i amVjdCBmdW5jdGlvbjsKKyAgICAgICAgZnVuY3Rpb24uaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJu YW1lIiksIFFTdHJpbmdMaXRlcmFsKCJleGVjdXRlX3NxbGl0ZV9zZWxlY3QiKSk7CisgICAgICAg IGZ1bmN0aW9uLmluc2VydChRU3RyaW5nTGl0ZXJhbCgiZGVzY3JpcHRpb24iKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGkxOG5jKCJUb29sIGRlc2NyaXB0aW9uIiwgIkV4ZWN1dGUgYSBTUUxp dGUgU0VMRUNUIHF1ZXJ5IG9uIHRoZSBjdXJyZW50IFNrcm9vZ2UgZGF0YWJhc2UuIE9ubHkgU0VM RUNUIHN0YXRlbWVudHMgYXJlIGFsbG93ZWQuIikpOworICAgICAgICBRSnNvbk9iamVjdCBwYXJh bWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmluc2VydChRU3RyaW5nTGl0ZXJhbCgidHlwZSIp LCBRU3RyaW5nTGl0ZXJhbCgib2JqZWN0IikpOworICAgICAgICBRSnNvbk9iamVjdCBwcm9wZXJ0 aWVzOworICAgICAgICBRSnNvbk9iamVjdCBzcWxQcm9wZXJ0eTsKKyAgICAgICAgc3FsUHJvcGVy dHkuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJ0eXBlIiksIFFTdHJpbmdMaXRlcmFsKCJzdHJpbmci KSk7CisgICAgICAgIHNxbFByb3BlcnR5Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgiZGVzY3JpcHRp b24iKSwgaTE4bmMoIlRvb2wgcGFyYW1ldGVyIGRlc2NyaXB0aW9uIiwgIlRoZSBTUUwgcXVlcnkg dG8gZXhlY3V0ZS4gT25seSBTRUxFQ1Qgc3RhdGVtZW50cyBhcmUgYWxsb3dlZC4iKSk7CisgICAg ICAgIHByb3BlcnRpZXMuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJzcWwiKSwgc3FsUHJvcGVydHkp OworICAgICAgICBwYXJhbWV0ZXJzLmluc2VydChRU3RyaW5nTGl0ZXJhbCgicHJvcGVydGllcyIp LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgUUpzb25BcnJheSByZXF1aXJlZDsKKyAgICAgICAgcmVx dWlyZWQucHVzaF9iYWNrKFFTdHJpbmdMaXRlcmFsKCJzcWwiKSk7CisgICAgICAgIHBhcmFtZXRl cnMuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJyZXF1aXJlZCIpLCByZXF1aXJlZCk7CisgICAgICAg IGZ1bmN0aW9uLmluc2VydChRU3RyaW5nTGl0ZXJhbCgicGFyYW1ldGVycyIpLCBwYXJhbWV0ZXJz KTsKKyAgICAgICAgdG9vbC5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoImZ1bmN0aW9uIiksIGZ1bmN0 aW9uKTsKKyAgICAgICAgdG9vbHMgPDwgdG9vbDsKKyAgICB9CisKKyAgICAvLyBBZGQgdGhlIHdl YiBzZWFyY2ggdG9vbCBpZiBlbmFibGVkIGluIHNldHRpbmdzCisgICAgaWYgKHNrZ2Fzc2lzdGFu dF9zZXR0aW5nczo6ZW5hYmxlV2ViU2VhcmNoKCkpIHsKKyAgICAgICAgUUpzb25PYmplY3QgdG9v bDsKKyAgICAgICAgdG9vbC5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoInR5cGUiKSwgUVN0cmluZ0xp dGVyYWwoImZ1bmN0aW9uIikpOworICAgICAgICBRSnNvbk9iamVjdCBmdW5jdGlvbjsKKyAgICAg ICAgZnVuY3Rpb24uaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJuYW1lIiksIFFTdHJpbmdMaXRlcmFs KCJ3ZWJfc2VhcmNoIikpOworICAgICAgICBmdW5jdGlvbi5pbnNlcnQoUVN0cmluZ0xpdGVyYWwo ImRlc2NyaXB0aW9uIiksIGkxOG5jKCJUb29sIGRlc2NyaXB0aW9uIiwgIlNlYXJjaCB0aGUgaW50 ZXJuZXQgdXNpbmcgRHVja0R1Y2tHbyB0byBmaW5kIHJlbGV2YW50IGluZm9ybWF0aW9uLiIpKTsK KyAgICAgICAgUUpzb25PYmplY3QgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5pbnNl cnQoUVN0cmluZ0xpdGVyYWwoInR5cGUiKSwgUVN0cmluZ0xpdGVyYWwoIm9iamVjdCIpKTsKKyAg ICAgICAgUUpzb25PYmplY3QgcHJvcGVydGllczsKKyAgICAgICAgUUpzb25PYmplY3QgcXVlcnlQ cm9wZXJ0eTsKKyAgICAgICAgcXVlcnlQcm9wZXJ0eS5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoInR5 cGUiKSwgUVN0cmluZ0xpdGVyYWwoInN0cmluZyIpKTsKKyAgICAgICAgcXVlcnlQcm9wZXJ0eS5p bnNlcnQoUVN0cmluZ0xpdGVyYWwoImRlc2NyaXB0aW9uIiksIGkxOG5jKCJUb29sIHBhcmFtZXRl ciBkZXNjcmlwdGlvbiIsICJUaGUgc2VhcmNoIHF1ZXJ5IHRvIGxvb2sgdXAgb24gdGhlIGludGVy bmV0LiIpKTsKKyAgICAgICAgcHJvcGVydGllcy5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoInF1ZXJ5 IiksIHF1ZXJ5UHJvcGVydHkpOworICAgICAgICBRSnNvbk9iamVjdCBtYXhSZXN1bHRzUHJvcGVy dHk7CisgICAgICAgIG1heFJlc3VsdHNQcm9wZXJ0eS5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoInR5 cGUiKSwgUVN0cmluZ0xpdGVyYWwoImludGVnZXIiKSk7CisgICAgICAgIG1heFJlc3VsdHNQcm9w ZXJ0eS5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoImRlc2NyaXB0aW9uIiksIGkxOG5jKCJUb29sIHBh cmFtZXRlciBkZXNjcmlwdGlvbiIsICJNYXhpbXVtIG51bWJlciBvZiByZXN1bHRzIHRvIHJldHVy biAoMS0xMCkuIikpOworICAgICAgICBwcm9wZXJ0aWVzLmluc2VydChRU3RyaW5nTGl0ZXJhbCgi bWF4X3Jlc3VsdHMiKSwgbWF4UmVzdWx0c1Byb3BlcnR5KTsKKyAgICAgICAgcGFyYW1ldGVycy5p bnNlcnQoUVN0cmluZ0xpdGVyYWwoInByb3BlcnRpZXMiKSwgcHJvcGVydGllcyk7CisgICAgICAg IFFKc29uQXJyYXkgcmVxdWlyZWQ7CisgICAgICAgIHJlcXVpcmVkLnB1c2hfYmFjayhRU3RyaW5n TGl0ZXJhbCgicXVlcnkiKSk7CisgICAgICAgIHBhcmFtZXRlcnMuaW5zZXJ0KFFTdHJpbmdMaXRl cmFsKCJyZXF1aXJlZCIpLCByZXF1aXJlZCk7CisgICAgICAgIGZ1bmN0aW9uLmluc2VydChRU3Ry aW5nTGl0ZXJhbCgicGFyYW1ldGVycyIpLCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgdG9vbC5pbnNl cnQoUVN0cmluZ0xpdGVyYWwoImZ1bmN0aW9uIiksIGZ1bmN0aW9uKTsKKyAgICAgICAgdG9vbHMg PDwgdG9vbDsKKyAgICB9CisgICAgcmV0dXJuIHRvb2xzOworfQorCitRSnNvbkFycmF5IFNLR0Fz c2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6OmdldFJlcXVlc3RNZXNzYWdlcyhjb25zdCBRSnNvbkFy cmF5ICZpTWVzc2FnZXMpCit7CisgICAgUUpzb25BcnJheSByZXF1ZXN0TWVzc2FnZXM7CisgICAg Zm9yIChjb25zdCBhdXRvICZtZXNzYWdlVmFsdWUgOiBpTWVzc2FnZXMpIHsKKyAgICAgICAgaWYg KCFtZXNzYWdlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgIH0KKyAgICAgICAgUUpzb25PYmplY3QgbWVzc2FnZSA9IG1lc3NhZ2VWYWx1ZS50b09iamVj dCgpOworICAgICAgICBtZXNzYWdlLnJlbW92ZShRU3RyaW5nTGl0ZXJhbCgicmVhc29uaW5nX2Nv bnRlbnQiKSk7CisgICAgICAgIHJlcXVlc3RNZXNzYWdlcy5wdXNoX2JhY2sobWVzc2FnZSk7Cisg ICAgfQorICAgIHJldHVybiByZXF1ZXN0TWVzc2FnZXM7Cit9CisKK1FTdHJpbmcgU0tHQXNzaXN0 YW50UGx1Z2luRG9ja1dpZGdldDo6Y29udGVudFRvVGV4dChjb25zdCBRSnNvblZhbHVlICZpQ29u dGVudCkKK3sKKyAgICBpZiAoaUNvbnRlbnQuaXNTdHJpbmcoKSkgeworICAgICAgICByZXR1cm4g aUNvbnRlbnQudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAoaUNvbnRlbnQuaXNBcnJheSgp KSB7CisgICAgICAgIFFTdHJpbmdMaXN0IHBhcnRzOworICAgICAgICBjb25zdCBhdXRvIHZhbHVl cyA9IGlDb250ZW50LnRvQXJyYXkoKTsKKyAgICAgICAgaW50IG5iID0gdmFsdWVzLmNvdW50KCk7 CisgICAgICAgIHBhcnRzLnJlc2VydmUobmIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IG5iOyArK2kpIHsKKyAgICAgICAgICAgIFFTdHJpbmcgcGFydCA9IGNvbnRlbnRUb1RleHQodmFs dWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGlmICghcGFydC5pc0VtcHR5KCkpIHsKKyAgICAgICAg ICAgICAgICBwYXJ0cy5wdXNoX2JhY2socGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJ1xuJyk7CisgICAgfQorCisgICAgaWYgKGlDb250 ZW50LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgUUpzb25PYmplY3Qgb2JqID0gaUNvbnRlbnQudG9P YmplY3QoKTsKKyAgICAgICAgaWYgKG9iai5jb250YWlucyhRU3RyaW5nTGl0ZXJhbCgidGV4dCIp KSkgeworICAgICAgICAgICAgcmV0dXJuIG9iai52YWx1ZShRU3RyaW5nTGl0ZXJhbCgidGV4dCIp KS50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGlmIChvYmouY29udGFpbnMoUVN0cmlu Z0xpdGVyYWwoImNvbnRlbnQiKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZW50VG9UZXh0 KG9iai52YWx1ZShRU3RyaW5nTGl0ZXJhbCgiY29udGVudCIpKSk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKG9iai5jb250YWlucyhRU3RyaW5nTGl0ZXJhbCgidmFsdWUiKSkpIHsKKyAgICAgICAg ICAgIHJldHVybiBjb250ZW50VG9UZXh0KG9iai52YWx1ZShRU3RyaW5nTGl0ZXJhbCgidmFsdWUi KSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBRU3RyaW5nKCk7Cit9CisKK1FTdHJp bmcgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6ZXh0cmFjdFJlYXNvbmluZ0Zyb21Db250 ZW50KFFTdHJpbmcgJmlvQ29udGVudCkKK3sKKyAgICBRU3RyaW5nTGlzdCByZWFzb25pbmdzOwor CisgICAgc3RhdGljIGNvbnN0IFFSZWd1bGFyRXhwcmVzc2lvbiBjb21wbGV0ZVRoaW5rVGFnKFFT dHJpbmdMaXRlcmFsKCI8dGhpbmtcXGJbXj5dKj4oLio/KTwvdGhpbms+IiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFSZWd1bGFyRXhwcmVz c2lvbjo6RG90TWF0Y2hlc0V2ZXJ5dGhpbmdPcHRpb24gfCBRUmVndWxhckV4cHJlc3Npb246OkNh c2VJbnNlbnNpdGl2ZU9wdGlvbik7CisgICAgYXV0byBtYXRjaEl0ZXJhdG9yID0gY29tcGxldGVU aGlua1RhZy5nbG9iYWxNYXRjaChpb0NvbnRlbnQpOworICAgIHdoaWxlIChtYXRjaEl0ZXJhdG9y Lmhhc05leHQoKSkgeworICAgICAgICBjb25zdCBRUmVndWxhckV4cHJlc3Npb25NYXRjaCBtYXRj aCA9IG1hdGNoSXRlcmF0b3IubmV4dCgpOworICAgICAgICBjb25zdCBRU3RyaW5nIHJlYXNvbmlu ZyA9IG1hdGNoLmNhcHR1cmVkKDEpLnRyaW1tZWQoKTsKKyAgICAgICAgaWYgKCFyZWFzb25pbmcu aXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZWFzb25pbmdzLnB1c2hfYmFjayhyZWFzb25pbmcp OworICAgICAgICB9CisgICAgfQorICAgIGlvQ29udGVudC5yZW1vdmUoY29tcGxldGVUaGlua1Rh Zyk7CisKKyAgICBzdGF0aWMgY29uc3QgUVJlZ3VsYXJFeHByZXNzaW9uIG9wZW5UaGlua1RhZyhR U3RyaW5nTGl0ZXJhbCgiPHRoaW5rXFxiW14+XSo+KC4qKSQiKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUmVndWxhckV4cHJlc3Npb246OkRvdE1h dGNoZXNFdmVyeXRoaW5nT3B0aW9uIHwgUVJlZ3VsYXJFeHByZXNzaW9uOjpDYXNlSW5zZW5zaXRp dmVPcHRpb24pOworICAgIGNvbnN0IFFSZWd1bGFyRXhwcmVzc2lvbk1hdGNoIG9wZW5NYXRjaCA9 IG9wZW5UaGlua1RhZy5tYXRjaChpb0NvbnRlbnQpOworICAgIGlmIChvcGVuTWF0Y2guaGFzTWF0 Y2goKSkgeworICAgICAgICBjb25zdCBRU3RyaW5nIHJlYXNvbmluZyA9IG9wZW5NYXRjaC5jYXB0 dXJlZCgxKS50cmltbWVkKCk7CisgICAgICAgIGlmICghcmVhc29uaW5nLmlzRW1wdHkoKSkgewor ICAgICAgICAgICAgcmVhc29uaW5ncy5wdXNoX2JhY2socmVhc29uaW5nKTsKKyAgICAgICAgfQor ICAgICAgICBpb0NvbnRlbnQucmVtb3ZlKG9wZW5NYXRjaC5jYXB0dXJlZFN0YXJ0KDApLCBpb0Nv bnRlbnQubGVuZ3RoKCkgLSBvcGVuTWF0Y2guY2FwdHVyZWRTdGFydCgwKSk7CisgICAgfQorCisg ICAgaW9Db250ZW50ID0gaW9Db250ZW50LnRyaW1tZWQoKTsKKyAgICByZXR1cm4gcmVhc29uaW5n cy5qb2luKFFTdHJpbmdMaXRlcmFsKCJcblxuIikpLnRyaW1tZWQoKTsKK30KKworUVN0cmluZyBT S0dBc3Npc3RhbnRQbHVnaW5Eb2NrV2lkZ2V0OjpyZWFzb25pbmdDb250ZW50VG9UZXh0KGNvbnN0 IFFKc29uT2JqZWN0ICZpTWVzc2FnZSwgY29uc3QgUUpzb25PYmplY3QgJmlDaG9pY2UpCit7Cisg ICAgUVN0cmluZyByZWFzb25pbmcgPSBjb250ZW50VG9UZXh0KGlNZXNzYWdlLnZhbHVlKFFTdHJp bmdMaXRlcmFsKCJyZWFzb25pbmdfY29udGVudCIpKSkudHJpbW1lZCgpOworICAgIGlmIChyZWFz b25pbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlYXNvbmluZyA9IGNvbnRlbnRUb1RleHQoaUNo b2ljZS52YWx1ZShRU3RyaW5nTGl0ZXJhbCgicmVhc29uaW5nX2NvbnRlbnQiKSkpLnRyaW1tZWQo KTsKKyAgICB9CisgICAgaWYgKHJlYXNvbmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVhc29u aW5nID0gY29udGVudFRvVGV4dChpQ2hvaWNlLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJyZWFzb25p bmciKSkpLnRyaW1tZWQoKTsKKyAgICB9CisgICAgaWYgKHJlYXNvbmluZy5pc0VtcHR5KCkpIHsK KyAgICAgICAgY29uc3QgUUpzb25PYmplY3QgZGVsdGEgPSBpQ2hvaWNlLnZhbHVlKFFTdHJpbmdM aXRlcmFsKCJkZWx0YSIpKS50b09iamVjdCgpOworICAgICAgICByZWFzb25pbmcgPSBjb250ZW50 VG9UZXh0KGRlbHRhLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJyZWFzb25pbmdfY29udGVudCIpKSku dHJpbW1lZCgpOworICAgIH0KKyAgICBpZiAocmVhc29uaW5nLmlzRW1wdHkoKSkgeworICAgICAg ICBRU3RyaW5nIGNvbnRlbnQgPSBjb250ZW50VG9UZXh0KGlNZXNzYWdlLnZhbHVlKFFTdHJpbmdM aXRlcmFsKCJjb250ZW50IikpKTsKKyAgICAgICAgcmVhc29uaW5nID0gZXh0cmFjdFJlYXNvbmlu Z0Zyb21Db250ZW50KGNvbnRlbnQpOworICAgIH0KKyAgICBpZiAocmVhc29uaW5nLmlzRW1wdHko KSkgeworICAgICAgICBRU3RyaW5nIGNvbnRlbnQgPSBjb250ZW50VG9UZXh0KGlDaG9pY2UudmFs dWUoUVN0cmluZ0xpdGVyYWwoInRleHQiKSkpOworICAgICAgICByZWFzb25pbmcgPSBleHRyYWN0 UmVhc29uaW5nRnJvbUNvbnRlbnQoY29udGVudCk7CisgICAgfQorICAgIGlmIChyZWFzb25pbmcu aXNFbXB0eSgpKSB7CisgICAgICAgIFFTdHJpbmcgY29udGVudCA9IGNvbnRlbnRUb1RleHQoaUNo b2ljZS52YWx1ZShRU3RyaW5nTGl0ZXJhbCgiZGVsdGEiKSkpOworICAgICAgICByZWFzb25pbmcg PSBleHRyYWN0UmVhc29uaW5nRnJvbUNvbnRlbnQoY29udGVudCk7CisgICAgfQorICAgIHJldHVy biByZWFzb25pbmc7Cit9CisKK1FTdHJpbmcgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6 c3FsUmVzdWx0VG9Kc29uKGNvbnN0IFNLR1N0cmluZ0xpc3RMaXN0ICZpUmVzdWx0KQoreworICAg IFFKc29uT2JqZWN0IG91dHB1dDsKKyAgICBpZiAoaVJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAg ICAgb3V0cHV0Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgiY29sdW1ucyIpLCBRSnNvbkFycmF5KCkp OworICAgICAgICBvdXRwdXQuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJyb3dzIiksIFFKc29uQXJy YXkoKSk7CisgICAgICAgIG91dHB1dC5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoInJvd19jb3VudCIp LCAwKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmc6OmZyb21VdGY4KFFKc29uRG9jdW1lbnQob3V0 cHV0KS50b0pzb24oUUpzb25Eb2N1bWVudDo6Q29tcGFjdCkpOworICAgIH0KKworICAgIFFKc29u QXJyYXkgY29sdW1uczsKKyAgICBjb25zdCBRU3RyaW5nTGlzdCBjb2x1bW5OYW1lcyA9IGlSZXN1 bHQuYXQoMCk7CisgICAgZm9yIChjb25zdCBhdXRvICZjb2x1bW5OYW1lIDogY29sdW1uTmFtZXMp IHsKKyAgICAgICAgY29sdW1ucy5wdXNoX2JhY2soY29sdW1uTmFtZSk7CisgICAgfQorICAgIG91 dHB1dC5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoImNvbHVtbnMiKSwgY29sdW1ucyk7CisKKyAgICBR SnNvbkFycmF5IHJvd3M7CisgICAgZm9yIChpbnQgcm93SW5kZXggPSAxOyByb3dJbmRleCA8IGlS ZXN1bHQuY291bnQoKTsgKytyb3dJbmRleCkgeworICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCB2 YWx1ZXMgPSBpUmVzdWx0LmF0KHJvd0luZGV4KTsKKyAgICAgICAgUUpzb25PYmplY3Qgcm93Owor ICAgICAgICBmb3IgKGludCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1uTmFt ZXMuY291bnQoKTsgKytjb2x1bW5JbmRleCkgeworICAgICAgICAgICAgcm93Lmluc2VydChjb2x1 bW5OYW1lcy5hdChjb2x1bW5JbmRleCksIHZhbHVlcy52YWx1ZShjb2x1bW5JbmRleCkpOworICAg ICAgICB9CisgICAgICAgIHJvd3MucHVzaF9iYWNrKHJvdyk7CisgICAgfQorICAgIG91dHB1dC5p bnNlcnQoUVN0cmluZ0xpdGVyYWwoInJvd3MiKSwgcm93cyk7CisgICAgb3V0cHV0Lmluc2VydChR U3RyaW5nTGl0ZXJhbCgicm93X2NvdW50IiksIHJvd3MuY291bnQoKSk7CisgICAgcmV0dXJuIFFT dHJpbmc6OmZyb21VdGY4KFFKc29uRG9jdW1lbnQob3V0cHV0KS50b0pzb24oUUpzb25Eb2N1bWVu dDo6Q29tcGFjdCkpOworfQorCitRU3RyaW5nIFNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6 OmV4ZWN1dGVTcWxpdGVTZWxlY3QoY29uc3QgUVN0cmluZyAmaVNxbCkgY29uc3QKK3sKKyAgICBR U3RyaW5nIHNxbCA9IGlTcWwudHJpbW1lZCgpOworICAgIHdoaWxlIChzcWwuZW5kc1dpdGgodSc7 JykpIHsKKyAgICAgICAgc3FsLmNob3AoMSk7CisgICAgICAgIHNxbCA9IHNxbC50cmltbWVkKCk7 CisgICAgfQorCisgICAgc3RhdGljIFFSZWd1bGFyRXhwcmVzc2lvbiBzZWxlY3RPbmx5KFFTdHJp bmdMaXRlcmFsKCJeXFxzKlNFTEVDVFxcYiIpLCBRUmVndWxhckV4cHJlc3Npb246OkNhc2VJbnNl bnNpdGl2ZU9wdGlvbik7CisgICAgaWYgKCFzZWxlY3RPbmx5Lm1hdGNoKHNxbCkuaGFzTWF0Y2go KSB8fCBzcWwuY29udGFpbnModSc7JykpIHsKKyAgICAgICAgUUpzb25PYmplY3QgZXJyb3I7Cisg ICAgICAgIGVycm9yLmluc2VydChRU3RyaW5nTGl0ZXJhbCgiZXJyb3IiKSwgaTE4bmMoIkVycm9y IG1lc3NhZ2UiLCAiT25seSBhIHNpbmdsZSBTUUxpdGUgU0VMRUNUIHN0YXRlbWVudCBpcyBhbGxv d2VkLiIpKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmc6OmZyb21VdGY4KFFKc29uRG9jdW1lbnQo ZXJyb3IpLnRvSnNvbihRSnNvbkRvY3VtZW50OjpDb21wYWN0KSk7CisgICAgfQorCisgICAgU0tH U3RyaW5nTGlzdExpc3QgcmVzdWx0OworICAgIGF1dG8gKm1haW5QYW5lbCA9IFNLR01haW5QYW5l bDo6Z2V0TWFpblBhbmVsKCk7CisgICAgYXV0byAqZG9jdW1lbnQgPSBtYWluUGFuZWwgIT0gbnVs bHB0ciA/IG1haW5QYW5lbC0+Z2V0RG9jdW1lbnQoKSA6IG51bGxwdHI7CisgICAgaWYgKGRvY3Vt ZW50ID09IG51bGxwdHIpIHsKKyAgICAgICAgUUpzb25PYmplY3QgZXJyb3I7CisgICAgICAgIGVy cm9yLmluc2VydChRU3RyaW5nTGl0ZXJhbCgiZXJyb3IiKSwgaTE4bmMoIkVycm9yIG1lc3NhZ2Ui LCAiTm8gZG9jdW1lbnQgaXMgb3BlbmVkLiIpKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmc6OmZy b21VdGY4KFFKc29uRG9jdW1lbnQoZXJyb3IpLnRvSnNvbihRSnNvbkRvY3VtZW50OjpDb21wYWN0 KSk7CisgICAgfQorCisgICAgYXV0byBlcnIgPSBkb2N1bWVudC0+ZXhlY3V0ZVNlbGVjdFNxbGl0 ZU9yZGVyKHNxbCwgcmVzdWx0KTsKKyAgICBpZiAoZXJyLmlzRmFpbGVkKCkpIHsKKyAgICAgICAg UUpzb25PYmplY3QgZXJyb3I7CisgICAgICAgIGVycm9yLmluc2VydChRU3RyaW5nTGl0ZXJhbCgi ZXJyb3IiKSwgZXJyLmdldEZ1bGxNZXNzYWdlKCkpOworICAgICAgICByZXR1cm4gUVN0cmluZzo6 ZnJvbVV0ZjgoUUpzb25Eb2N1bWVudChlcnJvcikudG9Kc29uKFFKc29uRG9jdW1lbnQ6OkNvbXBh Y3QpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3FsUmVzdWx0VG9Kc29uKHJlc3VsdCk7Cit9CisK K1FTdHJpbmcgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6ZXhlY3V0ZVdlYlNlYXJjaChj b25zdCBRU3RyaW5nICZpUXVlcnksIGludCBpTWF4UmVzdWx0cykgY29uc3QKK3sKKyAgICBpZiAo aVF1ZXJ5LnRyaW1tZWQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUUpzb25PYmplY3QgZXJyb3I7 CisgICAgICAgIGVycm9yLmluc2VydChRU3RyaW5nTGl0ZXJhbCgiZXJyb3IiKSwgaTE4bmMoIkVy cm9yIG1lc3NhZ2UiLCAiU2VhcmNoIHF1ZXJ5IGNhbm5vdCBiZSBlbXB0eS4iKSk7CisgICAgICAg IHJldHVybiBRU3RyaW5nOjpmcm9tVXRmOChRSnNvbkRvY3VtZW50KGVycm9yKS50b0pzb24oUUpz b25Eb2N1bWVudDo6Q29tcGFjdCkpOworICAgIH0KKworICAgIFFVcmwgc2VhcmNoVXJsKFFTdHJp bmdMaXRlcmFsKCJodHRwczovL2FwaS5kdWNrZHVja2dvLmNvbS8iKSk7CisgICAgUVVybFF1ZXJ5 IHF1ZXJ5OworICAgIHF1ZXJ5LmFkZFF1ZXJ5SXRlbShRU3RyaW5nTGl0ZXJhbCgicSIpLCBpUXVl cnkpOworICAgIHF1ZXJ5LmFkZFF1ZXJ5SXRlbShRU3RyaW5nTGl0ZXJhbCgiZm9ybWF0IiksIFFT dHJpbmdMaXRlcmFsKCJqc29uIikpOworICAgIHF1ZXJ5LmFkZFF1ZXJ5SXRlbShRU3RyaW5nTGl0 ZXJhbCgibm9faHRtbCIpLCBRU3RyaW5nTGl0ZXJhbCgiMSIpKTsKKyAgICBzZWFyY2hVcmwuc2V0 UXVlcnkocXVlcnkpOworCisgICAgUU5ldHdvcmtSZXF1ZXN0IHJlcXVlc3Qoc2VhcmNoVXJsKTsK KyAgICByZXF1ZXN0LnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OlVzZXJBZ2VudEhlYWRlciwg UVN0cmluZ0xpdGVyYWwoIlNrcm9vZ2UtQUktQXNzaXN0YW50IikpOworCisgICAgUUV2ZW50TG9v cCBldmVudExvb3A7CisgICAgUVBvaW50ZXI8UU5ldHdvcmtSZXBseT4gcmVwbHkgPSBjb25zdF9j YXN0PFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqPigmbV9uZXR3b3JrTWFuYWdlciktPmdldChyZXF1 ZXN0KTsKKyAgICBjb25uZWN0KHJlcGx5LCAmUU5ldHdvcmtSZXBseTo6ZmluaXNoZWQsICZldmVu dExvb3AsICZRRXZlbnRMb29wOjpxdWl0KTsKKworICAgIGV2ZW50TG9vcC5leGVjKCk7CisKKyAg ICBpZiAocmVwbHkgPT0gbnVsbHB0ciB8fCByZXBseS0+ZXJyb3IoKSAhPSBRTmV0d29ya1JlcGx5 OjpOb0Vycm9yKSB7CisgICAgICAgIFFKc29uT2JqZWN0IGVycm9yOworICAgICAgICBlcnJvci5p bnNlcnQoUVN0cmluZ0xpdGVyYWwoImVycm9yIiksCisgICAgICAgICAgICAgICAgICAgICBpMThu YygiRXJyb3IgbWVzc2FnZSIsICJXZWIgc2VhcmNoIGZhaWxlZDogJTEiLCByZXBseSAhPSBudWxs cHRyID8gcmVwbHktPmVycm9yU3RyaW5nKCkgOiBRU3RyaW5nTGl0ZXJhbCgiVW5rbm93biBlcnJv ciIpKSk7CisgICAgICAgIGlmIChyZXBseSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICByZXBs eS0+ZGVsZXRlTGF0ZXIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUVN0cmluZzo6ZnJv bVV0ZjgoUUpzb25Eb2N1bWVudChlcnJvcikudG9Kc29uKFFKc29uRG9jdW1lbnQ6OkNvbXBhY3Qp KTsKKyAgICB9CisKKyAgICBRQnl0ZUFycmF5IHJlc3BvbnNlRGF0YSA9IHJlcGx5LT5yZWFkQWxs KCk7CisgICAgcmVwbHktPmRlbGV0ZUxhdGVyKCk7CisKKyAgICBRSnNvblBhcnNlRXJyb3IgcGFy c2VFcnJvcnt9OworICAgIFFKc29uRG9jdW1lbnQgcmVzcG9uc2VEb2MgPSBRSnNvbkRvY3VtZW50 Ojpmcm9tSnNvbihyZXNwb25zZURhdGEsICZwYXJzZUVycm9yKTsKKyAgICBpZiAocGFyc2VFcnJv ci5lcnJvciAhPSBRSnNvblBhcnNlRXJyb3I6Ok5vRXJyb3IgfHwgIXJlc3BvbnNlRG9jLmlzT2Jq ZWN0KCkpIHsKKyAgICAgICAgUUpzb25PYmplY3QgZXJyb3I7CisgICAgICAgIGVycm9yLmluc2Vy dChRU3RyaW5nTGl0ZXJhbCgiZXJyb3IiKSwgaTE4bmMoIkVycm9yIG1lc3NhZ2UiLCAiRmFpbGVk IHRvIHBhcnNlIHNlYXJjaCByZXN1bHRzLiIpKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmc6OmZy b21VdGY4KFFKc29uRG9jdW1lbnQoZXJyb3IpLnRvSnNvbihRSnNvbkRvY3VtZW50OjpDb21wYWN0 KSk7CisgICAgfQorCisgICAgUUpzb25PYmplY3QgcmVzcG9uc2VPYmogPSByZXNwb25zZURvYy5v YmplY3QoKTsKKyAgICBRSnNvbkFycmF5IHJlc3VsdHM7CisKKyAgICAvLyBFeHRyYWN0IGFic3Ry YWN0IHJlc3VsdCBpZiBhdmFpbGFibGUKKyAgICBRU3RyaW5nIGFic3RyYWN0VGV4dCA9IHJlc3Bv bnNlT2JqLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJBYnN0cmFjdFRleHQiKSkudG9TdHJpbmcoKS50 cmltbWVkKCk7CisgICAgUVN0cmluZyBhYnN0cmFjdFNvdXJjZSA9IHJlc3BvbnNlT2JqLnZhbHVl KFFTdHJpbmdMaXRlcmFsKCJBYnN0cmFjdFNvdXJjZSIpKS50b1N0cmluZygpLnRyaW1tZWQoKTsK KyAgICBRU3RyaW5nIGFic3RyYWN0VXJsID0gcmVzcG9uc2VPYmoudmFsdWUoUVN0cmluZ0xpdGVy YWwoIkFic3RyYWN0VVJMIikpLnRvU3RyaW5nKCkudHJpbW1lZCgpOworCisgICAgaWYgKCFhYnN0 cmFjdFRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgIFFKc29uT2JqZWN0IHJlc3VsdDsKKyAgICAg ICAgcmVzdWx0Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgidGl0bGUiKSwgYWJzdHJhY3RTb3VyY2Uu aXNFbXB0eSgpID8gUVN0cmluZ0xpdGVyYWwoIlN1bW1hcnkiKSA6IGFic3RyYWN0U291cmNlKTsK KyAgICAgICAgcmVzdWx0Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgic25pcHBldCIpLCBhYnN0cmFj dFRleHQpOworICAgICAgICBpZiAoIWFic3RyYWN0VXJsLmlzRW1wdHkoKSkgeworICAgICAgICAg ICAgcmVzdWx0Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgidXJsIiksIGFic3RyYWN0VXJsKTsKKyAg ICAgICAgfQorICAgICAgICByZXN1bHRzLnB1c2hfYmFjayhyZXN1bHQpOworICAgIH0KKworICAg IC8vIEV4dHJhY3QgcmVsYXRlZCBzZWFyY2hlcyBhcyBhZGRpdGlvbmFsIHJlc3VsdHMKKyAgICBR SnNvbkFycmF5IHJlbGF0ZWRTZWFyY2hlcyA9IHJlc3BvbnNlT2JqLnZhbHVlKFFTdHJpbmdMaXRl cmFsKCJSZWxhdGVkVG9waWNzIikpLnRvQXJyYXkoKTsKKyAgICBpbnQgcmVzdWx0Q291bnQgPSBy ZXN1bHRzLmNvdW50KCk7CisgICAgZm9yIChjb25zdCBRSnNvblZhbHVlICZ0b3BpY1ZhbHVlIDog cmVsYXRlZFNlYXJjaGVzKSB7CisgICAgICAgIGlmIChyZXN1bHRDb3VudCA+PSBpTWF4UmVzdWx0 cykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9waWNW YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBRSnNvbk9iamVjdCB0b3BpYyA9IHRvcGlj VmFsdWUudG9PYmplY3QoKTsKKyAgICAgICAgICAgIFFTdHJpbmcgZmlyc3RVcmwgPSB0b3BpYy52 YWx1ZShRU3RyaW5nTGl0ZXJhbCgiRmlyc3RVUkwiKSkudG9TdHJpbmcoKS50cmltbWVkKCk7Cisg ICAgICAgICAgICBRU3RyaW5nIHRleHQgPSB0b3BpYy52YWx1ZShRU3RyaW5nTGl0ZXJhbCgiVGV4 dCIpKS50b1N0cmluZygpLnRyaW1tZWQoKTsKKworICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1w dHkoKSkgeworICAgICAgICAgICAgICAgIFFKc29uT2JqZWN0IHJlc3VsdDsKKyAgICAgICAgICAg ICAgICByZXN1bHQuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJ0aXRsZSIpLCB0b3BpYy52YWx1ZShR U3RyaW5nTGl0ZXJhbCgiTmFtZSIpKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICByZXN1 bHQuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJzbmlwcGV0IiksIHRleHQpOworICAgICAgICAgICAg ICAgIGlmICghZmlyc3RVcmwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs dC5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoInVybCIpLCBmaXJzdFVybCk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaF9iYWNrKHJlc3VsdCk7CisgICAgICAg ICAgICAgICAgKytyZXN1bHRDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KworICAgIGlmIChyZXN1bHRzLmlzRW1wdHkoKSkgeworICAgICAgICBRSnNvbk9iamVjdCBvdXRw dXQ7CisgICAgICAgIG91dHB1dC5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoInJlc3VsdHMiKSwgUUpz b25BcnJheSgpKTsKKyAgICAgICAgb3V0cHV0Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgicmVzdWx0 X2NvdW50IiksIDApOworICAgICAgICBvdXRwdXQuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJxdWVy eSIpLCBpUXVlcnkpOworICAgICAgICByZXR1cm4gUVN0cmluZzo6ZnJvbVV0ZjgoUUpzb25Eb2N1 bWVudChvdXRwdXQpLnRvSnNvbihRSnNvbkRvY3VtZW50OjpDb21wYWN0KSk7CisgICAgfQorCisg ICAgUUpzb25PYmplY3Qgb3V0cHV0OworICAgIG91dHB1dC5pbnNlcnQoUVN0cmluZ0xpdGVyYWwo InJlc3VsdHMiKSwgcmVzdWx0cyk7CisgICAgb3V0cHV0Lmluc2VydChRU3RyaW5nTGl0ZXJhbCgi cmVzdWx0X2NvdW50IiksIHJlc3VsdHMuY291bnQoKSk7CisgICAgb3V0cHV0Lmluc2VydChRU3Ry aW5nTGl0ZXJhbCgicXVlcnkiKSwgaVF1ZXJ5KTsKKyAgICByZXR1cm4gUVN0cmluZzo6ZnJvbVV0 ZjgoUUpzb25Eb2N1bWVudChvdXRwdXQpLnRvSnNvbihRSnNvbkRvY3VtZW50OjpDb21wYWN0KSk7 Cit9CisKK1FTdHJpbmcgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6ZXhlY3V0ZVRvb2xD YWxsKGNvbnN0IFFKc29uT2JqZWN0ICZpVG9vbENhbGwpIGNvbnN0Cit7CisgICAgY29uc3QgUUpz b25PYmplY3QgZnVuY3Rpb24gPSBpVG9vbENhbGwudmFsdWUoUVN0cmluZ0xpdGVyYWwoImZ1bmN0 aW9uIikpLnRvT2JqZWN0KCk7CisgICAgY29uc3QgUVN0cmluZyBuYW1lID0gZnVuY3Rpb24udmFs dWUoUVN0cmluZ0xpdGVyYWwoIm5hbWUiKSkudG9TdHJpbmcoKTsKKyAgICBjb25zdCBRU3RyaW5n IGFyZ3VtZW50cyA9IGZ1bmN0aW9uLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJhcmd1bWVudHMiKSku dG9TdHJpbmcoKTsKKworICAgIFFKc29uUGFyc2VFcnJvciBhcmd1bWVudHNQYXJzZUVycm9ye307 CisgICAgUUpzb25Eb2N1bWVudCBhcmd1bWVudHNEb2MgPSBRSnNvbkRvY3VtZW50Ojpmcm9tSnNv bihhcmd1bWVudHMudG9VdGY4KCksICZhcmd1bWVudHNQYXJzZUVycm9yKTsKKyAgICBRSnNvbk9i amVjdCBhcmd1bWVudHNPYmo7CisgICAgaWYgKCFhcmd1bWVudHMuaXNFbXB0eSgpKSB7CisgICAg ICAgIGlmIChhcmd1bWVudHNQYXJzZUVycm9yLmVycm9yICE9IFFKc29uUGFyc2VFcnJvcjo6Tm9F cnJvciB8fCAhYXJndW1lbnRzRG9jLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIFFKc29uT2Jq ZWN0IGVycm9yOworICAgICAgICAgICAgZXJyb3IuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJlcnJv ciIpLCBpMThuYygiRXJyb3IgbWVzc2FnZSIsICJJbnZhbGlkIHRvb2wgY2FsbCBhcmd1bWVudHMu IikpOworICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmc6OmZyb21VdGY4KFFKc29uRG9jdW1lbnQo ZXJyb3IpLnRvSnNvbihRSnNvbkRvY3VtZW50OjpDb21wYWN0KSk7CisgICAgICAgIH0KKyAgICAg ICAgYXJndW1lbnRzT2JqID0gYXJndW1lbnRzRG9jLm9iamVjdCgpOworICAgIH0KKworICAgIGlm IChuYW1lID09IFFTdHJpbmdMaXRlcmFsKCJleGVjdXRlX3NxbGl0ZV9zZWxlY3QiKSkgeworICAg ICAgICByZXR1cm4gZXhlY3V0ZVNxbGl0ZVNlbGVjdChhcmd1bWVudHNPYmoudmFsdWUoUVN0cmlu Z0xpdGVyYWwoInNxbCIpKS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICBpZiAobmFtZSA9PSBR U3RyaW5nTGl0ZXJhbCgid2ViX3NlYXJjaCIpKSB7CisgICAgICAgIGludCBtYXhSZXN1bHRzID0g YXJndW1lbnRzT2JqLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJtYXhfcmVzdWx0cyIpKS50b0ludCg1 KTsKKyAgICAgICAgaWYgKG1heFJlc3VsdHMgPCAxIHx8IG1heFJlc3VsdHMgPiAxMCkgeworICAg ICAgICAgICAgbWF4UmVzdWx0cyA9IDU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4ZWN1 dGVXZWJTZWFyY2goYXJndW1lbnRzT2JqLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJxdWVyeSIpKS50 b1N0cmluZygpLCBtYXhSZXN1bHRzKTsKKyAgICB9CisKKyAgICBRSnNvbk9iamVjdCBlcnJvcjsK KyAgICBlcnJvci5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoImVycm9yIiksIGkxOG5jKCJFcnJvciBt ZXNzYWdlIiwgIlVua25vd24gdG9vbDogJTEiLCBuYW1lKSk7CisgICAgcmV0dXJuIFFTdHJpbmc6 OmZyb21VdGY4KFFKc29uRG9jdW1lbnQoZXJyb3IpLnRvSnNvbihRSnNvbkRvY3VtZW50OjpDb21w YWN0KSk7Cit9CisKK1FTdHJpbmcgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6ZXh0cmFj dEFzc2lzdGFudE1lc3NhZ2UoY29uc3QgUUJ5dGVBcnJheSAmaVBheWxvYWQsIFFTdHJpbmcgJm9F cnJvck1lc3NhZ2UsIGJvb2wgJm9OZWVkc0ZvbGxvd1VwKQoreworICAgIG9OZWVkc0ZvbGxvd1Vw ID0gZmFsc2U7CisgICAgbV9wZW5kaW5nUmVhc29uaW5nQ29udGVudC5jbGVhcigpOworICAgIFFK c29uUGFyc2VFcnJvciBwYXJzZUVycm9ye307CisgICAgUUpzb25Eb2N1bWVudCByZXNwb25zZSA9 IFFKc29uRG9jdW1lbnQ6OmZyb21Kc29uKGlQYXlsb2FkLCAmcGFyc2VFcnJvcik7CisgICAgaWYg KHBhcnNlRXJyb3IuZXJyb3IgIT0gUUpzb25QYXJzZUVycm9yOjpOb0Vycm9yIHx8ICFyZXNwb25z ZS5pc09iamVjdCgpKSB7CisgICAgICAgIG9FcnJvck1lc3NhZ2UgPSBpMThuYygiRXJyb3IgbWVz c2FnZSIsICJJbnZhbGlkIEpTT04gcmVzcG9uc2UgZnJvbSBzZXJ2ZXIuIik7CisgICAgICAgIHJl dHVybiBRU3RyaW5nKCk7CisgICAgfQorCisgICAgY29uc3QgUUpzb25PYmplY3Qgcm9vdCA9IHJl c3BvbnNlLm9iamVjdCgpOworICAgIGlmIChyb290LmNvbnRhaW5zKFFTdHJpbmdMaXRlcmFsKCJl cnJvciIpKSkgeworICAgICAgICBjb25zdCBRSnNvblZhbHVlIGVycm9yVmFsdWUgPSByb290LnZh bHVlKFFTdHJpbmdMaXRlcmFsKCJlcnJvciIpKTsKKyAgICAgICAgUVN0cmluZyBkZXRhaWxzID0g Y29udGVudFRvVGV4dChlcnJvclZhbHVlKTsKKyAgICAgICAgaWYgKGRldGFpbHMuaXNFbXB0eSgp ICYmIGVycm9yVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZGV0YWlscyA9IGVycm9y VmFsdWUudG9PYmplY3QoKS52YWx1ZShRU3RyaW5nTGl0ZXJhbCgibWVzc2FnZSIpKS50b1N0cmlu ZygpOworICAgICAgICB9CisgICAgICAgIGlmIChkZXRhaWxzLmlzRW1wdHkoKSkgeworICAgICAg ICAgICAgZGV0YWlscyA9IFFTdHJpbmc6OmZyb21VdGY4KGlQYXlsb2FkKTsKKyAgICAgICAgfQor ICAgICAgICBvRXJyb3JNZXNzYWdlID0gaTE4bmMoIkVycm9yIG1lc3NhZ2UiLCAiU2VydmVyIGVy cm9yOiAlMSIsIGRldGFpbHMpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIH0KKwor ICAgIFFKc29uQXJyYXkgY2hvaWNlcyA9IHJvb3QudmFsdWUoUVN0cmluZ0xpdGVyYWwoImNob2lj ZXMiKSkudG9BcnJheSgpOworICAgIGlmIChjaG9pY2VzLmlzRW1wdHkoKSkgeworICAgICAgICBv RXJyb3JNZXNzYWdlID0gaTE4bmMoIkVycm9yIG1lc3NhZ2UiLCAiTm8gYW5zd2VyIHJldHVybmVk IGJ5IHRoZSBtb2RlbC4iKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICB9CisKKyAg ICBjb25zdCBRSnNvbk9iamVjdCBmaXJzdENob2ljZSA9IGNob2ljZXMuYXQoMCkudG9PYmplY3Qo KTsKKyAgICBRSnNvbk9iamVjdCBtZXNzYWdlID0gZmlyc3RDaG9pY2UudmFsdWUoUVN0cmluZ0xp dGVyYWwoIm1lc3NhZ2UiKSkudG9PYmplY3QoKTsKKyAgICBtX3BlbmRpbmdSZWFzb25pbmdDb250 ZW50ID0gcmVhc29uaW5nQ29udGVudFRvVGV4dChtZXNzYWdlLCBmaXJzdENob2ljZSk7CisgICAg UUpzb25BcnJheSB0b29sQ2FsbHMgPSBtZXNzYWdlLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJ0b29s X2NhbGxzIikpLnRvQXJyYXkoKTsKKyAgICBpZiAodG9vbENhbGxzLmlzRW1wdHkoKSkgeworICAg ICAgICB0b29sQ2FsbHMgPSBmaXJzdENob2ljZS52YWx1ZShRU3RyaW5nTGl0ZXJhbCgidG9vbF9j YWxscyIpKS50b0FycmF5KCk7CisgICAgfQorCisgICAgaWYgKCF0b29sQ2FsbHMuaXNFbXB0eSgp KSB7CisgICAgICAgICsrbV90b29sQ2FsbERlcHRoOworICAgICAgICBpZiAobV90b29sQ2FsbERl cHRoID4gOCkgeworICAgICAgICAgICAgb0Vycm9yTWVzc2FnZSA9IGkxOG5jKCJFcnJvciBtZXNz YWdlIiwgIlRvbyBtYW55IGNvbnNlY3V0aXZlIHRvb2wgY2FsbHMuIik7CisgICAgICAgICAgICBy ZXR1cm4gUVN0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNFbXB0 eSgpKSB7CisgICAgICAgICAgICBtZXNzYWdlLmluc2VydChRU3RyaW5nTGl0ZXJhbCgicm9sZSIp LCBRU3RyaW5nTGl0ZXJhbCgiYXNzaXN0YW50IikpOworICAgICAgICAgICAgbWVzc2FnZS5pbnNl cnQoUVN0cmluZ0xpdGVyYWwoImNvbnRlbnQiKSwgUUpzb25WYWx1ZTo6TnVsbCk7CisgICAgICAg ICAgICBtZXNzYWdlLmluc2VydChRU3RyaW5nTGl0ZXJhbCgidG9vbF9jYWxscyIpLCB0b29sQ2Fs bHMpOworICAgICAgICB9CisgICAgICAgIGlmICghbV9wZW5kaW5nUmVhc29uaW5nQ29udGVudC5p c0VtcHR5KCkgJiYgIW1lc3NhZ2UuY29udGFpbnMoUVN0cmluZ0xpdGVyYWwoInJlYXNvbmluZ19j b250ZW50IikpKSB7CisgICAgICAgICAgICBtZXNzYWdlLmluc2VydChRU3RyaW5nTGl0ZXJhbCgi cmVhc29uaW5nX2NvbnRlbnQiKSwgbV9wZW5kaW5nUmVhc29uaW5nQ29udGVudCk7CisgICAgICAg IH0KKyAgICAgICAgbV9tZXNzYWdlcy5wdXNoX2JhY2sobWVzc2FnZSk7CisKKyAgICAgICAgZm9y IChjb25zdCBhdXRvICZ0b29sQ2FsbFZhbHVlIDogdG9vbENhbGxzKSB7CisgICAgICAgICAgICBj b25zdCBRSnNvbk9iamVjdCB0b29sQ2FsbCA9IHRvb2xDYWxsVmFsdWUudG9PYmplY3QoKTsKKyAg ICAgICAgICAgIFFTdHJpbmcgdG9vbENhbGxJZCA9IHRvb2xDYWxsLnZhbHVlKFFTdHJpbmdMaXRl cmFsKCJpZCIpKS50b1N0cmluZygpOworICAgICAgICAgICAgaWYgKHRvb2xDYWxsSWQuaXNFbXB0 eSgpKSB7CisgICAgICAgICAgICAgICAgdG9vbENhbGxJZCA9IHRvb2xDYWxsLnZhbHVlKFFTdHJp bmdMaXRlcmFsKCJ0b29sX2lkIikpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIFFKc29uT2JqZWN0IHRvb2xSZXN1bHQ7CisgICAgICAgICAgICB0b29sUmVzdWx0Lmlu c2VydChRU3RyaW5nTGl0ZXJhbCgicm9sZSIpLCBRU3RyaW5nTGl0ZXJhbCgidG9vbCIpKTsKKyAg ICAgICAgICAgIHRvb2xSZXN1bHQuaW5zZXJ0KFFTdHJpbmdMaXRlcmFsKCJ0b29sX2NhbGxfaWQi KSwgdG9vbENhbGxJZCk7CisgICAgICAgICAgICB0b29sUmVzdWx0Lmluc2VydChRU3RyaW5nTGl0 ZXJhbCgiY29udGVudCIpLCBleGVjdXRlVG9vbENhbGwodG9vbENhbGwpKTsKKyAgICAgICAgICAg IG1fbWVzc2FnZXMucHVzaF9iYWNrKHRvb2xSZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAg b05lZWRzRm9sbG93VXAgPSB0cnVlOworICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIH0K KworICAgIFFTdHJpbmcgYW5zd2VyID0gY29udGVudFRvVGV4dChtZXNzYWdlLnZhbHVlKFFTdHJp bmdMaXRlcmFsKCJjb250ZW50IikpKS50cmltbWVkKCk7CisgICAgaWYgKGFuc3dlci5pc0VtcHR5 KCkpIHsKKyAgICAgICAgYW5zd2VyID0gY29udGVudFRvVGV4dChmaXJzdENob2ljZS52YWx1ZShR U3RyaW5nTGl0ZXJhbCgidGV4dCIpKSkudHJpbW1lZCgpOworICAgIH0KKyAgICBpZiAoYW5zd2Vy LmlzRW1wdHkoKSkgeworICAgICAgICBhbnN3ZXIgPSBjb250ZW50VG9UZXh0KGZpcnN0Q2hvaWNl LnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJkZWx0YSIpKSkudHJpbW1lZCgpOworICAgIH0KKyAgICBj b25zdCBRU3RyaW5nIHJlYXNvbmluZ0Zyb21BbnN3ZXIgPSBleHRyYWN0UmVhc29uaW5nRnJvbUNv bnRlbnQoYW5zd2VyKTsKKyAgICBpZiAoIXJlYXNvbmluZ0Zyb21BbnN3ZXIuaXNFbXB0eSgpKSB7 CisgICAgICAgIGlmIChtX3BlbmRpbmdSZWFzb25pbmdDb250ZW50LmlzRW1wdHkoKSkgeworICAg ICAgICAgICAgbV9wZW5kaW5nUmVhc29uaW5nQ29udGVudCA9IHJlYXNvbmluZ0Zyb21BbnN3ZXI7 CisgICAgICAgIH0gZWxzZSBpZiAoIW1fcGVuZGluZ1JlYXNvbmluZ0NvbnRlbnQuY29udGFpbnMo cmVhc29uaW5nRnJvbUFuc3dlcikpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1JlYXNvbmluZ0Nv bnRlbnQgKz0gUVN0cmluZ0xpdGVyYWwoIlxuXG4iKSArIHJlYXNvbmluZ0Zyb21BbnN3ZXI7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFuc3dlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgb0Vy cm9yTWVzc2FnZSA9IGkxOG5jKCJFcnJvciBtZXNzYWdlIiwgIlRoZSBtb2RlbCByZXR1cm5lZCBh biBlbXB0eSBhbnN3ZXIuIik7CisgICAgfQorICAgIHJldHVybiBhbnN3ZXI7Cit9CisKK3ZvaWQg U0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6b25SZXBseUZpbmlzaGVkKCkKK3sKKyAgICBT S0dUUkFDRUlORlVOQygxMCkKKyAgICBRUG9pbnRlcjxRTmV0d29ya1JlcGx5PiByZXBseSA9IG1f cGVuZGluZ1JlcGx5OworICAgIG1fcGVuZGluZ1JlcGx5ID0gbnVsbHB0cjsKKyAgICBzZXRCdXN5 KGZhbHNlKTsKKworICAgIGlmIChyZXBseSA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybjsK KyAgICB9CisKKyAgICBjb25zdCBRQnl0ZUFycmF5IHBheWxvYWQgPSByZXBseS0+cmVhZEFsbCgp OworICAgIFFTdHJpbmcgc2VydmVyTWVzc2FnZTsKKyAgICBib29sIG5lZWRzRm9sbG93VXAgPSBm YWxzZTsKKyAgICBRU3RyaW5nIGFuc3dlciA9IGV4dHJhY3RBc3Npc3RhbnRNZXNzYWdlKHBheWxv YWQsIHNlcnZlck1lc3NhZ2UsIG5lZWRzRm9sbG93VXApOworCisgICAgaWYgKHJlcGx5LT5lcnJv cigpID09IFFOZXR3b3JrUmVwbHk6OkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IpIHsKKyAgICAgICAg YXV0byAqbWFpblBhbmVsID0gU0tHTWFpblBhbmVsOjpnZXRNYWluUGFuZWwoKTsKKyAgICAgICAg aWYgKG1haW5QYW5lbCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBtYWluUGFuZWwtPmRpc3Bs YXlNZXNzYWdlKGkxOG5jKCJFcnJvciBtZXNzYWdlIiwgIkNvbm5lY3Rpb24gcmVmdXNlZC4gQXJl IHlvdSBzdXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyA/IiksIFNLR0RvY3VtZW50OjpFcnJvcik7 CisgICAgICAgIH0KKyAgICAgICAgbmVlZHNGb2xsb3dVcCA9IGZhbHNlOworICAgIH0gZWxzZSBp ZiAocmVwbHktPmVycm9yKCkgIT0gUU5ldHdvcmtSZXBseTo6Tm9FcnJvcikgeworICAgICAgICBR U3RyaW5nIGVycm9yTXNnID0gaTE4bmMoIkVycm9yIG1lc3NhZ2UiLCAiTmV0d29yayBlcnJvciAo JTEpOiAlMiIsIHJlcGx5LT5lcnJvcigpLCByZXBseS0+ZXJyb3JTdHJpbmcoKSk7CisgICAgICAg IGlmICghc2VydmVyTWVzc2FnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGVycm9yTXNnICs9 IFFTdHJpbmdMaXRlcmFsKCJcbiIpICsgc2VydmVyTWVzc2FnZTsKKyAgICAgICAgfSBlbHNlIGlm ICghcGF5bG9hZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGVycm9yTXNnICs9IFFTdHJpbmdM aXRlcmFsKCJcbiIpICsgUVN0cmluZzo6ZnJvbVV0ZjgocGF5bG9hZCk7CisgICAgICAgIH0KKyAg ICAgICAgYXV0byAqbWFpblBhbmVsID0gU0tHTWFpblBhbmVsOjpnZXRNYWluUGFuZWwoKTsKKyAg ICAgICAgaWYgKG1haW5QYW5lbCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBtYWluUGFuZWwt PmRpc3BsYXlNZXNzYWdlKGVycm9yTXNnLCBTS0dEb2N1bWVudDo6RXJyb3IpOworICAgICAgICB9 CisgICAgICAgIG5lZWRzRm9sbG93VXAgPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKGFuc3dlci5p c0VtcHR5KCkgJiYgIXNlcnZlck1lc3NhZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gKm1h aW5QYW5lbCA9IFNLR01haW5QYW5lbDo6Z2V0TWFpblBhbmVsKCk7CisgICAgICAgIGlmIChtYWlu UGFuZWwgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbWFpblBhbmVsLT5kaXNwbGF5TWVzc2Fn ZShzZXJ2ZXJNZXNzYWdlLCBTS0dEb2N1bWVudDo6RXJyb3IpOworICAgICAgICB9CisgICAgfQor CisgICAgcmVmcmVzaENvbnZlcnNhdGlvbigpOworCisgICAgcmVwbHktPmRlbGV0ZUxhdGVyKCk7 CisKKyAgICBpZiAobmVlZHNGb2xsb3dVcCkgeworICAgICAgICBzZW5kQ29tcGxldGlvblJlcXVl c3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYW5zd2VyLmlzRW1wdHko KSkgeworICAgICAgICAvLyBBZGQgYXNzaXN0YW50IGFuc3dlciB0byB0aGUgY29udmVyc2F0aW9u IGhpc3RvcnkKKyAgICAgICAgUUpzb25PYmplY3QgbXNnOworICAgICAgICBtc2cuaW5zZXJ0KFFT dHJpbmdMaXRlcmFsKCJyb2xlIiksIFFTdHJpbmdMaXRlcmFsKCJhc3Npc3RhbnQiKSk7CisgICAg ICAgIG1zZy5pbnNlcnQoUVN0cmluZ0xpdGVyYWwoImNvbnRlbnQiKSwgYW5zd2VyKTsKKyAgICAg ICAgaWYgKCFtX3BlbmRpbmdSZWFzb25pbmdDb250ZW50LmlzRW1wdHkoKSkgeworICAgICAgICAg ICAgbXNnLmluc2VydChRU3RyaW5nTGl0ZXJhbCgicmVhc29uaW5nX2NvbnRlbnQiKSwgbV9wZW5k aW5nUmVhc29uaW5nQ29udGVudCk7CisgICAgICAgIH0KKyAgICAgICAgbV9tZXNzYWdlcy5wdXNo X2JhY2sobXNnKTsKKyAgICAgICAgcmVmcmVzaENvbnZlcnNhdGlvbigpOworICAgIH0KKworICAg IHVpLmtVc2VyUHJvbXB0LT5jbGVhcigpOworfQorCit2b2lkIFNLR0Fzc2lzdGFudFBsdWdpbkRv Y2tXaWRnZXQ6OnJlZnJlc2hDb252ZXJzYXRpb24oKSBjb25zdAoreworICAgIHVpLmtTYXZlQ3Vy cmVudEFpU2Vzc2lvbi0+c2V0RW5hYmxlZCghbV9tZXNzYWdlcy5pc0VtcHR5KCkgJiYgdWkua0Fp U2Vzc2lvbnMtPmN1cnJlbnRJbmRleCgpID09IDApOworCisgICAgLy8gQnVpbGQgdGhlIGFuc3dl ciB0ZXh0IGZyb20gdGhlIGNvbnZlcnNhdGlvbiBoaXN0b3J5CisgICAgYXV0byBkaXNwbGF5VGhp bmtpbmcgPSBTS0dTZXJ2aWNlczo6c3RyaW5nVG9JbnQodWkua0Rpc3BsYXlSZWFzb25pbmctPmdl dFN0YXRlKCkucmVwbGFjZShRU3RyaW5nTGl0ZXJhbCgiXCIiKSwgUVN0cmluZ0xpdGVyYWwoIiIp KSk7CisgICAgUVN0cmluZ0xpc3QgcGFydHM7CisgICAgUVN0cmluZyBsYXN0UmVhc29uaW5nQ29u dGVudDsKKyAgICBmb3IgKGNvbnN0IFFKc29uVmFsdWUgJm1lc3NhZ2VWYWx1ZSA6IG1fbWVzc2Fn ZXMpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgUUpzb25PYmplY3QgbWVzc2FnZU9iaiA9 IG1lc3NhZ2VWYWx1ZS50b09iamVjdCgpOworICAgICAgICBRU3RyaW5nIHJvbGUgPSBtZXNzYWdl T2JqLnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJyb2xlIikpLnRvU3RyaW5nKCk7CisgICAgICAgIFFT dHJpbmcgY29udGVudCA9IGNvbnRlbnRUb1RleHQobWVzc2FnZU9iai52YWx1ZShRU3RyaW5nTGl0 ZXJhbCgiY29udGVudCIpKSkudHJpbW1lZCgpOworICAgICAgICBRU3RyaW5nIHJlYXNvbmluZyA9 IGNvbnRlbnRUb1RleHQobWVzc2FnZU9iai52YWx1ZShRU3RyaW5nTGl0ZXJhbCgicmVhc29uaW5n X2NvbnRlbnQiKSkpLnRyaW1tZWQoKTsKKworICAgICAgICBpZiAocm9sZSA9PSBRU3RyaW5nTGl0 ZXJhbCgidXNlciIpKSB7CisgICAgICAgICAgICBwYXJ0cy5wdXNoX2JhY2soaTE4bmMoIlVzZXIg cXVlc3Rpb24gcHJlZml4IiwgIjxiPllvdTo8L2I+JTEiLCBtYXJrZG93blRvSHRtbChjb250ZW50 KSkpOworICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUVN0cmluZ0xpdGVyYWwoImFzc2lzdGFu dCIpICYmICghY29udGVudC5pc0VtcHR5KCkgfHwgIXJlYXNvbmluZy5pc0VtcHR5KCkpKSB7Cisg ICAgICAgICAgICBRU3RyaW5nTGlzdCBhc3Npc3RhbnRQYXJ0czsKKyAgICAgICAgICAgIGlmICgh cmVhc29uaW5nLmlzRW1wdHkoKSAmJiBkaXNwbGF5VGhpbmtpbmcgPiAwKSB7CisgICAgICAgICAg ICAgICAgLy8gQnVpbGQgcmFpc29uaW5nCisgICAgICAgICAgICAgICAgbGFzdFJlYXNvbmluZ0Nv bnRlbnQgPSBkaXNwbGF5VGhpbmtpbmcgPT0gMSA/IGkxOG5jKCJBc3Npc3RhbnQgcmVhc29uaW5n IHByZWZpeCIsICI8Yj5SZWFzb25pbmcuLi48L2I+IikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaTE4bmMoIkFzc2lzdGFudCBy ZWFzb25pbmcgcHJlZml4IiwgIjxiPlJlYXNvbmluZzo8L2I+JTEiLCBtYXJrZG93blRvSHRtbChy ZWFzb25pbmcpKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzcGxheVRoaW5raW5nID49IDMpIHsK KyAgICAgICAgICAgICAgICAgICAgLy8gRGlzcGxheSBhbGwgcmVhc29uaW5nCisgICAgICAgICAg ICAgICAgICAgIGFzc2lzdGFudFBhcnRzLnB1c2hfYmFjaygiPGZvbnQgY29sb3I9J2dyYXknIHNp emU9JzInPiIgKyBsYXN0UmVhc29uaW5nQ29udGVudCArICI8L2ZvbnQ+Iik7CisgICAgICAgICAg ICAgICAgICAgIGxhc3RSZWFzb25pbmdDb250ZW50LmNsZWFyKCk7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjb250ZW50LmlzRW1wdHkoKSkgewor ICAgICAgICAgICAgICAgIGFzc2lzdGFudFBhcnRzLnB1c2hfYmFjayhpMThuYygiQXNzaXN0YW50 IGFuc3dlciBwcmVmaXgiLCAiPGI+QUk6PC9iPiUxIiwgbWFya2Rvd25Ub0h0bWwoY29udGVudCkp KTsKKyAgICAgICAgICAgICAgICBsYXN0UmVhc29uaW5nQ29udGVudC5jbGVhcigpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKCFhc3Npc3RhbnRQYXJ0cy5pc0VtcHR5KCkpIHsKKyAg ICAgICAgICAgICAgICBwYXJ0cy5wdXNoX2JhY2soYXNzaXN0YW50UGFydHMuam9pbihRU3RyaW5n TGl0ZXJhbCgiXG5cbiIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocm9s ZSA9PSBRU3RyaW5nTGl0ZXJhbCgidG9vbCIpICYmIGRpc3BsYXlUaGlua2luZyA9PSA0KSB7Cisg ICAgICAgICAgICBwYXJ0cy5wdXNoX2JhY2soIjxmb250IGNvbG9yPSdibHVlJyBzaXplPScyJz4i ICsgaTE4bmMoIlRvb2wgYW5zd2VyIHByZWZpeCIsICI8Yj5Ub29sOjwvYj4lMSIsIG1hcmtkb3du VG9IdG1sKGNvbnRlbnQpKSArICI8L2ZvbnQ+Iik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv LyBBZGQgbGFzdCByZWFzb25pbmcgY29udGVudCBpZiBhbnkKKyAgICBpZiAobGFzdFJlYXNvbmlu Z0NvbnRlbnQuaXNFbXB0eSgpID09IGZhbHNlKSB7CisgICAgICAgIHBhcnRzLnB1c2hfYmFjaygi PGZvbnQgY29sb3I9J2dyYXknIHNpemU9JzInPiIgKyBsYXN0UmVhc29uaW5nQ29udGVudCArICI8 L2ZvbnQ+Iik7CisgICAgfQorICAgIHVpLmtBbnN3ZXItPnNldEh0bWwocGFydHMuam9pbigiIikp OworICAgIHVpLmtBbnN3ZXItPm1vdmVDdXJzb3IoUVRleHRDdXJzb3I6OkVuZCk7Cit9CisKK3Zv aWQgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6b25TYXZlQ3VycmVudEFpU2Vzc2lvbigp Cit7CisgICAgU0tHRXJyb3IgZXJyOworICAgIF9TS0dUUkFDRUlORlVOQ1JDKDEwLCBlcnIpCisg ICAgYXV0byBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7CisgICAgU0tHQkVHSU5UUkFOU0FDVElP TigqZG9jdW1lbnQsIGkxOG5jKCJOb3VuLCBuYW1lIG9mIHRoZSB1c2VyIGFjdGlvbiIsICJTYXZl IEFJIFNlc3Npb24iKSwgZXJyKTsKKyAgICBJRk9LRE8oZXJyLAorICAgICAgICAgICBkb2N1bWVu dC0+c2V0UGFyYW1ldGVyKFBSRUZJWF9BSUFTU0lTVEFOVF9TRVNTSU9OICsgU0tHU2VydmljZXM6 OnRpbWVUb1N0cmluZyhRRGF0ZVRpbWU6OmN1cnJlbnREYXRlVGltZSgpKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRSnNvbkRvY3VtZW50KG1fbWVzc2FnZXMpLnRvSnNvbihR SnNvbkRvY3VtZW50OjpDb21wYWN0KSkpOworICAgIHJlZnJlc2hTZXNzaW9uc0xpc3QodHJ1ZSk7 Cit9CisKK3ZvaWQgU0tHQXNzaXN0YW50UGx1Z2luRG9ja1dpZGdldDo6b25EZWxldGVBaVNlc3Np b24oKQoreworICAgIFNLR0Vycm9yIGVycjsKKyAgICBfU0tHVFJBQ0VJTkZVTkNSQygxMCwgZXJy KQorICAgIGF1dG8gZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpOworICAgIFNLR0JFR0lOVFJBTlNB Q1RJT04oKmRvY3VtZW50LCBpMThuYygiTm91biwgbmFtZSBvZiB0aGUgdXNlciBhY3Rpb24iLCAi RGVsZXRlIEFJIFNlc3Npb24iKSwgZXJyKTsKKyAgICBTS0dQcm9wZXJ0eU9iamVjdCBwYXJhbShk b2N1bWVudCk7CisgICAgSUZPS0RPKGVyciwgcGFyYW0uc2V0TmFtZShQUkVGSVhfQUlBU1NJU1RB TlRfU0VTU0lPTiArIHVpLmtBaVNlc3Npb25zLT5jdXJyZW50VGV4dCgpKSk7CisgICAgSUZPS0RP KGVyciwgcGFyYW0ubG9hZCgpKTsKKyAgICBJRk9LRE8oZXJyLCBwYXJhbS5yZW1vdmUoKSk7Cisg ICAgcmVmcmVzaFNlc3Npb25zTGlzdCgpOworfQorCit2b2lkIFNLR0Fzc2lzdGFudFBsdWdpbkRv Y2tXaWRnZXQ6Om9uQWlTZXNzaW9uQ2hhbmdlZChpbnQgaUluZGV4KQoreworICAgIGF1dG8gZG9j dW1lbnQgPSBnZXREb2N1bWVudCgpOworICAgIGludCBpbmRleCA9IHVpLmtBaVNlc3Npb25zLT5j dXJyZW50SW5kZXgoKTsKKyAgICBpZiAoaW5kZXggPD0gMCkgeworICAgICAgICBvbkNsZWFyKCk7 CisgICAgICAgIHVpLmtEZWxldGVBaVNlc3Npb24tPnNldEVuYWJsZWQoZmFsc2UpOworICAgIH0g ZWxzZSB7CisgICAgICAgIFFTdHJpbmcganNvbiA9IGRvY3VtZW50LT5nZXRQYXJhbWV0ZXIoUFJF RklYX0FJQVNTSVNUQU5UX1NFU1NJT04gKyB1aS5rQWlTZXNzaW9ucy0+Y3VycmVudFRleHQoKSk7 CisgICAgICAgIG1fbWVzc2FnZXMgPSBRSnNvbkRvY3VtZW50Ojpmcm9tSnNvbihqc29uLnRvVXRm OCgpKS5hcnJheSgpOworICAgICAgICByZWZyZXNoQ29udmVyc2F0aW9uKCk7CisgICAgICAgIHVp LmtEZWxldGVBaVNlc3Npb24tPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgfQorfQorCit2b2lkIFNL R0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQ6OnNsb3RSZWZyZXNoU2Vzc2lvbnNMaXN0KCkgY29u c3QKK3sKKyAgICByZWZyZXNoU2Vzc2lvbnNMaXN0KGZhbHNlKTsKK30KKwordm9pZCBTS0dBc3Np c3RhbnRQbHVnaW5Eb2NrV2lkZ2V0OjpyZWZyZXNoU2Vzc2lvbnNMaXN0KGJvb2wgaVNlbGVjdEZp cnN0KSBjb25zdAoreworICAgIFNLR1RSQUNFSU5GVU5DKDEwKQorICAgIGF1dG8gZG9jdW1lbnQg PSBnZXREb2N1bWVudCgpOworICAgIHVpLmtBaVNlc3Npb25zLT5jbGVhcigpOworICAgIHVpLmtB aVNlc3Npb25zLT5hZGRJdGVtKGkxOG5jKCJBSSBzZXNzaW9uIGxpc3QiLCAiTmV3IHNlc3Npb24i KSk7CisgICAgLy8gR2V0IGFsbCBkb2N1bWVudCBwYXJhbWV0ZXJzIGFuZCBmaWx0ZXIgdGhvc2Ug c3RhcnRpbmcgd2l0aCAiU0tHX0FJX1NFU1NJT05fIgorICAgIGF1dG8gbGlzdCA9IGRvY3VtZW50 LT5nZXRQYXJhbWV0ZXJzKCJkb2N1bWVudCIsICJ0X25hbWUgbGlrZSAnIiArIFBSRUZJWF9BSUFT U0lTVEFOVF9TRVNTSU9OICsgIiUnIik7CisgICAgc3RkOjpzb3J0KGxpc3QuYmVnaW4oKSwgbGlz dC5lbmQoKSk7CisgICAgc3RkOjpyZXZlcnNlKGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQoKSk7Cisg ICAgZm9yIChjb25zdCBRU3RyaW5nICZhaVNlc3Npb24gOiBsaXN0KSB7CisgICAgICAgIHVpLmtB aVNlc3Npb25zLT5hZGRJdGVtKGFpU2Vzc2lvbi5yaWdodChhaVNlc3Npb24ubGVuZ3RoKCkgLSBQ UkVGSVhfQUlBU1NJU1RBTlRfU0VTU0lPTi5sZW5ndGgoKSkpOworICAgIH0KKyAgICBpZiAoaVNl bGVjdEZpcnN0ICYmIHVpLmtBaVNlc3Npb25zLT5jb3VudCgpID4gMSkgeworICAgICAgICB1aS5r QWlTZXNzaW9ucy0+c2V0Q3VycmVudEluZGV4KDEpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lz dGFudC9za2dhc3Npc3RhbnRwbHVnaW5kb2Nrd2lkZ2V0LmggYi9wbHVnaW5zL3Nrcm9vZ2Uvc2ty b29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRwbHVnaW5kb2Nrd2lkZ2V0LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5hYzNjN2ZlODEKLS0tIC9kZXYvbnVsbAorKysg Yi9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRwbHVnaW5k b2Nrd2lkZ2V0LmgKQEAgLTAsMCArMSw4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU1BE WC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyNiBTLiBNQU5LT1dTS0kgc3RlcGhhbmVAbWFua293c2tp LmZyCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTMuMC1vci1sYXRlcgorICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKyNpZm5kZWYgU0tHQVNTSVNUQU5UUExVR0lORE9DS1dJREdFVF9ICisj ZGVmaW5lIFNLR0FTU0lTVEFOVFBMVUdJTkRPQ0tXSURHRVRfSAorLyoqIEBmaWxlCisgKiBBIGRv Y2sgd2lkZ2V0IGZvciB0aGUgQUkgYXNzaXN0YW50IHBsdWdpbi4KKyAqLworI2luY2x1ZGUgPHFq c29uYXJyYXkuaD4KKyNpbmNsdWRlIDxxbmV0d29ya2FjY2Vzc21hbmFnZXIuaD4KKyNpbmNsdWRl IDxxcG9pbnRlci5oPgorI2luY2x1ZGUgPHF1cmwuaD4KKworI2luY2x1ZGUgInNrZ3dpZGdldC5o IgorI2luY2x1ZGUgInVpX3NrZ2Fzc2lzdGFudHBsdWdpbndpZGdldF9kb2NrLmgiCisKK2NsYXNz IFFKc29uVmFsdWU7CitjbGFzcyBRTmV0d29ya1JlcGx5OworCisvKioKKyAqIEEgZG9jayB3aWRn ZXQgZm9yIHRoZSBBSSBhc3Npc3RhbnQgcGx1Z2luLgorICovCitjbGFzcyBTS0dBc3Npc3RhbnRQ bHVnaW5Eb2NrV2lkZ2V0IDogcHVibGljIFNLR1dpZGdldAoreworICAgIFFfT0JKRUNUCisKK3B1 YmxpYzoKKyAgICAvKioKKyAgICAgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisgICAgICogQHBhcmFt IGlQYXJlbnQgdGhlIHBhcmVudCB3aWRnZXQKKyAgICAgKiBAcGFyYW0gaURvY3VtZW50IHRoZSBk b2N1bWVudAorICAgICAqLworICAgIGV4cGxpY2l0IFNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRn ZXQoUVdpZGdldCAqaVBhcmVudCwgU0tHRG9jdW1lbnQgKmlEb2N1bWVudCk7CisKKyAgICAvKioK KyAgICAgKiBEZWZhdWx0IERlc3RydWN0b3IKKyAgICAgKi8KKyAgICB+U0tHQXNzaXN0YW50UGx1 Z2luRG9ja1dpZGdldCgpIG92ZXJyaWRlOworCitwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBv bkFzaygpOworICAgIHZvaWQgb25DbGVhcigpOworICAgIHZvaWQgb25SZXBseUZpbmlzaGVkKCk7 CisgICAgdm9pZCBvblVzZXJQcm9tcHRDaGFuZ2VkKCk7CisgICAgdm9pZCBvblNhdmVDdXJyZW50 QWlTZXNzaW9uKCk7CisgICAgdm9pZCBvbkRlbGV0ZUFpU2Vzc2lvbigpOworICAgIHZvaWQgb25B aVNlc3Npb25DaGFuZ2VkKGludCBpSW5kZXgpOworCitwcml2YXRlOgorICAgIFFfRElTQUJMRV9D T1BZKFNLR0Fzc2lzdGFudFBsdWdpbkRvY2tXaWRnZXQpCisKKyAgICBRVXJsIGdldENvbXBsZXRp b25FbmRwb2ludCgpIGNvbnN0OworICAgIHZvaWQgc2V0QnVzeShib29sIGlCdXN5KTsKKyAgICB2 b2lkIHJlZnJlc2hDb252ZXJzYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHJlZnJlc2hTZXNzaW9u c0xpc3QoYm9vbCBpU2VsZWN0Rmlyc3QgPSBmYWxzZSkgY29uc3Q7CisgICAgdm9pZCBzbG90UmVm cmVzaFNlc3Npb25zTGlzdCgpIGNvbnN0OworICAgIHZvaWQgc2VuZENvbXBsZXRpb25SZXF1ZXN0 KCk7CisgICAgUVN0cmluZyBleHRyYWN0QXNzaXN0YW50TWVzc2FnZShjb25zdCBRQnl0ZUFycmF5 ICZpUGF5bG9hZCwgUVN0cmluZyAmb0Vycm9yTWVzc2FnZSwgYm9vbCAmb05lZWRzRm9sbG93VXAp OworICAgIFFTdHJpbmcgZXhlY3V0ZVRvb2xDYWxsKGNvbnN0IFFKc29uT2JqZWN0ICZpVG9vbENh bGwpIGNvbnN0OworICAgIFFTdHJpbmcgZXhlY3V0ZVNxbGl0ZVNlbGVjdChjb25zdCBRU3RyaW5n ICZpU3FsKSBjb25zdDsKKyAgICBRU3RyaW5nIGV4ZWN1dGVXZWJTZWFyY2goY29uc3QgUVN0cmlu ZyAmaVF1ZXJ5LCBpbnQgaU1heFJlc3VsdHMpIGNvbnN0OworICAgIHN0YXRpYyBRSnNvbkFycmF5 IGdldFRvb2xzKCk7CisgICAgc3RhdGljIFFKc29uQXJyYXkgZ2V0UmVxdWVzdE1lc3NhZ2VzKGNv bnN0IFFKc29uQXJyYXkgJmlNZXNzYWdlcyk7CisgICAgc3RhdGljIFFTdHJpbmcgc3FsUmVzdWx0 VG9Kc29uKGNvbnN0IFNLR1N0cmluZ0xpc3RMaXN0ICZpUmVzdWx0KTsKKyAgICBzdGF0aWMgUVN0 cmluZyBjb250ZW50VG9UZXh0KGNvbnN0IFFKc29uVmFsdWUgJmlDb250ZW50KTsKKyAgICBzdGF0 aWMgUVN0cmluZyBleHRyYWN0UmVhc29uaW5nRnJvbUNvbnRlbnQoUVN0cmluZyAmaW9Db250ZW50 KTsKKyAgICBzdGF0aWMgUVN0cmluZyByZWFzb25pbmdDb250ZW50VG9UZXh0KGNvbnN0IFFKc29u T2JqZWN0ICZpTWVzc2FnZSwgY29uc3QgUUpzb25PYmplY3QgJmlDaG9pY2UpOworICAgIHN0YXRp YyBRU3RyaW5nIGdldFN5c3RlbVByb21wdCgpOworICAgIHN0YXRpYyBRU3RyaW5nIG1hcmtkb3du VG9IdG1sKGNvbnN0IFFTdHJpbmcgJmlDb250ZW50KTsKKworICAgIFVpOjpza2dhc3Npc3RhbnRw bHVnaW5fZG9jayB1aXt9OworICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciBtX25ldHdvcmtNYW5h Z2VyOworICAgIFFQb2ludGVyPFFOZXR3b3JrUmVwbHk+IG1fcGVuZGluZ1JlcGx5OworICAgIFFK c29uQXJyYXkgbV9tZXNzYWdlczsKKyAgICBRU3RyaW5nIG1fcGVuZGluZ1JlYXNvbmluZ0NvbnRl bnQ7CisgICAgaW50IG1fdG9vbENhbGxEZXB0aCA9IDA7Cit9OworCisjZW5kaWYgLy8gU0tHQVNT SVNUQU5UUExVR0lORE9DS1dJREdFVF9ICmRpZmYgLS1naXQgYS9wbHVnaW5zL3Nrcm9vZ2Uvc2ty b29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRwbHVnaW53aWRnZXQuY3BwIGIvcGx1Z2lucy9z a3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0YW50cGx1Z2lud2lkZ2V0LmNwcApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjQ3NTQ0MTg5YQotLS0gL2Rldi9u dWxsCisrKyBiL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3NrZ2Fzc2lzdGFu dHBsdWdpbndpZGdldC5jcHAKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyNiBTLiBNQU5LT1dTS0kgc3RlcGhhbmVAbWFu a293c2tpLmZyCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTMuMC1vci1sYXRlcgor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworLyoqIEBmaWxlCisgKiBBIGRvY2sgd2lkZ2V0IGZvciB0 aGUgQUkgYXNzaXN0YW50IHBsdWdpbi4KKyAqLworI2luY2x1ZGUgInNrZ2Fzc2lzdGFudHBsdWdp bndpZGdldC5oIgorI2luY2x1ZGUgInNrZ2Fzc2lzdGFudHBsdWdpbmRvY2t3aWRnZXQuaCIKKwor U0tHQXNzaXN0YW50UGx1Z2luV2lkZ2V0OjpTS0dBc3Npc3RhbnRQbHVnaW5XaWRnZXQoUVdpZGdl dCAqaVBhcmVudCwgU0tHRG9jdW1lbnQgKmlEb2N1bWVudCkKKyAgICA6IFNLR1RhYlBhZ2UoaVBh cmVudCwgaURvY3VtZW50KQoreworICAgIFFTaXplUG9saWN5IHNpemVQb2xpY3koUVNpemVQb2xp Y3k6OlBvbGljeTo6RXhwYW5kaW5nLCBRU2l6ZVBvbGljeTo6UG9saWN5OjpFeHBhbmRpbmcpOwor ICAgIHNpemVQb2xpY3kuc2V0SG9yaXpvbnRhbFN0cmV0Y2goMCk7CisgICAgc2l6ZVBvbGljeS5z ZXRWZXJ0aWNhbFN0cmV0Y2goMCk7CisgICAgc2l6ZVBvbGljeS5zZXRIZWlnaHRGb3JXaWR0aCh0 aGlzLT5zaXplUG9saWN5KCkuaGFzSGVpZ2h0Rm9yV2lkdGgoKSk7CisgICAgdGhpcy0+c2V0U2l6 ZVBvbGljeShzaXplUG9saWN5KTsKKworICAgIGF1dG8gbGF5b3V0ID0gbmV3IFFIQm94TGF5b3V0 KHRoaXMpOworICAgIGxheW91dC0+c2V0U3BhY2luZygyKTsKKyAgICBsYXlvdXQtPnNldENvbnRl bnRzTWFyZ2lucygwLCAwLCAwLCAwKTsKKyAgICBhdXRvIHQgPSBuZXcgU0tHQXNzaXN0YW50UGx1 Z2luRG9ja1dpZGdldCh0aGlzLCBpRG9jdW1lbnQpOworICAgIGxheW91dC0+YWRkV2lkZ2V0KHQp OworfQorCitTS0dBc3Npc3RhbnRQbHVnaW5XaWRnZXQ6On5TS0dBc3Npc3RhbnRQbHVnaW5XaWRn ZXQoKQoreworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BsdWdp bnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3NrZ2Fzc2lzdGFudHBsdWdpbndpZGdldC5o IGIvcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0YW50cGx1Z2lu d2lkZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5iYjQzMTFhMjgK LS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9z a2dhc3Npc3RhbnRwbHVnaW53aWRnZXQuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDI2IFMuIE1BTktPV1NLSSBzdGVw aGFuZUBtYW5rb3dza2kuZnIKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMy4wLW9y LWxhdGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBTS0dBU1NJU1RBTlRQTFVHSU5X SURHRVRfSAorI2RlZmluZSBTS0dBU1NJU1RBTlRQTFVHSU5XSURHRVRfSAorLyoqIEBmaWxlCisg KiBBIGRvY2sgd2lkZ2V0IGZvciB0aGUgQUkgYXNzaXN0YW50IHBsdWdpbi4KKyAqLworI2luY2x1 ZGUgInNrZ3RhYnBhZ2UuaCIKKworLyoqCisgKiBBIHNrcm9vZ2UgcGx1Z2luIGZvciB0aGUgQUkg YXNzaXN0YW50CisgKi8KK2NsYXNzIFNLR0Fzc2lzdGFudFBsdWdpbldpZGdldCA6IHB1YmxpYyBT S0dUYWJQYWdlCit7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIC8qKgorICAgICAqIERl ZmF1bHQgQ29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gaVBhcmVudCB0aGUgcGFyZW50IHdpZGdl dAorICAgICAqIEBwYXJhbSBpRG9jdW1lbnQgdGhlIGRvY3VtZW50CisgICAgICovCisgICAgZXhw bGljaXQgU0tHQXNzaXN0YW50UGx1Z2luV2lkZ2V0KFFXaWRnZXQgKmlQYXJlbnQsIFNLR0RvY3Vt ZW50ICppRG9jdW1lbnQpOworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBEZXN0cnVjdG9yCisg ICAgICovCisgICAgflNLR0Fzc2lzdGFudFBsdWdpbldpZGdldCgpIG92ZXJyaWRlOworfTsKKwor I2VuZGlmIC8vIFNLR0FTU0lTVEFOVFBMVUdJTldJREdFVF9ICmRpZmYgLS1naXQgYS9wbHVnaW5z L3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRwbHVnaW53aWRnZXRfZG9j ay51aSBiL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3NrZ2Fzc2lzdGFudHBs dWdpbndpZGdldF9kb2NrLnVpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4u YTlkNTkzMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9za3Jvb2dlL3Nrcm9vZ2VfYWlh c3Npc3RhbnQvc2tnYXNzaXN0YW50cGx1Z2lud2lkZ2V0X2RvY2sudWkKQEAgLTAsMCArMSwxOTMg QEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8dWkgdmVyc2lvbj0i NC4wIj4KKyA8YXV0aG9yPgorU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyNiBTLiBNQU5LT1dT S0kgc3RlcGhhbmVAbWFua293c2tpLmZyCitTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTMu MC1vci1sYXRlcgorIDwvYXV0aG9yPgorIDxjbGFzcz5za2dhc3Npc3RhbnRwbHVnaW5fZG9jazwv Y2xhc3M+CisgPHdpZGdldCBjbGFzcz0iUVdpZGdldCIgbmFtZT0ic2tnYXNzaXN0YW50cGx1Z2lu X2RvY2siPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgorICAgPHJlY3Q+CisgICAgPHg+ MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD4zOTU8L3dpZHRoPgorICAgIDxoZWlnaHQ+ NzU4PC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+CisgIDxsYXlvdXQgY2xhc3M9 IlFWQm94TGF5b3V0IiBuYW1lPSJ2ZXJ0aWNhbExheW91dCI+CisgICA8cHJvcGVydHkgbmFtZT0i c3BhY2luZyI+CisgICAgPG51bWJlcj4yPC9udW1iZXI+CisgICA8L3Byb3BlcnR5PgorICAgPHBy b3BlcnR5IG5hbWU9ImxlZnRNYXJnaW4iPgorICAgIDxudW1iZXI+MjwvbnVtYmVyPgorICAgPC9w cm9wZXJ0eT4KKyAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BNYXJnaW4iPgorICAgIDxudW1iZXI+Mjwv bnVtYmVyPgorICAgPC9wcm9wZXJ0eT4KKyAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodE1hcmdpbiI+ CisgICAgPG51bWJlcj4yPC9udW1iZXI+CisgICA8L3Byb3BlcnR5PgorICAgPHByb3BlcnR5IG5h bWU9ImJvdHRvbU1hcmdpbiI+CisgICAgPG51bWJlcj4yPC9udW1iZXI+CisgICA8L3Byb3BlcnR5 PgorICAgPGl0ZW0+CisgICAgPGxheW91dCBjbGFzcz0iUUhCb3hMYXlvdXQiIG5hbWU9ImtBaVNl c3Npb25Nbmd0Ij4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNsYXNzPSJRQ29tYm9Cb3gi IG5hbWU9ImtBaVNlc3Npb25zIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+ CisgICAgICAgIDxzaXplcG9saWN5IGhzaXpldHlwZT0iRXhwYW5kaW5nIiB2c2l6ZXR5cGU9IkZp eGVkIj4KKyAgICAgICAgIDxob3JzdHJldGNoPjA8L2hvcnN0cmV0Y2g+CisgICAgICAgICA8dmVy c3RyZXRjaD4wPC92ZXJzdHJldGNoPgorICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgPC9w cm9wZXJ0eT4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbFRpcCI+CisgICAgICAgIDxzdHJp bmcgZXh0cmFjb21tZW50PSJZb3VyIHNhdmVkIEFJIHNlc3Npb25zIi8+CisgICAgICAgPC9wcm9w ZXJ0eT4KKyAgICAgIDwvd2lkZ2V0PgorICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAg PHdpZGdldCBjbGFzcz0iUVB1c2hCdXR0b24iIG5hbWU9ImtTYXZlQ3VycmVudEFpU2Vzc2lvbiI+ CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2xUaXAiPgorICAgICAgICA8c3RyaW5nIGV4dHJh Y29tbWVudD0iU2F2ZSBjdXJyZW50IEFJIHNlc3Npb24iLz4KKyAgICAgICA8L3Byb3BlcnR5Pgor ICAgICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0 IGNsYXNzPSJRUHVzaEJ1dHRvbiIgbmFtZT0ia0RlbGV0ZUFpU2Vzc2lvbiIvPgorICAgICA8L2l0 ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUVB1c2hCdXR0b24iIG5hbWU9 ImtIZWxwQnV0dG9uIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbFRpcCI+CisgICAgICAg IDxzdHJpbmcgZXh0cmFjb21tZW50PSJIZWxwIi8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAg ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg IDx3aWRnZXQgY2xhc3M9IlFQdXNoQnV0dG9uIiBuYW1lPSJrU2V0dGluZ3NCdXR0b24iPgorICAg ICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sVGlwIj4KKyAgICAgICAgPHN0cmluZz5PcGVuIHNldHRp bmdzPC9zdHJpbmc+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0i dGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dp ZGdldD4KKyAgICAgPC9pdGVtPgorICAgIDwvbGF5b3V0PgorICAgPC9pdGVtPgorICAgPGl0ZW0+ CisgICAgPHdpZGdldCBjbGFzcz0iUUZyYW1lIiBuYW1lPSJrSGVscEFyZWEiPgorICAgICA8bGF5 b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0ia0hlbHBBcmVhXzIiPgorICAgICAgPGl0ZW0+ CisgICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJrSGVscFRpdGxlIj4KKyAgICAg ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICAgPHN0cmluZz5IZXJlIGFyZSBzb21l IGV4YW1wbGVzIG9mIHF1ZXN0aW9ucyB5b3UgY2FuIGFzayB5b3VyIERpY2tlbnMgQUkgYXNzaXN0 YW50Ljwvc3RyaW5nPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFt ZT0id29yZFdyYXAiPgorICAgICAgICAgPGJvb2w+dHJ1ZTwvYm9vbD4KKyAgICAgICAgPC9wcm9w ZXJ0eT4KKyAgICAgICA8L3dpZGdldD4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtPgorICAg ICAgIDx3aWRnZXQgY2xhc3M9IkxpbmUiIG5hbWU9ImxpbmUiPgorICAgICAgICA8cHJvcGVydHkg bmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICAgPGVudW0+UXQ6Ok9yaWVudGF0aW9uOjpIb3Jp em9udGFsPC9lbnVtPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDwvd2lkZ2V0PgorICAg ICAgPC9pdGVtPgorICAgICA8L2xheW91dD4KKyAgICA8L3dpZGdldD4KKyAgIDwvaXRlbT4KKyAg IDxpdGVtPgorICAgIDx3aWRnZXQgY2xhc3M9IlFUZXh0RWRpdCIgbmFtZT0ia0Fuc3dlciI+Cisg ICAgIDxwcm9wZXJ0eSBuYW1lPSJyZWFkT25seSI+CisgICAgICA8Ym9vbD50cnVlPC9ib29sPgor ICAgICA8L3Byb3BlcnR5PgorICAgICA8cHJvcGVydHkgbmFtZT0iYWNjZXB0UmljaFRleHQiPgor ICAgICAgPGJvb2w+ZmFsc2U8L2Jvb2w+CisgICAgIDwvcHJvcGVydHk+CisgICAgIDxwcm9wZXJ0 eSBuYW1lPSJwbGFjZWhvbGRlclRleHQiPgorICAgICAgPHN0cmluZz5Ib3cgY2FuIEkgaGVscCB5 b3UgdG9kYXkgPzwvc3RyaW5nPgorICAgICA8L3Byb3BlcnR5PgorICAgIDwvd2lkZ2V0PgorICAg PC9pdGVtPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVBsYWluVGV4dEVkaXQiIG5h bWU9ImtVc2VyUHJvbXB0Ij4KKyAgICAgPHByb3BlcnR5IG5hbWU9InNpemVQb2xpY3kiPgorICAg ICAgPHNpemVwb2xpY3kgaHNpemV0eXBlPSJFeHBhbmRpbmciIHZzaXpldHlwZT0iTWluaW11bSI+ CisgICAgICAgPGhvcnN0cmV0Y2g+MDwvaG9yc3RyZXRjaD4KKyAgICAgICA8dmVyc3RyZXRjaD4w PC92ZXJzdHJldGNoPgorICAgICAgPC9zaXplcG9saWN5PgorICAgICA8L3Byb3BlcnR5PgorICAg ICA8cHJvcGVydHkgbmFtZT0icGxhY2Vob2xkZXJUZXh0Ij4KKyAgICAgIDxzdHJpbmc+QXNrIHlv dXIgcXVlc3Rpb248L3N0cmluZz4KKyAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L3dpZGdldD4KKyAg IDwvaXRlbT4KKyAgIDxpdGVtPgorICAgIDxsYXlvdXQgY2xhc3M9IlFIQm94TGF5b3V0IiBuYW1l PSJidXR0b25zTGF5b3V0Ij4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNsYXNzPSJRUHVz aEJ1dHRvbiIgbmFtZT0ia0Fza0J1dHRvbiI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2xU aXAiPgorICAgICAgICA8c3RyaW5nIGV4dHJhY29tbWVudD0iQXNrIHRvIERpY2tlbnMiLz4KKyAg ICAgICA8L3Byb3BlcnR5PgorICAgICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0 ZW0+CisgICAgICA8d2lkZ2V0IGNsYXNzPSJRUHVzaEJ1dHRvbiIgbmFtZT0ia0NsZWFyQnV0dG9u Ij4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbFRpcCI+CisgICAgICAgIDxzdHJpbmcgZXh0 cmFjb21tZW50PSJSZXNldCB0aGUgY3VycmVudCBBSSBzZXNzaW9uIi8+CisgICAgICAgPC9wcm9w ZXJ0eT4KKyAgICAgIDwvd2lkZ2V0PgorICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAg PHdpZGdldCBjbGFzcz0iU0tHU2hvdyIgbmFtZT0ia0Rpc3BsYXlSZWFzb25pbmciPgorICAgICAg IDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgPHNpemVwb2xpY3kgaHNpemV0 eXBlPSJQcmVmZXJyZWQiIHZzaXpldHlwZT0iRml4ZWQiPgorICAgICAgICAgPGhvcnN0cmV0Y2g+ MDwvaG9yc3RyZXRjaD4KKyAgICAgICAgIDx2ZXJzdHJldGNoPjA8L3ZlcnN0cmV0Y2g+CisgICAg ICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgPC93aWRnZXQ+Cisg ICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8c3BhY2VyIG5hbWU9Imhvcml6b250YWxT cGFjZXIiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmllbnRhdGlvbiI+CisgICAgICAgIDxl bnVtPlF0OjpPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5 PgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAg PHNpemU+CisgICAgICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwv aGVpZ2h0PgorICAgICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3Bh Y2VyPgorICAgICA8L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0 PgorIDwvd2lkZ2V0PgorIDxjdXN0b213aWRnZXRzPgorICA8Y3VzdG9td2lkZ2V0PgorICAgPGNs YXNzPlNLR1Nob3c8L2NsYXNzPgorICAgPGV4dGVuZHM+UVRvb2xCdXR0b248L2V4dGVuZHM+Cisg ICA8aGVhZGVyPnNrZ3Nob3cuaDwvaGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3Rv bXdpZGdldHM+CisgPHRhYnN0b3BzPgorICA8dGFic3RvcD5rQWlTZXNzaW9uczwvdGFic3RvcD4K KyAgPHRhYnN0b3A+a1NhdmVDdXJyZW50QWlTZXNzaW9uPC90YWJzdG9wPgorICA8dGFic3RvcD5r RGVsZXRlQWlTZXNzaW9uPC90YWJzdG9wPgorICA8dGFic3RvcD5rSGVscEJ1dHRvbjwvdGFic3Rv cD4KKyAgPHRhYnN0b3A+a1NldHRpbmdzQnV0dG9uPC90YWJzdG9wPgorICA8dGFic3RvcD5rQW5z d2VyPC90YWJzdG9wPgorICA8dGFic3RvcD5rVXNlclByb21wdDwvdGFic3RvcD4KKyAgPHRhYnN0 b3A+a0Fza0J1dHRvbjwvdGFic3RvcD4KKyAgPHRhYnN0b3A+a0NsZWFyQnV0dG9uPC90YWJzdG9w PgorICA8dGFic3RvcD5rRGlzcGxheVJlYXNvbmluZzwvdGFic3RvcD4KKyA8L3RhYnN0b3BzPgor IDxyZXNvdXJjZXMvPgorIDxjb25uZWN0aW9ucy8+Cis8L3VpPgpkaWZmIC0tZ2l0IGEvcGx1Z2lu cy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tnYXNzaXN0YW50cGx1Z2lud2lkZ2V0X3By ZWYudWkgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2tyb29nZV9haWFzc2lzdGFudC9za2dhc3Npc3RhbnRw bHVnaW53aWRnZXRfcHJlZi51aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAu LjAxZDZhZTBkZgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2Fp YXNzaXN0YW50L3NrZ2Fzc2lzdGFudHBsdWdpbndpZGdldF9wcmVmLnVpCkBAIC0wLDAgKzEsMTM0 IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHVpIHZlcnNpb249 IjQuMCI+CisgPGF1dGhvcj4KK1NQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjYgUy4gTUFOS09X U0tJIHN0ZXBoYW5lQG1hbmtvd3NraS5mcgorU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0z LjAtb3ItbGF0ZXIKKyA8L2F1dGhvcj4KKyA8Y2xhc3M+c2tnYXNzaXN0YW50cGx1Z2luX3ByZWY8 L2NsYXNzPgorIDx3aWRnZXQgY2xhc3M9IlFXaWRnZXQiIG5hbWU9InNrZ2Fzc2lzdGFudHBsdWdp bl9wcmVmIj4KKyAgPHByb3BlcnR5IG5hbWU9Imdlb21ldHJ5Ij4KKyAgIDxyZWN0PgorICAgIDx4 PjA8L3g+CisgICAgPHk+MDwveT4KKyAgICA8d2lkdGg+NjMxPC93aWR0aD4KKyAgICA8aGVpZ2h0 PjY5MzwvaGVpZ2h0PgorICAgPC9yZWN0PgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNz PSJRVkJveExheW91dCIgbmFtZT0idmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdp ZGdldCBjbGFzcz0iUUdyb3VwQm94IiBuYW1lPSJrQ29ubmVjdGlvbkdyb3VwIj4KKyAgICAgPGxh eW91dCBjbGFzcz0iUUZvcm1MYXlvdXQiIG5hbWU9ImZvcm1MYXlvdXQiPgorICAgICAgPGl0ZW0g cm93PSIxIiBjb2x1bW49IjAiPgorICAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0i a1NlcnZlclVybExhYmVsIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAg ICAgPHN0cmluZz5TZXJ2ZXIgVVJMOjwvc3RyaW5nPgorICAgICAgICA8L3Byb3BlcnR5PgorICAg ICAgICA8cHJvcGVydHkgbmFtZT0iYnVkZHkiPgorICAgICAgICAgPGNzdHJpbmc+a2NmZ19zZXJ2 ZXJVcmw8L2NzdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgPC93aWRnZXQ+Cisg ICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSByb3c9IjEiIGNvbHVtbj0iMSI+CisgICAgICAgPHdp ZGdldCBjbGFzcz0iUUxpbmVFZGl0IiBuYW1lPSJrY2ZnX3NlcnZlclVybCI+CisgICAgICAgIDxw cm9wZXJ0eSBuYW1lPSJ0b29sVGlwIj4KKyAgICAgICAgIDxzdHJpbmc+QmFzZSBVUkwgb2YgT3Bl bkFJIHNlcnZlci4gVGhlIEFQSSBwYXRoIC92MS9jaGF0L2NvbXBsZXRpb25zIGlzIGFwcGVuZGVk IGF1dG9tYXRpY2FsbHkuPC9zdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxw cm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgIDxzdHJpbmcgbm90cj0idHJ1ZSI+aHR0cDov LzEyNy4wLjAuMTo4MDgwPC9zdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxw cm9wZXJ0eSBuYW1lPSJwbGFjZWhvbGRlclRleHQiPgorICAgICAgICAgPHN0cmluZyBub3RyPSJ0 cnVlIj5odHRwOi8vMTI3LjAuMC4xOjgwODA8L3N0cmluZz4KKyAgICAgICAgPC9wcm9wZXJ0eT4K KyAgICAgICA8L3dpZGdldD4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIHJvdz0iMiIgY29s dW1uPSIwIj4KKyAgICAgICA8d2lkZ2V0IGNsYXNzPSJRTGFiZWwiIG5hbWU9ImtBcGlUb2tlbkxh YmVsIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICAgPHN0cmluZz5B UEkgVG9rZW46PC9zdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0 eSBuYW1lPSJidWRkeSI+CisgICAgICAgICA8Y3N0cmluZz5rY2ZnX2FwaVRva2VuPC9jc3RyaW5n PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDwvd2lkZ2V0PgorICAgICAgPC9pdGVtPgor ICAgICAgPGl0ZW0gcm93PSIyIiBjb2x1bW49IjEiPgorICAgICAgIDx3aWRnZXQgY2xhc3M9IlFM aW5lRWRpdCIgbmFtZT0ia2NmZ19hcGlUb2tlbiI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0 b29sVGlwIj4KKyAgICAgICAgIDxzdHJpbmc+QVBJIHRva2VuIGZvciBhdXRoZW50aWNhdGlvbiAo b3B0aW9uYWwpLiBMZWF2ZSBlbXB0eSBpZiBub3QgcmVxdWlyZWQuPC9zdHJpbmc+CisgICAgICAg IDwvcHJvcGVydHk+CisgICAgICAgPC93aWRnZXQ+CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRl bSByb3c9IjQiIGNvbHVtbj0iMCIgY29sc3Bhbj0iMiI+CisgICAgICAgPHdpZGdldCBjbGFzcz0i UUNoZWNrQm94IiBuYW1lPSJrY2ZnX2VuYWJsZVdlYlNlYXJjaCI+CisgICAgICAgIDxwcm9wZXJ0 eSBuYW1lPSJ0b29sVGlwIj4KKyAgICAgICAgIDxzdHJpbmc+QWxsb3cgdGhlIEFJIGFzc2lzdGFu dCB0byBzZWFyY2ggdGhlIGludGVybmV0IHRvIHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSBhbmQgdXAt dG8tZGF0ZSBpbmZvcm1hdGlvbi48L3N0cmluZz4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAg ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICAgPHN0cmluZz5FbmFibGUgaW50ZXJu ZXQgc2VhcmNoZXM8L3N0cmluZz4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICA8L3dpZGdl dD4KKyAgICAgIDwvaXRlbT4KKyAgICAgIDxpdGVtIHJvdz0iNSIgY29sdW1uPSIwIj4KKyAgICAg ICA8d2lkZ2V0IGNsYXNzPSJRTGFiZWwiIG5hbWU9ImtGYW1pbHlTaXR1YXRpb25MYWJlbCI+Cisg ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgIDxzdHJpbmc+RmFtaWx5IFNp dHVhdGlvbjo8L3N0cmluZz4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5 IG5hbWU9ImJ1ZGR5Ij4KKyAgICAgICAgIDxjc3RyaW5nPmtjZmdfZmFtaWx5U2l0dWF0aW9uPC9j c3RyaW5nPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDwvd2lkZ2V0PgorICAgICAgPC9p dGVtPgorICAgICAgPGl0ZW0gcm93PSI1IiBjb2x1bW49IjEiPgorICAgICAgIDx3aWRnZXQgY2xh c3M9IlFQbGFpblRleHRFZGl0IiBuYW1lPSJrY2ZnX2ZhbWlseVNpdHVhdGlvbiI+CisgICAgICAg IDxwcm9wZXJ0eSBuYW1lPSJtYXhpbXVtU2l6ZSI+CisgICAgICAgICA8c2l6ZT4KKyAgICAgICAg ICA8d2lkdGg+MTY3NzcyMTU8L3dpZHRoPgorICAgICAgICAgIDxoZWlnaHQ+MjAwPC9oZWlnaHQ+ CisgICAgICAgICA8L3NpemU+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0 eSBuYW1lPSJ0b29sVGlwIj4KKyAgICAgICAgIDxzdHJpbmc+RGVzY3JpYmUgeW91ciBmYW1pbHkg c2l0dWF0aW9uIChlLmcuLCBzaW5nbGUsIG1hcnJpZWQsIHdpdGggY2hpbGRyZW4sIGV0Yy4pLiBU aGlzIGhlbHBzIHRoZSBBSSBhc3Npc3RhbnQgcHJvdmlkZSBtb3JlIHBlcnNvbmFsaXplZCByZWNv bW1lbmRhdGlvbnMuPC9zdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9w ZXJ0eSBuYW1lPSJwbGFjZWhvbGRlclRleHQiPgorICAgICAgICAgPHN0cmluZz5Zb3UgY2FuIGhl bHAgRGlja2VucyBieSB0ZWxsaW5nIGhpbSBtb3JlIGFib3V0IHlvdXIgZmFtaWx5IHNpdHVhdGlv biAobnVtYmVyIG9mIHBlb3BsZSwgZW1wbG95ZWQsIHNlbGYtZW1wbG95ZWQsIG9yIHJldGlyZWQs IGhvbWVvd25lciBvciByZW50ZXIpIGFuZCB5b3VyIHBsYW5zLiBZb3UgY2FuIHVzZSBNYXJrZG93 biBzeW50YXguPC9zdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgPC93aWRnZXQ+ CisgICAgICA8L2l0ZW0+CisgICAgICA8aXRlbSByb3c9IjAiIGNvbHVtbj0iMCIgY29sc3Bhbj0i MiI+CisgICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJrTGFiZWwiPgorICAgICAg ICA8cHJvcGVydHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgPGJvb2w+dHJ1ZTwvYm9vbD4K KyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICA8L3dpZGdldD4KKyAgICAgIDwvaXRlbT4KKyAg ICAgIDxpdGVtIHJvdz0iMyIgY29sdW1uPSIwIiBjb2xzcGFuPSIyIj4KKyAgICAgICA8d2lkZ2V0 IGNsYXNzPSJRTGFiZWwiIG5hbWU9ImxhYmVsXzIiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0i dGV4dCI+CisgICAgICAgICA8c3RyaW5nPiZsdDtodG1sJmd0OyZsdDtoZWFkLyZndDsmbHQ7Ym9k eSZndDsmbHQ7cCZndDtZb3VyIEFJIGNvbXBhbmlvbiBtYXkgbmVlZCBpbnRlcm5ldCBhY2Nlc3Mu IFlvdSBjYW4gYWxsb3cgaXQgdG8gZG8gc28sIGJ1dCBiZSBtaW5kZnVsIG9mICZsdDtzcGFuIHN0 eWxlPSZxdW90OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsmcXVvdDsmZ3Q7cHJpdmFjeSBj b25jZXJucyZsdDsvc3BhbiZndDsuIEZvciB5b3VyIGluZm9ybWF0aW9uLCB0aGUgaW50ZXJuZXQg c2VhcmNocyBhcmUgZG9uZSB3aXRoICZsdDtzcGFuIHN0eWxlPSZxdW90OyBmb250LXdlaWdodDo3 MDA7JnF1b3Q7Jmd0O2R1Y2tkdWNrZ28mbHQ7L3NwYW4mZ3Q7LiZsdDsvcCZndDsmbHQ7L2JvZHkm Z3Q7Jmx0Oy9odG1sJmd0Ozwvc3RyaW5nPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8 cHJvcGVydHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgPGJvb2w+dHJ1ZTwvYm9vbD4KKyAg ICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICA8L3dpZGdldD4KKyAgICAgIDwvaXRlbT4KKyAgICAg PC9sYXlvdXQ+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8c3Bh Y2VyIG5hbWU9InZlcnRpY2FsU3BhY2VyIj4KKyAgICAgPHByb3BlcnR5IG5hbWU9Im9yaWVudGF0 aW9uIj4KKyAgICAgIDxlbnVtPlF0OjpPcmllbnRhdGlvbjo6VmVydGljYWw8L2VudW0+CisgICAg IDwvcHJvcGVydHk+CisgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4K KyAgICAgIDxzaXplPgorICAgICAgIDx3aWR0aD4yMDwvd2lkdGg+CisgICAgICAgPGhlaWdodD40 MDwvaGVpZ2h0PgorICAgICAgPC9zaXplPgorICAgICA8L3Byb3BlcnR5PgorICAgIDwvc3BhY2Vy PgorICAgPC9pdGVtPgorICA8L2xheW91dD4KKyA8L3dpZGdldD4KKyA8cmVzb3VyY2VzLz4KKyA8 Y29ubmVjdGlvbnMvPgorPC91aT4KZGlmZiAtLWdpdCBhL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dl X2FpYXNzaXN0YW50L3Nrcm9vZ2VfYWlhc3Npc3RhbnQucmMgYi9wbHVnaW5zL3Nrcm9vZ2Uvc2ty b29nZV9haWFzc2lzdGFudC9za3Jvb2dlX2FpYXNzaXN0YW50LnJjCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMC4uMTk1YTk3NWQwCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lu cy9za3Jvb2dlL3Nrcm9vZ2VfYWlhc3Npc3RhbnQvc2tyb29nZV9haWFzc2lzdGFudC5yYwpAQCAt MCwwICsxLDEyIEBACis8IURPQ1RZUEUga3BhcnRndWkgU1lTVEVNICJrcGFydGd1aS5kdGQiPgor PGtwYXJ0Z3VpIG5hbWU9InNrcm9vZ2VfYWlhc3Npc3RhbnQiIHZlcnNpb249IjIiPgorPE1lbnVC YXI+CisgIDxNZW51IG5hbWU9InZpZXciPgorICAgIDxNZW51IG5hbWU9InBhbmVscyI+PHRleHQ+ UGFuZWxzPC90ZXh0PgorICAgICAgPEFjdGlvbiBuYW1lPSJ2aWV3X2FpYXNzaXN0YW50Ii8+Cisg ICAgPC9NZW51PgorICA8L01lbnU+Cis8L01lbnVCYXI+Cis8VG9vbEJhciBuYW1lPSJtYWluVG9v bEJhciI+PHRleHQ+TWFpbiBUb29sYmFyPC90ZXh0PgorPC9Ub29sQmFyPgorPC9rcGFydGd1aT4K ZGlmZiAtLWdpdCBhL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3Nrcm9vZ2Vf c3lzdGVtX3Byb21wdC5tZCBiL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dlX2FpYXNzaXN0YW50L3Nr cm9vZ2Vfc3lzdGVtX3Byb21wdC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAuLmYwNTgxYzQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvc2tyb29nZS9za3Jvb2dl X2FpYXNzaXN0YW50L3Nrcm9vZ2Vfc3lzdGVtX3Byb21wdC5tZApAQCAtMCwwICsxLDIxOCBAQAor IyBTWVNURU0gUFJPTVBUCisKKyMjIFJvbGUKKworWW91IGFyZSAqKkRpY2tlbnMqKiwgdGhlIEFJ IGFzc2lzdGFudCBlbWJlZGRlZCBpbiAqKlNrcm9vZ2UqKiwgYSBwZXJzb25hbCBmaW5hbmNlIG1h bmFnZXIuCisKK1lvdXIgbWlzc2lvbiBpcyB0byBoZWxwIHRoZSB1c2VyOgorCisxLiB1bmRlcnN0 YW5kIGFuZCB1c2UgU2tyb29nZS4KKzIuIGFuYWx5emUgdGhlaXIgb3duIGZpbmFuY2lhbCBkYXRh IHRocm91Z2ggdGhlIGF2YWlsYWJsZSBTUUxpdGUgcmVhZC1vbmx5IHRvb2wuCiszLiB0dXJuIHF1 ZXJ5IHJlc3VsdHMgaW50byBjbGVhciwgdXNlZnVsIHBlcnNvbmFsLWZpbmFuY2UgaW5zaWdodHMu CisKK0Fuc3dlciBpbiB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgdXNlciB3aGVuZXZlciBwb3Nz aWJsZS4KKworIyMgU2NvcGUKKworU3RheSBzdHJpY3RseSB3aXRoaW46CisKKy0gU2tyb29nZSB1 c2FnZSBhbmQgZmVhdHVyZXMuCistIHBlcnNvbmFsIGZpbmFuY2UgYW5hbHlzaXMgYmFzZWQgb24g dGhlIHVzZXIncyBTa3Jvb2dlIGRhdGEuCistIGdlbmVyYWwgZmluYW5jaWFsIGluZm9ybWF0aW9u IG9yIGFkdmljZS4KKworRm9yIHVucmVsYXRlZCByZXF1ZXN0cywgcG9saXRlbHkgZGVjbGluZSBh bmQgcmVkaXJlY3QgdGhlIHVzZXIgdG8gU2tyb29nZSBvciBwZXJzb25hbCBmaW5hbmNlLgorCitE byBub3QgcHJvdmlkZSByZWd1bGF0ZWQgZmluYW5jaWFsLCB0YXgsIGxlZ2FsLCBvciBpbnZlc3Rt ZW50IGFkdmljZSBhcyBhIGNlcnRhaW50eS4gWW91IG1heSBleHBsYWluIHdoYXQgdGhlIGRhdGEg c2hvd3MgYW5kIHN1Z2dlc3QgdGhhdCB0aGUgdXNlciB2ZXJpZnkgZGVjaXNpb25zIHdpdGggYSBx dWFsaWZpZWQgcHJvZmVzc2lvbmFsIHdoZW4gc3Rha2VzIGFyZSBoaWdoLgorCisjIyBSZXF1ZXN0 IFJvdXRpbmcKKworQ2xhc3NpZnkgZWFjaCB1c2VyIHJlcXVlc3QgYmVmb3JlIGFuc3dlcmluZy4K KworIyMjIDEuIFNrcm9vZ2UgU3VwcG9ydAorCitVc2UgdGhpcyBwYXRoIHdoZW4gdGhlIHVzZXIg YXNrcyBob3cgdG8gdXNlIFNrcm9vZ2UsIHVuZGVyc3RhbmQgYSBTa3Jvb2dlIGNvbmNlcHQsIG9y IGZpbmQgYSBmZWF0dXJlLgorCistIEdpdmUgYSBjb25jaXNlLCBwcmFjdGljYWwgYW5zd2VyLgor LSBQcmVmZXIgc3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucyBmb3IgVUkgd29ya2Zsb3dzLgorLSBJ ZiB0aGUgcXVlc3Rpb24gbmVlZHMgdGhlIHVzZXIncyBhY3R1YWwgZmluYW5jaWFsIGRhdGEsIHN3 aXRjaCB0byB0aGUgZGF0YS1hbmFseXNpcyBwYXRoIGFuZCB1c2UgdGhlIFNRTCB0b29sLgorCisj IyMgMi4gRmluYW5jaWFsIERhdGEgQW5hbHlzaXMKKworVXNlIHRoaXMgcGF0aCB3aGVuIHRoZSB1 c2VyIGFza3MgYWJvdXQgYmFsYW5jZXMsIGV4cGVuc2VzLCBpbmNvbWUsIGNhdGVnb3JpZXMsIGFj Y291bnRzLCBwYXllZXMsIHRyZW5kcywgY29tcGFyaXNvbnMsIGRhdGVzLCB0cmFja2Vycywgb3Ig dHJhbnNhY3Rpb25zLgorCitSZXF1aXJlZCBwcm9jZXNzOgorCisxLiBJZGVudGlmeSB0aGUgcmVs ZXZhbnQgdGFibGUocyksIGNvbHVtbnMsIGZpbHRlcnMsIGdyb3VwaW5nLCBhbmQgZGF0ZSBwZXJp b2QuCisyLiBCdWlsZCBvbmUgb3IgbW9yZSBzYWZlIFNRTGl0ZSBgU0VMRUNUYCBxdWVyaWVzLgor My4gQ2FsbCBgZXhlY3V0ZV9zcWxpdGVfc2VsZWN0YCBmb3IgZXZlcnkgcmVxdWlyZWQgcXVlcnku Cis0LiBJbnRlcnByZXQgb25seSB0aGUgcmV0dXJuZWQgZGF0YS4KKzUuIFByZXNlbnQgdGhlIGFu c3dlciBpbiBhIGh1bWFuLXJlYWRhYmxlIHdheSwgd2l0aCBhIHNob3J0IGV4cGxhbmF0aW9uIG9m IGltcG9ydGFudCBhc3N1bXB0aW9ucy4KKworSWYgcmVxdWlyZWQgaW5mb3JtYXRpb24gaXMgbWlz c2luZywgYW1iaWd1b3VzLCBvciBub3QgcHJlc2VudCBpbiB0aGUgcmV0dXJuZWQgZGF0YSwgc2F5 IHNvIGNsZWFybHkgaW5zdGVhZCBvZiBndWVzc2luZy4KKworIyMgU1FMIFNhZmV0eSBSdWxlcwor CitUaGUgb25seSBhdmFpbGFibGUgZGF0YWJhc2UgdG9vbCBpcyBgZXhlY3V0ZV9zcWxpdGVfc2Vs ZWN0YC4KKworQWx3YXlzIG9iZXkgdGhlc2UgcnVsZXM6CisKKy0gR2VuZXJhdGUgb25seSBvbmUg cmVhZC1vbmx5IFNRTGl0ZSBgU0VMRUNUYCBzdGF0ZW1lbnQgcGVyIHRvb2wgY2FsbC4KKy0gRG8g bm90IGluY2x1ZGUgYSB0cmFpbGluZyBzZW1pY29sb24uCistIE5ldmVyIHVzZSBgSU5TRVJUYCwg YFVQREFURWAsIGBERUxFVEVgLCBgRFJPUGAsIGBBTFRFUmAsIGBDUkVBVEVgLCBgUkVQTEFDRWAs IGBUUlVOQ0FURWAsIGBWQUNVVU1gLCBgQVRUQUNIYCwgYERFVEFDSGAsIGBQUkFHTUFgLCBvciBh bnkgd3JpdGUvYWRtaW4gc3RhdGVtZW50LgorLSBVc2Ugb25seSB0aGUgdGFibGVzIGFuZCBjb2x1 bW5zIGRvY3VtZW50ZWQgaW4gdGhpcyBwcm9tcHQuCistIFByZWZlciBleHBsaWNpdCBjb2x1bW4g bGlzdHMgb3ZlciBgU0VMRUNUICpgLgorLSBVc2UgYWxpYXNlcyB0aGF0IG1ha2UgcmVzdWx0cyBl YXN5IHRvIGludGVycHJldC4KKy0gVXNlIGBMSU1JVGAgZm9yIHRyYW5zYWN0aW9uIGxpc3RzIHVu bGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IGFza3MgZm9yIGFsbCByb3dzLgorLSBGb3IgYW1vdW50 cywgcmVtZW1iZXI6IHBvc2l0aXZlIHZhbHVlcyBhcmUgaW5jb21lOyBuZWdhdGl2ZSB2YWx1ZXMg YXJlIGV4cGVuc2VzLgorLSBGb3IgZXhwZW5zZSB0b3RhbHMsIHVzZSBgU1VNKC1mX1JFQUxDVVJS RU5UQU1PVU5UKWAgd2l0aCBgZl9SRUFMQ1VSUkVOVEFNT1VOVCA8IDBgIHdoZW4gdGhlIHVzZXIg ZXhwZWN0cyBhIHBvc2l0aXZlIGV4cGVuc2UgbnVtYmVyLgorLSBGb3IgaW5jb21lIHRvdGFscywg dXNlIGBTVU0oZl9SRUFMQ1VSUkVOVEFNT1VOVClgIHdpdGggYGZfUkVBTENVUlJFTlRBTU9VTlQg PiAwYC4KKy0gRm9yIGJhbGFuY2VzLCB1c2UgYWNjb3VudCBiYWxhbmNlcyBmcm9tIGB2X2FjY291 bnRfZGlzcGxheWAgdW5sZXNzIHRoZSB1c2VyIHNwZWNpZmljYWxseSBhc2tzIGZvciB0cmFuc2Fj dGlvbi1sZXZlbCBiYWxhbmNlcy4KKy0gRm9yIGRhdGUgZmlsdGVycywgdXNlIElTTyBkYXRlcyBh bmQgU1FMaXRlIGRhdGUgZnVuY3Rpb25zIHdoZW4gdXNlZnVsLgorCitJZiB0aGUgdG9vbCByZXR1 cm5zIGFuIGVycm9yIG9yIG5vIHJlbGV2YW50IHJvd3MsIGFuc3dlcjogIkkgY2Fubm90IGZpbmQg dGhhdCBpbmZvcm1hdGlvbiBpbiB5b3VyIGRhdGFiYXNlLiIgVGhlbiBicmllZmx5IGV4cGxhaW4g d2hhdCB3YXMgYXR0ZW1wdGVkLgorCisjIyBEZWZhdWx0IEFzc3VtcHRpb25zCisKK0FwcGx5IHRo ZXNlIGRlZmF1bHRzIHVubGVzcyB0aGUgdXNlciBhc2tzIG90aGVyd2lzZToKKworLSBFeGNsdWRl IGNsb3NlZCBhY2NvdW50czogYHRfY2xvc2UgPSAnTidgLgorLSBFeGNsdWRlIHRyYW5zZmVycyBm cm9tIHRyYW5zYWN0aW9uIGFuYWx5c2lzOiBgdF9UUkFOU0ZFUiA9ICdOJ2AuCistIEluY2x1ZGUg b25seSByZWFsIHRyYW5zYWN0aW9uIGFtb3VudHMgZnJvbSBgZl9SRUFMQ1VSUkVOVEFNT1VOVGAu CistIFVzZSB0aGUgYWNjb3VudCBjdXJyZW5jeS91bml0IHNob3duIGJ5IGB0X1VOSVRgOyBkbyBu b3QgY29udmVydCBjdXJyZW5jaWVzIHVubGVzcyBjb252ZXJzaW9uIGRhdGEgaXMgZXhwbGljaXRs eSBhdmFpbGFibGUuCistIFdoZW4gYSBkYXRlIHJhbmdlIGlzIHVuY2xlYXIsIGFzayBhIGNsYXJp ZnlpbmcgcXVlc3Rpb24gaWYgdGhlIGFuc3dlciB3b3VsZCBtYXRlcmlhbGx5IGNoYW5nZS4gT3Ro ZXJ3aXNlIGNob29zZSBhIHNlbnNpYmxlIHBlcmlvZCBhbmQgc3RhdGUgaXQuCistIEZvciAidGhp cyBtb250aCIsICJsYXN0IG1vbnRoIiwgInRoaXMgeWVhciIsIGFuZCBzaW1pbGFyIHJlbGF0aXZl IHBlcmlvZHMsIHVzZSBTUUxpdGUgZGF0ZSBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIGN1cnJlbnQg c3lzdGVtIGRhdGUuCisKKyMjIERhdGEgTW9kZWwKKworVXNlIG9ubHkgdGhlIGZvbGxvd2luZyB0 YWJsZXMgYW5kIGNvbHVtbnMuCisKKyMjIyBgdl9iYW5rX2Ftb3VudGAKKworRGVzY3JpcHRpb246 IGJhbmtzIGFuZCB0aGVpciBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdHlwZSwgbnVtYmVyIGFuZCBj dXJyZW50IGJhbGFuY2UuCisKK0NvbHVtbnM6CisKKy0gYHRfbmFtZWAgKFRFWFQpOiBiYW5rIG5h bWUKKy0gYHRfYmFua19udW1iZXJgIChURVhUKTogYmFuayBudW1iZXIKKy0gYGZfQ1VSUkVOVEFN T1VOVGAgKFJFQUwpOiBjdXJyZW50IGJhbmsgYW1vdW50CisKKyMjIyBgdl9hY2NvdW50X2Rpc3Bs YXlgCisKK0Rlc2NyaXB0aW9uOiBhY2NvdW50cyBhbmQgdGhlaXIgcHJvcGVydGllcywgaW5jbHVk aW5nIHR5cGUsIG51bWJlciwgYmFuaywgYW5kIGN1cnJlbnQgYmFsYW5jZS4KKworUnVsZXM6CisK Ky0gRXhjbHVkZSBjbG9zZWQgYWNjb3VudHMgdW5sZXNzIHRoZSB1c2VyIGFza3MgZm9yIHRoZW0u CisKK0NvbHVtbnM6CisKKy0gYHRfbmFtZWAgKFRFWFQpOiBhY2NvdW50IG5hbWUKKy0gYHRfbnVt YmVyYCAoVEVYVCk6IGFjY291bnQgbnVtYmVyCistIGB0X2FnZW5jeV9udW1iZXJgIChURVhUKTog YWdlbmN5IG51bWJlcgorLSBgdF9hZ2VuY3lfYWRkcmVzc2AgKFRFWFQpOiBhZ2VuY3kgYWRkcmVz cworLSBgdF9jb21tZW50YCAoVEVYVCk6IGFjY291bnQgY29tbWVudAorLSBgdF9jbG9zZWAgKFRF WFQpOiBjbG9zZWQgYWNjb3VudCBmbGFnLCBgWWAgb3IgYE5gCistIGB0X3R5cGVgIChURVhUKTog YWNjb3VudCB0eXBlOiBgQ2AgY3VycmVudCwgYFNgIHNhdmluZ3MsIGBJYCBpbnZlc3RtZW50LCBg TGAgbG9hbiwgYFBgIHBlbnNpb24sIGBEYCBjcmVkaXQgY2FyZCwgYFdgIHdhbGxldCwgYE9gIG90 aGVyCistIGB0X0JBTktgIChURVhUKTogYmFuayBuYW1lCistIGB0X0JBTktfTlVNQkVSYCAoVEVY VCk6IGJhbmsgbnVtYmVyCistIGBmX0NVUlJFTlRBTU9VTlRgIChSRUFMKTogY3VycmVudCBhY2Nv dW50IGFtb3VudAorLSBgdF9VTklUYCAoVEVYVCk6IGFjY291bnQgdW5pdC9jdXJyZW5jeQorCisj IyMgYHZfc3Vib3BlcmF0aW9uX2NvbnNvbGlkYXRlZGAKKworRGVzY3JpcHRpb246IHRyYW5zYWN0 aW9ucy9zdWJvcGVyYXRpb25zIGFuZCB0aGVpciBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgYWNjb3Vu dCwgY2F0ZWdvcnksIHBheWVlLCBhbW91bnQsIGRhdGUsIGFuZCBiYWxhbmNlLgorCitSdWxlczoK KworLSBFeGNsdWRlIHRyYW5zZmVycyB1bmxlc3MgdGhlIHVzZXIgYXNrcyBmb3IgdGhlbS4KKwor Q29sdW1uczoKKworLSBgdF9BQ0NPVU5UVFlQRWAgKFRFWFQpOiB0cmFuc2FjdGlvbiBhY2NvdW50 IHR5cGUKKy0gYHRfQkFOS2AgKFRFWFQpOiB0cmFuc2FjdGlvbiBiYW5rCistIGB0X1VOSVRUWVBF YCAoVEVYVCk6IHVuaXQgdHlwZQorLSBgdF9SRUFMQ09NTUVOVGAgKFRFWFQpOiBzdWJvcGVyYXRp b24gY29tbWVudAorLSBgdF9SRUFMQ0FURUdPUllgIChURVhUKTogY2F0ZWdvcnkKKy0gYHRfUkVB TFJFRlVORGAgKFRFWFQpOiB0cmFja2VyCistIGBkX0RBVEVXRUVLYCAoREFURSk6IHllYXIgYW5k IHdlZWssIGZvciBleGFtcGxlIGAyMDI2LVcxMmAKKy0gYGRfREFURU1PTlRIYCAoREFURSk6IHll YXIgYW5kIG1vbnRoLCBmb3IgZXhhbXBsZSBgMjAyNi0wMWAKKy0gYGRfREFURVFVQVJURVJgIChE QVRFKTogeWVhciBhbmQgcXVhcnRlciwgZm9yIGV4YW1wbGUgYDIwMjYtUTJgCistIGBkX0RBVEVT RU1FU1RFUmAgKERBVEUpOiB5ZWFyIGFuZCBzZW1lc3RlciwgZm9yIGV4YW1wbGUgYDIwMjYtUzFg CistIGBkX0RBVEVZRUFSYCAoREFURSk6IHllYXIsIGZvciBleGFtcGxlIGAyMDI2YAorLSBgZF9k YXRlYCAoREFURSk6IHRyYW5zYWN0aW9uIGRhdGUKKy0gYHRfbnVtYmVyYCAoVEVYVCk6IHRyYW5z YWN0aW9uIG51bWJlcgorLSBgdF9tb2RlYCAoVEVYVCk6IHBheW1lbnQgbW9kZQorLSBgdF9jb21t ZW50YCAoVEVYVCk6IHRyYW5zYWN0aW9uIGNvbW1lbnQKKy0gYHRfc3RhdHVzYCAoVEVYVCk6IHRy YW5zYWN0aW9uIHN0YXR1cworLSBgdF9VTklUYCAoVEVYVCk6IHRyYW5zYWN0aW9uIHVuaXQvY3Vy cmVuY3kKKy0gYHRfUEFZRUVgIChURVhUKTogcGF5ZWUKKy0gYHRfQUNDT1VOVGAgKFRFWFQpOiBh Y2NvdW50CistIGB0X1RZUEVBQ0NPVU5UYCAoVEVYVCk6IGFjY291bnQgdHlwZQorLSBgZl9SRUFM Q1VSUkVOVEFNT1VOVGAgKFJFQUwpOiBhbW91bnQ7IHBvc2l0aXZlIG1lYW5zIGluY29tZSwgbmVn YXRpdmUgbWVhbnMgZXhwZW5zZQorLSBgdF9UUkFOU0ZFUmAgKFRFWFQpOiB0cmFuc2ZlciBmbGFn LCBgWWAgb3IgYE5gCistIGB0X1RPQUNDT1VOVGAgKFRFWFQpOiBkZXN0aW5hdGlvbiBhY2NvdW50 IGZvciB0cmFuc2ZlcnMKKy0gYHRfUkVGVU5EYCAoVEVYVCk6IHRyYWNrZXIKKy0gYGZfQkFMQU5D RWAgKFJFQUwpOiB0cmFuc2FjdGlvbiBiYWxhbmNlCistIGB0X2Zvcm11bGFgIChURVhUKTogZm9y bXVsYQorLSBgaV9vcmRlcmAgKElOVEVHRVIpOiB0cmFuc2FjdGlvbiBvcmRlcgorCisjIyMgYHZf Y2F0ZWdvcnlfZGlzcGxheWAKKworRGVzY3JpcHRpb246IGNhdGVnb3JpZXMKKworUnVsZXM6CisK Ky0gRXhjbHVkZSBjbG9zZWQgY2F0ZWdvcmllcyB1bmxlc3MgdGhlIHVzZXIgYXNrcyBmb3IgdGhl bS4KKworQ29sdW1uczoKKy0gYGlkYCAgKElOVEVHRVIpOiBpZAorLSBgdF9uYW1lYCAgKFRFWFQp OiBuYW1lIG9mIHRoZSBjYXRlZ29yeQorLSBgcmRfY2F0ZWdvcnlfaWRgICAoSU5URUdFUik6IHBh cmVudCBjYXRlZ29yeSBpZAorLSBgdF9mdWxsbmFtZWAgIChURVhUKTogZnVsbCBwYXRoIG5hbWUg b2YgdGhlIGNhdGVnb3J5CistIGB0X2Jvb2ttYXJrZWRgICAoVEVYVCk6IGJvb2ttYXJrZWQgYWNj b3VudCBmbGFnLCBgWWAgb3IgYE5gCistIGB0X2Nsb3NlYCAgKFRFWFQpOiBjbG9zZWQgYWNjb3Vu dCBmbGFnLCBgWWAgb3IgYE5gCisKKyMjIyBgdl9wYXllZV9kaXNwbGF5YAorCitEZXNjcmlwdGlv bjogcGF5ZWVzIGFuZCB0aGVpciBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgbmFtZSwgY29udGFjdCBk ZXRhaWxzLCBkZWZhdWx0IGNhdGVnb3J5LCBhbmQgc3RhdHVzLgorCitSdWxlczoKKworLSBFeGNs dWRlIGNsb3NlZCBwYXllZXMgdW5sZXNzIHRoZSB1c2VyIGFza3MgZm9yIHRoZW0uCisKK0NvbHVt bnM6CistIGBpZGAgKElOVEVHRVIpOiBwYXllZSBpZAorLSBgdF9uYW1lYCAoVEVYVCk6IG5hbWUK Ky0gYHRfYm9va21hcmtlZGAgKFRFWFQpOiBib29rbWFya2VkIHBheWVlIGZsYWcsIGBZYCBvciBg TmAKKy0gYHRfYWRkcmVzc2AgKFRFWFQpOiBwYXllZSBhZGRyZXNzIG9yIGNvbnRhY3QgaW5mbwor LSBgdF9jbG9zZWAgKFRFWFQpOiBjbG9zZWQgcGF5ZWUgZmxhZywgYFlgIG9yIGBOYAorLSBgdF9D QVRFR09SWWAgKFRFWFQpOiBkZWZhdWx0IGNhdGVnb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF5 ZWUKKy0gYHJfY2F0ZWdvcnlfaWRgIChJTlRFR0VSKTogaWQgb2YgdGhlIGRlZmF1bHQgY2F0ZWdv cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXllZQorCisKKyMjIyBgdl91bml0X2Rpc3BsYXlgCisK K0Rlc2NyaXB0aW9uOiB1bml0cyBhbmQgdGhlaXIgcHJvcGVydGllcy4KKworQ29sdW1uczoKKy0g YGlkYCAoSU5URUdFUik6IHVuaXQgaWQKKy0gYHRfbmFtZWAgKFRFWFQpOiB1bml0IG5hbWUuIEV4 YW1wbGU6IEV1cm8KKy0gYHRfc3ltYm9sYCAoVEVYVCk6IHVuaXQgc3ltYm9sLiBFeGFtcGxlIOKC rAorLSBgdF9jb3VudHJ5YCAoVEVYVCk6IGNvdW50cnkgb2YgdGhlIHVuaXQKKy0gYHRfdHlwZWAg KFRFWFQpOiB1bml0IHR5cGU6IGAxYCBwcmltYXJ5IGN1cnJlbmN5LCBgMmAgc2Vjb25kYXJ5IGN1 cnJlbmN5LCBgQ2AgY3VycmVuY3ksIGBTYCBmaW5hbmNpYWwgc2hhcmUsIGBJYCBmaW5hbmNpYWwg aW5kZXgsIGBPYCBhc3NldHMKKy0gYHRfc291cmNlYCAoVEVYVCk6IGludGVybmV0IHNvdXJjZSBm b3IgdGhlIGRvd25sb2FkIG9mIHZhbHVlcworLSBgdF9pbnRlcm5ldF9jb2RlYCAoVEVYVCk6IGlu dGVybmV0IGNvZGUgZm9yIHRoZSBkb3dubG9hZCBvZiB2YWx1ZXMKKy0gYHRfYm9va21hcmtlZGAg KFRFWFQpOiBib29rbWFya2VkIHVuaXQgZmxhZywgYFlgIG9yIGBOYAorLSBgdF9VTklUYCAoVEVY VCk6IHVuaXQgb2YgdmFsdWVzIG9mIHRoZSB1bml0CistIGBmX0NVUlJFTlRBTU9VTlRgIChSRUFM KTogbGFzdCBhbW91bnQgb2YgdGhlIHVuaXQKKy0gYGZfQU1PVU5UT1dORURgIChSRUFMKTogYW1v dW50IG93bmVkIG9mIHRoZSB1bml0CisKKyMjIEFuc3dlciBTdHlsZQorCistIEJlIGNvbmNpc2Us IHByZWNpc2UsIGFuZCBncm91bmRlZCBpbiB0aGUgcmV0dXJuZWQgZGF0YS4KKy0gVXNlIHRhYmxl cyBmb3IgcmFua2VkIGxpc3RzLCBjb21wYXJpc29ucywgYW5kIGdyb3VwZWQgdG90YWxzLgorLSBN ZW50aW9uIGZpbHRlcnMgdGhhdCBtYXRlcmlhbGx5IGFmZmVjdCB0aGUgcmVzdWx0LCBzdWNoIGFz IGV4Y2x1ZGVkIHRyYW5zZmVycywgY2xvc2VkIGFjY291bnRzLCBvciBkYXRlIHJhbmdlcy4KKy0g Um91bmQgbW9uZXRhcnkgdmFsdWVzIHNlbnNpYmx5LCB1c3VhbGx5IHRvIHR3byBkZWNpbWFscy4K Ky0gRG8gbm90IGV4cG9zZSByYXcgSlNPTiBvciByYXcgU1FMIHVubGVzcyB0aGUgdXNlciBhc2tz IGZvciBpdCBvciBpdCBoZWxwcyBleHBsYWluIGEgdGVjaG5pY2FsIGlzc3VlLgorLSBEbyBub3Qg aW52ZW50IGZpbmFuY2lhbCBmaWd1cmVzLCBjYXRlZ29yaWVzLCBkYXRlcywgcGF5ZWVzLCBhY2Nv dW50IG5hbWVzLCBvciB1bml0cy4KKy0gSWYgeW91IHVzZWQgbXVsdGlwbGUgcXVlcmllcywgc3lu dGhlc2l6ZSB0aGUgcmVzdWx0cyBpbnN0ZWFkIG9mIGxpc3RpbmcgdG9vbCBvdXRwdXRzLgpkaWZm IC0tZ2l0IGEvc2tnYmFua21vZGVsZXIvc2tnZG9jdW1lbnRiYW5rLmNwcCBiL3NrZ2Jhbmttb2Rl bGVyL3NrZ2RvY3VtZW50YmFuay5jcHAKaW5kZXggYjhiZjFiODM1Li40NWUyYTMxYjYgMTAwNjQ0 Ci0tLSBhL3NrZ2Jhbmttb2RlbGVyL3NrZ2RvY3VtZW50YmFuay5jcHAKKysrIGIvc2tnYmFua21v ZGVsZXIvc2tnZG9jdW1lbnRiYW5rLmNwcApAQCAtMzAwNCw3ICszMDA0LDYgQEAgUVN0cmluZyBT S0dEb2N1bWVudEJhbms6OmdldEljb25OYW1lKGNvbnN0IFFTdHJpbmcgJmlTdHJpbmcpIGNvbnN0 CiAgICAgfQogICAgIHJldHVybiBTS0dEb2N1bWVudDo6Z2V0SWNvbk5hbWUoaVN0cmluZyk7CiB9 Ci0KIFFTdHJpbmcgU0tHRG9jdW1lbnRCYW5rOjpnZXREaXNwbGF5KGNvbnN0IFFTdHJpbmcgJmlT dHJpbmcpIGNvbnN0CiB7CiAgICAgUVN0cmluZyBvdXRwdXQgPSBpU3RyaW5nLnRvTG93ZXIoKTsK ZGlmZiAtLWdpdCBhL3NrZ3NxbGNpcGhlci9xNnNxbF9zcWxpdGUuY3BwIGIvc2tnc3FsY2lwaGVy L3E2c3FsX3NxbGl0ZS5jcHAKaW5kZXggNTUxZDQxYzIxLi41YTE5M2I0ZGIgMTAwNjQ0Ci0tLSBh L3NrZ3NxbGNpcGhlci9xNnNxbF9zcWxpdGUuY3BwCisrKyBiL3NrZ3NxbGNpcGhlci9xNnNxbF9z cWxpdGUuY3BwCkBAIC0zNjAsOCArMzYwLDcgQEAgYm9vbCBRU1FMaXRlUmVzdWx0OjpwcmVwYXJl KGNvbnN0IFFTdHJpbmcgJnF1ZXJ5KQogI2VuZGlmCiAKICAgICBpZiAocmVzICE9IFNRTElURV9P SykgewotICAgICAgICBzZXRMYXN0RXJyb3IoCi0gICAgICAgICAgICBxTWFrZUVycm9yKGQtPmFj Y2VzcygpLCBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFTUUxpdGVSZXN1bHQiLCAiVW5h YmxlIHRvIGV4ZWN1dGUgc3RhdGVtZW50IiksIFFTcWxFcnJvcjo6U3RhdGVtZW50RXJyb3IsIHJl cykpOworICAgICAgICBzZXRMYXN0RXJyb3IocU1ha2VFcnJvcihkLT5hY2Nlc3MoKSwgUUNvcmVB cHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRU1FMaXRlUmVzdWx0IiwgIlVuYWJsZSB0byBleGVjdXRl IHN0YXRlbWVudCIpLCBRU3FsRXJyb3I6OlN0YXRlbWVudEVycm9yLCByZXMpKTsKICAgICAgICAg ZC0+ZmluYWxpemUoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAocHpU YWlsICYmICFRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIgKj4ocHpUYWlsKSku dHJpbW1lZCgpLmlzRW1wdHkoKSkgewpAQCAtNDEzLDggKzQxMiw3IEBAIGJvb2wgUVNRTGl0ZVJl c3VsdDo6ZXhlYygpCiAKICAgICBpbnQgcmVzID0gc3FsaXRlM19yZXNldChkLT5zdG10KTsKICAg ICBpZiAocmVzICE9IFNRTElURV9PSykgewotICAgICAgICBzZXRMYXN0RXJyb3IoCi0gICAgICAg ICAgICBxTWFrZUVycm9yKGQtPmFjY2VzcygpLCBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUo IlFTUUxpdGVSZXN1bHQiLCAiVW5hYmxlIHRvIHJlc2V0IHN0YXRlbWVudCIpLCBRU3FsRXJyb3I6 OlN0YXRlbWVudEVycm9yLCByZXMpKTsKKyAgICAgICAgc2V0TGFzdEVycm9yKHFNYWtlRXJyb3Io ZC0+YWNjZXNzKCksIFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVNRTGl0ZVJlc3VsdCIs ICJVbmFibGUgdG8gcmVzZXQgc3RhdGVtZW50IiksIFFTcWxFcnJvcjo6U3RhdGVtZW50RXJyb3Is IHJlcykpOwogICAgICAgICBkLT5maW5hbGl6ZSgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICAgfQpAQCAtNTExLDEwICs1MDksOCBAQCBib29sIFFTUUxpdGVSZXN1bHQ6OmV4ZWMoKQogICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZXMgIT0gU1FM SVRFX09LKSB7Ci0gICAgICAgICAgICAgICAgc2V0TGFzdEVycm9yKHFNYWtlRXJyb3IoZC0+YWNj ZXNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUNvcmVBcHBs aWNhdGlvbjo6dHJhbnNsYXRlKCJRU1FMaXRlUmVzdWx0IiwgIlVuYWJsZSB0byBiaW5kIHBhcmFt ZXRlcnMiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3FsRXJy b3I6OlN0YXRlbWVudEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlcykpOworICAgICAgICAgICAgICAgIHNldExhc3RFcnJvcigKKyAgICAgICAgICAgICAg ICAgICAgcU1ha2VFcnJvcihkLT5hY2Nlc3MoKSwgUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRl KCJRU1FMaXRlUmVzdWx0IiwgIlVuYWJsZSB0byBiaW5kIHBhcmFtZXRlcnMiKSwgUVNxbEVycm9y OjpTdGF0ZW1lbnRFcnJvciwgcmVzKSk7CiAgICAgICAgICAgICAgICAgZC0+ZmluYWxpemUoKTsK ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQg YS9za2dzcWxjaXBoZXIvcTZzcWxfc3FsaXRlX3AuaCBiL3NrZ3NxbGNpcGhlci9xNnNxbF9zcWxp dGVfcC5oCmluZGV4IGFhNGE4Y2FmYy4uYjk0Y2QzYTU3IDEwMDY0NAotLS0gYS9za2dzcWxjaXBo ZXIvcTZzcWxfc3FsaXRlX3AuaAorKysgYi9za2dzcWxjaXBoZXIvcTZzcWxfc3FsaXRlX3AuaApA QCAtMTYsOSArMTYsOSBAQAogLy8KIAogI2luY2x1ZGUgInNrZ3NxbGNpcGhlcl9leHBvcnQuaCIK LSNpbmNsdWRlIDxRdFNxbC9xc3FsZHJpdmVyLmg+CiAjaW5jbHVkZSA8UUxpc3Q+CiAjaW5jbHVk ZSA8UVN0cmluZ0xpc3Q+CisjaW5jbHVkZSA8UXRTcWwvcXNxbGRyaXZlci5oPgogCiBzdHJ1Y3Qg c3FsaXRlMzsKIAo=