MjAwNC0wMy0yNSAgU3RhbiBTaGVicyAgPHNoZWJzQGFwcGxlLmNvbT4KCgkqIG1wdy86IFJlbW92ZSBzdWJkaXJlY3RvcnkgYW5kIGV2ZXJ5dGhpbmcgaW4gaXQuCgoyMDA0LTAzLTIzICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgoKCVBSIDUxLgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkIHdyYXBfY2hhci4KCjIwMDQtMDMtMjAgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KCgkqIGJmZGxpbmsuaCAoYmZkX2xpbmtfaW5mbyk6IENvcnJlY3QgY29tbWVudHMgZm9yIHRoZQoJdW5yZXNvbHZlZF9zeW1zX2luX29iamVjdHMgZmllbGQuCgoyMDA0LTAyLTI0ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHdhc2FiaXN5c3RlbXMuY29tPgoKCSogZHluLXN0cmluZy5oOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCgoyMDA0LTAyLTIzICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHdhc2FiaXN5c3RlbXMuY29tPgoKCSogZHluLXN0cmluZy5oOiBSZW1vdmUgdGVzdCBvZiBJTl9MSUJHQ0MyIGFuZCBJTl9HTElCQ1BQX1YzIGFuZAoJdGhlIGFzc29jaWF0ZWQgI2RlZmluZXMuCgoyMDA0LTAxLTEyICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHdhc2FiaXN5c3RlbXMuY29tPgoKCSogZGVtYW5nbGUuaDogSW5zdGVhZCBvZiBjaGVja2luZyBBTlNJX1BST1RPVFlQRVMsIGp1c3QgaW5jbHVkZQoJImxpYmliZXJ0eS5oIi4KCgkqIGRlbWFuZ2xlLmg6IElmIEFOU0lfUFJPVE9UWVBFUyBpcyBkZWZpbmVkLCBpbmNsdWRlIDxzdGRkZWYuaD4uCgoJKiBkZW1hbmdsZS5oIChlbnVtIGRlbWFuZ2xlX2NvbXBvbmVudF90eXBlKTogRGVmaW5lLgoJKHN0cnVjdCBkZW1hbmdsZV9vcGVyYXRvcl9pbmZvKTogRGVjbGFyZS4KCShzdHJ1Y3QgZGVtYW5nbGVfYnVpbHRpbl90eXBlX2luZm8pOiBEZWNsYXJlLgoJKHN0cnVjdCBkZW1hbmdsZV9jb21wb25lbnQpOiBEZWZpbmUuCgkoY3BsdXNfZGVtYW5nbGVfZmlsbF9jb21wb25lbnQpOiBEZWNsYXJlLgoJKGNwbHVzX2RlbWFuZ2xlX2ZpbGxfbmFtZSk6IERlY2xhcmUuCgkoY3BsdXNfZGVtYW5nbGVfZmlsbF9idWlsdGluX3R5cGUpOiBEZWNsYXJlLgoJKGNwbHVzX2RlbWFuZ2xlX2ZpbGxfb3BlcmF0b3IpOiBEZWNsYXJlLgoJKGNwbHVzX2RlbWFuZ2xlX2ZpbGxfZXh0ZW5kZWRfb3BlcmF0b3IpOiBEZWNsYXJlLgoJKGNwbHVzX2RlbWFuZ2xlX2ZpbGxfY3RvciwgY3BsdXNfZGVtYW5nbGVfZmlsbF9kdG9yKTogRGVjbGFyZS4KCShjcGx1c19kZW1hbmdsZV92M19jb21wb25lbnRzKTogRGVjbGFyZS4KCShjcGx1c19kZW1hbmdsZV9wcmludCk6IERlY2xhcmUuCgoyMDAzLTEyLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CgoJKiBpbmNsdWRlL2ZpYmhlYXAuaCAoZmlibm9kZSk6IFVzZSBfX2V4dGVuc2lvbl9fIGZvcgoJYml0LWZpZWxkcyBtYXJrIGFuZCBkZWdyZWUgaWYgX19HTlVDX18uCgoyMDAzLTEyLTE4ICBLYXp1IEhpcmF0YSAgPGthenVAY3MudW1hc3MuZWR1PgoKCSogaW5jbHVkZS9maWJoZWFwLmggKGZpYm5vZGUpOiBVc2UgdW5zaWduZWQgbG9uZyBpbnQgZm9yCgliaXQtZmllbGRzIGlmIF9fR05VQ19fIGlzIGRlZmluZWQuCgoyMDAzLTEwLTIyICBKb3NlcGggUy4gTXllcnMgIDxqc21AcG9seW9taW5vLm9yZy51az4KCgkqIG9ic3RhY2suaDogTWVyZ2UgdGhlIGZvbGxvd2luZyBjaGFuZ2UgZnJvbSBnbnVsaWI6CgkyMDAzLTEwLTIxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCSogb2JzdGFjay5oIChvYnN0YWNrXzFncm93X2Zhc3QpOiBQcm9wZXJseSBwYXJlbnRoZXNpemUgYXJnLgoJKG9ic3RhY2tfcHRyX2dyb3dfZmFzdCwgb2JzdGFja19pbnRfZ3Jvd19mYXN0KToKCURvbid0IHVzZSBsdmFsdWUgY2FzdHMsIGFzIEdDQyBwbGFucyB0byByZW1vdmUgc3VwcG9ydCBmb3IgdGhlbQoJaW4gR0NDIDMuNS4gIFJlcG9ydGVkIGJ5IEpvc2VwaCBTLiBNeWVycy4gIFRoaXMgYnVnCgl3YXMgYWxzbyBwcmVzZW50IGluIHRoZSBub24tR0NDIHZlcnNpb24sIGluZGljYXRpbmcgdGhhdCB0aGlzCgljb2RlIGhhZCBhbHdheXMgYmVlbiBidWdneSBhbmQgaGFkIG5ldmVyIGJlZW4gd2lkZWx5IHVzZWQuCgkob2JzdGFja18xZ3Jvdywgb2JzdGFja19wdHJfZ3Jvdywgb2JzdGFja19pbnRfZ3Jvdywgb2JzdGFja19ibGFuayk6CglVc2UgdGhlIGZhc3QgdmFyaWFudCBvZiBlYWNoIG1hY3JvLCByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZQoJZGVmaW5pZW5zIG9mIHRoZSBmYXN0IHZhcmlhbnQ7IHRoYXQgd2F5LCB3ZSdsbCBiZSBtb3JlIGxpa2VseSB0bwoJY2F0Y2ggZnV0dXJlIGJ1Z3MgaW4gdGhlIGZhc3QgdmFyaWFudHMuCgoyMDAzLTA5LTIyICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QHJlZGhhdC5jb20+CgoJKiBmbG9hdGZvcm1hdC5oIChzdHJ1Y3QgZmxvYXRmb3JtYXQpOiBBZGQgZmllbGQgImlzX3ZhbGlkIi4KCjIwMDMtMDktMTUgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAcmVkaGF0LmNvbT4KCgkqIGZsb2F0Zm9ybWF0LmggKGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSk6IE1ha2UgaW5wdXQgYnVmZmVyIGNvbnN0YW50LgoJKGZsb2F0Zm9ybWF0X2Zyb21fZG91YmxlLCBmbG9hdGZvcm1hdF9pc192YWxpZCk6IERpdHRvLgoKMjAwMy0wOS0xNSAgQW5kcmV3IENhZ25leSAgPGNhZ25leUByZWRoYXQuY29tPgoKCSogZmxvYXRmb3JtYXQuaCAoc3RydWN0IGZsb2F0Zm9ybWF0KTogTWFrZSAiZXhwX2JpYXMiIHNpZ25lZC4KCjIwMDMtMDktMTUgIERhbmllbCBKYWNvYm93aXR6ICA8ZHJvd0BtdmlzdGEuY29tPgoKCSogZmxvYXRmb3JtYXQuaCAoZmxvYXRmb3JtYXRfaXNfdmFsaWQpOiBBZGQgcHJvdG90eXBlLgoKMjAwMy0wNy0wOSAgQm9iIFdpbHNvbiAgPGJvYi53aWxzb25AYWNtLm9yZz4KCgkqIHh0ZW5zYS1jb25maWcuaDogVW5kZWYgYWxsIG1hY3JvcyBiZWZvcmUgZGVmaW5pbmcgdGhlbS4KCjIwMDMtMDctMDYgIEguSi4gTHUgPGhvbmdqaXUubHVAaW50ZWwuY29tPgoKCSogZGVtYW5nbGUuaDogU3VwcG9ydCBDKysuCgoyMDAzLTA3LTAxICBaYWNrIFdlaW5iZXJnICA8emFja0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZmlsZW5hbWVzLmg6IE5ldyBmaWxlIGltcG9ydGVkIGZyb20gYmludXRpbHMuCgoyMDAzLTA2LTMwICBCb2IgV2lsc29uICA8Ym9iLndpbHNvbkBhY20ub3JnPgoKCSogeHRlbnNhLWNvbmZpZy5oOiBOZXcgZmlsZSBpbXBvcnRlZCBmcm9tIGJpbnV0aWxzLgoKMjAwMy0wNi0yMiAgWmFjayBXZWluYmVyZyAgPHphY2tAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNhZmUtY3R5cGUuaCAoSENfVU5LTk9XTiwgSENfQVNDSUksIEhDX0VCQ0RJQyk6IFJlbmFtZSB0bwoJSE9TVF9DSEFSU0VUX1VOS05PV04sIEhPU1RfQ0hBUlNFVF9BU0NJSSwgSE9TVF9DSEFSU0VUX0VCQ0RJQwoJcmVzcGVjdGl2ZWx5LgoKMjAwMy0wNi0yMSAgWmFjayBXZWluYmVyZyAgPHphY2tAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNhZmUtY3R5cGUuaCAoSENfVU5LTk9XTiwgSENfQVNDSUksIEhDX0VCQ0RJQywgSE9TVF9DSEFSU0VUKToKCU5ldyAjZGVmaW5lcy4KCjIwMDMtMDYtMTcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFuc2lkZWNsLmg6IERlbGV0ZSBIQVZFX0xPTkdfRE9VQkxFIEdDQyBib290c3RyYXAgc3VwcG9ydC4KCjIwMDMtMDUtMTUgIEppbSBCbGFuZHkgIDxqaW1iQHJlZGhhdC5jb20+CgoJKiBsaWJpYmVydHkuaCAoaGV4X3ZhbHVlKTogTWFrZSB0aGUgdmFsdWUgYW4gdW5zaWduZWQgaW50LCB0bwoJYXZvaWQgdW5leHBlY3RlZCBzaWduLWV4dGVuc2lvbiB3aGVuIGNhc3QgdG8gdW5zaWduZWQgdHlwZXMgbGFyZ2VyCgl0aGFuIGludCAtLS0gbGlrZSBiZmRfdm1hLCBvbiBzb21lIHBsYXRmb3Jtcy4KCShfaGV4X3ZhbHVlKTogVXBkYXRlIGRlY2xhcmF0aW9uLgoKMjAwMy0wNS0wNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHJlZGhhdC5jb20+CgoJKiBoYXNodGFiLmggKGl0ZXJhdGl2ZV9oYXNoKTogUHJvdG90eXBlLgoJKGl0ZXJhdGl2ZV9oYXNoX29iamVjdCk6IE5ldyBtYWNyby4KCjIwMDMtMDMtMTcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFuc2lkZWNsLmggKEFUVFJJQlVURV9OT05OVUxMLCBBVFRSSUJVVEVfTlVMTF9QUklOVEYsCglBVFRSSUJVVEVfTlVMTF9QUklOVEZfMSwgQVRUUklCVVRFX05VTExfUFJJTlRGXzIsCglBVFRSSUJVVEVfTlVMTF9QUklOVEZfMywgQVRUUklCVVRFX05VTExfUFJJTlRGXzQsCglBVFRSSUJVVEVfTlVMTF9QUklOVEZfNSk6IE5ldy4KCShBVFRSSUJVVEVfUFJJTlRGKTogQWRkIEFUVFJJQlVURV9OT05OVUxMLgoKMjAwMy0wMy0xNyAgSmFuIEh1Ymlja2EgIDxqaEBzdXNlLmN6PgoKCSogaGFzaHRhYi5oIChodGFiX3RyYXZlcnNlX25vcmVzaXplKTogRGVjbGFyZS4KCjIwMDMtMDItMjcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxpYmliZXJ0eS5oOiBEb2N1bWVudCByZXR1cm4gdmFsdWUgb2YgcGh5c21lbSByb3V0aW5lcy4KCjIwMDMtMDItMjAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxpYmliZXJ0eS5oIChwaHlzbWVtX3RvdGFsLCBwaHlzbWVtX2F2YWlsYWJsZSk6IFByb3RvdHlwZS4KCjIwMDMtMDItMjAgIERhbmllbCBKYWNvYm93aXR6ICA8ZHJvd0BtdmlzdGEuY29tPgoKCSogbGliaWJlcnR5LmggKGxyZWFscGF0aCk6IEFkZCBkZWNsYXJhdGlvbi4KCjIwMDMtMDEtMjYgIERhbmllbCBKYWNvYm93aXR6ICA8ZHJvd0BtdmlzdGEuY29tPgoKCSogaGFzaHRhYi5oIChodGFiX2FsbG9jX3dpdGhfYXJnLCBodGFiX2ZyZWVfd2l0aF9hcmcpOiBBZGQgbmV3IHR5cGVzLgoJKHN0cnVjdCBodGFiKTogQWRkIGFsbG9jX2FyZywgYWxsb2Nfd2l0aF9hcmdfZiwgZnJlZV93aXRoX2FyZ19mLgoJKGh0YWJfY3JlYXRlX2FsbG9jX2V4KTogTmV3IHByb3RvdHlwZS4KCShodGFiX3NldF9mdW5jdGlvbnNfZXgpOiBOZXcgcHJvdG90eXBlLgoKMjAwMi0wNy0xNyAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0ByZWRoYXQuY29tPgoKCSogc3BsYXktdHJlZS5oIChHVFkpOiBEZWZpbmUgaWYgdW5kZWZpbmVkLgoJKHNwbGF5X3RyZWVfYWxsb2NhdGVfZm4pOiBSZXR1cm4gUFRSIGZvciBjb21wYXRpYmlsaXR5LCBub3Qgdm9pZCAqLgoJKHN0cnVjdCBzcGxheV90cmVlX25vZGVfcyk6IFN1cHBvcnQgZ2VuZ3R5cGUuCgkoc3RydWN0IHNwbGF5X3RyZWVfcyk6IExpa2V3aXNlLiAgTWFrZSBhbGxvY2F0ZV9kYXRhIGEgUFRSLAoJbm90IGEgdm9pZCAqLgoKMjAwMi0xMS0yMyAgU2ltb24gQnVyZ2UgIDxzaW1vbmJAd2FzYWJpc3lzdGVtcy5jb20+CgoJKiBsaWJpYmVydHkuaCAoYmFzZW5hbWUpOiBBZGQgTmV0QlNEIHRvIHRoZSBsaXN0LgoKMjAwMi0xMS0yMiAgRGFuaWVsIEphY29ib3dpdHogIDxkcm93QG12aXN0YS5jb20+CgoJKiBsaWJpYmVydHkuaCAobWFrZV9yZWxhdGl2ZV9wcmVmaXgpOiBBZGQgcHJvdG90eXBlLgoKMjAwMi0xMC0yNiAgUm9nZXIgU2F5bGUgIDxyb2dlckBleWVzb3Blbi5jb20+CgoJKiBwYXJ0aXRpb24uaDogIENsb3NlIHRoZSBleHRlcm4gIkMiIHNjb3BlIHdoZW4gY29tcGlsaW5nIHdpdGggQysrLgoKMjAwMi0xMC0yNiAgUm9nZXIgU2F5bGUgIDxyb2dlckBleWVzb3Blbi5jb20+CgkgICAgREogRGVsb3JpZSA8ZGpAcmVkaGF0LmNvbT4KCglQUiBib290c3RyYXAvODM1MQoJKiBnZXRvcHQuaDogQXZvaWQgcHJvdG90eXBpbmcgZ2V0b3B0IHdpdGggbm8gYXJndW1lbnRzIGluIEMrKy4KCjIwMDItMTAtMjQgIE5hdGhhbiBUYWxsZW50ICA8ZXJheHhvbkBhbHVtbmkucmljZS5lZHU+CgoJKiBhbnNpZGVjbC5oIChfX1NURENfXyk6IEFkZCAoX19hbHBoYSAmJiBfX2NwbHVzcGx1cykgdG8gdGhlCglsaXN0IG9mCXBsYXRmb3JtIGNvbXBpbGVycyB0aGF0IG1heSBsb29rLCBzbWVsbCBhbmQgYWN0CglsaWtlIF9fU1REQ19fIGJ1dCB0aGF0IG1heSBub3QgZGVmaW5lIGl0LgoKMjAwMi0xMC0xMSAgRGF2aWQgTydCcmllbiAgPG9icmllbkBGcmVlQlNELm9yZz4KCgkqIGdldG9wdC5oOiBnZXRvcHQgaXMgaW4gdW5pc3RkLmggKGJhc2VkIG9uIFNVU3YyKS4KCjIwMDItMDktMTkgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgoKCSogbGliaWJlcnR5LmggKGFzcHJpbnRmLCB2YXNwcmludGYpOiBEb24ndCBkZWNsYXJlIHRoZW0gaWYgdGhlCgljb3JyZXNwb25kaW5nIEhBVkVfREVDTF8gbWFjcm8gaXMgMS4KCjIwMDItMDYtMjUgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CgoJKiBkZW1hbmdsZS5oOiAjaW5jbHVkZSAiYW5zaWRlY2wuaCIgcmF0aGVyIHRoYW4gI2luY2x1ZGUgPGFuc2lkZWNsLmg+LgoJKiBmaWJoZWFwLmg6IExpa2V3aXNlLgoJKiBoYXNodGFiLmg6IExpa2V3aXNlLgoJKiBwYXJ0aXRpb24uaDogTGlrZXdpc2UuCgkqIHNvcnQuaDogTGlrZXdpc2UuCgkqIHNwbGF5LXRyZWUuaDogTGlrZXdpc2UuCgoyMDAyLTA2LTI0ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgoKCSogbGliaWJlcnR5LmggKGJhc2VuYW1lKTogRG9uJ3QgZGVjbGFyZSBpZiBIQVZFX0RFQ0xfQkFTRU5BTUUuCgkqIGdldG9wdC5oIChnZXRvcHQpOiBEb24ndCBkZWNsYXJlIGlmIEhBVkVfREVDTF9HRVRPUFQuCgoyMDAyLTA2LTA2ICBESiBEZWxvcmllICA8ZGpAcmVkaGF0LmNvbT4KCgkqIGhhc2h0YWIuaCAoaHRhYik6IFJlYXJyYW5nZSBuZXcgbWVtYmVycyBmb3IgYmFja3dhcmQKCWNvbXBhdGliaWxpdHkuCgkoaHRhYl9jcmVhdGUpOiBEb24ndCB1c2UgYSBtYWNybyB0aGF0IHJlcXVpcmVzIG90aGVyIGhlYWRlcnMuCgoyMDAyLTA2LTA1ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQHJlZGhhdC5jb20+CgoJKiBoYXNodGFiLmggKGh0YWJfY3JlYXRlKTogUmVzdG9yZSBwcm90b3R5cGUgZm9yIGJhY2t3YXJkCgljb21wYXRpYmlsaXR5LgoJKGh0YWJfdHJ5X2NyZWF0ZSk6IExpa2V3aXNlLgoKMjAwMi0wNS0yMiAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0ByZWRoYXQuY29tPgoKCSogaGFzaHRhYi5oIChzdHJ1Y3QgaHRhYik6IFVwZGF0ZSBmb3IgY2hhbmdlIHRvIGxlbmd0aCBzcGVjaWZpZXIuCgoyMDAyLTA1LTEwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQHJlZGhhdC5jb20+CgoJKiBoYXNodGFiLmggKEdUWSk6IERlZmluZSBpZiB1bmRlZmluZWQuCgkoaHRhYl9hbGxvYyk6IE5ldyB0eXBlZGVmLgoJKGh0YWJfZnJlZSk6IE5ldyB0eXBlZGVmLgoJKHN0cnVjdCBodGFiKTogU3VwcG9ydCBnZW5ndHlwZTsgYWxsb3cgdXNlci1zcGVjaWZpZWQgbWVtb3J5CglhbGxvY2F0aW9uLgoJKGh0YWJfY3JlYXRlX2FsbG9jKTogTmV3LgoJKGh0YWJfY3JlYXRlKTogUmVwbGFjZSB3aXRoICNkZWZpbmUuCgkoaHRhYl90cnlfY3JlYXRlKTogRGVsZXRlLgoKMjAwMi0wNC0xNiAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KCgkqIHhyZWdleDIuaCAoX19yZXN0cmljdF9hcnIpOiBEZWZpbmUgdG8gX19yZXN0cmljdCBvbiBHQ0MKCTMuMSBhbmQgbGF0ZXIuICBEbyBub3QgcmVkZWZpbmUuCgoyMDAyLTA0LTAxICBQaGlsIEVkd2FyZHMgIDxwbWVAZ2NjLmdudS5vcmc+CgoJKiBkeW4tc3RyaW5nLmg6ICBBbHNvIGFsbG93IElOX0dMSUJDUFBfVjMgdG8gcmVkZWZpbmUgbmFtZXMuCgoyMDAyLTAzLTA2ICBBbmRyZXcgQ2FnbmV5ICA8YWMxMzEzMTNAcmVkaGF0LmNvbT4KCgkqIGZsb2F0Zm9ybWF0LmggKGZsb2F0Zm9ybWF0X2FybV9leHQpOiBEZWxldGUgZGVjbGFyYXRpb24uCgoyMDAyLTAyLTIyICBKaW0gQmxhbmR5ICA8amltYkByZWRoYXQuY29tPgoKCUFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgZnVuY3Rpb25zIGZvciBhbGxvY2F0aW5nIG1lbW9yeSBmb3IKCXNwbGF5IHRyZWUgcm9vdHMgYW5kIG5vZGVzLgoJKiBzcGxheS10cmVlLmggKHNwbGF5X3RyZWVfYWxsb2NhdGVfZm4sIHNwbGF5X3RyZWVfZGVhbGxvY2F0ZV9mbik6CglOZXcgdHlwZXMuCgkoc3BsYXlfdHJlZSk6IE5ldyBmaWVsZHM6IGBhbGxvY2F0ZScsIGBkZWFsbG9jYXRlJywgYW5kCglgYWxsb2NhdGVfZGF0YScuCgkoc3BsYXlfdHJlZV9uZXdfd2l0aF9hbGxvY2F0b3IpOiBOZXcgZnVuY3Rpb24gZGVjbGFyYXRpb24uCgoyMDAyLTAyLTA1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcmVkaGF0LmNvbT4KCgkqIGRlbWFuZ2xlLmggKGNwbHVzX2RlbWFuZ2xlX3YzKTogQWRkICJvcHRpb25zIiBwYXJtLgoJKGNwbHVzX2RlbWFuZ2xlX3YzX3R5cGUpOiBSZW1vdmUgcHJvdG90eXBlLgoJKERNR0xfVkVSQk9TRSk6IE5ldyBtYWNyby4KCShETUdMX1RZUEVTKTogTmV3IG1hY3JvLgoKMjAwMi0wMi0wMiAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogZGVtYW5nbGUuaCAoY3BsdXNfZGVtYW5nbGVfdjNfdHlwZSk6IE5ldyBwcm90b3R5cGUuCgoyMDAyLTAxLTI4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsaWJpYmVydHkuaCAoQ19hbGxvY2EpOiBBZGQgQVRUUklCVVRFX01BTExPQy4KCjIwMDEtMTItMDYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBkZW1hbmdsZS5oIChub19kZW1hbmdsaW5nKTogTmV3LgoJKE5PX0RFTUFOR0xJTkdfU1RZTEVfU1RSSU5HKTogTmV3LgoKMjAwMS0xMC0yNCAgTmVpbCBCb290aCAgPG5laWxAZGFpa29rdXlhLmRlbW9uLmNvLnVrPgoKCSogc2FmZS1jdHlwZS5oIChfc2NoX2lzYmFzaWMsIElTX0lTT0JBU0lDKTogTmV3LgoKMjAwMS0xMC0yMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGliaWJlcnR5LmggKGhleF9pbml0KTogUmV2ZXJ0IGRlbGV0ZS4KCgkqIGxpYmliZXJ0eS5oIChfaGV4X3ZhbHVlKTogQ29uc3QtaWZ5LgoJKGhleF9pbml0KTogRGVsZXRlLgoKMjAwMS0xMC0wNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZGVtYW5nbGUuaCAoZGVtYW5nbGVyX2VuZ2luZSk6IENvbnN0LWlmeS4KCSogbGliaWJlcnR5LmggKGJ1aWxkYXJndik6IExpa2V3aXNlLgoKMjAwMS0wOS0yNCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGliaWJlcnR5LmggKHJlY29uY2F0KTogTmV3IGZ1bmN0aW9uLgoKMjAwMS0wOS0xOCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGliaWJlcnR5LmggKGNvbmNhdCwgY29uY2F0X2xlbmd0aCwgY29uY2F0X2NvcHksIGNvbmNhdF9jb3B5MiwKCUFDT05DQVQpOiBJbXByb3ZlIGNvbW1lbnRzLgoKMjAwMS0wOS0xOCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KCgkqIG9iamFsbG9jLmggKE9CSkFMTE9DX0FMSUdOKTogRGVmaW5lIHVzaW5nIG9mZnNldG9mLgoKMjAwMS0wOS0xNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGliaWJlcnR5LmggKGNvbmNhdF9sZW5ndGgsIGNvbmNhdF9jb3B5LCBjb25jYXRfY29weTIsCglsaWJpYmVydHlfY29uY2F0X3B0ciwgQUNPTkNBVCk6IE5ldy4KCgkqIGxpYmliZXJ0eS5oIChBU1RSRFVQKTogTmV3IG1hY3JvLgoJbGliaWJlcnR5X29wdHIsIGxpYmliZXJ0eV9ucHRyLCBsaWJpYmVydHlfbGVuKTogRGVjbGFyZS4KCjIwMDEtMDgtMjkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFuc2lkZWNsLmg6IFVwZGF0ZSBjb21tZW50cyByZWZsZWN0aW5nIHByZXZpb3VzIGNoYW5nZS4KCjIwMDEtMDgtMjcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFuc2lkZWNsLmggKFZBX09QRU4sIFZBX0NMT1NFKTogQWxsb3cgbXVsdGlwbGUgdXNlcy4KCjIwMDEtMDgtMjMgIExhcnMgQnJpbmtob2ZmICA8bGFyc0Bub2NyZXcub3JnPgoKCSogZHluLXN0cmluZy5oLCBmaWJoZWFwLmgsIHBhcnRpdGlvbi5oLCBzb3J0LmgsIHNwbGF5LXRyZWUuaDoKCXJlcGxhY2UgIkdOVSBDQyIgd2l0aCAiR0NDIi4KCjIwMDEtMDgtMjEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBmaWJoZWFwLmg6IFRpZHkgZm9ybWF0dGluZy4KCShmaWJub2RlX3QpOiBMaW1pdCBkZWdyZWUgdG8gMzEgYml0cyB0byBhdm9pZCB3YXJuaW5nLgoKMjAwMS0wOC0yMCAgQW5kcmV3IENhZ25leSAgPGFjMTMxMzEzQHJlZGhhdC5jb20+CgoJKiBmbG9hdGZvcm1hdC5oIChmbG9hdGZvcm1hdF9hcm1fZXh0KTogRG9jdW1lbnQgYXMgZGVwcmVjYXRlZC4KCShmbG9hdGZvcm1hdF9hcm1fZXh0X2JpZywgZmxvYXRmb3JtYXRfYXJtX2V4dF9saXR0bGVieXRlX2JpZ3dvcmQpCgkoZmxvYXRmb3JtYXRfaWE2NF9zcGlsbF9saXR0bGUsIGZsb2F0Zm9ybWF0X2lhNjRfcXVhZF9saXR0bGUpCgkoZmxvYXRmb3JtYXRfaWE2NF9zcGlsbF9iaWcsIGZsb2F0Zm9ybWF0X2lhNjRfcXVhZF9iaWcpCgkoZmxvYXRmb3JtYXRfbTg4MTEwX2hhcnJpc19leHQpOiBEZWNsYXJlLgoKMjAwMS0wOC0yMCAgRGFuaWVsIEJlcmxpbiAgPGRhbkBjZ3NvZnR3YXJlLmNvbT4KCgkqIGZpYmhlYXAuaDogTmV3IGZpbGUuIEZpYm9uYWNjaSBoZWFwLgoKMjAwMS0wOC0xOCAgWmFjayBXZWluYmVyZyAgPHphY2t3QHBhbml4LmNvbT4KCgkqIGFuc2lkZWNsLmg6IFJlb3JnYW5pemUgZm9yIHJlYWRhYmlsaXR5LCByZW1vdmUgZG9jdW1lbnRhdGlvbgoJb2Ygb2Jzb2xldGUgbWFjcm9zLCBkb2N1bWVudCBQQVJBTVMgYW5kIFZQQVJBTVMuICBBZGQgbmV3CgltYWNyb3MgVkFfT1BFTiwgVkFfQ0xPU0UsIGFuZCBWQV9GSVhFREFSRyBmb3IgbmljZXIgdmFyaWFkaWMKCWZ1bmN0aW9uIGltcGxlbWVudGF0aW9uLgoKMjAwMS0wOC0xNiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KCgkqIGhhc2h0YWIuaCAoaHRhYl9oYXNoX3N0cmluZyk6IERlY2xhcmUuCgoyMDAxLTA4LTEwICBBbmRyZXcgQ2FnbmV5ICA8YWMxMzEzMTNAcmVkaGF0LmNvbT4KCgkqIGxpYmliZXJ0eS5oIChsYmFzZW5hbWUpOiBDaGFuZ2UgZnVuY3Rpb24gZGVjbGFyYXRpb24gdG8gcmV0dXJuIGEKCWNvbnN0IGNoYXIgcG9pbnRlci4KCjIwMDEtMDgtMDIgIE1hcmsgS2V0dGVuaXMgIDxrZXR0ZW5pc0BnbnUub3JnPgoKCSogeHJlZ2V4LmggKF9SRUdFWF9SRV9DT01QKTogRGVmaW5lLgoJKHJlX2NvbXApOiBEZWZpbmUgdG8geHJlX2NvbXAuCgkocmVfZXhlYyk6IERlZmluZSB0byB4cmVfZXhlYy4KCjIwMDEtMDctMTggIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KCgkqIHhyZWdleDIuaDogUGxhY2UgdW5kZXIgTEdQTCB2ZXJzaW9uIDIuMS4KCjIwMDEtMDctMTAgIEplZmYgSm9obnN0b24gIDxqam9obnN0bkByZWRoYXQuY29tPgoKCSogeHJlZ2V4Lmg6IE5ldyBmaWxlIHRvIHN1cHBvcnQgbGliaWJlcnR5IHJlZ2V4LgoJKiB4cmVnZXgyLmg6IERpdHRvLgoKMjAwMS0wNS0xNiAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jYXJuZWdpZW1lbGxvbi5lZHU+CgoJKiBwYXJ0aXRpb24uaDogRml4IG1pc3NwZWxsaW5nIG9mIGBpbXBsZW1lbnRhdGlvbicuCgoyMDAxLTA1LTEwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhbnNpZGVjbC5oIChOVUxMX1BUUik6IERlbGV0ZS4KCjIwMDEtMDUtMDcgIFphY2sgV2VpbmJlcmcgIDx6YWNrd0BzdGFuZm9yZC5lZHU+CgoJKiBkZW1hbmdsZS5oOiBVc2UgUEFSQU1TIGZvciBhbGwgcHJvdG90eXBlcy4KCSogdGVybmFyeS5oOiBVc2UgUEFSQU1TIGZvciBhbGwgcHJvdG90eXBlcy4gIFVzZSBQVFIsIG5vdCB2b2lkICouCglNYWtlIGFyZ3VtZW50cyBjb25zdGFudCB3aGVyZSBwb3NzaWJsZS4KCjIwMDEtMDUtMDcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmggKHNwbGF5X3RyZWVfbWF4KTogTmV3IGZ1bmN0aW9uLgoJKHNwbGF5X3RyZWVfbWluKTogTGlrZXdpc2UuCgoyMDAxLTA0LTE1ICBEYW5pZWwgQmVybGluICA8ZGFuQGNnc29mdHdhcmUuY29tPgoKCSogdGVybmFyeS5oOiBOZXcgZmlsZSAtIFRlcm5hcnkgc2VhcmNoIHRyZWUgaGVhZGVyLgoKMjAwMS0wNC0wMyAgWmFjayBXZWluYmVyZyAgPHphY2t3QHN0YW5mb3JkLmVkdT4KCgkqIGFuc2lkZWNsLmg6IEFsbCBsb2dpYyBmcm9tIGdjYy9nYW5zaWRlY2wuaCBtb3ZlZCBoZXJlLgoKMjAwMS0wMy0zMSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGliaWJlcnR5LmggKGFsbG9jYSk6IEhhbmRsZSBzZXR0aW5nIENfQUxMT0NBLgoKMjAwMS0wMy0yMCAgSmltIEJsYW5keSAgPGppbWJAcmVkaGF0LmNvbT4KCgkqIGRlbWFuZ2xlLmggKGVudW0gZ251X3YzX2NvbnN0cnVjdG9yX2tpbmRzLAoJaXNfZ251X3YzX21hbmdsZWRfY3RvciwgZW51bSBnbnVfdjNfZGVzdHJ1Y3Rvcl9raW5kcywKCWlzX2dudV92M19tYW5nbGVkX2R0b3IpOiBOZXcgZGVjbGFyYXRpb25zLgoKMjAwMS0wMy0xNCAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KCgkqIGFuc2lkZWNsLmg6IEZpeCBjb3B5cmlnaHQgZGF0ZXMuCgkqIGRlbWFuZ2xlLmg6IEZpeCBjb3B5cmlnaHQgZGF0ZXMuCgkqIGZsb2F0Zm9ybWF0Lmg6IEZpeCBjb3B5cmlnaHQgZGF0ZXMuCgkqIGZubWF0Y2guaDogRml4IGNvcHlyaWdodCBkYXRlcy4KCSogZ2V0b3B0Lmg6IEZpeCBjb3B5cmlnaHQgZGF0ZXMuCgkqIGxpYmliZXJ0eS5oOiBBZGQgRlNGIGNvcHlyaWdodCBub3RpY2UuCgkqIG1kNS5oOiBGaXggY29weXJpZ2h0IGRhdGVzLgoJKiBvYnN0YWNrLmg6IEZpeCBjb3B5cmlnaHQgZGF0ZXMuCgkqIHNwbGF5LXRyZWUuaDogRml4IGNvcHlyaWdodCBkYXRlcy4KCjIwMDEtMDMtMTAgIE5laWwgQm9vdGggIDxuZWlsQGRhaWtva3V5YS5kZW1vbi5jby51az4KCSAgICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmVAaGlhdWx5MS5oaWEubnJjLmNhPgoKCSogbGliaWJlcnR5Lmg6IEFkZCBsYmFzZW5hbWUuCgoyMDAxLTAzLTA2ICBaYWNrIFdlaW5iZXJnICA8emFja3dAc3RhbmZvcmQuZWR1PgoKCSogbGliaWJlcnR5Lmg6IFByb3RvdHlwZSBDX2FsbG9jYTsgZGVmaW5lIGFsbG9jYSB0byBlaXRoZXIKCV9fYnVpbHRpbl9hbGxvY2Egb3IgQ19hbGxvY2EgYXMgYXBwcm9wcmlhdGUuCgoyMDAxLTAzLTAxICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmVAaGlhdWx5MS5oaWEubnJjLmNhPgoKCSogc2FmZS1jdHlwZS5oIChfc2NoX3Rlc3QpOiBDYXN0IGVudW0gYml0IHRvIHVuc2lnbmVkIHNob3J0IGludCBmb3IgcGNjCgljb21wYXRpYmlsaXR5LgoKMjAwMC0xMi0xOCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogQ09QWUlORzogVXBkYXRlIHRvIGN1cnJlbnQKCWZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvTGljZW5zZXMvQ09QWUlORy0yLjAgKGZpeGVzIHJlZmVyZW5jZXMKCXRvIDE5eXkgYXMgZXhhbXBsZSB5ZWFyIGluIGNvcHlyaWdodCBub3RpY2UpLgoKMjAwMC0xMi0xNiAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBzYWZlLWN0eXBlLmg6IE1ha2UgY29kZSB3b3JrIG9uIGFsbCB0YXJnZXRzIGFuZCBub3QganVzdCBvbgoJdGFyZ2V0cyB3aGVyZSBhIGNoYXIgaXMgOCBiaXRzLgoKMjAwMC0xMi0wNyAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LnN0YW5mb3JkLmVkdT4KCgkqIHNhZmUtY3R5cGUuaDogTmV3IGZpbGUuCgoyMDAwLTEyLTA2ICBSb2RuZXkgQnJvd24gIDxSb2RuZXlCcm93bkBteW5kLmNvbT4KCgkqIGdldG9wdC5oIG9ic3RhY2suaDogU3RhbmRhcml6ZSBjb3B5cmlnaHQgc3RhdGVtZW50LgoKMjAwMC0xMi0wNCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KCgkqIGRlbWFuZ2xlLmg6IENoYW5nZSAibmV3X2FiaSIgdG8gInYzIiBldmVyeXdoZXJlLgoKMjAwMC0xMS0yMiAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LnN0YW5mb3JkLmVkdT4KCgkqIGxpYmliZXJ0eS5oOiBNb3ZlICNpbmNsdWRlcyB0byB0b3AuICBQcm90b3R5cGUgeG1hbGxvY19mYWlsZWQuCgoyMDAwLTExLTE1ICBLZW5uZXRoIEJsb2NrICA8a2VubmV0aC5ibG9ja0Bjb21wYXEuY29tPgoKCSogZGVtYW5nbGUuaDogQWRkIGduYXQgYW5kIGphdmEgZGVtYW5nbGUgc3R5bGVzLgoKMjAwMC0xMS0wNCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYml0cmFuZ2UuY29tPgoKCSogaGFzaHRhYi5oIChzdHJ1Y3QgaHRhYik6IEFkZCBtZW1iZXIgcmV0dXJuX2FsbG9jYXRpb25fZmFpbHVyZS4KCShodGFiX3RyeV9jcmVhdGUpOiBOZXcgcHJvdG90eXBlLiAgTWVudGlvbiB3aGljaCBmdW5jdGlvbnMgbWF5CglyZXR1cm4gTlVMTCB3aGVuIHRoaXMgaXMgdXNlZC4KCjIwMDAtMTEtMDMgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGJpdHJhbmdlLmNvbT4KCgkqIGhhc2h0YWIuaDogQ2hhbmdlIHZvaWQgKiB0byBQVFIgd2hlcmUgbmVjZXNzYXJ5LgoKMjAwMC0wOS0xMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNwbGF5LXRyZWUuaCAoc3BsYXlfdHJlZV9wcmVkZWNlc3Nvcik6IERlY2xhcmUuCgoyMDAwLTA5LTA1ICBKb2huIERhdmlkIEFuZ2xpbiA8ZGF2ZUBoaWF1bHkxLmhpYS5ucmMuY2E+CgoJKiBtZDUuaCAobWQ1X3VpbnQzMik6IENob29zZSB2aWEgSU5UX01BWCBpbnN0ZWFkIG9mIFVJTlRfTUFYLgoKMjAwMC0wOS0wNCAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGR5bi1zdHJpbmcuaDogQWRqdXN0IGZvcm1hdHRpbmcuCgkoZHluX3N0cmluZ19pbnNlcnRfY2hhcik6IE5ldyBtYWNyby4gIE5ldyBkZWNsYXJhdGlvbi4KCjIwMDAtMDgtMjggIEphc29uIE1lcnJpbGwgIDxqYXNvbkByZWRoYXQuY29tPgoKCSogbWQ1Lmg6IE5ldyBmaWxlLgoKMjAwMC0wOC0yNCAgR3JlZyBNY0dhcnkgIDxncmVnQG1jZ2FyeS5vcmc+CgoJKiBsaWJpYmVydHkuaCAoQVJSQVlfU0laRSk6IE5ldyBtYWNyby4KCjIwMDAtMDYtMjEgIEFsZXggU2FtdWVsICA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkeW4tc3RyaW5nLmggKGR5bl9zdHJpbmdfaW5pdCwgZHluX3N0cmluZ19uZXcsCglkeW5fc3RyaW5nX2RlbGV0ZSwgZHluX3N0cmluZ19yZWxlYXNlLCBkeW5fc3RyaW5nX3Jlc2l6ZSwKCWR5bl9zdHJpbmdfY2xlYXIsIGR5bl9zdHJpbmdfY29weSwgZHluX3N0cmluZ19jb3B5X2NzdHIsCglkeW5fc3RyaW5nX3ByZXBlbmQsIGR5bl9zdHJpbmdfcHJlcGVuZF9jc3RyLCBkeW5fc3RyaW5nX2luc2VydCwKCWR5bl9zdHJpbmdfaW5zZXJ0X2NzdHIsIGR5bl9zdHJpbmdfYXBwZW5kLCBkeW5fc3RyaW5nX2FwcGVuZF9jc3RyLAoJZHluX3N0cmluZ19hcHBlbmRfY2hhciwgZHluX3N0cmluZ19zdWJzdHJpbmdfZHluX3N0cmluZ19lcSk6CglEZWZpbmUgYXMgc2FtZSBuYW1lIHdpdGggX19jeGFfIHByZXBlbmRlZCwgaWYgSU5fTElCR0NDMi4KCShkeW5fc3RyaW5nX2luaXQsIGR5bl9zdHJpbmdfY29weSwgZHluX3N0cmluZ19jb3B5X2NzdHIsCglkeW5fc3RyaW5nX3ByZXBlbmQsIGR5bl9zdHJpbmdfcHJlcGVuZF9jc3RyLCBkeW5fc3RyaW5nX2luc2VydCwKCWR5bl9zdHJpbmdfaW5zZXJ0X2NzdHIsIGR5bl9zdHJpbmdfYXBwZW5kLCBkeW5fc3RyaW5nX2FwcGVuZF9jc3RyLAoJZHluX3N0cmluZ19hcHBlbmRfY2hhciwgZHluX3N0cmluZ19zdWJzdHJpbmcpOiBDaGFuZ2UgcmV0dXJuIHR5cGUKCXRvIGludC4KCjIwMDAtMDYtMDcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRlbWFuZ2xlLmggKGRlbWFuZ2xpbmdfc3R5bGVzKTogUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGluIGVudW0uCgoJKiBkeW4tc3RyaW5nLmggKGR5bl9zdHJpbmdfYXBwZW5kX2NoYXIpOiBDaGFuZ2UgcGFyYW1ldGVyIGZyb20KCWNoYXIgdG8gaW50LgoKMjAwMC0wNi0wNCAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGR5bi1zdHJpbmcuaDogTW92ZSBoZXJlIGZyb20gZ2NjL2R5bi1zdHJpbmcuaC4gIEFkZCBuZXcgZnVuY3Rpb25zLgoKCSogZGVtYW5nbGUuaCAoRE1HTF9HTlVfTkVXX0FCSSk6IE5ldyBtYWNyby4KCShETUdMX1NUWUxFX01BU0spOiBPciBpbiBETUdMX0dOVV9ORVdfQUJJLgoJKGN1cnJlbnRfZGVtYW5nbGluZ19zdHlsZSk6IEFkZCBnbnVfbmV3X2FiaV9kZW1hbmdsaW5nLgoJKEdOVV9ORVdfQUJJX0RFTUFOR0xJTkdfU1RZTEVfU1RSSU5HKTogTmV3IG1hY3JvLgoJKEdOVV9ORVdfQUJJX0RFTUFOR0xJTkcpOiBMaWtld2lzZS4KCShjcGx1c19kZW1hbmdsZV9uZXdfYWJpKTogTmV3IGRlY2xhcmF0aW9uLgoKVHVlIE1heSAzMCAxNjo1MzozNCAyMDAwICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiBmbG9hdGZvcm1hdC5oIChzdHJ1Y3QgZmxvYXRmb3JtYXQpOiBBZGQgZmllbGQgbmFtZS4KCjIwMDAtMDUtMjMgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdldG9wdC5oIChnZXRvcHQpOiBBbHNvIGNoZWNrIEhBVkVfREVDTF8qIHdoZW4gcHJvdG90eXBpbmcuCgoJKiBsaWJpYmVydHkuaCAoYmFzZW5hbWUpOiBMaWtld2lzZS4KCjIwMDAtMDUtMDYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGFuc2lkZWNsLmg6ICNkZWZpbmUgX19leHRlbnNpb25fXyB0byBub3RoaW5nIGlmCglHQ0NfVkVSU0lPTiA8IDIwMDguCgoyMDAwLTA1LTA0ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBkZW1hbmdsZS5oIChkZW1hbmdsZXJfZW5naW5lKTogQ29uc3RpZnkuCgpUaHUgTWF5ICA0IDE3OjE1OjI2IDIwMDAgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogc29ydC5oIChzeXMvdHlwZXMuaCk6IEZpbGUgaW5jbHVkZWQgdW5jb25kaXRpb25uYWx5LgoJKHN0ZGRlZi5oKTogRmlsZSBpbmNsdWRlIG9ubHkgI2lmZGVmIF9fU1REQ19fLgoKMjAwMC0wNS0wMyAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogc3ltY2F0Lmg6IFJlbW92ZSAjZW5kaWYgbGFiZWwuCgoyMDAwLTA0LTI4ICBLZW5uZXRoIEJsb2NrICA8YmxvY2tAemszLmRlYy5jb20+CgkgICAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiBkZW1hbmdsZS5oIChsaWJpYmVydHlfZGVtYW5nbGVycyk6IG5ldyB0YWJsZSBmb3IgZGlmZmVyZW50IHN0eWxlcy4KCShjcGx1c19kZW1hbmdsZV9zZXRfc3R5bGUpOiBOZXcgZnVuY3Rpb24gZm9yIHNldHRpbmcgc3R5bGUuCgkoY3BsdXNfZGVtYW5nbGVfbmFtZV90b19zdHlsZSk6IE5ldyBmdW5jdGlvbiB0byB0cmFuc2xhdGUgbmFtZS4KCjIwMDAtMDQtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBoYXNodGFiLmggKGhhc2hfcG9pbnRlcik6IERlY2xhcmUuCgkoZXFfcG9pbnRlcik6IExpa2V3aXNlLgoKMjAwMC0wNC0yMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNvcnQuaDogTmV3IGZpbGUuCgpUdWUgQXByIDE4IDE2OjIyOjMwIDIwMDAgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBoYXNodGFiLmggKGVudW0gaW5zZXJ0X29wdGlvbik6IE5ldyB0eXBlLgoJKGh0YWJfZmluZF9zbG90LCBodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2gpOiBVc2UgaXQuCgoyMDAwLTA0LTE3ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeW1jYXQuaDogSG9ub3IgYXV0b2NvbmYgbWFjcm8gSEFWRV9TVFJJTkdJWkUuICBBZGQKCWNvbW1lbnRzL2NhdmVhdHMgd2l0aCByZWdhcmQgdG8gdHJhZGl0aW9uYWwgQyBiZWhhdmlvci4KCjIwMDAtMDQtMDUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzcGxheS10cmVlLmggKHNwbGF5X3RyZWVfcmVtb3ZlKTogRGVjbGFyZS4KCjIwMDAtMDMtMzAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBoYXNodGFiLmggKGhhc2h2YWxfdCk6IE5ldyB0eXBlLgoJKGh0YWJfZmluZF93aXRoX2hhc2gpOiBVc2UgaXQgYXMgYW4gYXJndW1lbnQuCgkoaHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoKTogTGlrZXdpc2UuCgoyMDAwLTAzLTE0ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGhhc2h0YWIuaCAoaHRhYl90cmF2KTogTW9kaWZ5IHR5cGUgc28gdGhhdCBmaXJzdCBhcmcgaXMgb2YgdHlwZQoJdm9pZCAqKi4KCShodGFiX2ZpbmRfd2l0aF9oYXNoLCBodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2gpOiBEZWNsYXJlIG5ldwoJZnVuY3Rpb25zLgoKMjAwMC0wMy0wOSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHBhcnRpdGlvbi5oOiBOZXcgZmlsZS4KCjIwMDAtMDMtMDkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGhhc2h0YWIuaCAoc3RydWN0IGh0YWIpOiBBZGQgZGVsX2YuCgkoaHRhYl9kZWwpOiBOZXcgdHlwZS4KCShodGFiX2NyZWF0ZSk6IEFkZCBmb3VydGggYXJndW1lbnQuCgoyMDAwLTAzLTA4ICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuY3VtYi5vcmc+CgoJKiBoYXNodGFiLmggKGhhc2hfdGFibGVfdCk6IFJlbmFtZSB0byBodGFiX3QuCgkoc3RydWN0IGhhc2hfdGFibGUpOiBSZW5hbWUgdG8gc3RydWN0IGh0YWIuICBTaG9ydGVuIGVsZW1lbnQKCW5hbWVzLiAgUmVvcmRlciBlbGVtZW50cyBieSBzaXplLgoJKGh0YWJfaGFzaCwgaHRhYl9lcSwgaHRhYl90cmF2KTogTmV3IHR5cGVkZWZzIGZvciB0aGUgY2FsbGJhY2sKCWZ1bmN0aW9uIHBvaW50ZXJzLgoJKGhhc2hfdGFibGVfZW50cnlfdCk6IERpc2NhcmQ7IGp1c3QgdXNlIHZvaWQgKiBmb3IgZWxlbWVudAoJdHlwZS4KClNhdCBKYW4gIDEgMTk6MDY6NTIgMjAwMCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYml0cmFuZ2UuY29tPgoKCSogc3ltY2F0LmggKFNUUklOR1gpIFshX19TVERDX18gfHwgQUxNT1NUX1NURENdOiBDaGFuZ2UgIj8iIHRvICJzIgoJdG8gc3RyaW5naWZ5IGFyZ3VtZW50IHMuCgoxOTk5LTEyLTA1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3BsYXktdHJlZS5oIChzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlKTogUmVuYW1lIHRvIC4uLgoJKHN0cnVjdCBzcGxheV90cmVlX25vZGVfcyk6IC4uLiB0aGlzLgoJKHN0cnVjdCBzcGxheV90cmVlKTogUmVuYW1lIHRvIC4uLgoJKHN0cnVjdCBzcGxheV90cmVlX3MpOiAuLi4gdGhpcy4KCjE5OTktMTEtMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFuc2lkZWNsLmggKEFUVFJJQlVURV9NQUxMT0MpOiBOZXcgbWFjcm8uCgoJKiBsaWJpYmVydHkuaCAoYnVpbGRhcmd2LCBkdXBhcmd2LCBjb25jYXQsIGNob29zZV90ZW1wX2Jhc2UsCgltYWtlX3RlbXBfZmlsZSwgeG1hbGxvYywgeGNhbGxvYywgeHN0cmR1cCwgeG1lbWR1cCk6IEFkZAoJQVRUUklCVVRFX01BTExPQy4KCSh4YXRleGl0KTogUmVtb3ZlIF9fR05VQ19fIGNoZWNrLCBhZGQgQVRUUklCVVRFX05PUkVUVVJOLgoKMTk5OS0xMS0yOCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGliaWJlcnR5Lmg6IEluY2x1ZGUgc3RkYXJnLmggd2hlbiBBTlNJX1BST1RPVFlQRVMgaXMgZGVmaW5lZC4KCShhc3ByaW50ZiwgdmFzcHJpbnRmKTogUHJvdmlkZSBkZWNsYXJhdGlvbnMuCgpXZWQgTm92IDEwIDEyOjQzOjIxIDE5OTkgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoJCQkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFuc2lkZWNsLmg6IERlZmluZSBhbmQgdGVzdCBgR0NDX1ZFUlNJT04nLCBub3QgYEhBVkVfR0NDX1ZFUlNJT04nLgoKMTk5OS0xMC0yMyAwODo1MSAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogaGFzaHRhYi5oOiBHaXZlIGhhc2hfdGFibGVfdCBhIHN0cnVjdCB0YWcuICBBZGQgcHJvdG90eXBlcwoJZm9yIGNsZWFyX2hhc2hfdGFibGVfc2xvdCBhbmQgdHJhdmVyc2VfaGFzaF90YWJsZS4gIENvcnJlY3QKCXByb3RvdHlwZSBvZiBhbGxfaGFzaF90YWJsZV9jb2xsaXNpb25zLgoKRnJpIE9jdCAxNSAwMTo0Nzo1MSAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAbG9vbnkuY3lnbnVzLmNvbT4KCgkqIGhhc2h0YWIuaDogTmV3IGZpbGUuCgoxOTk5LTEwLTEwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhbnNpZGVjbC5oIChIQVZFX0dDQ19WRVJTSU9OKTogTmV3IG1hY3JvLiAgVXNlIGl0IGluc3RlYWQgb2YKCWV4cGxpY2l0bHkgdGVzdGluZyBfX0dOVUNfXyBhbmQgX19HTlVDX01JTk9SX18uCgoJKEFUVFJJQlVURV9QUklOVEYpOiBVc2UgYF9fZm9ybWF0X18nLCBub3QgYGZvcm1hdCcuCgoxOTk5LTA5LTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsaWJpYmVydHkuaCAobWFrZV90ZW1wX2ZpbGUpOiAgQWRkIGEgcHJvdG90eXBlLgoKVHVlIFNlcCAxNCAwMDozNTowMiAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBsaWJpYmVydHkuaCAoYmFzZW5hbWUpOiAgT3BlbkJTRCBoYXMgYSBjb3JyZWN0IHByb3RvdHlwZS4KCSh4cmVhbGxvYyk6ICBSZW1vdmUgb3V0ZGF0ZWQgY29tbWVudC4KCjE5OTktMDktMDcgIEplZmYgR2FyemlrICA8amdhcnppa0Bwb2JveC5jb20+CgoJKiBsaWJpYmVydHkuaCAoeG1lbWR1cCk6IEFkZCBwcm90b3R5cGUgZm9yIG5ldyBmdW5jdGlvbi4KCjE5OTktMDktMDEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG9ic3RhY2suaCAob2JzdGFja19ncm93LCBvYnN0YWNrX2dyb3cwKTogTW92ZSAoY2hhciopIGNhc3RzCglpbiBjYWxscyB0byBgX29ic3RhY2tfbWVtY3B5JyBmcm9tIGhlcmUgLi4uCgoJKF9vYnN0YWNrX21lbWNweSk6IC4uLiB0byBoZXJlLCBleGNlcHQgaW4gdGhlIF9fU1REQ19fIGNhc2Ugd2hpY2gKCWRvZXNuJ3QgbmVlZCBpdC4KCjE5OTktMDgtMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxpYmliZXJ0eS5oIChnZXRwd2QpOiBQcm90b3R5cGUuCgoxOTk5LTA4LTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3BsYXktdHJlZS5oIChzcGxheV90cmVlX2luc2VydCk6IFJldHVybiB0aGUgbmV3IG5vZGUuCgoxOTk5LTA3LTExICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHplbWJ1LmNvbT4KCgkqIGFuc2lkZWNsLmg6IENvcHkgYXR0cmlidXRlIHN1cHBvcnQgbWFjcm9zIGZyb20gZWdjcy4KCjE5OTktMDQtMDIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmggKHNwbGF5X3RyZWVfY29tcGFyZV9wb2ludGVycyk6IERlY2xhcmUuCgoxOTk5LTAzLTMwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3BsYXktdHJlZS5oIChzcGxheV90cmVlX2NvbXBhcmVfaW50cyk6IERlY2xhcmUuCgpXZWQgTWFyIDI0IDEyOjQ2OjI5IDE5OTkgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYW15LmN5Z251cy5jb20+CgoJKiBsaWJpYmVydHkuaCAoYmFzZW5hbWUpOiBDeWd3aW57LDMyfSBzaG91bGQgaGF2ZSB0aGUgcHJvdG90eXBlLgoKTW9uIERlYyAxNCAwOTo1MzozMSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBkZW1hbmdsZS5oOiBEb24ndCBjaGVjayBJTl9HQ0MgYW55bW9yZS4KCSogc3BsYXktdHJlZS5oOiBMaWtld2lzZS4KClR1ZSBEZWMgIDggMDA6MzA6MzEgMTk5OCAgRWxlbmEgWmFubm9uaSAgPGV6YW5ub25pQGt3aWtlbWFydC5jeWdudXMuY29tPgoKCSogZGVtYW5nbGUuaDogKERNR0xfRURHKTogbmV3IG1hY3JvIGZvciBLdWNrIGFuZCBBc3NvY2lhdGVzCgkoRE1HTF9TVFlMRV9NQVNLKTogbW9kaWZ5IHRvIGluY2x1ZGUgS3VjayBhbmQgQXNzb2Mgc3R5bGUKCShkZW1hbmdsaW5nX3N0eWxlcyk6IGFkZCBuZXcgZWRnX2RlbWFuZ2xpbmcgc3R5bGUKCShFREdfREVNQU5HTElOR19TVFlMRV9TVFJJTkcpOiBuZXcgbWFjcm8KCShFREdfREVNQU5HTElORyk6IG5ldyBtYWNybwoJKERNR0xfSFApOiBuZXcgbWFjcm8sIGZvciBIUC9hQ0MgY29tcGlsZXIuCgkoRE1HTF9TVFlMRV9NQVNLKTogbW9kaWZ5IHRvIGluY2x1ZGUgbmV3IEhQJ3Mgc3R5bGUuCgkoZGVtYW5nbGluZ19zdHlsZXMpOiBhZGQgbmV3IGhwX2RlbWFuZ2xpbmcgdmFsdWUuCgkoSFBfREVNQU5HTElOR19TVFlMRV9TVFJJTkcpOiBuZXcgbWFjcm8uCgkoQVJNX0RFTUFOR0xJTkcpOiBjb2VyY2UgdG8gaW50LgoJKEhQX0RFTUFOR0xJTkcpOiBuZXcgbWFjcm8uCgpGcmkgTm92IDIwIDEzOjE0OjAwIDE5OTggIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChiYXNlbmFtZSk6IEFkZCBwcm90b3R5cGUgZm9yIEZyZWVCU0QuCgpGcmkgTm92IDEzIDE5OjE5OjExIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxpYmliZXJ0eS5oOiBQcm90b3R5cGUgeGNhbGxvYy4KClN1biBOb3YgIDggMTc6NDI6MjUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYW5zaWRlY2wuaDogV3JhcCBwcm9ibGVtYXRpYyBtYWNyb3Mgd2l0aCAhSU5fR0NDLgoKCSogZGVtYW5nbGUuaDogTmV2ZXIgZGVmaW5lIFBBUkFNUygpLgoJKiBzcGxheS10cmVlLmg6IExpa2V3aXNlLgoKU2F0IE5vdiAgNyAxNjowNDowMyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBkZW1hbmdsZS5oOiBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoJKiBzcGxheS10cmVlLmg6IExpa2V3aXNlLgoKVGh1IE9jdCAyMiAxOTo1ODowMCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzcGxheS10cmVlLmg6IFdyYXAgZnVuY3Rpb24gcG9pbnRlciBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGluCglQQVJBTVMoKSBtYWNyby4KCjE5OTgtMTAtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzcGxheS10cmVlLmg6IE5ldyBmaWxlLgoKRnJpIE9jdCAgOSAwMDowMjowMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNZXJnZSBkZXZvIGFuZCBlZ2NzIGluY2x1ZGUgZGlyZWN0b3JpZXMuCgpTYXQgU2VwICA1IDEyOjE2OjMzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5oLCBvYnN0YWNrLmg6IFVwZGF0ZWQgZnJvbSBnY2MuCgoxOTk4LTA4LTAzICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBsaWJpYmVydHkuaCAoeGV4aXQpOiBDaGFuZ2UgZGVjbCB0byB1c2UgbW9kZXJuIEdDQyBhdHRyaWJ1dGUKCXRvIGluZGljYXRlIGV4aXQgZG9lcyBub3QgcmV0dXJuLgoKTW9uIEp1biAgMSAxMzo0ODozMiAxOTk4ICBKYXNvbiBNb2xlbmRhICAoY3Jhc2hAYnVnc2hhY2suY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suaDogVXBkYXRlIHRvIGxhdGVzdCBGU0YgdmVyc2lvbi4KClR1ZSBGZWIgMjQgMTM6MDU6MDIgMTk5OCAgRG91ZyBFdmFucyAgPGRldmFuc0BjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoZGlzYXNzZW1ibGVfaW5mbyk6IE1lbWJlciBgc3ltYm9sJyByZW5hbWVkIHRvIGBzeW1ib2xzJwoJYW5kIG1hZGUgYW4gImFzeW1ib2wgKioiLiAgTmV3IG1lbWJlciBudW1fc3ltYm9scy4KCShJTklUX0RJU0FTU0VNQkxFX0lORk9fTk9fQVJDSCk6IFVwZGF0ZS4KClR1ZSBGZWIgMTcgMTI6MzI6MTggMTk5OCAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fZmV0Y2hfcmVnaXN0ZXIsIHNpbV9zdG9yZV9yZWdpc3Rlcik6IEFkZAoJcmVnaXN0ZXIgbGVuZ3RoIHBhcmFtZXRlci4gIEZ1bmN0aW9ucyByZXR1cm4gYWN0dWFsIGxlbmd0aCBvZgoJcmVnaXN0ZXIuCgpUaHUgRmViIDEyIDE2OjI5OjAxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGdldG9wdC5oOiBVcGRhdGUgdG8gbGF0ZXN0IEZTRiB2ZXJzaW9uLgoKV2VkIEZlYiAxMSAxNjo1NjowNiAxOTk4ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGNhbnVjay5jeWdudXMuY29tPgoKCSogc3ltY2F0Lmg6IE5ldyBmaWxlLgoKTW9uIEZlYiAgMiAxNzoxMzozMSAxOTk4ICBTdGV2ZSBIYXdvcnRoICA8c3RldmVAcG0uY3NlLnJtaXQuRURVLkFVPgoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX3RpYzMwKTogRGVjbGFyZS4KClRodSBKYW4gMjIgMTY6MjM6NTkgMTk5OCAgRnJlZCBGaXNoIDxmbmZAY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaDogQWRkIGZsYWcgSU5TTl9IQVNfUkVMT0MgdG8gdGVsbCBkaXNhc3NlbWJseQoJZnVuY3Rpb24gdGhlcmUgaXMgYSByZWxvYyBvbiB0aGlzIGxpbmUuCgpNb24gRGVjICA4IDExOjIyOjIzIDE5OTcgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmg6IFJlbW92ZSBwcm90b3R5cGUgb2YgZGlzYXNtX3N5bWFkZHIoKSBhcyB0aGlzIGZ1bmN0aW9uCglubyBsb25nZXIgZXhpc3RzLgoKVHVlIERlYyAgMiAxMDoyMDo1MyAxOTk3ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChkaXNhc21fc3ltYWRkcik6IE5ldyBwcm90b3R5cGUuCgpNb24gRGVjICAxIDIwOjI0OjE4IDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNvZmYvc2guaCAoUl9TSF9TV0lUQ0g4KTogTmV3LgoKTW9uIERlYyAgMSAxMToyOTozNSAxOTk3ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGNhbnVjay5jeWdudXMuY29tPgoKCSogY2FsbGJhY2suaCAoQ0JfU1lTQ0FMTCk6IENvbW1lbnQgb3V0IGFyZyBuYW1lcyBpbiBwcm90b3R5cGVzLgoKV2VkIE5vdiAyNiAxNjo0Nzo1OCAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGNhbGxiYWNrLmggKENCX1NZU0NBTEwpOiBDb25zaXN0YW50bHkgdXNlIG5hbWVzIGZvciBwcm90b3R5cGUKCWFyZ3VtZW50cy4KCldlZCBOb3YgMjYgMTE6Mzk6MzAgMTk5NyAgRG91ZyBFdmFucyAgPGRldmFuc0BjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGNhbGxiYWNrLmggKENCX1NZU0NBTEwpOiBDaGFuZ2UgYnl0ZSBjb3VudCBhcmd1bWVudHMgdG8KCXtyZWFkLHdyaXRlfV9tZW0gdG8gYGludCcuICBOZXcgbWVtYmVyIGBtYWdpYycuCgkoQ0JfU1lTQ0FMTF9NQUdJQyxDQl9TWVNDQUxMX0lOSVQpOiBOZXcgbWFjcm9zLgoKVHVlIE5vdiAyNSAwMTozNTo1MiAxOTk3ICBEb3VnIEV2YW5zICA8ZGV2YW5zQHNlYmEuY3lnbnVzLmNvbT4KCgkqIGNhbGxiYWNrLmggKHN0cnVjdCBzdGF0KTogTW92ZSBmb3J3YXJkIGRlY2wgdXAuCgkoaG9zdF9jYWxsYmFjayk6IFBhc3Mgc3RhdCBzdHJ1Y3QgcG9pbnRlciB0byBzdGF0LGZzdGF0LgoJKENCX1NZU19ubm4pOiBSZW9yZ2FuaXplLgoJKENCX1NZU0NBTEwpOiBOZXcgbWVtYmVycyBwMSxwMi4KCShjYl9ob3N0X3RvX3RhcmdldF9zdGF0KTogRGVsZXRlIGZvdXJ0aCBhcmcuCgpTYXQgTm92IDIyIDIzOjM0OjE1IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHJlbW90ZS1zaW0uaCAoc2ltX3N0b3BfcmVhc29uKTogQ2xhcmlmeSBzaW1fc2lnbmFsbGVkIFNJR1JDCglhcmd1bWVudC4KCk1vbiBOb3YgMTcgMTQ6MDA6NTEgMTk5NyAgRG91ZyBFdmFucyAgPGRldmFuc0BzZWJhLmN5Z251cy5jb20+CgoJKiBjYWxsYmFjay5oIChDQl9UQVJHRVRfREVGU19NQVApOiBSZW5hbWVkIGZyb20gdGFyZ2V0X2RlZnNfbWFwLgoJKGhvc3RfY2FsbGJhY2spOiBBZGQgc3RhdCwgZnN0YXQsIHN5c2NhbGxfbWFwLCBlcnJub19tYXAsIG9wZW5fbWFwLAoJc2lnbmFsX21hcCwgc3RhdF9tYXAuCgkoZXJybl9tYXAsb3Blbl9tYXApOiBSZW5hbWVkIHRvIGNiX2luaXRfZm9vX21hcC4KCShjYl9ob3N0X3RvX3RhcmdldF9lcnJubyxjYl90YXJnZXRfdG9faG9zdF9vcGVuKTogUmVuYW1lZCBmcm9tCglob3N0X3RvX3RhcmdldF9lcnJubyx0YXJnZXRfdG9faG9zdF9vcGVuLgoJKGNiX3JlYWRfdGFyZ2V0X3N5c2NhbGxfbWFwcyk6IEFkZCBwcm90b3R5cGUuCgkoY2JfdGFyZ2V0X3RvX2hvc3Rfc3lzY2FsbCk6IExpa2V3aXNlLgoJKGNiX2hvc3RfdG9fdGFyZ2V0X3N0YXQpOiBMaWtld2lzZS4KCShjYl9zeXNjYWxsKTogTGlrZXdpc2UuCgkoQ0JfU1lTX3tleGl0LG9wZW4sY2xvc2UscmVhZCx3cml0ZSxsc2Vlayx1bmxpbmssZ2V0cGlkLGtpbGwsZnN0YXQsCglhcmd2bGVuLGFyZ3YsY2hkaXIsc3RhdCxjaG1vZCx1dGltZSx0aW1lfSk6IERlZmluZS4KCShDQl9TWVNDQUxMKTogTmV3IHR5cGUuCgkoQ0JfUkMpOiBOZXcgZW51bS4KCkZyaSBOb3YgIDcgMTA6MzQ6MDkgMTk5NyAgUm9iIFNhdm95ZSAgPHJvYkBkYXJrc3Rhci5jeWdudXMuY29tPgoKCSogbGliaWJlcnR5Lmg6IEFkZCBleHRlcm4gIkMiIHsgc28gaXQgY2FuIGJlIHVzZWQgd2l0aCBDKysKCXByb2dyYW1zLgoJKiByZW1vdGUtc2ltLmg6ICBBZGQgZXh0ZXJuICJDIiB7IHNvIGl0IGNhbiBiZSB1c2VkIHdpdGggQysrCglwcm9ncmFtcy4KClR1ZSBPY3QgMTQgMTY6MDc6NTEgMTk5NyAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoc3RydWN0IGRpc2Fzc2VtYmxlX2luZm8pOiBOZXcgZmllbGQKCSdzeW1ib2xfYXRfYWRkcmVzc19mdW5jJy4KCShJTklUX0RJU0FTU0VNQkxFX0lORk9fTk9fQVJDSCk6IEluaXRpYWxpc2UgbmV3IGZpZWxkIHdpdGgKCWdlbmVyaWNfc3ltYm9sX2F0X2FkZHJlc3MuCgpNb24gT2N0IDEzIDEwOjE3OjE1IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHJlbW90ZS1zaW0uaDogQ2xhcmlmeSBzaW1fcmVhZCwgc2ltX3dyaXRlIE1FTSBhcmd1bWVudC4KCldlZCBTZXAgMjQgMTg6MDM6MTAgMTk5NyAgU3R1IEdyb3NzbWFuICA8Z3Jvc3NtYW5AYmFieWxvbi01LmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmggKFNJTV9SQyk6ICBBZGQgYSBidW5jaCBvZiBuZXcgcmV0dXJuIGNvZGVzIGZvcgoJYnJlYWtwb2ludCBzdHVmZi4KCSogQWRkIGZ1bmN0aW9ucyB0byB0ZWxsIHRoZSBzaW11bGF0b3IgdG8gc2V0L2NsZWFyL2VuYWJsZS9kaXNhYmxlCglpbnRyaW5zaWMgYnJlYWtwb2ludHMuCgpUaHUgQXVnIDI4IDE5OjQxOjQyIDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChkdXBhcmd2KTogQWRkIHByb3RvdHlwZS4KClR1ZSBBdWcgMjYgMTI6MjU6NDkgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fY3JlYXRlX2luZmVyaW9yKTogQWRkIEFCRkQgYXJnLiBEb2N1bWVudC4KCk1vbiBBdWcgMjUgMTA6NTA6NTEgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fb3Blbik6IEFkZCBBQkZEIGFyZy4gRG9jdW1lbnQuCgpGcmkgQXVnICA4IDE2OjQzOjU2IDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBkaXMtYXNtLmggKGFyY19nZXRfZGlzYXNzZW1ibGVyKTogRGVjbGFyZS4KCldlZCBKdWwgMzAgMTE6Mzk6NTAgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGRlbmViLmN5Z251cy5jb20+CgoJKiBkZW1hbmdsZS5oIChETUdMX0pBVkEpOiAgTmV3IG9wdGlvbiB0byByZXF1ZXN0IEphdmEgZGVtYW5nbGluZy4KClR1ZSBKdWwgMjIgMTc6NTk6NTQgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogbGliaWJlcnR5LmggKFBFWEVDVVRFXyopOiBEZWZpbmUuCgkocGV4ZWN1dGUsIHB3YWl0KTogRGVjbGFyZS4KCkZyaSBKdW4gIDYgMTM6MDI6MzMgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fa2lsbCk6IE1hcmsgYXMgZGVwcmVjYXRlZC4KCkZyaSBNYXkgMjMgMTM6NDM6NDEgMTk5NyAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkIHRhc2tfbGluayBtZW1iZXIuCgpUaHUgTWF5IDIyIDExOjMyOjQ5IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHJlbW90ZS1zaW0uaDogUmV2aWV3IGRvY3VtZW50YXRpb24uICBDbGFyaWZ5IHJlc3RyaWN0aW9ucyBvbgoJd2hlbiBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZC4KCldlZCBNYXkgMjEgMTY6NDc6NTMgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fc2V0X3Byb2ZpbGVfc2l6ZSk6IEFkZCBwcm90b3R5cGUsIGRvY3VtZW50IGFzCglkZXByZWNhdGVkLgoKVHVlIE1heSAyMCAwOTozMjoyMiAxOTk3ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmggKHNpbV9vcGVuKTogQWRkIGNhbGxiYWNrIHN0cnVjdC4KCShzaW1fc2V0X2NhbGxiYWNrcyk6IERyb3AgU0lNX0RFU0MgYXJndW1lbnQuIERvY3VtZW50LgoJKHNpbV9zaXplKTogUmVtb3ZlIHJlY2VudGx5IGFkZGVkIFNJTV9ERVNDIGFyZ3VtZW50LiBEb2N1bWVudC4KCk1vbiBNYXkgMTkgMTk6MTQ6NDQgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oOiBQYXNzIFNEIGludG8gc2ltX3NpemUuCgpUaHUgTWF5IDE1IDAxOjI0OjE2IDE5OTcgIE1hcmsgQWxleGFuZGVyICA8bWFya2FAY3lnbnVzLmNvbT4KCgkqIG9ic3RhY2suaCAob2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb25fd2l0aF9hcmcsIG9ic3RhY2tfY2h1bmtmdW4sCglvYnN0YWNrX2ZyZWVmdW4pOiBFbGltaW5hdGUgY29tcGlsZSB3YXJuaW5ncyBpbiBnZGIuCgpUdWUgTWF5IDEzIDEwOjIxOjE0IDE5OTcgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb2ZmL2FybS5oIChjb25zdGFudHMpOiAgIEFkZGVkIG5ldyBmbGFnIGJpdHMgRl9BUENTXzI2IGFuZAoJRl9BUENTX1NFVCBmb3IgdGhlIGZfZmxhZ3MgZmllbGQgb2YgdGhlIGZpbGVoZHIgc3RydWN0dXJlLiAgQWRkZWQgbmV3CglmbGFnczogRl9BUENTMjYsIEZfQVJNXzIsIEZfQVJNXzMsIEZfQVJNXzcsIEZfQVJNXzdUIHRvIHN0b3JlCglpbmZvcm1hdGlvbiBpbiB0aGUgZmxhZ3MgZmllbGQgb2YgdGhlIGludGVybmFsX2Ygc3RydWN0dXJlIHVzZWQgYnkgQkZECglyb3V0aW5lcy4KClR1ZSBBcHIgMjIgMTA6MjQ6MzQgMTk5NyAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBmbG9hdGZvcm1hdC5oIChmbG9hdGZvcm1hdF9ieXRlb3JkZXJzKTogQWRkIGNvbW1lbnRzIGZvciBwcmV2aW91cwoJZm9ybWF0cyBhbmQgYWRkIGZsb2F0Zm9ybWF0X2xpdHRsZWJ5dGVfYmlnd29yZCwgcHJpbWFyaWx5IGZvciBBUk0uCglBZGQgZGVjbGFyYXRpb24gZm9yIGZsb2F0Zm9ybWF0X2llZWVfZG91YmxlX2xpdHRsZWJ5dGVfYmlnd29yZC4KCkZyaSBBcHIgMTggMTM6MDQ6NDkgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzaW1fc3RvcCk6IE5ldyBpbnRlcmZhY2UgLSBhc3luY2hyb25vdXMKCW5vdGlmaWNhdGlvbiBvZiBhIHJlcXVlc3QgdG8gc3RvcCAvIHN1c3BlbmQgdGhlIHJ1bm5pbmcKCXNpbXVsYXRpb24uCgoJKiByZW1vdGUtc2ltLmggKGVudW0gc2ltX3N0b3ApOiBBZGQgc2ltX3J1bm5pbmcgYW5kIHNpbV9wb2xsaW5nIGFzCglzdGF0ZXMgZm9yIHVzZSBpbnRlcm5hbCB0byBzaW11bGF0b3JzLgoKCSogY2FsbGJhY2suaCAoc3RydWN0IGhvc3RfY2FsbGJhY2tfc3RydXQpOiBQdXQgYSBtYWdpYyBudW1iZXIgYXQKCXRoZSBlbmQgb2YgdGhlIHN0cnVjdCB0byBhbGxvdyBiYXNpYyBjaGVja2luZy4KCShzdHJ1Y3QgaG9zdF9jYWxsYmFja19zdHJ1Y3QgKTogQWRkIHBvbGxfcXVpdCAtIHNvCgl0aGF0IHRoZSBjb25zb2xlIGV0YyBjYW4gYmUgcG9sbGVkIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLgoKVGh1IEFwciAxNyAwMjoxNzoxMiAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChzdHJ1Y3QgX2JmZCk6IERlY2xhcmUuCgkoc2ltX2xvYWQpOiBSZXR1cm4gU0lNX1JDLiAgTmV3IGFyZyBgYWJmZCcuCgkoc2ltX2NyZWF0ZV9pbmZlcmlvcik6IFJldHVybiBTSU1fUkMuICBEZWxldGUgYXJnIGBzdGFydF9hZGRyZXNzJy4KCldlZCBBcHIgIDIgMTc6MDk6MTIgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBrcmVtdmF4LmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmggKHNpbV90cmFjZSwgc2ltX3NpemUpOiBNYWtlIHRoZXNlIGdsb2JhbC4gIFRoZXkKCXdpbGwgZ28gYXdheSBzaG9ydGx5LgoKV2VkIEFwciAgMiAxNToyMzo0OSAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogcmVtb3RlLXNpbS5oIChTSU1fT1BFTl9LSU5ELCBTSU1fUkMpOiBOZXcgZW51bXMuCgkoc2ltX29wZW4pOiBOZXcgYXJndW1lbnQgYGtpbmQnLgoKV2VkIEFwciAgMiAxNDo0NTo1MSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBDT1BZSU5HOiBVcGRhdGUgRlNGIGFkZHJlc3MuCgpGcmkgTWFyIDI4IDE1OjI5OjU0IDE5OTcgIE1pa2UgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogY2FsbGJhY2suaCAodG9wIGxldmVsKTogSW5jbHVkZSBzdGRhcmcuaCBvciB2YXJhcmdzLmggaWYKCXZhX3N0YXJ0IGlzIG5vdCBkZWZpbmVkLgoJKGhvc3RfY2FsbGJhY2tfc3RydWN0KTogTWFrZSB7LGV9dnByaW50Zl9maWx0ZXJlZCB0YWtlIGEgdmFfbGlzdAoJaW5zdGVhZCBvZiB2b2lkICosIHNpbmNlIHZhX2xpc3QgbWlnaHQgYmUgYW4gYXJyYXkgb3Igc3RydWN0dXJlCgl0eXBlLgoKRnJpIE1hciAyOCAxNTo0NDo0MSAxOTk3ICBILkouIEx1ICA8aGpsQGdudS5haS5taXQuZWR1PgoKCSogbGliaWJlcnR5LmggKGJhc2VuYW1lKTogQWRkIHByb3RvdHlwZSBmb3IgZ2xpYmMgYW5kIGxpbnV4LgoKTW9uIE1hciAxNyAxOToyMjoxMiAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBvYmphbGxvYy5oOiBOZXcgZmlsZS4KCk1vbiBNYXIgMTcgMTQ6NTc6NTUgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBrcmVtdmF4LmN5Z251cy5jb20+CgoJKiByZW1vdGUtc2ltLmg6IE5ldyBmaWxlLCBjb3BpZWQgaW4gZnJvbSBnZGIvcmVtb3RlLXNpbS5oLiAgT25lCglkYXkgdGhpcyB3aWxsIGJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSBvZiBpdHMgb3duLgoKU2F0IE1hciAxNSAxOTowMDoxNCAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBvYnN0YWNrLmg6IFVwZGF0ZSB0byBjdXJyZW50IEZTRiB2ZXJzaW9uLgoKVGh1IE1hciAgNiAxNTo0Njo1OSAxOTk3ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGtyZW12YXguY3lnbnVzLmNvbT4KCgkqIGNhbGxiYWNrLmggKHN0cnVjdCBob3N0X2NhbGxiYWNrX3N0cnVjdCk6IEFkZCBjYWxsYmFja3MgLQoJZmx1c2hfc3Rkb3V0LCB3cml0ZV9zdGRlcnIsIGZsdXNoX3N0ZGVyciwgdnByaW50Zl9maWx0ZXJlZCwKCWV2cHJpbnRmX2ZpbHRlcmVkLiAgRGVsZXRlIHJlZHVuZGFudCBjYWxsYmFja3MgLSBwcmludGZfZmlsdGVyZWQuCgpUaHUgRmViIDI3IDIzOjE4OjI3IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBSZW1vdmUgbHByZWZpeCBhbmQgbHByZWZpeF9sZW4KCWZpZWxkcy4KClR1ZSBGZWIgMjUgMDA6MTA6NDkgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChJTklUX0RJU0FTU0VNQkxFX0lORk9fTk9fQVJDSCk6IEluaXRpYWxpemUKCWJ5dGVzX3Blcl9jaHVuayBhbmQgZGlzcGxheV9lbmRpYW4uCgpNb24gRmViIDI0IDE3OjQ3OjAyIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCglGcm9tIEVyaWMgWW91bmdkYWxlIDxlcmljQGFuZGFudGUuamljLmNvbT46CgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9lbGZfdmVyc2lvbl9leHByKTogRGVmaW5lLgoJKHN0cnVjdCBiZmRfZWxmX3ZlcnNpb25fZGVwcyk6IERlZmluZS4KCShzdHJ1Y3QgYmZkX2VsZl92ZXJzaW9uX3RyZWUpOiBEZWZpbmUuCgpUaHUgRmViICA2IDE0OjIwOjAxIDE5OTcgIE1hcnRpbiBNLiBIdW50ICA8aHVudEBwaXp6YS5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oOiAoZGlzYXNzZW1ibGVfaW5mbyk6ICBBZGQgbmV3IGZpZWxkcwoJYnl0ZXNfcGVyX2NodW5rIGFuZCBkaXNwbGF5X2VuZGlhbiB0byBjb250cm9sIHRoZQoJZGlzcGxheSBvZiByYXcgaW5zdHJ1Y3Rpb25zLgoKU3VuIERlYyAgOCAxNzoxMToxMiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogY2FsbGJhY2suaCAoaG9zdF9jYWxsYmFjayk6IE5ldyBtZW1iZXIgYGVycm9yJy4KCldlZCBOb3YgMjAgMDA6NDA6MjMgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGNhbGxiYWNrLmg6IE5ldyBmaWxlLCBtb3ZlZCBoZXJlIGZyb20gZ2RiLgoKTW9uIE5vdiAxOCAxNjozNDowMCAxOTk2ICBEYXduIFBlcmNoaWsgIDxkYXduQGNyaXR0ZXJzLmN5Z251cy5jb20+CgoJKiBsaWJpYmVydHkuaDogQ2hlY2tpbiBhZ2FpbjsgbGFzdCBjaGVja2luIGZhaWxlZCBkdWUgdG8gc3RpY2t5IHRhZy4KCldlZCBOb3YgMTMgMDg6MjI6MDAgMTk5NiAgRGF3biBQZXJjaGlrICA8ZGF3bkBjcml0dGVycy5jeWdudXMuY29tPgoKCSogbGliaWJlcnR5Lmg6IFJldmVydCBsYXN0IGNvbW1pdCBkdWUgdG8gY29uZmxpY3RzIHdpdGggaHB1eAoJc3lzdGVtIGhlYWRlcnMuCgpUdWUgTm92IDEyIDE2OjMxOjAwIDE5OTYgIERhd24gUGVyY2hpayAgPGRhd25AY3JpdHRlcnMuY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oOiBNb3ZlIHByb3RvdHlwZXMgZnJvbSBhcmd2LmMgaGVyZS4KClRodSBPY3QgMzEgMTQ6NTY6MTggMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGFuc2lkZWNsLmggKFZQQVJBTVMsVkFfU1RBUlQpOiBEZWZpbmUuCgpGcmkgT2N0IDI1IDEyOjA4OjA0IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoZGlzYXNzZW1ibGVfaW5mbyk6IEFkZCBieXRlc19wZXJfbGluZSBmaWVsZC4KCShJTklUX0RJU0FTU0VNQkxFX0lORk9fTk9fQVJDSCk6IEluaXRpYWxpemUgYnl0ZXNfcGVyX2xpbmUgZmllbGQuCgpUaHUgT2N0IDI0IDE3OjEwOjAxIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoZGlzYXNzZW1ibGVfaW5mbyk6IEFkZCBzeW1ib2wgZmllbGQuCgkoSU5JVF9ESVNBU1NFTUJMRV9JTkZPX05PX0FSQ0gpOiBJbml0aWFsaXplIHN5bWJvbCBmaWVsZC4KClRodSBPY3QgMTcgMTE6MTc6NDAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9tMzJyKTogRGVjbGFyZS4KCk1vbiBPY3QgMTQgMjM6NTY6NTIgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogbGliaWJlcnR5Lmg6IERlY2xhcmUgcGFyYW1ldGVyIHR5cGVzIGZvciB4bWFsbG9jIGFuZCB4cmVhbGxvYy4KClRodSBPY3QgIDMgMTM6NDU6MjcgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZm5tYXRjaC5oOiBOZXcgZmlsZS4KClRodSBPY3QgIDMgMTA6MzM6MTQgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX21uMTB4MDApOiBEZWxldGUgZGVjbGFyYXRpb24uCgkocHJpbnRfaW5zbl9tbjEwMjAwLCBwcmludF9pbnNuX21uMTAzMDApOiBEZWNsYXJlLgoKV2VkIE9jdCAgMiAyMToyNDo0MyAxOTk2ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fbW4xMHgwMCk6IERlY2xhcmUuCgpNb24gU2VwIDMwIDEzOjU2OjExIDE5OTYgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogbGliaWJlcnR5Lmg6IFJlbW92ZSAjaWZuZGVmIFBSSVZBVEVfWE1BTExPQy4KClNhdCBBdWcgMzEgMTM6Mjc6MDYgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX3Y4NTApOiBEZWNsYXJlLgoKVHVlIEF1ZyAxMyAxNjoxMDozMCAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogb2JzdGFjay5oOiAgQ2hhbmdlIGJjb3B5IHRvIG1lbWNweS4gIFdvcmtzIGJldHRlciBvbiBQb3NpeAoJc3lzdGVtcywgd2hpY2ggZ2VuZXJhbGx5IGxhY2sgYmNvcHkuCgpNb24gQXVnIDEyIDE3OjAzOjE4IDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCgoJKiBhbnNpZGVjbC5oOiAgQ2hhbmdlIFdJTjMyIHRvIF9XSU4zMi4KCkZyaSBKdWwgMjYgMTM6NTg6MTggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZGlzLWFzbS5oOiBBZGQgZmxhdm91ciBmaWVsZC4KCShwcmludF9pbnNuX2FscGhhKTogRGVjbGFyZS4KCShwcmludF9pbnNuX2FscGhhX29zZiwgcHJpbnRfaW5zbl9hbHBoYV92bXMpOiBEb24ndCBkZWNsYXJlLgoJKElOSVRfRElTQVNTRU1CTEVfSU5GTyk6IEluaXRpYWxpemUgZmxhdm91ciBmaWVsZC4KClR1ZSBKdWwgMjMgMTc6Mzc6NTggMTk5NiAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBsaWJpYmVydHkuaCAoUFJJVkFURV9YTUFMTE9DKTogRW5jbG9zZSB4bWFsbG9jL3hyZWFsbG9jCglkZWZpbml0aW9ucyBpbnNpZGUgI2lmbmRlZiBzbyB0aGF0IHByb2dyYW1zIHRoYXQgd2FudCB0bwoJY2FuIGRlZmluZSBQUklWQVRFX1hNQUxMT0MgYW5kIHRoZW4gZGVmaW5lIHhtYWxsb2MgYW5kCgl4cmVhbGxvYyBhbnl3YXkgdGhleSB3YW50LgoJKGJhc2VuYW1lKTogRG9jdW1lbnQgaW4gc291cmNlIHRoYXQgd2UgY2FuJ3QgZGVjbGFyZSB0aGUKCXBhcmFtZXRlciB0eXBlIGJlY2F1c2UgaXQgaXMgZGVjbGFyZWQgaW5jb25zaXN0ZW50bHkgYWNyb3NzCglkaWZmZXJlbnQgc3lzdGVtcy4KCk1vbiBKdWwgMjIgMTM6MTY6MTMgMTk5NiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAdGFtdS5lZHU+CgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fYWxwaGEpOiBEb24ndCBkZWNsYXJlLgoJKHByaW50X2luc25fYWxwaGFfb3NmLCBwcmludF9pbnNuX2FscGhhX3Ztcyk6IERlY2xhcmUuCgpXZWQgSnVsIDE3IDE0OjQ1OjEyIDE5OTYgIE1hcnRpbiBNLiBIdW50ICA8aHVudEBwaXp6YS5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oOiAocHJpbnRfaW5zbl9kMTB2KTogRGVjbGFyZS4KCk1vbiBKdWwgMTUgMTY6NTU6MzggMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaDogIEdldCByaWQgb2YgZGVjbHMgZm9yIHByaW50X2luc25faTgwODYsCglwcmludF9pbnNuX3NwYXJjNjQgYW5kIHByaW50X2luc25fc3BhcmNsaXRlLgoJKiAoSU5JVF9ESVNBU1NFTUJMRV9JTkZPKTogIFNwbGl0IGludG8gdHdvIHBpZWNlcy4gIE9uZSwKCUlOSVRfRElTQVNTRU1CTEVfSU5GT19OT19BUkNIIGluaXRzIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciBlbmRpYW4sCgltYWNoLCBhbmQgYXJjaC4KCkZyaSBKdWwgMTIgMTA6MTk6MjcgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9pODA4Nik6ICBEZWNsYXJlLgoKV2VkIEp1bCAgMyAxNjowMjozOSAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX3NwYXJjbGl0ZSk6ICBEZWNsYXJlLgoKVHVlIEp1biAxOCAxNjowMjo0NiAxOTk2ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BydGwuY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAocHJpbnRfaW5zbl9oODMwMHMpOiBEZWNsYXJlLgoKVHVlIEp1biAxOCAxNToxMTozMyAxOTk2ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHByb2dpcy5kZT4KCgkqIGZvcGVuLXZtcy5oOiBOZXcgZmlsZS4KClR1ZSBKdW4gIDQgMTg6NTg6MTYgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyk6IEFkZCBub3RpY2VfYWxsIGZpZWxkLgoKRnJpIEFwciAyNiAxMDozMzoxMiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogZGVtYW5nbGUuaCAoI2lmZGVmIElOX0dDQyk6ICNpbmNsdWRlICJnYW5zaWRlY2wuaCIuCgkoUFJPVE8sUFRSLGNvbnN0KTogRGVsZXRlLgoKTW9uIEFwciAyMiAxNzoyNzo0MiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkIHRyYWRpdGlvbmFsX2Zvcm1hdCBmaWVsZC4KCk1vbiBBcHIgMTUgMTU6MTY6NTYgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChjaG9vc2VfdGVtcF9iYXNlKTogQWRkIHByb3RvdHlwZS4KClR1ZSBNYXIgMTIgMTc6Mjk6NDYgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYmZkbGluay5oIChiZmRfd3JhcHBlZF9saW5rX2hhc2hfbG9va3VwKTogRGVjbGFyZS4KCShzdHJ1Y3QgYmZkX2xpbmtfaW5mbyk6IEFkZCB3cmFwX2hhc2ggZmllbGQuCgpXZWQgRmViIDE0IDE2OjQ5OjE3IDE5OTYgIE1hcnRpbiBBbmFudGhhcmFtYW4gIDxtYXJ0aW5AbWFpbC5pbWVjaC51bmktZHVpc2J1cmcuZGU+CgoJKiBpZWVlLmggKGllZWVfcmVjb3JkX2VudW1fdHlwZSk6IERlZmluZQoJaWVlZV9leHRlcm5hbF9yZWZlcmVuY2VfaW5mb19lbnVtLgoKRnJpIEZlYiAgMiAxNzowOToyNSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoRElTQVNNX1JBV19JTlNOKTogRGVsZXRlLgoKVHVlIEphbiAyMyAwOToyMTo0NyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoSU5JVF9ESVNBU1NFTUJMRV9JTkZPKTogU2V0IGVuZGlhbiB0byBCRkRfRU5ESUFOX1VOS05PV04uCglOZXcgYXJndW1lbnQgRlBSSU5URl9GVU5DLgoKTW9uIEphbiAyMiAxNjozNzo1OSAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRpcy1hc20uaCAoZGlzYXNzZW1ibGVfaW5mbyk6IE5ldyBtZW1iZXJzIGFyY2gsIG1hY2gsIGVuZGlhbi4KCShJTklUX0RJU0FTU0VNQkxFX0lORk8pOiBJbml0aWFsaXplIHRoZW0uCgkoRElTQVNNX1JBV19JTlNOeyxGTEFHfSk6IERlZmluZS4KClRodSBKYW4gMTggMTE6MzI6MzggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZGVtYW5nbGUuaCAoY3BsdXNfZGVtYW5nbGVfb3BuYW1lKTogQ2hhbmdlIG9wbmFtZSBwYXJhbWV0ZXIgdG8KCWNvbnN0IGNoYXIgKi4KCShjcGx1c19tYW5nbGVfb3BuYW1lKTogQ2hhbmdlIHJldHVybiB0eXBlIGFuZCBvcG5hbWUgcGFyYW1ldGVyIHRvCgljb25zdCBjaGFyICouCgpGcmkgSmFuICA1IDAwOjAxOjIyIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGllZWUuaCAoZW51bSBpZWVlX3JlY29yZCk6IEFkZCBpZWVlX2Fzbl9yZWNvcmRfZW51bSwKCWllZWVfYXRfcmVjb3JkX2VudW0sIGllZWVfdHlfcmVjb3JkX2VudW0sIGllZWVfYXRuX3JlY29yZF9lbnVtLAoJaWVlZV9iYl9yZWNvcmRfZW51bSwgYW5kIGllZWVfYmVfcmVjb3JkX2VudW0uCgpXZWQgSmFuICAzIDEzOjEyOjA5IDE5OTYgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogb2JzdGFjay5oOiBVcGRhdGUgY29weXJpZ2h0IHRvIDE5OTYuCgkoX29ic3RhY2tfbWVtb3J5X3VzZWQpOiBEZWNsYXJlLgoJKG9ic3RhY2tfbWVtb3J5X3VzZWQpOiBEZWZpbmUgbWFjcm8uCgpUaHUgRGVjIDI4IDExOjQyOjEyIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oICh4c3RyZHVwKTogRGVjbGFyZS4KClRodSBEZWMgMjEgMTQ6NDc6MTcgMTk5NSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgoKCSogd2FpdC5oOiBQcm90ZWN0IGFsbCBtYWNyb3Mgd2l0aCAjaWZuZGVmLgoKVHVlIE9jdCAyNCAyMTo0NTo0MCAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkIHN0YXRpY19saW5rIGZpZWxkLgoKVHVlIFNlcCAxMiAxNjoyODowNCAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19jYWxsYmFja3MpOiBBZGQgc3ltYm9sIHBhcmFtZXRlciB0bwoJd2FybmluZyBjYWxsYmFjay4KCkZyaSBTZXAgIDEgMTM6MTE6NTEgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfY2FsbGJhY2tzKTogQ2hhbmdlIHdhcm5pbmcgY2FsbGJhY2sKCXRvIHRha2UgQkZELCBzZWN0aW9uLCBhbmQgYWRkcmVzcyBhcmd1bWVudHMuCgpUaHUgQXVnIDMxIDE2OjQ1OjEyIDE5OTUgIHN0ZXZlIGNoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogUmVtb3ZlIFBFIHN0dWZmLgoKVHVlIEF1ZyAyMiAwMzoxODoyMyAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5Aa3ItbGFwdG9wLmN5Z251cy5jb20+CgoJKiBsaWJpYmVydHkuaDogRGVjbGFyZSB4c3RyZXJyb3IuICBGcm9tIFBhdCBSYW5raW4uCgpNb24gQXVnIDIxIDE4OjExOjM2IDE5OTUgIHN0ZXZlIGNoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogUmVtb3ZlIFBFIHN0dWZmLgoKV2VkIEF1ZyAgMiAwODoxNDoxMiAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX3NwYXJjNjQpOiBEZWNsYXJlLgoKTW9uIEp1bCAxMCAxMzoyNjo0OSAxOTk1ICBFcmljIFlvdW5nZGFsZSAgPGVyaWNAYWliLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2luZm8pOiBBZGQgbmV3IGZpZWxkIHN5bWJvbGljLgoKU3VuIEp1bCAgMiAxNzo0ODo0MCAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQ2hhbmdlIHR5cGUgb2YgYmFzZV9maWxlIHRvCglQVFIuCgpUaHUgSnVuIDI5IDAwOjAyOjQ1IDE5OTUgIFN0ZXZlIENoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkZWQgYmFzZV9maWxlIG1lbWJlci4KClR1ZSBKdW4gMjAgMTY6NDA6MDQgMTk5NSAgU3RldmUgQ2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIGFuc2lkZWNsLmg6IHdpbjMycyBpcyBBTlNJIGVub3VnaC4KClRodSBNYXkgMTggMDQ6MjU6NTAgMTk5NSAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGtyLWxhcHRvcC5jeWdudXMuY29tPgoKCVdlZCBNYXkgMTAgMTQ6Mjg6MTYgMTk5NSBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCgoJKiBkaXMtYXNtLmggKHByaW50X2luc25fYXJtKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKHByaW50X2luc25fe2xpdHRsZSxiaWd9X2FybSk6IE5ldyBkZWNsYXJhdGlvbnMuCgoJKiBmbG9hdGZvcm1hdC5oIChmbG9hdGZvcm1hdF9hcm1fZXh0KTogRGVjbGFyZS4KClNhdCBNYXkgMTMgMTA6MTQ6MDggMTk5NSAgU3RldmUgQ2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIGNvZmYvcGUuaDogTmV3IGZpbGUuCgkqIGJmZGxpbmsuaCAoc3Vic3l0ZW0sIHN0YWNrX2hlYXBfcGFyYW1ldGVycyk6IE5ldy4KCSogY29mZi9pMzg2LmggKE5UX1NFQ1RJT05fQUxJR05NRU5ULCBOVF9GSUxFX0FMSUdOTUVOVCwKCU5UX0RFRl9SRVNFUlZFLCBOVF9ERUZfQ09NTUlUKTogTmV3LgoJKiBjb2ZmL2ludGVybmFsLmggKGludGVybmFsX2ZpbGVoZHIpOiAgTmV3IGZpZWxkcyBmb3IgUEUuCgkoSU1BR0VfREFUQV9ESVJFQ1RPUlkpOiBOZXcuCgkoaW50ZXJuYWxfYW91dGhkcik6IE5ldyBmaWVsZHMgZm9yIFBFLgoKVGh1IE1heSAgNCAxNDozNjo0MiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGRlbWFuZ2xlLmg6IERvbid0IGluY2x1ZGUgYW5zaWRlY2wuaCBpZiBJTl9HQ0MuCgpUdWUgRmViIDIxIDAwOjM3OjI4IDE5OTUgIEplZmYgTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogaHAtc3ltdGFiLmg6IERvbid0IHVzZSBiaXRmaWVsZCBlbnVtZXJhdGlvbnMsIHRoZSBIUCBDIGNvbXBpbGVyCglkb2VzIG5vdCBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuCgpUaHUgRmViICA5IDE0OjIwOjI3IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChiYXNlbmFtZSk6IERvbid0IGRlY2xhcmUgcGFyYW1ldGVyIHR5cGU7IHNvbWUKCXN5c3RlbXMgaGF2ZSB0aGlzIGluIHRoZWlyIGhlYWRlciBmaWxlcy4KCldlZCBGZWIgIDggMTc6MzU6MzggMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSk6IENoYW5nZSBmb3JtYXQgb2YgY29tbW9uCglzeW1ib2wgaW5mb3JtYXRpb24sIHRvIHJlbW92ZSByZXN0cmljdGlvbnMgb24gbWF4aW11bSBzaXplIGFuZAoJYWxpZ25tZW50IHBvd2VyLCBieSB1c2luZyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgaW5zdGVhZC4KCk1vbiBGZWIgIDYgMTQ6NTU6MzIgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYmZkbGluay5oIChlbnVtIGJmZF9saW5rX2hhc2hfdHlwZSk6IFJlbmFtZSBiZmRfbGlua19oYXNoX3dlYWsKCXRvIGJmZF9saW5rX2hhc2hfdW5kZWZ3ZWFrLiAgQWRkIGJmZF9saW5rX2hhc2hfZGVmd2Vhay4KCk1vbiBKYW4gMTYgMjE6MDA6MjMgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oIChHREJfSU5JVF9ESVNBU1NFTUJMRV9JTkZPLCBldGMpOiBSZW1vdmUgYWxsCglHREItc3BlY2lmaWMgZGVmaW5pdGlvbnMuCgpTdW4gSmFuIDE1IDE4OjM5OjM1IDE5OTUgIFN0ZXZlIENoYW1iZXJsYWluICA8c2FjQHNwbGF0PgoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX3c2NSk6IERlY2xhcmUuCgpUaHUgSmFuIDEyIDE3OjUxOjE3IDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBjdWpvLmN5Z251cy5jb20+CgoJKiBsaWJpYmVydHkuaCAoaGV4X3ApOiBGaXggc2Vuc2Ugb2YgdGVzdC4KCldlZCBKYW4gMTEgMjI6MzY6NDAgMTk5NSAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN1am8uY3lnbnVzLmNvbT4KCgkqIGxpYmliZXJ0eS5oIChfaGV4X2FycmF5X3NpemUsIF9oZXhfYmFkLCBfaGV4X3ZhbHVlLCBoZXhfaW5pdCwKCWhleF9wLCBoZXhfdmFsdWUpOiBOZXcgbWFjcm9zIGFuZCBkZWNsYXJhdGlvbnMsIGZvciBoZXguYy4KCkZyaSBKYW4gIDYgMTc6NDQ6MTQgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBzYW5ndWluZS5jeWdudXMuY29tPgoKCSogZGlzLWFzbS5oOiBNYWtlIGlkZW1wb3RlbnQuCgpXZWQgRGVjIDE0IDEzOjA4OjQzIDE5OTQgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIHByb2dyZXNzLmg6IE5ldyBmaWxlLCBlbXB0eSBkZWZpbml0aW9ucyBmb3IgcHJvZ3Jlc3MgbWFjcm9zLgoKRnJpIE5vdiAyNSAwMDoxNDowNSAxOTk0ICBKZWZmIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIGhwLXN5bXRhYi5oOiBOZXcgZmlsZSBkZXNjcmliaW5nIHRoZSBkZWJ1ZyBzeW1ib2xzIGVtaXR0ZWQKCWJ5IHRoZSBIUCBDIGNvbXBpbGVycy4KCkZyaSBOb3YgMTEgMTU6NDg6MzcgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBzYW5ndWluZS5jeWdudXMuY29tPgoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSk6IENoYW5nZSB1LmMuc2l6ZSBmcm9tIDI0Cgl0byAyNiBiaXRzLCBhbmQgY2hhbmdlIHUuYy5hbGlnbm1lbnRfcG93ZXIgZnJvbSA4IHRvIDYgYml0cy4gIDYKCWJpdCBpbiB0aGUgYWxpZ25tZW50IHBvd2VyIGlzIGVub3VnaCBmb3IgYSA2NCBiaXQgYWRkcmVzcyBzcGFjZS4KCk1vbiBPY3QgMzEgMTM6MDI6NTEgMTk5NCAgU3RhbiBTaGVicyAgKHNoZWJzQGFuZHJvcy5jeWdudXMuY29tKQoKCSogZGVtYW5nbGUuaCAoY3BsdXNfbWFuZ2xlX29wbmFtZSk6IERlY2xhcmUuCgpUdWUgT2N0IDI1IDExOjM4OjAyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbT4KCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2NhbGxiYWNrcyk6IEZpeCBjb21tZW50cyBmb3IKCW11bHRpcGxlX2NvbW1vbiBmaWVsZC4KClN1biBTZXAgMDQgMTc6NTg6MTAgMTk5NCAgUmljaGFyZCBFYXJuc2hhdyAocndlQHBlZ2FzdXMuZXNwcml0LmVjLm9yZykKCgkqIGFvdXQvYW91dDY0Lmg6IE9ubHkgZGVmaW5lIFFNQUdJQyBpZiBpdCBpc24ndCBhbHJlYWR5IGRlZmluZWQuCgoJKiBkaXMtYXNtLmg6IEFkZCBzdXBwb3J0IGZvciB0aGUgQVJNLgoKV2VkIEF1ZyAxMCAxMjo1MTo0MSAxOTk0ICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQoKCSogbGliaWJlcnR5LmggKHN0cnNpZ25hbCk6IERvY3VtZW50IGl0cyBleGlzdGVuY2UgZXZlbiBpZiB3ZQoJY2FuJ3QgZGVjbGFyZSBpdC4KClR1ZSBBdWcgIDIgMTQ6NDA6MDMgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBvczlrLmg6IFJlbW92ZSB1X2ludDE2LCB1X2ludDMyLCBhbmQgb3duZXJfaWQgdHlwZWRlZnMgYW5kCglleHBhbmQgdGhlaXIgdXNlcy4gIFRob3NlIG5hbWVzIGNvbmZsaWN0IHdpdGggTWFjaCBoZWFkZXJzLgoKRnJpIEp1bCAyMiAxNDoxNzoxMiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHNhbmd1aW5lLmN5Z251cy5jb20pCgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5KTogQ2hhbmdlIHUuYy5zaXplIGludG8gYQoJYml0ZmllbGQuICBBZGQgZmllbGQgdS5jLmFsaWdubWVudF9wb3dlci4KClN1biBKdWwgMTAgMDA6MjY6MzkgMTk5NCAgSWFuIERhbGwgIChkYWxsQGhmcmQuZHN0by5nb3YuYXUpCgoJKiBkaXMtYXNtLmg6IEFkZCBwcmludF9pbnNuX25zMzJrIGRlY2xhcmF0aW9uLgoKTW9uIEp1biAyMCAxNzoxMzoyOSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHNhbmd1aW5lLmN5Z251cy5jb20pCgoJKiBiZmRsaW5rLmggKGJmZF9saW5rX2hhc2hfdGFibGUpOiBNYWtlIGNyZWF0b3IgYSBjb25zdCBwb2ludGVyLgoKU2F0IEp1biAxOCAxNjowOTozMiAxOTk0ICBTdGFuIFNoZWJzICAoc2hlYnNAYW5kcm9zLmN5Z251cy5jb20pCgoJKiBkZW1hbmdsZS5oIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBEZWNsYXJlLgoKVGh1IEp1biAxNiAxNToxOTowMyAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19pbmZvKTogQWRkIG5ldyBmaWVsZCBzaGFyZWQuCgpNb24gSnVuICA2IDE0OjM5OjQ0IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZGxpbmsuaCAoc3RydWN0IGJmZF9saW5rX2hhc2hfZW50cnkpOiBSZW1vdmUgd3JpdHRlbiBmaWVsZDoKCW5vdCBuZWVkZWQgZm9yIGFsbCBiYWNrZW5kcy4KClRodSBBcHIgMjggMTk6MDY6NTAgMTk5NCAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN1am8uY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaCAoZGlzYXNzZW1ibGVyKTogRGVjbGFyZS4KCkZyaSBBcHIgIDEgMDA6Mzg6MTcgMTk5NCAgSmltIFdpbHNvbiAgKHdpbHNvbkBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogb2JzdGFjay5oOiBEZWxldGUgdXNlIG9mIElOX0dDQyB0byBjb250cm9sIHdoZXRoZXIKCXN0ZGRlZi5oIG9yIGdzdGRkZWYuaCBpcyBpbmNsdWRlZC4KClR1ZSBNYXIgMjIgMTM6MDY6MDIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkbGluay5oIChlbnVtIGJmZF9saW5rX29yZGVyX3R5cGUpOiBBZGQgYmZkX2RhdGFfbGlua19vcmRlci4KCShzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIpOiBBZGQgZGF0YSBmaWVsZCB0byB1bmlvbi4KCk1vbiBNYXIgMjEgMTg6NDU6MjYgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkbGluay5oIChzdHJ1Y3QgYmZkX2xpbmtfY2FsbGJhY2tzKTogQ2hhbmdlIGJpdHNpemUgYXJndW1lbnQKCXRvIGFkZF90b19zZXQgdG8gcmVsb2MuICBSZW1vdmUgYml0c2l6ZSBhcmd1bWVudCBmcm9tIGNvbnN0cnVjdG9yLgoJQ29tbWVudCB0aGF0IHJlbG9jX292ZXJmbG93LCByZWxvY19kYW5nZXJvdXMgYW5kIHVuYXR0YWNoZWRfcmVsb2MKCW11c3QgaGFuZGxlIE5VTEwgcG9pbnRlcnMgZm9yIHJlbG9jIGxvY2F0aW9uLgoJKGVudW0gYmZkX2xpbmtfb3JkZXJfdHlwZSk6IEFkZCBiZmRfc2VjdGlvbl9yZWxvY19saW5rX29yZGVyIGFuZAoJYmZkX3N5bWJvbF9yZWxvY19saW5rX29yZGVyLgoJKHN0cnVjdCBiZmRfbGlua19vcmRlcik6IEFkZCByZWxvYyBmaWVsZCB0byB1bmlvbi4KCShzdHJ1Y3QgYmZkX2xpbmtfb3JkZXJfcmVsb2MpOiBEZWZpbmUuCgpNb24gTWFyIDE0IDEyOjI3OjUwIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGllZWUtZmxvYXQuaDogUmVtb3ZlZDsgbm8gbG9uZ2VyIHVzZWQuCgpUdWUgTWFyICAxIDE4OjEwOjQ5IDE5OTQgIEt1bmcgSHN1ICAoa3VuZ0BtZXhpY2FuLmN5Z251cy5jb20pCgoJKiBvczlrLmg6IG9zOTAwMCB0YXJnZXQgc3BlY2lmaWMgaGVhZGVyIGZpbGUsIHRoZSBoZWFkZXIgb2YgdGhlCglvYmplY3QgZmlsZSBpcyB1c2VkIG5vdy4KClN1biBGZWIgMjcgMjE6NTI6MjYgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGRlbmViLmN5Z251cy5jb20pCgoJKiBmbG9hdGZvcm1hdC5oOiBOZXcgZmlsZSwgaW50ZW5kZWQgdG8gcmVwbGFjZSBpZWVlLWZsb2F0LmguCgpTdW4gRmViIDIwIDE3OjE1OjQyIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AbGlzYS5jeWdudXMuY29tKQoKCSogYW5zaWRlY2wuaCAoQU5TSV9QUk9UT1RZUEVTKTogRGVmaW5lIGlmIHVzaW5nIEFOU0kgcHJvdG90eXBlcy4KCldlZCBGZWIgMTYgMDE6MDc6MTIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogbGliaWJlcnR5Lmg6IERvbid0IGRlY2xhcmUgc3Ryc2lnbmFsLCB0byBhdm9pZCBjb25mbGljdHMgd2l0aAoJU29sYXJpcyBzeXN0ZW0gaGVhZGVyIGZpbGVzLgoKU2F0IEZlYiAxMiAyMjoxMTozMiAxOTk0ICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIGxpYmliZXJ0eS5oICh4ZXhpdCk6IFVzZSBfX3ZvbGF0aWxlX18gdG8gYXZvaWQgbG9zaW5nIGlmCgljb21waWxpbmcgd2l0aCBnY2MgLXRyYWRpdGlvbmFsLgoKVGh1IEZlYiAxMCAxNDowNTo0MSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBsaWJpYmVydHkuaDogTmV3IGZpbGUuICBEZWNsYXJlcyBmdW5jdGlvbnMgcHJvdmlkZWQgYnkKCWxpYmliZXJ0eS4KClR1ZSBGZWIgIDggMDU6MTk6NTIgMTk5NCAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCUhhbmRsZSBvYnN0YWNrX2NodW5rX2FsbG9jIHJldHVybmluZyBOVUxMLiAgVGhpcyBhbGxvd3MKCW9ic3RhY2tzIHRvIGJlIHVzZWQgYnkgbGlicmFyaWVzLCB3aXRob3V0IGZvcmNpbmcgdGhlbQoJdG8gY2FsbCBleGl0IG9yIGxvbmdqbXAuCgkqIG9ic3RhY2suaCAoc3RydWN0IG9ic3RhY2spOiBBZGQgYWxsb2NfZmFpbGVkIGZsYWcuCglfb2JzdGFja19iZWdpbiwgX29ic3RhY2tfYmVnaW5fMSk6IERlY2xhcmUgdG8gcmV0dXJuIGludCwgbm90IHZvaWQuCgkob2JzdGFja19maW5pc2gpOiBJZiBhbGxvY19mYWlsZWQsIHJldHVybiBOVUxMLgoJKG9ic3RhY2tfYmFzZSwgb2JzdGFja19uZXh0X2ZyZWUsIG9ianN0YWNrX29iamVjdF9zaXplKToKCUlmIGFsbG9jX2ZhaWxlZCwgcmV0dXJuIDAuCgkob2JzdGFja19ncm93LCBvYnN0YWNrX2dyb3cwLCBvYnN0YWNrXzFncm93LCBvYnN0YWNrX3B0cl9ncm93LAoJb2JzdGFja19pbnRfZ3Jvdywgb2JzdGFja19ibGFuayk6IElmIGFsbG9jX2ZhaWxlZCwgZG8gbm90aGluZyB0aGF0Cgljb3VsZCBjb3JydXB0IHRoZSBvYnN0YWNrLgoKTW9uIEphbiAyNCAxNTowNjowNSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19jYWxsYmFja3MpOiBBZGQgbmFtZSwgcmVsb2NfbmFtZSBhbmQKCWFkZGVuZCBhcmdtZW50cyB0byByZWxvY19vdmVyZmxvdyBjYWxsYmFjay4KCkZyaSBKYW4gMjEgMTk6MTM6MTIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX2JpZ19wb3dlcnBjLCBwcmludF9pbnNuX2xpdHRsZV9wb3dlcnBjLAoJcHJpbnRfaW5zbl9yczYwMDApOiBEZWNsYXJlLgoKVGh1IEphbiAgNiAxNDoxNTo1NSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBiZmRsaW5rLmggKHN0cnVjdCBiZmRfbGlua19jYWxsYmFja3MpOiBBZGQgYml0c2l6ZSBhcmd1bWVudCB0bwoJYWRkX3RvX3NldCBmaWVsZC4gIEFkZCBuZXcgY2FsbGJhY2sgbmFtZWQgY29uc3RydWN0b3IuCgpUaHUgRGVjIDMwIDEwOjQ0OjA2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AcnRsLmN5Z251cy5jb20pCgoJKiBiZmRsaW5rLmg6IE5ldyBmaWxlIGZvciBuZXcgQkZEIGxpbmtlciBiYWNrZW5kIHJvdXRpbmVzLgoKTW9uIE5vdiAyOSAxMDo0Mzo1NyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmggKGVudW0gZGlzX2luc25fdHl1cGUpOiBSZW1vdmUgbm9uLUFOU0kgdHJhaWxpbmcgY29tbWEuCgpTYXQgT2N0ICAyIDIwOjQyOjI2IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oOiBNb3ZlIGNvbW1lbnQgdG8gcmlnaHQgcGxhY2UuCgpNb24gQXVnICA5IDE5OjAzOjM1IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suaCAob2JzdGFja19jaHVua2Z1biwgb2JzdGFja19mcmVlZnVuKTogQWRkIGRlZm5zIGZyb20KCXByZXZpb3VzIHZlcnNpb24uICBBcmUgdGhlc2UgQ3lnbnVzIGxvY2FsIGNoYW5nZXM/CgpGcmkgQXVnICA2IDE3OjA1OjQ3IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5oLCBvYnN0YWNrLmg6IFVwZGF0ZSB0byBsYXRlc3QgRlNGIHZlcnNpb24uCgpNb24gQXVnICAyIDE2OjM3OjE0IDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmL2kzODYuaDogIEFkZCBMeW54IG1hZ2ljIG51bWJlci4KCk1vbiBBdWcgIDIgMTQ6NDU6MjkgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmg6ICBNb3ZlIGVudW0gb3V0c2lkZSBvZiBzdHJ1Y3QgZGVmbiB0byBhdm9pZCB3YXJuaW5ncy4KCk1vbiBBdWcgIDIgMDg6NDk6MzAgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIHdhaXQuaCAoV0VYSVRTVEFUVVMsIFdTVE9QU0lHKTogTWFzayBkb3duIHRvIDggYml0cy4gIFRoaXMgaXMKCWZvciBzeXN0ZW1zIHRoYXQgc3RvcmUgc3R1ZmYgaW50byB0aGUgaGlnaCAxNiBiaXRzIG9mIGEgd2FpdAoJc3RhdHVzLgoKRnJpIEp1bCAzMCAxODozODowMiAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaDogIEFkZCBuZXcgZmllbGRzIGluc25faW5mb192YWxpZCwgYnJhbmNoX2RlbGF5X2luc25zLAoJZGF0YV9zaXplLCBpbnNuX3R5cGUsIHRhcmdldCwgdGFyZ2V0Mi4gIFRoZXNlIGFyZSB1c2VkIHRvIHJldHVybgoJaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gZGVjb2RlcnMgYmFjayB0byB0aGUgY2FsbGluZwoJcHJvZ3JhbS4gIEFkZCBjb21tZW50cywgbWFrZSBtb3JlIHJlYWRhYmxlLgoKTW9uIEp1bCAxOSAyMjoxNDoxNCAxOTkzICBGcmVkIEZpc2ggIChmbmZAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIG5sbTogIE5ldyBkaXJlY3RvcnkgY29udGFpbmluZyBOTE0vTmV0V2FyZSBpbmNsdWRlcy4KClRodSBKdWwgMTUgMTI6MTA6MDQgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZGlzLWFzbS5oIChzdHJ1Y3QgZGlzYXNzZW1ibGVfaW5mbyk6IE5ldyBmaWVsZCBhcHBsaWNhdGlvbl9kYXRhLgoKVGh1IEp1bCAxNSAxMjo0MToxNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmg6IEFkZGVkIGRlY2xhcmF0aW9uIG9mIHByaW50X2luc25fbTg4ay4KClRodSBKdWwgIDggMDk6MDU6MjYgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKCgkqIG9wY29kZS9oODMwMC5oOiBMb3RzIG9mIGxpdHRsZSBmaXhlcyBmb3IgdGhlIGg4LzMwMGguCgpGcmkgSnVsICAyIDEwOjMxOjU5IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGFuc2lkZWNsLmg6IFVzZSBBTlNJIG1hY3JvcyBpZiBfX21pcHMgYW5kIF9TWVNUWVBFX1NWUjQgYXJlCglkZWZpbmVkLCBzaW5jZSBSSVNDL09TIGNjIGhhbmRsZXMgQU5TSSBkZWNsYXJhdGlvbnMgaW4gU1ZSNCBtb2RlCglidXQgZG9lcyBub3QgZGVmaW5lIF9fU1REQ19fLgoKU3VuIEp1biAyMCAxODoyNzo1MiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaDogRG9uJ3QgbmVlZCB0byBpbmNsdWRlIGFuc2lkZWNsLmggYW55IG1vcmUuCgpGcmkgSnVuIDE4IDAzOjIyOjEwIDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogb2FzeXMuaDogIEVsaW1pbmF0ZSAiaW50OF90eXBlIiwgImludDE2X3R5cGUiLCAiaW50MzJfdHlwZSIsIGFuZAoJdGhlaXIgdmFyaWFudHMuICBUaGVzZSBjaGFuZ2VzIGFyZSBjb29yZGluYXRlZCB3aXRoIGNvcnJlc3BvbmRpbmcKCWNoYW5nZXMgaW4gLi4vYmZkL29hc3lzLmMuCgpXZWQgSnVuIDE2IDEwOjQzOjA4IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogYmZkLmg6ICBOb3RlIHRoYXQgaXQgaGFzIGJlZW4gcmVtb3ZlZC4KClR1ZSBKdW4gIDggMTI6MTY6MDMgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkgU3VwcG9ydCBmb3IgSDgvMzAwLUgKCSogZGlzLWFzbS5oIChwcmludF9pbnNuX2g4MzAwLCBwcmludF9pbnNuX2g4MzAwaCk6IERlY2xhcmUgaXQuCgkqIGNvZmYvaDgzMDAuaDogTmV3IG1hZ2ljIG51bWJlci4KCSogY29mZi9pbnRlcm5hbC5oOiBOZXcgcmVsb2NhdGlvbnMuCgkqIG9wY29kZS9oODMwMC5oOiBMb3RzIG9mIG5ldyBvcGNvZGVzLgoKVHVlIEp1biAgMSAwNzozNTowMyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5Aa3ItcGMuY3lnbnVzLmNvbSkKCgkqIGFuc2lkZWNsLmggKGNvbnN0KTogRG9uJ3QgZGVmaW5lIGl0IGlmIGl0J3MgYWxyZWFkeSBkZWZpbmVkLgoKVGh1IE1heSAyNyAxODoxOTo1MSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmggKHByaW50X2luc25faHBwYSk6IERlY2xhcmUgaXQuCgoJKiBiZmQuaDogTW92ZWQgdG8gYmZkIGRpcmVjdG9yeS4gIFNtYWxsIHN0dWIgaGVyZSBpbmNsdWRlcyBpdAoJd2l0aG91dCByZXF1aXJpbmcgIi1JLi4vYmZkIi4KClRodSBBcHIgMjkgMTI6MDY6MTMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGRlbmViLmN5Z251cy5jb20pCgoJKiBiZmQuaDogVXBkYXRlZCB3aXRoIEJTRl9GVU5DVElPTi4KCk1vbiBBcHIgMjYgMTg6MTU6NTAgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuaCwgZGlzLWFzbS5oOiBVcGRhdGVkIHdpdGggSGl0YWNoaSBTSC4KCkZyaSBBcHIgMjMgMTg6NDE6MzggMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuaDogVXBkYXRlZCB3aXRoIGFscGhhIGNoYW5nZXMuCgkqIGRpcy1hc20uaDogQWRkZWQgYWxwaGEuCgpGcmkgQXByIDE2IDE3OjM1OjMwIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogYmZkLmg6IFVwZGF0ZSBmb3Igc2lnbmVkIGJmZF8qZ2V0XyouCgpUaHUgQXByIDE1IDA5OjI0OjIxIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogYmZkLmg6IFVwZGF0ZWQgZm9yIGZpbGVfdHJ1bmNhdGVkIGVycm9yLgoKVGh1IEFwciAgOCAxMDo1Mzo0NyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBhbnNpZGVjbC5oOiBJZiBubyBBTlNJLCBkZWZpbmUgY29uc3QgdG8gYmUgZW1wdHkuCgpUaHUgQXByICAxIDA5OjAwOjEwIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogZGlzLWFzbS5oOiBEZWNsYXJlIGEyOWsgYW5kIGk5NjAgcHJpbnRfaW5zbl8qLgoKCSogZGlzLWFzbS5oOiBBZGQgcHJpbnRfYWRkcmVzc19mdW5jIGFuZCByZWxhdGVkIHN0dWZmLgoKCSogZGlzLWFzbS5oIChkaXNfYXNtX3JlYWRfbWVtb3J5KTogRml4IHByb3RvdHlwZS4KCldlZCBNYXIgMzEgMTc6NDA6MTYgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBkaXMtYXNtLmg6IEFkZCBwcmludF9pbnNuX3NwYXJjLgoKV2VkIE1hciAzMSAxNzo1MTo0MiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBiZmQuaDogVXBkYXRlZCBmb3IgQkZEX1JFTE9DX01JUFNfR1BSRUwgYW5kIGJmZF9bZ3NdZXRfZ3Bfc2l6ZQoJcHJvdG90eXBlcy4KCldlZCBNYXIgMzEgMTY6MzU6MTIgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaDogKGRpc2Fzc2VtYmxlX2luZm8pOiAgRml4IHR5cG8gaW4gcHJvdG90eXBlIG9mCglkaXNfYXNtX21lbW9yeV9lcnJvcigpLgoKVHVlIE1hciAzMCAxOTowOToyMyAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaCAoZGlzYXNzZW1ibGVyX2luZm8pOiBBZGQgcmVhZF9tZW1vcnlfZnVuYywKCW1lbW9yeV9lcnJvcl9mdW5jLCBidWZmZXIsIGFuZCBsZW5ndGguCgkoe0dEQl8sfUlOSVRfRElTQVNTRU1CTEVfSU5GTyk6IFNldCB0aGVtLgoJcHJpbnRfaW5zbl8qOiBSZW1vdmUgc2Vjb25kIGFyZ3VtZW50LgoKVHVlIE1hciAzMCAxNDo0ODo1NSAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGUgZm9yIGxtYSBmaWVsZCBvZiBzZWN0aW9uLgoKVHVlIE1hciAzMCAxMjoyMjo1NSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGFuc2lkZWNsLmg6IFVzZSBBTlNJIHZlcnNpb25zIG9uIEFJWCByZWdhcmRsZXNzIG9mIF9fU1REQ19fLgoKRnJpIE1hciAxOSAxNDo0OTo0OSAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGRpcy1hc20uaDogQWRkIGg4NTAwLgoKVGh1IE1hciAxOCAxMzo0OTowOSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBpZWVlLWZsb2F0Lmg6ICBNb3ZlZCBmcm9tIC4uL2dkYi4KCSogZGlzLWFzbS5oOiAgTmV3IGZpbGUuICBJbnRlcmZhY2UgdG8gZGlzLWFzc2VtYmxlci4KClRodSBNYXIgMTEgMTA6NTI6NTcgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBkZW1hbmdsZS5oIChETUdMX05PX09QVFMpOiAgQWRkIGRlZmluZSAoc2V0IHRvIDApIHRvIHVzZQoJaW4gcGxhY2Ugb2YgYmFyZSAwLCBmb3IgcmVhZGFiaWxpdHkgcmVhc29ucy4KClR1ZSBNYXIgIDIgMTc6NTA6MTEgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBkZW1hbmdsZS5oOiAgUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byBjZnJvbnQgd2l0aCBBUk0uCgpUdWUgRmViIDIzIDEyOjIxOjE0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGUgZm9yIG5ldyBlbGVtZW50cyBpbiBKVU1QX1RBQkxFLgoKVHVlIEZlYiAxNiAwMDo1MTozMCAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgVXBkYXRlIGZvciBCRkRfVkVSU0lPTiAyLjEuCgpUdWUgSmFuIDI2IDExOjQ5OjIwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGUgZm9yIFNFQ19JU19DT01NT04gZmxhZy4KClR1ZSBKYW4gMTkgMTI6MjU6MTIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkLmg6IFVwZGF0ZSBmb3IgYmZkX2FzeW1ib2xfdmFsdWUgYnVnIGZpeC4KCkZyaSBKYW4gIDggMTY6Mzc6MTggMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkLmg6IFVwZGF0ZSB0byBpbmNsdWRlIEVDT0ZGIHRkYXRhIGFuZCB0YXJnZXRfZmxhdm91ci4KClN1biBEZWMgMjcgMTc6NTI6MzAgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBiZmQuaDogIEFkZCBkZWNsYXJhdGlvbiBmb3IgYmZkX2dldF9zaXplKCkuCgpUdWUgRGVjIDIyIDIyOjQyOjQ2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZGVtYW5nbGUuaDogIFByb3RlY3QgZmlsZSBmcm9tIG11bHRpcGxlIGluY2x1c2lvbnMgd2l0aAoJI2lmICFkZWZpbmVkKERFTUFOR0xFX0gpLi4uI2RlZmluZSBERU1BTkdMRV9ILi4uI2VuZGlmLgoKTW9uIERlYyAyMSAyMToyNTo1MCAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYmZkLmg6ICBVcGRhdGUgdG8gZ2V0IGhwcGFfY29yZV9zdHJ1Y3QgZnJvbSBiZmQuYy4KClRodSBEZWMgMTcgMDA6NDI6MzUgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBiZmQuaDogIFVwZGF0ZSB0byBnZXQgdGVraGV4IHRkYXRhIG5hbWUgY2hhbmdlIGZyb20gYmZkLgoKTW9uIE5vdiAgOSAyMzo1NTo0MiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGFuc2lkZWNsLmg6ICBVcGRhdGUgY29tbWVudHMgdG8gZGlzY291cmFnZSB1c2Ugb2YgRVhGVU4uCgpUaHUgTm92ICA1IDE2OjM1OjQ0IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGUgdG8gYnJpbmcgaW4gU0VDX1NIQVJFRF9MSUJSQVJZLgoKVGh1IE5vdiAgNSAwMzoyMTozMiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgVXBkYXRlIHRvIG1hdGNoIEVYRlVOLCBiZmRfc2VjbGV0X3N0cnVjdCwgYW5kIFNERUYKCWNsZWFudXBzIGluIGJmZC4KCldlZCBOb3YgIDQgMDc6Mjg6MDUgMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBib3V0LmggKE5fQ0FMTE5BTUUsIE5fQkFMTkFNRSk6IERlZmluZSBhcyBjaGFyLXR5cGUgdmFsdWVzLCBzbwoJd2lkZW5pbmcgd29ya3MgY29uc2lzdGVudGx5LgoKRnJpIE9jdCAxNiAwMzoxNzowOCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5oOiAgVXBkYXRlIHRvIFJldmlzZWQgU3RhbmRhcmQgRlNGIFZlcnNpb24uCgpUaHUgT2N0IDE1IDIxOjQzOjIyIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBzZW5kYWkuY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5oIChzdHJ1Y3Qgb3B0aW9uKTogdXNlIHRoZSBwcm92aWRlZCBlbnVtIGZvciBoYXNfYXJnLgoKCSogZGVtYW5nbGUuaCAoQVVUT19ERU1BTkdMSU5HLCBHTlVfREVNQU5HTElORywKCSAgTFVDSURfREVNQU5HTElORyk6IHVsdHJpeCBjb21waWxlcnMgcmVxdWlyZSBlbnVtcyB0byBiZQoJICBlbnVtcyBhbmQgaW50cyB0byBiZSBpbnRzIGFuZCBjYXN0cyB3aGVyZSB0aGV5IG1lZXQuICBjYXN0IHNvbWUKCSAgZW51bXMgaW50byBpbnRzLgoKVGh1IE9jdCAxNSAwNDozNTo1MSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgVXBkYXRlIGFmdGVyIGNvbW1lbnQgY2hhbmdlcy4KClRodSBPY3QgIDggMDk6MDM6MDIgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuaCAoYmZkX2dldF9zeW1ib2xfbGVhZGluZ19jaGFyKTogbmV3IG1hY3JvIGZvciBnZXR0aW5nIGluIHh2ZWMKClRodSBTZXAgIDMgMDk6MTA6NTAgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oIChzdHJ1Y3QgcmVsb2NfaG93dG9fc3RydWN0KTogIHNpemUgbmVlZHMgdG8gYmUgc2lnbmVkIGlmCglpdCdzIGdvaW5nIHRvIGhvbGQgbmVnYXRpdmUgdmFsdWVzLgoKU3VuIEF1ZyAzMCAxNzo1MDoyNyAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBkZW1hbmdsZS5oOiAgTmV3IGZpbGUsIG1vdmVkIGZyb20gLi4vZ2RiLiAgTWFkZSBpbmRlcGVuZGVudAoJb2YgZ2RiLiAgQWxsb3cgZGVtYW5nbGluZyBzdHlsZSBvcHRpb24gdG8gYmUgcGFzc2VkIGFzIGEKCXBhcmFtZXRlciB0byBjcGx1c19kZW1hbmdsZSgpLCBidXQgdXNpbmcgdGhlCgljdXJyZW50X2RlbWFuZ2xpbmdfc3R5bGUgZ2xvYmFsIGFzIHRoZSBkZWZhdWx0LgoKU2F0IEF1ZyAyOSAxMDowNzo1NSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suaDogIE1lcmdlIGNvbW1lbnQgY2hhbmdlIGZyb20gY3VycmVudCBGU0YgdmVyc2lvbi4KClRodSBBdWcgMjcgMTI6NTk6MjkgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBhZGQgd2UzMmsKClR1ZSBBdWcgMjUgMTU6MDc6NDcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuaDogbmV3IGFmdGVyIFo4MDAwIHN0dWZmCgpNb24gQXVnIDE3IDA5OjAxOjIzIDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogYmZkLmg6IFJlZ2VuZXJhdGVkIGFmdGVyIHBhZ2Uvc2VnbWVudCBzaXplIGNoYW5nZXMuCgpTYXQgQXVnICAxIDEzOjQ2OjMxIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogb2JzdGFjay5oOiBNZXJnZSBjaGFuZ2VzIGZyb20gY3VycmVudCBGU0YgdmVyc2lvbi4KCk1vbiBKdWwgMjAgMjE6MDY6MjMgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmggKGFyZWFfaWQsIGZsYWdzKTogIFJlbW92ZSwgcmVwbGFjZSB3aXRoIGV4dHJhX2FyZywKCXVzZV9leHRyYV9hcmcsIGFuZCBtYXliZV9lbXB0eV9vYmplY3QuCgkqIG9ic3RhY2suaCAoT0JTVEFDS19NQVlCRV9FTVBUWV9PQkpFQ1QsIE9CU1RBQ0tfTU1BTExPQ19MSUtFKToKCVJlbW92ZSwgcmVwbGFjZWQgYnkgbWF5YmVfZW1wdHlfb2JqZWN0IGFuZCB1c2VfZXh0cmFfYXJnIGJpdGZpZWxkcy4KCSogb2JzdGFjay5oIChvYnN0YWNrX2Z1bGxfYmVnaW4sIF9vYnN0YWNrX2JlZ2luKTogIFJlbW92ZSBhcmVhX2lkCglhbmQgZmxhZ3MgYXJndW1lbnRzLgoJKiBvYnN0YWNrLmggKG9ic3RhY2tfYWxsb2NfYXJnKTogIE5ldyBtYWNybyB0byBzZXQgZXh0cmFfYXJnLgoKVGh1IEp1bCAxNiAwODoxMjo0NCAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBuZXcgYWZ0ZXIgYWRkaW5nIEJGRF9JU19SRUxBWEFCTEUKClNhdCBKdWwgIDQgMDM6MjI6MjMgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBiZmQuaDogIFJlZ2VuIGFmdGVyIGFkZGluZyBCU0ZfRklMRS4KCk1vbiBKdW4gMjkgMTQ6MTg6MzYgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IHN1bmZpc2gpCgoJKiBvYnN0YWNrLmg6ICBDb252ZXJ0IGJjb3B5KCkgdXNlIHRvIG1lbWNweSgpLCB3aGljaCBpcyBtb3JlCglwb3J0YWJsZSwgbW9yZSBzdGFuZGFyZCwgYW5kIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBnY2MncyBidWlsdGluCglmdW5jdGlvbnMgZm9yIGluY3JlYXNlZCBwZXJmb3JtYW5jZS4KClRodSBKdW4gMjUgMDQ6NDY6MDggMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhbnNpZGVjbC5oIChQQVJBTVMpOiAgSW5jb3Jwb3JhdGUgdGhpcyBtYWNybyBmcm9tIGdkYidzIGRlZnMuaC4KCUl0J3MgYSBjbGVhbmVyIHdheSB0byBmb3J3YXJkLWRlY2xhcmUgZnVuY3Rpb24gcHJvdG90eXBlcy4KCkZyaSBKdW4gMTkgMTU6NDY6MzIgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiAgSFBQQSBtZXJnZS4KClR1ZSBKdW4gMTYgMjE6MzA6NTYgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBnZXRvcHQuaDogZ3JhdHVpdG91cyB3aGl0ZSBzcGFjZSBjaGFuZ2VzIG1lcmdlZCBmcm9tIG90aGVyIHByZXAKCSAgcmVsZWFzZXMuCgpUaHUgSnVuIDExIDAxOjEwOjU1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLmg6ICBSZWdlbidkIGZyb20gYmZkLmMgYWZ0ZXIgcmVtb3ZpbmcgZWxmX2NvcmVfdGRhdGFfc3RydWN0LgoKTW9uIE1heSAxOCAxNzoyOTowMyAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5oOiBtZXJnZWQgY2hhbmdlcyBmcm9tIG1ha2UtMy42Mi4xMS4KCgkqIGdldG9wdC5oOiBtZXJnZWQgY2hhbmdlcyBmcm9tIGdyZXAtMS42IChhbHBoYSkuCgpGcmkgTWF5ICA4IDE0OjUzOjMyIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogZ2V0b3B0Lmg6IG1lcmdlZCBjaGFuZ2VzIGZyb20gYmlzb24tMS4xOC4KClNhdCBNYXIgMTQgMTc6MjU6MjAgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmg6ICBBZGQgImFyZWFfaWQiIGFuZCAiZmxhZ3MiIG1lbWJlcnMgdG8gb2JzdGFjawoJc3RydWN0dXJlLiAgQWRkIG9ic3RhY2tfY2h1bmtmdW4oKSBhbmQgb2JzdGFja19mcmVlZnVuKCkgdG8KCXNldCBmdW5jdGlvbnMgZXhwbGljaXRseS4gIENvbnZlcnQgbWF5YmVfZW1wdHlfb2JqZWN0IHRvCglhIGJpdCBpbiAiZmxhZ3MiLgoKVGh1IEZlYiAyNyAyMjowMTowMiAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIHdhaXQuaCAoV0lGU1RPUFBFRCk6ICBBZGQgSUJNIHJzNjAwMC1zcGVjaWZpYyB2ZXJzaW9uLgoKRnJpIEZlYiAyMSAyMDo0OToyMCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suaDogIEFkZCBvYnN0YWNrX2Z1bGxfYmVnaW4uCgkqIGJmZC5oLCBvYnN0YWNrLmg6ICBQcm90b2xpbnQuCgpUaHUgSmFuIDMwIDAxOjE4OjQyIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLmg6ICBSZW1vdmUgY29tbWEgZnJvbSBlbnVtIGRlY2xhcmF0aW9uLgoKTW9uIEphbiAyNyAyMjowMToxMyAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBjeWdudXMuY29tKQoKCSogYmZkLmggOiBuZXcgdGFyZ2V0IGVudHIsIGJmZF9yZWxheF9zZWN0aW9uCgpXZWQgRGVjIDE4IDE3OjE5OjQ0IDE5OTEgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBiZmQuaCwgaWVlZS5oLCBvcGNvZGUvbTY4ay5oLCBvcGNvZGUvc3BhcmMuaDogIEFOU0lmeSBlbnVtcy4KClRodSBEZWMgMTIgMjA6NTk6NTYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBmb3Blbi1zYW1lLmgsIGZvcGVuLWJpbi5oOiAgTmV3IGZpbGVzIGZvciBjb25maWd1cmluZwoJd2hldGhlciBmb3BlbiBkaXN0aW5ndWlzaGVzIGJpbmFyeSBmaWxlcyBvciBub3QuICBGb3IgdXNlCglieSBob3N0LWRlcGVuZGVudCBjb25maWcgZmlsZXMuCgpTYXQgTm92IDMwIDIwOjQ2OjQzIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogYmZkLmg6IGNoYW5nZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3JtYXQuCgoJKiBjcmVhdGVkIGNvZmYsIGVsZiBhbmQgb3Bjb2RlIGFuZCBhb3V0IGRpcmVjdG9yaWVzLiBNb3ZlZDoKCglhb3V0NjQuaAk9PT4gYW91dC9hb3V0NjQuaAoJYXIuaAkJPT0+IGFvdXQvYXIuaAoJYS5vdXQuZW5jYXAuaAk9PT4gYW91dC9lbmNhcC5oCglhLm91dC5ob3N0LmgJPT0+IGFvdXQvaG9zdC5oCglhLm91dC5ocC5oCT09PiBhb3V0L2hwLmgKCWEub3V0LnN1bjQuaAk9PT4gYW91dC9zdW40LmgKCXJhbmxpYi5oCT09PiBhb3V0L3JhbmxpYi5oCglyZWxvYy5oCQk9PT4gYW91dC9yZWxvYy5oCglzdGFiLmRlZgk9PT4gYW91dC9zdGFiLmRlZgoJc3RhYi5nbnUuaAk9PT4gYW91dC9zdGFiX2dudS5oCgoJY29mZi1hMjlrLmgJPT0+IGNvZmYvYTI5ay5oCgljb2ZmLWg4MzAwLmgJPT0+IGNvZmYvaDgzMDAuaAoJY29mZi1pMzg2LmgJPT0+IGNvZmYvaTM4Ni5oCgljb2ZmLWk5NjAuaAk9PT4gY29mZi9pOTYwLmgKCWludGVybmFsY29mZi5oCT09PiBjb2ZmL2ludGVybmFsLmgKCWNvZmYtbTY4ay5oCT09PiBjb2ZmL202OGsuaAoJY29mZi1tODhrLmgJPT0+IGNvZmYvbTg4ay5oCgljb2ZmLW1pcHMuaAk9PT4gY29mZi9taXBzLmgKCWNvZmYtcnM2MDAwLmgJPT0+IGNvZmYvcnM2MDAwLmgKCgllbGYtY29tbW9uLmgJPT0+IGVsZi9jb21tb24uaAoJZHdhcmYuaAkJPT0+IGVsZi9kd2FyZi5oCgllbGYtZXh0ZXJuYWwuaAk9PT4gZWxmL2V4dGVybmFsLmgKCWVsZi1pbnRlcm5hbC5oICA9PT4gZWxmL2ludGVybmFsLmgKCglhMjlrLW9wY29kZS5oCT09PiBvcGNvZGUvYTI5ay5oCglhcm0tb3Bjb2RlLmgJPT0+IG9wY29kZS9hcm0uaAoJaDgzMDAtb3Bjb2RlLmgJPT0+IG9wY29kZS9oODMwMC5oCglpMzg2LW9wY29kZS5oCT09PiBvcGNvZGUvaTM4Ni5oCglpODYwLW9wY29kZS5oCT09PiBvcGNvZGUvaTg2MC5oCglpOTYwLW9wY29kZS5oCT09PiBvcGNvZGUvaTk2MC5oCgltNjhrLW9wY29kZS5oCT09PiBvcGNvZGUvbTY4ay5oCgltODhrLW9wY29kZS5oCT09PiBvcGNvZGUvbTg4ay5oCgltaXBzLW9wY29kZS5oCT09PiBvcGNvZGUvbWlwcy5oCglucDEtb3Bjb2RlLmgJPT0+IG9wY29kZS9ucDEuaAoJbnMzMmstb3Bjb2RlLmgJPT0+IG9wY29kZS9uczMyay5oCglwbi1vcGNvZGUuaAk9PT4gb3Bjb2RlL3BuLmgKCXB5ci1vcGNvZGUuaAk9PT4gb3Bjb2RlL3B5ci5oCglzcGFyYy1vcGNvZGUuaAk9PT4gb3Bjb2RlL3NwYXJjLmgKCXRhaG9lLW9wY29kZS5oCT09PiBvcGNvZGUvdGFob2UuaAoJdmF4LW9wY29kZS5oCT09PiBvcGNvZGUvdmF4LmgKCgoKV2VkIE5vdiAyNyAxMDozODozMSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGludGVybmFsY29mZi5oOiAoaW50ZXJuYWxfc2NuaGRyKSB0b29rIG91dCAjZGVmIGRlcGVuZGVuY3ksIG5vdwoJc19ucmVsb2MgYW5kIHNfbmxubm8gYXJlIGFsd2F5cyBsb25nLgoJKGludGVybmFsX3JlbG9jKTogQWx3YXlzIGhhcyBhbiBvZmZzZXQgZmllbGQgbm93LgoKRnJpIE5vdiAyMiAwODoxMjo1OCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYtcnM2MDAwLmg6ICBMaW50OyB1c2UgdW5zaWduZWQgY2hhcnMgZm9yIGV4dGVybmFsIGZpZWxkcy4KCSogaW50ZXJuYWxjb2ZmLmg6ICBMaW50OyBjYXN0IHN0b3JhZ2UgY2xhc3NlcyB0byBzaWduZWQgY2hhci4KClRodSBOb3YgMjEgMjE6MDE6MDUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBzdGFiLmRlZjogUmVtb3ZlIHRoZSBHTlUgZXh0ZW5kZWQgdHlwZSBjb2RlcyAoZS5nLiBOX1NFVFQpLgoJKiBhb3V0NjQuaDogIFRoZSBoZXVyaXN0aWMgZm9yIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4KCXN1bm9zLXN0eWxlIGFuZCBic2Qtc3R5bGUgWk1BR0lDIGZpbGVzICh3cnQuIHdoZXJlIHRoZQoJdGV4dCBzZWdtZW50IHN0YXJ0cykgaXMgbW92ZWQgaW50byAodGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZikKCXRoZSBtYWNybyBOX0hFQURFUl9JTl9URVhULiAgVGhpcyBkZWZpbml0aW9uIGlzIG9ubHkgdXNlZAoJaWYgbm8gb3RoZXIgZGVmaW5pdGlvbiBpcyB1c2VkIC0gZS5nLiBiZmQvbmV3c29zMy5jIGRlZmluZXMKCU5fSEVBREVSX0lOX1RFWFQoeCkgdG8gYmUgYWx3YXlzIDAgKGFzIGJlZm9yZSkuCgpUaHUgTm92IDIxIDExOjUzOjAzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW91dDY0LmggKE5fVFhUQUREUiwgTl9UWFRPRkYsIE5fVFhUU0laRSk6ICBOZXcgZGVmaW5pdGlvbnMKCXRoYXQgc2hvdWxkIGhhbmRsZSBhbGwgdXNlcy4gIExPR0lDQUxfIHZlcnNpb25zIGRlbGV0ZWQuCglFbGltaW5hdGUgTl9IRUFERVJfSU5fVEVYVCwgdXNpbmcgYV9lbnRyeSB0byBkZXRlcm1pbmUgd2hpY2gKCWtpbmQgb2Ygem1hZ2ljIGEub3V0IGZpbGUgd2UgYXJlIGxvb2tpbmcgYXQuCgkqIGNvZmYtcnM2MDAwLmg6ICBUeXBvLgoKVHVlIE5vdiAxOSAxODo0MzozNyAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkoTm90ZTogIFRoaXMgaXMgYSByZXZpc2VkIGVudHJ5LCBhcyB3YXMgYW91dDY0LmguKQoJKiBhb3V0NjQuaDogIFNvbWUgY2xlYW51cHMgb2YgTl9UWFRBRERSIGFuZCBOX1RYVE9GRjoKCVdpbGwgbm93IHdvcmsgZm9yIGJvdGggb2xkLSBhbmQgbmV3LXN0eWxlIFpNQUdJQyBmaWxlcywKCWRlcGVuZGluZyBvbiBOX0hFQURFUl9JTl9URVhUIG1hY3JvLgoJQWRkIExPR0lDQUxfVFhUQUREUiwgTE9JQ0FMX1RYVE9GRiBhbmQgTE9HSUNBTF9UWFRTSVpFCgl0aGF0IGRvbid0IGNvdW50IHRoZSBleGVjIGhlYWRlciBhcyBwYXJ0CglvZiB0aGUgdGV4dCBzZWdtZW50LCB0byBiZSBjb25zaXN0ZW50IHdpdGggYmZkLgoJKiBhLm91dC5zdW40Lmg6ICBTaW1wbGlmaWVkL2ZpeGVkIGZvciBwcmV2aW91cyBjaGFuZ2UuCgpNb24gTm92IDE4IDAwOjAyOjA2IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmYuaDogIFVwZGF0ZSB0byBEV0FSRiBkcmFmdCA1IHZlcnNpb24gZnJvbSBnY2MyLgoKVGh1IE5vdiAxNCAxOTo0NDo1OSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN0YWIuZGVmOiAgQWRkZWQgZGVmcyBmb3IgZXh0ZW5kZWQgR05VIHN5bWJvbCB0eXBlcywKCXN1Y2ggYXMgTl9TRVRULiAgVGhlc2UgYXJlIG5vcm1hbGx5IGlmZGVmJ2Qgb3V0IChiZWNhdXNlCglvZiBjb25mbGljdHMgd2l0aCBhLm91dC5nbnUuaCksIGJ1dCBhcmUgdXNlZCBieSBiZmJfc3RhYl9uYW1lKCkuCgpUaHUgTm92IDE0IDE5OjE3OjAzIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLWNvbW1vbi5oOiAgQWRkIGRlZmluZXMgdG8gc3VwcG9ydCBFTEYgc3ltYm9sIHRhYmxlIGNvZGUuCgpNb24gTm92IDExIDE5OjAxOjA2IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLWludGVybmFsLmgsIGVsZi1leHRlcm5hbC5oLCBlbGYtY29tbW9uLmg6ICBBZGQgc3VwcG9ydCBmb3IKCW5vdGUgc2VjdGlvbnMsIHdoaWNoIGFyZSB1c2VkIGluIEVMRiBjb3JlIGZpbGVzIHRvIGhvbGQgY29waWVzCglvZiB2YXJpb3VzIC9wcm9jIHN0cnVjdHVyZXMuCgpUaHUgTm92ICA3IDA4OjU4OjI2IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IGN5Z251cy5jb20pCgoJKiBpbnRlcm5hbGNvZmYuaDogdG9vayBvdXQgdGhlIE04OCBkZXBlbmRlbmN5IGluIHRoZSBsaW5lbm8KCXN0cnVjdC4KCSogY29mZi1tODhrLmg6IGRlZmluZXMgR0VUX0xJTkVOT19MTk5PIGFuZCBQVVRfTElORU5PX0xOTk8gdG8gdXNlCgkzMmJpdCBsaW5ubyBlbnRyaWVzLgoJKiBhMjlrLW9wY29kZS5oOiBmaXhlZCBlbmNvZGluZyBvZiBtdGFjYwoKU3VuIE5vdiAgMyAxMTo1NDoyMiAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC5oOiBVcGRhdGVkIGZyb20gLi4vYmZkL2JmZC1pbi5oIChxLnYpLgoKRnJpIE5vdiAgMSAxMToxMzo1MyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGludGVybmFsY29mZi5oOiAgQWRkIHhfY3NlY3QgZGVmaW5lcy4KCkZyaSBPY3QgMjUgMDM6MTg6MjAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBSZW5hbWUgQ09GRi1yZWxhdGVkIGZpbGVzIGluIGBjb2ZmLUFSQ0guaCcgZm9ybS4KCWNvZmYtYTI5ay5oLCBjb2ZmLWkzODYuaCwgY29mZi1pOTYwLmgsIGNvZmYtbTY4ay5oLCBjb2ZmLW04OGsuaCwKCWNvZmYtbWlwcy5oLCBjb2ZmLXJzNjAwMC5oIHRvIGJlIGV4YWN0LgoKVGh1IE9jdCAyNCAyMjoxMToxMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglSUy82MDAwIHN1cHBvcnQsIGJ5IE1ldGluIEcuIE96aXNpaywgTWltaSBQaPv0bmctVGjlbyBW9SwgYW5kCglKb2huIEdpbG1vcmUuCgoJKiBhLm91dC5nbnUuaDogIFVwZGF0ZSBzbGlnaHRseS4KCSogYmZkLmg6ICBBZGQgbmV3IGVycm9yIGNvZGUsIGZpeCBkb2MsIGFkZCBiZmRfYXJjaF9yczYwMDAuCgkqIGludGVybmFsY29mZi5oOiAgQWRkIG1vcmUgRl8gY29kZXMgZm9yIGZpbGVoZHIuICBBZGQKCXJzLzYwMDAtZGVwZW5kZW50IGZpZWxkcyB0byBhb3V0aGRyLiAgQWRkIHN0b3JhZ2UgY2xhc3NlcwoJdG8gc3ltZW50cy4gIEFkZCA2MDAwLXNwZWNpZmljIGF1eGVudC4gIEFkZCByX3NpemUgaW4gcmVsb2MuCgkqIHJzNjAwMGNvZmYuYzogIE5ldyBmaWxlLgoKVGh1IE9jdCAyNCAwNDoxMzoyMCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGR3YXJmLmg6IE5ldyBmaWxlIGZvciBkd2FyZiBzdXBwb3J0LiAgQ29waWVkIGZyb20gZ2NjMgoJZGlzdHJpYnV0aW9uLgoKV2VkIE9jdCAxNiAxMzozMTo0NSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXQ2NC5oOiAgUmVtb3ZlIFBBR0VfU0laRSBkZWZpbmVzOyB0aGV5IGFyZSB0YXJnZXQtZGVwZW5kZW50LgoJQWRkIE5fRk5fU0VRIGZvciBOX0ZOIHN5bWJvbCB0eXBlIHVzZWQgb24gU2VxdWVudCBtYWNoaW5lcy4KCSogc3RhYi5kZWY6ICBJbmNsdWRlIE5fRk5fU0VRIGluIHRhYmxlLgoJKiBib3V0Lmg6ICBFeHRlcm5hbCBmb3JtYXRzIG9mIHN0cnVjdHVyZXMgdXNlIHVuc2lnbmVkIGNoYXJzLgoKRnJpIE9jdCAxMSAxMjo0MDo0MyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBiZmQuaDp1cGdyYWRlIGZyb20gYmZkLmMKCSogaW50ZXJuYWxjb2ZmLmg6IGFkZCBuX25hbWUsIG5femVyb2VzIGFuZCBuX29mZnNldCBtYWNyb3MKCSogYW1kY29mZi5oOiBEZWZpbmUgT01BR0lDIGFuZCBBT1VUSERSU1ouCgpGcmkgT2N0IDExIDEwOjU4OjA2IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogYS5vdXQuaG9zdC5oOiBDaGFuZ2UgU0VHTUVOVF9TSVpFIHRvIDB4MTAwMCBmb3IgU29ueS4KCSogYmZkLmggKGFsaWduX3Bvd2VyKTogQWRkIChhY3R1YWxseSBtb3ZlKSBjb21tZW50LgoKVHVlIE9jdCAgOCAxNToyOTozMiAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN5cy9oLXJ0YnNkLmg6IERlZmluZSBNSVNTSU5HX1ZGUFJJTlQgKGZvciBiaW51dGlscy9idWNvbW0uYykuCgpTdW4gT2N0ICA2IDE5OjI0OjM5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW91dDY0Lmg6ICBNb3ZlIHN0cnVjdCBpbnRlcm5hbF9leGVjIHRvIC4uL2JmZC9saWJhb3V0Lmggc28KCWl0IGNhbiBiZSBzaGFyZWQgYnkgYWxsIGBhLm91dC1mYW1pbHknIGNvZGUuICBSZW5hbWUKCUVYVEVSTkFMX0xJU1RfU0laRSB0byBFWFRFUk5BTF9OTElTVF9TSVpFLiAgVXNlIGJhc2ljIHR5cGVzCglmb3Igbmxpc3QgbWVtYmVycywgYW5kIG1ha2Ugc3RyeCBpbnRlZ3JhbCByYXRoZXIgdGhhbiBwb2ludGVyLgoJTW9yZSBjb21tZW50YXJ5IG9uIG5fdHlwZSB2YWx1ZXMuCgkqIGJvdXQuaDogIFByb3ZpZGUgYSBzdHJ1Y3QgZXh0ZXJuYWxfZXhlYyByYXRoZXIgdGhhbiBhbgoJaW50ZXJuYWxfZXhlYy4KCSogbTY4a2NvZmYuaDogIFJlbW92ZSBgdGFnZW50cmllcycgd2hpY2ggc251Y2sgaW4gZnJvbSB0aGUgaTk2MAoJQ09GRiBwb3J0LgoKRnJpIE9jdCAgNCAwMToyNTo1OSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGg4MzAwLW9wY29kZS5oOiAgUmVtb3ZlIGBfZW51bScgZnJvbSB0aGUgdHlwZWRlZiBmb3IgYW4gZW51bS4KCSogYmZkLmg6ICBVcGRhdGUgdG8gbWF0Y2ggYmZkIGNoYW5nZXMuCgoJKiBzeXMvaC1pMzg2bWFjaC5oLCBzeXNkZXAuaDogIEFkZCAzODYgTWFjaCBob3N0IHN1cHBvcnQuCgpUdWUgT2N0ICAxIDA0OjU4OjQyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLmgsIGVsZi1jb21tb24uaCwgZWxmLWV4dGVybmFsLmgsIGVsZi1pbnRlcm5hbC5oOgoJQWRkIHByZWxpbWluYXJ5IEVMRiBzdXBwb3J0LCBzdWZmaWNpZW50IGZvciBHREIsIGZyb20gRnJlZCBGaXNoLgoJKiBzeXNkZXAuaCwgc3lzL2gtYW1peC5oOiAgU3VwcG9ydCBBbWlnYSBTVlI0LgoKCSogc3lzL2gtdmF4dWx0Lmg6ICBNYWtlIGl0IHdvcmsuICAoRGF2aWQgVGF5bG9yIDx0YXlsb3JAdGhpbmsuY29tPikKCSogYS5vdXQudmF4Lmg6ICBSZW1vdmUgdW51c2VkIGFuZCBjb25mdXNpbmcgZmlsZS4KCk1vbiBTZXAgMzAgMTI6NTI6MzUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBzeXNkZXAuaDogRGVmaW5lIE5FV1NPUzNfU1lTLCBhbmQgdXNlIGl0LgoKRnJpIFNlcCAyMCAxMzozODoyMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGEub3V0LmdudS5oIChOX0ZOKTogIEl0cyB2YWx1ZSAqcmVhbGx5IGlzKiAweDFGLgoJRml4IGl0LCBhbmQgYWRkIGNvbW1lbnRzIHdhcm5pbmcgYWJvdXQgb3ItaW5nIE5fRVhUIHdpdGggaXQKCWFuZC9vciBOX1dBUk5JTkcuCgkqIGFvdXQ2NC5oIChOX0ZOKTogIEZpeCB2YWx1ZSwgYWRkIGNvbW1lbnRzIGFib3V0IE5fRVhULgoJKiBzdGFiLmRlZiAodGFibGUgYXQgZW5kKTogIFVwZGF0ZSB0byBzaG93IGFsbCB0aGUgdHlwZQoJdmFsdWVzIDwweDIwLCBpbmNsdWRpbmcgbG93IG9yZGVyIGJpdHMuICBNb3ZlIE5fRk4gdG8KCWl0cyByaWdodGZ1bCBwbGFjZS4KClR1ZSBTZXAgMTcgMTc6NDE6MzcgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIHN5cy9oLWlyaXgzLmg6ICBzZ2kvaXJpeCBzdXBwb3J0LgoKVHVlIFNlcCAxNyAwNzo1Mjo1OSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBzdGFiLmRlZiAoTl9ERUZEKTogIEFkZCBHTlUgTW9kdWxhLTIgZGVidWcgc3RhYiwgZnJvbSBBbmRyZXcKCUJlZXJzLgoKVGh1IFNlcCAxMiAxNDoxMjo1OSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpbnRlcm5hbGNvZmYuaCAoU1lNTk1MRU4sIEZJTE5NTEVOLCBESU1OVU0pOiAgRGVmaW5lIHRoZXNlCglmb3IgaW50ZXJuYWxjb2ZmLCBzZXBhcmF0ZWx5IGZyb20gdGhlIHZhcmlvdXMgZXh0ZXJuYWwgY29mZidzLgoJKiBhbWRjb2ZmLmgsIGJjczg4a2NvZmYuaCwgaTM4NmNvZmYuaCwgaW50ZWwtY29mZi5oLCBtNjhrY29mZi5oLAoJbTg4ay1iY3MuaDogUHJlZml4IFNZTU5NTEVOLCBGSUxOTUxFTiwgYW5kIERJTU5VTSB3aXRoIEVfJ3MgZm9yCgl0aGUgZXh0ZXJuYWwgc3RydWN0IGRlZmluaXRpb25zLgoJKiBlY29mZi5oOiBSZW1vdmUgdGhlc2UgI2RlZmluZSdzLCBrbHVkZ2Ugbm8gbG9uZ2VyIG5lZWRlZC4KCgkqIHN5cy9oLXVsdHJhMy5oOiAgQWRkIG5ldyBVbHRyYWNvbXB1dGVyIGhvc3QuCgkqIHN5c2RlcC5oOiAgQWRkIFVMVFJBM19TWU0xX1NZUyBhbmQgdXNlIGl0LgoKVHVlIFNlcCAxMCAxMDoxMTo0NiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpMzg2Y29mZi5oIChMSU5FU1opOiAgQWx3YXlzIDYsIG5vdCBiYXNlZCBvbiBzaXplb2YoKS4KCShGaXggZnJvbSBQZXRlciBTY2hhdWVyIDxwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZT4uKQoKV2VkIFNlcCAgNCAwODo1ODozNyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhLm91dC5nbnUuaCwgYW91dDY0Lmg6ICBBZGQgTl9XQVJOSU5HLiAgQ2hhbmdlIE5fRk4gdG8gMHgwRSwKCXRvIG1hdGNoIFN1bk9TIGFuZCBCU0QuICBBZGQgTl9DT01NIGFzIDB4MTIgZm9yIFN1bk9TIHNoYXJlZCBsaWIKCXN1cHBvcnQuCgkqIHN0YWIuZGVmOiAgQWRkIE5fQ09NTSB0byB0YWJsZSwgZml4IG92ZXJsYXAgY29tbWVudC4KClR1ZSBTZXAgIDMgMDY6Mjk6MjAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCU1lcmdlIHdpdGggbGF0ZXN0IEZTRiB2ZXJzaW9ucyBvZiB0aGVzZSBmaWxlcy4KCgkqIHN0YWIuZ251Lmg6ICBBZGQgTEFTVF9VTlVTRURfU1RBQl9DT0RFLgoJKiBzdGFiLmRlZjogIFVwZGF0ZSB0byBHUEwyLiAgTW92ZSBOX1dBUk5JTkcgb3V0LCBzaW5jZSBub3QgYQoJZGVidWcgc3ltYm9sLiAgQ2hhbmdlIGNvbW1lbnRzLCBhbmQgcmVvcmRlciB0YWJsZSB0byBudW1lcmljCglvcmRlci4gIFVwZGF0ZSBmaW5hbCB0YWJsZSBjb21tZW50LgoJKE5fRFNMSU5FLCBOX0JTTElORSk6ICBSZW51bWJlciBmcm9tIDB4NjYgYW5kIDB4NjgsIHRvIDB4NDYgYW5kIDB4NDguCgoJKiBvYnN0YWNrLmg6ICBHUEwyLiAgTWVyZ2UuCgpGcmkgQXVnIDIzIDAxOjU0OjIzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGEub3V0LmdudS5oLCBhLm91dC5zdW40Lmg6ICBNYWtlIFNFR01FTlRfU0laRSBhYmxlIHRvIGRlcGVuZAoJb24gdGhlIHBhcnRpY3VsYXIgYS5vdXQgYmVpbmcgZXhhbWluZWQuCgkqIGEub3V0LnN1bjQuaDogIERlZmluZSBzZWdtZW50IHNpemVzIGZvciBTdW4tMydzIGFuZCBTdW4tNCdzLgoJKiBGSVhNRTogIGEub3V0LmdudS5oIGlzIGFsbW9zdCBvYnNvbGV0ZS4KCSogRklYTUU6ICBhLm91dC5zdW40Lmggc2hvdWxkIGJlIHJlbmFtZWQgYS5vdXQuc3VuLmggbm93LgoKV2VkIEF1ZyAyMSAyMDozMjoxMyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBTdGFydCBhIENoYW5nZUxvZyBmb3IgdGhlIGluY2x1ZGVzIGRpcmVjdG9yeS4KCgkqIGEub3V0LmdudS5oIChOX0ZOKTogIEZpeCB2YWx1ZSAtLSB3YXMgMTUsIHNob3VsZCBiZSAweDFFLgoJKiBzdGFiLmRlZjogIFVwZGF0ZSBhbGxvY2F0aW9uIHRhYmxlIGluIGNvbW1lbnRzIGF0IGVuZCwKCXRvIHJlZmxlY3QgcmVhbGl0eSBhcyBJIGtub3cgaXQuCgoMCkxvY2FsIFZhcmlhYmxlczoKbW9kZTogY2hhbmdlLWxvZwpsZWZ0LW1hcmdpbjogOApmaWxsLWNvbHVtbjogNzQKdmVyc2lvbi1jb250cm9sOiBuZXZlcgpFbmQ6Cg==