RnJpIERlYyAzMSAxNjoyMzo0MyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJTWlub3IgY2xlYW51cHMgc3VnZ2VzdGVkIGJ5IENvZGVDZW50ZXIuCgkqIGFvdXR4LmgsIGNvZmZnZW4uYywgZWNvZmYuYywgZWNvZmZsaW5rLmMsIGVsZi5jLCBsaWJiZmQuYywKCWxpbmtlci5jLCByZWxvYy5jLCBzZWN0aW9uLmMsIHNyZWMuYzogQWRkZWQgLypBUkdTVVNFRCovIGFzCglhcHByb3ByaWF0ZS4KCSogYW91dHguaCAoc3RydWN0IGV4dGVybmFsX2V4ZWMpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGRlY2xhcmF0aW9uLgoJKE5BTUUoYW91dCxzb21lX2FvdXRfb2JqZWN0X3ApKTogU2V0IHNvbWUgdGRhdGEgcG9pbnRlcnMgdG8gTlVMTC4KCShhZGp1c3Rfel9tYWdpYyk6IFJlbW92ZWQgdXNlbGVzcyB2YXJpYWJsZSBkYXRhX3ZtYS4KCShzdHJpbmd0YWJfaW5pdCk6IEluaXRpYWxpemUgaGFzaF96ZXJvLgoJKGFkZF90b19zdHJpbmd0YWIpOiBSZW1vdmVkIHVudXNlZCBmb3VydGggYXJndW1lbnQuCgkoTkFNRShhb3V0LHN3YXBfc3RkX3JlbG9jX291dCkpOiBSZW1vdmVkIHVzZWxlc3MgdmFyaWFibGUKCXJfYWRkZW5kLgoJKGFvdXRfbGlua19pbnB1dF9zZWN0aW9uKTogQWRkZWQgc29tZSBjYXN0cy4KCSogYXJjaGl2ZS5jIChnZXRfZXh0ZW5kZWRfYXJlbHRfZmlsZW5hbWUsIGRvX3NsdXJwX2NvZmZfYXJtYXAsCgliZmRfYXJfaGRyX2Zyb21fZmlsZXN5c3RlbSwgYnNkX3dyaXRlX2FybWFwLCBjb2ZmX3dyaXRlX2FybWFwKToKCU1pbm9yIGNvZGUgcmV3cml0aW5nIHRvIG1ha2UgaXQgbW9yZSBDIGxpa2UuCgkoZG9fc2x1cnBfYnNkX2FybWFwKTogQWRkZWQgc29tZSBjYXN0cy4KCSogZWNvZmYuYyAoZWNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogUmVtb3ZlZCB1c2VsZXNzIHZhcmlhYmxlCglzY25fYmFzZS4KCShlY29mZl93cml0ZV9hcm1hcCk6IEFkZGVkIHNvbWUgY2FzdHMuICBVc2UgIiIgcmF0aGVyIHRoYW4gIlwwIi4KCSogZWNvZmZsaW5rLmMgKGJmZF9lY29mZl93cml0ZV9kZWJ1Zyk6IEFkZGVkIGEgY2FzdC4KCSogbGliYW91dC5oIChzdHJ1Y3QgaW50ZXJuYWxfZXhlYyk6IFJlbW92ZWQgdW5uZWNlc3NhcnkKCWRlY2xhcmF0aW9uLgoJKiBsaW5rZXIuYyAoX2JmZF9nZW5lcmljX2luZGlyZWN0X2xpbmtfb3JkZXIpOiBBZGRlZCBhIGNhc3QuCgkqIG9wbmNscy5jIChuZXdfYmZkKTogUmVtb3ZlZCBhIGNhc3QuCgkqIHJlbG9jLmMgKGJmZF9nZW5lcmljX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IEFkZGVkCglzb21lIGNhc3RzLgoJKiBzcmVjLmMgKGludGVybmFsX3NyZWNfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogUmVtb3ZlZCB1c2VsZXNzCgl2YXJpYWJsZSBieXRlc193cml0dGVuLgoKRnJpIERlYyAzMSAxMTo0NjoxMyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBpMzg2bWFjaDMuYyAoTl9UWFRBRERSKTogRG9uJ3QgZGVmaW5lIGFmdGVyIGFsbC4KCShURVhUX1NUQVJUX0FERFIpOiBEb24ndCBpbmNsdWRlIGV4ZWMgaGVhZGVyIHNpemUgaW4gdmFsdWUuCgpUaHUgRGVjIDMwIDE1OjQ3OjU0IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGkzODZtYWNoMy5jIChOX1RYVEFERFIpOiBEZWZpbmUuCgpUaHUgRGVjIDMwIDEzOjM3OjI0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCglFeHRlbnNpdmUgY2hhbmdlcyB0byBtb3ZlIHRoZSBidWxrIG9mIHRoZSBsaW5rZXIgaW50byBCRkQgc28gdGhhdAoJbW9yZSBlZmZpY2llbnQgYmFja2VuZCBjb2RlIGNhbiBiZSB3cml0dGVuIGZvciBzcGVjaWZpYyBvYmplY3QKCWZpbGVzLiAgT25seSBleGlzdGluZyBlZmZpY2llbnQgYmFja2VuZCBpcyBhLm91dC4KCSogc2VjbGV0LmMsIHNlY2xldC5oOiBSZW1vdmVkLgoJKiBoYXNoLmMsIGxpbmtlci5jLCBnZW5saW5rLmg6IE5ldyBmaWxlcy4KCSogYmZkLWluLmg6IFJlbW92ZWQgYmZkX2Vycm9yX3ZlY3Rvci4gIERlY2xhcmVkIGhhc2ggdGFibGUKCXN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4KCShKVU1QX1RBQkxFKTogUmVtb3ZlZCBiZmRfc2VjbGV0X2xpbmssIGFkZGVkCgliZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSwgYmZkX2xpbmtfYWRkX3N5bWJvbHMgYW5kCgliZmRfZmluYWxfbGluay4KCSogQWxsIGJhY2tlbmRzOiBDaGFuZ2VkIGFjY29yZGluZ2x5LgoJKiBiZmQtaW4yLmg6IFJlYnVpbHQuCgkqIGJmZC5jIChzdHJ1Y3QgX2JmZCk6IEFkZGVkIGxpbmtfbmV4dCBhbmQgYXJjaGl2ZV9wYXNzIGZpZWxkcy4KCVJlbW92ZWQgbGRfc3ltYm9scyBmaWVsZC4KCShiZmRfbm9ucmVwcmVzZW50YWJsZV9zZWN0aW9uLCBiZmRfdW5kZWZpbmVkX3N5bWJvbCwKCWJmZF9yZWxvY192YWx1ZV90cnVuY2F0ZWQsIGJmZF9yZWxvY19pc19kYW5nZXJvdXMsCgliZmRfZXJyb3JfdmVjdG9yKTogUmVtb3ZlZC4KCShiZmRfZGVmYXVsdF9lcnJvcl90cmFwLCBiZmRfZXJyb3JfdHJhcCwKCWJmZF9lcnJvcl9ub25yZXByZXNlbnRhYmx0cmFwKTogUmVtb3ZlZC4KCShiZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogUGFzcyBsaW5rX2luZm8uICBQYXNzCglsaW5rX29yZGVyIGluc3RlYWQgb2Ygc2VjbGV0LiAgUGFzcyBzeW1ib2xzLgoJKGJmZF9yZWxheF9zZWN0aW9uKTogUGFzcyBsaW5rX2luZm8uCgkoYmZkX3NlY2xldF9saW5rKTogUmVtb3ZlZC4KCShiZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSwgYmZkX2xpbmtfYWRkX3N5bWJvbHMsCgliZmRfZmluYWxfbGluayk6IE5ldyBtYWNyb3MuCgkqIGxpYmJmZC1pbi5oOiBJZiBfX0dOVUNfXyBpcyBkZWZpbmVkIGFuZCBhbGxvY2EgaXMgbm90LCBkZWZpbmUKCWFsbG9jYSBhcyBfX2J1aWx0aW5fYWxsb2NhLiAgRGVjbGFyZSBpbnRlcm5hbCBsaW5raW5nIGZ1bmN0aW9ucy4KCSogbGliYmZkLmg6IFJlYnVpbHQuCgkqIGxpYmJmZC5jIChiZmRfc2Vlayk6IENvbW1lbnQgb3V0IGZzZWVrIGFzc2VydGlvbi4gIEl0J3Mgd29ya2VkCglmb3IgbW9udGhzLgoJKiByZWxvYy5jIChyZWxvY19ob3d0b190eXBlKTogQWRkZWQgZXJyb3JfbWVzc2FnZSBhcmd1bWVudCB0bwoJc3BlY2lhbF9mdW5jdGlvbiBmaWVsZC4gIENoYW5nZWQgYWxsIGNhbGxlcnMgYW5kIGFsbCBkZWZpbml0aW9ucy4KCShiZmRfZ2V0X3JlbG9jX3NpemUpOiBNYWtlIGFyZ3VtZW50IGEgY29uc3QgcG9pbnRlci4KCShiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogQWRkIGVycm9yX21lc3NhZ2UgYXJndW1lbnQgdG8gaG9sZAoJc3RyaW5nIHNldCBpZiByZXR1cm4gdmFsdWUgaWYgYmZkX3JlbG9jX2Rhbmdlcm91cy4gIENoYW5nZWQgYWxsCgljYWxsZXJzLgoJKF9iZmRfZmluYWxfbGlua19yZWxvY2F0ZSwgX2JmZF9yZWxvY2F0ZV9jb250ZW50cyk6IE5ldyBmdW5jdGlvbnMuCgkqIHNlY3Rpb24uYyAoYXNlY3Rpb24pOiBSZW5hbWVkIHNlY2xldHNfaGVhZCBhbmQgc2VjbGV0c190YWlsIHRvCglsaW5rX29yZGVyX2hlYWQgYW5kIGxpbmtfb3JkZXJfdGFpbC4KCSogdGFyZ2V0cy5jIChiZmRfdGFyZ2V0KTogUmVwbGFjZWQgc2VjbGV0IGFyZ3VtZW50IHdpdGggbGlua19pbmZvCglhbmQgbGlua19vcmRlciBhbmQgc3ltYm9scyBhcmd1bWVudHMgaW4KCWJmZF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMuICBBZGRlZCBzeW1ib2xzIGFyZ3VtZW50IHRvCgliZmRfcmVsYXhfc2VjdGlvbi4gIFJlbW92ZWQgYmZkX3NlY2xldF9saW5rLiAgQWRkZWQKCWJmZF9saW5rX2hhc2hfdGFibGVfY3JlYXRlLCBiZmRfbGlua19hZGRfc3ltYm9scyBhbmQKCWJmZF9maW5hbF9saW5rLgoJKiBsaWJhb3V0LmggKHN0cnVjdCBhb3V0ZGF0YSk6IEFkZGVkIGV4dGVybmFsX3N5bXMsCglleHRlcm5hbF9zeW1fY291bnQsIGV4dGVybmFsX3N0cmluZ3MsIHN5bV9oYXNoZXMgZmllbGRzLgoJKG9ial9hb3V0X2V4dGVybmFsX3N5bXMsIG9ial9hb3V0X2V4dGVybmFsX3N5bV9jb3VudCwKCW9ial9hb3V0X2V4dGVybmFsX3N0cmluZ3MsIG9ial9hb3V0X3N5bV9oYXNoZXMpOiBOZXcgYWNjZXNzb3IKCW1hY3Jvcy4KCShXUklURV9IRUFERVJTKTogT25seSBvdXRwdXQgc3ltYm9scyBpZiBvdXRzeW1ib2xzIGlzIG5vdCBOVUxMLgoJKiBhb3V0eC5oOiBXcm90ZSBuZXcgYmFjayBlbmQgbGlua2VyIHJvdXRpbmVzLgoJKHRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWdzKTogUmV0dXJuIGJvb2xlYW4gdmFsdWUuICBEb24ndCB1c2UKCWJmZF9lcnJvcl92ZWN0b3IuCgkoTkFNRShhb3V0LHdyaXRlX3N5bXMpKTogUmV0dXJuIGJvb2xlYW4gdmFsdWUuICBDaGVjayByZXR1cm4gdmFsdWUKCW9mIHRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWdzIGFuZCBiZmRfd3JpdGUuCgkqIGFvdXQtdGFyZ2V0LmggKGZpbmFsX2xpbmtfY2FsbGJhY2spOiBOZXcgZnVuY3Rpb24uCgkoTVlfYmZkX2ZpbmFsX2xpbmspOiBOZXcgZnVuY3Rpb24uCgkqIGFvdXQtYWRvYmUuYyAoYW91dF9hZG9iZV93cml0ZV9vYmplY3RfY29udGVudHMpOiBDaGVjayByZXR1cm4KCXZhbHVlIG9mIGFvdXRfMzJfd3JpdGVfc3ltcy4KCSogaHAzMDBocHV4LmMgKE1ZKHdyaXRlX29iamVjdF9jb250ZW50cykpOiBMaWtld2lzZS4KCSogaTM4Nmx5bnguYyAoV1JJVEVfSEVBREVSUyk6IExpa2V3aXNlLgoJKiBsaWJhb3V0LmggKFdSSVRFX0hFQURFUlMpOiBMaWtld2lzZS4KCSogYm91dC5jOiBDaGFuZ2VkIGZ1bmN0aW9ucyB0byB1c2UgbGlua19pbmZvLT5jYWxsYmFja3MgcmF0aGVyCgl0aGFuIGJmZF9lcnJvcl92ZWN0b3IsIGFuZCBsaW5rX29yZGVycyByYXRoZXIgdGhhbiBzZWNsZXRzLgoJKiBjb2ZmLWFscGhhLmM6IExpa2V3aXNlLgoJKiBjb2ZmLWg4MzAwLmM6IExpa2V3aXNlLgoJKiBjb2ZmLWg4NTAwLmM6IExpa2V3aXNlLgoJKiBjb2ZmLXNoLmM6IExpa2V3aXNlLgoJKiBjb2ZmLXo4ay5jOiBMaWtld2lzZS4KCSogZWxmMzItaHBwYS5jOiBMaWtld2lzZS4KCSogcmVsb2MxNi5jOiBMaWtld2lzZS4KCSogY29mZi1hbHBoYS5jIChhbHBoYV9lY29mZl9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMpOiBMb29rCgl1cCBfZ3AgaW4gdGhlIGhhc2ggdGFibGUgcmF0aGVyIHRoYW4gaW4gb3V0c3ltYm9scy4KCSogY29mZi1hMjlrLmMgKGEyOWtfcmVsb2MpOiBQYXNzIGVycm9ycyBiYWNrIGluIG5ldyBlcnJvcl9tZXNzYWdlCglhcmd1bWVudCByYXRoZXIgdGhhbiBwcmludGluZyB0aGVtLgoJKiBjb2ZmY29kZS5oIChiZmRfY29mZl9yZWxvYzE2X2V4dHJhX2Nhc2VzKTogVGFrZSBsaW5rX2luZm8gYW5kCglsaW5rX29yZGVyIGFyZ3VtZW50cyByYXRoZXIgdGhhbiBzZWNsZXQuICBDaGFuZ2VkIGFsbCB1c2VzIGFuZAoJZGVmaW5pdGlvbnMuCgkoYmZkX2NvZmZfcmVsb2MxNl9lc3RpbWF0ZSk6IFBhc3MgbGlua19pbmZvIGFyZ3VtZW50cy4gIENoYW5nZWQKCWFsbCB1c2VzIGFuZCBkZWZpbml0aW9ucy4KCSogbGliY29mZi5oOiBSZWJ1aWx0LgoJKiBlY29mZi5jIChlY29mZl9nZXRfZXh0cik6IElmIHN5bWJvbCBpcyBkZWZpbmVkIGJ5IGxpbmtlciwgYnV0Cglub3QgYnkgRUNPRkYsIG1ha2UgaXQgc2NBYnMuCgkoZWNvZmZfYmZkX2ZpbmFsX2xpbmspOiBSZW5hbWVkIGZyb20gZWNvZmZfYmZkX3NlY2xldF9saW5rIGFuZAoJcmV3cml0dGVuLgoJKiBlbGYzMi1taXBzLmMgKG1pcHNfZWxmX2ZpbmFsX2xpbmspOiBSZW5hbWVkIGZyb20KCW1pcHNfZWxmX3NlY2xldF9saW5rIGFuZCByZXdyaXR0ZW4uCgkqIGVsZjMyLWhwcGEuYyAoZWxmMzJfaHBwYV9zdHViX2Rlc2NyaXB0aW9uKTogQWRkZWQgbGlua19pbmZvCglmaWVsZC4KCShuZXdfc3R1YiwgYWRkX3N0dWJfYnlfbmFtZSwgaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIsCglocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViLCBocHBhX2xvb2tfZm9yX3N0dWJzX2luX3NlY3Rpb24pOgoJQWRkZWQgbGlua19pbmZvIGFyZ3VtZW50cy4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgkqIGVsZmNvZGUuaCAoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6IERvbid0IHF1aXQgaWYgb3V0c3ltYm9scyBpcwoJbm90IE5VTEwuCgkqIG9hc3lzLmMgKG9hc3lzX3dyaXRlX3NlY3Rpb25zKTogUmV0dXJuIGJvb2xlYW4gdmFsdWUgcmF0aGVyIHRoYW4KCXVzaW5nIGJmZF9lcnJvcl92ZWN0b3IuCgkob2FzeXNfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mCglvYXN5c193cml0ZV9zZWN0aW9ucy4KCSogaG9zdHMvc3RkLWhvc3QuaDogRG9uJ3QgZGVjbGFyZSBxc29ydCBvciBzdHJ0b2wuCgkqIE1ha2VmaWxlLmluOiBSZWJ1aWxkIGRlcGVuZGVuY2llcy4KCShCRkRfTElCUyk6IFJlbW92ZWQgc2VjbGV0Lm8uICBBZGRlZCBoYXNoLm8gYW5kIGxpbmtlci5vLgoJKENGSUxFUyk6IFJlbW92ZWQgc2VjbGV0LmMuICBBZGRlZCBoYXNoLmMgYW5kIGxpbmtlci5jLgoJKEhGSUxFUyk6IFJlbW92ZWQgc2VjbGV0LmguICBBZGRlZCBnZW5saW5rLmguCgpUaHUgRGVjIDMwIDA3OjQxOjM2IDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIHNlY3Rpb24uYyAoYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogIFJldHVybiB6ZXJvIGZpbGxlZCBidWZmZXIKCWlmIHNlY3Rpb24gaGFzIG5vIGNvbnRlbnRzLgoKVHVlIERlYyAyOCAxMjo0Mzo1NCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX2VsZl9nZW5lcmljX3JlbG9jKTogSWYgdGhpcyBpcyBub3QgYW4gaW5wbGFjZSByZWxvYywKCXRoZW4gc2tpcCBiZmRfcGVyZm9ybV9yZWxvY2F0aW9uIGV2ZW4gaWYgdGhlIGFkZGVuZCBpcyBub24temVyby4KClR1ZSBEZWMgMjEgMDk6MjI6MTkgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHJ0bC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl93cml0ZV9yZWxvY3MpIFtTV0FQX09VVF9SRUxPQ19PRkZTRVRdOiBDb3B5CglhZGRlbmQgdG8gcl9vZmZzZXQgZmllbGQuCgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkZWQgY29mZi1zcGFyYy5jLiAgUmVidWlsZCBkZXBlbmRlbmNpZXMuCgoJKiBjb2ZmLXNwYXJjLmMgKFNXQVBfSU5fUkVMT0NfT0ZGU0VULCBTV0FQX09VVF9SRUxPQ19PRkZTRVQsCglDQUxDX0FEREVORCk6IERlZmluZS4KCgkqIGFpeDM4Ni1jb3JlLmMgKGFpeDM4Nl9jb3JlX2ZpbGVfcCk6IFVzZSBjZF9yZWdzWzBdIGZvciBjb21wdXRpbmcKCXRoZSBvZmZzZXRvZiBiZWNhdXNlIEFJWCAvYmluL2NjIGRvZXMgbm90IGxpa2UgdG8gdGFrZSB0aGUgYWRkcmVzcwoJb2YgYW4gYXJyYXkuICAoRnJvbSBNaW5oIFRyYW4tTGUuKQoKVGh1IERlYyAxNiAxMzowNjozMiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIFRodSBEZWMgMTYgMTU6NDE6MDYgMTk5MyAgUGV0ZXIgSG9vZ2VuYm9vbSAgKGhvb2dlbkBjcy51dGFoLmVkdSkKCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBNYWtlIHN1cmUgdG8gY29weQoJdGhlIHJldHVybiBwb2ludGVyIGludG8gJXIyIGlmIG5vIGp1bXAtaW4tY2FsbC1kZWxheS1zbG90CglvcHRpbWl6YXRpb24gd2FzIGRvbmUuCgoJKiBob3N0cy9ocDMwMGJzZC5oOiBDb3JyZWN0bHkgaWRlbnRpZnkgNC4zQlNEIHZzIDQuNEJTRC4KCldlZCBEZWMgMTUgMDg6MDQ6MTYgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogaG9zdHMvc3RkLWhvc3QuaDogKHRpbWUpOiBEb24ndCBkZWNsYXJlOyBjb25mbGljdHMgb24gTWFjaDMuCgoJKiBob3N0cy9pMzg2bWFjaDMuaCAoSE9TVF9QQUdFX1NJWkUpOiBTZXQgdG8gMSB0byBhdm9pZCBwYWRkaW5nLgoJKEhPU1RfU0VHTUVOVF9TSVpFKTogU2V0IHRvIDAgZm9yIHNhbWUgcmVhc29uLgoKCSogaTM4Nm1hY2gzLmMgKFBBR0VfU0laRSwgU0VHTUVOVF9TSVpFKTogU2FtZSBjaGFuZ2VzIGFzIGFib3ZlLgoJKFRFWFRfU1RBUlRfQUREUik6IENvcnJlY3QuCgkoTVlfYmFja2VuZF9kYXRhKTogRGVmaW5lLgoKCSogYW91dHguaCAoYWRqdXN0X29fbWFnaWMsIGFkanVzdF96X21hZ2ljLCBhZGp1c3Rfbl9tYWdpYyk6CglOZXcgZnVuY3Rpb25zOyBjb2RlIG1vdmVkIGZyb20gYW91dF88c2l6ZT5fYWRqdXN0X3NpemVzX2FuZF92bWFzLgoKVHVlIERlYyAxNCAyMTo0ODozMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCiAgICAgICAgKiBzb20uYyAoc29tX2JlZ2luX3dyaXRpbmcpOiBGaXggdGhpbmtvcyBpbiBhdXhpbGlhcnkgaGVhZGVyCglzdXBwb3J0LgoJKGJmZF9zb21fYXR0YWNoX2F1eF9oZHIpOiBMaWtld2lzZS4KCk1vbiBEZWMgMTMgMjM6MzQ6NDggMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX2dlbl9yZWxvY190eXBlKTogSGFuZGxlICdUJyBmaWVsZAoJc2VsZWN0b3JzIGZvciBQSUMgY29kZS4KCgkqIHNvbS5jIChocHBhX3NvbV9nZW5fcmVsb2NfdHlwZSk6IEhhbmRsZSAnVCcgZmllbGQgc2VsZWN0b3JzLgoJKHNvbV93cml0ZV9maXh1cHMpOiBIYW5kbGUgUl9ETFRfUkVMLCBSX0ZTRUwsIFJfUlNFTCwgUl9MU0VMCglyZWxvY2F0aW9ucyBuZWVkZWQgYnkgUElDLgoKVHVlIERlYyAgNyAxNTo0Nzo1MSAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogbmxtY29kZS5oOiAgRml4ZXMgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuLi4KClR1ZSBEZWMgIDcgMTU6MTA6NTQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogbGlibmxtLmggKG5sbV9iYWNrZW5kX2RhdGEpOiBSZW1vdmVkIG1hY3JvIGRlZmluaXRpb24uCgkobmxtX2FscGhhX2JhY2tlbmRfZGF0YSk6IEFkanVzdGVkIGFjY29yZGluZ2x5LgoKU3VuIERlYyAgNSAxOTozMjowOCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIHNvbS5jIChzb21fYmVnaW5fd3JpdGluZyk6IEZsZXNoIG91dCBjb2RlIGZvciBoYW5kbGluZyBzaW1wbGUKCWF1eGlsaWFyeSBoZWFkZXJzLgoJKGJmZF9zb21fYXR0YWNoX2F1eF9oZHIpOiBOZXcgZnVuY3Rpb24uCgoJKiBzb20uaCAoc3RydWN0IHNvbWRhdGEpOiBBZGQgZmllbGRzIGZvciBhdHRhY2hpbmcgdmVyc2lvbiBhbmQKCWNvcHlyaWdodCBoZWFkZXJzLiAgQWRkIGFjY2Vzc29yIG1hY3Jvcy4KCgkqIHNvbS5jIChSX0RMVF9SRUwsIFJfQVVYX1VOV0lORCwgUl9TRUNfU1RNVCk6IEFkZCBwcm90ZWN0ZWQKCWRlZmluaXRpb25zIGZvciBvbGQgdmVyc2lvbnMgb2YgSFBVWCB3aGljaCBmYWlsIHRvIGRlZmluZSB0aGVtLgoJKHNvbV9ocHBhX2hvd3RvX3RhbGJlKTogQWRkIFJfRExUX1JFTCwgUl9BVVhfVU5XSU5ELCBhbmQgUl9TRUNfU1RNVAoJbm93IHRoYXQgdGhleSdyZSBzYWZlLiAgRGVsZXRlIGJvZ3VzIFJfU1RBVEVNRU5UIHJlbG9jYXRpb25zLgoKCSogc29tLmMgKHNvbV9ocHBhX2hvd3RvX3RhYmxlKTogQWRkIG1pc3NpbmcgUl9FTkRfVFJZLiAgRGVsZXRlIAoJZXh0cmEgUl9EQVRBX09WRVJSSURFLgoJKGhwcGFfc29tX2dlbl9yZWxvY190eXBlKTogR2VuZXJhdGUgYSByZWxvY2F0aW9uIGZvciB0aGUgcm91bmRpbmcKCW1vZGUgc2VsZWN0b3IgaWYgbmVlZGVkLgoJKHNvbV93cml0ZV9maXh1cHMpOiBIYW5kbGUgcmVxdWVzdHMgZm9yIGEgY2hhbmdlIGluIHRoZSBkZWZhdWx0Cglyb3VuZGluZyBtb2RlLiAgUm91bmRpbmcgbW9kZXMgZG8gbm90IGNvbnN1bWUgaW5wdXQgYnl0ZXMsIGJ1dAoJYXJlIGp1c3QgbWFya2VycyBtdWNoIGxpa2UgUl9FTlRSWSBhbmQgUl9FWElULgoKU2F0IERlYyAgNCAxOTo0MDozMiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCglGcmkgRGVjICAzIDA5OjU1OjE3IDE5OTMgIFBldGUgSG9vZ2VuYm9vbSAgKGhvb2dlbkBjcy51dGFoLmVkdSkKCgkqIGVsZjMyLWhwcGEuYzogKGhwcGFfZWxmX3JlbG9jKTogIERvIG5vdCBkbyBjb2RlIHJlb3JkZXJpbmcgd2hlbgoJdGhlIGJyYW5jaCBpbnN0cnVjdGlvbiBhcyBvcmlnaW5hbGx5IGJlZW4gbnVsbGlmaWVkLgoJaHBwYV9lbGZfcmVsb2MpOiAgQXZvaWQgdXNlbGVzcyBjYWxsIHRvIGJmZF9wdXRfMzIgKCkgaW4gdGhlCgljYXNlIG9mIG5vIGNvZGUgcmVvcmRlcmluZyBkdWUgdG8gYW4gTERPIGluc3RydWN0aW9uIGluIHRoZQoJZGVsYXkgc2xvdCBvZiB0aGUgYnJhbmNoLiAgTWFrZSBzdXJlIHRvIHJlbG9jYXRlIHRoZSBjb3JyZWN0CglpbnN0cnVjdGlvbi4gIERvIG5vdCBwZXJmb3JtIGluc3RydWN0aW9uIHJlb3JkZXJpbmcgZm9yIG1pbGxpY29kZQoJY2FsbHMuCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiAgQ2hhbmdlIHRoZSByZWxvY2F0aW9uIHR5cGUKCXRvIFJfSFBQQV9TVFVCX0NBTExfMTcgd2hlbiBzcGVjaWFsIHByb2Nlc3NpbmcgbWlnaHQgYmUgbmVlZGVkLgoJKGhwcGFfZWxmX2J1aWxkX2xvbmdfYnJhbmNoX3N0dWIpOiBQcmV2ZW50IGNvZGUgcmVvcmRlcmluZyBvbgoJYSBjYWxsIGZyb20gYSBsaW5rZXIgc3R1YiB0byBhbm90aGVyIGxpbmtlciBzdHViIGFuZCBmb3IgbWlsbGljb2RlCgljYWxscy4gIERvIG5vdCB0cmFzaCB0aGUgcmV0dXJuIHJlZ2lzdGVyIGZvciBjYWxscyBmcm9tIG9uZSBsaW5rZXIKCXN0dWIgdG8gYSBzZWNvbmQgbGlua2VyIHN0dWIuCgoJKiBlbGYzMi1ocHBhLmM6IChlbGZfaHBwYV9ob3d0b190YWJsZSk6ICBQTEFCRUwgYW5kIERMVAoJcmVsb2NhdGlvbnMgYXJlIG5vdCBwYy1yZWxhdGl2ZS4KCgkqIGhwcGFfc3R1YnMuaDogKEJMRV9OX1hYWF8wXzMxKTogIE5ldyBpbnN0cnVjdGlvbiB1c2VkIGluCglsaW5rZXIgc3R1YiBjb2RlLiAKCShDT1BZXzJfMzEpOiAgTGlrZXdpc2UuCgpGcmkgRGVjICAzIDE4OjQwOjU4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9zb2xhcmlzMi5taCAoSERFRklORVMpOiBSZW1vdmUgLURjb25zdD0KCSogaG9zdHMvc29sYXJpcy5oOiBJZiBub3QgX19HTlVDX18sIGRlZmluZSBjb25zdCBhcyBlbXB0eS4KClRodSBEZWMgIDIgMTU6NDM6MzIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWNvZmYuYzogQWRkZWQgdmFyaW91cyBjYXN0cyBmb3IgMzIvNjQgYml0IGNyb3NzIHRhcmdldGluZy4KCShlY29mZl9ta29iamVjdF9ob29rKTogU2V0IFNFQ19TSEFSRURfTElCUkFSWSBmb3IgdGhlIC5yZWdpbmZvCglzZWN0aW9uIHNvIHRoYXQgdGhlIGxpbmtlciBpZ25vcmVzIGl0LgoJKiBlY29mZmxpbmsuYzogQWRkZWQgdmFyaW91cyBjYXN0cyBmb3IgMzIvNjQgYml0IGNyb3NzIHRhcmdldGluZy4KCShlY29mZl9hZGRfYnl0ZXMpOiBDaGFuZ2VkIG5lZWQgYXJndW1lbnQgdG8gc2l6ZV90LgoJKGJmZF9lY29mZl9kZWJ1Z19saW5rX290aGVyKTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mCgllY29mZl9hZGRfc3RyaW5nLgoKCSogbGliYmZkLWluLmggKG5ld19iZmQpOiBVc2Ugdm9pZCByYXRoZXIgdGhhbiBhbiBlbXB0eSBwYXJhbWV0ZXIKCWxpc3QuCgkqIGxpYmJmZC5oOiBSZWJ1aWx0LgoKCSogbGlibmxtLmggKHN0cnVjdCBubG1fb2JqX3RkYXRhKTogTmV3IGZpZWxkIGJhY2tlbmRfZGF0YS4KCShubG1fYmFja2VuZF9kYXRhLCBubG1fYWxwaGFfYmFja2VuZF9kYXRhKTogTmV3IGFjY2Vzc29yIG1hY3Jvcy4KCShzdHJ1Y3QgbmxtX2JhY2tlbmRfZGF0YSk6IE5ldyBmaWVsZCBub191bmluaXRpYWxpemVkX2RhdGEuCgkobmxtX25vX3VuaW5pdGlhbGl6ZWRfZGF0YSk6IE5ldyBhY2Nlc3NvciBtYWNyby4KCSogbmxtY29kZS5oIChubG1fY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogSGFuZGxlCglub191bmluaXRpYWxpemVkX2RhdGEuCgkobmxtX2V4dGVybmFsX3JlbG9jX2NvbXBhcmUpOiBTb3J0IHJlbG9jcyBieSBhZGRyZXNzIGZvciBhCglwYXJ0aWN1bGFyIHN5bWJvbCwgdG8gbWFrZSB0aGUgc29ydCBtb3JlIHN0YWJsZS4KCShubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogQ2FzdCB0aGUgYXJndW1lbnRzIHRvIHFzb3J0LiAgR2V0IHRoZQoJdmFsdWUgb2YgYSBkZWJ1Z2dpbmcgc3ltYm9sIHRoZSBzYW1lIHdheSB3ZSBnZXQgdGhlIHZhbHVlIG9mIGEKCW5vcm1hbCBzeW1ib2wuCgkqIG5sbTMyLWFscGhhLmM6IFZhcmlvdXMgY2hhbmdlcy4gIFdyaXRlIG91dCBHUCBhbmQgLmxpdGEgcmVsb2NzLgoJU2V0IG5vX3VuaW5pdGlhbGl6ZWRfZGF0YSB0byB0cnVlLgoJKiBubG0zMi1pMzg2LmMgKG5sbTMyX2kzODZfYmFja2VuZCksIG5sbTMyLXNwYXJjLmMKCShubG0zMl9zcGFyY19iYWNrZW5kKTogU2V0IG5vX3VuaW5pdGlhbGl6ZWRfZGF0YSBmaWVsZCBmYWxzZS4KCSogbmxtc3dhcC5oIChubG1fc3dhcF9maXhlZF9oZWFkZXJfb3V0KTogWmVybyBvdXQgZGVzdGluYXRpb24KCWJlZm9yZSBmaWxsaW5nIGl0IGluLgoKV2VkIERlYyAgMSAyMTo0Nzo1OCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIHNvbS5jIChzb21fc2VjdGlvbl90eXBlLCBzb21fZGVjb2RlX3N5bWNhbHNzKTogTmV3IGZ1bmN0aW9ucy4KCShzb21fZ2V0X3N5bWJvbF9pbmZvKTogVXNlIHRoZW0uCgkoc29tX3NsdXJwX3N5bWJvbF90YWJsZSk6IFNldCB0aGUgc2VjdGlvbiBvZiBjb21tb24gYW5kIHVuZGVmaW5lZAoJc3ltYm9scyBjb3JyZWN0bHkuCgpXZWQgRGVjICAxIDE0OjE1OjEwIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogZWxmY29kZS5oICh3cml0ZV9yZWxvY3MpOiBJbml0aWFsaXplIGxvY2FsIHZhciBMQVNUX1NZTV9JRFgsIHRvCgltYWtlIGdjYyBoYXBweS4KCgkqIG1pcHNic2QuYzogQ2hhbmdlcyBmcm9tIFJhbHBoIENhbXBiZWxsOgoJKG1pcHNfaG93dG9fdGFibGVfZXh0KTogTUlQU19SRUxPQ19MTzE2IHNob3VsZCB1c2UKCWNvbXBsYWluX292ZXJmbG93X2RvbnQuCgkoYW91dF9taXBzXypfdmVjKTogTWFrZSBuYW1lIHVzZSAiYS5vdXQiIGluc3RlYWQgb2YgImFvdXQiLCB0bwoJbWFrZSBnZGIgaGFwcHkuCgoJKiBiZmQuYyAoYmZkX2Vycm1zZ3MpOiBSZXdvcmQgaW52YWxpZC10YXJnZXQgbWVzc2FnZS4KCgkqIGNvbmZpZy5iZmQ6IEZvciBzcGFyYyotKi1jb2ZmLCB1c2Ugc3BhcmMtY29mZi4KCSogY29uZmlndXJlLmluOiBIYW5kbGUgc3BhcmNjb2ZmX3ZlYy4KCSogdGFyZ2V0cy5jIChzcGFyY2NvZmZfdmVjKTogRGVjbGFyZS4KCgkqIHJlbG9jLmMgKGJmZF9nZXRfcmVsb2Nfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KCShzdHJ1Y3QgcmVsb2NfaG93dG9fdHlwZSk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIG9mIHNpemUgZmllbGQuCgpXZWQgRGVjICAxIDE0OjM5OjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIG5sbTMyLWFscGhhLmM6IE5ldyBmaWxlOyBwcmVsaW1pbmFyeSBBbHBoYSBOZXRXYXJlIHN1cHBvcnQuCgkqIGNvbmZpZy5iZmQgKGFscGhhLSotbmV0d2FyZSopOiBOZXcgdGFyZ2V0OyB1c2UgYWxwaGEtbmxtLgoJKiBjb25maWcvYWxwaGEtbmxtLm10OiBOZXcgZmlsZS4KCSogY29uZmlndXJlLmluIChubG0zMl9hbHBoYV92ZWMpOiBOZXcgdmVjdG9yOyB1c2UgbmxtMzItYWxwaGEubywKCW5sbTMyLm8sIGFuZCBubG0uby4KCSogTWFrZWZpbGUuaW4gKEJGRDMyX0JBQ0tFTkRTKTogQWRkZWQgbmxtMzItYWxwaGEuby4KCShDRklMRVMpOiBBZGRlZCBubG0zMi1hbHBoYS5jLgoJUmVidWlsdCBkZXBlbmRlbmNpZXMuCgkqIHRhcmdldHMuYyAobmxtMzJfYWxwaGFfdmVjKTogRGVjbGFyZS4KCgkqIGxpYm5sbS5oIChzdHJ1Y3QgbmxtX2JhY2tlbmRfZGF0YSk6IE5ldyBmaWVsZHMKCW9wdGlvbmFsX3ByZWZpeF9zaXplLCBubG1fYmFja2VuZF9vYmplY3RfcCwgbmxtX3dyaXRlX3ByZWZpeCwKCW5sbV9zZXRfcHVibGljX3NlY3Rpb24sIG5sbV9nZXRfcHVibGljX29mZnNldC4gIFJlbW92ZWQgdW51c2VkCglubG1fd3JpdGVfcmVsb2MgZmllbGQuICBDaGFuZ2VkIG5sbV93cml0ZV9pbXBvcnQgdG8gcmVtb3ZlCgl1bm5lY2Vzc2FyeSBzeW1ib2wgYXJndW1lbnQuICBSZW5hbWVkIG5sbV93cml0ZV9leHRlcm5hbHMgdG8KCW5sbV93cml0ZV9leHRlcm5hbCwgYW5kIGNoYW5nZWQgY291bmQgYXJndW1lbnQgZnJvbSBiZmRfdm1hIHRvCgliZmRfc2l6ZV90eXBlLgoJKG5sbV9vcHRpb25hbF9wcmVmaXhfc2l6ZSwgbmxtX2JhY2tlbmRfb2JqZWN0X3BfZnVuYywKCW5sbV93cml0ZV9wcmVmaXhfZnVuYywgbmxtX3NldF9wdWJsaWNfc2VjdGlvbl9mdW5jLAoJbmxtX2dldF9wdWJsaWNfb2Zmc2V0X2Z1bmMpOiBOZXcgYWNjZXNzb3IgbWFjcm9zLgoJKG5sbV93cml0ZV9yZWxvY19mdW5jKTogUmVtb3ZlZC4KCShubG1fd3JpdGVfZXh0ZXJuYWxfZnVuYyk6IEFkanVzdGVkIGZvciBmaWVsZCByZW5hbWluZy4KCSogbmxtMzItaTM4Ni5jIChubG1faTM4Nl93cml0ZV9pbXBvcnQpOiBSZW5hbWVkIGZyb20KCW5sbV9pMzg2X3dyaXRlX3JlbG9jLiAgUmVtb3ZlZCBvbGQgbmxtX2kzODZfd3JpdGVfaW1wb3J0IHdoaWNoCglqdXN0IGNhbGxlZCBvbGQgbmxtX2kzODZfd3JpdGVfcmVsb2MuCgkobmxtX2kzODZfd3JpdGVfZXh0ZXJuYWwpOiBSZW5hbWVkIGZyb20gbmxtX2kzODZfd3JpdGVfZXh0ZXJuYWxzLgoJRGVjbGFyZWQuICBDaGFuZ2VkIHNlY29uZCBhcmd1bWVudCBmcm9tIGJmZF92bWEgdG8gYmZkX3NpemVfdHlwZS4KCShubG0zMl9pMzg2X2JhY2tlbmQpOiBBZGp1c3RlZCBmb3IgY2hhbmdlcyB0byBmaWVsZHMgYW5kIG5hbWVzLgoJKiBubG0zMi1zcGFyYy5jIChubG1fc3BhcmNfbWFuZ2xlX3JlbG9jcyk6IFJlbW92ZWQgdW51c2VkLAoJaWZkZWZmZWQgb3V0IGNvZGUuCgkobmxtX3NwYXJjX3dyaXRlX2ltcG9ydCk6IFJlbW92ZWQgc2Vjb25kIGFyZ3VtZW50LgoJKG5sbV9zcGFyY193cml0ZV9leHRlcm5hbCk6IFJlbmFtZWQgZnJvbQoJbmxtX3NwYXJjX3dyaXRlX2V4dGVybmFscy4gIENoYW5nZWQgc2Vjb25kIGFyZ3VtZW50IGZyb20gYmZkX3ZtYQoJdG8gYmZkX3NpemVfdHlwZS4KCShubG0zMl9zcGFyY19iYWNrZW5kKTogQWRqdXN0ZWQgZm9yIGNoYW5nZXMgdG8gZmllbGRzIGFuZCBuYW1lcy4KCSogbmxtY29kZS5oOiBSZW1vdmVkIHNvbWUgdW51c2VkIGNvZGUuCgkobmxtX29iamVjdF9wKTogRG9uJ3QgZGVzdHJveSB0ZGF0YSBwb2ludGVyLiAgQ2FsbAoJYmFja2VuZF9vYmplY3RfcCBmdW5jdGlvbiBpZiBpdCBleGlzdHMuCgkobmxtX3NsdXJwX3N5bWJvbF90YWJsZSk6IFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlIHJjb3VudC4gIENhbGwKCXNldF9wdWJsaWNfc2VjdGlvbl9mdW5jIGlmIGl0IGV4aXN0cyBpbnN0ZWFkIG9mIGNoZWNraW5nCglOTE1fSElCSVQuCgkobmxtX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IEFjY291bnQgZm9yCglvcHRpb25hbF9wcmVmaXhfc2l6ZS4KCShubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogQWNjb3VudCBmb3Igb3B0aW9uYWxfcHJlZml4X3NpemUuCglSZW1vdmVkIHVzZWxlc3MgdmFyaWFibGUgd3JpdGVfcmVsb2NfZnVuYy4gIENoYW5nZWQgZGVjbGFyYXRpb24KCWFuZCBjYWxsIG9mIHdyaXRlX2ltcG9ydF9mdW5jLiAgQ2FsbCB3cml0ZV9wcmVmaXhfZnVuYyBpZiBpdAoJZXhpc3RzLiAgUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGVzIGxlbiBhbmQgdGVtcC4gIENhbGwKCWdldF9wdWJsaWNfb2Zmc2V0X2Z1bmMgaWYgaXQgZXhpc3RzIHJhdGhlciB0aGFuIHNldHRpbmcgTkxNX0hJQklULgoJKiBubG1zd2FwLmg6IERlY2xhcmUgZnVuY3Rpb25zLgoKCSogYmZkLWluLmggKHVpbnQ2NF90eXBlTE9XLCB1aW50NjRfdHlwZUhJR0gpOiBGdWxseSBwYXJlbnRoZXNpemUKCWZvciBjbGFyaXR5LgoJKGZwcmludGZfdm1hLCBzcHJpbnRmX3ZtYSk6IFVzZSAlbHgsIG5vdCAleC4KCSogYmZkLWluMi5oOiBSZWJ1aWx0LgoJKiBob3N0cy9hbHBoYW9zZi5oICh1aW50NjRfdHlwZUxPVywgdWludDY0X3R5cGVISUdIKTogQ2FzdCByZXN1bHRzCgl0byB1bnNpZ25lZCBsb25nLgoKCSogY29uZmlnLmJmZDogRG9uJ3Qgc2V0IHRhcmdldDY0IGhlcmUsIGFzIHRoZSBzZXR0aW5nIGlzIGlnbm9yZWQuCgkqIGNvbmZpZ3VyZS5pbiAoZWNvZmZhbHBoYV9saXR0bGVfdmVjKTogU2V0IHRhcmdldDY0LgoKCSogY29uZmlnL2FscGhhb3NmLm10IChUREVGSU5FUyk6IFJlbW92ZWQ7IHNldHRpbmcgaG9zdCBwYXJhbWV0ZXJzCglpbiBUREVGSU5FUyBpcyB3cm9uZy4KCgkqIGNvZmYtYWxwaGEuYyAoYWxwaGFfZWNvZmZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKToKCVJlbW92ZSB1bnVzZWQgdmFyaWFibGUgb3V0cHV0X3NlY3Rpb24uCgpUdWUgTm92IDMwIDE2OjQ1OjIzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGlyaXgtY29yZS5jOiBOZXcgZmlsZSBmb3IgSXJpeCA0IGFuZCBJcml4IDUgY29yZSBzdXBwb3J0LgoJRnVuY3Rpb25zIHRha2VuIG91dCBvZiBjb2ZmLW1pcHMuYy4gIEhhbmRsZSB2bWFwIHR5cGUgVk1BUEZJTEUuCgkqIGNvZmYtbWlwcy5jOiBJcml4IDQgY29yZSBmaWxlIHN1cHBvcnQgbW92ZWQgdG8gaXJpeC1jb3JlLmMuCgkqIHRhcmdldHMuYzogSWYgSVJJWF9DT1JFIGRlZmluZWQsIGluY2x1ZGUgaXJpeF9jb3JlX3ZlYyBpbgoJdGFyZ2V0X3ZlY3Rvci4KCSogY29uZmlnL2lyaXg0Lm1oIChIREVGSU5FUyk6IEFkZCAtRElSSVhfQ09SRS4KCShIREVQRklMRVMpOiBEZWZpbmUgdG8gYmUgaXJpeC1jb3JlLm8uCgkqIGNvbmZpZy9pcml4NS5taCAoSERFRklORVMpOiBEZWZpbmUgdG8gYmUgLURJUklYX0NPUkUuCgkoSERFUEZJTEVTKTogRGVmaW5lIHRvIGJlIGlyaXgtY29yZS5vLgoJKiBNYWtlZmlsZS5pbiAoT1BUSU9OQUxfQkFDS0VORFMpOiBBZGRlZCBpcml4LWNvcmUuby4gIFJlbW92ZWQKCXNjby1jb3JlLm8sIHdoaWNoIG5vIGxvbmdlciBleGlzdHMuCgkoQ0ZJTEVTKTogQWRkZWQgYWxsICotY29yZS5jIGZpbGVzLgoJUmVidWlsdCBkZXBlbmRlbmNpZXMuCgpXZWQgTm92IDI0IDAyOjAyOjQxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAobWFwX3Byb2dyYW1fc2VnbWVudHMpOiBSZXN0b3JlIGNoZWNrIG9mIGZpbGVfc2l6ZSAhPQoJbWVtX3NpemUsIGJ1dCBvbmx5IGlmIFNIVF9QUk9HQklUUy4KCgkqIGVjb2ZmbGluay5jOiBOZXcgZmlsZSB0byBob2xkIEVDT0ZGIGRlYnVnIGluZm9ybWF0aW9uIGxpbmtpbmcKCXJvdXRpbmVzLgoJKiBlY29mZi5jIChlY29mZl9jbGVhcl9vdXRwdXRfZmxhZ3MsIGVjb2ZmX3JlbCwgZWNvZmZfZHVtcF9zZWNsZXQsCgllY29mZl9hZGRfc3RyaW5nLCBlY29mZl9nZXRfZGVidWcpOiBSZW1vdmVkLiAgRnVuY3Rpb25hbGl0eSBub3cgaW4KCWVjb2ZmbGluay5jLgoJKGVjb2ZmX2dldF9leHRyLCBlY29mZl9zZXRfaW5kZXgpOiBOZXcgZnVuY3Rpb25zLgoJKGVjb2ZmX3NsdXJwX3N5bWJvbGljX2luZm8pOiBEb24ndCBzYXZlIHJhd19zaXplLgoJKGVjb2ZmX2JmZF9zZWNsZXRfbGluayk6IFJld3JvdGUgdG8gdXNlIGVjb2ZmbGluay5jIGZ1bmN0aW9ucy4KCShlY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBEb24ndCBzZXQgRVhFQ19QIGp1c3QKCWJlY2F1c2UgdGhlcmUgaXMgYSBzdGFydCBhZGRyZXNzLgoJKGVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IEhhbmRsZSBleHRlcm5hbCBzeW1ib2xzIGhlcmUuICBVc2UKCWVjb2ZmbGluay5jIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLgoJKiBlbGYzMi1taXBzLmMgKG1pcHNfZWxmX3JlYWRfZWNvZmZfaW5mbywgbWlwc19lbGZfZ2V0X2V4dHIsCgltaXBzX2VsZl9zZXRfaW5kZXgpOiBOZXcgZnVuY3Rpb25zLgoJKG1pcHNfZWxmX3NlY2xldF9saW5rKTogRGlzY2FyZCBlbXB0eSBzZWN0aW9ucywgdGhlIC5vcHRpb25zCglzZWN0aW9uIGFuZCAuZ3B0YWIgc2VjdGlvbnMuICBIYW5kbGUgbGlua2luZyAubWRlYnVnIHNlY3Rpb24uCgkqIGxpYmVjb2ZmLmggKGVjb2ZmX2RhdGFfdHlwZSk6IFJlbW92ZWQgcmF3X3NpemUgYW5kIGlmZGJhc2UuCgkqIGxpYmVsZi5oIChlbGZfc3ltYm9sX3R5cGUpOiBBZGRlZCBtaXBzX2V4dHIgdG8gdGNfZGF0YSB1bmlvbi4KCSogYmZkLWluLmg6IEFkZGVkIHByb3RvdHlwZXMgZm9yIHJvdXRpbmVzIGluIGVjb2ZmbGluay5jIChzb21lIGFyZQoJY2FsbGVkIGJ5IGdhcywgc28gdGhleSBhcmUgcHVibGljKS4KCSogYmZkLWluMi5oOiBSZWJ1aWx0LgoJKiBNYWtlZmlsZS5pbiAoQkZEX0xJQlMpOiBBZGRlZCBlY29mZmxpbmsuby4KCShDRklMRVMpOiBBZGRlZCBlY29mZmxpbmsuYy4KCShlY29mZmxpbmsubyk6IE5ldyB0YXJnZXQuICBSZWJ1aWx0IGRlcGVuZGVuY2llcy4KCk1vbiBOb3YgMjIgMjI6MjY6NDIgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBzb20uYyAoaHBwYV9vYmplY3RfcCk6IEFsc28gcmVjb2duaXplIFNIQVJFRF9NQUdJQ19DTlggYXMKCWEgdmFsaWQgbWFnaWMgbnVtYmVyIGlmIGl0J3MgYmVlbiBkZWZpbmVkLgoKTW9uIE5vdiAyMiAxNDoxNzozNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlY29mZi5jIChlY29mZl9ta29iamVjdCk6IERvbid0IGNyZWF0ZSAuc2NvbW1vbiBzZWN0aW9uOyBsaW5rZXIKCW5vIGxvbmdlciByZXF1aXJlcyBpdC4KCShlY29mZl9iZmRfc2VjbGV0X2xpbmssIGVjb2ZmX3NpemVvZl9oZWFkZXJzLAoJZWNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogRG9uJ3QgdHJlYXQgLnNjb21tb24gc2VjdGlvbgoJc3BlY2lhbGx5LgoKTW9uIE5vdiAyMiAxMDo1NDoyNyAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCglNZXJnZWQgY2hhbmdlcyBmcm9tIGtldkBzcHVkcy5nZWcubW90LmNvbSAoS2V2aW4gQS4gQnVldHRuZXIpOgoJKiBiZmQvY29uZmlnL2RlbHRhODgubWggKEhERUZJTkVTKTogRGVmaW5lIHRoaXMgdG8gYmUgLURQVFJBQ0VfQ09SRS4KCSogYmZkL2NvbmZpZy9kZWx0YTg4Lm1oIChIREVQRklMRVMpOiBEZWZpbmVkIHRvIGJlIHB0cmFjZS1jb3JlLm8uCgkqIGJmZC9wdHJhY2UtY29yZS5jOiAgTmV3IGZpbGUgZm9yIGRlYWxpbmcgd2l0aCBjb3JlIGZpbGVzIHdpdGgKCXN0YXJ0IHdpdGggdGhlIHB0cmFjZV91c2VyIHN0cnVjdHVyZSBmb3VuZCBvbiBCQ1MgY29tcGxpYW50IHN5c3RlbXMuCgkqIGJmZC90YXJnZXRzLmMgKHB0cmFjZV9jb3JlX3ZlYyk6ICBOZXcgdmVjdG9yLgoKTW9uIE5vdiAyMiAwMjozMzoxMiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIE1pbmltYWwgc3VwcG9ydCBmb3IgcmVhZGluZyBTT00gZml4dXAgc3RyZWFtcy4gIEFsbG93cwoJb2JqZHVtcCAtciB0byBkbyBzb21ldGhpbmcgcmVhc29uYWJsZS4KCSogc29tLmMgKHNvbV9nZXRfcmVsb2NfdXBwZXJfYm91bmQpOiBJbXBsZW1lbnQuCgkoc29tX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6IEltcGxlbWVudC4KCShzb21fc2V0X3JlbG9jX2luZm8sIHNvbV9zbHVycF9yZWxvY190YWJsZSk6IE5ldyBmdW5jdGlvbnMuCgpTdW4gTm92IDIxIDEzOjQ2OjU1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2x5bnguaCAoRlBSSU5URl9BTFJFQURZX0RFQ0xBUkVEKTogRGVmaW5lLgoJKiBob3N0cy9zcGFyY2x5bnguaDogSW5jbHVkZSBseW54LmggaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4KCkZyaSBOb3YgMTkgMTQ6MzQ6MDQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogY29mZi1hMjlrLmMgKGEyOWtfcmVsb2MpOiBGb3IgUl9JUkVMLCBkb24ndCBsZWZ0IHNoaWZ0CglzaWduZWRfdmFsdWUgYmVmb3JlIHNpZ24gZXh0ZW5kaW5nIGl0LiAgRG9uJ3Qgc3VidHJhY3Qgb3V0CglyZWxvY19lbnRyeS0+YWRkcmVzcy4gIFRoaXMgbWFrZXMgaXQgY29tcGF0aWJsZSB3aXRoIHdoYXQgZ2FzIGlzCglnZW5lcmF0aW5nLgoKCSogZWxmY29kZS5oIChlbGZfZmFrZV9zZWN0aW9ucyk6IEFjY2VwdCAuc2JzcyBhcyB0aGUgbmFtZSBmb3IgYQoJU0hUX05PQklUUyBzZWN0aW9ucy4KCShtYXBfcHJvZ3JhbV9zZWdtZW50cyk6IERvbid0IGxlYXZlIHRoZSBsb29wIGFmdGVyIHRoZSBmaXJzdAoJU0hUX05PQklUUyBzZWN0aW9uLgoJKGFzc2lnbl9maWxlX3Bvc2l0aW9uc19leGNlcHRfcmVsb2NzKTogT25seSBmb3JjZSBzaF9vZmZzZXQgYW5kCglzaF9hZGRyIHRvIG1hdGNoIG1vZHVsbyBtYXhwYWdlc2l6ZSBmb3IgYSBzZWN0aW9uIHdoaWNoIGlzIG5vdAoJU0hUX05PQklUUy4gIENoYW5nZWQgdGhlIG1ldGhvZCB1c2VkIHRvIGZvcmNlIHBhZ2UgYWxpZ25tZW50IGFmdGVyCglhIFNIVF9OT0JJVFMgc2VjdGlvbiB0byBvbmx5IGRvIGl0IGZvciB0aGUgbGFzdCBzdWNoIGNvbnNlY3V0aXZlCglzZWN0aW9uLCBhbmQgdG8gcmVhbGx5IGZvcmNlIHBhZ2UgYWxpZ25tZW50LgoKRnJpIE5vdiAxOSAwNDowMjowMSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3NsdXJwX3N5bWJvbF90YWJsZSk6IFByaW50IG1vcmUgdmVyYm9zZSBtZXNzYWdlCglpbiB0aGUgY2FzZSBvZiBhbiB1bmtub3duIChvciB1bmhhbmRsZWQpIHN0b3JhZ2UgY2xhc3MuCgoJKiBjb25maWcvaTM4Ni1seW54Lm10IChUREVGSU5FUyk6IEZQUklOVEZfQUxSRUFEWV9ERUNMQVJFRCBzaG91bGQKCW5vdCBiZSBkZWZpbmVkIGhlcmUsIHNpbmNlIGl0IGlzIGEgaG9zdCBhdHRyaWJ1dGUsIG5vdCBhIHRhcmdldAoJb25lLgoJKiBjb25maWcvbTY4ay1seW54Lm10LCBjb25maWcvc3BhcmMtbHlueC5tdDogRGl0dG8uCgoJKiBjb2ZmY29kZS5oIChjb2ZmX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5CglkZWZpbmVkLgoKCSogY29mZi1zcGFyYy5jOiBEZWZpbmUgc29tZSByZWxvY2F0aW9ucywgYmFzZWQgb24gRUxGIHJlbG9jYXRpb25zLgoJKGVudW0gcmVsb2NfdHlwZSwgYmZkX2NvZmZfZ2VuZXJpY19yZWxvYywgY29mZl9zcGFyY19ob3d0b190YWJsZSwKCXN0cnVjdCBjb2ZmX3JlbG9jX21hcCwgc3BhcmNfcmVsb2NfbWFwLAoJY29mZl9zcGFyY19yZWxvY190eXBlX2xvb2t1cCk6IEJvcnJvd2VkIGZyb20gZWxmMzItc3BhcmMuYyBhbmQKCWVsZi5jLCByZW5hbWVkLgoJKGNvZmZfYmZkX3JlbG9jX3R5cGVfbG9va3VwKTogRGVmaW5lIHRvIGJlIGNvZmZfc3BhcmNfcmVsb2NfLi4uLgoJKHJ0eXBlMmhvd3RvKTogSW5kZXggaW50byBjb2ZmX3NwYXJjX2hvd3RvX3RhYmxlIHVzaW5nCglkc3QtPnJfdHlwZS4KClRodSBOb3YgMTggMTE6NDU6MzkgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogY29uZmlnLmJmZCAobWlwcyotKi1pcml4NSopOiBOZXcgdGFyZ2V0OyB1c2UgbWlwc2JlbGYuCgkqIGNvbmZpZ3VyZS5ob3N0IChtaXBzLXNnaS1pcml4NSopIE5ldyBob3N0OyB1c2UgaXJpeDUgKG5vCglob3N0cy9pcml4NS5oIGNyZWF0ZWQ7IGp1c3QgdXNlIHN0ZC1ob3N0LmgpLgoJKiBjb25maWcvaXJpeDUubWg6IE5ldyBmaWxlOyBsaWtlIGlyaXg0Lm1oLCBidXQgZG9uJ3QgdXNlIC1HIG9yCgktbG1hbGxvYy4KCSogTWFrZWZpbGUuaW46IFJlYnVpbHQgZGVwZW5kZW5jaWVzLgoKCSogZWNvZmZzd2FwLmg6IENoYW5nZWQgdHlwZSBvZiBpbnRlcm5hbCBwb2ludGVycyBmb3Igc3dhcCBvdXQKCWZ1bmN0aW9ucyB0byBjb25zdCAqLgoKCSogZWxmMzItbWlwcy5jIChtaXBzX2VsZl9nb3QxNl9yZWxvYyk6IE5ldyBmdW5jdGlvbi4gIEhhbmRsZSBHT1QxNgoJY29ycmVjdGx5IGZvciBhc3NlbWJsZXIsIGJ1dCBsaW5rZXIgc3VwcG9ydCBub3QgaW1wbGVtZW50ZWQuCgkoZWxmX21pcHNfaG93dG9fdGFibGUpOiBVc2UgbWlwc19lbGZfZ290MTZfcmVsb2MgZm9yIEdPVDE2LgoJKG1pcHNfZWxmX3N5bV9pc19nbG9iYWwpOiBOZXcgZnVuY3Rpb247IGF0IGxlYXN0IG9uIElyaXggNSwgYWxsCglub24gc2VjdGlvbiBzeW1ib2xzIGFyZSBjb25zaWRlcmVkIGdsb2JhbC4KCShlbGZfYmFja2VuZF9zeW1faXNfZ2xvYmFsKTogRGVmaW5lLgoJKG1pcHNfZWxmX2ZpbmFsX3dyaXRlX3Byb2Nlc3NpbmcpOiBOZXcgZnVuY3Rpb24uICBTZXQgdGhlIE1JUFMKCWFyY2hpdGVjdHVyZSBsZXZlbCBjb3JyZWN0bHkuCgkoZWxmX2JhY2tlbmRfZmluYWxfd3JpdGVfcHJvY2Vzc2luZyk6IERlZmluZS4KCShtaXBzX2VsZl9zZWN0aW9uX2Zyb21fc2hkcik6IEhhbmRsZSBTSFRfTUlQU19PUFRJT05TLgoJKG1pcHNfZWxmX2Zha2Vfc2VjdGlvbnMpOiBTZXQgZW50c2l6ZSBvZiAubWRlYnVnIG9yIC5yZWdpbmZvCglzZWN0aW9uIHRvIDEuICBIYW5kbGUgLm9wdGlvbnMgc2VjdGlvbi4KCShtaXBzX2VsZl9hY29tX3NlY3Rpb24sIG1pcHNfZWxmX2Fjb21fc3ltYm9sLAoJbWlwc19lbGZfYWNvbV9zeW1ib2xfcHRyKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMsIHVzZWQgdG8gYnVpbGQgYQoJZ2VuZXJpYyAuYWNvbW1vbiBzZWN0aW9uIHRvIGhvbGQgU0hOX01JUFNfQUNPTU1PTiBzeW1ib2xzLgoJKG1pcHNfZWxmX3N5bWJvbF9wcm9jZXNzaW5nKTogSGFuZGxlIFNITl9NSVBTX0FDT01NT04gc3ltYm9scyBieQoJcHV0dGluZyB0aGVtIGFsbCBpbiBhIGdsb2JhbCAuYWNvbW1vbiBzZWN0aW9uLgoKCSogZWxmY29kZS5oIChiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiBEb24ndCBkdW1wIGNvcmUgaWYgdGFyZ2V0CglzZWN0aW9uIGhhcyBubyBFTEYgc2VjdGlvbiBkYXRhLgoJKGVsZl9tYWtlX3NlY3Rpb25zKTogU2V0IGFkZHJhbGlnbiBvZiByZWxvYyBzZWN0aW9uIHRvIDQuCgkoZWxmX2Zha2Vfc2VjdGlvbnMpOiBMaWtld2lzZS4KCShtYXBfcHJvZ3JhbV9zZWdtZW50cyk6CURvbid0IGNvbnNpZGVyIHNlY3Rpb24gMC4KCShhc3NpZ25fZmlsZV9wb3NpdGlvbnNfZXhjZXB0X3JlbG9jcyk6IERvbid0IGNvbnNpZGVyIHNlY3Rpb24gMC4KCUluIHRoZSBtYWluIGxvb3AsIHNraXAgdGhlIHN5bXRhYiBhbmQgc3RydGFiIHNlY3Rpb25zLCBzaW5jZSB0aGVpcgoJcG9zaXRpb25zIGFyZSBzZXQgZWxzZXdoZXJlLgoJKHN3YXBfb3V0X3N5bXMpOiBTZXQgYWRkcmFsaWduIG9mIHN5bXRhYiBzZWN0aW9uIHRvIDQuICBTZXQKCWFkZHJhbGlnbiBvZiBzdHJ0YWIgc2VjdGlvbnMgdG8gMS4KCShhc3NpZ25fZmlsZV9wb3NpdGlvbnNfZm9yX3JlbG9jcyk6IERvbid0IGNvbnNpZGVyIHNlY3Rpb24gMC4KCSh3cml0ZV9vYmplY3RfY29udGVudHMpOiBEb24ndCB3cml0ZSBvdXQgc2VjdGlvbiAwLgoKCSogbGliZWxmLmggKHN0cnVjdCBlbGZfYmFja2VuZF9kYXRhKTogQWRkZWQgZmllbGRzCgllbGZfYmFja2VuZF9zeW1faXNfZ2xvYmFsIGFuZCBlbGZfYmFja2VuZF9maW5hbF93cml0ZV9wcm9jZXNzaW5nLgoJKiBlbGYzMi10YXJnZXQuaCAoZWxmMzJfYmVkKTogQWRkZWQgY29ycmVzcG9uZGluZyBpbml0aWFsaXplcnMuCgkqIGVsZjY0LXRhcmdldC5oIChlbGY2NF9iZWQpOiBMaWtld2lzZS4KCSogZWxmY29kZS5oIChzeW1faXNfZ2xvYmFsKTogVGFrZSBhYmZkIGFyZ3VtZW50LiAgQ2FsbAoJZWxmX2JhY2tlbmRfc3ltX2lzX2dsb2JhbCBpZiBpdCBpcyBub3QgTlVMTC4KCShlbGZfbWFwX3N5bWJvbHMpOiBQYXNzIGFiZmQgdG8gc3ltX2lzX2dsb2JhbC4KCSh3cml0ZV9vYmplY3RfY29udGVudHMpOiBDYWxsIGVsZl9iYWNrZW5kX2ZpbmFsX3dyaXRlX3Byb2Nlc3NpbmcKCWlmIGl0IGlzIGRlZmluZWQuCgpXZWQgTm92IDE3IDE4OjQzOjI4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGxpYmVjb2ZmLmg6IEluY2x1ZGUgY29mZi9lY29mZi5oLgoJKHN0cnVjdCBlY29mZl9iYWNrZW5kX2RhdGEpOiBNb3ZlIGV4dGVybmFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgoJZmllbGRzIGludG8gYSBzaW5nbGUgZmllbGQgcG9pbnRpbmcgdG8gYW4gZWNvZmZfZGVidWdfc3dhcAoJc3RydWN0dXJlLgoJKGVjb2ZmX2RhdGFfdHlwZSk6IE1vdmUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZpZWxkcyBpbnRvIGEgc2luZ2xlCglmaWVsZCBwb2ludGluZyB0byBhbiBlY29mZl9kZWJ1Z19pbmZvIHN0cnVjdHVyZS4KCSogY29mZi1hbHBoYS5jLCBjb2ZmLW1pcHMuYywgZWNvZmYuYzogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKV2VkIE5vdiAxNyAxNzozODo1OCAxOTkzICBTZWFuIEVyaWMgRmFnYW4gIChzZWZAY3lnbnVzLmNvbSkKCgkqIG5sbXN3YXAuaDogTmV3IGZpbGUgdG8gc3dhcCBmaXhlZCBoZWFkZXIuICBJbmNsdWRlZCBieSBOTE0KCWJhY2tlbmRzLgoJKiBsaWJubG0uaCAoc3RydWN0IHJlbG9jX2FuZF9zZWMpOiBEZWZpbmUuCgkoc3RydWN0IG5sbV9iYWNrZW5kX2RhdGEpOiBBZGQgZmllbGRzIGZpeGVkX2hlYWRlcl9zaXplLAoJbmxtX3JlYWRfaW1wb3J0LCBubG1fd3JpdGVfaW1wb3J0LCBubG1fc3dhcF9maGRyX2luLAoJbmxtX3N3YXBfZmhkcl9vdXQuCgkobmxtX2ZpeGVkX2hlYWRlcl9zaXplLCBubG1fcmVhZF9pbXBvcnRfZnVuYywKCW5sbV93cml0ZV9pbXBvcnRfZnVuYywgbmxtX3N3YXBfZml4ZWRfaGVhZGVyX2luX2Z1bmMsCglubG1fc3dhcF9maXhlZF9oZWFkZXJfb3V0X2Z1bmMsIG5sbV93cml0ZV9leHRlcm5hbF9mdW5jKTogTmV3CglhY2Nlc3NvciBtYWNyb3MuCgkqIG5sbWNvZGUuaDogVXNlIG5ldyBmdW5jdGlvbnMuCgkqIG5sbTMyLWkzODYuYzogUHJvdmlkZSBuZXcgZnVuY3Rpb25zLgoJKiBubG0zMi1zcGFyYy5jOiBOZXcgZmlsZTsgU1BBUkMgTkxNIGJhY2tlbmQuCgpXZWQgTm92IDE3IDEzOjU2OjEwIDE5OTMgIFN0YW4gU2hlYnMgIChzaGVic0BydGwuY3lnbnVzLmNvbSkKCgkqIGkzODZseW54LmMgKHN3YXBfc3RkX3JlbG9jX2luLCBzd2FwX2V4dF9yZWxvY19pbik6IElnbm9yZQoJZ2FyYmFnZSBiaXRzIGFwcGVhcmluZyBpbiB0aGUgdXBwZXIgZW5kIG9mIHN5bWJvbG51bXMuCgoJKiBjb25maWcvc3BhcmMtbHlueC5tdCAoVERFRklORVMpOiBBZGQgLURGUFJJTlRGX0FMUkVBRFlfREVDTEFSRUQuCgpUdWUgTm92IDE2IDE3OjAzOjQxIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBseW54LWNvcmUuYyAobHlueF9jb3JlX2ZpbGVfcCk6ICBDaGFuZ2UgYmZkX3phbGxvYyB0byBiZmRfYWxsb2MuCgkqIG02OGtseW54LmM6ICBEZWZpbmUgY29yZSBmaWxlIG1hY3Jvcy4KCSogaG9zdHMvaTM4Nmx5bnguaCwgaG9zdHMvbTY4a2x5bnguaCwgaG9zdHMvbHlueC5oOiAgTW92ZSBhbGwKCW5vbi1hcmNoaXRlY3R1cmUgc3BlY2lmaWMgc3R1ZmYgaW50byBseW54LmguCgpUdWUgTm92IDE2IDE1OjQ1OjU0IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaTM4NmxpbnV4LmM6IERlZmluZSBuZXcgbWFjcm8gWk1BR0lDX0RJU0tfQkxPQ0tfU0laRSB0byAxMDI0LCBhbmQKCWNoYW5nZSBQQUdFX1NJWkUgdG8gNDA5Ni4KCk1vbiBOb3YgMTUgMTE6NDg6MDggMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRpc3RzdHVmZik6IE5ldyB0YXJnZXQuCgoJKiBWRVJTSU9OOiBVcGRhdGVkLgoKU3VuIE5vdiAxNCAyMzozMzowMSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIHNvbS5jIChzb21fb2JqZWN0X3NldHVwKTogRG8gbm90IGNyZWF0ZSBkdW1teSAiLnRleHQiLCAiLmRhdGEiLAoJYW5kICIuYnNzIiBzZWN0aW9ucy4KCShzZXR1cF9zZWN0aW9ucyk6IERvIG5vdCBzZXQgU0VDX0hBU19DT05URU5UUyBpZiBhIHNlY3Rpb24ncyBzaXplCglpcyB6ZXJvLiAgUmVjb2duaXplIEJTUyB0eXBlIHNlY3Rpb25zIGFuZCB0dXJuIG9mZiBTRUNfTE9BRCBhbmQKCVNFQ19EQVRBIChzbyBiaW51dGlscy9zaXplIHdvcmtzKS4gIFNldCB0aGUgY29ycmVjdCB2YWx1ZSBmb3IKCWEgc2VjdGlvbidzIF9yYXdfc2l6ZS4KCShzb21fc2x1cnBfc3ltYm9sX3RhYmxlKTogUHJvZ3JhbSBlbnRyeSBwb2ludHMsIGFuZCBtaWxsaWNvZGUgYXJlCglhbHNvIGZ1bmN0aW9ucy4gIE1hcmsgdGhlbSBhcyBzdWNoLiAgQWxzbyBtYXJrIEwkKiBzeW1ib2xzIGFzCglkZWJ1Z2dpbmcgc3ltYm9scy4KCgkqIGJmZC1pbjIuaDogUmVidWlsdC4KClNhdCBOb3YgMTMgMTU6Mjc6MTUgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBzb20uYyAoc29tX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IEFkZCBtaXNzaW5nIHByb3RvdHlwZS4gIFJldHVybnMKCWEgcG9pbnRlciB0byBjb25zdGFudCBkYXRhLiAgRGVsZXRlIGJvZ3VzICNkZWZpbmUgd2hpY2ggbWFkZSB0aGUgCglmdW5jdGlvbiB1c2VsZXNzLgoKCSogc29tLmMgKHNvbV9wcmVwX2Zvcl9maXh1cHMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX3dyaXRlX2ZpeHVwcyk6IE5ldyBmdW5jdGlvbi4KCShzb21fd3JpdGVfc3BhY2Vfc3RyaW5ncyk6IE5ldyBmdW5jdGlvbi4KCShzb21fd3JpdGVfc3ltYm9sX3N0cmluZ3MpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2JlZ2luX3dyaXRpbmcpOiBOZXcgZnVuY3Rpb24uCgpGcmkgTm92IDEyIDE1OjI5OjM2IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogc29tLmMgKHNvbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBEbyBub3QgYWJvcnQuICBGbGVzaCBvdXQuCgkoc29tX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogRG8gbm90IGFib3J0LiAgRmxlc2ggb3V0LgoKCSogc29tLmMgKHNvbV93cml0ZV9oZWFkZXJzKTogTmV3IGZ1bmN0aW9uLgoJKHNvbV9wcmVwX2hlYWRlcnMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2J1aWxkX2FuZF93cml0ZV9zeW1ib2xfdGFibGUpOiBOZXcgZnVuY3Rpb24uCgoJKiBzb20uYyAoc29tX3NpemVvZl9oZWFkZXJzKTogQWRkIG1pc3NpbmcgcHJvdG90eXBlLgoJKHNvbV9zZXRfYXJjaF9tYWNoKTogRG8gbm90IGFib3J0LgoKCSogc29tLmMgKHNvbV9jb3VudF9zcGFjZXMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2NvdW50X3N1YnNwYWNlcyk6IE5ldyBmdW5jdGlvbi4KCShjb21wYXJlX3N5bXMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2NvbXB1dGVfY2hlY2tzdW0pOiBOZXcgZnVuY3Rpb24uCgoJKiBzb20uYyAoaHBwYV9zb21fZ2VuX3JlbG9jX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IE5ldyBmdW5jdGlvbi4KCgkqIHNvbS5jICh0cnlfcHJldl9maXh1cCk6IE5ldyBmdW5jdGlvbi4KCShzb21fcmVsb2Nfc2tpcCk6IE5ldyBmdW5jdGlvbi4KCShzb21fcmVsb2NfYWRkZW5kKTogTmV3IGZ1bmN0aW9uLgoJKHNvbV9yZWxvY19jYWxsKTogTmV3IGZ1bmN0aW9uLgoKCSogc29tLmMgKHNvbV9pbml0aWFsaXplX3JlbG9jX3F1ZXVlKTogTmV3IGZ1bmN0aW9uLgoJKHNvbV9yZWxvY19xdWV1ZV9pbnNlcnQpOiBMaWtld2lzZS4KCShzb21fcmVsb2NfcXVldWVfZml4KTogTGlrZXdpc2UuCgkoc29tX3JlbG9jX3F1ZXVlX2ZpbmQpOiBMaWtld2lzZS4KCgkqIHNvbS5jIChzb21faHBwYV9ob3d0b190YWJsZSk6IFNPTSBob3d0byByZWxvY2F0aW9uIHRhYmxlLgoJKGhwcGFfc29tX3JlbG9jKTogTmV3IGZ1bmN0aW9uLgoKCSogc29tLmMgKHN0cnVjdCByZWxvY19xdWV1ZSk6IE5ldyBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZgoJdGhlIGxhc3QgZm91ciBtdWx0aWJ5dGUgcmVsb2NhdGlvbnMgZW1pdHRlZC4KCShlbnVtIHBhX3N5bWJvbF90eXBlKTogVHlwZSB0byBmdWxseSBkZXNjcmliZSB0aGUgc3ltYm9sIHR5cGVzCglhc3NvY2lhdGVkIHdpdGggLmltcG9ydC8uZXhwb3J0IGFzc2VtYmxlciBkaXJlY3RpdmVzLgoKCSogc29tLmM6IEluY2x1ZGUgbGliaHBwYS5oCgoJKiBzb20uYyAoYmZkX3NvbV9zZXRfc2VjdGlvbl9hdHRyaWJ1dGVzKTogTmV3IGZ1bmN0aW9uLgoJKGJmZF9zb21fc2V0X3N1YnNlY3Rpb25fYXR0cmlidXRlcyk6IExpa2V3aXNlLgoJKGJmZF9zb21fc2V0X3N5bWJvTF90eXBlKTogTGlrZXdpc2UuCgkoYmZkX3NvbV9hdHRhY2hfdW53aW5kX2luZm8pOiBMaWtld2lzZS4KCSogc29tLmg6IERlY2xhcmUgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KCgkqIHNvbS5oIChzdHJ1Y3Qgc29tX3N5bWJvbCk6IEFkZCBuZXcgZmllbGRzIHRvIGhvbGQgYWRkaXRpb25hbAoJaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkL3dyaXRlIHN5bWJvbCB0YWJsZXMgYW5kIGZpeHVwIHN0cmVhbXMuCgkoc3RydWN0IHNvbV9zZWN0aW9uX2RhdGFfc3RydWN0KTogQWRkIG5ldyBmaWVsZHMgdG8gaG9sZCBhZGRpdGlvbmFsCglpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQvd3JpdGUgc3BhY2UgYW5kIHN1YnNwYWNlIGhlYWRlcnMuCgkoc29tX3N5bWJvbF9kYXRhKTogTmV3IGFjY2Vzc29yIG1hY3JvIGZvciBTT00gc3ltYm9sIGluZm9ybWF0aW9uLgoJKFJfSFBQQV8qKTogQmFzaWMgcmVsb2NhdGlvbiB0eXBlcyB0byBiZSB1c2VkIGJ5IHRoZSBhc3NlbWJsZXIuCgpGcmkgTm92IDEyIDExOjAwOjI4IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogdHJhZC1jb3JlLmMgKHRyYWRfdW5peF9jb3JlX2ZpbGVfcCk6IElmIG5ldyBob29rCglUUkFEX0NPUkVfQUxMT1dfQU5ZX0VYVFJBX1NJWkUgZGVmaW5lZCwgdGhlbiBza2lwIHRoZSBjaGVjayBmb3IgdGhlCgljb3JlZmlsZSBiZWluZyB0b28gYmlnLgoJKiBob3N0cy9pMzg2c2NvLmg6IERlZmluZSBpdC4KClRodSBOb3YgMTEgMTU6MTY6MjggMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBiZmQuYyAoc3RydWN0IF9iZmQpOiBBZGQgaHBwYWJzZF9jb3JlX2RhdGEuCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6IEFkZCBocHBhYnNkX2NvcmVfdmVjLgoJKiBocHV4LWNvcmUuYyAoaHB1eF9jb3JlX2NvcmVfZmlsZV9wKTogRmFpbCBpZiBhbiB1bmtub3duIGNvcmUKCXNlY3Rpb24gaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvcmUgc2VjdGlvbiBzY2FubmluZy4KCSogaHBwYWJzZC1jb3JlLmM6IE5ldyBmaWxlLgoJKiBjb25maWcvaHBwYWJzZC5taDogRW5hYmxlIEhQUEEgQlNEIGNvcmUgZmlsZXMuCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX3JlbG9jKTogUmVtb3ZlIERFRlVOIGNydWQuICBSZW1vdmUgY29kZQoJd2hpY2ggaXMgZWl0aGVyIGNvbW1lbnRlZCBvdXQgb3IgaWZkZWYnZCBvdXQuICBBZGQsIHVwZGF0ZSBhbmQKCWNsZWFuIGNvbW1lbnRzLiAgRml4IHZhcmlvdXMgaW5kZW50aW9uIGFuZCBzcGFjaW5nIHByb2JsZW1zLiAgSGFuZGxlCglwcm9ibGVtcyByZWxhdGVkIHRvIHVzaW5nICJibGUiIHRvIGp1bXAgdG8gYSBzdHViIHJhdGhlciB0aGFuICJibCIKCSglcjMxIGlzIHRyYXNoZWQgYnkgImJsZSIsIGJ1dCBub3QgYnkgImJsIikuCgkoTkVXX0lOU1RSVUNUSU9OKTogUHV0IGluc2lkZSBjdXJseSBicmFjZXMuCgkoQ1VSUkVOVF9TVFVCX09GRlNFVCk6IEZpeCBpbmRlbnRpb24gcHJvYmxlbXMuCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBGaXggaW5kZW50aW9uIGFuZCBzcGFjaW5nIHByb2JsZW1zLgoJQWRkLCB1cGRhdGUgYW5kIGNsZWFuIGNvbW1lbnRzLiAgSGFuZGxlICJibGUiICVyMzEgbG9zc2FnZSBwcm9ibGVtcy4KCShocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViKTogTGlrZXdpc2UuCgkoaHBwYV9sb29rX2Zvcl9zdHVic19pbl9zZWN0aW9uKTogTGlrZXdpc2UuCgkoaHBwYV9lbGZfc3R1Yl9jaGVjayk6IFJlbW92ZSBvYnNvbGV0ZSBmdW5jdGlvbi4KCgkqIGhwcGFfc3R1YnMuaDogQWRkIG5ldyBpbnN0cnVjdGlvbnMgdG8gZGVhbCB3aXRoICVyMzEgbG9zc2FnZQoJcHJvYmxlbXMuICBEZWxldGUgdW51c2VkIGluc3RydWN0aW9ucy4KCQpUdWUgTm92ICA5IDExOjQwOjI3IDE5OTMgIFN0YW4gU2hlYnMgIChzaGVic0BydGwuY3lnbnVzLmNvbSkKCgkqIG02OGtseW54LmMgKFRBUkdFVF9JU19CSUdfRU5ESUFOX1ApOiBEZWZpbmUuCgpUdWUgTm92ICA5IDExOjI2OjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoZWxmX29iamVjdF9wKTogUmF0aGVyIHRoYW4gbG9va2luZyB0aHJvdWdoIGFuIGFycmF5CglvZiBhcmNoaXRlY3R1cmVzLCBnZXQgdGhlIEVMRiBFTV94eHggY29kZSBmcm9tIHRoZSBiYWNrZW5kCglpbmZvcm1hdGlvbi4gIExldCB0aGUgZ2VuZXJpYyBFTEYgdGFyZ2V0IG1hdGNoIGFueSBFTV94eHggY29kZSBub3QKCW1hdGNoZWQgYnkgYW5vdGhlciBFTEYgdGFyZ2V0LiAgQ2FsbCBlbGZfYmFja2VuZF9vYmplY3RfcCB0byBsZXQKCXRoZSBiYWNrZW5kIGRvIG1vcmUgY2hlY2tzIGFuZCBzZXQgZ2xvYmFsIGluZm9ybWF0aW9uLgoJKiBsaWJlbGYuaCAoc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEpOiBBZGRlZCBlbGZfbWFjaGluZV9jb2RlIGFuZAoJZWxmX2JhY2tlbmRfb2JqZWN0X3AgZmllbGRzLgoJKHN0cnVjdCBiZmRfZWxmX2FyY2hfbWFwKTogUmVtb3ZlZC4KCShiZmRfZWxmX2FyY2hfbWFwLCBiZmRfZWxmX2FyY2hfbWFwX3NpemUpOiBEb24ndCBkZWNsYXJlLgoJKiBlbGYzMi10YXJnZXQuaCwgZWxmNjQtdGFyZ2V0Lmg6IEluaXRpYWxpemUgZWxmX21hY2hpbmVfY29kZQoJZmllbGQgd2l0aCBFTEZfTUFDSElORV9DT0RFLiAgSW5pdGlhbGl6ZSBlbGZfYmFja2VuZF9vYmplY3RfcAoJZmllbGQgd2l0aCBlbGZfYmFja2VuZF9vYmplY3RfcCAoaWYgaXQgaXMgZGVmaW5lZCkuCgkqIGVsZjMyLWdlbi5jLCBlbGYzMi1ocHBhLmMsIGVsZjMyLWkzODYuYywgZWxmMzItaTg2MC5jLAoJZWxmMzItbTY4ay5jLCBlbGYzMi1tODhrLmMsIGVsZjMyLW1pcHMuYywgZWxmMzItc3BhcmMuYywKCWVsZjY0LWdlbi5jIChFTEZfTUFDSElORV9DT0RFKTogRGVmaW5lZC4KCSogZWxmMzItbWlwcy5jOiBJbmNsdWRlIGVjb2Zmc3dhcC5oIHRvIGdldCBFQ09GRiBzd2FwcGluZwoJcm91dGluZXMuCgkobWlwc19lbGZfb2JqZWN0X3ApOiBTZXQgdGhlIHJpZ2h0IG1hY2hpbmUgbnVtYmVyLgoJKG1pcHNfZWxmX2Vjb2ZmX2RlYnVnX3N3YXApOiBEZWZpbmVkLgoJKGVsZl9iYWNrZW5kX29iamVjdF9wKTogRGVmaW5lZCB0byBiZSBtaXBzX2VsZl9vYmplY3RfcC4KCShlbGZfYmFja2VuZF9lY29mZl9kZWJ1Z19zd2FwKTogRGVmaW5lZCB0byBiZQoJbWlwc19lbGZfZWNvZmZfZGVidWdfc3dhcC4KCSogZWxmLmMgKGJmZF9lbGZfYXJjaF9tYXAsIGJmZF9lbGZfYXJjaF9tYXBfc2l6ZSk6IFJlbW92ZWQuCgoJKiBsaWJiZmQtaW4uaCAodGFyZ2V0X3ZlY3RvciwgZGVmYXVsdF92ZWN0b3IpOiBEZWNsYXJlLgoJKiBsaWJiZmQuaDogUmVidWlsdC4KCSogZm9ybWF0LmMgKHRhcmdldF92ZWN0b3IsIGRlZmF1bHRfdmVjdG9yKTogRG9uJ3QgZGVjbGFyZS4KCgkqIGVsZjMyLW1pcHMuYyAoZWxmX21pcHNfaG93dG9fdGFibGUpOiBEb24ndCBjb21wbGFpbiBvbiBvdmVyZmxvdwoJZm9yIFJfTUlQU18yNi4gIENvcnJlY3Qgb3ZlcmZsb3cgZGV0ZWN0aW9uIHJlcXVpcmVzIG1hdGNoaW5nIHRoZQoJdXBwZXIgZm91ciBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhZ2FpbnN0IHRoZSBQQy4gIEZyb20gVGVkIExlbW9uCgk8bWVsbG9uQHBlcHBlci5uY2QuY29tPi4KCgkqIGJvdXQuYyAoYl9vdXRfcmVsb2NfdHlwZV9sb29rdXApOiBSZXR1cm4gdHlwZSBzaG91bGQgcG9pbnQgdG8KCWNvbnN0IGRhdGEuCgkqIGNvZmYtaTk2MC5jIChjb2ZmX2k5NjBfcmVsb2NfdHlwZV9sb29rdXApOiBMaWtld2lzZS4KCSogZWxmMzItaHBwYS5jIChlbGZfaHBwYV9yZWxvY190eXBlX2xvb2t1cCk6IExpa2V3aXNlLgoJKiBtaXBzYnNkLmMgKE1ZKHJlbG9jX2hvd3RvX3R5cGVfbG9va3VwKSk6IExpa2V3aXNlLgoJKiBjb2ZmLWkzODYuYyAoY29mZl9pMzg2X3JlbG9jKTogTWFkZSBob3d0byBjb25zdC4KCSogb2FzeXMuYyAob2FzeXNfd3JpdGVfZGF0YSk6IE1hZGUgaG93IGNvbnN0LgoKCSogbGliZWxmLmg6IEFkZGVkIHNvbWUgY29tbWVudHMuCgkoc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEpOiBBZGRlZCBlbGZfYmFja2VuZF9lY29mZl9kZWJ1Z19zd2FwCglmaWVsZC4gIFJlbW92ZWQgdW51c2VkIHdyaXRlX3JlbG9jcyBmaWVsZC4KCSogZWxmMzItdGFyZ2V0Lmg6IEFkanVzdGVkIGVsZl9iYWNrZW5kX2RhdGEgaW5pdGlhbGl6YXRpb24KCWFjY29yZGluZ2x5LgoJKiBlbGY2NC10YXJnZXQuaDogQ29ycmVjdGVkIGVsZl9iYWNrZW5kX2RhdGEgaW5pdGlhbGl6YXRpb24gdG8KCWZpbGwgaW4gYWxsIGZpZWxkcyBhbmQgdG8gc2V0IGVsZl82NF9wIHRvIDEuCgpNb24gTm92ICA4IDE4OjEzOjE0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogUmVtb3ZlIGR1cGxpY2F0ZSBhc3NpZ25tZW50Cgl0byBmaWxlcG9zIGluIFNIVF9TVFJUQUIgY2FzZS4KCShhc3NpZ25fZmlsZV9wb3NpdGlvbl9mb3Jfc2VjdGlvbik6IFNldCBCRkQgc2VjdGlvbiBmaWxlcG9zIGFzCgl3ZWxsIGFzIEVMRiBzZWN0aW9uIHNoX29mZnNldC4KCgkqIHJlbG9jLmM6IFVzZSBjb25zdCBpbnN0ZWFkIG9mIENPTlNULgoJKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24pOiBNYWtlIHZhcmlhYmxlIGhvd3RvIGEgY29uc3QgcG9pbnRlci4KCSogYmZkLWluMi5oLCBsaWJiZmQuaDogUmVidWlsdC4KCk1vbiBOb3YgIDggMTI6MTk6MTUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAocmVhbGNsZWFuKTogRG9uJ3QgcmVtb3ZlIGdlbmVyYXRlZCBoZWFkZXJzLiAgUmV2ZXJ0cwoJY2hhbmdlIG9mIDIgSnVsIDE5OTMuCgpNb24gTm92ICA4IDA2OjA4OjMxIDE5OTMgIEQuIFYuIEhlbmtlbC1XYWxsYWNlICAoZ3VtYnlAY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuYmZkOiBtYWtlIHVuaXh3YXJlIGVxdWl2YWxlbnQgdG8gc3lzdjQuCgoJKiBjb25maWcvaTM4Ni1ubG0ubXQ6IGJyaW5nIGluIGVsZiBjb25maWc7IG1ha2UgaXQgdGhlIGRlZmF1bHQuCgpTdW4gTm92ICA3IDIwOjIxOjM4IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogbGliYmZkLmMgKGJmZF9wdXRfOCk6IEFkZCBwYXJlbnMgYXJvdW5kIHJlZmVyZW5jZSB0byAidmFsIgoJYXJndW1lbnQuCgpGcmkgTm92ICA1IDIxOjQ1OjA5IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2kzODZtYWNoMy5oIChIT1NUX1NFR01FTlRfU0laRSksCglpMzg2bWFjaDMuYyAoU0VHTUVOVF9TSVpFLCBURVhUX1NUQVJUX0FERFIpOiBDb3JyZWN0IHZhbHVlcyAoPykuCgpGcmkgTm92ICA1IDE1OjE3OjU3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogWmVybyBvdXQgaW50ZXJuYWxfYS4KCkZyaSBOb3YgIDUgMTA6NDE6MDcgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYW91dHguaCwgYXJjaGl2ZS5jLCBhcmNodXJlcy5jLCBiZmQuYywgY2FjaGUuYywgY29mZmNvZGUuaCwKCWNvcmUuYywgY3Rvci5jLCBmb3JtYXQuYywgaW5pdC5jLCBsaWJiZmQuYywgb3BuY2xzLmMsIHJlbG9jLmMsCglzZWN0aW9uLmMsIHN5bXMuYywgdGFyZ2V0cy5jOgoJRG9jIGNsZWFudXAgKHNwZWxsaW5nLCBwdW5jdHVhdGlvbiwgZ3JhbW1hciwgZm9ybWF0dGluZykuCgkqIGJmZC1pbjIuaCwgbGliYmZkLmg6IFJlYnVpbGQuCgpUaHUgTm92ICA0IDE0OjQ2OjE0IDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBydGwuY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIChiZmRfZ2V0X2NhY2hlYWJsZSwgYmZkX3NldF9jYWNoZWFibGUpOiAgTmV3IGFjY2Vzc29ycy4KCSogYmZkLmMsIG9wbmNscy5jOiAgSW1wcm92ZSBjb21tZW50cyBvbiBmaWxlIGRlc2NyaXB0b3IgY2FjaGVpbmcuCgpUaHUgTm92ICA0IDA4OjU0OjMwIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogRnJvbSBQZXRlIEhvb2dlbmJvb20gKGhvb2dlbkBjcy51dGFoLmVkdSkKCSogZWxmMzItaHBwYS5jIChocHBhX2VsZl9nZXRfc2VjdGlvbl9jb250ZW50cyk6IEZpeCBsb2dpYyBlcnJvcgoJaW4gbGFzdCBjaGFuZ2UuICBBbHdheXMgcmVidWlsZCBzeW1ib2wgZXh0ZW5zaW9uIHNlY3Rpb24gdGhlIGZpcnN0Cgl0aW1lIHRob3VnaCBpZiBvdXRwdXQgc2VjdGlvbnMgZXhpc3QgKGZpeGVzIGxkIC1yIHByb2JsZW1zKS4KClRodSBOb3YgMDQgMDg6MDg6NDYgMTk5MyAgSmVmZnJleSBXaGVhdCAgKGNhc3NpZHlAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBBZGQgLlBIT05ZIGZvciBjaGVjayBhbmQgaW5zdGFsbGNoZWNrIHJ1bGVzLgoKVHVlIE5vdiAgMiAxNDo0MjoyNyAxOTkzICBCaWxsIENveCAoYmlsbEB0YXJrYXMuY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC1pbi5oIChhcnRkYXRhKTogVXNlIGxvbmcsIG5vdCB0aW1lX3QgZm9yIHBvcnRhYmlsaXR5LCBhdAoJICBsZWFzdCB0byBIUFVYLiAgRmlsZSBiZWxvdyBpcyBhIGRlcml2ZWQgZmlsZS4KClR1ZSBOb3YgIDIgMTQ6NDI6MjcgMTk5MyAgQmlsbCBDb3ggKGJpbGxAdGFya2FzLmN5Z251cy5jb20pCgoJKiBsaWJiZmQuaCAoYXJ0ZGF0YSk6IFVzZSBsb25nLCBub3QgdGltZV90IGZvciBwb3J0YWJpbGl0eSwgYXQKCSAgbGVhc3QgdG8gSFBVWC4KClR1ZSBOb3YgIDIgMDk6MzI6MjUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBVc2UgYmlnbWlwcyBmb3IgbWlwcyotKi1ic2QqLgoKTW9uIE5vdiAgMSAxNDozMDowOSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKGVsZl9zbHVycF9yZWxvY2FfdGFibGUsIGVsZl9zbHVycF9yZWxvY190YWJsZSk6CglIYW5kbGUgc3ltYm9sIG51bWJlciBvZiB6ZXJvLgoKCSogcmVsb2MuYyAoZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsKTogQWRkZWQKCUJGRF9SRUxPQ19NSVBTX0xJVEVSQUwsIEJGRF9SRUxPQ19NSVBTX0dPVDE2LAoJQkZEX1JFTE9DX01JUFNfQ0FMTDE2LCBCRkRfUkVMT0NfTUlQU19HUFJFTDMyLgoJKiBiZmQtaW4yLmg6IFJlYnVpbHQuCgkqIGNvZmYtbWlwcy5jIChtaXBzX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IEhhbmRsZQoJQkZEX1JFTE9DX01JUFNfTElURVJBTC4KCSogZWxmMzItbWlwcy5jIChtaXBzX3JlbG9jX21hcCk6IEhhbmRsZSBuZXcgcmVsb2NzLgoJKG1pcHNfZWxmX2hpMTZfcmVsb2MsIG1pcHNfZWxmX2xvMTZfcmVsb2MpOiBSZWFycmFuZ2UgX2dwX2Rpc3AKCWNoZWNrcyBzbGlnaHRseS4KCgkqIGFvdXQtdGFyZ2V0LmggKE1ZX2JmZF9kZWJ1Z19pbmZvX3N0YXJ0LCBNWV9iZmRfZGVidWdfaW5mb19lbmQsCglNWV9iZmRfZGVidWdfaW5mb19hY2N1bXVsYXQgW3NpY10pOiBSZW1vdmUgdW51c2VkIGRlZmluaXRpb25zLgoJKE1ZX2JmZF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMsIE1ZX2JmZF9yZWxheF9zZWN0aW9uLAoJTVlfYmZkX3NlY2xldF9saW5rKTogRGVmaW5lLgoJKE1ZX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IFJlbmFtZSBmcm9tCglNWV9yZWxvY19ob3d0b190eXBlX2xvb2t1cC4KCShNWV9iZmRfbWFrZV9kZWJ1Z19zeW1ib2wpOiBSZW5hbWUgZnJvbSBNWV9tYWtlX2RlYnVnX3N5bWJvbC4KCShNWSh2ZWMpKTogVXNlIEpVTVBfVEFCTEUgcmF0aGVyIHRoYW4gbGlzdGluZyBmdW5jdGlvbnMuCgkqIGhwMzAwaHB1eC5jIChNWV9nZXRfc3ltdGFiLCBNWV9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kLAoJTVlfY2Fub25pY2FsaXplX3JlbG9jLCBNWV93cml0ZV9vYmplY3RfY29udGVudHMpOiBEb24ndCBkZWZpbmUgaW4KCXRlcm1zIG9mIE1ZLCBiZWNhdXNlIHRoYXQgY2F1c2VzIGEgcmVjdXNpdmUgaW52b2NhdGlvbiBvZiBDQVQgd2hlbgoJZXhwYW5kZWQgd2l0aGluIEpVTVBfVEFCTEUsIGFuZCBBTlNJIGNvbXBpbGVycyBkb24ndCBleHBhbmQKCXJlY3Vyc2l2ZSBtYWNyb3MuCgkqIG1pcHNic2QuYyAoTVlfYmZkX3JlbG9jX3R5cGVfbG9va3VwKTogUmVuYW1lIGZyb20KCU1ZX3JlbG9jX2hvd3RvX3R5cGVfbG9va3VwLCBhbmQgZG9uJ3QgZGVmaW5lIGluIHRlcm1zIG9mIE1ZLgoJKE1ZX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6IERvbid0IGRlZmluZSBpbiB0ZXJtcyBvZiBNWS4KCShhb3V0X21pcHNfbGl0dGxlX3ZlYywgYW91dF9taXBzX2JpZ192ZWMpOiBVc2UgSlVNUF9UQUJMRSByYXRoZXIKCXRoYW4gbGlzdGluZyBmdW5jdGlvbnMuCgpNb24gTm92ICAxIDA5OjEyOjI1IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnLmJmZDogVXNlIG02OGstZWxmIGZvciBtNjgqLSotc3lzdjQqLgoKU3VuIE9jdCAzMSAwOTozNTo0OSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIHRhcmdldHMuYzogTW92ZSBlbnVtIHRhcmdldF9mbGF2b3VyIG91dHNpZGUgb2Ygc3RydWN0IGFuZCBjaGFuZ2UKCXRoZSBuYW1lIHRvIGVudW0gYmZkX2ZsYXZvdXIuICBUaGlzIG1lYW5zIGJmZCBjbGllbnRzIGNhbiB1c2UgaXQuCgkqIGJmZC1pbi5oOiBBZGQgbWFjcm8gYmZkX2dldF9mbGF2b3VyLgoJKiBiZmQtaW4yLmg6IFJlYnVpbHQuCgoJKiBzb20uYzogQWRkIGNvbW1lbnQgYWJvdXQgaG93IGFib3J0KCkgb24gY29ycnVwdCBleGVjdXRhYmxlIGlzIGV2aWwuCgpTYXQgT2N0IDMwIDEyOjI3OjA5IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGFvdXQsc2x1cnBfcmVsb2NfdGFibGUpOiBBdm9pZCBhIGdvdG8uCgpGcmkgT2N0IDI5IDE2OjA0OjMzIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGdlbi1hb3V0LmMsIGxpYmJmZC5jOiBleGl0KDEpIGluc3RlYWQgb2YgZXhpdCgtMSkuCgpGcmkgT2N0IDI5IDEzOjE3OjIxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oOiBBZGRlZCBjb21tYW5kcyBmb3Igb2JqZWN0IGZpbGUgZmxhZyB2YWx1ZXMuCgkqIGJmZC1pbjIuaDogUmVidWlsdC4KCSogZWxmY29kZS5oIChlbGZfb2JqZWN0X3ApOiBJZiB0eXBlIGlzIEVUX0RZTiwgc2V0IERZTkFNSUMgZmxhZywKCW5vdCBFWEVDX1AuCgkqIGJvdXQuYywgY29mZi1oODMwMC5jLCBjb2ZmLXNoLmM6IEFkZCBCRkRfSVNfUkVMQVhBQkxFIHRvCglvYmplY3RfZmxhZ3MgZmllbGQgZm9yIHRhcmdldCB2ZWN0b3IuCgkqIGFpeDM4Ni1jb3JlLmMsIGFvdXQtYWRvYmUuYywgYW91dC10YXJnZXQuaCwgYm91dC5jLCBjb2ZmLWEyOWsuYywKCWNvZmYtYWxwaGEuYywgY29mZi1hcG9sbG8uYywgY29mZi1oODMwMC5jLCBjb2ZmLWg4NTAwLmMsCgljb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYywgY29mZi1taXBzLmMsCgljb2ZmLXJzNjAwMC5jLCBjb2ZmLXNoLmMsIGNvZmYtd2UzMmsuYywgY29mZi16OGsuYywgaHB1eC1jb3JlLmMsCglpZWVlLmMsIG1pcHNic2QuYywgbmxtLXRhcmdldC5oLCBvYXN5cy5jLCBvc2YtY29yZS5jLCBzb20uYywKCXNyZWMuYywgdGVraGV4LmMsIHRyYWQtY29yZS5jOglSZW1vdmUgRFlOQU1JQyBmcm9tIG9iamVjdF9mbGFncwoJZmllbGQgZm9yIHRhcmdldCB2ZWN0b3IuCgpUaHUgT2N0IDI4IDIwOjAyOjMxIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3N0ZC1ob3N0Lmg6IERvbid0IGRlY2xhcmUgdGltZTsgY2F1c2VzIGVycm9yIG9uIG1hY2gzLgoJKiBjb25maWd1cmUuaW4gKGkzODZtYWNoM192ZWMpOiBSZXF1aXJlIGFvdXQzMi5vIHN0YWItc3ltcy5vLgoKVGh1IE9jdCAyOCAxNjozMzoyNiAxOTkzICBTdGFuIFNoZWJzICAoc2hlYnNAcnRsLmN5Z251cy5jb20pCgoJTHlueE9TIGFuZCBTcGFyYyBMeW54T1MgY2hhbmdlczoKCSogY29uZmlnLmJmZDogUmVjb2duaXplIHNwYXJjLSotbHlueG9zKi4KCSogY29uZmlndXJlLmhvc3Q6IFJlY29nbml6ZSBzcGFyYy0qLWx5bnhvcyouCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIFNwYXJjIEx5bnggdmVjdG9ycy4KCSogdGFyZ2V0cy5jIChzcGFyY2x5bnhfYW91dF92ZWMpOiBEZWNsYXJlLgoJKHNwYXJjbHlueF9jb2ZmX3ZlYyk6IERlY2xhcmUuCgkodGFyZ2V0X3ZlY3Rvcik6IEFkZCB0aGVtLgoJKiBjZi1pMzg2bHlueC5jOiBOZXcgZmlsZSwgcmVuYW1lZCBmcm9tIGkzODZseW54LWNmLmMuCgkqIGNmLW02OGtseW54LmM6IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gbTY4a2x5bngtY2YuYy4KCSogY2Ytc3BhcmNseW54LmM6IE5ldyBmaWxlLCBzdXBwb3J0IGZvciBjb2ZmIGluIFNwYXJjIEx5bnhPUy4KCSogY29mZi1zcGFyYy5jOiBOZXcgZmlsZSwgYmFzaWMgU3BhcmMgY29mZiBzdXBwb3J0LgoJKiBzcGFyY2x5bnguYzogTmV3IGZpbGUsIHN1cHBvcnQgZm9yIGEub3V0IGluIFNwYXJjIEx5bnhPUy4KCSogTWFrZWZpbGUuaW46IENoYW5nZSBmaWxlbmFtZXMgYXBwcm9wcmlhdGVseSwgYWRkIFNwYXJjIHJ1bGVzLgoJKiBjb2ZmY29kZS5oIChjb2ZmX3NldF9hcmNoX21hY2hfaG9vayk6IFJlY29nbml6ZSBTcGFyYyBtYWdpYwoJbnVtYmVyLgoJKGNvZmZfc2V0X2ZsYWdzKTogVXNlIEx5bnhPUyBtYWdpYyBudW1iZXIgZm9yIGkzODYsIG02OGssIGFuZAoJU3BhcmMgTHlueE9TLCBzZXQgU3BhcmMgbWFnaWMgbnVtYmVyIGZvciBTcGFyY3MuCgkqIGNvbmZpZy9tNjhrLWx5bngubXQgKFNFTEVDVF9WRUNTKTogUmVtb3ZlIHJlZHVuZGFudCB2ZWN0b3IuCgkqIGNvbmZpZy9zcGFyYy1seW54Lm10OiBOZXcgZmlsZS4KCSogaG9zdHMvaTM4Nmx5bnguaDogQ29zbWV0aWMgaW1wcm92ZW1lbnRzLgoJKiBob3N0cy9tNjhrbHlueC5oOiBBZGQgaWZkZWZzLCAjZGVmaW5lIG9mIGNmcmVlLgoJKiBob3N0cy9zcGFyY2x5bnguaDogTmV3IGZpbGUuCgpUaHUgT2N0IDI4IDE2OjIzOjQwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCglnY2MgLVdhbGwgbGludDoKCSogY29mZi1oODMwMC5jIChoODMwMF9yZWxvYzE2X2VzdGltYXRlKTogRGVjbGFyZSByZXR1cm4gdHlwZS4KCVJlbW92ZSB1c2VsZXNzIHN0YXRlbWVudCBwcm9iYWJseSBsZWZ0IGJ5IGNvZGUgY29weS4KCSogY3B1LWk5NjAuYyAoY29tcGF0aWJsZSk6IEZ1bGx5IGJyYWNrZXQgbWF0cml4IGluaXRpYWxpemVyLgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX2J1aWxkX2FyZ19yZWxvY19zdHViKTogVXNlIGJmZF94bWFsbG9jCglyYXRoZXIgdGhhbiB4bWFsbG9jLiAgVXNlIHJlYWxsb2MgYW5kIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUKCXJhdGhlciB0aGFuIHhyZWFsbG9jLgoJKGhwcGFfZWxmX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkIHNvbWUgY2FzdHMuCgkqIGVsZjMyLWkzODYuYyAoZWxmX2kzODZfcmVsb2NfdHlwZV9sb29rdXApOiBSZW1vdmUgdW51c2VkCgl2YXJpYWJsZS4gIEFkZCBkZWZhdWx0IGNhc2UgdG8gc3dpdGNoLgoJKiBocDMwMGhwdXguYzogRGVjbGFyZSBhb3V0XzMyX3dyaXRlX3N5bXMuCgkqIGkzODZic2QuYywgaTM4NmxpbnV4LmMsIG5ldGJzZDM4Ni5jIChOX1NIQVJFRF9MSUIpOiBEZWZpbmUgYXMgMAoJKGRlZmluaXRpb24gZnJvbSBhb3V0L2FvdXQ2NC5oIGlzIGFsd2F5cyAwIGFueWhvdykuCgkqIGkzODZseW54LmMgKHN3YXBfc3RkX3JlbG9jX2luKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCSogaWVlZS5jIChpZWVlX3dyaXRlX2lkKTogbGVuZ3RoIGNhbiBuZXZlciBiZSBuZWdhdGl2ZS4KCShyZWFkX2lkKTogTGlrZXdpc2UuCgkoaWVlZV9hcmNoaXZlX3ApOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoJKiBsaWJjb2ZmLWluLmggKGJmZF9wZXJmb3JtX3NsaXApOiBEZWNsYXJlLgoJKiBsaWJjb2ZmLmg6IFJlYnVpbHQuCgkqIG9hc3lzLmMgKG9hc3lzX3dyaXRlX3NlY3Rpb25zKTogUmVtb3ZlIHplcm8gaW5pdGlhbGl6YXRpb24gb2YKCXN0YXRpYyBzdHJ1Y3R1cmUuCgkqIHJlbG9jMTYuYzogSW5kZW50YXRpb24gY2hhbmdlLgoKV2VkIE9jdCAyNyAxNjo1MToyOSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnL2kzODYtbWFjaDMubXQ6IFVwZGF0ZSBmb3IgbmV3IGNvbmZpZ3VyYXRpb24KCSgtLXdpdGgtdGFyZ2V0cwlhbmQgc28gb24pLgoJKiBob3N0cy9pMzg2bWFjaDMuaDogRGVjbGFyZSBlcnJuby4KCSogdGFyZ2V0cy5jOiBEZWNsYXJlIGkzODZtYWNoM192ZWMuCgpXZWQgT2N0IDI3IDEyOjE4OjA3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIG5sbWNvZGUuaCAobmxtX3N3YXBfYXV4aWxpYXJ5X2hlYWRlcnNfaW4sCglubG1fc3dhcF9hdXhpbGlhcnlfaGVhZGVyc19vdXQpOiBIYW5kbGUgc2hhcmVkRGVidWdSZWNvcmRPZmZzZXQKCWFuZCBzaGFyZWREZWJ1Z1JlY29yZENvdW50IGZpZWxkcy4KClR1ZSBPY3QgMjYgMTY6MjE6MTIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpOiBSZW1vdmUgU0NPX0NPUkUuICBPbiBTZXAgMTEgMTk5MywKCXdlIHN0YXJ0ZWQgdXNpbmcgdHJhZC1jb3JlLmMgZm9yIFNDTyBpbnN0ZWFkLgoKCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogUmUtZW5hYmxlIGdlbmVyaWMgRUxGIGFuZCBOTE0gdGFyZ2V0cy4KClR1ZSBPY3QgMjYgMTY6NTM6MTIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWxmY29kZS5oIChhc3NpZ25fZmlsZV9wb3NpdGlvbl9mb3Jfc2VjdGlvbik6IEFsaWduIHNoX29mZnNldCB0bwoJc2hfYWRkcmFsaWduICh0aGlzIGlzIHdoYXQgVW5peFdhcmUgZG9lcywgYW5kIGl0IHNob3VsZG4ndCBodXJ0KS4KClR1ZSBPY3QgMjYgMTA6MTY6NTQgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJRnJvbSBKZWZmIExhdyBhbmQgUGV0ZSBIb29nZW5ib29tIGF0IFV0YWg6CgoJKiBlbGYzMi1ocHBhLmggKGhwcGFfZWxmX3N0dWJfZmluaXNoKTogQWRkIHByb3RvdHlwZS4KCShFTEYzMl9IUFBBX1JfQVJHX1JFTE9DKTogUmVuYW1lZCB3aXRob3V0IHRoZSBFTEYzMiBwcmVmaXgKCWFuZCBtb3ZlZCBpbnRvIGxpYmhwcGEuaC4gIEFsbCByZWZlcmVuY2VzIGNoYW5nZWQuCgkoRUxGMzJfSFBQQV9SX0NPTlNUQU5ULCBFTEYzMl9IUFBBX1JfQURERU5EKTogTGlrZXdpc2UuCgkoZ2V0X29wY29kZSBhbmQgb3Bjb2RlIGRlZmluZXMpOiBNb3ZlIGludG8gbGliaHBwYS5oCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfaW5zbjJmbXQpOiBSZW5hbWUgYW5kIG1vdmUgaW5mbwoJbGliaHBwYS5oLgoJKiBsaWJocHBhLmggKEhQUEFfUl8qKTogTW92ZWQgaGVyZS4gIFJlZm9ybWF0dGVkIHNsaWdodGx5IHRvIG1ha2UKCWZvciBlYXNpZXIgcmVhZGluZy4KCShnZXRfb3Bjb2RlKTogTW92ZWQgaGVyZS4gIEZJWE1FISB0aGlzIHJlYWxseSBzaG91bGQgYmUgYSBDIGZ1bmN0aW9uCglpbnNpZGUgdGhlIG9wY29kZSBsaWJyYXJ5IQoJKGJmZF9ocHBhX2luc24yZm10KTogTGlrZXdpc2UuCgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpOiBFbmFibGUgZWxmMzItaHBwYSB2ZWN0b3IuCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkIG5ldyBjb21tZW50cwoJYW5kIGNsYXJpZnkgZXhpc3RpbmcgY29tbWVudHMuICBEbyBub3QgdXNlIERFRlVOIHRvIGRlY2xhcmUgdGhpcwoJZnVuY3Rpb24uICBGaXggbnVtZXJvdXMgaW5kZW50aW9uIHByb2JsZW1zLiAgQ29ycmVjdGx5IGhhbmRsZSBjYXNlcwoJd2hlcmUgc3ltYm9sIGV4dGVuc2lvbiBzZWN0aW9uIG1heSBuZWVkIHRvIGJlIHJlYWQgZnJvbSBkaXNrLCAKCXJlYWQgZnJvbSBtZW1vcnksIG9yIGJ1aWx0IHRoZW4gcmVhZCBmcm9tIG1lbW9yeS4KCgkqIGVsZjMyLWhwcGEuaDogUmVmb3JtYXQgd2l0aCBnbnUtaW5kZW50IGFuZCBoYW5kIGZpeCBudW1lcm91cwoJZm9ybWF0dGluZyBhbmQgaW5kZW50aW9uIHByb2JsZW1zIGdudS1pbmRlbnQgY2FuIG5vdCBoYW5kbGUuCglDbGFyaWZ5IHNvbWUgY29tbWVudHMgYWJvdXQgcmVsb2NhdGlvbiB0eXBlcy4gIENvbW1lbnQgYmFzaWMKCXJlbG9jYXRpb24gImNsYXNzZXMiLiAgR3JvdXAgUEFSQU0gZGVjbGFyYXRpb25zIHRvZ2V0aGVyLgoJKEhQUEFfU1hUX3tOVUxMLCBTWU1ORFgsIFJHX1JFTE9DfSk6IE1ha2UgbWVtYmVycyBvZiBhIG5ldyAKCWVudW1lcmF0ZWQgdHlwZSByYXRoZXIgdGhhbiAjZGVmaW5lcy4KClR1ZSBPY3QgMjYgMDI6NDA6NDYgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIHNvbS5jIChocHBhX29iamVjdF9zZXR1cCk6ICBTZXQgU0VDX0NPREUgZm9yIC50ZXh0IHNlY3Rpb24gc28KCXRoYXQgR0RCIGNhbiBmaWd1cmUgb3V0IHRleHRfc3RhcnQgYW5kIHRleHRfZW5kLgoKTW9uIE9jdCAyNSAxNjowNToyMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJRml4IHVwIHdhcm5pbmdzIGZyb20gZ2NjIC1XYWxsOgoJKiBjb2ZmZ2VuLmMgKGNvZmZfcHJpbnRfc3ltYm9sKTogVXNlICVseCBhbmQgY2FzdCBuX3ZhbHVlIHRvCgl1bnNpZ25lZCBsb25nLiAgVXNlICVsZCBmb3IgdGFnbmR4LiAgVXNlICVseCBmb3Igb2Zmc2V0ICsgdm1hIGFuZAoJY2FzdCBpdCB0byB1bnNpZ25lZCBsb25nLgoJKiBlY29mZi5jIChlY29mZl9lbWl0X2FnZ3JlZ2F0ZSk6IFVzZSAlbGQuCQoJKGVjb2ZmX3ByaW50X3N5bWJvbCk6IFVzZSAlbGQsIGFuZCBjYXN0IGluZHggYW5kIHN5bV9iYXNlIHRvIGxvbmcuCgkqIGNvZmZjb2RlLmggKGR1bW15X3JlbG9jMTZfZXN0aW1hdGUpOiBTcGVjaWZ5IHJldHVybiB0eXBlLgoKCSogbGliYmZkLmMgKGJmZF93cml0ZSk6IElmIG5vdCBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gb3V0LCBzZXQKCWJmZF9lcnJvciB0byBzeXN0ZW1fY2FsbF9lcnJvci4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMKCW5vbi1uZWdhdGl2ZSwgc2V0IGVycm5vIHRvIEVOT1NQQyAoaWYgRU5PU1BDIGlzIGRlZmluZWQpLgoJKGJmZF9zZWVrKTogSWYgdGhlIHNlZWsgZmFpbHMsIHNldCBiZmRfZXJyb3IgdG8gc3lzdGVtX2NhbGxfZXJyb3IuCgkoYmZkX2dlbmVyaWNfc2V0X3NlY3Rpb25fY29udGVudHMpOiBGb3IgYSBiYWQgb2Zmc2V0ICsgY291bnQsIHNldAoJYmZkX2Vycm9yIHRvIGJhZF92YWx1ZS4KCSogc2VjbGV0LmMgKHJlbCk6IERvbid0IGFib3J0LiAgSW5zdGVhZCwgcmV0dXJuIGZhbHNlLgoKTW9uIE9jdCAyNSAwOTo1OTozNyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHJlbG9jX3R5cGVfbG9va3VwKTogSGFuZGxlIEJGRF9SRUxPQ19TUEFSQ19XRElTUDIyLgoKRnJpIE9jdCAyMiAyMDozNTo1NCAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBoYW5kbGUgbWlwcyotKiBpbnN0ZWFkIG9mIG1pcHMtKiwgdXNlIG1pcHMqZWwKCSAgaW5zdGVhZCBvZiBtaXBzLSotKmwKCkZyaSBPY3QgMjIgMTQ6MDM6MzMgMTk5MyAgTWFyayBFaWNoaW4gIChlaWNoaW5AY3lnbnVzLmNvbSkKCgkqIG02OGstbHlueC5tdCwgaTM4Ni1seW54Lm10IChUREVGSU5FUyk6IHNldAoJRlBSSU5URl9BTFJFQURZX0RFQ0xBUkVEIGJlY2F1c2UgdGhlIG9iamR1bXAuYyBkZWNsYXJhdGlvbiBvZgoJZnByaW50ZiBjb2xsaWRlcyB3aXRoIHRoZSBuYXRpdmUgb25lLgoKRnJpIE9jdCAyMiAxMTo1MDoyNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpOiBFbmFibGUgTUlQUyBFTEYgdmVjdG9ycy4KCkZyaSBPY3QgMjIgMDc6NTE6NTEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBVc2UgYmlnbWlwcyBmb3IgbWlwcy1zb255LWJzZCouCgoJKiBjb25maWd1cmUuaG9zdCwgY29uZmlnLmJmZDogQWRkICogdG8gZW5kIG9mIGFsbCBPUyBuYW1lcy4KClRodSBPY3QgMjEgMTI6MTY6MjYgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKEZJTEVfQUxJR04pOiBSZW5hbWVkIGZyb20gRUFMSUdOLCB0byBhdm9pZCBjb25mbGljdAoJd2l0aCBVbHRyaXggaGVhZGVyIGZpbGVzLgoKCSogc29tLmggKHN0cnVjdCBzb21fc2VjdGlvbl9kYXRhX3N0cnVjdCk6IFJlbmFtZWQgZnJvbQoJc29tX3NlY3Rpb25fZGF0YSB0byBhdm9pZCBjb25mbGljdCB3aXRoIG1hY3JvIGJ5IHRoYXQgbmFtZS4KCglDaGFuZ2VzIGZyb20gSmVmZiBMYXcgYW5kIFBldGVyIEhvb2dlbmJvb20gYXQgVXRhaDoKCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfcmVsb2MpOiAgVGFyZ2V0IHJlZ2lzdGVyIGZvciBhICdqdW1wCglpbiBkZWxheSBzbG90JyBvcHRpbWl6YXRpb24gaW4gY29tYmluYXRpb24gd2l0aCBhIGxvbmcgY2FsbAoJc3R1YiBzaG91bGQgYWx3YXlzIGJlIHIzMS4KCgkqIGVsZjMyLWhwcGEuYzogKGhwcGFfZWxmX3JlbG9jYXRlX2luc24pOiBUbyBiZSBjb25zaXN0ZW50CglhY3Jvc3MgYWxsIHJlbG9jYXRpb24gdHlwZXMsIHJldHJpZXZlIGluc3RydWN0aW9uIGFkZGVuZHMgZnJvbQoJdGhlIHJlbG9jYXRpb24gZW50cnkgcmF0aGVyIHRoYW4gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gaXRzZWxmLgoKCSogZWxmMzItaHBwYS5jOiAoaHBwYV9lbGZfcmVsb2NhdGVfaW5zbik6IEZpeCBhIHJlbG9jYXRpb24KCWVycm9yIHRoYXQgb25seSBvY2N1cnJlZCB3aGVuIHRoZSBhZGRlbmQgb2YgYW4gJ2FkZGlsJyBvcgoJJ2xkaWwnIHdhcyBsYXJnZXIgdGhhbiAyMSBiaXRzIGFuZCB2ZXJ5IGNsb3NlIHRvIGEgMksgYnl0ZQoJYm91bmRhcnkuCgoJKiBlbGYzMi1ocHBhLmM6IChocHBhX2VsZl9yZWxvYyk6ICBIYW5kbGUgdGhlIG9wdGltaXphdGlvbiBpbgoJd2hpY2ggYSBqdW1wIGlzIHBsYWNlZCBpbiB0aGUgZGVsYXkgc2xvdCBvZiBhIGZ1bmN0aW9uIGNhbGwuCglUaGUganVtcCB3YXMgYmVpbmcgYWNjb21wbGlzaGVkIHZpYSBhbiBhZGp1c3RtZW50IHRvIHRoZQoJcmV0dXJuIHBvaW50ZXIuICBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBicmVhayB0aGUgbG9uZyBjYWxsCglzdHViIGNvZGUsIGlmIHRoZXJlIHdhcyBhbnkuCgoJKiBlbGYzMi1ocHBhLmM6IChocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViKTogQ29ycmVjdGlvbnMKCXRvIGxvbmcgYnJhbmNoIHN0dWJzIHRvIGF2b2lkIHVzZSBvZiBnZW5lcmFsIHJlZ2lzdGVyIDIuCgoJKiBocHBhX3N0dWJzLmg6IE5ldyBzdHViIGluc3RydWN0aW9ucy4KCgkqIGVsZmNvZGUuaDogRGVjbGFyZSBiZmRfZWxmX2ZpbmRfc2VjdGlvbi4KCgkqIHNvbS5oIChzb21fc2VjdGlvbl9kYXRhKTogQWRkIG5ldyAic3Vic3BhY2VfaW5kZXgiIGZpZWxkLgoKCSogc29tLmMgKHNldHVwX3NlY3Rpb25zKTogU2F2ZSB0aGUgb3JpZ2luYWwgU09NIHN1YnNwYWNlIGluZGV4CglpbiB0aGUgQkZEIHNlY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoYXQgc3Vic3BhY2UuICAKCShzb21fZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCk6IEltcGxlbWVudC4KCShzb21fZ2V0X3N5bXRhYik6IEltcGxlbWVudC4KCShzb21fcHJpbnRfc3ltYm9sKTogSW1wbGVtZW50LgoJKHNvbV9zbHVycF9zdHJpbmdfdGFibGUpOiBOZXcgZnVuY3Rpb24gdG8gcmVhZCBhIHN0cmluZyB0YWJsZQoJZnJvbSBhIFNPTSBvYmplY3QgZmlsZS4KCShzb21fc2VjdGlvbl9mcm9tX3N1YnNwYWNlX2luZGV4KTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiB0aGUKCXNlY3Rpb24gd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBTT00gc3Vic3BhY2UgaW5kZXguCgkoc29tX3NsdXJwX3N5bWJvbF90YWJsZSk6IE5ldyBmdW5jdGlvbiB0byByZWFkIHRoZSBzeW1ib2wKCXRhYmxlIGZyb20gYSBTT00gb2JqZWN0IGZpbGUuCgkoc29tX21ha2VfZW1wdHlfc3ltYm9sKTogQ2hlY2sgZm9yIGVycm9ycyBmcm9tIGJmZF96YWxsb2MuCgkoc29tX25ld19zZWN0aW9uX2hvb2spOiBJbml0aWFsaXplIHN1YnNwYWNlX2luZGV4IGZpZWxkIHRvCgktMSBpbnN0ZWFkIG9mIDAuCgoJKiBzb20uYyAoc29tX29iamVjdF9zZXR1cCk6IEZpeCBwb2xhcml0eSBvZiB0ZXN0IHRvIHNldCBIQVNfUkVMT0MuCglTZXQgRVhFQ19QIGZvciBleGVjdXRhYmxlcy4KCShzZXR1cF9zZWN0aW9ucyk6IENvcnJlY3RseSBpZGVudGlmeSB3aGVuIGEgc2VjdGlvbiBoYXMKCXJlbG9jYXRpb25zLgoJKGxvZzIpOiBOZXcgZnVuY3Rpb24uCgkoc2V0dXBfc2VjdGlvbnMpOiBDb3JyZWN0bHkgY29udmVydCBiZXR3ZWVuIFNPTSBhbGlnbm1lbnRzIGFuZCBCRkQKCWFsaWdubWVudHMuCgoJKiBzb20uYyAoc2V0dXBfc2VjdGlvbnMpOiBEbyBub3Qgc2V0IFNFQ19BTExPQyBvciBTRUNfTE9BRAoJZm9yIHNlY3Rpb25zIHdoaWNoIGNvcnJlc3BvbmQgdG8gU09NIHNwYWNlcywgZG9pbmcgc28gY29uZnVzZXMKCW1hbnkgdXRpbGl0aWVzLiAgU2V0IGFzc29ydGVkIFNFQ18qIGZsYWdzIGZvciBTT00gc3Vic3BhY2VzCgl3aGljaCBjb3JyZXNwb25kIHRvIEJGRCBzZWN0aW9ucy4KCgkqIGVsZjMyLWhwcGEuYzogKGVsZjMyX2hwcGFfYmFja2VuZF9mYWtlX3NlY3Rpb25zKTogVGhlIHN0YWIKCXN0cmluZyB0YWJsZSBzaG91bGQgaGF2ZSBzaF90eXBlID09IFNIVF9TVFJUQUIuICBBZGQKCXByb2Nlc3NpbmcgdG8gbWFrZSBpdCBzby4KCgkqIGVsZmNvZGUuaDogKGJmZF9zZWN0aW9uX2Zyb21fc2hkcik6IFN0cmluZyB0YWJsZXMgKG90aGVyCgl0aGFuIC5zdHJ0YWIpIHdlcmUgbm90IGdldHRpbmcgdGhlIGZpbGUgb2Zmc2V0cyByZWNvcmRlZCwgc28KCXRoZXkgY291bGQgbm90IGJlIHJlYWQgZnJvbSBkaXNrLgoKCSogZWxmY29kZS5oOiAoZWxmX21ha2Vfc2VjdGlvbnMpOiAgTGVhdmUgdGhlIHNoX2FkZHIgZmllbGQgb2YKCXRoZSBzZWN0aW9uIGhlYWRlciBhbmQgdGhlIHZtYSBmaWVsZCBvZiBhIHNlY3Rpb24gYXQgMCBpZiB0aGUKCXNlY3Rpb24gaXMgbm90IHBhcnQgb2YgdGhlIHByb2dyYW0gZXhlY3V0aW9uIGltYWdlLiAoZS5nLiwKCS5zdGFiKQoKCSogc29tLltoY106IENoYW5nZSB0YXJnZXQgdmVjdG9yIHByZWZpeCBmcm9tICJocHBhIiB0byAic29tIi4KCUNvbnNpc3RlbnRseSB1c2Ugb2JqX3NvbSBwcmVmaXggdG8gYWNjZXNzIGZpZWxkcyBpbiBiYWNrZW5kIGRhdGEKCXN0cnVjdHVyZXMuICBGaXggYWxsIGNhbGxlcnMvcmVmZXJlbmNlcy4KCgkqIHNvbS5oOiBEbyBub3QgaW5jbHVkZSBmaWxlcyBvbmx5IG5lZWRlZCBmb3IgY29yZSBmaWxlIHJlYWRpbmcgaGVyZS4KCUluY2x1ZGUgYS5vdXQgZm9yIGJvdGggSE9TVF9IUFBBSFBVWCBhbmQgSE9TVF9IUFBBQlNELiAgRGVsZXRlCglmb3J3YXJkIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMsIHRoZXkgYXJlIHVubmVjZXNzYXJ5LgoJKHN0cnVjdCBzb21kYXRhKTogRGVsZXRlIGF1eF9oZHIsIGFuZCBocF9zeW1ib2xfZW50cnlfc2l6ZSBmaWVsZHMuCglDaGFuZ2UgInN5bWJvbHMiIHRvICJzeW10YWIiLiAgQWRkICJzdHJpbmd0YWIiIGFuZCAicmVsb2NfZmlsZXBvcyIKCWZpZWxkcyBmb3IgZnV0dXJlIHVzZS4gIENoYW5nZSBvYmpfc29tXyogbWFjcm9zIGFzIGFwcHJvcHJpYXRlLgoJKHNvbV9zZWN0aW9uX2RhdGEpOiBOZXcgc3RydWN0dXJlIHRvIGtlZXAgU09NIHNwZWNpZmljIGluZm9ybWF0aW9uCglhYm91dCBCRkQgc2VjdGlvbnMgKGZvciBmdXR1cmUgdXNlKS4KCgkqIHNvbS5jOiBQcm92aWRlIFBBUkFNUyBkZWNsYXJhdGlvbnMgZm9yIGFsbCBmdW5jdGlvbnMgY3VycmVudGx5CglpbiB0aGlzIGZpbGUuCgkoc3RydWN0IGNvbnRhaW5lcik6IERlbGV0ZSB1bndhbnRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KCShzb21fb2JqZWN0X3NldHVwKTogQWRkIGNvbW1lbnRzLiAgVXNlIHNvbV9ta29iamVjdCB0byBhbGxvY2F0ZQoJU09NIHNwZWNpZmljIGluZm9ybWF0aW9uIGluIHRoZSBCRkQ7IHVzZSBpbmZvcm1hdGlvbiBmcm9tIHRoZQoJZmlsZSBhbmQgKHBvc3NpYmx5IGVtcHR5KSBhdXhpbGlhcnkgaGVhZGVycyB0byBpbml0aWFsaXplIHRoaXMKCWluZm9ybWF0aW9uLiAgRGVsZXRlIHJlZHVuZGFudCBiZmRfZ2V0X3N5bWNvdW50IChhYmZkKSAiY2FsbHMiLgoJKHNldHVwX3NlY3Rpb25zKTogUmV0dXJuIHR5cGUgaXMgbm93IGJvb2xlYW4sIGZpeCByZXR1cm4gc3RhdGVtZW50cy4KCSJGaXgiIGhhbmRsaW5nIG9mIEJTUyBsaWtlIHN1YnNwYWNlcyBpbiB0aGUgY29tcHV0YXRpb24gb2YgdGhlCgljb250YWluaW5nIHNwYWNlJ3Mgc2l6ZS4gIElmIHRoZSBzdWJzcGFjZSBoYXMgcmVsb2NhdGlvbnMsIHNldCB0aGUKCWFwcHJvcHJpYXRlIEJGRCBzZWN0aW9uIGZsYWdzIGFuZCByZWNvcmQgdGhlIGluZGV4IGludG8gYW5kIHRoZQoJc2l6ZSBvZiB0aGUgZml4dXAgc3RyZWFtLiAgQWx3YXlzIHJldHVybiBhIHZhbHVlLgoJKHNvbV9vYmplY3RfcCk6IFNldCBiZmRfZXJyb3IgYXBwcm9wcmlhdGVseSBpZiBlcnJvcnMgYXJlIGRldGVjdGVkCglmcm9tIGJmZF97cmVhZCxzZWVrfSBmdW5jdGlvbnMuICBIYW5kbGUgRVhFQ0xJQk1BR0lDIHR5cGUgZmlsZXMuCglEbyBub3QgdHJ5IHRvIHJlYWQgYSBub24tZXhpc3RhbnQgYXV4aWxpYXJ5IGhlYWRlci4KCShzb21fbWtvYmplY3QpOiBGbGVzaCBvdXQuCgkoc29tX3NlY3Rpb25faG9vayk6IEFsbG9jYXRlIHNwYWNlIHRvIGhvbGQgU09NIHNwZWNpZmljIGluZm9ybWF0aW9uCglhYm91dCBzZWN0aW9ucy4KClRodSBPY3QgMjEgMTI6NDE6MzQgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJZ2NjIC1XYWxsIGxpbnQ6CgkqIGNvZmYtaDgzMDAuYywgY29mZmNvZGUuaDogQ2hhbmdlIHNocmluayBwYXJhbWV0ZXIKCWluICpfcmVsb2MxNl9lc3RpbWF0ZSB0byB1bnNpZ25lZCB0byBtYXRjaCBwcm90b3R5cGUuCgkqIGFyY2hpdmUuYzogQXZvaWQgIi8qIiBpbiBjb21tZW50LgoKVGh1IE9jdCAyMSAxMzowNToxNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBkZXAtaW4uc2VkOiBDcmVhdGUgb3VyIG93biBsaW5lIGJyZWFrcyBmb3IgYSBtb3JlIGFlc3RoZXRpYwoJTWFrZWZpbGUuCgkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0IGRlcGVuZGVuY2llcy4KCgkqIGVsZjMyLW1pcHMuYzogSW5jbHVkZSAic2VjbGV0LmgiLgoJKG1pcHNfZWxmX2Zha2Vfc2VjdGlvbnMpOiBGb3JjZSBzaXplIG9mIC5yZWdpbmZvIHNlY3Rpb24gdG8gc2l6ZW9mCglFbGYzMl9FeHRlcm5hbF9SZWdJbmZvLgoJKG1pcHNfZWxmX3NlY2xldF9saW5rKTogTmV3IGZ1bmN0aW9uLiAgTGluayB0aGUgLnJlZ2luZm8gc2VjdGlvbgoJc3BlY2lhbGx5LCBhbmQgcGFzcyBldmVyeXRoaW5nIGVsc2UgdG8gdGhlIGdlbmVyaWMgcm91dGluZS4KCShiZmRfZWxmMzJfYmZkX3NlY2xldF9saW5rKTogRGVmaW5lIG1hY3JvLgoJKiBlbGYzMi10YXJnZXQuaDogSWYgYmZkX2VsZjMyX2JmZF9zZWNsZXRfbGluayBpcyBhbHJlYWR5IGRlZmluZWQsCglkb24ndCBvdmVycmlkZSBpdC4KCldlZCBPY3QgMjAgMTI6MjI6MzcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogbGlibmxtLmggKG5sbV9iYWNrZW5kX2RhdGEpOiBBZGRlZCBzaWduYXR1cmUgZmllbGQuCgkobmxtX3NpZ25hdHVyZSk6IE5ldyBtYWNyby4KCSogbmxtY29kZS5oIChubG1fb2JqZWN0X3AsIG5sbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBVc2UgdGhlIE5MTQoJc2lnbmF0dXJlIGZyb20gdGhlIGJhY2tlbmQgcmF0aGVyIHRoYW4gdGhlIGNvbnN0YW50IE5MTV9TSUdOQVRVUkUuCgkqIG5sbTMyLWkzODYuYyAobmxtMzJfaTM4Nl9iYWNrZW5kKTogSW5pdGlhbGl6ZSBzaWduYXR1cmUgZmllbGQuCgoJKiBhb3V0ZjEuaCAoTUFDSFRZUEVfT0spOiBBY2NlcHQgTV9VTktOT1dOLgoJKE5BTUUoc3Vub3Msc2V0X2FyY2hfbWFjaCkpOiBUcmVhdCBNX1VOS05PV04gYXMgNjgwMDAsIG5vdCA2ODAyMC4KCldlZCBPY3QgMjAgMTA6Mjg6MjcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBob3N0cy9pMzg2YnNkLmggW19fYnNkaV9fXTogRGVmaW5lIEhPU1RfREFUQV9TVEFSVF9BRERSLgoKV2VkIE9jdCAyMCAxMDoxMDowNyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChIRklMRVMpOiBOZXcgdmFyaWFibGUsIGZvciB1c2UgaW4gIm1ha2UgZGVwIi4KCSguZGVwKTogRGVwZW5kIG9uICQoQ0ZJTEVTKSBhbmQgJChIRklMRVMpLiAgRGVsZXRlIC5kZXAxIGFuZAoJcmVtYWtlIGl0LCBzbyB0aGF0ICIkPyIgaXMgY29tcGxldGUuCgkoLmRlcDEpOiBEb24ndCBuZWVkIHRvIHJlbW92ZSAuZGVwMSBmaXJzdC4KCShkZXAuc2VkKTogRGVwZW5kIG9uIGNvbmZpZy5zdGF0dXMsIG5vdCBNYWtlZmlsZS4KCShDRklMRVMpOiBBZGQgbmxtLmMuCgpUdWUgT2N0IDE5IDE1OjI2OjI2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtYWxwaGEuYzogSW1wbGVtZW50ZWQgcmVsb2MgaGFuZGxpbmcgZm9yIHRoZSBsaW5rZXIsIG1hZGUKCXZhcmlvdXMgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzLgoJKiBsaWJlY29mZi5oIChlY29mZl9iYWNrZW5kX2RhdGEpOiBBZGRlZCByZGF0YV9pbl90ZXh0IGZpZWxkLgoJUmVuYW1lZCBmaW5pc2hfcmVsb2MgdG8gYWRqdXN0X3JlbG9jX2luLiAgQWRkZWQgYWRqdXN0X3JlbG9jX291dAoJZmllbGQuCgkoZWNvZmZfYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IERvbid0IGRlZmluZS4KCSogZWNvZmYuYyAoZWNvZmZfc2VjX3RvX3N0eXBfZmxhZ3MsIGVjb2ZmX3N0eXBfdG9fc2VjX2ZsYWdzKToKCUhhbmRsZSAubGl0YSBzZWN0aW9uLgoJKGVjb2ZmX3NsdXJwX3JlbG9jX3RhYmxlKTogSGFuZGxlIFJFTE9DX1NFQ1RJT05fRklOSS4KCWZpbmlzaF9yZWxvYyBiYWNrZW5kIGZpZWxkIHJlbmFtZWQgdG8gYWRqdXN0X3JlbG9jX2luLgoJKGVjb2ZmX2JmZF9zZWNsZXRfbGluayk6IEFkanVzdCBudW1iZXIgb2YgYXV4IGVudHJpZXMgdG8KCWRlYnVnX2FsaWduIGJvdW5kYXJ5LgoJKGVjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IElmIHJkYXRhX2luX3RleHQgcHV0CgkucmRhdGEgc2VjdGlvbiBpbiB0ZXh0IHNlZ21lbnQsIG5vdCBkYXRhIHNlZ21lbnQuICBQdXQgLnBkYXRhCglzZWN0aW9uIGluIHRleHQgc2VnbWVudC4KCShlY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBMaWtld2lzZS4gIEFsc28sIGNhbGwKCWFkanVzdF9yZWxvY19vdXQsIGFuZCBoYW5kbGUgLmxpdGEsIC54ZGF0YSwgLnBkYXRhLCAuZmluaSBhbmQKCWFic29sdXRlIHNlY3Rpb25zIHdoZW4gd3JpdGluZyBvdXQgcmVsb2NzLgoJKiBjb2Zmc3dhcC5oIChjb2ZmX3N3YXBfYW91dGhkcl9vdXQpOiBGb3IgQUxQSEFFQ09GRiwgb3V0cHV0IDIgZm9yCglibGRyZXYgZmllbGQsIGFzIG9uIEFscGhhIE9TRi8xLiAgUGFkZGluZyBmaWVsZCBpcyBub3cgMiBieXRlcy4KCSogY29mZi1taXBzLmMgKG1pcHNfZWNvZmZfc3dhcF9yZWxvY19vdXQpOiBBZGRlZCBhc3NlcnRpb24uCgkobWlwc19hZGp1c3RfcmVsb2NfaW4pOiBSZW5hbWVkIGZyb20gbWlwc19maW5pc2hfcmVsb2MuCgkobWlwc19hZGp1c3RfcmVsb2Nfb3V0KTogTmV3IGZ1bmN0aW9uIChkb2VzIG5vdGhpbmcpLgoJKG1pcHNfZWNvZmZfYmFja2VuZF9kYXRhKTogSW5pdGlhbGl6ZSBuZXcgZmllbGRzLgoJKGVjb2ZmX2JmZF9nZXRfcmVsb2NhdGlvbl9zZWN0aW9uX2NvbnRlbnRzKTogRGVmaW5lIHRvIGJlCgliZmRfZ2VuZXJpY19nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMuCgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogQWRkZWQgY2FzdHMgdG8gYXZvaWQgQWxwaGEKCU9TRi8xIGNjIGJ1Zy4KClRodSBPY3QgMTQgMDE6MTA6MzUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEFkZCBjb21tZW50cyBhdHRlbXB0aW5nIHRvCglleHBsYWluIFBDIHJlbGF0aXZlIHJlbG9jYXRpb25zLgoKCSogY29mZmNvZGUuaCAoc3R5cF90b19zZWNfZmxhZ3MpOiBEb24ndCBzZXQgU0VDX0RFQlVHR0lORyB1bnRpbCBpdAoJaXMgbWFkZSB0byB3b3JrLgoJKGNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogUmVtb3ZlIGNoZWNrIGZvcgoJVVNFX0RJU0NBUkRFRF9TRUNUSU9OU19DT1VOVC4KCSogY29mZi1pMzg2LmM6IERvbid0IGRlZmluZSBVU0VfRElTQ0FSREVEX1NFQ1RJT05TX0NPVU5ULiAgQmFzaW5nCglpdCBvbiBob3N0IGRlZmluZXMgaXMgd3JvbmcuCgoJKiBlY29mZi5jIChlY29mZl9iZmRfc2VjbGV0X2xpbmspOiBEb24ndCBsaW5rIGEgLnJlZ2luZm8gc2VjdGlvbi4KCShlY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBEb24ndCByZXF1aXJlIHRoZSAucmVnaW5mbyBzZWN0aW9uCgl0byBiZSBhIHBhcnRpY3VsYXIgc2l6ZS4KCldlZCBPY3QgMTMgMTg6Mzk6MDMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRlcC1pbik6IE5ldyBydWxlLCBmb3IgZWRpdGluZyBkZXBlbmRlbmNpZXMgaW50bwoJTWFrZWZpbGUuaW4gaW4gJChzcmNkaXIpLiAgVXNlIG1vdmUtaWYtY2hhbmdlLgoJKC5kZXAxLCBkZXApOiBVc2UgbW92ZS1pZi1jaGFuZ2UuCgkoQ0ZJTEVTKTogQWRkIGNvZmYtYXBvbGxvLmMuCgoJU3VuIE9jdCAxMCAxODowMjo1NiAxOTkzICBUcm95IFJvbGxvICh0cm95QGNibWUudW5zdy5FRFUuQVUpCgoJKiBNYWtlZmlsZS5pbjogUmVjb2duaXNlIG5ldyBmaWxlLCBjb2ZmLWFwb2xsby5vCgoJKiBjb2ZmLWFwb2xsby5jOiBOZXcgZmlsZQoKCSogY29mZmNvZGUuaDogUmVjb2duaXNlIGFwb2xsbyBtYWdpYyBudW1iZXJzIGFuZCB3cml0YWJsZSB0ZXh0CgoJKiBjb2Zmc3dhcC5oOiBTd2FwIEFwb2xsbyBvcHRpb25hbCBoZWFkZXIgZW50cmllcwoKCSogY29uZmlnLmJmZDogQWRkIGxpbmUgZm9yIEFwb2xsbwoKCSogY29uZmlndXJlLmhvc3Q6IFJlcGxhY2UgYXBvbGxvNjhiIGFuZCBhcG9sbG82OHYgd2l0aCBBcG9sbG8KCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXNlIGFwb2xsb2NvZmZfdmVjCgoJKiB0YXJnZXRzLmM6IExpa2V3aXNlCgoJKiBjb25maWcvYXBvbGxvLm1oLCBjb25maWcvYXBvbGxvLm10OiBOZXcgZmlsZXMKCgkqIGhvc3RzL2Fwb2xsbzY4Lmg6IFJlbW92ZSBpbmNsdXNpb24gb2Ygc3RyaW5ncy5oCgpXZWQgT2N0IDEzIDE0OjI4OjE3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvZmYtaTM4Ni5jIChpM2NvZmZfb2JqZWN0X3ApOiBOb3cgc3RhdGljLgoKCSogTWFrZWZpbGUuaW46IFVwZGF0ZWQgZGVwZW5kZW5jaWVzLgoJKC5kZXAsIC5kZXAxLCBkZXAuc2VkKTogTmV3IHRhcmdldHMsIHRvIG1ha2UgIm1ha2UgZGVwIiB3b3JrCgliZXR0ZXIuCgkqIGRlcC1pbi5zZWQ6IE5ldyBmaWxlLgoKCSogbTY4a2x5bngtY2YuYyAoT05MWV9ERUNMQVJFX1JFTE9DUyk6IERlZmluZSwgdG8gYXZvaWQgbmFtZQoJY29uZmxpY3RzIHdoZW4gIi0td2l0aC10YXJnZXRzPWFsbCIuCgkqIGNvZmYtbTY4ay5jIChtNjhrY29mZl9ob3d0b190YWJsZSwgbTY4a19ydHlwZTJob3d0bywKCW02OGtfaG93dG8ycnR5cGUpOiBSZW5hbWUgdmlhIG1hY3JvcyB0byBrZWVwIG5hbWVzcGFjZSBjbGVhbi4KCSogY29uZmlndXJlLmluOiBGb3IgbTY4a2x5bnhfY29mZl92ZWMsIGluY2x1ZGUgY29mZi1tNjhrLm8gZm9yCglub3cuCgpUdWUgT2N0IDEyIDE3OjAzOjI3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZjMyLW1pcHMuYzogRXh0ZW5zaXZlIGFkZGl0aW9ucyB0byBkbyByZWxvY2F0aW9ucyBhbmQgdG8KCWhhbmRsZSBNSVBTIHNwZWNpZmljIHNlY3Rpb25zLgoJKiBsaWJlbGYuaCAoZWxmX2JhY2tlbmRfZGF0YSk6IFBhc3MgZm91cnRoIGFyZ3VtZW50IHRvCgllbGZfYmFja2VuZF9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24gdG8gcGVybWl0IGl0IHRvIGNvbnRyb2wgdGhlCglzZWN0aW9uIGluZGV4IHRvIHVzZS4KCShlbGZfb2JqX3RkYXRhKTogQWRkIGdwIGFuZCBncF9zaXplIGZpZWxkcy4KCShlbGZfZ3AsIGVsZl9ncF9zaXplKTogTmV3IGFjY2Vzc29yIG1hY3Jvcy4KCSogZWxmY29kZS5oOiBSZW1vdmVkIGEgbnVtYmVyIG9mIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuCgkoZWxmX2Zha2Vfc2VjdGlvbnMpOiBDbGVhciBzZWN0aW9uIGhlYWRlciBiZWZvcmUgY2FsbGluZwoJZWxmX2JhY2tlbmRfZmFrZV9zZWN0aW9ucywgbm90IGFmdGVyLgoJKHByZXBfaGVhZGVycyk6IFJldHVybiB0cnVlIGF0IGVuZC4KCShlbGZfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uKTogUGFzcyByZXR2YWwgYXJndW1lbnQgdG8KCWVsZl9iYWNrZW5kX3NlY3Rpb25fZnJvbV9iZmRfc2VjdGlvbi4KCSogZWxmMzItaHBwYS5jIChlbGYzMl9ocHBhX2JhY2tlbmRfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uKToKCUFjY2VwdCBhbmQgaWdub3JlIG5ldyByZXR2YWwgYXJndW1lbnQuCgkqIGJmZC5jOiBJbmNsdWRlIGxpYmVsZi5oLgoJKGJmZF9zZXRfZ3Bfc2l6ZSk6IEhhbmRsZSBFTEYgdGFyZ2V0cy4KCSogTWFrZWZpbGUuaW4gKGJmZC5vKTogRGVwZW5kcyB1cG9uIGxpYmVsZi5oLgoJKGVsZjMyLW1pcHMubyk6IERlcGVuZHMgdXBvbiAkKElOQ0RJUikvZWxmL21pcHMuaC4KCk1vbiBPY3QgMTEgMTc6MjU6MTggMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWNvZmYuYyAoZWNvZmZfbWtvYmplY3QpOiBDaGVjayBiZmRfbWFrZV9zZWN0aW9uIHJldHVybiB2YWx1ZS4KCShlY29mZl9ta29iamVjdF9ob29rKTogTmV3IGZ1bmN0aW9uLgoJKGVjb2ZmX25ld19zZWN0aW9uX2hvb2ssIGVjb2ZmX3NpemVvZl9oZWFkZXJzLAoJZWNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zLCBlY29mZl9zZXRfc2VjdGlvbl9jb250ZW50cywKCWVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IEhhbmRsZSBkdW1teSBSRUdJTkZPIHNlY3Rpb24uCgkoZWNvZmZfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBOZXcgZnVuY3Rpb24gdG8gaGFuZGxlIHJlYWRpbmcKCVJFR0lORk8gc2VjdGlvbi4KCSogbGliZWNvZmYuaCAoZWNvZmZfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBDaGFuZ2UgZnJvbSBtYWNybwoJZGVmaW5pdGlvbiB0byBmdW5jdGlvbiBwcm90b3R5cGUuCgkoZWNvZmZfbWtvYmplY3RfaG9vayk6IE5ldyBwcm90b3R5cGUuCgkqIGNvZmYtYWxwaGEuYyAoYWxwaGFfZWNvZmZfbWtvYmplY3RfaG9vayk6IFJlbW92ZWQuCgkoYWxwaGFfZWNvZmZfYmFja2VuZF9kYXRhKTogVXNlIGVjb2ZmX21rb2JqZWN0X2hvb2suCgkqIGNvZmYtbWlwcy5jIChtaXBzX2Vjb2ZmX21rb2JqZWN0X2hvb2spOiBSZW1vdmVkLgoJKG1pcHNfZWNvZmZfYmFja2VuZF9kYXRhKTogVXNlIGVjb2ZmX21rb2JqZWN0X2hvb2suCgpGcmkgT2N0ICA4IDE1OjI1OjMzIDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGxpYmJmZC5jIChiZmRfZ2V0KjMyLCBiZmRfZ2V0KjY0KTogIFByZXZlbnQgQU5TSSBzaWduIGV4dGVuc2lvbgoJYnkgY2FzdGluZyB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIHRvIGJmZF92bWEuCgpGcmkgT2N0ICA4IDAyOjM0OjIxIDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNvbmZpZ3VyZS5pbjogIERvIG5vdCBkZWZpbmUgU0VMRUNUX1ZFQ1MsIFNFTEVDVF9BUkNISVRFQ1RVUkVTCglpZiBjb25maWd1cmluZyAtLXdpdGgtdGFyZ2V0cz1hbGwuCgpUaHUgT2N0ICA3IDE3OjM0OjA3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGhvd3RvX3RhYmxlX3N0ZCk6IENvcnJlY3QgdGhlICJzaXplIiBmaWVsZCBpbiBzb21lCgllbnRyaWVzLgoKCSogcmVsb2MuYyAocmVsb2NfaG93dG9fdHlwZSk6IENoYW5nZSBkb2N1bWVudGF0aW9uIHRvIGRpc3BlbCBhbnkKCW5vdGlvbiB0aGF0IHRoZSAic2l6ZSIgZmllbGQgaXMgYSBwb3dlci1vZi10d28gaW5kaWNhdG9yLgoKVGh1IE9jdCAgNyAxMDo1MDozOCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQoKICAgICAgICogY29mZnN3YXAuaDogKGJmZF9zd2FwX3JlbG9jX2luKTogYSBzeW1uZHggaXMgc2lnbmVkLgoKCU1ha2Ugc3VwcG9ydCBmb3IgcmVsYXhpbmcgbW9yZSBnZW5lcmljLgoJKiByZWxvYzE2LmM6IEFkZCBuZXcgdGFyZ2V0IGVudHJ5IC0gYmZkX2NvZmZfcmVsb2MxNl9lc3RpbWF0ZSwKCWZpeCBiaXQgcm90LgoJKiBsaWJjb2ZmLmgsIGxpYmNvZmYtaW4uaDogZGVjbGFyYXRpb25zLiBQcm90b3R5cGVzCgkqIGNvZmZjb2RlLmggKGJmZF9jb2ZmX3N0ZF9zd2FwX3RhYmxlKTogQWRkIGNhbGxzIHRvCgljb2ZmX3JlbG9jXzE2X2V4dHJhX2Nhc2VzIGFuZCBjb2ZmX3JlbG9jMTZfZXN0aW1hdGUuCgkoZHVtbXlfcmVsb2MxNl9lc3RpbWF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogY29mZi1oODMwMC5jIChoODMwMF9yZWxvYzE2X2VzdGltYXRlKTogTmV3IGZ1bmN0aW9uCgpUaHUgT2N0ICA3IDE0OjI0OjEzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoRUFMSUdOKTogRGVmaW5lLCBkZXBlbmRlbnQgb24gQVJDSF9TSVpFLgoJKGFsaWduX2ZpbGVfcG9zaXRpb24pOiBOZXcgZnVuY3Rpb24uCgkoZWxmX2xvY2F0ZV9zaCk6IERpc2FibGVkIGZ1bmN0aW9uIGRlbGV0ZWQuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2Zvcl9zeW10YWJfYW5kX3N0cnRhYnMpOiBBbGlnbiBwb3NpdGlvbiwKCXRoZW4gcGxhY2Ugc3ltdGFiLCB0aGVuIGRvIG90aGVyIHNlY3Rpb25zLgoJKG1hcF9wcm9ncmFtX3NlZ21lbnRzKTogQWxpZ24gcHJvZ3JhbSBoZWFkZXIuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2V4Y2VwdF9yZWxvY3MpOiBBbGlnbiBzZWN0aW9uIGhlYWRlcnMuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2Zvcl9yZWxvY3MpOiBBbGlnbiByZWxvY2F0aW9uIHNlY3Rpb25zLgoKVHVlIE9jdCAgNSAxMDo0NDozMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5ob3N0OiBSZWNvZ25pemUgaHBwYSotKi1oaXV4KiAoY3VycmVudGx5IHN5bm9ueW0gZm9yIGhwdXgpLgoJQ2hhbmdlIG90aGVyIGhwcGEgZW50cmllcyB0byB1c2UgLSotIG5vdCAtaHAtLgoJKiBjb25maWcuYmZkOiBSZWNvZ25pemUgaHBwYSotKi1oaXV4KiAoY3VycmVudGx5IHN5bm9ueW0gZm9yIGhwdXgpLgoKCSogY29mZi1yczYwMDAuYywgY3B1LXJzNjAwMC5jLCByczYwMDAtY29yZS5jOiBDaGFuZ2Ugbm9uLUFTQ0lJCgljaGFyYWN0ZXJzIGluIGNvbW1lbnQgdG8gb2N0YWwgZXNjYXBlcy4KClN1biBPY3QgIDMgMTI6MzU6MTUgMTk5MyAgU3RhbiBTaGVicyAgKHNoZWJzQHJ0bC5jeWdudXMuY29tKQoKCSogY29mZi1pMzg2bHlueC5jOiBSZW1vdmVkLCBuYW1lIHRvbyBsb25nLgoJKiBpMzg2bHlueC1jZi5jOiBOZXcgZmlsZSwgd2FzIGNvZmYtaTM4Nmx5bnguYy4KCSogY29uZmlndXJlLmluOiBSZWZsZWN0IGZpbGUgbmFtZSBjaGFuZ2VzLgoJKiBNYWtlZmlsZS5pbjogTWVudGlvbiBMeW54LXJlbGF0ZWQgZmlsZXMuCgoJKiBpMzg2bHlueC5jIChseW54XzMyX3N3YXBfZXh0X3JlbG9jX2luKTogZ2V0IHJlbG9jIGJpdHMgaW4gaTM4NgoJTHlueC1zcGVjaWZpYyB3YXkuCgoJKiBtNjhrbHlueC1jZi5jOiBOZXcgZmlsZSwgZGVmaW5lcyBjb2ZmIGZvcm1hdCBmb3IgTTY4SyBMeW54T1MuCgkqIG02OGtseW54LmM6IFJlbW92ZSBjb2ZmIHZlY3RvciBkZWZpbml0aW9uLCBub3cgaW4gbTY4a2x5bngtY2YuYy4KCgkqIGNvZmZjb2RlLmggKHNlY190b19zdHlwX2ZsYWdzKTogU2V0IHNlY3Rpb24gZmxhZyB0byBTVFlQX0lORk8KCWZvciAuc3RhYiwgLnN0YWJzdHIgYW5kIC5kZWJ1ZyBzZWN0aW9ucywgYW5kIHNldCBTRUNfREVCVUdHSU5HIGZvcgoJc2VjdGlvbnMgb2YgdHlwZSBTVFlQX0lORk8uICAoZnJvbSBNaW5oIFRyYW4tTGUpCgkoY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBBZGQgZGlzY2FyZGVkX3NlY3Rpb25zX2NvdW50Cgl0byBhYmZkLT5zZWN0aW9uX2NvdW50LCB3aGljaCBoZWxwcyBgc3RyaXAnIGtlZXAgdGhlIHNpemUKCW9mIHRoZSBleGVjdXRhYmxlIGhlYWRlciBjb25zdGFudC4KCSogY29mZi1pMzg2LmMgKGRpc2NhcmRlZF9zZWN0aW9uc19jb3VudCk6IE5ldyB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQKCXRvIHplcm8uICBGb3IgdXNlIGJ5IGBzdHJpcCcuICBDdXJyZW50bHkgYmVpbmcgdXNlZCBvbmx5IGluIGFpeDM4NgoJY29mZiwgYnV0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVyIGNvZmYgc3lzdGVtcy4gIChmcm9tIE1pbmggVHJhbi1MZSkKCgkqIGNvZmZzd2FwLmggKGNvZmZfc3dhcF9maWxlaGRyX291dCk6IEFkZGVkIGEgbWlzc2luZyBjYXN0LgoKCSogYXJjaGl2ZS5jOiBDb3NtZXRpYyBpbXByb3ZlbWVudHMuCgkqIG9wbmNscy5jOiBDb3NtZXRpYyBpbXByb3ZlbWVudHMuCgkobmV3X2JmZCk6IFJlbW92ZWQgcmVkdW5kYW50IHN0cnVjdHVyZSBzbG90IGluaXQuCgpTYXQgT2N0ICAyIDE4OjQ4OjE3IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnL25ld3MtbWlwcy5taCwgaG9zdHMvbmV3cy1taXBzLmg6IE5ldyBmaWxlcy4KCSogY29uZmlndXJlLmhvc3Q6IFVzZSBuZXdzLW1pcHMgZm9yIG1pcHMtc29ueS1ic2QqLgoKRnJpIE9jdCAgMSAxMzoxNDoxNyAxOTkzICBTdGFuIFNoZWJzICAoc2hlYnNAcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IGkzODZseW54X2NvZmZfdmVjIHJlcXVpcmVzIGNvZmYtaTM4Nmx5bnguby4KCSogY29mZi1pMzg2bHlueC5jOiBOZXcgZmlsZSwgZGVmaW5lcyBMeW54IHRhcmdldCB2ZWN0b3IgYW5kIG5hbWUsCglpbmNsdWRlcyBjb2ZmLWkzODYuYy4KCSogY29mZi1pMzg2LmMgKGkzODZjb2ZmX3ZlYyk6IEFsbG93IHJlZGVmaW5pdGlvbiBvZiB0YXJnZXQgdmVjdG9yCglzeW1ib2wgYW5kIG5hbWUsIGlmIFRBUkdFVF9TWU0gYW5kL29yIFRBUkdFVF9OQU1FIGFyZSBkZWZpbmVkLgoJKiBpMzg2bHlueC5jOiBSZW1vdmUgY29mZiB2ZWN0b3IgZGVmaW5pdGlvbiBlbnRpcmVseS4KCShseW54XzMyX3N3YXBfZXh0X3JlbG9jX2luKTogRGVmaW5lLgoJKGx5bnhfMzJfc3dhcF9zdGRfcmVsb2NfaW4pOiBEZWZpbmUsIGdldCByZWxvYyBiaXRzIGluIGkzODYKCUx5bngtc3BlY2lmaWMgd2F5LgoJKGx5bnhfMzJfc3dhcF9leHRfcmVsb2Nfb3V0KTogRGVmaW5lLgoJKGx5bnhfMzJfc3dhcF9zdGRfcmVsb2Nfb3V0KTogRGVmaW5lLgoJKGx5bnhfMzJfc2x1cnBfcmVsb2NfdGFibGUpOiBEZWZpbmUsIGNhbGwgTHlueCBzd2FwcGluZyBmbnMuCgkobHlueF8zMl9zcXVpcnRfb3V0X3JlbG9jcyk6IERlZmluZSwgY2FsbCBMeW54IHN3YXBwaW5nIGZucy4KCShseW54XzMyX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6IERlZmluZSwgY2FsbCBMeW54IHN3YXBwaW5nIGZucy4KCShXUklURV9IRUFERVJTKTogRGVmaW5lLCBjYWxsIEx5bnggc3dhcHBpbmcgZm5zLgoKCSogY29uZmlnL2kzODYtbHlueC5tdCAoU0VMRUNUX1ZFQ1MpOiBSZW1vdmUgcmVkdW5kYW50IHZlY3Rvci4KClRodSBTZXAgMzAgMTc6NTA6NTIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3JlbG9jX2NvZGVfdHlwZSk6IEFkZCBsaW5rYWdlLXRhYmxlIHJlbGF0aXZlCglyZWxvY2F0aW9ucyBvZiBzaXplIDgsIDE2LCAzMi4gIFNvcnQgZ2VuZXJpYyByZWxvY3MgYnkgdHlwZSByYXRoZXIKCXRoYW4gc2l6ZS4gIEFkZGVkIGEgbGl0dGxlIGRvY3VtZW50YXRpb24gdG9vLgoKCSogYW91dHguaCAoaG93dG9fdGFibGVfc3RkKTogQWRkIEJBU0UxNiBhbmQgQkFTRTMyIHJlbG9jcy4KCShUQUJMRV9TSVpFKTogTmV3IG1hY3JvLgoJKHJlbG9jX3R5cGVfbG9va3VwKTogSGFuZGxlIEJGRF9SRUxPQ197MTYsMzJ9X0JBU0VSRUwgZm9yIHN0ZAoJcmVsb2NzLgoJKHN3YXBfc3RkX3JlbG9jX291dCk6IFdyaXRlIGJhc2VyZWwgcmVsb2NzIGNvcnJlY3RseS4KCShzd2FwX3N0ZF9yZWxvY19pbik6IEhhbmRsZSByX2Jhc2VyZWwgZmllbGQuICBBc3NlcnQgdGhhdAoJcl9qbXB0YWJsZSBhbmQgcl9yZWxhdGl2ZSBmaWVsZHMgYXJlIGNsZWFyLCBhbmQgdGhhdCB0aGUgY29tcHV0ZWQKCWluZGV4IGRvZXMgcmVmZXIgdG8gYSBkZWZpbmVkIGVudHJ5IG9mIHRoZSBob3d0byB0YWJsZS4KClR1ZSBTZXAgMjggMTQ6NDc6NDYgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmMgKGJmZF9tYWtlX3NlY3Rpb25fYW55d2F5KTogTmV3IGZ1bmN0aW9uLgoJKiBzZWN0aW9uLmM6IENoYW5nZSBjb21tZW50cyB0byBzYXkgc2V2ZXJhbCBzZWN0aW9ucyBjYW4gaGF2ZQoJdGhlIHNhbWUgbmFtZS4KCSogYmZkLWluMi5oOiBSZS1nZW5lcmF0ZSB0byByZWZsZWN0IGFib3ZlIGNoYW5nZS4KCSogY29mZmdlbi5jIChtYWtlX2Ffc2VjdGlvbl9mcm9tX2ZpbGUpOiBDYWxsIGJmZF9tYWtlX3NlY3Rpb25fYW55d2F5CglpZiBzdGlsbCBubyBzZWN0aW9uIGFmdGVyIHRoZSBiZmRfY29mZl9tYWtlX3NlY3Rpb25faG9vay4KCSogY29mZmNvZGUuaDogQWRkIGNvbW1lbnQgYWJvdXQgVFdPX0RBVEFfU0VDUy4KClR1ZSBTZXAgMjggMDM6MjI6MjQgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogZWNvZmYuYyAoZWNvZmZfc2x1cnBfc3ltYm9saWNfaW5mbyk6ICBBbHdheXMgZGV0ZXJtaW5lIHJhd19zaXplCglleHBsaWNpdGx5LgoJKiBlY29mZi5jIChlY29mZl9zZWNfdG9fc3R5cF9mbGFncywgZWNvZmZfc3R5cF90b19zZWNfZmxhZ3MpOiAgSGFuZGxlCgkuZmluaSBzZWN0aW9uLgoKTW9uIFNlcCAyNyAxODoyOToxOCAxOTkzICBTdGFuIFNoZWJzICAoc2hlYnNAcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkIGNvbmZpZ3VyZS5ob3N0OiBNYXRjaCBvbiAqLWx5bnhvcyogZm9yIEx5bnhPUywKCWFkZCBtNjgqLSotbHlueG9zKi4KCSogY29uZmlndXJlLmluIDogUmVwbGFjZWQgaTM4Nmx5bnhfdmVjIHdpdGggaTM4Nmx5bnhfYW91dF92ZWMKCWFuZCBpMzg2bHlueF9jb2ZmX3ZlYy4KCUFkZGVkIG02OGtseW54X2FvdXRfdmVjIGFuZCBtNjhrbHlueF9jb2ZmX3ZlYy4KCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogUmVtb3ZlZCBpMzg2bHlueF92ZWMsIGFkZGVkCgl7aTM4NixtNjhrfWx5bnhfe2FvdXQsY29mZn1fdmVjLgoJKiBpMzg2bHlueC5jOiBBZGRlZCBjb3B5IG9mIGkzODZjb2ZmLmMsIHJlbmFtZWQgYmZkIHRhcmdldCB0bwoJaTM4Nmx5bnhfY29mZl92ZWMuCgkqIG02OGtseW54LmM6IE5ldyBmaWxlLgoJKiBjb25maWcvaTM4Ni1seW54Lm10OiBSZXBsYWNlZCBpMzg2bHlueF92ZWMgd2l0aCBpMzg2bHlueF9hb3V0X3ZlYwoJYW5kIGkzODZseW54X2NvZmZfdmVjLgoJKiBjb25maWcvbTY4ay1seW54Lm10OiBOZXcgZmlsZS4KCSogaG9zdHMvaTM4Nmx5bnguaDogQWRkZWQgZGVmaW5pdGlvbiBvZiBjZnJlZSBhcyBmcmVlIChmcm9tIEVpY2hpbikuCgkqIGhvc3RzL202OGtseW54Lmg6IE5ldyBmaWxlLgoKTW9uIFNlcCAyNyAxODowMDo0MSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYzogRGVmaW5lIG9mZnNldG9mIGhlcmUuCgkqIGhvc3RzLyouaDogRG9uJ3QgZGVmaW5lIGl0IGhlcmUuCgpNb24gU2VwIDI3IDE5OjA5OjI3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogU2V0IGZpbGVwb3MgZm9yIFNIVF9TVFJUQUIKCXNlY3Rpb24uCgpGcmkgU2VwIDI0IDE1OjQ3OjQwIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaHB1eC1jb3JlLmM6IEFkZCBjb21tZW50IGFib3V0IGhwdXggdmVyc2lvbiA3LgoKRnJpIFNlcCAyNCAxNjo1MDoyNiAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogbHlueC1jb3JlLmMgKGx5bnhfY29yZV9maWxlX3ApOiAgQ2hhbmdlIHBlci10aHJlYWQgcmVnaXN0ZXIKCXNlY3Rpb24gbmFtZXMgZnJvbSAucmVnWFhYIHRvIC5yZWcvWFhYIHRvIGF2b2lkIHBhcnNpbmcgYW1iaWd1aXR5CglpbiBnZGIvY29yZWxvdy5jLiAgQ3JlYXRlIGFsaWFzIC5yZWcgc2VjdGlvbiBmb3IgdGhlIGN1cnJlbnRseQoJcnVubmluZyB0aHJlYWQuCgpGcmkgU2VwIDI0IDEzOjIyOjMyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGxpYmVjb2ZmLmggKGVjb2ZmX2JhY2tlbmRfZGF0YSk6IFJlbW92ZWQgYmlnX21hZ2ljIGFuZAoJbGl0dGxlX21hZ2ljIGZpZWxkcy4KCSogY29mZi1hbHBoYS5jIChhbHBoYV9lY29mZl9iYWNrZW5kX2RhdGEpOiBSZW1vdmVkIGluaXRpYWxpemF0aW9uCglvZiBiaWdfbWFnaWMgYW5kIGxpdHRsZV9tYWdpYy4KCSogY29mZi1taXBzLmMgKG1pcHNfZWNvZmZfYmFkX2Zvcm1hdF9ob29rKTogTWFrZSBzdXJlIG1hZ2ljIG51bWJlcgoJbWF0Y2hlcyBlbmRpYW5lc3Mgb2YgYmZkLgoJKG1pcHNfZWNvZmZfYmFja2VuZF9kYXRhKTogUmVtb3ZlZCBpbml0aWFsaXphdGlvbiBvZiBiaWdfbWFnaWMgYW5kCglsaXR0bGVfbWFnaWMuCgkqIGVjb2ZmLmMgKGVjb2ZmX3NldF9hcmNoX21hY2hfaG9vayk6IFNldCBNSVBTIG1hY2hpbmUgbnVtYmVyCgliYXNlZCBvbiBtYWdpYyBudW1iZXIuICBTdXBwb3J0IHI0MDAwIG1hZ2ljIG51bWJlcnMuCgkoZWNvZmZfZ2V0X21hZ2ljKTogTmV3IGZ1bmN0aW9uLgoJKGVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFVzZSBlY29mZl9nZXRfbWFnaWMsIG5vdCBmaWVsZHMgaW4KCXRoZSBiYWNrZW5kIHN0cnVjdHVyZS4KCSogY3B1LW1pcHMuYyAoYXJjaF9pbmZvX3N0cnVjdCk6IEFkZGVkIGNhc2UgZm9yIHI2MDAwLgoKCUZvciBNSVBTIGNvbmZpZ3VyYXRpb25zIHB1dCBib3RoIGJpZyBhbmQgbGl0dGxlIGVuZGlhbiB2ZXJzaW9ucyBpbgoJdGhlIGxpc3Qgb2YgdGFyZ2V0czsgdGhlIGNvZGUgaXMgZ2V0dGluZyBjb21waWxlZCBpbiBhbnlob3cuCgkqIGJpZ21pcHMubXQgKFNFTEVDVF9WRUNTKTogRGVmaW5lIHRvIGJlIGVjb2ZmX2xpdHRsZV92ZWMuCgkqIGRlY3N0YXRpb24ubXQgKFNFTEVDVF9WRUNTKTogRGVmaW5lIHRvIGJlIGVjb2ZmX2JpZ192ZWMuCgkqIG1pcHNiZWxmLm10IChTRUxFQ1RfVkVDUyk6IERlZmluZSB0byBiZSBiZmRfZWxmMzJfbGl0dGxlbWlwc192ZWMuCgkqIG1pcHNsZWxmLm10IChTRUxFQ1RfVkVDUyk6IERlZmluZSB0byBiZSBiZmRfZWxmMzJfYml0bWlwc192ZWMuCgkqIHJpc2Nvcy5tdCAoU0VMRUNUX1ZFQ1MpOiBEZWZpbmUgdG8gYmUgZWNvZmZfbGl0dGxlX3ZlYy4KCkZyaSBTZXAgMjQgMDA6NDI6MjMgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogb3NmLWNvcmUuYzogIE5ldyBmaWxlIGZvciBPU0YvMSBjb3JlIGZpbGUgc3VwcG9ydC4KCSogY29uZmlnL2FscGhhb3NmLm1oIChIREVGSU5FUyk6ICBBZGQgLURPU0ZfQ09SRS4KCShIREVQRklMRVMpOiAgU2V0IHRvIG9zZi1jb3JlLm8uCgkqIGJmZC1pbjIuaCAodW5pb24gdGRhdGEpOiAgQWRkIG9zZl9jb3JlX2RhdGEgbWVtYmVyLgoJKiB0YXJnZXRzLmM6ICBJZiBPU0ZfQ09SRSBpcyBkZWZpbmVkLCBhZGQgb3NmX2NvcmVfdmVjIHRvIHRhcmdldCBsaXN0LgoJKiBNYWtlZmlsZS5pbiAoT1BUSU9OQUxfQkFDS0VORFMpOiAgQWRkIG9zZi1jb3JlLm8uCgkob3NmLWNvcmUubyk6ICBOZXcgZGVwZW5kZW5jeS4KClRodSBTZXAgMjMgMjE6MDQ6NTMgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBUT0RPOiBSZW1vdmUgbm90ZSBhYm91dCBtYWtpbmcgLS13aXRoLWJmZC10YXJnZXRzIHVzZSBjYW5vbmljYWwKCXRhcmdldCBjb25maWd1cmF0aW9uIG5hbWUgKGFscmVhZHkgZG9uZSk7IHJld29yZCBpdGVtIGFib3V0CglzZXBhcmF0aW5nIHJlYWRpbmcgYW5kIHdyaXRpbmcgc3R1ZmYgdG8gbm90IHJlZmVyIHRvIGEKCW5vbi1leGlzdGVudCBpdGVtLgoKCSogZWNvZmYuaCAoZWNvZmZfc2V0X2FyY2hfbWFjaF9ob29rKTogQWNjZXB0IE1JUFNfTUFHSUNfTElUVExFMgoJYW5kIE1JUFNfTUFHSUNfQklHMi4KClRodSBTZXAgMjMgMTE6MDY6MzQgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZ2VuLWFvdXQuYyAobWFpbik6IE91dHB1dCBuZXdsaW5lIGFmdGVyIGVuZCBvZiBjb21tZW50LCBub3QKCWJlZm9yZS4gIChSZXBvcnRlZCBieSBKb25hdGhhbiBTdG9uZSwKCWpvbmF0aGFuQG9zY2FyLnN0YW5mb3JkLmVkdSkuCgpUaHUgU2VwIDIzIDEwOjQ4OjI3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoY29tcHV0ZV9hbmRfd3JpdGVfYXJtYXApOiBQdXQgd2VhayBzeW1ib2xzIGluIHRoZQoJYXJtYXAuCgoJKiBlbGZjb2RlLmggKGZpeF91cF9zdHJ0YWJzKTogU2V0IHNoX2VudHNpemUgZm9yIHRoZSAuc3RhYgoJc2VjdGlvbiwgbm90IHRoZSAuc3RhYnN0ciBzZWN0aW9uLiAgU2V0IHRoZSB0eXBlIG9mIHRoZSAuc3RhYnN0cgoJc2VjdGlvbiB0byBTSFRfU1RSVEFCLgoJKGVsZl9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24pOiBIYW5kbGUgU0hUX1NUUlRBQiBzZWN0aW9ucy4KCgkqIHNlY3Rpb24uYyAoU0VDX0RFQlVHR0lORyk6IE5ldyBzZWN0aW9uIGZsYWcuCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogSWYgc2VjdGlvbiBpcyBTSFRfUFJPR0JJVFMsCglhbmQgdGhlIG5hbWUgc3RhcnRzIHdpdGggLmRlYnVnLCAubGluZSBvciAuc3RhYiwgc2V0CglTRUNfREVCVUdHSU5HLiAgSWYgU0hUX1NUUlRBQiwgY2hlY2sgZm9yIC5kZWJ1ZyBhbmQgLnN0YWIuCgkqIGVsZjMyLXRhcmdldC5oIChUQVJHRVRfQklHX1NZTSwgVEFSR0VUX0xJVFRMRV9TWU0pOiBBZGRlZAoJU0VDX0RFQlVHR0lORyB0byBzZWN0aW9uX2ZsYWdzLgoJKiBlbGY2NC10YXJnZXQuaCAoVEFSR0VUX0JJR19TWU0sIFRBUkdFVF9MSVRUTEVfU1lNKTogQWRkZWQKCVNFQ19ERUJVR0dJTkcgYW5kIFNFQ19DT0RFIHRvIHNlY3Rpb25fZmxhZ3MuCgkqIGJmZC1pbjIuaDogVXBkYXRlZC4KCldlZCBTZXAgMjIgMTY6MzQ6MTQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkLmMgKHRkYXRhKTogQWRkIGx5bnhfY29yZV9kYXRhLgoKCSogZWNvZmYuYyAoZWNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogU2V0IGZpbGVwb3MgZm9yCglzZWN0aW9ucyB3aXRoIFNFQ19MT0FEIHNldCwgZXZlbiBpZiBTRUNfSEFTX0NPTlRFTlRTIGlzIGNsZWFyLgoJKGVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IERvbid0IHNldCBzY25wdHIgdG8gemVybyBqdXN0CgliZWNhdXNlIHNpemUgb2Ygc2VjdGlvbiBpcyB6ZXJvLiAgTmVlZGVkIGZvciBJcml4IDQuMC41Ri4KCldlZCBTZXAgMjIgMDk6NDk6MzIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBVc2UgaTk2MC1ib3V0LCBub3QgaTk2MC1jb2ZmIGZvciBpOTYwLSotbmluZHkqLgoKV2VkIFNlcCAyMiAwNzozNDowOSAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKE9QVElPTkFMX0JBQ0tFTkRTKTogIEFkZCBseW54LWNvcmUuby4KCSogYmZkLWluMi5oICh0ZGF0YSk6ICBBZGQgbHlueF9jb3JlX2RhdGE7CgkqIGNvbmZpZy5iZmQgY29uZmlndXJlLmhvc3Q6ICBHZXQgcmlkIG9mIHN1cGVyZmx1b3VzIG5ldGJzZCBhbmQKCWx5bnhvcyBlbnRyaWVzLgoJKiBjb25maWd1cmUuaW46ICBBZGQgbHlueC1jb3JlLm8gdG8gTHlueCBjb25maWcuCgkqIGkzODZseW54LmM6ICBBZGQgZGVmcyBmb3IgY29yZSBmaWxlIHN1cHBvcnQuCgkqIGx5bngtY29yZS5jOiAgTmV3IGZpbGUgd2l0aCBMeW54IGNvcmUgZmlsZSBzdXBwb3J0LgoJKiBob3N0cy9pMzg2bHlueC5oOiAgTW92ZSBsb3RzIG9mIGhvc3Qgc3BlY2lmaWMgaW5jbHVkZXMgdG8gaGVyZS4KCUFkZCBkZWYgb2YgSE9TVF9MWU5YLiAgUmVtb3ZlIHVubmVjZXNzYXJ5IGRlZnMuCgpNb24gU2VwIDIwIDE5OjE4OjEwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogT25seSBzZXQgU0VDX0RBVEEgZm9yIGEKCVNIRl9QUk9HQklUUyBvciBTSFRfU1RSVEFCIHNlY3Rpb24gaWYgU0VDX0FMTE9DIGlzIHNldC4gIE5ldmVyIHNldAoJU0VDX0RBVEEgZm9yIGEgU0hGX05PQklUUyBzZWN0aW9uLgoKCSogbmxtMzItaTM4Ni5jIChubG1faTM4Nl9tYW5nbGVfcmVsb2NzKTogQ2hlY2sgU0VDX0xPQUQgcmF0aGVyCgl0aGFuIFNFQ19DT0RFIHwgU0VDX0RBVEEuICBBZGQgc29tZSBjYXN0cyB0byBhdm9pZCB3YXJuaW5ncy4KCSogbmxtY29kZS5oOiBBZGQgc29tZSBjYXN0cyB0byBhdm9pZCB3YXJuaW5ncy4KCShubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogSWdub3JlIHJlbG9jcyBmb3Igc2VjdGlvbnMgdGhhdCBhcmUKCW5laXRoZXIgY29kZSBub3IgZGF0YS4gIEp1c3QgdXNlIHRoZSBzeW1ib2wgdmFsdWUgZm9yIGRlYnVnZ2luZwoJc3ltYm9sczsgZG9uJ3Qgb2Zmc2V0IGJ5IHRoZSBzZWN0aW9uIHZtYS4KCkZyaSBTZXAgMTcgMTg6MDg6NTUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IERvbid0IHJldHVybiBhbiBlcnJvciB3aGVuCglwZXJmb3JtaW5nIGEgcmVsb2MgYWdhaW5zdCBhbiB1bmRlZmluZWQgd2VhayBzeW1ib2wuCgkqIHN5bXMuYyAoYmZkX3ByaW50X3N5bWJvbF92YW5kZik6IFNob3cgdmFsdWUgb2YgQlNGX1dFQUsgcmF0aGVyCgl0aGFuIG9ic29sZXRlIEJTRl9FWFBPUlQuCgpGcmkgU2VwIDE3IDAyOjA0OjMxIDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogaG9zdHMve2FscGhhb3NmLmgsIGFtaXguaCwgYXBvbGxvNjguaCwgYXBvbGxvdjY4LmgsCglkZWNzdGF0aW9uLmgsIGRlbHRhODguaCwgZGd1eC5oLCBkb3NlLmgsIGdvMzIuaCwgaGFycmlzLmgsCglocDMwMC5oLCBocDMwMGJzZC5oLCBocHBhYnNkLmgsIGhwcGFocHV4LmgsIGkzODZhaXguaCwgaTM4NmJzZC5oLAoJaTM4NmxpbnV4LmgsIGkzODZseW54LmgsIGkzODZ2LmgsIGkzODZ2NC5oLCBpcml4My5oLCBpcml4NC5oLAoJbWlwc2JzZC5oLCBuY3IzMDAwLmgsIHJzNjAwMC5oLCBydGJzZC5oLCBzb2xhcmlzMi5oLCBzcGFyYy1sbC5oLAoJc3RkLWhvc3QuaCwgc3RyYXR1cy5oLCBzdW4zLmgsIHN5c3Y0LmgsIHRhaG9lLmgsIHVsdHJhMy5oLAoJdmF4dWx0LmgsIHZheHVsdDIuaCwgd2UzMmsuaH06ICBNYWtlIHN1cmUgdGhhdCAib2Zmc2V0b2YiIGlzCglkZWZpbmVkIG9uIGFsbCBob3N0cywgbm93IHRoYXQgYXJjaGl2ZS5jIHVzZXMgaXQuCgpUaHUgU2VwIDE2IDE4OjIwOjMwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoZWxmX21hcF9zeW1ib2xzKTogQ3JlYXRlIHNlY3Rpb24gc3ltYm9scyBmb3IgYWxsCglzZWN0aW9ucywgbm90IGp1c3QgYWxsb2NhdGVkIHNlY3Rpb25zOyBkZWJ1Z2dpbmcgc2VjdGlvbnMgY2FuIGhhdmUKCXJlbG9jcy4KCShlbGZfc3ltYm9sX2Zyb21fYmZkX3N5bWJvbCk6IElmIHRoZXJlIGlzIGFuIG91dHB1dCBzZWN0aW9uLCB1c2UKCXRoZSBzZWN0aW9uIGluZGV4IGZyb20gdGhhdCByYXRoZXIgdGhhbiB0aGUgaW5wdXQgc2VjdGlvbi4KClRodSBTZXAgMTYgMTI6MjA6NTAgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBsaWJiZmQtaW4uaCAoYmZkX2ZsdXNoLCBiZmRfc3RhdCk6IFJlZmxlY3QgSm9obidzIGNoYW5nZXMgdG8KCWxpYmJmZC5oLCB3aGljaCBpcyByZWdlbmVyYXRlZCBmcm9tIHRoaXMgZmlsZS4KCgkqIGJmZC1pbi5oIChzeW10eXBlKTogRGVsZXRlZCB0eXBlZGVmLgoKV2VkIFNlcCAxNSAxMTo0ODozNyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBsaWJiZmQuYyAoQ09FUkNFeHgpOiBDYXN0IHggdG8gYmZkX3NpZ25lZF92bWEgYmVmb3JlIGRvaW5nIHRoZQoJeG9yIGFuZCBzdWJ0cmFjdC4gIE90aGVyd2lzZSBpdCB3aWxsIG5vdCBzaWduIGV4dGVuZCBpZiB0aGUgdHlwZQoJb2YgYmZkX3ZtYSBpcyBsYXJnZXIgdGhhbiBpbnQuCgoJKiBlY29mZnN3YXAuaCAoZWNvZmZfc3dhcF9wZHJfaW4pOiBHZXQgcmVnb2Zmc2V0LCBpb3B0LCBmcmVnb2Zmc2V0CglhbmQgZnJhbWVvZmZzZXQgYXMgc2lnbmVkIG51bWJlcnMuICBGcm9tIFBldGVyIFNjaGF1ZXIuCgpUdWUgU2VwIDE0IDE4OjIwOjM2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZjMyLWkzODYuYyAoZWxmX2hvd3RvX3RhYmxlKTogQWRkIGJmZF9lbGZfZ2VuZXJpY19yZWxvYwoJc3BlY2lhbCBmdW5jdGlvbiBmb3IgYWxsIHJlbG9jIGVudHJpZXMuCgkqIGVsZjMyLXRhcmdldC5oIChUQVJHRVRfTElUVExFX1NZTSk6IEFkZCBTRUNfQ09ERSB0bwoJc2VjdGlvbl9mbGFncy4KCSogbGliZWxmLmggKGVsZl9zeW1ib2xfdHlwZSk6IFJlbW92ZSBkZXNjLCB0eXBlIGFuZCBvdGhlciBmaWVsZHMuCgkqIE1ha2VmaWxlLmluIChlbGYzMi0qLm8pOiBUaGVzZSBkZXBlbmQgdXBvbiBlbGYzMi10YXJnZXQuaC4KClR1ZSBTZXAgMTQgMTQ6MzQ6NDUgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC1pbi5oIChzdHJ1Y3QgYXJ0ZGF0YSk6ICBBZGQgYXJtYXBfdGltZXN0YW1wIGFuZAoJYXJtYXBfZGF0ZXBvcyBoZXJlIHRvby4KCk1vbiBTZXAgMTMgMjE6MDM6MTggMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGNhY29waG9ueS5jeWdudXMuY29tKQoKCUltcHJvdmUgdGltZXN0YW1wIHN1cHBvcnQgaW4gQlNEIGFyY2hpdmUgZmlsZXMgdG8gYXZvaWQgbGlua2VyCgl3YXJuaW5ncy4KCgkqIGxpYmJmZC5oIChzdHJ1Y3QgYXJ0ZGF0YSk6ICBBZGQgYXJtYXBfdGltZXN0YW1wIGFuZCBhcm1hcF9kYXRlcG9zLgoJKGJmZF9mbHVzaCwgYmZkX3N0YXQpOiAgQWRkIHByb3RvdHlwZXMuCgkqIGxpYmJmZC5jIChiZmRfZmx1c2gpOiAgQWRkLCBkb2VzIGZmbHVzaCBvbiBhIEJGRC4KCShiZmRfc3RhdCk6ICBBZGQsIGRvZXMgZnN0YXQgb24gYSBCRkQuCgoJKiBhcmNoaXZlLmMgKF9iZmRfd3JpdGVfYXJjaGl2ZV9jb250ZW50cyk6IEF0IGVuZCBvZiBmaWxlIHdyaXRpbmcsCgl2ZXJpZnkgYW5kIHBvc3NpYmx5IHVwZGF0ZSB0aGUgdGltZXN0YW1wIGluIHRoZSBhcm1hcCwgaWYgYSBCU0QKCWFyY2hpdmUuICBGSVhNRSEgIEtsdWRnZSByZWNvZ25pemVzIEJTRCBhcmNoaXZlLCByYXRoZXIgdGhhbgoJdmVjdG9yaW5nIHByb3Blcmx5LiAgU2hvdWxkIGFkZCB0byB4dmVjLgoJKGNvbXB1dGVfYW5kX3dyaXRlX2FybWFwKTogIE1vdmUgcHJvdG90eXBlIHRvIHRvcCwgYXZvaWQgUFJPVE8uCgkoYnNkX3dyaXRlX2FybWFwKTogU2F2ZSB0aW1lc3RhbXAgYW5kIGZpbGUgbG9jYXRpb24gdGhlcmVvZiwgd2hlbgoJd3JpdGluZyB0aGUgYXJtYXAgaW4gYSBCU0QgZmlsZS4KCShic2RfdXBkYXRlX2FybWFwX3RpbWVzdGFtcCk6ICBOZXcgZnVuY3Rpb24gdG8gY2hlY2sgYW5kCglyZXdyaXRlIHRoZSB0aW1lc3RhbXAuCgoJKiBob3N0cy9zdGQtaG9zdC5oIChvZmZzZXRvZik6ICBEZWZpbmUsIGlmIG5vdCBhbHJlYWR5LCBmb3IgYXJjaGl2ZS5jLgoKU2F0IFNlcCAxMSAxODoxMzo0MiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2kzODZzY28uaDogRGVmaW5lIGEgYnVuY2ggb2Ygc3R1ZmYgZm9yIGNvcmUgZmlsZXMuCgkqIHNjby1jb3JlLmM6IFJlbW92ZSwgcmVwbGFjZSBieSB0cmFkLWNvcmUuYy4KCSogdHJhZC1jb3JlLmM6IElmIEhPU1RfU1RBQ0tfU1RBUlRfQUREUiBpcyBkZWZpbmVkLCB1c2UgaXQuCgkqIGNvbmZpZy9pMzg2c2NvLm1oOiBVc2UgdHJhZC1jb3JlIG5vdCBzY28tY29yZS4KCSogaG9zdHMvaTM4NmlzYy5oLCBjb25maWcvaTM4NmlzYy5taDogUmVtb3ZlLgoJKiBjb25maWd1cmUuaG9zdDogVXNlIGkzODZzY28gZm9yIGlzYy4KCSogY29uZmlnL2kzODYtc2NvLm10OiBSZW1vdmUsIGlkZW50aWNhbCB0byBpMzg2LWNvZmYubXQuCgkqIGNvbmZpZy5iZmQ6IFVzZSBpMzg2LWNvZmYgbm90IGkzODYtc2NvLgoKCSogY29uZmlnLmJmZDogUmVjb2duaXplIGlbMzRdODYtKi1zb2xhcmlzMiogc3BlY2lmaWNhbGx5IHJhdGhlcgoJdGhhbiB1c2luZyAqLSotc29sYXJpczIqIChpNDg2LXVua25vd24tc29sYXJpczIgaXMgaTM4Ni1lbGYsIG5vdAoJaTQ4Ni1lbGYgd2hpY2ggZG9lc24ndCBleGlzdCkuCgpGcmkgU2VwIDEwIDEyOjU2OjM2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZzd2FwLmggKGNvZmZfc3dhcF9hb3V0aGRyX291dCk6IEZvciBBTFBIQUVDT0ZGLCBmb3JjZQoJcGFkZGluZyBmaWVsZCB0byB6ZXJvLgoKCSogY29uZmlnLmJmZCAoaVszNF04Ni0qLW5ldGJzZCopOiBOZXcgdGFyZ2V0OyB1c2UgaTM4Ni1uZXRic2QuCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGJvZ3VzIG5ldGJzZDM4NiBoYW5kbGluZy4KCgkqIGNvZmYtbWlwcy5jOiBEb24ndCB3YXJuIGFib3V0IG92ZXJmbG93IGZvciBNSVBTX1JfSk1QQUREUiByZWxvYy4KCUNvcnJlY3Qgb3ZlcmZsb3cgZGV0ZWN0aW9uIHJlcXVpcmVzIG1hdGNoaW5nIHRoZSB1cHBlciBmb3VyIGJpdHMKCW9mIHRoZSBkZXN0aW5hdGlvbiBhZ2FpbnN0IHRoZSBQQy4KClRodSBTZXAgIDkgMTY6NTc6NDYgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBNYWtlIDY0LWJpdCBzdHVmZiB3b3JrIHdpdGggIi0td2l0aC10YXJnZXRzPWFsbCIuCgpUdWUgU2VwICA3IDE0OjE3OjAyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC1pbi5oOiBSZW1vdmVkIHN3YXBwaW5nIHJvdXRpbmVzIGRlY2xhcmF0aW9ucy4KCSogYmZkLWluLmg6IEFkZGVkIHN3YXBwaW5nIHJvdXRpbmUgZGVjbGFyYXRpb25zLCBhbmQgcmVuYW1lZCB0aGVtCglmcm9tIF9kb18qIHRvIGJmZF8qLgoJKiBsaWJiZmQuYzogUmVuYW1lZCBzd2FwcGluZyByb3V0aW5lcyBmcm9tIF9kb18qIHRvIF9iZmRfKi4KCSogQ2hhbmdlZCBhbGwgY2FsbGVycy4KCSogbGliYmZkLmgsIGJmZC1pbjIuaDogUmVidWlsdC4KCk1vbiBTZXAgIDYgMTU6Mjg6MDcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWxmMzItaTM4Ni5jIChlbGZfaG93dG9fdGFibGUpOiBTZXQgcGNyZWxfb2Zmc2V0IHRvIHRydWUgZm9yCglSXzM4Nl9QQzMyLgoKRnJpIFNlcCAgMyAxMzowNjoxMiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJlb3JnYW5pemVkIHNldHRpbmcgb2YgbWFrZWZpbGUgdmFyaWFibGVzIHNvCgk2NC1iaXQgc3R1ZmYgd29ya3MgYWdhaW4uCgoJKiBsaWJiZmQtaW4uaCAoX2RvX2dldCosIF9kb19wdXQqKTogUmVuYW1lZCB2aWEgbWFjcm9zIHRvIGNsZWFuIHVwCgluYW1lc3BhY2UuCgoJKiBsaWJlbGYuaCAoZWxmMzJfc3ltYm9sX3R5cGUsIGVsZjY0X3N5bWJvbF90eXBlKTogRGVsZXRlZAoJIm5hdGl2ZV9lbGZfc3ltIiBmaWVsZCwgbWVyZ2VkIHRvIG1ha2UgbmV3IHR5cGUgImVsZl9zeW1ib2xfdHlwZSIuCgkoc3RydWN0IGVsZl9vYmpfdGRhdGEpOiBGaWVsZCBzeW1ib2xzIGlzIG5vdyBlbGZfc3ltYm9sX3R5cGUqLgoJRGVsZXRlZCBmaWVsZCByYXdfc3ltcy4KCShvYmpfc3ltYm9scyk6IFJlbW92ZSBjYXN0LgoJKG9ial9yYXdfc3ltcyk6IERlbGV0ZWQuCgkqIGVsZmNvZGUuaCAoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6IERvbid0IHNldCByYXdfc3ltcyBvcgoJbmF0aXZlX2VsZl9zeW0gZmllbGRzLgoJKiBlbGYzMi1ocHBhLmM6IENoYW5nZWQgdXNlcyBvZiBlbGYzMl9zeW1ib2xfdHlwZSB0bwoJZWxmX3N5bWJvbF90eXBlLgoKCUZyb20gUGV0ZSBIb29nZW5ib29tIGFuZCBKZWZmIExhdzoKCgkqIGVsZjMyLWhwcGEuYyAoRUxGX01BWFBBR0VTSVpFKTogRGVmaW5lLgoKCSogZWxmMzItaHBwYS5jIChlbGZfaHBwYV90Y19zeW1ib2wpOiBJZiB0aGUgYXJndW1lbnQgcmVsb2NhdGlvbgoJYml0cyBhcmUgemVybyAoZS5nLiwgdGhleSBzcGVjaWZ5IG5vIHJlbG9jYXRpb25zKSwgdGhlbiBkbyBub3QKCWV2ZW4gYm90aGVyIGFkZGluZyB0aGVpciBlbnRyaWVzIHRvIHRoZSBzeW1leHRuIHNlY3Rpb24uCgoJKiBlbGYzMi1ocHBhLmMgKGVsZl9ocHBhX3RjX3N5bWJvbCk6IEFueSBmdW5jdGlvbiwgcmVnYXJkbGVzcwoJb2Ygc2NvcGUgY2FuIGhhdmUgYW4gYXJndW1lbnQgcmVsb2NhdGlvbiBzdHViLgoKCSogZWxmMzItaHBwYS5jOiAoRWxmMzJfaHBwYV9TdHViX2Rlc2NyaXB0aW9uKTogIFJlbmFtZSB0aGlzCglzdHJ1Y3R1cmUgYW5kIHR5cGUgdG8gZWxmMzJfaHBwYV9zdHViX2Rlc2NyaXB0aW9uLiAgVGhpcyBtYWtlcwoJaXQgY29uc2lzdGVudCB3aXRoIHRoZSBHTlUgY29kaW5nIGNvbnZlbnRpb25zLgoJKGVsZjMyX2hwcGFfc3R1Yl9kZXNjcmlwdGlvbik6IEFkZGVkIGEgJ25leHQnIGZpZWxkIHRvIGFsbG93CglsaW5raW5nIG9mIHN0dWIgZGVzY3JpcHRpb24gc3RydWN0dXJlcy4KCShlbGYzMl9ocHBhX3N0dWJfZGVzY3JpcHRpb24pOiBBZGRlZCBhICdzdHViX2xpc3RQJyBmaWVsZCB0bwoJa2VlcCB0cmFjayBvZiBpbmRpdmlkdWFsIHN0dWJzLgoJKEVsZjMyX2hwcGFfU3R1Yl9saXN0LCBFbGYzMl9ocHBhX1N0dWJfbGlzdF9zdHJ1Y3QpOiAgUmVtb3ZlZC4KCUNvbWJpbmVkIHdpdGggdGhlIGVsZjMyX2hwcGFfc3R1Yl9kZXNjcmlwdGlvbiBzdHJ1Y3R1cmUuCgkoZWxmMzJfaHBwYV9zdHViX25hbWVfbGlzdCk6ICBOZXcgdHlwZSB0byBrZWVwIHRyYWNrIG9mCglpbmRpdmlkdWFsIHN0dWJzLgoJKGFkZF9zdHViKTogIFJlbW92ZWQuCgkoYWRkX3N0dWJfYnlfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShmaW5kX3N0dWJfYnlfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShocHBhX2VsZl9idWlsZF9hcmdfcmVsb2Nfc3R1Yik6IEFsbG93IHJldXNpbmcgc3R1YnMgdGhhdAoJYWxyZWFkeSBleGlzdC4KCShocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViKTogQWxsb3cgcmV1c2luZyBzdHVicyB0aGF0CglhbHJlYWR5IGV4aXN0LgoKCSogZWxmMzItaHBwYS5jOiAocmV0dmFsX21pc21hdGNoZXMpOiAgVGhlIGRpcmVjdGlvbiBvZiBhcmd1bWVudAoJcmVsb2NhdGlvbiB3YXMgcmV2ZXJzZWQuCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBSZXR1cm4gYWRkcmVzcyB3YXMgbm90IGJlaW5nCglyZXN0b3JlZC4KCShocHBhX2VsZl9hcmdfcmVsb2NfbmVlZGVkX3ApOiBBZGQgYXJndW1lbnQgY29udGFpbmluZyBjYWxsZXIKCWFyZ3VtZW50IHJlbG9jYXRpb24gYml0cyBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluIHRoZSBjaGVjawoJZm9yIHBsYWJlbCBzdHVicy4KCShocHBhX2VsZl9zdHViX2NoZWNrKTogUGFzcyBjYWxsZXIgYXJndW1lbnQgcmVsb2NhdGlvbiBiaXRzIGludG8KCWhwcGFfZWxmX2FyZ19yZWxvY19uZWVkZWRfcCgpLgoJKGhwcGFfbG9va19mb3Jfc3R1YnNfaW5fc2VjdGlvbik6IEFkZCBjaGVjayBmb3IgcGxhYmVsIHN0dWJzIGFuZAoJcGFzcyBjYWxsZXIgYXJndW1lbnQgcmVsb2NhdGlvbiBiaXRzIGludG8KCWhwcGFfZWxmX2FyZ19yZWxvY19uZWVkZWRfcCgpLgoKVGh1IFNlcCAgMiAwMDo1OTo1NSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGxpYmhwcGEuaCAoaHBwYV9maWVsZF9hZGp1c3QpOiBSZW1vdmUgdW51c2VkIGBpbml0X3ZhbHVlJyB2YXJpYWJsZS4KCgkqIGhvc3RzL2RlbHRhODh2NC5oOiBOZXcgZm9yIFNWUjQuCgkqIGNvbmZpZ3VyZS5ob3N0czogVXNlIGl0LgoKV2VkIFNlcCAgMSAxNDoyMzozMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGxpYmFvdXQuaCwgbmV0YnNkMzg2LmM6IENoYW5nZSBNX0kzODYgdG8gTV8zODZfTkVUQlNELiAgTV9JMzg2CglpcyBhbiBTQ08gcHJlLWRlZmluZS4KClR1ZSBBdWcgMzEgMTI6NTA6MTkgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogbmxtY29kZS5oIChubG1fb2JqZWN0X3ApOiBTZXQgSEFTX1NZTVMgaWYgdGhlcmUgYXJlIGV4dGVybmFsCglyZWZlcmVuY2VzLgoJKG5sbV9zd2FwX2F1eGlsaWFyeV9oZWFkZXJzX3tpbixvdXR9KTogVGhlIGNvcHlyaWdodCBsZW5ndGggaXMKCW9ubHkgb25lIGJ5dGUuCgkobmxtX2dldF9zeW10YWJfdXBwZXJfYm91bmQpOiBJbmNsdWRlIGRlYnVnZ2luZyBzeW1ib2xzIGluIHN5bWJvbAoJY291bnQuCgkobmxtX3NsdXJwX3N5bWJvbF90YWJsZSk6IE1ha2Ugc3ltbGVuZ3RoIHVuc2lnbmVkLiAgUmVhZCBkZWJ1Z2dpbmcKCXN5bWJvbHMgYXMgQkZEIGxvY2FsIHN5bWJvbHMuCgkobmxtX3dyaXRlX29iamVjdF9jb250ZW50cyk6IERvbid0IGJvdGhlciB3cml0aW5nIG91dCBleHBvcnRlZAoJc3ltYm9scyBtb3JlIHRoYW4gb25jZTsgdGhleSBub3cgYXBwZWFyIGluIHRoZSBzeW1ib2wgdGFibGUgbW9yZQoJdGhhbiBvbmNlICh3aXRoIGFuZCB3aXRob3V0IGEgcHJlZml4KSBpZiBuZWNlc3NhcnkuICBTZXQgb2Zmc2V0Cgl2YWx1ZXMgdG8gYmUgbm9uLXplcm8gYXMgTkxNTElOSyBkb2VzLgoKVHVlIEF1ZyAzMSAxMjowNzo0MyAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGxpYmhwcGEuaDogUmVzdG9yZSAjdW5kZWZzIG9mIGVfZnNlbCBhbmQgb3RoZXIgZV8qIHN5bWJvbHMuCgpGcmkgQXVnIDI3IDE2OjQzOjM1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIHNlY3Rpb24uYyAoc3RydWN0IHNlYyk6IE1vdmUgcG9zaXRpb24gb2YgdXNlcl9zZXRfdm1hLCBhbmQKCWRvY3VtZW50IGl0LgoJKFNFQ19CQUxJR04pOiBEaXNhYmxlIGZvciBub3cuICBJIGRvbid0IHRoaW5rIGl0J3MgY3VycmVudGx5IHVzZWQuCgoJKiBlbGYzMi1ocHBhLmMgKGVsZl9ocHBhX2hvd3RvX3RhYmxlKTogTm93IHN0YXRpYy4KCShzeW1leHRfcm9vdFAsIHN5bWV4dF9sYXN0UCwgZ2xvYmFsX3ZhbHVlLCBHT1RfdmFsdWUsCglnbG9iYWxfc3ltYm9sLCBnbG9iYWxfc3ltX2RlZmluZWQsIHN5bWV4dG5fY29udGVudHMsCglzeW1leHRuX2NvbnRlbnRzX3JlYWxfc2l6ZSwgZWxmX2hwcGFfc3R1Yl9yb290UCwKCWVsZjMyX2hwcGFfc3ltZXh0bl9tYXAsIGVsZjMyX2hwcGFfc3ltZXh0bl9tYXBfc2l6ZSk6IFJlbHkgb24KCWRlZmF1bHQgaW5pdGlhbGl6YXRpb24uCgkoaHBwYV9lbGZfZ2VuX3JlbG9jX3R5cGUpOiBNYWNybyAiVU5ERUZJTkVEIiBkb2Vzbid0IG5lZWQgYQoJdHJhaWxpbmcgc2VtaWNvbG9uLgoJKGhwcGFfbG9va19mb3Jfc3R1YnNfaW5fc2VjdGlvbik6IEludHJvZHVjZSB0ZW1wb3JhcmllcyB0byBtYWtlCgljb2RlIG1vcmUgcmVhZGFibGUgaW4gODAgY29sdW1ucy4KCgkqIGxpYmhwcGEuaCAoYWxsIGZ1bmN0aW9ucyk6IE5vdyBpbmxpbmUgdW5kZXIgR05VIEMuCgoJTW9yZSBwYXRjaGVzIGZyb20gSmVmZiBMYXc6CgoJKiBlbGYzMi1ocHBhLmMgKEFSX1dBUk4pOiBHaXZlIGFyZ3VtZW50IHdoaWNoIGNhdXNlZCB0aGUKCWludmFsaWQgYXJndW1lbnQgcmVsb2NhdGlvbi4KCShBUl9VTklNUCk6IERlbGV0ZSB1bnVzZWQgbWFjcm8uCgkoaHBwYV9lbGZfc2V0X3NlY3Rpb25fY29udGVudHMpOiBBbHdheXMgcmV0dXJuIGEgdmFsdWUuCgkoZWxmMzJfaHBwYV9iYWNrZW5kX3RhYmxlX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShlbGYzMl9ocHBhX2JhY2tlbmRfc2VjdGlvbl9wcm9jZXNzaW5nOiBMaWtld2lzZS4KCgkqIHNvbS5jOiBOZXcgZmlsZSBjb250YWluaW5nIFNPTSBzcGVjaWZpYyBjb2RlIGV4dHJhY3RlZAoJZnJvbSBocHBhLmMKCgkqIHNvbS5oOiBOZXcgZmlsZSBjb250YWluaW5nIFNPTSBzcGVjaWZpYyBjb2RlIGV4dHJhY3RlZAoJZnJvbSBsaWJocHBhLmgKCgkqIGhwcGEuYzogRGVsZXRlZC4KCgkqIGxpYmhwcGEuaDogRGVsZXRlIFNPTSBzcGVjaWZpYyBjb2RlLiAgQWRkIGdlbmVyaWMgUEEKCWNvZGUgd2hpY2ggY2FuIGJlIHNoYXJlZCBieSBib3RoIFNPTSBhbmQgRUxGIGJhY2tlbmRzLgoKCSogTWFrZWZpbGUuaW46IFJlcGxhY2UgaHBwYS5jIHdpdGggc29tLmMuICBlbGYzMi1ocHBhLm8KCWRlcGVuZHMgb24gbGliaHBwYS5oIG5vdy4KCgkqIGNvbmZpZ3VyZS5pbiAoaHBwYV92ZWMpOiBOZWVkcyBzb20ubyBtb2R1bGUgaW5zdGVhZCBvZgoJaHBwYS5vLgoKCSogZWxmMzItaHBwYS5jOiBJbmNsdWRlIGxpYmhwcGEuaC4gIERvIG5vdCBkZWZpbmUKCUJZVEVTX0lOX1dPUkQuCgoJKiBlbGYzMi1ocHBhLmggKGhwcGFfcmVsb2NfZmllbGRfc2VsZWN0b3JfdHlwZSk6IERlbGV0ZQoJbm93IGxpdmVzIGluIGxpYmhwcGEuaC4KCShocHBhX3JlbG9jX2ZpZWxkX3NlbGVjdG9yX3R5cGVfYWx0KTogTGlrZXdpc2UuCgoJKiBob3N0cy9ocHBhYnNkLmg6IEluY2x1ZGUgPHN0ZGxpYi5oPiBhbmQgPHVuaXN0ZC5oPi4gIERvIG5vdAoJZGVmaW5lIG1hbGxvYyBvciBmcmVlLgoKCSogY29uZmlnL2hwcGEtZWxmLm10IChTRUxFQ1RfQVJDSElURUNUVVJFUyk6IERvbid0IGRlZmluZQoJU0VMRUNUX1ZFQ1MuCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX3JlbG9jYXRlX3Vud2luZF90YWJsZSk6IERlbGV0ZSB1bnVzZWQKCXZhcmlhYmxlcy4KCShlbGZfaHBwYV9yZWxvY190eXBlX2xvb2t1cCk6IExpa2V3aXNlLgoJKGVsZl9ocHBhX3RjX21ha2Vfc2VjdGlvbnMpOiBMaWtld2lzZS4KCShocHBhX2VsZl9hcmdfcmVsb2NfbmVlZGVkX3ApOiBMaWtld2lzZS4KCShocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViKTogTGlrZXdpc2UuCgkoZWxmX3JlbG9jX21hcCk6IERlbGV0ZSwgbm8gbG9uZ2VyIHVzZWQuCgkoZWxmX2hwcGFfcmVsb2NfbWFwKTogTGlrZXdpc2UuCgkoZWxmMzJfaHBwYV9zeW1leHRuX21hcF9tYXhfc2l6ZSk6IExpa2V3aXNlLgoJKGVsZjMyX2hwcGFfZ2V0X3N5bV9leHRuKTogQWJvcnQgaWYgdHlwZSBpcyBib2d1cy4KCgkqIGVsZjMyLWhwcGEuYyAoZWxmMzJfaHBwYV9iYWNrZW5kX2Zha2Vfc2VjdGlvbnMpOiBBZGQgcHJvY2Vzc2luZwoJb2YgdGhlIC5ocHBhX3Vud2luZCBzZWN0aW9uLgoKV2VkIEF1ZyAyNSAxNjoxMzo0OSAxOTkzICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAc2VuZGFpLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiByZWNvZ25pemUgbTg4MTEwLgoKVHVlIEF1ZyAyNCAxNjozMjozNSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJTWVyZ2VkIGNoYW5nZXMgZnJvbSBKZWZmIExhdyBhbmQgUGV0ZSBIb29nZW5ib29tIGF0IFV0YWg6CgoJKiBlbGZjb2RlLmggKGVsZl9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24pOiBBZGQgZGV0ZWN0aW9uIG9mCglTSFRfTk9URSBzZWN0aW9ucy4KCgkqIGVsZjMyLWhwcGEuYzoKCShocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViLGhwcGFfZWxmX2xvbmdfYnJhbmNoX25lZWRlZF9wKToKCU5ldyBmdW5jdGlvbnMgZm9yIHN1cHBvcnQgb2YgbG9uZyBicmFuY2ggc3R1YnMuCgkoaHBwYV9lbGZfc3R1Yl9jaGVjayxocHBhX2xvb2tfZm9yX3N0dWJzX2luX3NlY3Rpb24pOiAgQWRkCgljaGVjayBmb3IgbG9uZyBicmFuY2ggc3R1YnMuCgkoaHBwYV9sb29rX2Zvcl9zdHVicyk6ICBVbnVzZWQgZnVuY3Rpb24uICBSZW1vdmVkLgoJKGhwcGFfZWxmX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogSW1wbGVtZW50IGEgUEEvRUxGLXNwZWNpZmljCgl2ZXJzaW9uIG9mIGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cy4KCShocHBhX2VsZl9sb25nX2JyYW5jaF9uZWVkZWRfcCk6IE9ubHkgb3V0cHV0IGRlYnVnZ2luZyBkaWFnbm9zdGljcwoJd2hlbiBCRkQgaXMgY29uZmlndXJlZCBmb3IgZGVidWdnaW5nLgoKCSogZWxmMzItaHBwYS5jOiAoZWxmMzJfaHBwYV9nZXRfc3ltZXh0bl9jaGFpbik6ICBOZXcgZnVuY3Rpb24KCXRvIHJldHVybiBhIGxpc3Qgb2Ygc3ltYm9scyB0aGF0IGhhdmUgbm9uLXplcm8gYXJndW1lbnQKCXJlbG9jYXRpb24gYml0cy4KCShocHBhX2VsZl9zdHViX2ZpbmlzaCk6IE1ha2Ugc3VyZSBzdHViIGdlbmVyYXRpb24gaXMgZG9uZSBvbmx5CglvbmNlLgoKCSogZWxmMzItaHBwYS5jOiAoaHBwYV9lbGZfc3R1Yl9yZWxvYyk6ICBOZXcgZnVuY3Rpb24gZm9yCglnZW5lcmF0aW9uIHJlbG9jYXRpb24gZW50cmllcyB3aXRoaW4gYSBzdHViLgoJKGhwcGFfZWxmX2J1aWxkX2FyZ19yZWxvY19zdHViKTogQ29ycmVjdGlvbnMgdG8gYXJndW1lbnQKCXJlbG9jYXRpb24gc3R1YnMuCgoJKiBlbGYzMi1ocHBhLmM6IE5ldyAjZGVmaW5lJ3MgZm9yIGFyZ3VtZW50IHJlbG9jYXRpb24gdHlwZXMuCgkobWlzbWF0Y2hlcywgcmV0dmFsX21pc21hdGNoZXMpOiBVcGRhdGVkIHRvIHJlZmxlY3QgbmV3Cglhcmd1bWVudCByZWxvY2F0aW9uIHR5cGVzLgoJKENVUlJFTlRfU1RVQl9PRkZTRVQpOiBOZXcgbWFjcm8uCgoJKiBlbGZjb2RlLmggKG1hcF9wcm9ncmFtX3NlZ21lbnRzKTogU2V0IHRoZSBQRl9YIGJpdCBmb3IgZGF0YQoJc2VnbWVudHMuCgoJKiBlbGYzMi1ocHBhLmM6IChlbGZfaHBwYV9ob3d0b190YWJsZSk6IEFkZAoJUl9IUFBBX1NUVUJfQ0FMTF8xNyBmb3Igc3VwcG9ydCBvZiBsaW5rZXIgc3R1YiBnZW5lcmF0aW9uLgoJKGhwcGFfZWxmX3JlbG9jKTogQWRkIHN1cHBvcnQgb2YgUl9IUFBBX1NUVUJfQ0FMTF8xNwoJcmVsb2NhdGlvbiB0eXBlLgoKCSogZWxmMzItaHBwYS5oOiAoZWxmMzJfaHBwYV9yZWxvY190eXBlKTogQWRkCglSX0hQUEFfU1RVQl9DQUxMXzE3IGZvciBzdXBwb3J0IG9mIGxpbmtlciBzdHViIGdlbmVyYXRpb24uCgoJKiBocHBhX3N0dWJzLmg6IEFkZCBuZXcgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIHVzZWQgaW4gbGlua2VyCglzdHViIGdlbmVyYXRpb24uCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX3JlbG9jYXRlX3Vud2luZF90YWJsZSk6IFRoZSBvZmZzZXRzIGluIGFuCgl1bndpbmQgZGVzY3JpcHRvciB3ZXJlIGluY29ycmVjdC4KCgkqIGxpYmVsZi5oIChiZmRfZWxmX2ZpbmRfc2VjdGlvbik6IERlY2xhcmUuCgoJKiBlbGYzMi1ocHBhLmM6IChlbGYzMl9ocHBhX2JhY2tlbmRfc3ltYm9sX3Byb2Nlc3NpbmcpOiAgTmV3CglmdW5jdGlvbiBpbiBwbGFjZSBvZiBnbG9iYWxfc3ltIGZpZWxkIGluIGVsZl9iYWNrZW5kX2RhdGEKCXN0cnVjdHVyZS4KCShlbGYzMl9ocHBhX2JhY2tlbmRfc3ltYm9sX3RhYmxlX3Byb2Nlc3NpbmcsCgllbGYzMl9ocHBhX2JhY2tlbmRfc2VjdGlvbl9wcm9jZXNzaW5nLAoJZWxmMzJfaHBwYV9iYWNrZW5kX2Zha2Vfc2VjdGlvbnMsCgllbGYzMl9ocHBhX2JhY2tlbmRfc2VjdGlvbl9mcm9tX3NoZHIsCgllbGYzMl9ocHBhX2JhY2tlbmRfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uKTogIE5ldyBmdW5jdGlvbnMgdG8KCXByb3ZpZGUgc3VwcG9ydCBvZiBzeW1ib2wgZXh0ZW5zaW9uIHNlY3Rpb25zIGFuZCBhcmd1bWVudAoJcmVsb2NhdGlvbiBzdHVicy4KCShlbGZfaW5mb190b19ob3d0byk6ICBSZW1vdmUgY2FsbCB0byBhYm9ydCgpLgoKCSogZWxmMzItdGFyZ2V0Lmg6ICBTdXBwb3J0IGZvciBzcGVjaWFsIHByb2Nlc3NpbmcgYnkgdGhlIGJhY2tlbmQuCgkoc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEpOiAgQWRkZWQgZWxmX2JhY2tlbmRfc3ltYm9sX3Byb2Nlc3NpbmcsCgllbGZfYmFja2VuZF9zeW1ib2xfdGFibGVfcHJvY2Vzc2luZywKCWVsZl9iYWNrZW5kX3NlY3Rpb25fcHJvY2Vzc2luZywgZWxmX2JhY2tlbmRfc2VjdGlvbl9mcm9tX3NoZHIsCgllbGZfYmFja2VuZF9mYWtlX3NlY3Rpb25zLCBhbmQKCWVsZl9iYWNrZW5kX3NlY3Rpb25fZnJvbV9iZmRfc2VjdGlvbiBmaWVsZHMuCgkqIGVsZmNvZGUuaDogKGJmZF9zZWN0aW9uX2Zyb21fc2hkcik6IEFkZCBhIGNoZWNrIGZvcgoJcHJvY2Vzc29yLXNwZWNpZmljIHNlY3Rpb24gdHlwZXMuCgkoZWxmX2Zha2Vfc2VjdGlvbnMpOiAgQWRkIGEgY2hlY2sgZm9yIHByb2Nlc3Nvci1zcGVjaWZpYwoJc2VjdGlvbiB0eXBlcy4KCShiZmRfZWxmMzJfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogIEFkZCBhIGNoZWNrIHRvIHNlZSBpZgoJdGhlcmUgaXMgYW55IGZpbmFsIHNlY3Rpb24gcHJvY2Vzc2luZyB0byBiZSBkb25lIGJ5IHRoZQoJYmFja2VuZC4KCShlbGZfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uKTogIEFkZCBhIGNoZWNrIGZvcgoJcHJvY2Vzc29yLXNwZWNpZmljIHNlY3Rpb24gdHlwZXMuCgkoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6ICBSZW1vdmUgcmVmZXJlbmNlIHRvIGdsb2JhbF9zeW0gaW4gdGhlCgllbGZfYmFja2VuZF9kYXRhIHN0cnVjdHVyZS4gIFJlcGxhY2UgaXQgd2l0aCBhIGNhbGwgdG8KCWVsZl9iYWNrZW5kX3N5bWJvbF9wcm9jZXNzaW5nLgoJKiBsaWJlbGYuaDogUmVtb3ZlIGdsb2JhbF9zeW0gZmllbGQgaW4gdGhlIGVsZl9iYWNrZW5kX2RhdGEKCXN0cnVjdHVyZS4gIFJlcGxhY2UgaXQgd2l0aCBhIHNlcmllcyBvZiBiYWNrZW5kLXNwZWNpZmljCglmdW5jdGlvbnMuCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX3N0dWJfYnJhbmNoX3JlbG9jKTogVGhlIGZvcm1hbCBhcmd1bWVudAoJc3R1Yl9zeW0gc2hvdWxkIGJlIGNhbGxlZCB0YXJnZXRfc3ltLgoJKGhwcGFfZWxmX2J1aWxkX2FyZ19yZWxvY19zdHViKTogUmVmZXIgdG8gdGhlIHN0dWIgYmZkIChhYmZkKQoJcmF0aGVyIHRoYW4gdGhlIG91dHB1dCBiZmQgKG91dHB1dF9iZmQpLgoJKGhwcGFfZWxmX3JlbG9jKTogR2V0IHJpZCBvZiByZWZlcmVuY2VzIHRvIHRoZSBnbG9iYWxfc3ltIGZpZWxkIGluCgl0aGUgZWxmX2JhY2tlbmRfZGF0YSBzdHJ1Y3R1cmUuCgoJKiBlbGZjb2RlLmggKGVsZl9mYWtlX3NlY3Rpb25zKTogQ2hlY2sgdGhlIGNvcnJlY3QgY29uZGl0aW9uIGZvcgoJLmJzcy4gIEFsc28sIGRldGVjdCB0aGUgZXhpc3RlbmNlIG9mIGEgLm5vdGUgc2VjdGlvbi4KCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfcmVsb2NhdGVfaW5zbik6IHJfZm9ybWF0IGFyZ3VtZW50IHNob3VsZAoJaGF2ZSBiZWVuIHJfZmllbGQuCgoJKiBob3N0cy9ocHBhYnNkLmggKEhPU1RfTUFDSElORV9BUkNIKTogUmVmZXJlbmNlIHRvIGJmZF9hcmNoX202OGsKCXNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byBiZmRfYXJjaF9ocHBhLgoKCSogaHBwYS5jIChocHBhX3ZlYyk6IFJlcGxhY2UgYmZkX2ZhbHNlIHdpdGggX2JmZF9kdW1teV90YXJnZXQgaW4KCXRoZSBiZmRfY2hlY2tfZm9ybWF0IHN0cnVjdHVyZSB0byBhdm9pZCBhIHR5cGUgbWlzbWF0Y2guCgpNb24gQXVnIDIzIDE5OTMgIFNlYW4gRmFnYW4gIChzZWZAY3lnbnVzLmNvbSkKCQkgYW5kIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCUFkZCBOZXRCU0Qgc3VwcG9ydDoKCSogbmV0YnNkMzg2LmM6IE5ldyBmaWxlLgoJKiBhb3V0eC5oOiBNYWtlIHN5bV9pc19kZWJ1Z2dlcl9pbmZvIHRydWUgZm9yIE5fRk4uCgkqIE1ha2VmaWxlLmluLCBhb3V0LXRhcmdldC5oLCBjb25maWcuYmZkLCBjb25maWd1cmUuaG9zdCwgY29uZmlndXJlLmluLAoJbGliYW91dC5oLCB0YXJnZXRzLmM6IE90aGVyIGNoYW5nZXMuCgpGcmkgQXVnIDIwIDE3OjA0OjU5IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnL204OGstZWxmLm10OiBOZXcgZmlsZS4KCSogY29uZmlnLmJmZDogVXNlIGl0IGZvciBtODgqLSotc3lzdjQqLgoKRnJpIEF1ZyAyMCAxNToxNjo1OCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKGVsZl9idWlsZF9waGRycyk6IFVudXNlZCBmdW5jdGlvbiBkZWxldGVkLgoJKGJmZF9zaGRyX2Zyb21fc2VjdGlvbik6IERpdHRvLgoJKHdyaXRlX3JlbG9jcyk6IERvbid0IGNoYW5nZSBzZWN0aW9uIGNvbnRlbnRzIGZvciBhZGRlbmQuCgkoZWxmX2xvY2F0ZV9zaCk6IFJldHVybiB0eXBlIGlzIG5vdyBhbHdheXMgZWxmX2ludGVybmFsX3NoZHIsCglzaW5jZSB0aGUgb3RoZXIgdHlwZXMgd2VyZSByZWFsbHkgYWxpYXNlcyBmb3IgdGhpcyB0eXBlIGFueXdheXMuCglEb24ndCBjb21waWxlIHRoaXMgZnVuY3Rpb24sIHNpbmNlIGl0IGlzIHN0YXRpYyBhbmQgZG9lc24ndCBhcHBlYXIKCXRvIGJlIHVzZWQgaW4gdGhpcyBmaWxlLgoJKHN5bV9pc19nbG9iYWwpOiBSZXR1cm4gbm9uLXplcm8gZm9yIHdlYWsgc3ltYm9scy4gIEFib3J0IGlmCglzZWN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KCShzd2FwX291dF9zeW1zKTogUmVvcmRlciB0ZXN0cyBzbyBmdW5jdGlvbiBzeW1ib2xzIGNhbiBiZSB3ZWFrLgoJKGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiBEb24ndCB1c2UgQlNGX0VYUE9SVC4KCShlbGZfc2x1cnBfcmVsb2NhX3RhYmxlKTogTWFrZSBSRUxPQ19QUk9DRVNTSU5HIHNlY3Rpb24gc21hbGxlciBieQoJZXh0cmFjdGluZyBvdXQgc29tZSBjb21tb24gY29kZS4gIEFib3J0IGlmIEJGRCBzZWN0aW9uIHN5bWJvbCBoYXMKCW51bGwgbmFtZS4KCShlbGZfc2x1cnBfcmVsb2NfdGFibGUpOiBUcmFuc2xhdGUgRUxGIHNlY3Rpb24gc3ltYm9scyBpbnRvIEJGRAoJc2VjdGlvbiBzeW1ib2xzLiAgRG9uJ3QgcmVhZCBzZWN0aW9uIGNvbnRlbnRzIHRvIGZpbGwgaW4gYWRkZW5kCglmaWVsZC4KCgkqIGVsZjMyLWkzODYuYyAoZWxmX2hvd3RvX3RhYmxlKTogQWxsIHBhcnRpYWxfaW5wbGFjZSBmaWVsZHMKCXNob3VsZCBiZSAidHJ1ZSIuCgoJKiBNZXJnZWQgZnJvbSBPU0Y6CgoJVHVlIEp1biAxNSAxNDozODozMiAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKCgkqIGxpYmVsZi5oIChzdHJ1Y3QgRWxmX1N5bV9FeHRyYSk6IE5ldyBzdHJ1Y3R1cmUgdG8gY29udGFpbiBFTEYKCXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciBhIHN5bWJvbC4gIFB1dCBpbiBlbGZfc3ltX251bSwgd2hpY2gKCWdpdmVzIHRoZSBleHRlcm5hbCBzeW1ib2wgbnVtYmVyIGluIHRoZSBlbGYgb2JqZWN0IGZpbGUsIHNpbmNlCglsb2NhbCBzeW1ib2xzIG11c3QgY29tZSBiZWZvcmUgZ2xvYmFsIHN5bWJvbHMuCgkoZWxmX3N5bV9leHRyYSk6IE5ldyBtYWNyby4KCShlbGZfc3ltdGFiX21hcCk6IERlbGV0ZSwgaW4gZmF2b3Igb2YgdXNpbmcgRWxmX1N5bV9FeHRyYS4KCSogZWxmY29kZS5oIChlbGZfbWFwX3N5bWJvbHMpOiBVc2UgRWxmX1N5bV9FeHRyYSB0byBtYXAgaW50ZXJuYWwKCXN5bWJvbCBudW1iZXIgdG8gZXh0ZXJuYWwgbnVtYmVyLiAgU3RvcmUgdGhlIGFkZHJlc3Mgb2YgdGhlCglFbGZfU3ltX0V4dHJhIGZpZWxkIGZvciB0aGUgc3ltYm9sIGluIHRoZSB1ZGF0YSBmaWVsZC4KCShlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogVXNlIEVsZl9TeW1fRXh0cmEgdG8gbWFwIG91dCBzeW1ib2xzLgoKCVN1biBKdW4gMjAgMTY6MzA6MTEgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCgoJKiBlbGZjb2RlLmggKGVsZl9vYmpfdGRhdGEpOiBBZGQgZmllbGQgdG8gY291bnQgdGhlIHNpemUgb2YgdGhlCglhcnJheSBvZiBwb2ludGVycyB0byBzZWN0aW9uIHN5bWJvbHMuCgkoZWxmX21hcF9zeW1ib2xzKTogQnVtcCB0aGUgbWF4IGluZGV4IG9mIHRoZSBzZWN0aW9uIHN5bWJvbHMgc28KCXRoYXQgd2UgZG9uJ3Qgb3ZlcndyaXRlIG1lbW9yeS4gIFN0b3JlIHRoZSBtYXggaW5kZXggaW50byB0aGUKCWVsZl9vYmpfdGRhdGEgZmllbGQuCgoJU2F0IEp1biAxOSAxMDoxMjoyNyAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKCgkqIGVsZmNvZGUuaCAoZWxmX29ial90ZGF0YSk6IEFkZCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzCgl0byB0aGUgc2VjdGlvbiBzeW1ib2xzIHdlIGNyZWF0ZWQuICBSZW1vdmUgdW51c2VkIGZpZWxkCglpbnRlcm5hbF9zeW1zLgoJKGVsZl9tYXBfc3ltYm9scyk6IEZpbGwgaW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc2VjdGlvbiBzeW1ib2xzLgoJT25seSBjcmVhdGUgc2VjdGlvbiBzeW1ib2xzIGZvciBzZWN0aW9ucyB0aGF0IGhhdmUgU0VDX0FMTE9DIHNldCwKCWFuZCBoYXZlIG5vbi16ZXJvIHNpemUuCgkoZWxmX3N5bWJvbF9mcm9tX2JmZF9zeW1ib2wpOiBJZiB1ZGF0YSBpcyBOVUxMLCBhbmQgdGhpcyBpcyBhCglzZWN0aW9uIHN5bWJvbCwgbG9vayB1cCB0aGUgc2VjdGlvbiBpbiB0aGUgbGlzdCBvZiBzZWN0aW9uCglzeW1ib2xzLCBhbmQgc2V0IHRoZSB1ZGF0YSBwb2ludGVyIGFwcHJvcHJpYXRlbHkuICBPdGhlcndpc2UsIGlmCgl1ZGF0YSBpcyBzdGlsbCBOVUxMLCBmYWlsIGFuIGFzc2VydGlvbiwgYW5kIHVzZSAwLCBpbnN0ZWFkIG9mCglkcm9wcGluZyBjb3JlLgoKRnJpIEF1ZyAyMCAxMjoxODowNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkIChtaXBzLSotZWxmbCosIG1pcHMtKi1lbGYqKTogTmV3IHRhcmdldHMsIHVzaW5nCgltaXBzbGVsZiBhbmQgbWlwc2JlbGYgcmVzcGVjdGl2ZWx5LgoJKiBjb25maWcvbWlwc2xlbGYubXQsIGNvbmZpZy9taXBzYmVsZi5tdDogTmV3IGZpbGVzLgoJKiBlbGYzMi1taXBzLmM6IEFkZGVkIHNvbWUgcmVsb2MgaW5mb3JtYXRpb24uCgkqIGNvbmZpZ3VyZS5pbjogRml4ZWQgZXJyb3IgbWVzc2FnZS4KCgkqIGVjb2ZmLmMgKEVDT0ZGX0xPTkdfU0laRSk6IFJlbW92ZWQuICBKdXN0IHVzZSBjb25zdGFudHMuCgpUaHUgQXVnIDE5IDA5OjQ1OjUxIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChCRkRfTElCUywgQUxMX01BQ0hJTkVTLCBCRkQzMl9CQUNLRU5EUywgQkZENjRfQkFDS0VORFMsCglPUFRJT05BTF9CQUNLRU5EUyk6IEFscGhhYmV0aXplIGVudHJpZXMgYW5kIGFkZCBhIGZldyBtaXNzaW5nIG9uZXMuCgkqIGFyY2h1cmVzLmM6IEFscGhhYmV0aXplIGRlY2xzLgoKCSogY29uZmlndXJlLmluLCB0YXJnZXRzLmM6IEFkZCBtaXNzaW5nIHZlY3RvcnMgdG8gdGhlIHRhYmxlcy4KCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKSBbIVNFTEVDVF9WRUNTXTogQWRkIERFRkFVTFRfVkVDVE9SLgoJUmVtb3ZlIGhwMzAwYnNkX3ZlYyBkdWUgdG8gY2xhc2ggd2l0aCBzdW5vc19iaWdfdmVjLgoKVHVlIEF1ZyAxNyAxODoxMjozMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2kzODZ7bWFjaDMsb3NmMW1rfS5oOiBOZXcgZmlsZXMsIGZvciBNYWNoIGhvc3RpbmcuCgkqIGhvc3RzL2kzODZtYWNoLmg6IHJlbW92ZWQsIHJlcGxhY2VkIGJ5IGkzODZvc2YxbWsuaC4KCSogY29uZmlnL2kzODZtYWNoMy5tdCwgaTM4Nm1hY2gzLmM6IE5ldyBmaWxlcywgZm9yIE1hY2ggYS5vdXQgZm9ybWF0LgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmhvc3QsIGNvbmZpZy5iZmQ6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KCSogaG9zdHMvZGVjc3RhdGlvbi5oOiBJbmNsdWRlIDxzeXMvcGFyYW0uaD4gbm90IDxtYWNoaW5lL3BhcmFtLmg+LgoKVHVlIEF1ZyAxNyAxNToxOTo0MSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBjb2ZmZ2VuLmMgKGNvZmZfc2VjdGlvbl9zeW1ib2wpOiBJZiBzZWN0aW9uJ3Mgb3V0cHV0X3NlY3Rpb24gaXMKCW5vdCB5ZXQgc2V0LCBwb2ludCB0byBpdHNlbGYuICBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMKCWNhbGxlZCBvbiB0aGUgb3V0cHV0IGZpbGUsIG5vdCB0aGUgaW5wdXQgZmlsZS4KCgkqIGNvZmYtcnM2MDAwLmMgKGR1bW15X3JlbG9jLCBSVFlQRTJIT1dUTyk6IFNldCBob3d0byBmaWVsZCB0byBhCglkdW1teSB2YWx1ZSwgcmF0aGVyIHRoYW4gbGVhdmluZyBpdCBOVUxMLgoKCSogYXJjaHVyZXMuYyAoYmZkX2RlZmF1bHRfc2V0X2FyY2hfbWFjaCk6IFNldCBiZmRfZXJyb3Igb24KCWZhaWx1cmUuCgkqIGFvdXR4LmggKE5BTUUoYW91dCxzZXRfYXJjaF9tYWNoKSk6IENoZWNrIHJldHVybiB2YWx1ZSBvZgoJYmZkX2RlZmF1bHRfc2V0X2FyY2hfbWFjaC4KClR1ZSBBdWcgMTcgMDk6NDI6MTYgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29uZmlnLmJmZCAoY3B1KTogRXh0cmFjdCBmcm9tIGNhbm9uaWNhbCBuYW1lIHdpdGggc2VkLgoJKiBjb25maWd1cmUuaW46IERvbid0IHBhc3MgaXQuCgpTdW4gQXVnIDE1IDIwOjQ1OjQ1IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogYmZkLWluLmg6IFJlbW92ZSB7QllURSxXT1JELExPTkd9X1NJWkU7IHRoZXkgYXJlIHBvaW50bGVzcyBhbmQKCUJZVEVfU0laRSBjb25mbGljdHMgd2l0aCBhIE1hY2ggaGVhZGVyLgoJKiBlY29mZi5jOiBDaGFuZ2UgTE9OR19TSVpFIHRvIEVDT0ZGX0xPTkdfU0laRSBhbmQgZGVmaW5lIGl0LgoKCSogY29uZmlndXJlLmhvc3Q6IE1ha2Ugc3VyZSBhbGwgT1MgZmllbGRzIGVuZCBpbiAqLgoKRnJpIEF1ZyAxMyAxNjozMzozMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlY29mZi5jIChlY29mZl9zbHVycF9yZWxvY190YWJsZSk6IFVzZSBiZmRfYWJzX3NlY3Rpb24gZm9yCglSRUxPQ19TRUNUSU9OX05PTkUgYW5kIFJFTE9DX1NFQ1RJT05fQUJTLiAgSWYgYSByZWxvYyBzZWN0aW9uCglkb2Vzbid0IGV4aXN0LCBkb24ndCB0cnkgdG8gY3JlYXRlIGl0LgoKCSogbmxtY29kZS5oIChubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogcHJvY2VkdXJlIG9mZnNldHMgYXJlCglmcm9tIHN0YXJ0IG9mIGNvZGUgc2VnbWVudCwgbm90IHN0YXJ0IG9mIGZpbGUuCgkqIGNvbmZpZy9pMzg2LW5sbS5tdCAoREVGQVVMVF9WRUNUT1IpOiBJdCdzIG5sbTMyX2kzODZfdmVjLCBub3QKCWJmZF9ubG0zMl9pMzg2X3ZlYy4KCSogY29uZmlndXJlLmluIChTRUxFQ1RfVkVDUyBzd2l0Y2gpOiBMaWtld2lzZS4KClRodSBBdWcgMTIgMTA6MzI6NDcgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogZm9ybWF0LmMgKGJmZF9jaGVja19mb3JtYXQpOiBJZiB0aGUgdGFyZ2V0IG1hdGNoZXMgdGhlIGRlZmF1bHQKCXRhcmdldCwgc2V0IG1hdGNoX2NvdW50IHRvIDEsIHRvIGlnbm9yZSBhbnkgcHJldmlvdXMgbWF0Y2hlcy4KCgkqIE1ha2VmaWxlLmluIChCRkQzMl9CQUNLRU5EUyk6IFJlbW92ZSBzcmVjLm8sIGFkZCByZWxvYzE2Lm8uCgoJKiBjb25maWd1cmUuaW46IEFkZCByZWxvYzE2Lm8gd2hlbiB3ZSBhZGQKCWNvZmYtaDgzMDAubywgY29mZi1oODUwMC5vLCBjb2ZmLXNoLm8sIGNvZmYtejhrLm8uCglNYWtlZmlsZS5pbiAoQkZEX0xJQlMpOiBSZW1vdmUgcmVsb2MxNi5vLgoKCSogY29uZmlnL3U2OGstY29mZi5tdDogRml4IHR5cG8sIERFRkFVTFRfVEFSR0VUIGZvcgoJREVGQVVMVF9WRUNUT1IuCgoJKiBjb25maWcvaDgzMDAtY29mZi5tdCwgaDg1MDAtY29mZi5tdCwgc2gtY29mZi5tdCwgc3QyMDAwLm10LAoJejhrLWNvZmYubXQgKERFRkFVTFRfVkVDVE9SKTogRGVmaW5lLiAgRG9uJ3QgZXhwbGljaXRseSBhZGQKCVMtcmVjb3JkcyB2aWEgU0VMRUNUX1ZFQ1MuCgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpLCBNYWtlZmlsZS5pbiAoQkZEX0xJQlMpOiBBbHdheXMKCXN1cHBvcnQgUy1yZWNvcmRzLCBmb3IgY29udmVuaWVuY2UuCgpUaHUgQXVnIDEyIDA4OjMwOjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtYWxwaGEuYyAoYWxwaGFfaG93dG9fdGFibGUsIGFscGhhX2ZpbmlzaF9yZWxvYywKCWFscGhhX2Vjb2ZmX3N3YXBfcmVsb2Nfe2luLG91dH0sIGFscGhhX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6CglSZWFkIGFuZCB3cml0ZSBBbHBoYSByZWxvY3MuICBDYW4ndCBwcm9jZXNzIHRoZW0geWV0LgoJKiBlY29mZi5jIChlY29mZl9zbHVycF9yZWxvY190YWJsZSk6IFJlY29nbml6ZSBuZXcgcmVsb2Mgc2VjdGlvbnMuCglJZiB0aGUgc2VjdGlvbiBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCBjcmVhdGUgaXQuCgoJKiBlY29mZnN3YXAuaCAoZWNvZmZfc3dhcF9wZHJfe2luLG91dH0pOiBIYW5kbGUgbmV3IGZpZWxkcyBkZWZpbmVkCglvbiB0aGUgQWxwaGEuCgoJKiBsaWJlY29mZi5oIChlY29mZl9iYWNrZW5kX2RhdGEpOiBBZGRlZCBjb25zdHJ1Y3Rvcl9yZWxvYyBhbmQKCWZpbmlzaF9yZWxvYyBmaWVsZHMuCgkqIGVjb2ZmLmM6IE1vdmUgTUlQUyByZWxvYyBzdXBwb3J0IGZyb20gaGVyZS4uLgoJKiBjb2ZmLW1pcHMuYzogdG8gaGVyZS4KCSogZWNvZmYuYyAoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogR2V0IGNvbnN0cnVjdG9yIHJlbG9jIGhvd3RvCglmcm9tIGJhY2tlbmQuCgkoZWNvZmZfc2x1cnBfcmVsb2NfdGFibGUpOiBSZW1vdmVkIE1JUFMgc3BlY2lmaWMgc3R1ZmYuICBDYWxsCglmaW5pc2hfcmVsb2MgYmFja2VuZCBmdW5jdGlvbi4KCShlY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBSZW1vdmVkIE1JUFMgc3BlY2lmaWMgYXNzZXJ0aW9ucy4KCSogY29mZi1taXBzLmMgKG1pcHNfZmluaXNoX3JlbG9jKTogTmV3IGZ1bmN0aW9uLgoJKG1pcHNfZWNvZmZfYmFja2VuZF9kYXRhKTogRmlsbCBpbiBuZXcgZmllbGRzLgoJKiBjb2ZmLWFscGhhLmMgKGFscGhhX2Vjb2ZmX2JhY2tlbmRfZGF0YSk6IFVzZSBOVUxMIGZvciBuZXcKCWZpZWxkcy4KCSogdGFyZ2V0cy5jOiBBZGRlZCBleHRlcm4gZm9yIGVjb2ZmYWxwaGFfbGl0dGxlX3ZlYy4KCgkqIGJmZC5jIChfYmZkX2hvc3RfYmlnX2VuZGlhbik6IFJlbW92ZWQuCgkqIGJmZC1pbi5oIChIT1NUX0JZVEVfT1JERVJfQklHX1AsIGJmZF9oZWFkZXJfdHdpZGRsZV9yZXF1aXJlZCk6CglSZW1vdmVkLgoJKiBiZmQtaW4yLmg6IFJlZ2VuZXJhdGVkLgoKV2VkIEF1ZyAxMSAxMjoxMToyMyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBOZXcgZmlsZSwgYnJva2VuIG91dCBvZiBjb25maWd1cmUuaW4uCgkqIGNvbmZpZ3VyZS5pbjogVXNlIGl0LCBhbmQgdXNlIHN0YW5kYXJkIHRhcmdldCBuYW1lcyBmb3IKCS0td2l0aC10YXJnZXRzLCByZXBsYWNpbmcgLS13aXRoLWJmZC10YXJnZXRzLgoKCSogYXJjaHVyZXMuYyAoYXJjaHVyZXNfaW5pdF90YWJsZSk6IEFkZCBiZmRfc2hfYXJjaC4KCgkqIGNvbmZpZ3VyZS5pbjogSW5jbHVkZSBjb2ZmLW02OGsubyBmb3IgbTY4a2NvZmZ1bl92ZWMuCglJbmNsdWRlIG5sbTMyLm8gYW5kIG5sbS5vIGZvciBiZmRfbmxtMzJfaTM4Nl92ZWMuCglGaXggZXJyb3IgaW4gZXJyb3IgbWVzc2FnZS4KCgkqIG9hc3lzLmM6IE1ha2UgYmZkX2Vycm9yX3ZlY3RvciBleHRlcm4uCgoJKiBjb25maWd1cmUuaW46IEluY2x1ZGUgc3RhYi1zeW1zLm8gZm9yIGEub3V0L2Iub3V0IHRhcmdldHMKCWFuZCBocDMwMHtic2QsaHB1eH0uCgpXZWQgQXVnIDExIDA2OjQwOjUxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIG5sbWNvZGUuaCAobmxtX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IEFkZCB0aGUgLmJzcwoJc2VjdGlvbiBiZWZvcmUgc2V0dGluZyBvdXRwdXRfaGFzX2JlZ3VuLgoJKG5sbV9zZXRfc2VjdGlvbl9jb250ZW50cyk6IFJlbW92ZSBhcmd1bWVudCBuYW1lcyBmcm9tCgltYW5nbGVfcmVsb2NzX2Z1bmMgcHJvdG90eXBlLgoJKG5sbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBSZW1vdmUgc2hhZG93aW5nIGxvY2FsIHZhcmlhYmxlLgoJRG9uJ3Qgd3JpdGUgb3V0IGRlYnVnZ2luZyBzeW1ib2xzIGlmIGRlYnVnSW5mb09mZnNldCBpcyAtMS4gIEFkZAoJdGhlIGNvZGVJbWFnZU9mZnNldCB0byB0aGUgc3RhcnQsIGV4aXQsIGFuZCBjaGVjayBwcm9jZWR1cmUKCW9mZnNldHMuCgkqIG5sbTMyLWkzODYuYyAobmxtX2kzODZfd3JpdGVfcmVsb2MsIG5sbV9pMzg2X21hbmdsZV9yZWxvY3MpOgoJRG9uJ3QgY2hlY2sgcGFydGlhbF9pbnBsYWNlIGZpZWxkOyBpdHMgdmFsdWUgaXMgaXJyZWxldmFudC4KCgkqIEJhc2UgdXNlIG9mIHNjby1jb3JlIG9uIGhvc3QsIG5vdCB0YXJnZXQuCgkqIGNvbmZpZ3VyZS5ob3N0IChpWzM0XTg2LSotc2NvKik6IFVzZSBpMzg2c2NvIHJhdGhlciB0aGFuIGkzODZ2LgoJKiBjb25maWcvaTM4Ni1zY28ubXQgKFRERUZJTkVTKTogUmVtb3ZlZC4KCSogY29uZmlnL2kzODZzY28ubWg6IE5ldyBmaWxlIHRvIHVzZSBzY28tY29yZS4KCSogaG9zdHMvaTM4NnNjby5oOiBOZXcgZmlsZTsganVzdCBpbmNsdWRlcyBob3N0cy9pMzg2di5oLgoKCSogZWNvZmZzd2FwLmggKGVjb2ZmX3N3YXBfe2hkcixleHR9X3tpbixvdXR9KTogVXNlIHNpZ25lZAoJY29udmVyc2lvbnMgZm9yIHNvbWUgZmllbGRzLgoKVHVlIEF1ZyAxMCAxMzozMjoyMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlY29mZi5jIChlY29mZl9ncHJlbF9yZWxvYyk6IElmIF9ncCBpcyBub3QgZGVmaW5lZCwgZ2l2ZSBhbgoJZXJyb3IgcmF0aGVyIHRoYW4gYWJvcnRpbmcuCgoJKiBsaWJubG0uaCAoc3RydWN0IG5sbV9iYWNrZW5kX2RhdGEpOiBBZGRlZCBtYWNoIGZpZWxkLgoJKG5sbV9tYWNoaW5lKTogTmV3IGFjY2Vzc29yIG1hY3JvLgoJKiBubG0uYyAobmxtX21rb2JqZWN0KTogU2V0IGFyY2hpdGVjdHVyZSBhbmQgbWFjaGluZSBmcm9tIGJhY2tlbmQKCWluZm9ybWF0aW9uLgoJKiBubG0zMi1pMzg2LmMgKG5sbTMyX2kzODZfYmFja2VuZCk6IEluaXRpYWxpemUgbmV3IG1hY2ggZmllbGQuCgpUdWUgQXVnIDEwIDA5OjMxOjE4IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogUmVwbGFjZSBjYWxscyB0byBzb3J0IHdpdGggc2hlbGwgY29kZQoJdG8gdW5pcSB0aGUgbGlzdHMuCgpUdWUgQXVnIDEwIDA2OjIzOjE2IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogSW5jbHVkZSBhb3V0MzIubyBmb3IgYW55IGEub3V0L2Iub3V0IGZvcm1hdHMuCgpNb24gQXVnICA5IDA5OjM3OjE4IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9pMzg2LWxpbnV4Lm10IChTRUxFQ1RfVkVDUyk6IFN1cHBvcnQgYmZkX2VsZjMyX2kzODZfdmVjLgoJKiBjb25maWcvbTY4ay1lbGYubXQgKFNFTEVDVF9WRUNTKTogU3VwcG9ydCBtNjhrY29mZl92ZWMuCgkqIGNvbmZpZy9pMzg2LWVsZi5tdCAoU0VMRUNUX1ZFQ1MpOiBTdXBwb3J0IGkzODZjb2ZmX3ZlYy4KCSogY29uZmlnL2hwcGEtZWxmLm10IChTRUxFQ1RfVkVDUyk6IFN1cHBvcnQgaHBwYV92ZWMuCgkqIGNvbmZpZy9zcGFyYy1lbGYubXQgKFNFTEVDVF9WRUNTKTogU3VwcG9ydCBzdW5vc19iaWdfdmVjLgoJKiBjb25maWcvaTM4Ni1zY28ubXQgKFNFTEVDVF9WRUNTKTogRG9uJ3QgZGVmaW5lOyBJYW4gc2F5cyBpdCB3YXMKCWp1c3QgYSBoYWNrLgoKTW9uIEF1ZyAgOSAxMzoxNTowMCAxOTkzICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAc2VuZGFpLmN5Z251cy5jb20pCgoJKiBjb25maWcvbTg4ay1jb2ZmLm10IChERUZBVUxUX1ZFQyAtPiBERUZBVUxUX1ZFQ1RPUik6IHJlbmFtZWQuCgpNb24gQXVnICA5IDE0OjI2OjQ1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIHN5bXMuYyAoQlNGX0VYUE9SVCk6IE5vdyBzYW1lIGFzIEJTRl9HTE9CQUwuCgoJKiBiZmQuYyAoYmZkX3NjYW5fdm1hKTogTmV3IGZ1bmN0aW9uLgoKTW9uIEF1ZyAgOSAxMToyOTo1MyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBiZmQtaW4uaCAoYmZkX2dldF9hcmNoaXRlY3R1cmUsIGJmZF9nZXRfbWFjaGluZSk6IFJlbW92ZWQKCW9ic29sZXRlIG1hY3Jvcy4KCSogYmZkLWluMi5oOiBVcGRhdGVkLgoKCSogZWNvZmYuYyAoZWNvZmZfc2x1cnBfYXJtYXApOiBDb3JyZWN0IGJ1ZyBpbiBpbml0aWFsaXphdGlvbiBvZgoJc3RyaW5nYmFzZS4KClN1biBBdWcgIDggMTI6MjE6MTMgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgdW5uZWVkZWQgdGVzdC4KClN1biBBdWcgIDggMTI6NDE6MjIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoe2Rpc3QscmVhbH1jbGVhbik6IFVzZSAkKE1BS0UpLCBub3QgbWFrZS4KClNhdCBBdWcgIDcgMDk6MTQ6MjEgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29uZmlnL3N0MjAwMC5tdCAoVERFRklORVMpOiBEb24ndCBkZWZpbmUgTVJJOyBub3QgdXNlZC4KCgkqIFBPUlRJTkcsIFRPRE8sIGNvbmZpZy9SRUFETUU6IFVwZGF0ZSB0byByZWZsZWN0IGJlbG93IGNoYW5nZXMuCgoJKiBjb25maWd1cmUuaW46IFJlcGxhY2UgTUlOSU1JWkUgYW5kIC0td2l0aC1taW5pbWFsLWJmZCB3aXRoCgktLXdpdGgtYmZkLXRhcmdldHM9InRhcmdldDEsdGFyZ2V0MiwuLi4iIGFuZCB0aGUgc3BlY2lhbCB0YXJnZXQKCSJhbGwiIHRvIGdldCB0aGUgcHJldmlvdXMgZGVmYXVsdCBiZWhhdmlvci4KCUZpZ3VyZSBvdXQgd2hpY2ggYXJjaGl0ZWN0dXJlIGFuZCBiYWNrZW5kIC5vIGZpbGVzIGFyZSBuZWVkZWQgZnJvbQoJREVGQVVMVF9WRUNUT1IsIFNFTEVDVF9WRUNTLCBhbmQgU0VMRUNUX0FSQ0hJVEVDVFVSRVMgYXMgc2V0IGluCgl0aGUgLm10IGZpbGVzLiAgRGVmaW5lIFRERUZBVUxUUyBiYXNlZCBvbiB0aGVtLCBhbHNvLgoKCSogTWFrZWZpbGUuaW46IFJlbW92ZSByZWZlcmVuY2VzIHRvIE1JTklNSVpFLgoJKiBhcmNodXJlcy5jLCB0YXJnZXRzLmM6IERpdHRvLgoKCSogY29uZmlnLyoubXQ6IERlZmluZSBERUZBVUxUX1ZFQ1RPUiwgU0VMRUNUX1ZFQ1MsIGFuZAoJU0VMRUNUX0FSQ0hJVEVDVFVSRVMgYXMgdmFyaWFibGVzIHJhdGhlciB0aGFuIGFzIC1EIGFyZ3VtZW50cyB0bwoJVERFRkFVTFRTLgoKCSogY29uZmlnL2EyOWstY29mZi5tdCxhbHBoYW9zZi5tdCwgaTM4Ni1zY28ubXQsIGk5NjAtYm91dC5tdCwKCWk5NjAtY29mZi5tdCAoVERFRkFVTFRTKTogRG9uJ3QgcHV0IHRoZSBkZWZhdWx0IHZlY3RvciBpbgoJU0VMRUNUX1ZFQ1MgbWFudWFsbHk7IGl0J3MgYXV0b21hdGljIG5vdy4KCgkqIGNvbmZpZy9pMzg2LXNjby5tdCAoVERFRkFVTFRTKTogRG9uJ3QgcHV0ICZzY29fY29yZV92ZWMgaW4KCVNFTEVDVF9WRUNTIG1hbnVhbGx5OyAtRFNDT19DT1JFIGRvZXMgaXQgYXV0b21hdGljYWxseSBub3cuCgoJKiBjb25maWcvaDgzMDAtY29mZi5tdCxoODUwMC1jb2ZmLm10LHNoLWNvZmYubXQsc3QyMDAwLm10LHo4ay1jb2ZmLm10CgkoVERFRkFVTFRTKTogRG9uJ3QgZGVmaW5lIEJGRDsgbm90IHVzZWQuCgoJKiBjb25maWcvaHBwYW9zZi5taCAoSERFRklORVMpOiBEb24ndCBkZWZpbmUgU0VMRUNUX0FSQ0hJVEVDVFVSRVM7Cgl0aGlzIGlzIGEgaG9zdCwgbm90IGEgdGFyZ2V0LgoKU2F0IEF1ZyAgNyAwNToyODowMyAxOTkzICBGcmVkIEZpc2ggIChmbmZAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoZWxmX29iamVjdF9wKTogIEFkZCBjb21tZW50IGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbgoJZG9lcyBhbmQgdG8gd2F0Y2ggb3V0IGZvciBzaWRlIGVmZmVjdHMuICBBZGQgRklYTUUgZm9yIG1lbW9yeSBsZWFrcy4KCUZpeCBjb21tZW50IGFib3V0IGNoZWNraW5nIGZvciBtYXRjaGluZyBieXRlIG9yZGVyLiAgUHJlc2VydmUKCXBvaW50ZXIgdG8gb2xkIHRkYXRhIChpZiBhbnkpLCBhbmQgcmVzdG9yZSBpdCBpZiB3ZSBkb24ndCBtYXRjaAoJZmlsZSB3aXRoIHRhcmdldCB2ZWN0b3IuICBJZiB3ZSBhcmUgZ29pbmcgdG8gdXNlIGdvdG8ncywgdXNlIHRoZW0KCWNvbnNpc3RlbnRseSBhbmQgbWFpbnRhaW5hYmx5LgoJKiBubG1jb2RlLmggKG5sbV9vYmplY3RfcCk6ICBFeHBhbmQgY29tbWVudHMgYWJvdXQgbGVha2VkIG1lbW9yeQoJdG8gbm90ZSB0aGF0IHRoZSBwcm9ibGVtIGlzIGV2ZW4gbW9yZSBzZXJpb3VzIHRoYW4ganVzdCBsZWFrZWQKCW1lbW9yeS4gIFJlcGxhY2UgZ290byB3aXRoIG1vcmUgdHJhZGl0aW9uYWwgcmV0dXJuLgoKRnJpIEF1ZyAgNiAxMjowMDowMyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJRml4IGluY29ycmVjdCBvciB1c2VsZXNzIG1ha2VmaWxlIHZhcmlhYmxlIGRlZmluaXRpb25zOgoJKiBjb25maWcvbmV3cy5tdCwgY29uZmlnL3U2OGstY29mZi5tdCAoVERFRkFVTFRTKTogVXNlIHRoaXMgdG8KCWRlZmluZSBERUZBVUxUX1ZFQ1RPUiwgaW5zdGVhZCBvZiBUREVGSU5FUy4KCSogY29uZmlnL2kzODZhaXgubWggKE1JTklNSVpFKTogRG9uJ3QgZGVmaW5lLgoJKiBjb25maWcvaHBwYW9zZi5taCAoTUlOSU1JWkUpOiBEb24ndCBjb25kaXRpb25hbGl6ZS4KCSogY29uZmlnL3JzNjAwMC5taCAoQUxMT0NBKSwKCSogY29uZmlnL2kzODZ2Lm1oIChBTExPQ0EpLAoJKiBjb25maWcvaTM4NmxpbnV4Lm1oIChBTExPQ0EpLAoJKiBjb25maWcvaTM4NmlzYy5taCAoQUxMT0NBKSwKCSogY29uZmlnL2dvMzIubWggKEVYVFJBTElCUyk6IERvbid0IGRlZmluZTsgbm90IHVzZWQuCgkqIGNvbmZpZy9zb2xhcmlzMi5taCAoSERFRklORVMpOiBSZW5hbWVkIGZyb20gSF9ERUZJTkVTLgoJKiBjb25maWcvYWxwaGFvc2YubXQgKFRERUZJTkVTKTogU2V0IGl0LCBub3QgSERFRklORVMuCgkqIGNvbmZpZy96OGstY29mZi5tdCAoQ0MpOiBEb24ndCBkZWZpbmUuICBJdCdzIGEgdGFyZ2V0LCBub3QgYSBob3N0LgoKCSogY29uZmlnL1JFQURNRTogTmV3IGZpbGUsIGV4cGxhaW5pbmcgdGhlIHZhcmlhYmxlcy4KCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6IEFkZCBocDMwMF9ic2RfdmVjLgoJKiBNYWtlZmlsZS5pbiAoQkZEMzJfQkFDS0VORFMsIENGSUxFUyk6IEFkZCBocDMwMGJzZC4KCShocDMwMGJzZC5vKTogTmV3IHJ1bGUuCgpGcmkgQXVnICA2IDE1OjEzOjIyIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGxpYmVsZi5oIChOQU1FKTogUHJvdmlkZSBhIGRlZmF1bHQgZGVmaW5pdGlvbiwgdGhhdCdzIG5laXRoZXIKCWZvciAzMiBiaXRzIG5vciBmb3IgNjQuCgoJVHVlIEp1biAxNSAxNDozODozMiAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKCgkqIGxpYmVsZi5oIChlbGZfaGFzaCk6IENoYW5nZSBkZWNsYXJhdGlvbiB0byBiZmRfZWxmX2hhc2gsIHNpbmNlCgl0aGF0IGlzIHdoYXQgaXMgaW4gZWxmLmMuCgpGcmkgQXVnICA2IDEyOjI4OjM4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVjb2ZmLmMgKGVjb2ZmX3NldF9zeW1ib2xfaW5mbyk6IFJlbW92ZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IKCXNjQnNzIGFuZCBzY1NCc3Mgc3ltYm9scywgc2luY2UgaXQgd2FzIHdyb25nLgoKCSogTWFrZWZpbGUuaW4gKGNvZmYtbWlwcy5vLCBjb2ZmLWFscGhhLm8pOiBEb24ndCBkZXBlbmQgb24KCWNvZmZjb2RlLmguCgoJKiBjb2ZmY29kZS5oIChzZWNfdG9fc3R5cF9mbGFncyk6IEluc3BpcmVkIGJ5IG1iQHR0aS5DT00gKE1pY2hhZWwKCUJsb29tKTogT25seSBzZXQgU1RZUF9CU1MgZm9yIFNFQ19BTExPQyBzZWN0aW9ucy4KCgkqIGVjb2ZmLmMgKGVjb2ZmX3NsdXJwX2FybWFwKTogRnJvbSBBcm5lIEhlbnJpayBKdXVsCgk8YXJuZWpAa2FyaS5mbS51bml0Lm5vPjogSGFuZGxlIGEgQ09GRiBzdHlsZSBhcm1hcC4KCkZyaSBBdWcgIDYgMDk6NTk6NDUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBocHV4LWNvcmUuYzogQ2FzdCByZXR1cm4gdmFsdWUgZnJvbSBiZmRfemFsbG9jLgoKVGh1IEF1ZyAgNSAxMzoyMjo0NCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChsb2cyKTogRGVsZXRlIGkzODctc3BlY2lmaWMgY29kZS4KCgkqIE1ha2VmaWxlLmluIChCRkRfTElCUyk6IEFsd2F5cyBpbmNsdWRlIGVsZi5vLgoJKEJGRDMyX0JBQ0tFTkRTKTogRG9uJ3QgaW5jbHVkZSBlbGYubyBoZXJlLgoJKG9maWxlcyk6IERlbGV0ZSByZWZlcmVuY2VzIHRvIG9maWxlczIgYW5kIG9maWxlczMuCgkoZG9fY2xlYW4pOiBEZWxldGUgb2ZpbGVzLgoJKEJGRElOX0gpOiBDaGFuZ2VkIHJlZmVyZW5jZXMgdG8gJChzcmNkaXIpL2JmZC1pbjIuaC4KCShzdG1wLWJmZC5oKTogVXNlIGJmZC5oLW5ldyBhcyB0ZW1wb3JhcnkgbmFtZSwgbm90IGJmZC5oMi4KCShoZWFkZXJzKTogVXNlIGJmZC1pbjIuaC1uZXcgYXMgdGVtcG9yYXJ5IG5hbWUsIG5vdCBiZmQuaC1uZXcuCgoJKiBiZmQtaW4uaDogUmV3b3JkZWQgY29tbWVudCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgYmZkLWluMi5oIGlzIGEKCWdlbmVyYXRlZCBmaWxlLgoKCSogcmVsb2MuYyAoZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsKTogQWRkZWQgaTM4Ni1lbGYgcmVsb2MgdHlwZXMKCShmcm9tIE1laXNzbmVyJ3MgYWRkaXRpb25zIHRvIGJmZC1pbjIuaCkuCgoJKiBlbGYzMi1pMzg2LmMgKEVMRl9NQVhQQUdFU0laRSk6IERlZmluZS4KCglNZXJnZWQ6CgoJV2VkIEp1biAyMyAwNjowNTo1OCAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKCgkqIGVsZmNvZGUuaCAoZWxmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IERvbid0IGRyb3AgY29yZSBpZgoJZWxmX3N5bWJvbF9mcm9tIHJldHVybnMgYSBOVUxMIHBvaW50ZXIgd2hlbiBwcm9jZXNzaW5nIGEgbm9uLWVsZgoJc3ltYm9sLCB1c2UgYSAwIHNpemUgaW5zdGVhZC4KCglUdWUgSnVuIDE1IDE0OjM4OjMyIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQoKCSogZWxmY29kZS5oIChlbGZfaGFzaCk6IERlbGV0ZSBtYWNybyBtYXBwaW5nIGVsZl9oYXNoIHRvCgliZmRfZWxmMzJfaGFzaCwgc2luY2UgdGhlIGhhc2ggdGFibGUgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIDMyLzY0CgliaXQgc3lzdGVtLgoKCSogbGliZWxmLmggKGVsZl9oYXNoKTogQ2hhbmdlIGRlY2xhcmF0aW9uIHRvIGJmZF9lbGZfaGFzaCwgc2luY2UKCXRoYXQgaXMgd2hhdCBpcyBpbiBlbGYuYy4KCglTYXQgSnVuIDE5IDEwOjEyOjI3IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQoKCSogZWxmMzItaTM4Ni5oIChyZWxvY190eXBlKTogUmVmb3JtYXQgc3BhY2luZy4KCShlbGZfaG93dG9fdGFibGUpOiBBZGQgdGhlIHJlc3Qgb2YgdGhlIDM4Ni9FTEYgcmVsb2NhdGlvbnMuCgkoZWxmX2kzODZfcmVsb2NfdHlwZV9sb29rdXApOiBEaXR0by4KCShlbGZfaTM4Nl9pbmZvX3RvX2hvd3RvKTogRGl0dG8uCgkoZWxmX2kzODZfaW5mb190b19ob3d0b19yZWwpOiBEaXR0by4KClRodSBBdWcgIDUgMTA6MDc6NDMgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBubG1jb2RlLmggKG5sbV9nZXRfcmVsb2NfdXBwZXJfYm91bmQpOiAgVGVzdCByZXR1cm4gdmFsdWUKCW9mIG5sbV9zbHVycF9zeW1ib2xfdGFibGUgYXMgYm9vbGVhbiwgbm90IHBvaW50ZXIuCgkqIG5sbWNvZGUuaCAobmxtX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6ICBUZXN0IHJldHVybiB2YWx1ZQoJb2YgbmxtX3NsdXJwX3JlbG9jX2ZpeHVwcyBhcyBib29sZWFuLCBub3QgcG9pbnRlci4KCldlZCBBdWcgIDQgMTY6MjI6NTUgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogY29uZmlnL2dvMzIubWg6IHJlbW92ZSBIREVGSU5FUzsgc2luY2UgX19NU0RPU19fIGFuZCBfX0dPMzJfXwoJYXJlIG5vdyBwcmVkZWZpbmVkIGJ5IEdDQwoKV2VkIEF1ZyAgNCAxNjowNjoyOSAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmZ2VuLmMgKGNvZmZfcHJpbnRfc3ltYm9sKTogQWRkIHRoZSBzZWN0aW9uIG9mZnNldCB0byB0aGUKCWxpbmUgbnVtYmVyIGFkZHJlc3MsIHNvIGl0J3MgcHJpbnRlZCB0aGUgc2FtZSB3YXkgYXMgdGhlIGZ1bmN0aW9uCglhZGRyZXNzLiAgT25seSBzaG93ZWQgdXAgZm9yIGxpbmUgbnVtYmVycyB0aGF0IGFyZW4ndCBpbiB0aGUgZmlyc3QKCXNlY3Rpb24gKC50ZXh0KS4KCldlZCBBdWcgIDQgMDg6MzM6NTUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogbGlibmxtLmggKG5sbV9iYWNrZW5kX2RhdGEpOiBBZGRlZCBubG1fbWFuZ2xlX3JlbG9jcy4KCShubG1fbWFuZ2xlX3JlbG9jc19mdW5jKTogTmV3IG1hY3JvLgoJKiBubG0zMi1pMzg2LmMgKG5sbV9pMzg2X3dyaXRlX3JlbG9jKTogUmV3cm90ZSBjb3JyZWN0bHkuCgkobmxtX2kzODZfbWFuZ2xlX3JlbG9jcyk6IE5ldyBmdW5jdGlvbi4KCSogbmxtY29kZS5oIChubG1fY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogTW92ZSBhbGwgY29tbW9uCglzeW1ib2xzIGludG8gdGhlIC5ic3Mgc2VjdGlvbi4KCShubG1fc2V0X3NlY3Rpb25fY29udGVudHMpOiBDYWxsIHRoZSBtYW5nbGVfcmVsb2NzIGZ1bmN0aW9uLgoJKG5sbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBUcmVhdCBhIHJlbG9jIGFnYWluc3QgYW55IGRlZmluZWQKCXN5bWJvbCBhcyBhbiBpbnRlcm5hbCByZWxvYy4gIEZpeCBidWcgaW4gZXh0ZXJuYWwgcmVsb2MgY291bnRpbmcuCglHZXQgdGhlIG9mZnNldCBhbmQgZGVidWdnaW5nIHR5cGUgcmlnaHQgZm9yIC5ic3Mgc3ltYm9scy4gIE9ubHkKCW91dHB1dCBkZWJ1Z2dpbmcgc3ltYm9scyBmb3IgZGVmaW5lZCBzeW1ib2xzLgoKCSogY29mZi1oODUwMC5jIChydHlwZTJob3d0byk6IERvIGFuIGZwcmludGYgdG8gc3RkZXJyIHJhdGhlciB0aGFuCgl1c2luZyBwcmludGYuCgkqIGNvZmYtejhrLmMgKHJ0eXBlMmhvd3RvKTogTGlrZXdpc2UuCgkqIGNvZmZjb2RlLmggKGR1bW15X3JlbG9jMTZfZXh0cmFfY2FzZXMpOiBMaWtld2lzZS4KCSogZWxmMzItaTM4Ni5jIChUUkFDRSk6IExpa2V3aXNlLgoJKiBocDMwMGhwdXguYyAoY29udmVydF9zeW1fdHlwZSwgc3dhcF9zdGRfcmVsb2NfaW4pOiBMaWtld2lzZS4KCSogcnM2MDAwLWNvcmUuYyAocnM2MDAwY29mZl9nZXRfc2VjdGlvbl9jb250ZW50cyk6IExpa2V3aXNlLgoJKiBjb2ZmZ2VuLmMgKGNvZmZfcHJpbnRfc3ltYm9sKTogRG8gYW4gZnByaW50ZiB0byB0aGUgZmlsZQoJYXJndW1lbnQgcmF0aGVyIHRoYW4gdXNpbmcgcHJpbnRmLgoKVHVlIEF1ZyAgMyAxODoxNzoyNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2Zmc3dhcC5oOiBBZGRlZCBtYWNyb3MgdXNlZCB3aGVuIGFjY2Vzc2luZyBzZXZlcmFsIGZpZWxkczsKCWRlZmF1bHQgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgoJKGNvZmZfc3dhcF9hb3V0aGRyX3tpbixvdXR9KTogSGFuZGxlIHRoZSBBbHBoYSBFQ09GRiBmaWVsZHMuCgkqIGNvZmYtYWxwaGEuYzogRGVmaW5lZCBtYWNyb3MgdG8gdXNlIHRoZSByaWdodCBzaXplcyBpbgoJY29mZnN3YXAuaC4KCSogbGliZWNvZmYuaDogQmFja2VuZCBpbmZvcm1hdGlvbiBpcyBub3cgaW4gdGFyZ2V0IHZlY3Rvciwgbm90CglCRkQuICBTdGFydCBvZiBiYWNrZW5kIGluZm9ybWF0aW9uIGlzIENPRkYgYmFja2VuZCBpbmZvcm1hdGlvbi4KCSogY29mZi1hbHBoYS5jLCBjb2ZmLW1pcHMuYzogQ2hhbmdlZCBhY2NvcmRpbmdseS4KCSogZWNvZmYuYyAoZWNvZmZfbWtvYmplY3QpOiBOZXcgZnVuY3Rpb24uCgkoQVJNQVBfU1RBUlQpOiBDaGFuZ2VkIGludG8gYmFja2VuZCBpbmZvcm1hdGlvbiwgc2luY2UgQWxwaGEgdXNlcwoJYSBkaWZmZXJlbnQgbmFtZS4KCShlY29mZl9zbHVycF9hcm1hcCk6IERvbid0IG92ZXJsYXkgYXJjaGl2ZSBoZWFkZXIuCgkqIGJmZC5jOiBJbmNsdWRlIGxpYmNvZmYuaC4KClR1ZSBBdWcgIDMgMTY6MzM6MTEgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBGaXggc2ggc3ludGF4IGVycm9yLgoKCSogYW91dGYxLmg6IE1ha2UgYmZkX2Vycm9yX3RyYXAgZXh0ZXJuOyBpdCdzIGRlZmluZWQgaW4gYmZkLmMuCgpUdWUgQXVnICAzIDE1OjE5OjA5IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBkZW5lYi5jeWdudXMuY29tKQoKCSogbmxtX3NsdXJwX3N5bWJvbF90YWJsZTogRG9uJ3QgdXNlICcmJyBvbiBhcnJheXMuCgpUdWUgQXVnICAzIDExOjA2OjI4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGVjb2ZmLmM6IE5ldyBmaWxlIGZvciBnZW5lcmljIEVDT0ZGIGZ1bmN0aW9ucy4KCSogZWNvZmZzd2FwLmg6IE5ldyBmaWxlIGZvciBFQ09GRiBzd2FwcGluZyBmdW5jdGlvbnMgd2hpY2ggZGlmZmVyCglvbmx5IHNsaWdodGx5IGZvciBkaWZmZXJlbnQgdGFyZ2V0cy4KCSogbGliZWNvZmYuaDogQWRkZWQgcHJvdG90eXBlcyBmb3IgZWNvZmYuYyBmdW5jdGlvbnMuCgkoZWNvZmZfYmFja2VuZF9kYXRhKTogTmV3IHN0cnVjdHVyZS4KCShlY29mZl90ZGF0YSk6IEFkZGVkIGJhY2tlbmRfZGF0YSBmaWVsZC4gIENoYW5nZWQgZXh0ZXJuYWwgZGF0YQoJcG9pbnRlcnMgdG8gYmUgUFRSIHJhdGhlciB0aGFuIHRvIGEgcGFydGljdWxhciBzdHJ1Y3QuCgkoZWNvZmZfc3ltYm9sX3N0cnVjdCk6IE1vdmVkIGluIGZyb20gY29mZi1taXBzLmMuCgkqIGNvZmYtYWxwaGEuYywgY29mZi1taXBzLmM6IE1vdmVkIGNvbW1vbiBmdW5jdGlvbnMgaW50byBlY29mZi5jLgoJQWRkZWQgRUNPRkYgYmFja2VuZCBzdHJ1Y3R1cmVzLiAgSW5jbHVkZSBlY29mZnN3YXAuaC4KCSogY29mZi1tc3ltLmM6IFJlbW92ZWQ7IHN1cGVyc2VkZWQgYnkgZWNvZmZzd2FwLmguCgkqIGJmZC5jOiBJbmNsdWRlIGNvZmYvaW50ZXJuYWwuaC4KCSogTWFrZWZpbGUuaW4gKEJGRF9MSUJTKTogUmVtb3ZlZCBjb2ZmLW1pcHMubyBhbmQgY29mZi1tc3ltLm8uCglBZGRlZCBlY29mZi5vLgoJKEJGRDY0X0JBQ0tFTkRTKTogQWRkZWQgY29mZi1hbHBoYS5vLgoJKENGSUxFUyk6IFJlbW92ZWQgY29mZi1tc3ltLmMuICBBZGRlZCBlY29mZi5jLgoJKGJmZC5vKTogQWRkZWQgZGVwZW5kZW5jeSBvbiAkKElOQ0RJUikvY29mZi9zeW0uaC4KCShjb2ZmLW1pcHMubyk6IEFkZGVkIGRlcGVuZGVuY3kgb24gZWNvZmZzd2FwLmggYW5kIGNvZmYvZWNvZmYuaC4KCShlY29mZi5vLCBjb2ZmLWFscGhhLm8pOiBOZXcgdGFyZ2V0cy4KCShjb2ZmLW1zeW0ubyk6IFJlbW92ZWQgdGFyZ2V0LgoKTW9uIEF1ZyAgMiAyMzozMzozOCAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGVsZjMyLWhwcGEuaCwgaG9zdHMvKjogIFJlbW92ZSAob25lIG1vcmUgdGltZSkgYWxsIG9jY3VycmFuY2VzCglvZiBFWEZVTiBpbiB0aGUgQkZEIHNvdXJjZXMuICBIZWF2ZSBobyEKCk1vbiBBdWcgIDIgMTY6NDU6NTcgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfc2V0X2FyY2hfbWFjaF9ob29rKTogIEFkZCBjaGVjayBmb3IgSTM4NkxZTlhNQUdJQy4KCk1vbiBBdWcgIDIgMTI6MTg6MDMgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogaG9zdHMvc3VuMy5oOiByZW1vdmUgc29tZSBtb3JlIGNvbmZsaWN0aW5nIGRlY2xzCgpNb24gQXVnICAyIDExOjQ4OjIzIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBpMzg2bHlueC5jOiAgUmVtb3ZlIHVubmVjZXNzYXJ5IGRlZiBvZiBOX0hFQURFUl9JTl9URVhULAoJcmVkZWZpbmUgVEVYVF9TVEFSVF9BRERSIHRvIGJlIDAuCgpTdW4gQXVnICAxIDIyOjU0OjA4IDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaG9zdCwgY29uZmlndXJlLmluLCBob3N0cy9pMzg2bHlueC5oOiAgTHlueC8zODYKCWhvc3QgYW5kIHRhcmdldCBpbmZvLgoKRnJpIEp1bCAzMCAxODowODoyNyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBubG0zMi1pMzg2LmM6IE5ldyBmaWxlLiAgRmlyc3QgY3V0IGF0IGkzODYgTkxNIGNvZGUuCgkqIGxpYm5sbS5oOiBBZGRlZCBzb21lIG1vcmUgcHJvdG90eXBlcy4KCShzdHJ1Y3QgbmxtX3JlbGVudCk6IE5ldyBzdHJ1Y3R1cmUuCgkobmxtTkFNRShzeW1ib2xfdHlwZSkpOiBBZGRlZCByY250IGFuZCByZWxvY3MgZmllbGRzLgoJKHN0cnVjdCBubG1fb2JqX3RkYXRhKTogQWRkZWQgbmV3IGZpZWxkczogbmxtX3N5bWJvbHMsCglubG1fdGV4dF9sb3csIG5sbV9kYXRhX2xvdywgbmxtX3JlbG9jX2ZpeHVwcywKCW5sbV9yZWxvY19maXh1cF9zZWNzLgoJKHN0cnVjdCBubG1fYmFja2VuZF9kYXRhKTogTmV3IHN0cnVjdHVyZSwgd2l0aCBhY2Nlc3NvciBtYWNyb3MuCgkqIG5sbWNvZGUuaDogVXNlIE5MTV9ISUJJVCByYXRoZXIgdGhhbiBNU0IuCgkobmxtX29iamVjdF9wKTogU2V0IFNFQ19SRUxPQyBmb3IgLnRleHQgYW5kIC5kYXRhLiAgRG9uJ3Qgc2V0CglTRUNfREFUQSBmb3IgLmJzcy4gIFNldCBIQVNfUkVMT0MgYW5kIEhBU19TWU1TIGZvciBhYmZkLiAgU2V0IHRoZQoJYXJjaGl0ZWN0dXJlLgoJKG5sbV9zd2FwX2ZpeGVkX2hlYWRlcl9vdXQsIG5sbV9zd2FwX3ZhcmlhYmxlX2hlYWRlcl9vdXQsCglmaW5kX25vbnplcm8sIG5sbV9zd2FwX2F1eGlsaWFyeV9oZWFkZXJzX291dCk6IE5ldyBvdXRib3VuZAoJc3dhcHBpbmcgZnVuY3Rpb25zLgoJKG5sbV9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kLCBubG1fc2x1cnBfc3ltYm9sX3RhYmxlKTogSW5jbHVkZQoJZXh0ZXJuYWwgcmVmZXJlbmNlcyBpbiBzeW1ib2wgdGFibGUgYXMgdW5kZWZpbmVkIHN5bWJvbHMuCgkobmxtX2dldF9zeW10YWIsIG5sbV9zbHVycF9zeW1ib2xfdGFibGUpOiBGaWxsIGluIGFsb2NhdGlvbgoJYXJndW1lbnQgaW4gZ2V0X3N5bXRhYiByYXRoZXIgdGhhbiBpbiBzbHVycF9zeW1ib2xfdGFibGUuCgkobmxtX3NsdXJwX3N5bWJvbF90YWJsZSk6IFNhdmUgc3ltYm9sIGluZm9ybWF0aW9uIGluIHRkYXRhLgoJKG5sbV9wcmludF9zeW1ib2wpOiBOZXcgZnVuY3Rpb24uCgkobmxtX3NsdXJwX3JlbG9jX2ZpeHVwcywgbmxtX2dldF9yZWxvY191cHBlcl9ib3VuZCwKCW5sbV9jYW5vbmljYWxpemVfcmVsb2MpOiBOZXcgZnVuY3Rpb25zIHRvIHJlYWQgcmVsb2NzLgoJKG5sbV9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMsIG5sbV9zZXRfc2VjdGlvbl9jb250ZW50cywKCW5sbV9leHRlcm5hbF9yZWxvY19jb21wYXJlLCBubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogTmV3CglmdW5jdGlvbnMgdG8gY3JlYXRlIE5MTSBmaWxlcy4KCSogbmxtLXRhcmdldC5oOiBEZWZpbmUgYWxsIHRoZSBubG0gZnVuY3Rpb25zIGhlcmUgZWl0aGVyIGFzCglkZWZhdWx0IHZhbHVlcyBvciBpbiB0ZXJtcyBvZiBubG1OQU1FLiAgVXNlIEpVTVBfVEFCTEUobmxtKS4gIFNldAoJdGhlIGJhY2tlbmRfZGF0YSBmaWVsZCB0byBUQVJHRVRfQkFDS0VORF9EQVRBLgoJKiBubG0zMi1nZW4uYywgbmxtNjQtZ2VuLmM6IERvbid0IGRlZmluZSBmdW5jdGlvbiBtYWNyb3MgaGVyZTsKCXRoZXkgYXJlIG5vdyBpbiBubG0tdGFyZ2V0LmguCgkoVEFSR0VUX0JBQ0tFTkRfREFUQSk6IERlZmluZSBhcyBOVUxMLgoJKiBubG0uYyAobmxtX21rb2JqZWN0KTogRG8gYWxsb2NhdGUgdGhlIHRkYXRhIGZpZWxkLgoJKG5sbV9zZXRfYXJjaF9tYWNoKTogTmV3IGZ1bmN0aW9uLgoJKiB0YXJnZXRzLmM6IEFkZGVkIG5sbTMyX2kzODZfdmVjLgoJKiBNYWtlZmlsZS5pbiAoQkZEMzJfQkFDS0VORFMpOiBBZGRlZCBubG0zMi1pMzg2Lm8uCgkoQ0ZJTEVTKTogQWRkZWQgbmxtMzItaTM4Ni5jLgoJKG5sbTMyLWdlbi5vLCBubG02NC1nZW4ubyk6IERlcGVuZCBvbiBubG0tdGFyZ2V0LmguCgkobmxtMzItaTM4Ni5vKTogTmV3IHRhcmdldC4KClRodSBKdWwgMjkgMjA6MjA6MzkgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogaG9zdHMvc3VuMy5oOiByZW1vdmUgc29tZSBmdW5jdGlvbiBkZWNscyB0aGF0IGNvbmZsaWN0IHcvIEFOU0kKCUMsIGFuZCBhcmVuJ3QgbmVlZGVkIGFueXdheSAocmV0dXJuIGludCkKCldlZCBKdWwgMjggMTU6NDY6MzggMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmY29kZS5oOiBVc2UgY2FzdHMgd2l0aCBiZmRfYWxsb2MgYW5kIGFsbG9jYS4KClR1ZSBKdWwgMjcgMTI6NTE6NDMgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGRlbmViLmN5Z251cy5jb20pCgoJKiBubG17MzIsNjR9LWdlbi5jIChKVU1QX1RBQkxFX1BSRUZJWCk6ICBEZWxldGUuCgkqIG5sbXszMiw2NH0tZ2VuLmMgKEpVTVBfVEFCTEVfSU5JVCk6ICBOZXcgbWFjcm8gdGhhdCB3b3JrcyB3aXRoCglvbGRlciBjcHAncywgdGhhdCBkb24ndCBkbyBhZGRpdGlvbmFsIHJlcGxhY2VtZW50IG9uIHRoZSBKVU1QX1RBQkxFCgltYWNybydzIGFyZ3VtZW50LgoJKiBubG0tdGFyZ2V0LmggKEpVTVBfVEFCTEVfSU5JVCk6ICBVc2UgbmV3IG1hY3JvIGluIHBsYWNlIG9mCglKVU1QX1RBQkxFIG1hY3JvLgoKTW9uIEp1bCAyNiAxNzozOTowMSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCglZZXQgYW5vdGhlciB0cmFkLWNvcmUgdmFyaWFudDoKCSogY29uZmlnL2VzaXgubWgsIGhvc3RzL2VzaXguaDogTmV3IGZpbGVzLgoJKiBjb25maWd1cmUuaG9zdHM6IFVzZSB0aGVtLgoKTW9uIEp1bCAyNiAxMzoyMjoxNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogSGFuZGxlIHRoZSBjYXNlIG9mCgljb21wbGFpbl9vdmVyZmxvd19iaXRmaWVsZCwgcmlnaHRzaGlmdCA+IGJpdHBvcywgYW5kIGEgbmVnYXRpdmUKCW51bWJlci4KCk1vbiBKdWwgMjYgMTQ6NDA6MTAgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmY29kZS5oOiBSZWltcGxlbWVudCBzZWdtZW50IHdyaXRpbmcuCgkoZWxmX3dyaXRlX3BoZHJzKTogVXNlIHByZWNvbXB1dGVkIGVfcGhvZmYgcmF0aGVyIHRoYW4gbWFraW5nCglhc3N1bXB0aW9ucy4KCShlbGZfYnVpbGRfcGhkcnMpOiBEaXNhYmxlZCwgZm9yIG5vdy4KCShhc3NpZ25fZmlsZV9wb3NpdGlvbl9mb3Jfc2VjdGlvbik6IERvbid0IGNoYW5nZSBmaWxlIG9mZnNldCBmb3IKCVNIVF9OT0JJVFMuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2Zvcl9zeW10YWJfYW5kX3N0cnRhYnMpOiBOZXcgZnVuY3Rpb24uCgkoc3RydWN0IHNlZ19pbmZvKTogTmV3IHR5cGUuCgkobWFwX3Byb2dyYW1fc2VnbWVudHMpOiBOZXcgZnVuY3Rpb24uCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2V4Y2VwdF9yZWxvY3MpOiBGb3IgZXhlY3V0YWJsZXMsIGxlYXZlCglzZWN0aW9uIGhlYWRlcnMgJmMgZm9yIGxhc3QsIGFuZCBwcm9wZXJseSBhbGlnbiBhbGwgc2VjdGlvbnMgd2l0aAoJZmxhZyBTSEZfQUxMT0Mgc2V0LgoJKHByZXBfaGVhZGVycyk6IE5vIGxvbmdlciBhYm9ydCB3aGVuIEVYRUNfUCBpcyBzZXQuCgkod3JpdGVfc2hkcnNfYW5kX2VoZHIpOiBEZWxldGVkIGFsbCBjb2RlIHJlbGF0aW5nIHRvIHByb2dyYW0KCXNlZ21lbnRzLgoKCSogZWxmY29kZS5oICh2YXJpb3VzKTogRGVsZXRlZCBzb21lIHVudXNlZCBjb2RlLCBhbmQgZGVidWdnaW5nCgkibWFsbG9jKDApIiBjYWxscy4KCSh3cml0ZV9yZWxvY3MpOiBDYWNoZSB2YWx1ZSBvZiBsYXN0IHN5bWJvbCBsb29rZWQgdXAsIHRvIHNhdmUKCXRpbWUgaWYgdGhlIHN5bWJvbCBpcyByZWZlcnJlZCB0byByZXBlYXRlZGx5LgoJKGVsZl9mYWtlX3NlY3Rpb25zKTogQ2hlY2sgb25seSBTRUNfUkVMT0MgZmxhZywgbm90IG51bWJlciBvZgoJcmVsb2NzLgoJKGFzc2lnbl9zZWN0aW9uX251bWJlcnMpOiBMaWtld2lzZS4KCgkqIE1ha2VmaWxlLmluIChvZmlsZXMpOiBTdGFycyBpbiB3aWxkY2FyZHMgYmVsb25nIG91dHNpZGUgcXVvdGVzLgoKCSogbGliZWxmLmggKHN0cnVjdCBlbGZfYmFja2VuZF9kYXRhKTogTmV3IGZpZWxkLCBtYXhwYWdlc2l6ZS4KCShzdHJ1Y3QgZWxmX29ial90ZGF0YSk6IE5ldyBmaWVsZCwgcGhkci4KCSogZWxmMzItdGFyZ2V0LmggKGVsZjMyX2JlZCk6IEluaXRpYWxpemUgbWF4cGFnZXNpemUgZnJvbQoJRUxGX01BWFBBR0VTSVpFLgoJKEVMRl9NQVhQQUdFU0laRSk6IERlZmF1bHQgdG8gMS4KCSogZWxmNjQtdGFyZ2V0LmggKGVsZjY0X2JlZCwgRUxGX01BWFBBR0VTSVpFKTogTGlrZXdpc2UuCgkqIGVsZjMyLXNwYXJjLmMgKEVMRl9NQVhQQUdFU0laRSk6IERlZmluZS4KCShlbGZfc3BhcmNfaG93dG9fdGFibGUpOiBBbGwgcmVsb2NzIHNob3VsZCBoYXZlIHBjcmVsX29mZnNldD10cnVlLgoJTW9zdCBzaG91bGQgaGF2ZSBsZW5ndGggZmllbGQgb2YgYDInLgoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEhhbmRsZSA2NC1iaXQgcmVsb2NzLgoKCSogY29uZmlnL3NwYXJjLWFvdXQubXQgKFRBUkdFVF9CQUNLRU5EUyk6IERlZmluZS4KCk1vbiBKdWwgMjYgMDg6NTY6MTYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBEb24ndCBsb29rIGluICR7c3JjZGlyfSBmb3IgJHt0YXJnZXRfbWFrZWZpbGVfZnJhZ307Cgl0aGUgdG9wIGxldmVsIHNjcmlwdCBoYXMgYWxyZWFkeSBhZGp1c3RlZCBmb3IgaXQuCgpNb24gSnVsIDI2IDA4OjA5OjE5IDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBzcmVjLmMgKHNyZWNfd3JpdGVfc3ltYm9scyk6ICBHZXQgQ1IgTEYgaW4gdGhlIHJpZ2h0IG9yZGVyLgoKTW9uIEp1bCAyNiAwMjowODo0MSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3ZheGJzZC5oOiBJbmNsdWRlIHN0ZC1ob3N0LmguICBEb24ndCBpbmNsdWRlIDxtYWNoaW5lL3BhcmFtLmg+LgoKU2F0IEp1bCAyNCAxNjoxMzowMSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogSGFuZGxlIGNhc2Ugb2YgcmlnaHRzaGlmdCAhPQoJYml0cG9zIHdoZW4gb3ZlcmZsb3cgY2hlY2tpbmcuCgpGcmkgSnVsIDIzIDEwOjIwOjI3IDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCgoJKiBiZmQuYyAoYmZkX25vbnJlcHJlc2VudGFibGVfc2VjdGlvbiwgYmZkX3VuZGVmaW5lZF9zeW1ib2wsCgliZmRfcmVsb2NfdmFsdWVfdHJ1bmNhdGVkLCBiZmRfcmVsb2NfaXNfZGFuZ2Vyb3VzLCBiZmRfYXNzZXJ0KToKCVNlbmQgZXJyb3IgbWVzc2FnZXMgdG8gc3RkZXJyLgoKVGh1IEp1bCAyMiAxNTo1NzoyOSAxOTkzICBGcmVkIEZpc2ggIChmbmZAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIG5sbXszMiw2NH0tdGFyZ2V0Lmg6ICBSZW1vdmUuCgkqIG5sbS10YXJnZXQuaDogIE5ldyBmaWxlLCBtZXJnZWQgZnJvbSBubG17MzIsNjR9LXRhcmdldC5oCgkqIGxpYm5sbS5oIChOTE1fQVJDSF9TSVpFKTogIERlZmluZSB0byBBUkNIX1NJWkUuCgkqIG5sbS5jIChBUkNIX1NJWkUpOiAgUmVtb3ZlIGRlZmluZSB0byB6ZXJvLgoJKiBubG0zMi1nZW4uYyAoQVJDSF9TSVpFKTogIERlZmluZSB0byAzMi4KCSogbmxtMzItZ2VuLmMgKEpVTVBfVEFCTEVfUFJFRklYKTogIERlZmluZSB0byBubG0zMi4KCSogbmxtezMyLDY0fS1nZW4uYyAobmxtLXRhcmdldC5oKTogIEluY2x1ZGUuCgkqIHRhcmdldHMuYywgbGlibmxtLmgsIG5sbS5jLCBubG17MzIsNjR9LWdlbi5jLCBubG17MzIsNjR9LmMsCglubG1jb2RlLmg6ICBDb252ZXJ0IHByZWZpeGVzIGZyb20gYmZkX25sbTxzaXplPiB0byBqdXN0CglubG08c2l6ZT4sIGFuZCB1c2UgbWFjcm9zIHNlbGVjdCBzaXplLgoKVGh1IEp1bCAyMiAxNTo0MDoxNCAxOTkzICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAc2VuZGFpLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoTWFrZWZpbGUpOiBhZGQgY29uZmlndXJlLmluLCBkcm9wIHJlZHVuZGFudAoJICAkKHNyY2RpciksIGRyb3AgcmVkdW5kYW50IC4vCgpUaHUgSnVsIDIyIDEzOjM0OjU3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGhwdXgtY29yZS5jOiBOZXcgZmlsZTsgYmFja2VuZCBmb3IgSFAvVVggc3R5bGUgY29yZSBmaWxlcy4KCSogYmZkLmMgKHN0cnVjdCBfYmZkKTogUmVuYW1lZCBocHBhX2NvcmVfZGF0YSBmaWVsZCB0bwoJaHB1eF9jb3JlX2RhdGEuCgkqIGJmZC1pbjIuaDogVXBkYXRlZC4KCSogaHBwYS5jIChtYWtlX2JmZF9hc2VjdGlvbiwgaHBwYV9jb3JlX2ZpbGVfcCwKCWhwcGFfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCwgaHBwYV9jb3JlX2ZpbGVfZmFpbGluZ19zaWduYWwsCglocHBhX2NvcmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcCk6IE1vdmVkIGludG8gaHB1eC1jb3JlLmMuCglSZW1vdmVkIGZyb20gdGFyZ2V0IHZlY3Rvci4KCSogbGliaHBwYS5oIChzdHJ1Y3QgaHBwYV9jb3JlX3N0cnVjdCBhbmQgYWNjZXNzb3IgbWFjcm9zKTogTW92ZWQKCWludG8gaHB1eC1jb3JlLmMuCgkqIHRhcmdldHMuYzogSWYgSFBVWF9DT1JFIGlzIGRlZmluZWQsIGFkZCBocHV4X2NvcmVfdmVjIHRvCgl0YXJnZXQgbGlzdC4KCSogY29uZmlnL2hwMzAwLm1oIChIREVGSU5FUyk6IFNldCB0byAtREhQVVhfQ09SRS4KCShIREVQRklMRVMpOiBTZXQgdG8gaHB1eC1jb3JlLm8uCgkqIGNvbmZpZy9ocHBhYnNkLm1oLCBjb25maWcvaHBwYWhwdXgubWg6IExpa2V3aXNlLgoJKiBob3N0cy9ocDMwMC5oIChIT1NUX0hQMzAwSFBVWCk6IERlZmluZS4KCSogTWFrZWZpbGUuaW4gKE9QVElPTkFMX0JBQ0tFTkRTKTogQWRkZWQgc2NvLWNvcmUubywKCWFpeDM4Ni1jb3JlLm8sIGhwdXgtY29yZS5vLgoJKHNjby1jb3JlLm8sIGFpeDM4Ni1jb3JlLm8sIGhwdXgtY29yZS5vKTogTmV3IGRlcGVuZGVuY2llcy4KCgkqIHJlbG9jLmMgKGVudW0gY29tcGxhaW5fb3ZlcmZsb3cpOiBOZXcgZW51bWVyYXRpb24gd2l0aCB0aGUKCXZhcmlvdXMgZmxhdm91cnMgb2Ygb3ZlcmZsb3cgY2hlY2tpbmcuCgkoc3J0dWN0IHJlbG9jX2hvd3RvX3N0cnVjdCk6IENoYW5nZWQgY29tcGxhaW5fb25fb3ZlcmZsb3cgZmllbGQKCWZyb20gYm9vbGVhbiB0byBlbXVtIGNvbXBsYWluX292ZXJmbG93LiAgUmVtb3ZlZCBvYnNvbGV0ZSBhYnNvbHV0ZQoJZmllbGQuCgkoSE9XVE8pOiBSZW1vdmVkIGFic29sdXRlIGFyZ3VtZW50LgoJKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24pOiBEbyBvdmVyZmxvdyBjaGVja2luZyBvbiBhbGwgdHlwZXMgb2YKCWZpZWxkcy4KCSogYmZkLWluMi5oOiBVcGRhdGVkIGFjY29yZGluZ2x5LgoJKiBhbGwgdGFyZ2V0czogVXBkYXRlZCBpbml0aWFsaXphdGlvbiBvZiByZWxvYyBob3d0byB0YWJsZXMuCgpXZWQgSnVsIDIxIDIwOjM0OjM0IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIG9wbmNscy5jIChiZmRfY3JlYXRlKTogRG9uJ3QgdXNlIEMrKyBrZXl3b3JkICJ0ZW1wbGF0ZSIgYXMgYSBDCgl2YXJpYWJsZSBuYW1lLgoKVHVlIEp1bCAyMCAxNTowMjoyMyAxOTkzICBGcmVkIEZpc2ggIChmbmZAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtbTY4ay5jIChtNjhrX2hvd3RvMnJ0eXBlKTogIE1ha2UgYXJnIENPTlNUIHRvIG1hdGNoIGNhbGxlcnMuCgoJKiBlbGZjb2RlLmg6ICBGaXggc2V2ZXJhbCBpbGxlZ2FsIHBvaW50ZXIgY29tYmluYXRpb24gd2FybmluZ3MgZm9yCgl1c2FnZXMgb2YgYmZkX2FsbG9jIGFuZCBhbGxvY2EuCgoJKiBsaWJubG0uaCAobmxtX29ial90ZGF0YSk6ICBSZW5hbWUgaGlkZGVuIHN0cnVjdCBtZW1iZXJzIHRvIGF2b2lkCglhcHBhcmVudCBTdW4gQyBwcmVwcm9jZXNzb3IgcmVjdXJzaW9uLiAgRml4IGFjY2VzcyBtYWNyb3MuCgkqIG5sbWNvZGUuaDogIFJlbW92ZSBzcHVyaW91cyAnJicgYmVmb3JlIHNldmVyYWwgYXJyYXkgcmVmZXJlbmNlcy4KClR1ZSBKdWwgMjAgMTQ6MzY6MjcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGRlbmViLmN5Z251cy5jb20pCgoJKiBSZW5hbWUgZm9yIERPUyB1bmlxdWVuZXNzOiBjb2ZmLW02OGstdW4uYyAtPiBjb2ZmLXU2OGsuYwoJY29uZmlnL202OGstY29mZnVuLm10IC0+IHU2OGstY29mZi5tdC4KCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5pbjogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKVHVlIEp1bCAyMCAxNjoyMTo1MiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGYzMi1zcGFyYy5jIChlbGZfc3BhcmNfaG93dG9fdGFibGUpOiBEb24ndCB1c2UgIiYiIGJlZm9yZQoJZnVuY3Rpb24gbmFtZTsgaXQncyB2YWxpZCB3aXRob3V0LCBhbmQgc29tZSBjb21waWxlcnMgZ2l2ZQoJd2FybmluZ3Mgd2l0aCBpdCB0aGVyZS4KClR1ZSBKdWwgMjAgMDg6MjE6MTUgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGRlbmViLmN5Z251cy5jb20pCgoJKiBiZmQtaW4uaDogIEFwcGx5IHNvbWUgb2YgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgdG8gYmZkLWluMi5oLgoJKiBiZmQuYyAodW5pb24gdGRhdGEpOiAgQWRkIG5sbV9vYmpfZGF0YTsKCSogdGFyZ2V0cy5jIChlbnVtIHRhcmdldF9mbGF2b3VyKTogIEFkZCBiZmRfdGFyZ2V0X25sbV9mbGF2b3VyLgoKTW9uIEp1bCAxOSAyMDo0NjoxOCAxOTkzICBGcmVkIEZpc2ggIChmbmZAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoKi0qLW5ldHdhcmUsIGlbMzRdODYtKi1uZXR3YXJlKTogIE5ldyBjb25maWdzLgoJKiBNYWtlZmlsZS5pbiAoQkZEMzJfQkFDS0VORFMpOiAgQWRkIG5sbS5vLCBubG0zMi5vLCBubG0zMi1nZW4uby4KCSogTWFrZWZpbGUuaW4gKEJGRDY0X0JBQ0tFTkRTKTogIEFkZCBubG02NC5vLCBubG02NC1nZW4uby4KCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6ICBBZGQgbmxtezMyLDY0fS5jLCBubG17MzIsNjR9LWdlbi5jLgoJKiBNYWtlZmlsZS5pbiAobmxtLm8sIG5sbXszMiw2NH0ubywgbmxtezMyLDY0fS1nZW4ubzogIE5ldyB0YXJnZXRzLgoJKiBiZmQtaW4yLmggKElOTElORSk6ICBEZWZpbmVzIG1vdmVkIGhlcmUuCgkqIHthb3V0eC5oLCBlbGYuYywgZWxmY29kZS5ofTogIE1vdmUgSU5MSU5FIGRlZmluZXMgdG8gYmZkLWluMi5oLgoJKiBsaWJlbGYuaCAoQ0FUNCk6ICBNb3ZlIGRlZmluZSB0byBiZmQtaW4yLmguCgkqIGJmZC1pbjIuaCAoQ0FUNCk6ICBNZXJnZSBDQVQ0IG1hY3JvIHdpdGggb3RoZXIgQ0FUIG1hY3Jvcy4KCSogYmZkLWluMi5oICh1bmlvbiB0ZGF0YSk6ICBBZGQgbmxtX29ial9kYXRhLgoJKiBiZmQtaW4yLmggKGVudW0gdGFyZ2V0X2ZsYXZvdXIpOiAgQWRkIGJmZF90YXJnZXRfbmxtX2ZsYXZvdXIuCgkqIHRhcmdldHMuYyAoYmZkX25sbXszMiw2NH1fe2JpZyxsaXR0bGV9X3ZlYyk6ICBBZGQgcHJvdG90eXBlcy4KCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogIEFkZCBiZmRfbmxtezMyLDY0fV97YmlnLGxpdHRsZX1fdmVjLgoJKiAobGlibmxtLmgsIG5sbS5jLCBubG1jb2RlLmgsIG5sbXszMiw2NH0tZ2VuLmMsCglubG17MzIsNjR9LXRhcmdldC5oLCBubG17MzIsNjR9LmMsIGNvbmZpZy9pMzg2LW5sbS5tdCk6ICBOZXcgZmlsZXMKCWZvciBOTE0gc3VwcG9ydC4KCk1vbiBKdWwgMTkgMTU6MDk6MDEgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLntob3N0cyxpbn06IGFkZCBpWzM0XTg2LSotbHlueG9zKiBzdXBwb3J0CgpNb24gSnVsIDE5IDE0OjUzOjMwIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBydGwuY3lnbnVzLmNvbSkKCgkqIGVsZi5jLCBlbGZjb2RlLmgsIGxpYmVsZi5oOiBTZXJpb3VzIHJlb3JnYW5pemF0aW9uLgoJRGVsZXRlZCBgdGh1bmsnIHN0cnVjdHVyZSwgbWVyZ2VkIGludG8gdGRhdGEsIGR1cGxpY2F0ZSBkYXRhCgllbGltaW5hdGVkLgoJUmVhcnJhbmdlZCBmdW5jdGlvbnMsIGdyb3VwaW5nIGJ5IGZ1bmN0aW9uYWxpdHkuCglCcm9rZSB1cCBtYW55IGZ1bmN0aW9ucyBpbiBlbGZjb2RlLmgsIHJlLW9yZGVyZWQgbWFueSBwYXJ0cyBvZgoJZmlsZSB3cml0aW5nIHRvIGhhbmRsZSB1bnByZWRpY3RhYmxlIHN0YXRlIG9mIHNlY3Rpb24gcmVsb2NhdGlvbgoJdGFibGUgYXMgcHJvdmlkZWQgYnkgdmFyaW91cyBhcHBsaWNhdGlvbnMuCglTdGlsbCBuZWVkcyBjbGVhbnVwOiBNZXJnZSBmdW5jdGlvbnMgYmFjayB0b2dldGhlciwgc3BsaXQgb3V0CglkYXRhIHN0cnVjdHVyZSB3aXRoIG9ubHkgZGF0YSB0aGF0IGlzIHVzZWQgb25seSB3aGVuIHdyaXRpbmcgb3V0CglvYmplY3QgZmlsZS4KCgkqIGVsZi5jIChiZmRfZWxmX2dlbmVyaWNfcmVsb2MpOiBOZXcgZnVuY3Rpb24sIHRha2VuIGZyb20KCWNvZmYtbWlwcy5jLgoJKiBlbGYzMi1zcGFyYy5jIChlbGZfc3BhcmNfaG93dG9fdGFibGUpOiBVc2UgaXQsIHRvIHdvcmsgYXJvdW5kCgliZmRfcGVyZm9ybV9yZWxvY2F0aW9uIGxvc3NhZ2UuCgoJKiBNYWtlZmlsZS5pbiAoQkZEX0xJQlMpOiBJbmNsdWRlIGNvZmYtbWlwcy5vIGFuZCBjb2ZmLW1zeW0ubywgc28KCXRoYXQgZ2RiIHdpbGwgbGluay4KCShvZmlsZXMpOiBEb24ndCB1c2Ugc29ydCBvciB1bmlxOyBkbyBpdCB3aXRoIHNoIGNvbnN0cnVjdHMuCgpTdW4gSnVsIDE4IDE5OjQyOjE0IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBydGwuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmg6IFJlY29nbml6ZSBJMzg2UFRYTUFHSUMuCgkqIGFvdXRmMS5oLCBsaWJhb3V0Lmg6IEFkZCBNXzM4Nl9EWU5JWC4KCSogdHJhZC1jb3JlLmMgKFRSQURfQ09SRV9VU0VSX09GRlNFVCwgVFJBRF9DT1JFX1NUQUNLX0ZJTEVQT1MpOgoJTmV3IG1hY3JvczsgdXNlIGl0IGlmIGRlZmluZWQuCgkqIGNvbmZpZy9zeW1tZXRyeS5taCwgaG9zdHMvc3ltbWV0cnkuaDogTmV3IGZpbGVzLgoKRnJpIEp1bCAxNiAxNDo1NjozMSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AcnRsLmN5Z251cy5jb20pCgoJKiBSZW5hbWUgZWxmezMyLDY0fS1nZW5lcmljLmMgdG8gKi1nZW4uYyBmb3IgMTQgY2hhciBmaWxlbmFtZXMuCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgYWNjb3JkaW5nbHkuCgkoQ0ZJTEVTKTogQWRkIGVsZjY0LWdlbi5jLgoKRnJpIEp1bCAxNiAwOTo1MzoyMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYzogVXNlIE1JUFNfQU9VVF97T1p9TUFHSUMgcmF0aGVyIHRoYW4ge09afU1BR0lDLgoKVGh1IEp1bCAxNSAxNjowMjowNyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBjb2ZmLW04OGsuYyAoaG93dG9fdGFibGUpOiBDb3JyZWN0ZWQgYml0c2l6ZSBmb3IgUl9QQ1IyNkwgZnJvbQoJMTYgdG8gMjYuCgpXZWQgSnVsIDE0IDE1OjI5OjU2IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaHBwYS5jIFtIT1NUX0hQUEFCU0RdOiBVc2UgaHB1eC1zdHlsZSBjb3JlIGZpbGVzLgoJKiBsaWJocHBhLmggW0hPU1RfSFBQQUJTRF06IEluY2x1ZGUgaHB1eCB2ZXJzaW9uIG9mIGNvcmUuaAoKV2VkIEp1bCAxNCAwOTozMDo0OCAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgaDgzMDBoLSotKi4KClR1ZSBKdWwgMTMgMTI6MDM6MDAgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGNvZmYtaDg1MDAuYyAocmVsb2NfcHJvY2Vzc2luZywgcnR5cGUyaG93dG8pOiBOZXcgcmVsb2NhdGlvbgoJdHlwZSBSX0g4NTAwX0hJR0hfMTYuCgkqIGNvZmYtc2guYyAocl9pbW0zMik6IEdldCB0aGUgd2lkdGggb2YgdGhlIHJlbG9jIHJpZ2h0LgoKVHVlIEp1bCAxMyAxNjo0ODo1NiAxOTkzICBGcmVkZXJpYyBQaWVycmVzdGVndXkgKEYuUGllcnJlc3RlZ3V5QGZyY2wuYnVsbC5mcikKCgkqIGNvbmZpZ3VyZS5pbjogQWRkIG5ldyB0YXJnZXQgbTY4ay1jb2ZmdW4gdG8gdGhlIGRweC8yLgoJKiBjb25maWcvbTY4ay1jb2ZmdW4ubXQ6IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY29uZmlnL2RweDIubXQuCgpNb24gSnVsIDEyIDEwOjQyOjQ5IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBkZW5lYi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsKTogTW92ZSBTUEFSQ19CQVNFMTMgcmVsb2MgaW50bwoJc3BhcmMtYW91dC1zcGVjaWZpYyBsaXN0LgoKCSogbGliZWxmLmggKHN0cnVjdCBlbGZfb2JqX3RkYXRhKTogQWRkIGZpZWxkIGB0aHVuaycuCgoJKiBjb25maWcvc3BhcmMtZWxmLm10IChUQVJHRVRfQkFDS0VORFMpOiBOZXcgbWFrZSB2YXJpYWJsZS4KClRodSBKdWwgIDEgMTQ6NTI6NDcgMTk5MyAgRnJlZGVyaWMgUGllcnJlc3RlZ3V5IChGLlBpZXJyZXN0ZWd1eUBmcmNsLmJ1bGwuZnIpCgkJCSAgYW5kIEppbSBLaW5nZG9uIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmg6IFVzZSBtZW1zZXQgbm90IGJ6ZXJvLgoJKiB0cmFkLWNvcmUuYzogRG9uJ3QgaW5jbHVkZSA8c3lzL2ZpbGUuaD4uCgkqIGkzODZsaW51eC5oOiBJbmNsdWRlIDxzeXMvZmlsZS5oPi4KCSogY29mZi1tNjhrLXVuLmM6IG5ldyBmaWxlIHRvIGhhbmRsZSBuYW1lcyB3aXRoIHVuZGVyc2NvcmVzIG9uCglzdnIzIG1hY2hpbmVzLgoJKiBjb2ZmLW02OGsuYyAobTY4a19ydHlwZTJob3d0byk6IGFkZGVkICNpZmRlZiBPTkxZX0RFQ0xBUkVfUkVMT0NTCgl0byBub3QgZHVwbGljYXRlIHRoZSBmdW5jdGlvbiBpbiB0aGUgZXhlY3V0YWJsZS4KCShUQVJHRVRfU1lNLCBUQVJHRVRfTkFNRSwgTkFNRVNfSEFWRV9VTkRFUlNDT1JFKTogbmV3IG1hY3JvcyBuZWVkZWQKCWJ5IGNvZmYtbTY4ay11bi5jLgoJKiBjb2ZmY29kZS5oIChNQzY4S0JDU01BR0lDKTogY2FzZSBhZGRlZC4KCSogdGFyZ2V0cy5jOiBBZGQgbTY4a2NvZmZ1bl92ZWMuCgkqIGNvbmZpZ3VyZS5ob3N0OiBhZGRlZCBzdXBwb3J0IGZvciBCdWxsIGRweC8yLgoJKiBjb25maWcvZHB4Mi5taCwgaG9zdHMvZHB4Mi5oOiBuZXcgZmlsZXMuCgkqIE1ha2VmaWxlLmluOiBhZGRlZCB0YXJnZXQgY29mZi1tNjhrLXVuLgoKRnJpIEp1bCAgOSAwMDo0MzowNiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5oOiBBZGQgZGVmaW5pdGlvbiBvZiBNQUNIVFlQRV9PSy4KClRodSBKdWwgIDggMTQ6Mzc6NDQgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IERvbid0IHN1YnRyYWN0IHRoZSBhZGRlbmQKCWFnYWluIGZvciBjb2ZmLgoKCSogc3ltcy5jLCBiZmQtaW4yLmg6IERvYyBmaXguCgoJKiBjb2ZmY29kZS5oIChDQUxDX0FEREVORCk6IENoZWNrIGZvciBjb21tb24gc2VjdGlvbiB1c2luZyB0aGUKCXNlY3Rpb24gZmxhZyBhcyB3ZWxsIGFzIHRoZSBzeW1ib2wgZmxhZy4KClRodSBKdWwgIDggMTM6NDM6NTIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBob3N0cy9pMzg2YnNkLmg6IENvbmRpdGlvbmFsaXplIEhPU1RfU1RBQ0tfRU5EX0FERFIgb24gX19ic2RpX18uCglpMzg2YnNkLmM6IFJlbW92ZSBkZWZpbmVzIG9mIE5fVFhUKjsgdGhlIHZlcnNpb25zIGluIGFvdXQ2NC5oIHNob3VsZAoJYmUgc3VmZmljaWVudC4gIERlZmluZSBURVhUX1NUQVJUX0FERFIuCgpXZWQgSnVsICA3IDEwOjU2OjIxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHRyYW5zbGF0ZV9mcm9tX25hdGl2ZV9zeW1fZmxhZ3MpOiBSZW1vdmVkIHN0YXRlcAoJYXJndW1lbnQuICBKdXN0IGxldCBhbiBpbmRpcmVjdCBzeW1ib2wgcG9pbnQgdG8gdGhlIG5leHQgc3ltYm9sCgl3aXRob3V0IGZvcmNpbmcgdGhlIG5leHQgc3ltYm9sIHRvIGJlIHVuZGVmaW5lZC4gIENoYW5nZWQgYWxsCgljYWxsZXJzLgoJKiBocDMwMGhwdXguYyAoc2x1cnBfc3ltYm9sX3RhYmxlKTogQ2hhbmdlZCBjYWxsIHRvCgl0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzLgoJKiB0YXJnZXRzLmM6IEFkZGVkIGhwMzAwaHB1eF92ZWMuCgkqIE1ha2VmaWxlLmluIChocDMwMGhwdXgubyk6IEFkZGVkIGRlcGVuZGVuY2llcy4KClR1ZSBKdWwgIDYgMTM6MjQ6NTUgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsKTogUHV0IHNpbXBsZSBwb3dlci1vZi10d28KCXJlbG9jcyB0b2dldGhlciwgYW5kIGFkZCA2NC1iaXQgdmVyc2lvbnMuCgkoYmZkX2dlbmVyaWNfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogQXJndW1lbnQgdG8gYWxsb2NhCglpcyBzaXplX3QuCgoJKiBsaWJiZmQuYyAoYmZkX3htYWxsb2NfYnlfc2l6ZV90KTogTmV3IGZ1bmN0aW9uLgoJKiBvcG5jbHMuYyAoYmZkX2NhY2hlX2luaXQsIGJmZF9vcGVuX2ZpbGUpOiBBZGQgcHJvdG90eXBlcyB0bwoJZGVjbGFyYXRpb25zLgoJKG9ic3RhY2tfY2h1bmtfYWxsb2MpOiBVc2UgYmZkX3htYWxsb2NfYnlfc2l6ZV90LgoJKG5ld19iZmQpOiBQcm90b3R5cGUtc3R5bGUgZGVmaW5pdGlvbiwgdXNpbmcgREVGVU4uCgkoYmZkX2FsbG9jX2dyb3csIGJmZF9hbGxvYywgYmZkX3phbGxvYywgYmZkX3JlYWxsb2MpOiBTaXplCglhcmd1bWVudCBpcyB0eXBlIHNpemVfdCwgbm90IGJmZF9zaXplX3R5cGUuCgkqIGllZWUuYyAob2JzdGFja19jaHVua19hbGxvYyk6IFVzZSBiZmRfeG1hbGxvY19ieV9zaXplX3QuCgkqIGJmZC5jIChiZmRfZGVmYXVsdF9lcnJvcl90cmFwLCBiZmRfZXJyb3JfdHJhcCwKCWJmZF9lcnJvcl9ub25yZXByZXNlbnRhYmx0cmFwKTogUHJvdG90eXBlcy4KCSogbGliYmZkLWluLmggKGJmZF9hbGxvYywgYmZkX3phbGxvYywgYmZkX3JlYWxsb2MsCgliZmRfYWxsb2NfZ3Jvdyk6IEFkanVzdGVkIHByb3RvdHlwZXMgZm9yIGFyZyB0eXBlIGNoYW5nZS4KCSogYXJjaGl2ZS5jIChnZXRfZWx0X2F0X2ZpbGVwb3MsIGRvX3NsdXJwX2JzZF9hcm1hcCwgbm9ybWFsaXplLAoJZG9fc2x1cnBfY29mZl9hcm1hcCwgYmZkX2NvbnN0cnVjdF9leHRlbmRlZF9uYW1lX3RhYmxlKToKCVByb3RvdHlwZXMuCgkqIGVsZmNvZGUuaCAoZWxmX3N0cmluZ19mcm9tX2VsZl9zdHJ0YWIpOiBQcm90b3R5cGVzLgoJKiBsaWJlbGYuaCAoZWxmX3N0cmluZ19mcm9tX2VsZl9zZWN0aW9uLCBlbGZfZ2V0X3N0cl9zZWN0aW9uKToKCVByb3RvdHlwZXMuCgoJKiBNYWtlZmlsZS5pbiAoQUxMX01BQ0hJTkVTKTogUmVuYW1lZCBmcm9tIEJGRF9NQUNISU5FUy4KCShvZmlsZXMpOiBOZXcgdGFyZ2V0LiAgQnVpbGQgYSBsaXN0IG9mIHVuaXF1ZSBmaWxlIG5hbWVzLCBpbiBjYXNlCglhbnkgZ290IGR1cGxpY2F0ZWQuCgkoVEFSR0VUTElCKTogVXNlIGxpc3Qgb2YgZmlsZXMgZnJvbSBvZmlsZXMuCgkqIGNvbmZpZ3VyZS5pbjogU2V0IEJGRF9NQUNISU5FUyBhbmQgQkZEX0JBQ0tFTkRTIGRlcGVuZGluZyBvbgoJbWluaW1hbC1iZmQgZmxhZyBhbmQgdGFyZ2V0IG1ha2VmaWxlIGZyYWcgY29udGVudHMuCgoJKiBlbGZjb2RlLmggKGVsZl9yZWFkKTogRGVsZXRlIHN0YXRpYyBkZWNsYXJhdGlvbiwgc2luY2UgZnVuY3Rpb24KCWhhcyBtb3ZlZC4KCShlbGZfbWFwX3N5bWJvbHMpOiBXcml0ZSBvdXQgc2VjdGlvbiBzeW1ib2xzIGZvciBhbGwgc2VjdGlvbnMsIGZvcgoJbm93LgoJKGVsZl9zeW1ib2xfZnJvbV9iZmRfc3ltYm9sKTogQWxsb3cgbWF0Y2ggaWYgYm90aCBzeW1ib2xzIGFyZQoJc2VjdGlvbiBzeW1ib2xzIGZvciB0aGUgc2FtZSBzZWN0aW9uLgoJKGVsZl9maW5kX25lYXJlc3RfbGluZSk6IERvbid0IHByaW50IG1lc3NhZ2UsIGp1c3QgcmV0dXJuIGZhbHNlLgoKCSogbGliZWxmLmggKGJmZF9lbGZfbG9jYXRlX3NoKTogRGVjbGFyYXRpb24gZGVsZXRlZC4KCk1vbiBKdWwgIDUgMTY6NDg6MTEgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKCgkqIGNwdS1oODMwMC5jIChoODMwMF9zY2FuKTogRml4IHBhcnNpbmcgb2YgYXJjaGl0ZWN0dXJlIHN0cmluZy4KCkZyaSBKdWwgIDIgMTg6Mjc6MDAgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiBSZW1vdmUgYmZkLmggYW5kIHN0bXAtYmZkLmguCgkocmVhbGNsZWFuKTogUmVtb3ZlIGdlbmVyYXRlZCBoZWFkZXJzLgoKRnJpIEp1bCAgMiAxNDo1MTo1MSAxOTkzICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBzZWN0aW9uLmMgKGJmZF9zZXRfc2VjdGlvbl9jb250ZW50KTogIERlbnkgaWYgZmlsZSBpcyBub3Qgb3BlbmVkIHdpdGgKCXRoZSBwcm9wZXIgbW9kZSwgc2V0IG91dHB1dF9oYXNfYmVndW4gaWYgZmlsZSBpcyBvcGVuZW5lZCBmb3IgdXBkYXRlLgoJKiBhb3V0eC5oIChhb3V0Xypfc2V0X3NlY3Rpb25fY29udGVudCk6ICBSZW1vdmUgY2hlY2tzIHRoYXQgYXJlIG5vdwoJZG9uZSBpbiBiZmRfc2V0X3NlY3Rpb25fY29udGVudC4KCkZyaSBKdWwgIDIgMDk6MjU6MjAgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogaG9zdHMvc3RkLWhvc3QuaDogUmVtb3ZlZCBkZWNsYXJhdGlvbnMgb2YgcHJpbnRmLCBmcHJpbnRmLAoJZmNudGwsIGZyZWFkIGFuZCBmd3JpdGUuICBUaGV5IGFyZSBhbGwgZXJyb3IgcHJvbmUgZm9yIG9uZSByZWFzb24KCW9yIGFub3RoZXIuICBDaGFuZ2VkIGRlY2xhcmF0aW9uIG9mIG1lbWNociBmcm9tIGNoYXIgKiB0byBQVFIuCgoJKiBjb25maWd1cmUuaW4gKG1pcHMtKi1yaXNjb3MqKTogTmV3IHRhcmdldDsgdXNlIHJpc2Nvcy4KCSogY29uZmlndXJlLmhvc3QgKG1pcHMtKi1yaXNjb3MqKTogTmV3IGhvc3Q7IHVzZSByaXNjb3MuCgkqIGNvbmZpZy9yaXNjb3MubWggKEhERUZJTkVTKTogQWRkIC1HIDQuCgoJKiBsaWJhb3V0LmggKEdFVF9TV09SRCk6IFVzZSB0aGUgYmZkX2hfZ2V0X3NpZ25lZCBlbnRyeSBwb2ludHMKCXJhdGhlciB0aGFuIGNhc3RpbmcgdGhlIHJlc3VsdCBvZiBiZmRfaF9nZXQuCgpGcmkgSnVsICAyIDEwOjEzOjQ4IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluLCBob3N0cy9kZWx0YTY4LmgsIGNvbmZpZy9kZWx0YTY4Lm1oOiBBZGQgc3R1ZmYgZm9yCglNb3Rvcm9sYSBEZWx0YSA2OC4KCldlZCBKdW4gMzAgMDY6MDI6NDMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogdGFyZ2V0cy5jIChiZmRfZWxmNjRfe2JpZyxsaXR0bGV9X2dlbmVyaWNfdmVjKTogRGVjbGFyZSwgYW5kCglpbmNsdWRlIGluIHNlYXJjaCBsaXN0IGlmIEJGRDY0IGlzIGRlZmluZWQuCgoJKiBsaWJlbGYuaCAoQ0FUNCk6IEFkZGVkIGEgdmVyc2lvbiBmb3IgU2FiZXItQywgQU5TSSBtb2RlLgoJKGJmZF9lbGY2NF8qKTogRGVjbGFyYXRpb25zIGZvciA2NC1iaXQgdmVyc2lvbnMgb2YgbWFueSByb3V0aW5lcy4KClR1ZSBKdW4gMjkgMjI6NTA6NTkgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmNjQtdGFyZ2V0LmgsIGVsZjY0LWdlbmVyaWMuYzogTmV3IGZpbGVzLgoJKiBNYWtlZmlsZS5pbiAoQkZENjRfQkFDS0VORFMpOiBJbmNsdWRlIGVsZjY0LWdlbmVyaWMuby4KCShlbGY2NC1nZW5lcmljLm8pOiBMaXN0IGRlcGVuZGVuY2llcy4KCgkqIE1ha2VmaWxlLmluOiBMaXN0IHRhcmdldCBgYWxsJyBleHBsaWNpdGx5IGJlZm9yZSBob3N0L3RhcmdldAoJbWFrZWZpbGUgZnJhZ21lbnRzIGFyZSBpbmNsdWRlZCwgaW4gY2FzZSB0aGV5IGRlZmluZSBhbnkgbmV3Cgl0YXJnZXRzLgoKCSogZWxmY29kZS5oIChFTEZfUl9JTkZPLCBFTEZfUl9TWU0pOiBEZWZpbmUgYXMgMzItIG9yIDY0LWJpdAoJdmVyc2lvbnMgYXMgYXBwcm9wcmlhdGUuICBVc2VzIHVwZGF0ZWQuCgkoZWxmX2RlYnVnX3NlY3Rpb24pOiBEZWNsYXJlIGJlZm9yZSB1c2UuCgkoZWxmX2RlYnVnX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCgkoYmZkX3NlY3Rpb25fZnJvbV9zaGRyLCBiZmRfc2hkcl9mcm9tX3NlY3Rpb24sIGVsZl9mYWtlX3NlY3Rpb25zKToKCUFsaWdubWVudCB2YWx1ZSBpbiBzZWN0aW9uIGhlYWRlciBpcyBuX2J5dGVzLCBub3QgbG9nMi4KCShuZXdfc2VjdGlvbl9ob29rKTogRG8gbm90aGluZyBmb3Igbm93LgoJKGJmZF9zZWN0aW9uX2Zyb21fc2hkcik6IFVzZSBFbGZfRXh0ZXJuYWxfUmVsW2FdLCBub3QgMzItYml0Cgl2ZXJzaW9uIGV4cGxpY2l0bHkuCgkoZWxmX2NvcmVfZmlsZV9wKTogU2ltcGxpZnkgY2hlY2sgZm9yIGNvcnJlY3QgY2xhc3MgKHdvcmQgc2l6ZSkuCgkoZWxmX21ha2Vfc2VjdGlvbnMsIGVsZl9mYWtlX3NlY3Rpb25zLCBlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKToKCUluaXRpYWxpemUgYWxsIGZpZWxkcyB3aGVuIGNyZWF0aW5nIGRhdGEgc3RydWN0dXJlcy4KCShlbGZfbG9jYXRlX3NoKTogUmVuYW1lZCBmcm9tIGJmZF9lbGZYWF9sb2NhdGVfc2gsIG1hZGUgc3RhdGljLgoJKGVsZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBTZXQgY29ycmVjdCBjbGFzcyBpbiBvdXRwdXQKCWZpbGUuCgkoZWxmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFNlY3Rpb24gc3ltYm9scyBoYXZlIGVtcHR5IG5hbWVzIGluCglvdXRwdXQgZmlsZS4KCgkqIGxpYmJmZC5jIChiZmRfeG1hbGxvYywgemFsbG9jKTogQmUgc3VyZSB0byBjYXN0IG1hbGxvYywgbWVtc2V0CglhcmdzIHRvIHNpemVfdCBiZWZvcmUgY2FsbC4KCShiZmRfYWRkX3RvX3N0cmluZ190YWJsZSk6IENhc3QgemFsbG9jIGFyZyB0byBiZmRfc2l6ZV90eXBlLgoKVHVlIEp1biAyOSAxMDo0OTo0MiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfZmluZF9uZWFyZXN0X2xpbmUpOiBJZiBwcm9jZWR1cmUgaGFzIG5vIGxpbmUKCW51bWJlciBpbmZvcm1hdGlvbiwgcmV0dXJuIDAgZm9yIGxpbmUgbnVtYmVyLgoKTW9uIEp1biAyOCAxMDo0NTowMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHNvbWVfYW91dF9vYmplY3RfcCk6IElmICpvbGRyYXdwdHIgaXMgbm9uLU5VTEwsIGNvcHkgaXQKCWludG8gKnJhd3B0ci4KClN1biBKdW4gMjcgMDk6MDU6MTkgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBob3N0cy9yaXNjb3MuaDogRGVmaW5lIE5CUEcgYW5kIFVQQUdFUy4KClN1biBKdW4gMjcgMTY6Mjg6MjYgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiBEb24ndCB1c2Ugb2JqX3Jhd19zeW1zIGFzCglsdmFsdWU7IGl0IGNvbnRhaW5zIGEgY2FzdC4KCkZyaSBKdW4gMjUgMTc6MDk6NTUgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYW91dHguaCAoaGFzaCwgY29tcGFyZSwgc3RydWN0IHN0cmluZ3RhYl9lbnRyeSwgYWRkX3RvX3N0cmluZ3RhYik6CglVc2UgdW5zaWduZWQgaGFzaCB2YWx1ZXMgZm9yIGJldHRlciBoYXNoaW5nLgoJKGhhc2gpOiBIYXNoIGluIHRoZSBzdHJpbmcgbGVuZ3RoIGZvciBsb25nIHN0cmluZ3MuCgpUaHUgSnVuIDI0IDE1OjQ3OjUxIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGNvbXBhcmUpOiBSZXBsYWNlIDMgaWYncyB3aXRoIGEgc3VidHJhY3Rpb24uCgkodHJhbnNsYXRlX3RvX25hdGl2ZV9zeW1fZmxhZ3MsIGFkZF90b19zdHJpbmd0YWIpOiBSZW9yZGVyIHRlc3RzCglpbiBkZWNyZWFzaW5nIG9yZGVyIG9mIHN1Y2Nlc3MsIGFzIGFuIG9wdGltaXphdGlvbi4KCShoYXNoKTogVGFrZSBhIGxlbmd0aCBhcmc7IGlnbm9yZSBjaGFycyBhZnRlciAjMjUsIGZvciBzcGVlZC4KCShhZGRfdG9fc3RyaW5ndGFiKTogUGFzcyBsZW5ndGggdG8gaGFzaC4KClRodSBKdW4gMjQgMTc6MjU6NTEgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHBvc2VpZG9uLmN5Z251cy5jb20pCgoJKiBlbGYzMi1zcGFyYy5jIChzcGFyY19yZWxvY19tYXApOiBBZGQgU1BBUkNfV0RJU1AyMiByZWxvYy4KCgkqIGVsZmNvZGUuaCAoZWxmX25ld19zZWN0aW9uX2hvb2spOiBEbyBub3RoaW5nIGZvciBub3cuCgkoZWxmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IE91dHB1dCBjb21tb24gc3ltYm9scyB0aGUgd2F5IEVMRgoJd2FudHMgdGhlbS4KCldlZCBKdW4gMjMgMTY6MjA6MDcgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHBvc2VpZG9uLmN5Z251cy5jb20pCgoJKiBsaWJlbGYuaCAoc3RydWN0IGVsZl9vYmpfdGRhdGEgYW5kIGFzc29jaWF0ZWQgbWFjcm9zKTogTW92ZWQKCWhlcmUgZnJvbSBlbGZjb2RlLmguICBBIGNvdXBsZSBvZiBzaXplLXNwZWNpZmljIHN0cnVjdHVyZSBwb2ludGVycwoJd2VyZSBjaGFuZ2VkIHRvIFBUUjsgdXNlcyBmaXhlZCBhcHByb3ByaWF0ZWx5LgoJKGVsZjMyX3N5bWJvbF90eXBlLCBlbGY2NF9zeW1ib2xfdHlwZSk6IFNlcGFyYXRlZCBkZWZpbml0aW9ucy4KCShiZmRfZWxmX21rb2JqZWN0KTogUmVuYW1lZCBmcm9tIGJmZF9lbGYzMl9ta29iamVjdC4KCShiZmRfZWxmMzJfbWtvYmplY3QsIGJmZF9lbGY2NF9ta29iamVjdCwgZWxmX21rb2JqZWN0KTogTmV3Cgl0ZW1wb3JhcnkgbWFjcm9zIHRvIGVhc2UgbmFtZSBjaGFuZ2UuCgkqIGVsZi5jIChlbGZfcmVhZCwgZWxmX21rb2JqZWN0LCBlbGZfZ2V0X3N0cl9zZWN0aW9uLAoJZWxmX3N0cmluZ19mcm9tX2VsZl9zZWN0aW9uLCBiZmRfZWxmX2ZpbmRfc2VjdGlvbik6IE1vdmVkIGhlcmUKCWZyb20gZWxmY29kZS5oLgoJKiBkb2MvTWFrZWZpbGUuaW4gKGxpYmJmZC5oKTogUHJvY2VzcyBlbGYuYyB0b28uCgkqIE1ha2VmaWxlLmluIChlbGYubyk6IE5vdGUgbmV3IGRlcGVuZGVuY2llcy4KCgkqIGVsZmNvZGUuaDogTG90cyBvZiBzdHVmZiBtb3ZlZCBlbHNld2hlcmUuICBEZWxldGVkIHNvbWUgdW51c2VkCgljb2RlLCB0d2Vha2VkIHNvbWUgZGVidWcgaG9va3MuCgkoZWxmX3NsdXJwX3JlbG9jYV90YWJsZSk6IFRyYW5zbGF0ZSBFTEYgc2VjdGlvbiBzeW1ib2xzIGludG8gQkZECglzZWN0aW9uIHN5bWJvbHMuCgpXZWQgSnVuIDIzIDExOjM0OjIxIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogaG9zdHMvcmlzY29zLmg6IE5ldyBmaWxlLgoKVHVlIEp1biAyMiAxNDozNToyMCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyLCBjYXNlIFNIVF9QUk9HQklUUyk6IEV2ZW4gaWYKCXNlY3Rpb24gYWxyZWFkeSBleGlzdHMsIHVzZSBpdHMgcG9pbnRlciB0byBmaWxsIGluIHJhd2RhdGEgc2xvdC4KClR1ZSBKdW4gMjIgMTY6MzY6NTEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBob3N0cy9zdGQtaG9zdC5oOiBSZXR1cm4gdmFsdWUgb2YgcHV0cyBhbmQgZnB1dHMgaXMgaW50IG5vdCB2b2lkLgoKVHVlIEp1biAyMiAxNDoyNTo1OCAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChob3d0b190YWJsZV9leHQpOiBDb21tZW50IHRoZSBmaWVsZCBuYW1lcy4KCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEZpeCBtYXggYW5kIG1pbiB2YWx1ZXMuCgpNb24gSnVuIDIxIDE4OjE5OjE0IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBwb3NlaWRvbi5jeWdudXMuY29tKQoKCSogZWxmMzItdGFyZ2V0LmgsIGVsZjMyLWhwcGEuYywgZWxmY29kZS5oOiBVc2UgbmV3CglzaXplLWluZGVwZW5kZW50IGVsZiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuCgkqIGVsZmNvZGUuaCAocHV0X3dvcmQsIGdldF93b3JkKTogRGVmaW5lIGFzIGFwcHJvcHJpYXRlIGZvcgoJYXJjaGl0ZWN0dXJlIHdvcmQgc2l6ZS4gIFN0cnVjdHVyZSBzd2FwcGluZyBmdW5jdGlvbnMgY2hhbmdlZCB0bwoJdXNlIHRoZW0gYXMgYXBwcm9wcmlhdGUuCgoJKiBjb25maWd1cmUuaW46IElmIGNvbXBpbGluZyA2NC1iaXQgYmFjayBlbmRzLCBkbyB0aGVtIGJlZm9yZQoJMzItYml0IG9uZXMuCgoJKiBsaWJlbGYuaDogVXNlIG5ldyBzaXplLWluZGVwZW5kZW50IHZlcnNpb25zIG9mIGVsZiBpbnRlcm5hbCBkYXRhCglzdHJ1Y3R1cmVzLgoJKHN5bWJvbF90eXBlKTogUmVvcmRlcmVkIHRvIHB1dCBhbnkgZmllbGRzIGRlcGVuZGVudCBvbiB0YXJnZXQKCXNpemUgYXQgdGhlIGVuZC4KCShlbGZfYmFja2VuZF9kYXRhKTogUmVuYW1lZCBmcm9tIGVsZiMjX2JhY2tlbmRfZGF0YSBhbmQgbWFkZQoJc2l6ZS1pbmRlcGVuZGVudC4KCShlbGZfc2VjdF90aHVuayk6IE5vdyBzaXplLWluZGVwZW5kZW50LgoKCSogbGliYmZkLmMgKGJmZF9sb2cyKTogTm93IHJldHVybnMgdW5zaWduZWQgaW50LgoKTW9uIEp1biAyMSAxMjozMDo0NyAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIFJlbmFtZSBjb25maWcvbTg4ay1hb3V0Lm10IHRvIGNvbmZpZy9ub29wLm10LgoJY29uZmlndXJlLmluOiBVc2UgaXQgZm9yIG1pcHMtKi1ic2QqLgoKU3VuIEp1biAyMCAyMDozMjoxOSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIGNwdS1tNjhrLmMgKGFyY2hfaW5mb19zdHJ1Y3QpOiBFbGltaW5hdGUgInBhcnRpYWxseSBicmFja2V0ZWQKCWluaXRpYWxpemVyIiB3YXJuaW5nIGZyb20gZ2NjLgoJKiBjcHUtaDg1MDAuYyAoYXJjaF9pbmZvX3N0cnVjdCk6IExpa2V3aXNlLgoJKiBjcHUtc2guYyAoYXJjaF9pbmZvX3N0cnVjdCk6IExpa2V3aXNlLgoKCSogY3B1LWg4MzAwLmMgKGxvY2FsX2JmZF9yZWxvY190eXBlX2xvb2t1cCwgaG93dG8qX2NhbGxiYWNrLAoJaG93dG9fKik6IFVudXNlZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBjb21tZW50ZWQgb3V0LgoJKiBjcHUtejhrLmMgKGxvY2FsX2JmZF9yZWxvY190eXBlX2xvb2t1cCwgaG93dG8qX2NhbGxiYWNrLAoJaG93dG9fKik6IExpa2V3aXNlLgoJKiBjcHUtaDg1MDAuYyAoY29tcGF0aWJsZSk6IExpa2V3aXNlLgoJKiBjcHUtc2guYyAoY29tcGF0aWJsZSk6IExpa2V3aXNlLgoKCSogaHAzMDBocHV4LmMgKHN3YXBfc3RkX3JlbG9jX2luKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZXMuCglBbHdheXMgc2V0IGEgdmFsaWQgbGVuZ3RoIHZhbHVlLCBldmVuIGZvciBpbnZhbGlkIGlucHV0LgoKCSogc3JlYy5jIChzcmVjX3dyaXRlX3N5bWJvbHMpOiBVc2Ugc3ByaW50Zl92bWEuCgoJKiBiZmQtaW4uaCAodWludDY0X3R5cGVMT1csIHVpbnQ2NF90eXBlSElHSCwgaW50NjRfdHlwZSwKCXVpbnQ2NF90eXBlKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb25zLgoJKiBob3N0cy9zdGQtaG9zdC5oIChpbnQ2NCBzdHVmZik6IFJlbW92ZSB0aGVtIGZyb20gaGVyZS4KCgkqIGJmZC1pbi5oIChzcHJpbnRmX3ZtYSk6IERlZmluZSBwYXJhbGxlbCB0byBmcHJpbnRmX3ZtYS4KCgkqIGVsZjMyLWkzODYuYyAoZWxmX2kzODZfcmVsb2NfdHlwZV9sb29rdXApOiBEZWxldGUgdW51c2VkCgl2YXJpYWJsZS4gIEFkZGVkIGRlZmF1bHQgY2FzZSB0byBzd2l0Y2guCgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzKTogQmVmb3JlIGNhc3RpbmcKCXBvaW50ZXJzIHRvIGludGVnZXJzLCBtYWtlIHN1cmUgdGhlIGludGVnZXIgdHlwZSBpcyB3aWRlIGVub3VnaC4KCSogY29mZi1taXBzLmMgKGVjb2ZmX3NldF9zeW1ib2xfaW5mbyk6IERpdHRvLgoKCSogc2VjdGlvbi5jIChiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBTaW5jZSBgY291bnQnIGlzIHVuc2lnbmVkLAoJZG9uJ3QgYm90aGVyIGNvbXBhcmluZyBmb3IgbGVzcy10aGFuLXplcm8uCgkoYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogRGl0dG8uCgoJKiBlbGZjb2RlLmggKGJmZF9hZGRfdG9fc3RydGFiKTogTm93IHN0YXRpYy4KCShzeW1faXNfZ2xvYmFsKTogTmV3IGZ1bmN0aW9uLgoJKGVsZl9tYXBfc3ltYm9scyk6IENhbGwgaXQuICBOb3cgcmV0dXJucyB2b2lkLiAgUmVtb3ZlZCB1bnVzZWQKCWxvY2FsIHZhcmlhYmxlLgoJKGJmZF9zZWN0aW9uX2Zyb21fc2hkcik6IE1hcmsgc3RyaW5nIHRhYmxlcyBvdGhlciB0aGFuIGZvciBzZWN0aW9uCglhbmQgc3ltYm9sIG5hbWVzIGFzIG5vcm1hbCBzZWN0aW9ucyBoYXZpbmcgY29udGVudHMuCgkoZml4X3VwX3N0cnRhYnMpOiBOZXcgZnVuY3Rpb247IGZpeGVzIHVwIEVMRiBoZWFkZXIgZmllbGRzIGZvcgoJc3RhYiBzZWN0aW9ucyB3aXRoIHN0cmluZyB0YWJsZXMgYXNzb2NpYXRlZC4KCShlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogTWFwIGZpeF91cF9zdHJ0YWJzIG92ZXIgYWxsIEJGRAoJc2VjdGlvbnMuICBSZW9yZGVyZWQgY29uZGl0aW9uIHRlc3RzIGZvciBzeW1ib2wgZmxhZ3M7IGRlZmF1bHQgdG8KCWxvY2FsLW9iamVjdCB2YWx1ZSBpbnN0ZWFkIG9mIGdsb2JhbC1vYmplY3QuCgkoZWxmX3N5bWJvbF9mcm9tX2JmZF9zeW1ib2wpOiBIaWQgY29uZGl0aW9uYWxseS11c2VkIHZhcmlhYmxlCglpbnNpZGUgY29uZGl0aW9uIHRlc3QuCgkoZWxmX3ByaW50X3N5bWJvbCk6IFVzZSBmcHJpbnRmX3ZtYS4KCShlbGZfaWR4X29mX3N5bSwgYmZkX3NoZHJfZnJvbV9zZWN0aW9uKTogVW51c2VkIGZ1bmN0aW9ucwoJY29tbWVudGVkIG91dC4KCgkqIGJmZC1pbi5oIChpbnQ2NF90eXBlLCB1aW50NjRfdHlwZSk6IERlZmluZSB0aGVzZSBpZiB3ZSBmYWxsCgliYWNrIHRvICJsb25nIGxvbmciIGZvciBIT1NUXzY0X0JJVC4KCgkqIGxpYmVsZi5oIChlbGZOQU1FLCBFbGZOQU1FKTogTmV3IHZlcnNpb25zIHRvIGdldCBkZXNpcmVkIHJlc3VsdHMKCXdpdGhvdXQgdXNpbmcgaW52YWxpZCBBTlNJIEMgcHJlcHJvY2Vzc2luZyB0b2tlbnMuCgoJKiBlbGYzMi10YXJnZXQuaCAoYmZkX2VsZjMyX25ld19zZWN0aW9uX2hvb2spOiBEZWxldGUgbWFjcm8uCgkqIGxpYmVsZi5oIChiZmRfZWxmMzJfbmV3X3NlY3Rpb25faG9vayk6IERlY2xhcmUuCgkqIGVsZmNvZGUuaCAobmV3X3NlY3Rpb25faG9vayk6IERlZmluZSBoZXJlLgoKCSogaG9zdHMvc3BhcmMuaCwgaG9zdHMvc3RkLWhvc3QuaCwgaG9zdHMvaTM4NmJzZC5oOiBQcm90ZWN0CglhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbnMuCgoJKiBob3N0cy9uZXdzLmg6IEluY2x1ZGUgaG9zdHMvc3RkLWhvc3QuaCwgbm90IHBsYWluIHN0ZC1ob3N0LmguCgoJKiBNYWtlZmlsZS5pbiAoYmZkLmgpOiBHZW5lcmF0ZSBpbnRvIGN1cnJlbnQgZGlyZWN0b3J5IGJ5IGdyYWJiaW5nCgk2NC1iaXQgZGVmaW5pdGlvbiAoaWYgYW55KSBmcm9tIHN5c2RlcC5oLgoJKiBiZmQtaW4uaDogUHV0IGluIG1hcmtlciBmb3Igc3lzZGVwLmggaW5jbHVzaW9uLgoKRnJpIEp1biAxOCAxOTo1NzoyMyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogQ2hlY2sgZm9yIG92ZXJmbG93IG9uCglwYy1yZWxhdGl2ZSByZWxvY2F0aW9ucyBpZiB0aGUgaG93dG8gYXNrZWQgZm9yIGl0LgoKRnJpIEp1biAxOCAxNjowMDoyMCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChzdG1wLWJmZC5oKTogSWdub3JlIG5vbnplcm8gZXhpdCBzdGF0dXMgZnJvbSBncmVwLgoKRnJpIEp1biAxOCAxNjo1NDoyOSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9yaXNjb3MubXtoLHR9OiBOZXcgZmlsZXMuCgkqIGNvbmZpZ3VyZS57aG9zdCxpbn06IFVzZSB0aGVtLgoKRnJpIEp1biAxOCAxMjo1NToxMCAxOTkzICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGVsZjMyLW1pcHMuYzogY29tbWVudCBjaGFuZ2UuICBUaGlzIGlzIGEgbWlwcyBmaWxlLCBub3QgODhrLgoKTW9uIEp1biAxNCAxNDowMjo0MSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGNhY2hlLmMgKGJmZF9jYWNoZV9pbml0KTogSW5jcmVtZW50IG9wZW5fZmlsZXMgYW5kIGNhbGwgY2xvc2Vfb25lCglpZiBuZWNlc3NhcnkuCgkoYmZkX29wZW5fZmlsZSk6IERvbid0IGluY3JlbWVudCBvcGVuX2ZpbGVzIGhlcmUuCgpGcmkgSnVuIDE4IDEwOjAwOjE0IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnL2RlbHRhODgubWg6IERvbid0IHNldCBDQy4KCgkqIE1ha2VmaWxlLmluOiBBZGQgZWxmMzIte21pcHMsbTg4ayxnZW5lcmljfS4KCWVsZjMyLXttaXBzLG04OGssZ2VuZXJpY30uYzogTmV3IGZpbGVzLgoJdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogSW5jbHVkZSBiZmRfZWxmMzJfe21pcHMsbTg4ayxnZW5lcmljfV92ZWMuCgllbGZjb2RlLmggKGVsZl9vYmplY3RfcCk6IE1hdGNoIGVsZjMyLWdlbmVyaWMgZm9yIGFsbCBtYWNoaW5lcyB3aGljaAoJZG9uJ3QgbWF0Y2ggYSBkaWZmZXJlbnQgdGFyZ2V0LgoKRnJpIEp1biAxOCAwMzoxMjoxMiAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCglFbGltaW5hdGUgImludDhfdHlwZSIsICJpbnQxNl90eXBlIiwgImludDMyX3R5cGUiLCBhbmQgdGhlaXIKCXZhcmlhbnRzIGZyb20gdGhlIEJGRCB1bml2ZXJzZS4gIExlYXZlIHRoZSA2NC1iaXQgdHlwZXMgZm9yIG5vdywKCXNpbmNlIHRoZXkgYXJlIGluIGZsdXguCgoJKiBhb3V0eC5oLCBocDMwMGhwdXguYzogIEVsaW1pbmF0ZSBuZWVkbGVzcyAoaW50MzJfdHlwZSkgY2FzdHMuCgkqIGxpYmFvdXQuaCAoR0VUX1NXT1JEKTogIENvbnZlcnQgKGludDMyX3R5cGUpIHRvIChpbnQpLgoJKiBpZWVlLmM6ICBDb252ZXJ0IHVpbnQ4ZV90eXBlID0+IHVuc2lnbmVkIGNoYXIuCgkqIG9hc3lzLmM6ICBFeHRlbnNpdmUgY2hhbmdlcyB0byBlbGltaW5hdGUgb2Jzb2xldGUgdHlwZXMuCglUaGVzZSBkZXBlbmQgb24gY2hhbmdlcyBpbiAuLi9pbmNsdWRlL29hc3lzLmggYXMgd2VsbC4KCSogaG9zdHMvKi5oOiAgUmVtb3ZlIGRlY2xhcmF0aW9ucyBvZiBhbGwgdGhlc2UgdHlwZXMuCgpNb24gSnVuIDE0IDE0OjAyOjQxIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogaG9zdHMvZGVsdGE4OC5oOiAjaWYgMCBvdXQgc29tZSBkZWNsYXJhdGlvbnMgd2hpY2ggY29uZmxpY3Qgd2l0aAoJc3lzdGVtIGhlYWRlcnMuCgpNb24gSnVuIDE0IDE3OjA4OjE4IDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogcmVtb3ZlIHBhcmVudGRpciBjcnVmdAoKTW9uIEp1biAxNCAxOTowNDowOSAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogaHBwYS5jIChocHBhX2dldF9zeW1ib2xfaW5mbyk6ICBSZW1vdmUgcmVkdW5kYW50IGNvcHkuCgkqIEV4cHVyZ2F0ZSByYW5kb20gREVGVU5zIHRoYXQgaGF2ZSBjcmVwdCBpbi4KCk1vbiBKdW4gMTQgMTA6MjM6NTMgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmMgKGVjb2ZmX3NldF9zeW1ib2xfaW5mbyk6IENvbnN0cnVjdG9yIHNlY3Rpb25zIHNob3VsZAoJb25seSBiZSBhbGlnbmVkIHRvIGEgNCBieXRlIGJvdW5kYXJ5LgoKU2F0IEp1biAxMiAxNjoxMzoxNyAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3N0ZC1ob3N0LmggKHN0cnVjdCBpbnQ2NGVfc3RydWN0KTogUmVtb3ZlIG5lZWRsZXNzIHR5cGVkZWYKCWtleXdvcmQuCgpGcmkgSnVuIDExIDE0OjI1OjM0IDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCAoc3Vub3M0X3dyaXRlX29iamVjdF9jb250ZW50cyk6IHNldCBmbGFncyB0byAxLCBicmVha2luZwoJMTkyNyBidXQgZml4aW5nIHNvbWUgb3RoZXIgaW1wb3J0YW50IHRoaW5ncy4KClRodSBKdW4gMTAgMjA6MzY6MjIgMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3N0ZC1ob3N0LmggKGludDY0ZV90eXBlKTogRml4IGRlZmluaXRpb24uCgpUaHUgSnVuIDEwIDExOjQ4OjI4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9zZWNfdG9fc3R5cF9mbGFncyk6IFVzZSBTVFlQX01JUFNfSU5JVCBmb3IKCXNlY3Rpb24gbmFtZWQgX0lOSVQuICBEb24ndCBzZXQgU1RZUF9URVhUIHVubGVzcyBTRUNfQ09ERSBpcyBzZXQuCgkoZWNvZmZfc3R5cF90b19zZWNfZmxhZ3MpOiBUcmVhdCBhIFNUWVBfTUlQU19JTklUIHNlY3Rpb24gbGlrZQoJYSBTVFlQX1RFWFQgc2VjdGlvbi4KCldlZCBKdW4gIDkgMTY6NDg6MTMgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwsIGhlYWRlcnMpOiBkb24ndCBwdXQgY29tbWVudHMgYWZ0ZXIgYSB0YWIKCWluIHRoZSBhY3Rpb25zIHNlY3Rpb24gb2YgYSBydWxlCgpXZWQgSnVuICA5IDE1OjAwOjAxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9ta29iamVjdF9ob29rKTogTWFyayBaTUFHSUMgZmlsZXMgYXMgRF9QQUdFRC4KCShlY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBJZiBub3QgRF9QQUdFRCwgZG9uJ3QgYWRkIHRoZQoJc2VjdGlvbiBoZWFkZXJzIHRvIHRleHRfc2l6ZS4gIElmIG5vdCBEX1BBR0VELCBzZXQgdGhlIG1hZ2ljCgludW1iZXIgdG8gT01BR0lDIHJhdGhlciB0aGFuIFpNQUdJQy4gIElmIGNyZWF0aW5nIGEgRF9QQUdFRAoJZXhlY3V0YWJsZSwgdGhlIGV4ZWN1dGFibGUgbXVzdCBmdWxseSBvY2N1cHkgYW4gZXZlbiBudW1iZXIgb2YKCXBhZ2VzLgoJKGVjb2ZmX3NldF9zeW1ib2xfaW5mbywgbWFrZV9iZmRfYXNlY3Rpb24sIGVjb2ZmX2xpdHRsZV92ZWMsCgllY29mZl9iaWdfdmVjKTogQ29uc2lzdGVudGx5IHNldCBzZWN0aW9uIGFsaWdubWVudCBwb3dlciB0byA0LAoJc2luY2UgRUNPRkYgc2VjdGlvbnMgc2hvdWxkIGJlIG11bHRpcGxlcyBvZiAxNiBieXRlcy4KCShlY29mZl9saXR0bGVfdmVjLCBlY29mZl9iaWdfdmVjKTogQWRkZWQgRF9QQUdFRCB0byBvYmplY3RfZmxhZ3MuCglNYWRlIGFyX3BhZF9jaGFyIGFuZCBhcl9tYXhfbmFtZWxlbiBhZ3JlZSBmb3IgYm90aC4KClR1ZSBKdW4gIDggMjA6Mjg6MDIgMTk5MyAgTWFyayBFaWNoaW4gIChlaWNoaW4gYXQgdHdlZWRsZWR1bWJlcikKCgkqIGVsZmNvZGUuaCAoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6IHN1YnRyYWN0IHNlY3Rpb24gdm1hIGZyb20KCXN5bWJvbCB2YWx1ZSwgc2luY2UgYmZkIHN5bWJvbHMgYXJlIHNlY3Rpb24gcmVsYXRpdmUsIGJ1dCBFTEYKCXN5bWJvbHMgYXJlbid0LgoKVHVlIEp1biAgOCAxMjowODoyNyAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogY3B1LWk5NjAuYywgY3B1LWg4MzAwLmMgKGNvbXBhdGlibGUpOiBNYWtlIHN0YXRpYy4KClR1ZSBKdW4gIDggMTQ6Mjc6NTYgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQHJ0bC5jeWdudXMuY29tKQoKCSogaG9zdHMvbmV3cy5oLCBjb25maWcvbmV3cy5taDogTmV3IGZpbGVzLgoKVHVlIEp1biAgOCAxMjowODoyNyAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogYmZkLWluMi5oLCBhcmNodXJlcy5jIChiZmRfbWFjaF9oODMwMFtoXSk6IG5ldyBkZWZpbmVzLgoJKiBjb2ZmLWg4MzAwLmM6IE1vcmUgYWRkcmVzc2luZyBtb2Rlcy4KCSogY29mZmNvZGUuaCAoY29mZl9zZXRfYXJjaF9tYWNoX2hvb2spOiBDb3BlIHdpdGggSDgzMDAgbWFnaWMKCW51bWJlci4KCSogY3B1LWg4MzAwLmM6IFJlbW92ZWQgZGlzYXNzZW1ibGUgc3R1ZmYuIChoODMwMF9zY2FuKTogUmVjb2duaXNlCglIOC8zMDBIIG5hbWUuIChjb21wYXRpYmxlKTogTmV3IGZ1bmN0aW9uLgoJKiByZWxvYzE2LmMgKGJmZF9jb2ZmX3JlbG9jMTZfZ2V0X3JlbG9jYXRlZF9zZWMpOiBDb3BlIHdpdGggbW9yZQoJYWRkcmVzc2luZyBtb2Rlcy4KClR1ZSBKdW4gIDggMTA6MzA6MTMgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmMgKGVjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucywKCWVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IE9ubHkgcm91bmQgdG8gcGFnZSBib3VuZGFyaWVzIGlmCglEX1BBR0VEIGZsYWcgaXMgc2V0IGZvciB0aGUgb3V0cHV0IEJGRC4KCkZyaSBKdW4gIDQgMTU6NDc6NTIgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGdldF9pbmRleCwgY29mZl9zbHVycF9zeW1ib2xfdGFibGUpOiBGaXggcG9pbnRlcgoJY2FzdHMgdG8gd29yayBvbiBtYWNoaW5lIHdoZXJlIHNpemVvZihsb25nKSAhPSBzaXplb2YoaW50KSAhPQoJc2l6ZW9mKGNoYXIgKikuCiAgICAgICAgKiBjb2ZmZ2VuLmMgKGNvZmZfZ2V0X25vcm1hbGl6ZWRfc3ltdGFiKTogRGl0dG8uCgkqIGNwdS1oODMwMC5jIGNvZmYtaDgzMDAuYzogU3VwcG9ydCBmb3IgSDgvMzAwLUguCgpGcmkgSnVuICA0IDE1OjI0OjI3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvZmZnZW4uYyAoY29mZl93cml0ZV9zeW1ib2xzKTogRm9yIGVtcHR5IHN0cmluZyB0YWJsZSwgd3JpdGUKCW91dCA0IGluIGNvcnJlY3QgYnl0ZSBvcmRlci4gIChmcm9tIG1pbnlhcmRAYm5yLmNhKQoKCSogZWxmMzItaHBwYS5jOiBEb24ndCBpbmNsdWRlIGxpYmhwcGEuaCBmb3Igbm93OyBkZWZpbmUKCUJZVEVTX0lOX1dPUkQgaW5zdGVhZCwgdW50aWwgVXRhaCBzZW5kcyBhIGJldHRlciBmaXguCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBVc2UgeG1hbGxvYyBhbmQgeHJlYWxsb2MgaW5zdGVhZAoJb2YgbWFsbG9jIGFuZCByZWFsbG9jLgoKRnJpIEp1biAgNCAwNzo0OTowMSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKG1pcHMtKi1lY29mZmwqKTogTmV3IHRhcmdldDsgdXNlIGRlY3N0YXRpb24uCgkobWlwcy0qLWVjb2ZmKik6IEFkZGVkIHRyYWlsaW5nICcqJy4KCgkqIGNvZmYtbWlwcy5jIChlY29mZl9nZXRfZGVidWcpOiBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBmaXJzdCBQRFIKCWZvciB0aGUgRkRSLCBub3QgZnJvbSB0aGUgZmlyc3QgUERSIGluIHRoZSBmaWxlLgoKVGh1IEp1biAgMyAxNjo0MToxMCAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogaHBwYS5jIChocHBhX2dldF9zeW1ib2xfaW5mbyk6ICBOZXcgZnVuYyBuZWVkZWQgZm9yIEpVTVBfVEFCTEUuCgpUaHUgSnVuICAzIDE1OjMzOjU3IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUBydGwuY3lnbnVzLmNvbSkKCgkqIGhwcGEuYyAoaHBwYV9nZXRfc3ltYm9sX2luZm8pOiBOZXcgZnVuY3Rpb24uCgpUaHUgSnVuICAzIDEzOjA3OjQyIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoZWxmX21hcF9zeW1ib2xzKTogRG9uJ3QgY3Jhc2ggaWYgbm8gc3ltYm9scyBoYXZlIGJlZW4KCWFsbG9jYXRlZCB5ZXQuCgoJRnJvbSBQZXRlciBIb29nZW5ib29tIChob29nZW5Ac2NoYWZlci5jcy51dGFoLmVkdSk6CgkqIGxpYmhwcGEuaCAoTUFYQ09NTEVOKTogRGVmaW5lIHVuY29uZGl0aW9uYWxseS4KCShfUEFfUklTQ19JRCk6IE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgkqIGVsZjMyLWhwcGEuYzogSW5jbHVkZSBsaWJocHBhLmguCgoJRnJvbSBSYWxwaCBDYW1wYmVsbDoKCSogaG9zdHMvbWlwc2JzZC5oIChIT1NUX0RBVEFfU1RBUlRfQUREUik6IERlbGV0ZSBkZWZpbml0aW9uLgoKCSogZWxmMzItaHBwYS5oIChzeW1leHRfcm9vdFAsIHN5bWV4dF9sYXN0UCk6IERlbGV0ZSBkZWNscy4KClRodSBKdW4gIDMgMDA6MjM6NTMgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogY29uZmlnL2dvMzIubWg6IGRlZmluZSBFWFRSQUxJQkVTIHRvIC1sbSAoZm9yIGJpbnV0aWxzKSwgYWxzbwoJcmVtb3ZlIGRlZmluZXMgb2YgX19NU0RPU19fIGFuZCBfX0dPMzJfXyAodGhlc2UgYXJlIGluIHRoZQoJY29tcGlsZXIgbm93KS4KCldlZCBKdW4gIDIgMTc6NTc6MTMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCUZyb20gVXRhaDoKCSogaG9zdHMvaHBwYWJzZC5oOiBFbGltaW5hdGUgdXNlIG9mIG9ic29sZXRlIEVYRlVOLgoJKiBjb25maWcvaHBwYWJzZC5taDogRG9uJ3QgdXNlIHJhbmxpYi4KClR1ZSBKdW4gIDEgMDQ6MTU6NTcgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGtyLXBjLmN5Z251cy5jb20pCgoJKiBlbGYuYzogTmV3IGZpbGUsIGZvciB3b3JkLXNpemUgaW5kZXBlbmRlbnQgY29kZS4KCSogZWxmY29kZS5oIChlbGZfaGFzaCk6IE1vdmVkIHRvIHRoZXJlLCByZW5hbWVkIGJmZF9lbGZfaGFzaC4KCSogTWFrZWZpbGUuaW46IEluY2x1ZGUgZWxmLm8gaW4gc3RhbmRhcmQgb2JqZWN0cy4KCgkqIGJmZC1pbi5oIChDQVQzKTogRGVmaW5lIGhlcmUuCgkqIGxpYmFvdXQuaCwgbGliZWxmLmg6IE5vdCBoZXJlLgoKCSogbGliZWxmLmggKHN0cnVjdCBzdHJ0YWIpOiBEZWZpbmUgaGVyZS4KCShiZmRfZWxmX2xvY2F0ZV9zaCk6IERlY2xhcmUgaGVyZS4KCSogZWxmY29kZS5oIChzdHJ1Y3Qgc3RydGFiKTogRGVmaW5pdGlvbiBkZWxldGVkLgoKCSogcmVsb2MuYyAoZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsKTogQWRkZWQgSFBQQV9QQ1JFTF9DQUxMXzEyLgoKCSogTWFrZWZpbGUuaW46IE1ha2UgImFsbCIsIG5vdCAiYmZkLmgiLCBiZSB0aGUgZGVmYXVsdCB0YXJnZXQuCgkoc3RtcC1iZmQuaCk6IE5ldyB0YXJnZXQ7IHByZXZlbnRzIHJlYnVpbGRpbmcgd29ybGQgaWYgYmZkLmgKCWhhc24ndCByZWFsbHkgY2hhbmdlZC4KCglUdWUgTWF5IDI1IDEyOjE1OjE1IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQoKCSogZWxmY29kZS5oIChlbGZfaGFzaCk6IFByb3ZpZGUgZWxmIHN0YW5kYXJkIGhhc2ggZnVuY3Rpb24uCgkodmFyaW91cyk6IEtleSBvZmYgb2YgdGhlIG1hY2hpbmVzIHVzZV9yZWxhX3AgZmllbGQgdG8gZGV0ZXJtaW5lCgl3aGV0aGVyIHRvIHVzZSBSRUwgb3IgUkVMQSByZWxvY2F0aW9ucy4KCShlbGZfc3dhcF9yZWxvY19vdXQsIGVsZl9zd2FwX3JlbG9jX2luKTogTmV3IGZ1bmN0aW9ucy4KCShlbGZfbWFrZV9zZWN0aW9ucyk6IEFsbG9jYXRlIGEgcG9pbnRlciB0byBob2xkIGFsbCBkYXRhIGZvciBhCglnaXZlbiBzZWN0aW9uLCBhbmQgY29weSBlYWNoIGZyYWdtZW50IGludG8gdGhlIGRhdGEgcmVnaW9uLgoJVXBkYXRlIHRoZSBzZWN0aW9uJ3MgcG9pbnRlciB3aXRoIHRoZSBSRUwgaW1wbGljaXQgYWRkZW5kcyBpZiB0aGUKCW1hY2hpbmUgdXNlcyBSRUwgcmVsb2NhdGlvbi4KCgkqIGVsZjMyLWkzODYuYyAoZWxmX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IFJlbmFtZSB0bwoJZWxmX2kzODZfYmZkX3JlbG9jX3R5cGVfbG9va3VwLCBhbmQgdXNlIGNwcCB0byBtYXAgdGhlIG5hbWUgYmFjawoJaW50byB3YXMgZWxmMzItdGFyZ2V0LmggZXhwZWN0cy4KCShlbGZfaW5mb190b19ob3d0byk6IFJlbmFtZSB0byBlbGZfaTM4Nl9pbmZvX3RvX2hvd3RvLgoJKGVsZl9pMzg2X2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IEFkZCByZWxvY2F0aW9uIHN1cHBvcnQuCgkoZWxmX2kzODZfaW5mb190b19ob3d0byk6IEFkZCBtaW5pbWFsIHJlbG9jYXRpb24gc3VwcG9ydC4KCgkqIGxpYmVsZi5oIChlbGZfYmFja2VuZF9kYXRhKTogQWRkIHVzZV9yZWxhX3AsIGVsZl82NF9wLAoJZWxmX2luZm9fdG9faG93dG9fcmVsIGZpZWxkcy4KCgkqIGVsZjMyLXRhcmdldC5oIChlbGZfYmVkKTogQWRkIHN1cHBvcnQgZm9yIG5ldyBmaWVsZHMgaW4KCWVsZl9iYWNrZW5kX2RhdGEuCgoJU3VuIE1heSAzMCAxNjozODoyNCAxOTkzICBQZXRlciBIb29nZW5ib29tICAoaG9vZ2VuQGZhc3QuY3MudXRhaC5lZHUpCgoJKiBlbGYzMi1ocHBhLmM6IEFkZCBzeW1ib2wgZXh0ZW5zaW9uIHNlY3Rpb24gc3VwcG9ydCwgZml4CglyZWxvY2F0aW9uIGhvd3RvIHRhYmxlLCBhZGQgc3R1YiBnZW5lcmF0aW9uIHN1cHBvcnQuCgoJKiBlbGYzMi1ocHBhLmg6IEFkZCBzeW1ib2wgZXh0ZW5zaW9uIHNlY3Rpb24gc3VwcG9ydCwgZml4CglyZWxvY2F0aW9uIGhvd3RvIHRhYmxlLCBhZGQgc3R1YiBnZW5lcmF0aW9uIHN1cHBvcnQuCgoJKiBlbGZjb2RlLmggKGJmZF9lbGZfbG9jYXRlX3NoKTogTmV3IGZ1bmN0aW9uIHRvIGxvY2F0ZSBFTEYKCXNlY3Rpb24gaGVhZGVyLgoKCSogZWxmY29kZS5oIChiZmRfYWRkX3RvX3N0cnRhYik6IE1hZGUgbm9uLXN0YXRpYyBkdWUgdG8gYSBjYWxsCglmcm9tIGVsZjMyLWhwcGEuYy4KCgkqIGVsZmNvZGUuaCAoZWxmX2lkeF9vZl9zeW0pOiBSZXR1cm4gU1ROX1VOREVGIGluc3RlYWQgb2YgMCB3aGVuCgl0aGUgc3ltYm9sIGlzIG5vdCBmb3VuZC4KCgkqIGVsZmNvZGUuaCAoZWxmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IE5vdCBhbGwgc2VjdGlvbgoJZmlsZSBwb3NpdGlvbnMgd2VyZSBjb21wdXRlZC4KCgkqIGVsZmNvZGUuaCAoZWxmX2dldF9zZWN0X3RodW5rKTogTmV3IGZ1bmN0aW9uLgoKCSogaHBwYS5jIChzaWduX2V4dCk6IFJlaW1wbGVtZW50LgoKCSogaHBwYS5jIChyb3VuZF9kb3duLHJvdW5kLHJvdW5kX3VwLEwsUixMUyxSUyxMRCxSRCxMUixSUik6IE1ha2UKCXRoZXNlIGZ1bmN0aW9ucyBzdGF0aWMuCgpUdWUgSnVuICAxIDE0OjQwOjQxIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChiZmQuaCk6ICBNb3ZlIGNsb3NlciB0byBoZWFkZXJzIC0gYW5kIGFmdGVyICdhbGwnIQoKCSogYW91dHguaCAodHJhbnNsYXRlX2Zyb21fbmF0aXZlX3N5bV9mbGFncyk6ICBEb24ndCBzZXQKCUJTRl9ERUJVR0dJTkcgZm9yIGNvbnN0cnVjdG9yIHN5bWJvbHMsIG9ubHkgQlNGX0NPTlNUUlVDVE9SLgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfdG9fbmF0aXZlX3N5bV9mbGFncyk6ICBUcmFuc2xhdGUKCWNvbnN0cnVjdG9yIHN5bWJvbHMgcHJvcGVybHkuCgpUaHUgTWF5IDI3IDE2OjA5OjA0IDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBhcmNodXJlcy5jIChiZmRfZGVmYXVsdF9hcmNoX3N0cnVjdCk6IHVzZSA0IGJ5dGUgYWxpZ25tZW50IGFzIGEKCW1pbmltdW0uCgkqIGFvdXQtdGFyZ2V0LmggKG1pbmltdW1fYWxpZ25tZW50KTogOCBieXRlIGFsaWdubWVudCBpcyByaWdodC4KCShmaXggbGQvMjY4MCkKClRodSBNYXkgMjcgMTM6Mzg6NDcgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5pbjogQnVpbGQgYmZkLWluMi5oIGluIHNvdXJjZSBkaXJlY3RvcnksCglmcm9tIGJmZC1pbi5oIGFuZCAuYyBmaWxlcy4gIEJ1aWxkIGJmZC5oIGluIGJ1aWxkIGRpcmVjdG9yeSwKCXN1YnN0aXR1dGluZyBpbiByZXF1ZXN0ZWQgdGFyZ2V0IHdvcmQgc2l6ZS4gIEluc2VydCB3b3JkIHNpemUgaW50bwoJbWFrZWZpbGUsIGFuZCBtYXliZSBlbmFibGUgNjQtYml0IHRhcmdldHMuCgoJKiBiZmQtaW4uaCwgbGliYmZkLmMsIGRlbW82NC5jLCB0YXJnZXRzLmM6IERlZmluZSBCRkQ2NCBpZiA2NCBiaXRzCglhcmUgYXZhaWxhYmxlLiAgQ29uZGl0aW9uYWxpemUgb24gdGhpcy4gIEFzc3VtZSBIT1NUXzY0X0JJVAoJd2lsbCBiZSBkZWZpbmVkIGlmIG5lZWRlZCwgc28gNjQtYml0IHRhcmdldHMgYXJlIGNvbmRpdGlvbmFsaXplZAoJb25seSBpbiB0aGUgTWFrZWZpbGUuCgpUdWUgTWF5IDI1IDE0OjAzOjU2IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC5jIChDT0VSQ0U2NCk6IFJld3JpdGUgdG8gYXZvaWQgb3V0LW9mLXJhbmdlIHZhbHVlcy4KCgkqIGNvZmYtc2guYyAocnR5cGUyaG93dG8pOiBQdXQgZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIuCgkoZXh0cmFfY2FzZSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUuCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfcHJpbnRfc3ltYm9sKTogQ2FzdCBiZmRfdm1hIHZhbHVlcyB0byBsb25nCgliZWZvcmUgY2FsbGluZyBwcmludGYuCgoJKiBlbGZjb2RlLmg6IE5ldyBmaWxlLCBhbG1vc3QgY29tcGxldGVseSBkZXJpdmVkIGZyb20gb2xkIGVsZjMyLmMuCgkqIGVsZjMyLmM6IE5vdyBqdXN0IGRlZmluZSBBUkNIX1NJWkUgYW5kIGluY2x1ZGUgZWxmY29kZS5oLgoJKiBNYWtlZmlsZS5pbiAoZWxmNjQubyk6IExpc3QgZGVwZW5kZW5jaWVzLCBkb24ndCBidWlsZCBieQoJZGVmYXVsdC4KCShlbGY2NC5jKTogQWRkIHRvIGxpc3Qgb2Ygc291cmNlcy4KCShlbGYzMi5vKTogVXBkYXRlIGRlcGVuZGVuY2llcy4KCSogZWxmMzItKi5jOiBVcGRhdGVkIHR5cGUvbWFjcm8vc3RydWN0dXJlIG5hbWVzLiAgQ2xlYW5lZCB1cAoJbmFtZXNwYWNlIHBvbGx1dGlvbjsgcmVuYW1lIHZlY3RvcnMuCgkqIHRhcmdldHMuYywgY29uZmlnLyotZWxmLm10OiBVcGRhdGVkLgoJKiBBbGwgdXNlcyBvZiAzMi1iaXQgdmVyc2lvbnMgb2Ygc3RydWN0dXJlcywgcm91dGluZXMsIGFuZCBtYWNyb3MKCXJlbmFtZWQuCgoJKiBNYWtlZmlsZS5pbiAoYXJjaHVyZXMubywgdGFyZ2V0cy5vKTogRGVwZW5kIG9uIE1ha2VmaWxlLgoKTW9uIE1heSAyNCAxNTo1MzoxMyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGVsZjMyLWkzODYuYyAoZW51bSByZWxvY190eXBlKTogTm8gY29tbWEgYWZ0ZXIgbGFzdCBlbnVtZXJhdG9yLgoKCSogZWxmMzIuYyAoZWxmX3N0cmluZ19mcm9tX2VsZl9zZWN0aW9uKTogSGFuZGxlIGluZGV4IG9mIHplcm8KCXNwZWNpYWxseS4KCShiZmRfc2VjdGlvbl9mcm9tX3NoZHIsIGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiBEb24ndCBuZWVkIHRvIGRvCglzbyBoZXJlLgoJKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBEZWxldGVkIG9uZSB1bnVzZWQgdmFyaWFibGUgYW5kCglpbml0aWFsaXplZCBhbm90aGVyIHRvIGF2b2lkIGdjYyB3YXJuaW5ncy4KCShlbGZfc2V0X3NlY3Rpb25fY29udGVudHMpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlLgoKRnJpIE1heSAyMSAxOTowNDoyMSAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogaTM4Nmx5bnguYzogIE5ldyBtb2R1bGUgZm9yIEx5bnggdmFyaWFudCBvZiBhLm91dC4KCSogTWFrZWZpbGUuaW4gKEJGRF9CQUNLRU5EUyBDRklMRVMgZGVwZW5kcyk6ICBBZGQgaTM4Nmx5bnguYy4KCSogZ2VuLWFvdXQuYzogIEdldCByaWQgb2YgZGVmdW5jdCBlbmRpYW4gc3R1ZmYsIHByaW50IG91dCB0cnVlCglwYWdlc2l6ZS4KCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogIEFkZCBpMzg2bHlueF92ZWMuCgpGcmkgTWF5IDIxIDE3OjAyOjIyIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBVc2UgaTM4Ni1zY28ubXQgZm9yIGlbMzZdODYtKi1pc2MqLgoKRnJpIE1heSAyMSAxMzo0NDoxOCAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AcnRsLmN5Z251cy5jb20pCgoJKiBhaXgzODYtY29yZS5jLCBhb3V0LXRhcmdldC5oLCBhb3V0eC5oLCBjb2ZmLWFscGhhLmMsCgljb2ZmLW1pcHMuYywgY29mZmdlbi5jLCBlbGYzMi5jLCBpZWVlLmMsIGxpYmFvdXQuaCwgbGliY29mZi1pbi5oLAoJbGliZWxmLmgsIG1pcHNic2QuYywgb2FzeXMuYywgc2NvLWNvcmUuYywgc3JlYy5jLCB0ZWtoZXguYywKCXRyYWQtY29yZS5jOiBEZWZpbmUgYSBUQVJHRVRfZ2V0X3N5bWJvbF9pbmZvIGZ1bmN0aW9uIG9yIG1hY3JvLgoJUmVtb3ZlIHRoZSBiZmRfcHJpbnRfc3ltYm9sX25tIGNhc2UgZnJvbSBUQVJHRVRfcHJpbnRfc3ltYm9sLgoKCSogYmZkLWluLmg6IERvbid0IGRlZmluZSBiZmRfcHJpbnRfc3ltYm9sX25tLgoJRGVmaW5lIHN5bWJvbF9pbmZvIHR5cGUuCgkoSlVNUF9UQUJMRSk6IFNldCBfZ2V0X3N5bWJvbF9pbmZvIGVsZW1lbnQuCgoJKiBzeW1zLmMgKGNvZmZfc2VjdGlvbl90eXBlLCBiZmRfc3ltYm9sX2luZm8pOiBOZXcgZnVuY3Rpb25zLgoJKGJmZF9kZWNvZGVfc3ltY2xhc3MpOiBVc2UgY29mZl9zZWN0aW9uX3R5cGUuCgoJKiB0YXJnZXRzLmM6IEFkZCBiZmRfZ2V0X3N5bWJvbF9pbmZvIGNhbGwuCgpXZWQgTWF5IDE5IDE1OjMwOjUyIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLWkzODYuYyAoY29mZl9pMzg2X3JlbG9jKTogIFVzZSB1bnNpZ25lZCBjaGFyIHRvIGF2b2lkCgljb21wbGFpbnRzIGZyb20gYW5jaWVudCBnY2Mncy4KCldlZCBNYXkgMTkgMTU6NTE6MTkgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiB0cmFkLWNvcmUuYzogIENoZWNrIG1hY3JvIFRSQURfQ09SRV9FWFRSQV9TSVpFX0FMTE9XRUQuCglob3N0cy9pMzg2bGludXguaDogIERlZmluZSBpdC4KCk1vbiBNYXkgMTcgMTU6MDA6MzMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGRlbmViLmN5Z251cy5jb20pCgoJKiBWRVJTSU9OLCBiZmQtaW4uaDogQnVtcCB2ZXJzaW9uIG51bWJlciB0byAyLjIuCgoJKiBocHBhLmMgKGFzc2VtYmxlXzMsIGRpc19hc3NlbWJsZV8zLCBhc3NlbWJsZV8xMiwKCWRpc19hc3NlbWJsZV8xMiwgYXNzZW1ibGVfMTcsIGRpc19hc3NlbWJsZV8xNywgYXNzZW1ibGVfMjEsCglkaXNfYXNzZW1ibGVfMjEsIHNpZ25fZXh0LCBvbmVzLCBzaWduX3VuZXh0LCBsb3dfc2lnbl9leHQsCglsb3dfc2lnbl91bmV4dCwgcm91bmRfZG93biwgcm91bmQsIHJvdW5kX3VwLCBMLCBSLCBMUywgUlMsIExELCBSRCwKCUxSLCBSUiwgaHBwYV9maWVsZF9hZGp1c3QpOiBOZXcgZnVuY3Rpb25zLgoKTW9uIE1heSAxNyAxMDowNDoxNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogQWRkZWQgc3VwcG9ydCBmb3IgaW5kaXJlY3QKCXN0YWJzIHN5bWJvbHMsIGluY2x1ZGluZyBuZXcgaW5kaXJlY3RfcHRyX3B0ciBhcmd1bWVudC4KCShlY29mZl9zbHVycF9zeW1ib2xfdGFibGUpOiBQYXNzIG5ldyBhcmd1bWVudCBpbiBjYWxscyB0bwoJZWNvZmZfc2V0X3N5bWJvbF9pbmZvLgoKRnJpIE1heSAxNCAwMDowNTowNiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IEZvciBtNjhrIHN5c3Ygc3lzdGVtcywgdXNlIG02OGstY29mZi4KCgkqIGNvbmZpZy9ocHBhLWVsZi5tdCAoVERFRklORVMpOiBEb24ndCBkZWZpbmUgREVGQVVMVF9WRUNUT1IgaGVyZS4KCShUREVGQVVMVFMpOiBEZWZpbmUgaXQgaGVyZS4gIFVzZSB0aGUgbmV3IG5hbWUuCgoJKiBlbGYzMi1ocHBhLmMgKGVsZl9ocHBhX2JhY2tlbmRfZGF0YSk6IERlbGV0ZTsgcmVseSBvbiBkZWZhdWx0Cgl2YWx1ZXMgaW5zdGVhZC4KCgkqIHJlbG9jLmMgKGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSk6IEFkZCBzb21lIEhQUEEgcmVsb2MgdHlwZXMuCgoJKiBhaXgzODYtY29yZS5jIChOT19HRVRTKTogRml4IFBST1RPIGludm9jYXRpb24gdG8gaGF2ZSBjb3JyZWN0CgludW1iZXIgb2YgYXJndW1lbnRzLgoJKGFpeDM4Nl9jb3JlX2ZpbGVfcCk6IEluaXRpYWxpemUgY29yZV9zaXplIHRvIGNvcnJlY3QgdmFsdWUuCgpXZWQgTWF5IDEyIDE0OjM5OjU5IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChDQ19GT1JfQlVJTEQpOiBOZXcgdmFyaWFibGUsIHNldCB0byAkKENDKS4KCShGTEFHU19UT19QQVNTKTogUGFzcyBkb3duIENDX0ZPUl9CVUlMRC4KCgkqIGJvdXQuYyAoYW91dDMyX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUpOiBEZWZpbmUgdG8gYmUKCV9iZmRfc2x1cnBfZXh0ZW5kZWRfbmFtZV90YWJsZSByYXRoZXIgdGhhbiBiZmRfdHJ1ZS4KCgkqIGNvZmYtbWlwcy5jOiBJbmNsdWRlIGxpYmFvdXQuaCBhbmQgYW91dC9hb3V0NjQuaCB0byBnZXQKCWRlZmluaXRpb25zIGZvciBOX1NFVFtBVERCXS4KCShlY29mZl9ob3d0b190YWJsZSk6IE1vdmVkIG5lYXIgdG9wIG9mIGZpbGUuCgkoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogSWYgYSBTVEFCUyBzeW1ib2wgb2YgdHlwZSBOX1NFVFtBVERCXSBpcwoJc2VlbiwgY29vayB1cCBhIGNvbnN0cnVjdG9yIHNlY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSBhbmQgcHV0IGluIGEKCXJlbG9jIHBvaW50aW5nIHRvIHRoZSBzeW1ib2wuICBUaGlzIGxldHMgdGhlIEdOVSBsaW5rZXIgYnVpbGQKCWdsb2JhbCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIHdpdGhvdXQgdXNpbmcgY29sbGVjdC4KClR1ZSBNYXkgMTEgMDA6MzM6MzEgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBjb2ZmLW04OGsuYyAobTg4a2Jjc192ZWMpOiAgU3ltYm9scyBoYXZlIHVuZGVyYmFycy4KCk1vbiBNYXkgMTAgMDU6NTU6NDUgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGtyLXBjLmN5Z251cy5jb20pCgoJKiBob3N0cy9taW5pZnJhbWUuaDogTmV3IGZpbGUuCgkqIGNvbmZpZ3VyZS5ob3N0OiBVc2UgaXQuCgpTdW4gTWF5ICA5IDE2OjM2OjU5IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChocHBhKi0qLWJzZCk6ICBDaGFuZ2UgdG8gaHBwYSotKi1ic2QqCgkqIGNvbmZpZ3VyZS5pbiAoaHBwYSotKi1ocHV4KTogIENoYW5nZSB0byBocHBhKi0qLWhwdXgqCgkqIGNvbmZpZ3VyZS5pbiAobTY4Ki1ocC1ic2QpOiAgQ2hhbmdlIHRvIG02OCotaHAtYnNkKgoJKiBjb25maWd1cmUuaW4gKG02OCotKi1ocHV4KTogIENoYW5nZSB0byBtNjgqLSotaHB1eCoKCSogY29uZmlndXJlLmluICgqLSotYnNkKTogIENoYW5nZSB0byAqLSotYnNkKgoKV2VkIE1heSAgNSAxNjowODozMiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGVsZjMyLWhwcGEuYyAoZWxmX2hwcGFfcmVsb2NfdHlwZV9sb29rdXApOiAgQ2FzdCBlbnVtcyB0bwoJaW50LCBmb3IgdGhlIHNha2Ugb2YgdGhlIG9sZCBQb3J0YWJsZSBDIENvbXBpbGVyLgoKTW9uIE1heSAgMyAxNDozNzowMSAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6ICBBZGQgY3B1LXNoLmMgYW5kIGNvZmYtc2guYy4KCk1vbiBNYXkgIDMgMTQ6MDM6MjEgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGRlbmViLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IEdldCB0YXJnZXQgbmFtZSByaWdodCBmb3IgbTY4Ki0qLWhwdXguCgpTdW4gTWF5ICAyIDExOjM5OjQ0IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogdHJhZC1jb3JlLmMgKE5PX1NJR05FRF9HRVQpOiAgTmV3IG1hY3JvLgoJKiB0cmFkLWNvcmUuYyAodHJhZF9jb3JlX3ZlYyk6ICBVc2UgbmV3IE5PX1NJR05FRF9HRVQgaW5zdGVhZCBvZgoJc2lnbmVkIE5PX0dFVCwgd2hlcmUgYXBwcm9wcmlhdGUuCgoJKiBjb25maWd1cmUuaW4gKGlbMzRdODYtKi1saW51eCopOiAgQWRkOyBiZmRfdGFyZ2V0ID0gaTM4Ni1saW51eC4KCSogY29uZmlndXJlLmluICgqLSotbGludXgqKTogIFJlbW92ZSB1bnRpbCBsaW51eCBwb3J0IGZvciBhCglub24taTM4Ni9pNDg2IHN5c3RlbSBpcyBhY3R1YWxseSBhdmFpbGFibGUuCgpGcmkgQXByIDMwIDIwOjA0OjEwIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBsaWJocHBhLmg6ICAjdW5kZWYgZV8qIHN5bWJvbHMgd2hpY2ggY29tZSBmcm9tIDxtYWNoaW5lL3NvbS5oPgoJd2hlbiBjb21waWxpbmcgdW5kZXIgSFBVWC4KCkZyaSBBcHIgMzAgMTc6MjU6MjMgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIFRoZSBmb2xsb3dpbmcgcGF0Y2hlcyBhcmUgZnJvbSBKZWZmcmV5IExhdyA8bGF3QGNzLnV0YWguZWR1Pi4KCSogaHBwYS5jIChocHBhX2NvcmVfZmlsZV9wKTogUHJvdmlkZSBhIHRlbXBvcmFyeSBkdW1teSByb3V0aW5lCglmb3IgSE9TVF9IUFBBQlNELgoJKiBiZmQvaG9zdHMvaHBwYWJzZC5oOiBGaXggZGVjbGFyYXRpb25zIG9mIG1hbGxvYyBhbmQgZnJlZS4KCSogYmZkL2xpYmhwcGEuaDogSW5jbHVkZSBzeXNkZXAgaGVyZS4gIENvbmRpdGlvbmFsaXplCglpbmNsdWRlcyBiYXNlZCBvbiBIT1NUX0hQUEFIUFVYIG9yIEhPU1RfSFBQQUJTRC4KCVByb3ZpZGUgZGVmaW5pdGlvbnMgZm9yIE1BWENPTUxFTiBhbmQgX1BBX1JJU0NfSUQgc3VpdGFibGUKCWZvciBCU0QuCgpGcmkgQXByIDMwIDE3OjM0OjExIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZjMyLWhwcGEuYzogRG9uJ3QgaW5jbHVkZSBhLm91dC5oLiAgQXBwYXJlbnRseSBub3QgZXZlbiB0aGUKCUdOVSB2ZXJzaW9uIGlzIG5lZWRlZC4KCkZyaSBBcHIgMzAgMDk6Mzg6NTkgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oOiB1c2UgZHVtbXlfcmVsb2MxNl9leHRyYV9jYXNlcyByYXRoZXIgdGhhbiBjYXN0aW5nIGFib3J0LgoKVGh1IEFwciAyOSAxMTozMDozMiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBCdWlsZCBlbGYzMi1ocHBhLm8uCgoJKiBzeW1zLmMgKEJTRl9GVU5DVElPTik6IE5ldyBzeW1ib2wgZmxhZy4KCgkqIGVsZjMyLWhwcGEuYzogRml4ZWQgdG8gd29yayB3aXRoIGVsZjMyLXRhcmdldC5oLgoKCSogaHAzMDBocHV4LmMgKE5BTUUsIE5BTUVfc3dhcF9leGVjX2hlYWRlcl9pbik6IEZpeCBmb3IKCXRyYWRpdGlvbmFsIEMuCgkqIGxpYmFvdXQuaCAoTkFNRSk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCgoJKiBsaWJlbGYuaDogUHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbnMuCgkoZWxmX3N5bWJvbF90eXBlKTogTW92ZWQgaGVyZSwgYWRkZWQgbmV3IGZpZWxkcy4KCShzdHJ1Y3QgZWxmX2JhY2tlbmRfZGF0YSk6IE5ldyBmaWVsZCBgZ2xvYmFsX3N5bSc7IEkgc3VzcGVjdCB0aGlzCgltYXkgYmUgbWlzcGxhY2VkLgoJKiBlbGYzMi5jIChlbGZfc3ltYm9sX3R5cGUpOiBEZWxldGVkIGZyb20gaGVyZS4KCShzdHJ1Y3QgZWxmX29ial90ZGF0YSk6IE5ldyBmaWVsZHMgcmF3X3N5bXMgYW5kIGludGVybmFsX3N5bXMsIHRvCglwb2ludCB0byBiYWNrZW5kIHZlcnNpb25zIG9mIHN5bWJvbHMuCgkob2JqX3N5bWJvbHMsIG9ial9yYXdfc3ltcywgb2JqX2ludGVybmFsX3N5bXMpOiBOZXcgbWFjcm9zLgoJKGVsZl9zd2FwX3BoZHJfb3V0LCBlbGZfYnVpbGRfcGhkcnMsIGVsZl93cml0ZV9waGRycyk6IE5ldwoJZnVuY3Rpb25zLgoJKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBXcml0ZSBwcm9ncmFtIGhlYWRlcnMgaWYgYXBwcm9wcmlhdGUuCgkoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogVW5uYW1lZCBzZWN0aW9ucyBnZXQgZW1wdHkgc3RyaW5nIGZvcgoJbmFtZSwgbm90ICJ1bm5hbWVkIi4gIEhhbmRsZSBTSFRfTk9CSVRTIHNlcGFyYXRlbHkgZnJvbQoJU0hUX1BST0dCSVRTLCBhbmQgc2V0IHNvbWUgZGlmZmVyZW50IGZsYWdzLgoJKGVsZl9maWxlX3ApOiBOZXcgcm91dGluZS4KCShlbGZfb2JqZWN0X3AsIGVsZl9jb3JlX2ZpbGVfcCk6IENhbGwgaXQuCgkoZWxmX29iamVjdF9wKTogSGFuZGxlIEVNX0hQUEEuCgkoZWxmX3N5bWJvbF9mcm9tLCBlbGZfaWR4X29mX3N5bSk6IE5ldyBmdW5jdGlvbnMuCgkoZWxmX21ha2Vfc2VjdGlvbnMpOiBHZXQgc3ltYm9sIG51bWJlciByaWdodCBmb3IgcmVsb2NhdGlvbnMuICBTZXQKCVNIRl9BTExPQywgU0hGX1dSSVRFLCBTSEZfRVhFQ0lOU1RSIHdoZW4gYXBwcm9wcmlhdGUuCgkoZWxmX2Zha2Vfc2VjdGlvbnMpOiBCU1Mgc2VjdGlvbiBzaG91bGQgYmUgU0hUX05PQklUUywgbm90CglTSFRfUFJPR0JJVFMuICBBbHdheXMgZ2VuZXJhdGUgc3ltdGFiIGFuZCBzdHJ0YWIsIG5vdCBvbmx5IGlmCglyZWxvY2F0aW9ucyBhcmUgbmVlZGVkLiAgU2V0IFNIRl8qIGZsYWdzIGFzIGFwcHJvcHJpYXRlLgoJKGVsZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBIYW5kbGUgYmZkX2FyY2hfaHBwYS4KCShlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gc3ltYm9sIGNvdW50LgoJU3RvcmUgYSBjb3JyZWN0IHZhbHVlIGZvciB0aGUgc3ltYm9sOyB3cml0ZSB0aGUgc2l6ZSBmaWVsZAoJcHJvcGVybHk7IG1ha2Ugc29tZSBndWVzc2VzIGFib3V0IHRoZSB0eXBlIGZpZWxkLiAgU2V0IHNlY3Rpb24KCXR5cGUgY29ycmVjdGx5IGZvciBzdHJpbmcgdGFibGVzLgoJKHNlY3Rpb25fZnJvbV9lbGZfaW5kZXgpOiBDaGVjayBmb3IgYWJzb2x1dGUgYW5kIGNvbW1vbiBzZWN0aW9ucwoJZmlyc3QuCgkoZWxmX3NlY3Rpb25fZnJvbV9iZmRfc2VjdGlvbik6IERpdHRvLgoJKGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiBVc2UgZWxmX3N5bWJvbF90eXBlIGluc3RlYWQgb2YgYXN5bWJvbC4KCVVzZSBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAidW5uYW1lZCIgZm9yIG5hbWVsZXNzIHN5bWJvbHMuCglIYW5kbGUgU1RUWV9GVU5DIHR5cGUsIGFuZCB3ZWlyZG5lc3Mgd2l0aCAiJGdsb2JhbCQiIHN5bWJvbCBmb3IKCUhQUEEgKG9ubHk/KS4gIERvbid0IGZyZWUgcmF3IHN5bWJvbHM7IGtlZXAgdGhlIHBvaW50ZXIgYXJvdW5kIGZvcgoJbGF0ZXIuCgkoZWxmX3NldF9hcmNoX21hY2gpOiBIYW5kbGUgYmZkX2FyY2hfaHBwYS4KCShlbGZfZmluZF9uZWFyZXN0X2xpbmUpOiBKdXN0IHJldHVybiBmYWxzZS4KCShlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzLCBlbGZfc2V0X3NlY3Rpb25fY29udGVudHMpOiBTZXQKCW91dHB1dF9oYXNfYmVndW4gZmllbGQgYWZ0ZXIgY29tcHV0aW5nIGZpbGUgcG9zaXRpb25zLgoJKGVsZl9zZXRfc2VjdGlvbl9jb250ZW50cyk6IFdyaXRlIHNlY3Rpb24gY29udGVudHMgaW1tZWRpYXRlbHksCglyYXRoZXIgdGhhbiBjYWNoaW5nIHRoZSB3aG9sZSBmaWxlIGFuZCB3cml0aW5nIGl0IGF0IGNsb3NlIHRpbWUuCgoJKiBsaWJocHBhLmggKGVudW0gaHBwYV9yZWxvY19maWVsZF9zZWxlY3Rvcl90eXBlLCBlbnVtCglocHBhX3JlbG9jX2ZpZWxkX3NlbGVjdG9yX3R5cF9hbHQsIGVudW0gaHBwYV9yZWxvY19leHByX3R5cGUsIGVudW0KCWhwcGFfcmVsb2NfZXhwcl90eXBlX2FsdCk6IE5ldyBlbnVtZXJhdG9yIHR5cGVzLgoKCSogY29uZmlnL2hwcGEtZWxmLm10LC4gY29uZmlnL2hwcGFvc2YubWg6IEhQIFBBL09TRiBzdXBwb3J0LgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZS5ob3N0OiBVc2UgdGhlbS4KCldlZCBBcHIgMjggMjM6MjE6MDEgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmMzItdGFyZ2V0Lmg6IEFsbG93IG92ZXJyaWRlcyBvZiBhcm1hcCBkZWZhdWx0cy4KCgkqIGVsZjMyLWhwcGEuYywgZWxmMzItaHBwYS5oOiBOZXcgZmlsZXMuCgoJKiBjb25maWcvaHAzMDBocHV4Lm10OiBOZXcgZmlsZS4KClR1ZSBBcHIgMjcgMDU6Mzk6NDAgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGtyLXBjLmN5Z251cy5jb20pCgoJKiBhaXgzODYtY29yZS5jIChOT19HRVRTKTogTmV3IG1hY3JvOyBOT19HRVQgZm9yIHNpZ25lZCB2YWx1ZXMuCgkoYWl4Mzg2X2NvcmVfdmVjKTogVXBkYXRlIGZvciBuZXcgZmllbGRzLgoKCSogYXJjaGl2ZS5jIChiZmRfZ2VuZXJpY19hcmNoaXZlX3ApOiBDYWxsIHRhcmdldC1zcGVjaWZpYwoJc2x1cnBfYXJtYXAgY29kZSwgaW5zdGVhZCBvZiBiZmRfc2x1cnBfYXJtYXAuCgkoYmZkX3NsdXJwX2JzZF9hcm1hcF9mMik6IE5ldyBmdW5jdGlvbi4KCSogbGliYmZkLWluLmggKGJmZF9zbHVycF9ic2RfYXJtYXBfZjIpOiBEZWNsYXJlIGl0LgoJKiBhb3V0LXRhcmdldC5oIChBUl9QQURfQ0hBUik6IERlZmluZSBpdCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKHZlYyk6IFVzZSBpdC4KCSogbGliYW91dC5oIChzdHJ1Y3QgYW91dGRhdGEpOiBOZXcgZmllbGQgZm9yIHN1YmZvcm1hdCwgZm9yCglkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBoaWdobHkgc2ltaWxhciBhLm91dCBmb3JtYXRzLgoJKiBhb3V0eC5oIChOQU1FX3N3YXBfZXhlY19oZWFkZXJfaW4pOiBOZXcgbWFjcm8sIGRlZmF1bHRzIHRvIGxvY2FsCgl2ZXJzaW9uIG9mIGZ1bmN0aW9uLgoJKHN3YXBfZXhlY19oZWFkZXJfaW4pOiBEb24ndCBkZWZpbmUgaWYgTkFNRV9zd2FwX2V4ZWNfaGVhZGVyX2luIGlzCglhbHJlYWR5IGRlZmluZWQuCgkqIGhwMzAwaHB1eC5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW46IEluY2x1ZGUgaXQuCgpNb24gQXByIDI2IDEzOjI0OjQzIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGFyY2h1cmVzLmMsIGNvZmZjb2RlLmgsIHRhcmdldHMuYzogU3VwcG9ydCBmb3IKCUhpdGFjaGkgU0guCgpNb24gQXByIDI2IDEzOjU1OjQyIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogdHJhZC1jb3JlLmMgKHRyYWRfdW5peF9jb3JlX2ZpbGVfcCk6IENoZWNrIHRoZSBmaWxlIHNpemUuCgpNb24gQXByIDI2IDEzOjI0OjQzIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZi1hbHBoYS5jOiBSZW1vdmUgZHVwbGljYXRlIGZ1bmN0aW9uIGFuZCBhZGQgd2FybmluZ3MuCgpNb24gQXByIDI2IDExOjI1OjU4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIHNjby1jb3JlLmMgKHNjb19jb3JlX3ZlYyk6IEFkZCBpbml0aWFsaXplcnMgZm9yIG5ldyB0YXJnZXQKCWZpZWxkcy4KClNhdCBBcHIgMjQgMjE6MzM6NDUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIFtfTElUXTogUmVjb2duaXplIC5saXQgc2VjdGlvbi4KCkZyaSBBcHIgMjMgMTk6MDA6MzYgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLWFscGhhLmMsIGNwdS1hbHBoYS5jLCBjb25maWcvYWxwaGFvc2YubXQsCgljb25maWcvYWxwaGFvc2YubXQsIGhvc3RzL2FscGhhb3NmLmg6ICBOZXcgZmlsZXMuCgpGcmkgQXByIDIzIDE2OjQ4OjQ2IDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBNZXJnZSBpbiBIUFBBL0JTRCBjaGFuZ2VzIGZyb20gVXRhaC4KCSogaHBwYS5jOiAgVXNlIHRoaXMgZm9yIGJvdGggSFBVWCAmIEJTRC4KCSogdGFyZ2V0cy5jOiAgRW5hYmxlIGhwcGFfdmVjIGZvciBib3RoIEhQVVggJiBCU0QuCgkqIGNvbmZpZy9ocHBhYnNkLm10OiAgVERFRklORVMgPT4gVERFRkFVTFRTLgoJKiBob3N0cy9ocHBhYnNkLmg6ICAjZGVmaW5lIEhPU1RfSFBQQUJTRC4KCldlZCBBcHIgMjEgMDE6NTA6MTAgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBsaWJiZmQuYzogIFdoaXRlc3BhY2UgY2hhbmdlcyBhcm91bmQgYnl0ZXN3YXAgbWFjcm9zLgoJKiBsaWJiZmQtaW4uaDogIFdoaXRlc3BhY2UgY2hhbmdlcyBhcm91bmQgYnl0ZXN3YXAgZGVjbGFyYXRpb25zLgoKVHVlIEFwciAyMCAxNTo1OTowNyAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogYW91dGYxLmggKHN1bm9zNF9jb3JlX2ZpbGVfcCk6ICBEb24ndCBkZWZhdWx0IGJmZF9lcnJvciB0bwoJc3lzdGVtX2Vycm9yIGFueW1vcmUuICBJdCBjb25mdXNlcyBiZmRfY2hlY2tfZm9ybWF0KCkuCgpNb24gQXByIDE5IDIzOjAzOjA4IDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBiZmQuYzogIEFkZCBzZ2lfY29yZV9kYXRhIHRvIHRkYXRhIHVuaW9uLgoJKiBjb2ZmLW1pcHMuYzogIEFkZCBJcml4IDQueCBjb3JlIGZpbGUgc3VwcG9ydC4KCSogaG9zdHMvaXJpeDQuaDogICNkZWZpbmUgSE9TVF9JUklYNC4KCk1vbiBBcHIgMTkgMTg6NTI6NTIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGRlbmViLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzKTogQ2hlY2sgdGhhdCB0aGUKCXN5bWJvbCdzIHNlY3Rpb24gZG9lcyBnZXQgc2V0LgoJKHNsdXJwX3N5bWJvbF90YWJsZSk6IFplcm8gaW5kZXggbWVhbnMgbnVsbC1zdHJpbmcgbmFtZS4KCgkqIGFvdXR4LmggKHN0cnVjdCBzdHJpbmd0YWJfZW50cnksIHN0cnVjdCBzdHJpbmd0YWJfZGF0YSk6IE5ldwoJZGF0YSBzdHJ1Y3R1cmVzLgoJKGhhc2gsIHN0cmluZ3RhYl9pbml0LCBhZGRfdG9fc3RyaW5ndGFiLCBlbWl0X3N0cnRhYiwgY29tcGFyZSk6CglOZXcgZnVuY3Rpb25zLgoJKHdyaXRlX3N5bXMpOiBVc2UgdGhlbSwgdG8gcmVkdWNlIHN0cmluZyB0YWJsZSBzaXplLgoKTW9uIEFwciAxOSAxNjo0NToxMiAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIHRyYWQtY29yZS5jICh0cmFkX2NvcmVfdmVjKTogIEFkZCA2IG5ldyBpbml0aWFsaXplcnMgdG8gbWF0Y2gKCSAgbmV3IHNpZ25lZCBnZXQvcHV0IGZpZWxkcy4gIE1pbm9yIHJlZm9ybWF0dGluZyB0byBsYWJlbAoJICBzb21lIGZpZWxkcy4KCk1vbiBBcHIgMTkgMDY6MDk6NDEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBiZmQtaW4uaDogSW5zZXJ0IGNvbW1lbnQgYWJvdXQgU1ZSMyBjb21waWxlciB3YXJuaW5ncy4KCgkqIGhvc3RzL3tocDMwMCxpMzg2aXNjLGkzODZ2fS5oOiBSZW1vdmUgdW51c2VkICNkZWZpbmVzIG9mIHtyLH1pbmRleAoJKGJmZCB1c2VzIHN0cmNociBhbmQgdGhlIGJyb2tlbiBTVlIzLjIgY3BwIGxvc2VzIHdpdGggdGhlIGRlZmluZXMpLgoKCSogbGliYmZkLmM6IGJmZF9wdXQqOiBSZW1vdmUgY2FzdHMgdG8gYmZkX3ZtYS4KCkZyaSBBcHIgMTYgMTc6NDk6MjcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCAoaW50ZXJuYWxfc3Vub3NfY29yZSk6IE1ha2UgY19zdGFja3RvcCBhIGJmZF92bWEuCgkoc3dhcGNvcmVfc3BhcmMpOiBNYWtlIHNwIGEgYmZkX3ZtYS4KClRodSBBcHIgMTUgMDk6MDk6MTggMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBsaWJiZmQuYzogQWRkIHNpZ25lZCB2ZXJzaW9ucyBvZiBiZmRfe2hfLH17Z2V0LHB1dH1fc2lnbmVkXzxzaXplPi4KCWxpYmJmZC5jLCBsaWJiZmQtaW4uaDogQWRkIF9kbypzaWduZWQqLgoJdGFyZ2V0cy5jLCBhbGwgdGFyZ2V0czogQWRkIGJmZCpzaWduZWQqLgoJYmZkLWluLmg6IEFkZCBiZmRfc2lnbmVkX3ZtYS4gIEFkZCBjb21tZW50cy4KCgkqIGJmZC1pbi5oIChiZmRfZXJyb3IpLCBiZmQuYyAoYmZkX2Vycm1zZ3MpOiBBZGQgZmlsZV90cnVuY2F0ZWQuCgoJKiBmb3JtYXQuYyAoYmZkX2NoZWNrX2Vycm9yKTogQ2hlY2sgZXJyb3IgcmV0dXJuIGZyb20KCV9iZmRfY2hlY2tfZm9ybWF0IHJvdXRpbmVzLgoKV2VkIEFwciAxNCAyMzo0ODoyNSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC1jb3JlLmMgKHJzNjAwMGNvZmZfY29yZV9wKTogSW1wcm92ZSBlcnJvciBjaGVja2luZyBhbmQKCXJlY29nbml6ZSAuZGF0YSBzZWN0aW9uIGlmIHByZXNlbnQuCgpUaHUgQXByIDE1IDAxOjAwOjI5IDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogYW91dHguaCAoYW91dF8qX2FkanVzdF9zaXplc19hbmRfdm1hcyk6ICBBdm9pZCBgc2FuaXR5JwoJY2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIHNldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIEJTUwoJc2VjdGlvbiAoYW5kIHRoZSBmaWxlIGhlYWRlciBjYW4ndCBzcGVjaWZ5IHRoaXMpLiAgTGV0IHRoZSB1c2VyCglzZXQgaXQgd2hlcmV2ZXIgdGhleSB3YW50LCByZWdhcmRsZXNzIG9mIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyLgoKCSogaWVlZS5jIChpZWVlX3NsdXJwX3NlY3Rpb25zKTogIFBhc3MgYWxsIGllZWUgc2VjdGlvbiBuYW1lcwoJc3RyYWlnaHQgdGhyb3VnaCBpbnRvIEJGRCBzZWN0aW9ucy4gIEFkZCBjb21tZW50cy4KCldlZCBBcHIgMTQgMjA6MzQ6NTQgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJQ2xlYW51cCBpbiBwcmVwYXJhdGlvbiBmb3IgYmV0dGVyIDY0LWJpdCBob3N0IHN1cHBvcnQuCgoJKiBiZmQtaW4uaCAoYmZkXzY0X3R5cGUpOiAgUmVtb3ZlLgoJKiBsaWJiZmQuYyAoX2RvX2dldGI2NCwgX2RvX3B1dGI2NCk6ICBVc2UgYmZkX3ZtYSwgbm90IGJmZF82NF90eXBlLgoKCSogYmZkLWluLmggKGJmZF9zaXplKTogIFJlbW92ZS4KCgkqIGJmZC1pbi5oIChiZmRfb2Zmc2V0KTogIFJlbW92ZSwgYWZ0ZXIgZml4aW5nIGxkL2xkbGFuZy5bY2hdLgoKCSogYmZkLWluLmggKGJmZF93b3JkKTogIFJlbW92ZS4KCSogcmVsb2MuYyAocmVsb2NfaG93dG9fdHlwZSk6ICBSZXBsYWNlIGJmZF93b3JkIHdpdGggYmZkX3ZtYS4KCgkqIGJmZC1pbi5oIChyYXdkYXRhX29mZnNldCk6ICBSZW1vdmUuCgkqIHJlbG9jLmMgKGFyZWxlbnQpOiAgUmVwbGFjZSByYXdkYXRhX29mZnNldCB3aXRoIGJmZF9zaXplX3R5cGUuCgkoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6ICBMaW50LgoJKGVudW0gYmZkX3JlbG9jX3N0YXR1cyk6ICBDb21tZW50IGNsZWFudXAuCgoJKiBhb3V0LWFkb2JlLmMsIGNwdS1oODMwMC5jLCBtaXBzYnNkLmMsIHNyZWMuYzogbGludCAtV2FsbC4KClR1ZSBBcHIgMTMgMTE6MTk6NTIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCAoc3dhcGNvcmVfc3BhcmMpOiBHdWVzcyB0aGUgcmlnaHQgdmFsdWUgb2YgVVNSU1RBQ0suCgpNb24gQXByIDEyIDE0OjE4OjAwIDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogZWxmMzIuYzogIENsZWFuIHVwIG9sZCBjb21tZW50cy4KCkZyaSBBcHIgIDkgMTA6NDM6MjAgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29uZmlnL3N1bjMuaDogU3RyaW5nIGFyZ3VtZW50IHRvIGZwcmludGYgaXMgY29uc3QuCgoJKiBjb2ZmLW1pcHMuYzogUmVuYW1lZCBQQUdFX1NJWkUgdG8gUk9VTkRfU0laRSwgdG8gYXZvaWQgY29uZnVzaW9uCglvbiBzeXN0ZW1zIHdoaWNoIGRlZmluZSBQQUdFX1NJWkUgaW4gPGxpbWl0cy5oPi4KClRodSBBcHIgIDggMTA6Mjg6MDAgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogdHJhZC1jb3JlLmMgKHRyYWRfdW5peF9jb3JlX2ZpbGVfZmFpbGluZ19zaWduYWwpOiBVc2UgbmV3IG1hY3JvCglUUkFEX1VOSVhfQ09SRV9GSUxFX0ZBSUxJTkdfU0lHTkFMIHRvIGFsbG93IGhvc3QgZmlsZXMgdG8gc3BlY2lmeQoJdGhlIGNvcmUgZmlsZSBmYWlsaW5nIHNpZ25hbC4KCSogaG9zdHMvZGVjc3RhdGlvbi5oIChUUkFEX1VOSVhfQ09SRV9GSUxFX0ZBSUxJTkdfU0lHTkFMKTogRGVmaW5lCgl0byBzdXBwbHkgdGhlIGNvcmUgZmlsZSBmYWlsaW5nIHNpZ25hbC4KClRodSBBcHIgIDggMDk6MTc6MzUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoc3R5cF90b19zZWNfZmxhZ3MpOiBPbmx5IHNldCBTRUNfU0hBUkVEX0xJQlJBUlkgZm9yCglhIFNUWVBfTk9MT0FEIHwgU1RZUF9CU1Mgc2VjdGlvbiBpZiBCU1NfTk9MT0FEX0lTX1NIQVJFRF9MSUJSQVJZCglpcyBkZWZpbmVkLiAgT24gbWFueSBDT0ZGIHRhcmdldHMgU1RZUF9CU1MgaXMgYWx3YXlzIFNUWVBfTk9MT0FELgoJKiBjb2ZmLWkzODYuaCAoQlNTX05PTE9BRF9JU19TSEFSRURfTElCUkFSWSk6IERlZmluZS4KCldlZCBBcHIgIDcgMTE6MzM6MDYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmMgKFBBR0VTSVpFKTogQ29ycmVjdCB2YWx1ZS4KClR1ZSBBcHIgIDYgMTI6MDU6NDQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmMgKGVjb2ZmX2ZpbmRfbmVhcmVzdF9saW5lKTogQWRkcmVzcyBvZiBmaXJzdCBQRFIgaXMKCWFuIG9mZnNldCAocGF0Y2ggZnJvbSBKZWFuLURhbmllbCBGZWtldGUgPGpkZkBscmkubHJpLmZyPikuCgpNb24gQXByICA1IDEyOjA3OjEyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKHN0eXBfdG9fc2VjX2ZsYWdzKTogU2V0IFNFQ19TSEFSRURfTElCUkFSWSBmb3IgYQoJU1RZUF9OT0xPQUQgfCBTVFlQX0JTUyBzZWN0aW9uLiAgRG9uJ3Qgc2V0IFNFQ19ORVZFUl9MT0FEIGZvciBhCglTVFlQX0lORk8gc2VjdGlvbi4KCShjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IEZvcmNlIHZtYSBhbmQgbG1hIG9mIF9MSUIKCXNlY3Rpb24gdG8gYmUgemVyby4KCShjb2ZmX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogQ291bnQgbnVtYmVyIG9mIGVudHJpZXMgaW4gbmV3IGxtYQoJZmllbGQsIG5vdCBpbiB2bWEuCgkqIGNvZmZnZW4uYyAobWFrZV9hX3NlY3Rpb25fZnJvbV9maWxlKTogRm9yY2UgbGluZW5vX2NvdW50IG9mCglTRUNfU0hBUkVEX0xJQlJBUlkgc2VjdGlvbiB0byBiZSB6ZXJvLCBzaW5jZSBpdCBpcyBub24temVybyBvbiB0aGUKCVNDTyAzLjJ2NCBzaGFyZWQgbGlicmFyeS4KCSogc2VjbGV0LmMgKHJlbCk6IENvcHkgb3ZlciBhbnkgc2VjdGlvbiB3aXRoIGNvbnRlbnRzLCBub3QganVzdAoJbG9hZGFibGUgc2VjdGlvbnMuCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfbWFrZV9lbXB0eV9zeW1ib2wpOiBaZXJvIG91dCBuZXdseSBhbGxvY2F0ZWQKCXN5bWJvbC4KCgkqIGNvZmYtaTM4Ni5jIChjb2ZmX2kzODZfcmVsb2MpOiBOZXcgZnVuY3Rpb24sIHRvIGdlbmVyYXRlCglyZWxvY2F0ZWFibGUgb3V0cHV0IGNvcnJlY3RseS4KCShob3d0b190YWJsZSk6IFVzZSBjb2ZmX2kzODZfcmVsb2MgZm9yIGFsbCByZWxvYyB0eXBlcy4KCShDQUxDX0FEREVORCk6IFVzZSBhIG1vcmUgZWZmaWNpZW50IGhhY2sgdG8gZ2V0IHRoZSBjb3JyZWN0IGFkZGVuZAoJZm9yIGEgY29tbW9uIHN5bWJvbC4KCShpMzg2Y29tbV92YWx1ZSk6IFJlbW92ZWQ7IG5vIGxvbmdlciBuZWVkZWQuCgpTdW4gQXByICA0IDE1OjA4OjQ4IDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9zZXRfc2VjdGlvbl9jb250ZW50cyk6IERvbid0IHdyaXRlIG91dAoJc2VjdGlvbnMgd2l0aG91dCBhIGZpbGVwb3MuCgpGcmkgQXByICAyIDE0OjM1OjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIHNlY2xldC5jIChzZWNsZXRfZHVtcF9zZWNsZXQpOiBDb3JyZWN0IFNFQ19IQVNfQ09OVEVOVFMgdGVzdC4KCldlZCBNYXIgMzEgMTc6NDE6MDUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlKTogQWRkZWQgQkZEX1JFTE9DX01JUFNfR1BSRUwuCgkqIGxpYmVjb2ZmLmggKGVjb2ZmX2RhdGFfdHlwZSk6IEFkZGVkIGdwX3NpemUgZmllbGQuCgkqIGNvZmYtbWlwcy5jIChlY29mZl9ta29iamVjdF9ob29rKTogSW5pdGlhbGl6ZSBncF9zaXplIHRvIDguCgkoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogQ29tcGFyZSBhZ2FpbnN0IGdwX3NpemUsIG5vdCBoYXJkY29kZWQgOC4KCVNldCBmbGFncyB0byAwIGZvciBsYXJnZSBjb21tb24gc3ltYm9scy4KCShlY29mZl9ncHJlbF9yZWxvYyk6IEhhbmRsZSBub24temVybyBhZGRlbmQgZm9yIGV4dGVybmFsIHN5bWJvbHMsCgl3aGljaCBjYW4gb2NjdXIgZm9yIGdhcy1nZW5lcmF0ZWQgcmVsb2NzLgoJKGVjb2ZmX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IEFkZGVkIEJGRF9SRUxPQ19NSVBTX0dQUkVMIGNhc2UuCgkqIGJmZC5jIChiZmRfZ2V0X2dwX3NpemUsIGJmZF9zZXRfZ3Bfc2l6ZSk6IE5ldyBmdW5jdGlvbnMuCgkqIE1ha2VmaWxlLmluIChiZmQubyk6IE5vdyBkZXBlbmRzIG9uIGNvZmYvc3ltLmggYW5kIGxpYmVjb2ZmLmguCgpUdWUgTWFyIDMwIDA5OjMzOjE2IDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogc3JlYy5jIChzcmVjX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogVXNlIGxtYSBmaWVsZCBmb3IgbG9hZAoJYWRkcmVzcy4KCSogc2VjdGlvbi5jOiBBZGQgZGVjbGFyYXRpb24gb2YgbG1hIGZpZWxkIHRvIHNlY3Rpb24gc3RydWN0dXJlLgoJKiBjb2ZmY29kZS5oIChjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFVzZSBsbWEgZmllbGQgZm9yIGxvYWQKCWFkZHJlc3MuCgkqIGJmZC1pbi5oIChiZmRfc2V0X3NlY3Rpb25fdm1hKTogU2V0IGxtYSBhbG9uZyB3aXRoIHZtYS4KCgkqIGFvdXR4LmggKHRyYW5zbGF0ZV9mcm9tX25hdGl2ZV9zeW1fZmxhZ3MpOiBOb3cgaGFuZGxlcyBpbmRpcmVjdAoJc3ltYm9scyBpbiBhIGJldHRlciB3YXkuICh0cmFuc2xhdGVfdG9fbmF0aXZlX3N5bV9mbGFnKTogU2V0IHRoZQoJTl9JTkRSIGJpdCB3aGVuIG5lY2Vzc2FyeS4gKGFvdXQ8PnNsdXJwX3N5bWJvbF90YWJsZSk6IE1haW50YWluCglpbmRpcmVjdCBzdGF0ZS4KCSogc2VjdGlvbi5jOiBBZGRlZCBCRkRfSU5EX1NFQ1RJT05fTkFNRSBhbmQgYmZkX2luZF9zZWN0aW9uLgoJKGJmZF9tYWtlX3NlY3Rpb24pOiBDb3BlIHdpdGggbmV3IGJ1aWx0aW4gc2VjdGlvbi4KCSogc3ltcy5jIChiZmRfZGVjb2RlX3N5bWNsYXNzKTogQ2FuIG5vdyBwcmludCBpbmRpcmVjdCBzZWN0aW9uCglpbmZvLgoKV2VkIE1hciAyNCAxMzozNjozMyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBhb3V0LXRhcmdldC5oIChNWShvYmplY3RfcCkpOiAgRmFpbCBpZiBNQUNIVFlQRV9PSyBpcwoJZGVmaW5lZCwgYW5kIHlpZWxkcyBmYWxzZS4KCSogYW91dC1taXBzYnNkLmMsIGkzODZic2QuYzogIERlZmluZSBNQUNIVFlQRV9PSyBhcHByb3ByaWF0ZWx5LgoKCSogYXJjaGl2ZS5jIChzbmFyZl9hcl9oZHIpOiAgQWRkIHN1cHBvcnQgZm9yIHJlYWRpbmcgKG9ubHksCglzbyBmYXIpIEJTRC00LjQtc3R5bGUgZXh0ZW5kZWQgaGVhZGVycy4KCSogYXJjaGl2ZS5jOiAgU29tZSBtb3JlIGNvbW1lbnRzLgoKV2VkIE1hciAyNCAwMjowNToxMCAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBmaXggcnVsZSBmb3IgZHZpIGFuZCBpbmZvLCBzbyB0aGF0IHRoZSByZWN1cnNpdmUKCW1ha2VzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLCBpbnN0ZWFkIG9mIGFsd2F5cyBpbmZvCgpXZWQgTWFyIDI0IDAyOjU2OjQ0IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC5jIChiZmRfc2Vlayk6IERpc2FibGUgb3B0aW1pemVkIGhhbmRsaW5nIGZvciBhcmNoaXZlcyBhbmQKCWFyY2hpdmUgbWVtYmVyczsgdGhleSBuZWVkIG1vcmUgc3BlY2lhbCByZWF0bWVudC4gIEZvciBub3csIHZlcmlmeQoJdGhhdCBjb21wdXRlZCBhbmQgYWN0dWFsIGZpbGUgcG9zaXRpb25zIGNvcnJlc3BvbmQuCgpUdWUgTWFyIDIzIDA4OjQ1OjMzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIG1pcHNic2QuYzogUmVuYW1lZCBmcm9tIGFvdXQtbWlwc2JzZC5jLgoJKHNldF9hcmNoX21hY2gpOiBEZWxldGUgbm9uLU1JUFMgY29kZS4KCShyZWxvY19ob3d0b190eXBlX2xvb2t1cCk6IERpdHRvLgoJKiBNYWtlZmlsZS5pbjogQWRqdXN0ZWQuCgoJKiBsaWJiZmQuYyAoYmZkX3RlbGwpOiBVcGRhdGUgYHdoZXJlJyBmaWVsZC4KCShiZmRfc2Vlayk6IERvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgZmlsZQoJcG9zaXRpb24uICBJZiBGSUxFX09GRlNFVF9JU19DSEFSX0lOREVYIGlzIGRlZmluZWQsIGNoZWNrIGB3aGVyZScKCWZpZWxkIGFnYWluc3QgYSBTRUVLX1NFVCByZXF1ZXN0LiAgQ2FsbCBiZmRfdGVsbCB0byByZS11cGRhdGUKCWB3aGVyZScgZmllbGQgd2hlbiBkb25lLgoJKGJmZF9yZWFkLCBiZmRfd3JpdGUpIFtGSUxFX09GRlNFVF9JU19DSEFSX0lOREVYXTogTWFpbnRhaW4KCWB3aGVyZScgZmllbGQuCgkqIGhvc3RzL3NwYXJjLmg6IERlZmluZSBGSUxFX09GRlNFVF9JU19DSEFSX0lOREVYLgoKTW9uIE1hciAyMiAyMzoxODoxMCAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogYWRkZWQgaW5zdGFsbGNoZWNrIHRhcmdldAoKTW9uIE1hciAyMiAxNDo1NzoxOCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogUmVsb2NhdGUgZW5jYXBzdWxhdGVkIHN0YWJzCglpZiB0aGUgdHlwZSBpcyBub3Qgc3ROaWwuCgpUdWUgTWFyIDE2IDEwOjM1OjI3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogZWxmMzIuYyAoZWxmX2xpdHRsZV92ZWMsIGVsZl9iaWdfdmVjKTogRGVsZXRlIG5vdy1pbnZhbGlkCglmb3J3YXJkIGRlY2xhcmF0aW9ucy4KCgkqIGVsZjMyLXNwYXJjLmMgKGVsZl9zcGFyY19ob3d0b190YWJsZSk6IERvbid0IHVzZSBDT05TVCBoZXJlLAoJaXQncyBpbXBsaWVkIGJ5IHRoZSB0eXBlLgoKRnJpIE1hciAxMiAxODo1ODowOCAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaG9zdDogcmVjb2duaXplIHNwYXJjLXN1bi1zb2xhcmlzMiogaW5zdGVhZCBvZiBzcGFyYy1zdW4tc29sYXJpcyoKClR1ZSBNYXIgIDkgMDk6MjM6MTIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiByczYwMDAtY29yZS5jOiBBZGQgLmxkaW5mbyBzZWN0aW9uLgoKRnJpIE1hciAxMiAxMTo1Nzo1MiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoTUFLRU9WRVJSSURFUyk6IERlZmluZSB0byBiZSBlbXB0eS4KCkZyaSBNYXIgMTIgMDg6MzI6MTEgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmMgKGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyk6IHdoaXRlc3BhY2UKCSogc2VjbGV0LmMgKHNlY2xldF9kdW1wX3NlY2xldCk6IERvbid0IHRyeSBhbmQgZmlsbCBzZWN0aW9ucyB3aXRoCglubyBjb250ZW50cy4KClRodSBNYXIgMTEgMTk6MjY6MTUgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogaG9zdHMvZ28zMi5oOiBkb24ndCBkZWZpbmUgUE9TSVhfVVRJTUUKClR1ZSBNYXIgIDkgMTA6NTI6MDEgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBlbGYzMi5jIChlbGZfb2JqZWN0X3ApOiAgVXNlIEVMRl9BUkNIIHN0b3JlZCBpbiB4dmVjIHRvIG1hdGNoCglhZ2FpbnN0IG1hY2hpbmUgYXJjaGl0ZWN0dXJlIHN0b3JlZCBpbiB0aGUgRUxGIGhlYWRlciwgdG8gcmVzb2x2ZQoJYW1iaWd1aXRpZXMuCgkqIGVsZjMyLmMgKGJmZF9zZWN0aW9uX2Zyb21fc2hkcik6ICBCZmRfbWFrZV9zZWN0aW9uIGNhbiByZXR1cm4KCU5VTEwsIHNvIG9ubHkgdXNlIHJlc3VsdHMgd2hlbiBub24tTlVMTC4KCSogdGFyZ2V0cy5jIChlbGYzMl9tNjhrX3ZlYywgZWxmMzJfaTg2MF92ZWMpOiAgQWRkIGV4dGVybiBkZWNscwoJYW5kIGFkZCB0byB2ZWN0b3Igb2YgdGFyZ2V0cy4KCk1vbiBNYXIgIDggMTU6MTM6NDQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmMgKGVjb2ZmX3NldF9zeW1ib2xfaW5mbyk6IEVuY2Fwc3VsYXRlZCBTVEFCUyBzeW1ib2xzCglhcmUgYWx3YXlzIGp1c3QgZGVidWdnaW5nIHN5bWJvbHMuCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfW2dzXWV0X3N5bV9pbmRleCk6IE1vdmVkIG1hY3JvcyBmcm9tIGhlcmUuLi4KCWxpYmVjb2ZmLmggKGVjb2ZmX1tnc11ldF9zeW1faW5kZXgpOiAuLi50byBoZXJlLgoKTW9uIE1hciAgOCAxNDo1NToxMyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBocHBhLmMgKF9QQV9SSVNDX0lEKTogRGVmaW5lZCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkIChlLmcuLCBmb3IKCWhwdXggNykuICBQYXRjaCBmcm9tIGZyaWVkbWFuQGdudS5haS5taXQuZWR1LgoJKGhwcGFfb2JqZWN0X3ApOiBPbmx5IGNoZWNrIGZvciBETF9NQUdJQyBhbmQgU0hMX01BR0lDIGlmIHRoZXkncmUKCWRlZmluZWQsIHdoaWNoIHRoZXkgYXJlbid0IGluIGhwdXggNy4wLgoKCSogYWl4Mzg2LWNvcmUuYzogSW5jbHVkZSB1aW5mby5oIGFuZCBjb3JlZHVtcC5oLiAgUGF0Y2ggZnJvbSBNaW5oCglUcmFuLUxlLCB0cmFubGVAaW50ZWxsaWNvcnAuY29tLgoKRnJpIE1hciAgNSAxNDo1NDoyMSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfZ2VuZXJpY19yZWxvYyk6IElmIHRoZSBhZGRlbmQgaXMgbm9uLXplcm8sIGdvCglhaGVhZCBhbmQgZG8gdGhlIHJlbG9jYXRpb24uCgkoZWNvZmZfcmVmaGlfcmVsb2MpOiBEb24ndCB0byB0aGUgcmVsb2NhdGlvbiBoZXJlLCBqdXN0IHJlbWVtYmVyCgl3aGF0IG5lZWRzIHRvIGJlIGRvbmUuCgkoZWNvZmZfcmVmbG9fcmVsb2MpOiBEbyB0aGUgUkVGSEkgcmVsb2NhdGlvbiBoZXJlLgoKVGh1IE1hciAgNCAxNDo0NDowMSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfYmZkX3JlbG9jX3R5cGVfbG9va3VwKTogTmV3IGZ1bmN0aW9uLgoJKGVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IEFkZGVkIEJGRF9BU1NFUlQgY2FsbHMgdG8gZW5zdXJlCglyZWxvY3MgYXJlIHJlYXNvbmFibGUuCgkqIGNvZmYtbXN5bS5jOiBFbGltaW5hdGVkIHVzZXMgb2YgREVGVU4uCgkoZWNvZmZfc3dhcF90aXJfb3V0KTogTmV3IGZ1bmN0aW9uLgoKVHVlIE1hciAgMiAxNzo1Mjo1OCAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkoVWx0cml4IDIuMiBzdXBwb3J0IGZyb20gTWljaGFlbCBSZW5kZWxsIDxtaWNoYWVsQG1lcmN1cnkuY3MubXVuLmNhPikKCSogY29uZmlndXJlLmhvc3QgKHZheC0qLXVsdHJpeDIqKTogIEFkZCB0cmlwbGV0LgoJKiBob3N0cy92YXh1bHQyLmg6ICBOZXcgZmlsZS4KCSogY29uZmlnL3ZheHVsdDIubWg6ICBOZXcgZmlsZS4KCgkqIGFvdXR4LmggKHN0cmluZy5oKTogIEluY2x1ZGUgZm9yIHN0cmNociBhbmQgZnJpZW5kcy4KCSogYXJjaGl2ZS5jIChzdHJpbmcuaCk6ICBJbmNsdWRlIGZvciBtZW1jaHIgYW5kIGZyaWVuZHMuCgkqIGVsZjMyLmMgKHN0cmluZy5oKTogIEluY2x1ZGUgZm9yIHN0cnJjaHIgYW5kIGZyaWVuZHMuCgpTYXQgRmViIDI3IDAwOjQ0OjI0IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5jIChzdW5vczRfcmVsb2NfdHlwZV9sb29rdXApOiBVbnVzZWQ7IGRlbGV0ZWQuCgkoTVlfc2V0X3NpemVzKTogVXNlIHN1bm9zNF9zZXRfc2l6ZXMuCgoJKiBlbGYzMi5jOiBSZW5hbWVkIGZyb20gZWxmLmMuICBTZXZlcmFsIENQVS1zcGVjaWZpYyBmdW5jdGlvbnMKCWRlbGV0ZWQsIGFzIHdlbGwgYXMgZWxmLWJpZyBhbmQgZWxmLWxpdHRsZSB0YXJnZXRzLgoJKiBsaWJlbGYuaDogTmV3IGZpbGUuCgkqIGVsZjMyLXNwYXJjLmMsIGVsZjMyLWkzODYuYywgZWxmMzItaTg2MC5jLCBlbGYzMi1tNjhrLmM6IE5ldwoJZmlsZXMsIG5ldyB0YXJnZXRzLgoJKiBNYWtlZmlsZS5pbiwgY29uZmlnLyotZWxmLm10LCB0YXJnZXRzLmM6IEFkanVzdGVkLgoKCSogaTM4NmxpbnV4LmMgKFRBUkdFVE5BTUUpOiBVc2UgaHlwaGVucyBpbnN0ZWFkIG9mIHBhcmVudGhlc2VzLgoKCSogY29mZmNvZGUuaCAoY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBEb24ndCBuZWVkCgl2YXJpYWJsZSAib2xkX3NvZmFyIiBpZiBjb21waWxpbmcgZm9yIGk5NjAuCgoJKiByZWxvYy5jIChiZmRfZGVmYXVsdF9yZWxvY190eXBlX2xvb2t1cCk6IEZpcnN0IGFyZ3VtZW50IGlzIG5vdyBhCgliZmQgcG9pbnRlci4KCSogbGliYmZkLmg6IFVwZGF0ZWQuCgoJKiBpZWVlLmMgKGV4dGVuLCBlbnZpKTogInN0YXRpYyIgYmVsb25ncyBmaXJzdCBpbiBkZWNsYXJhdGlvbi4KCkZyaSBGZWIgMjYgMTc6Mzc6MzQgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBzcmVjLmM6IGFkZCBzdXBwb3J0IGZvciBzeW1ib2xzcmVjLCBzcmVjb3JkcyB3aXRoIHN5bWJvbHMgaW4KCXRoZW0uCgpUaHUgRmViIDI1IDExOjQzOjMwIDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjYWNvcGhvbnkuY3lnbnVzLmNvbSkKCgkqIGllZWUuYzogIGNhc3QgYWxsIGFyZ3VtZW50cyBvZiBpZWVlX3dyaXRlX2J5dGUgdG8gYmZkX2J5dGUKCXRvIGF2b2lkIGxpbnQgY29tcGxhaW50cy4KClRodSBGZWIgMjUgMDI6MTU6NTIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmLmMgKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBTZWN0aW9uICIuc2hzdHJ0YWIiIHNob3VsZCBiZQoJdHlwZSBTSFRfU1RSVEFCLiAgRG9uJ3QgYWx0ZXIgZmlsZSBvZmZzZXQgZm9yIHNlY3Rpb24gMC4KCShyZWxvY190eXBlX25hbWVzKTogTm93IGFuIGFycmF5IGluc3RlYWQgb2YgYSBtYWNyby4gIFN0aWxsIGluc2lkZQoJIiNpZiAwIiwgc2luY2UgaXQncyB1c2VkIG9ubHkgaW4gZGVidWdnaW5nIGNvZGUgYWxzbyBpbiAiI2lmIDAiLgoJKHN0cnVjdCBlbGZfcmVsb2NfbWFwX2VsdCwgc3RydWN0IGVsZl9yZWxvY19tYXApOiBOZXcgdHlwZXMuCgkoc29ydF9yZWxvY19tYXApOiBOZXcgZnVuY3Rpb24uCgkoc3BhcmNfcmVsb2NfbWFwKTogTmV3IHZhcmlhYmxlLgoJKGVsZl9iZmRfcmVsb2NfdHlwZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uCgpUdWUgRmViIDIzIDEyOjE3OjE2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIChKVU1QX1RBQkxFKTogQWRkZWQgYmZkX3JlbG9jX3R5cGVfbG9va3VwIGFuZAoJYmZkX21ha2VfZGVidWdfc3ltYm9sOyB0aGV5IHdlcmUgYWxyZWFkeSBpbiB0aGUgdGFyZ2V0IHN0cnVjdHVyZS4KCSogQWRqdXN0ZWQgYWxsIHVzZXMgb2YgSlVNUF9UQUJMRS4KCSogY29mZmdlbi5jLCBsaWJjb2ZmLWluLmggKGNvZmZfYmZkX21ha2VfZGVidWdfc3ltYm9sKTogUmVuYW1lZAoJZnJvbSBjb2ZmX21ha2VfZGVidWdfc3ltYm9sLgoJKiBsaWJjb2ZmLmg6IFVwZGF0ZWQgYWNjb3JkaW5nbHkuCgoJKiBNaW5vciBjbGVhbnVwcyBwcm92b2tlZCBieSBnY2Mgd2FybmluZ3M6CgkqIGFvdXR4LmggKE5BTUUoYW91dCwgcmVsb2NfdHlwZV9sb29rdXApKSwKCWNwdS1oODMwMC5jIChsb2NhbF9iZmRfcmVsb2NfdHlwZV9sb29rdXApLAoJY3B1LXo4ay5jIChsb2NhbF9iZmRfcmVsb2NfdHlwZV9sb29rdXApOiBBZGRlZCBkZWZhdWx0IGNhc2UgdG8KCXN3aXRjaGVzLgoJKiBhcmNoaXZlLmMgKGRvX3NsdXJwX2JzZF9hcm1hcCwgZG9fc2x1cnBfY29mZl9hcm1hcCksCglpZWVlLmMgKGllZWVfc2x1cnBfc2VjdGlvbl9kYXRhKSwKCWVsZi5jIChlbGZfbWFrZV9zZWN0aW9ucywgZWxmX2Zha2Vfc2VjdGlvbnMsCgllbGZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zLCBlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKToKCVJlbW92ZWQgdW51c2VkIHZhcmlhYmxlcy4KCSogYXJjaHVyZXMuYzogUmVtb3ZlZCAvKiBmcm9tIHdpdGhpbiBjb21tZW50LgoJKiBib3V0LmMgKGJfb3V0X3NxdWlydF9vdXRfcmVsb2NzKTogSW5pdGlhbGl6ZSByX2V4dGVybi4KCSogb2FzeXMuYyAob2FzeXNfd3JpdGVfZGF0YSk6IEluaXRpYWxpemUgaS4KCk1vbiBGZWIgMjIgMTg6NDA6MDYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogbGliY29mZi5oIChvYmpfcmF3X3N5bWVudF9jb3VuKTogIE5ldyBtYWNyby4KCSogY29mZmdlbi5jIChjb2ZmX2dldF9ub3JtYWxpemVkX3N5bXRhYik6ICBJbml0aWFsaXplCglyYXdfc3ltZW50X2NvdW50LgoJKiBjb2ZmZ2VuLmMgKGNvZmZfZmluZF9uZWFyZXN0X2xpbmUpOiAgTnVtZXJvdXMgbGl0dGxlIGZpeGVzLgoKTW9uIEZlYiAyMiAxNTowMzowNyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogc3RCbG9jayBzeW1ib2xzIGFyZSBhbHdheXMKCWRlYnVnZ2luZyBzeW1ib2xzLgoJKGVjb2ZmX2dldF9kZWJ1Zyk6IE9mZnNldCB0aGUgZmRyIGFkciBieSB0aGUgYWRyIG9mIHRoZSBmaXJzdCBwZHIsCglmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRvb2xzIGZyb20gTUlQUy4KCgkqIGNvbmZpZy9iaWdtaXBzLm10OiBOZXcgZmlsZTsgZGVmYXVsdCB2ZWN0b3IgaXMgZWNvZmZfYmlnX3ZlYy4KCSogY29uZmlnL2lyaXgzLm10LCBjb25maWcvaXJpeDQubXQ6IFJlbW92ZWQuCgkqIGNvbmZpZ3VyZS5pbiAobWlwcy0qLWVjb2ZmKTogTmV3IHRhcmdldDsgdXNlcyBiaWdtaXBzLm10LgoJKG1pcHMtc2dpLSosIG1pcHMtYmlnLSopOiBVc2UgYmlnbWlwcyByYXRoZXIgdGhhbiBpcml4My4KCldlZCBGZWIgMTcgMjM6NDA6NDEgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBob3N0cy9ocDMwMGJzZC5oOiAgQWRkIGdyb3NzIGhhY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UKCWFyZSBydW5uaW5nIG9uIEJTRCA0LjMgb3IgQlNEIDQuNCwgYW5kIHVzZSBhcHByb3ByaWF0ZSBpbmNsdWRlCglmaWxlcyAoYW5kIHNldCBvdGhlciBwYXJhbWV0ZXJzKSB0byBtYXRjaC4KCldlZCBGZWIgMTcgMTI6Mjg6MTMgMTk5MyAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiB0cmFkLWNvcmUuYyAodHJhZF91bml4X21ha2VfZW1wdHlfc3ltYm9sKTogd3JhcCBQQVJBTVMgYXJvdW5kIGFuCgkgIGFuc2kgZGVmaW5pdGlvbiB3aGljaCBvdGhlcndpc2UgY29uZnVzZXMgbm9uLWFuc2kgY29tcGlsZXJzLgoKCSogYW91dC1hZG9iZS5jIChhb3V0X2Fkb2JlX29iamVjdF9wKTogZWxpbWluYXRlIGEgd2FybmluZyBmcm9tIHZheAoJICB1bHRyaXggY2MgYnkgZm9yd2FyZCBkZWNsYXJpbmcgZ2V0ZW52IGFzIGlzIGRvbmUgaW4KCSAgYmZkX2ZpbmRfdGFyZ2V0LgoKVHVlIEZlYiAxNiAxNzo1Njo1OCAxOTkzICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGVsZi5jIChlbGZfaW5mb190b19ob3d0byk6IGNhc3QgYW4gZW51bSBpbnRvIHVuc2lnbmVkIGNoYXIKCSAgYXZvaWRpbmcgYSBmYXRhbCBlcnJvciBpbiB2YXggdWx0cml4IDQuMiBjYy4KClR1ZSBGZWIgMTYgMDA6NDQ6NTQgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBiZmQtaW4uaCwgVkVSU0lPTjogIFJvbGwgdG8gdmVyc2lvbiAyLjEuCgpNb24gRmViIDE1IDIwOjQzOjUxIDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogb2FzeXMuYyAob2FzeXNfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogIExpbnQuCgkqIHNyZWMuYzogIFdoaXRlc3BhY2UgY2xlYW51cC4KCkZyaSBGZWIgMTIgMTQ6MjM6MDcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZmdlbi5jIChjb2ZmX3ByaW50X3N5bWJvbCk6IFByaW50IGNvcnJlY3QgdGFnbmR4IHZhbHVlOwoJY2xlYW5lZCB1cCBvdXRwdXQgZm9ybWF0dGluZyBhIGJpdC4KCkZyaSBGZWIgMTIgMDg6Mjg6NTYgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3NldF9hcmNoX21hY2hfaG9vayk6ICpGSVhNRSogdGhlIEg4LzMwMCBpcyBhbHdheXMKCXJlbGF4YWJsZS4gIFNob3VsZCBiZSBtb3ZlZCBzb21ld2hlcmUgZWxzZS4KClRodSBGZWIgMTEgMTQ6MDk6NDIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogYW91dC1taXBzYnNkLmM6IEVsaW1pbmF0ZWQgdXNlcyBvZiBERUZVTi4KCShhb3V0X21pcHNfKl92ZWMpOiBBZGRlZCBzZWNsZXRfbGluayBlbGVtZW50LgoKCSogTWFrZWZpbGUuaW4gKEJGRF9CQUNLRU5EUywgQ0ZJTEVTLCBhb3V0LW1pcHNic2Qubyk6IEFkZGVkCglzdXBwb3J0IGZvciBhb3V0LW1pcHNic2QgdGFyZ2V0LgoKCSogYm91dC5jIChnZXRfdmFsdWUpOiBEb24ndCB0cnVuY2F0ZSAzMi1iaXQgYWRkZW5kIHRvIDE2IGJpdHMuCgpGcmkgRmViICA1IDA4OjA4OjQzIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY3B1LWg4NTAwLmMgKHNjYW5fbWFjaCk6IHJldHVybiBmYWxzZSBpZiBpdCdzIG5vdCBhbiBIOC81MDAKClRodSBGZWIgIDQgMTI6NTI6NDAgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJQWRkIHN1cHBvcnQgZm9yIHRoZSBIOC81MDAKCgkqIGNvZmYtaDg1MDAuYywgY3B1LWg4NTAwLmMsIGFyY2h1cmVzLmMsIGNvZmZjb2RlLmgsIHRhcmdldHMuYwoKVGh1IEZlYiAgNCAxMjozNTowMiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBsaWJlY29mZi5oOiBOZXcgZmlsZS4gIERlZmluZXMgRUNPRkYgYmFja2VuZCBkYXRhIGZvciBnZGIuCgkqIGNvZmYtbWlwcy5jOiBOb3cgaW5jbHVkZXMgbGliZWNvZmYuaC4KCShlY29mZl9kYXRhX3R5cGUpOiBNb3ZlZCB0byBsaWJlY29mZi5oLgoJKGVjb2ZmX3NsdXJwX3N5bWJvbGljX2luZm8pOiBNYWRlIGdsb2JhbGx5IHZpc2libGUgc28gdGhhdCBnZGIgY2FuCgljYWxsIGl0LiAgSWYgdGhlcmUgaXMgZXZlciBhbm90aGVyIEVDT0ZGIHRhcmdldCwgdGhpcyBhbmQgdGhlCglzd2FwcGluZyBmdW5jdGlvbnMgc2hvdWxkIGJlIGFjY2Vzc2VkIHZpYSBhbiBFQ09GRiBzcGVjaWZpYyB0YXJnZXQKCXZlY3Rvci4KCSogTWFrZWZpbGUuaW4gKGNvZmYtbWlwcy5vKTogRGVwZW5kcyBvbiBsaWJlY29mZi5oLgoKV2VkIEZlYiAgMyAwOToxNDozNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oOiBSZW1vdmVkIE1JUFMgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHNpbmNlIGNvZmYtbWlwcy5jCglubyBsb25nZXIgaW5jbHVkZXMgdGhpcyBmaWxlLgoKCSogY29mZi1tc3ltLmMgKGVjb2ZmX3N3YXBfZmRyX2luLCBlY29mZl9zd2FwX2V4dF9pbik6IFNldCByZXNlcnZlZAoJYml0cyB0byAwIHRvIG1ha2UgY29tcGFyaXNvbiB0ZXN0IHVzZWZ1bC4KCgkqIGNvbmZpZy9pcml4My5taCwgY29uZmlnL2lyaXg0Lm1oIChIREVGSU5FUyk6IFNldCB0byAtRyA0IHRvCglhdm9pZCBvdmVyZmxvd2luZyBHUCBhY2Nlc3NpYmxlIHNlY3Rpb25zIGluIGJpbnV0aWxzL29iamR1bXAuCgpUdWUgRmViICAyIDE1OjM2OjU1IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogYW91dHguaCAoTkFNRShhb3V0LHNsdXJwX3N5bWJvbF90YWJsZSkpOiAgTWFkZSBzeW1ib2wKCXJlYWRpbmcgbW9yZSByb2J1c3Q6ICBGYWlsIGlmIHN0cmluZyBpbmRleCBpcyBvdXQgb2Ygc3RyaW5nCgl0YWJsZSByYW5nZS4KClR1ZSBGZWIgIDIgMTE6NDM6MjUgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogYm91dC5jIChiX291dF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMsIGNhc2VzIFBDUkVMMjQgYW5kCglQQ1JFTDEzKTogRG9uJ3QgdGFrZSBkc3RfYWRkcmVzcyBpbnRvIGFjY291bnQ7IHRoZSBpbnB1dCBmaWxlIGhhcwoJYWxyZWFkeSB0YWtlbiBjYXJlIG9mIHRoYXQuCgpUdWUgRmViICAyIDExOjQxOjA2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jOiBDb21wbGV0ZWQgc3VwcG9ydCBmb3IgbGlua2VyIGFuZCBiaW51dGlscy4KCk1vbiBGZWIgIDEgMTQ6NDU6MzggMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogYm91dC5jIChiX291dF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMsIGNhc2UgQUJTMzIpOiBLZWVwCglvcmlnaW5hbCBhZGRlbmQgZnJvbSBzZWN0aW9uIGNvbnRlbnRzLgoKVGh1IEphbiAyOCAyMTowMTozNyAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCglGaXggbWlub3IgYnVncyByZXBvcnRlZCBieSBDYXJsIEdyZWNvLCA8Y2dyZWNvQHBhcnJvdC5jcmVpZ2h0b24uZWR1PjoKCSogaG9zdHMvZGVsdGE4OC5oIChzdHJ0b2wpOiAgRml4IHByb3RvdHlwZS4KCSogY29uZmlnL204OGstY29mZi5tdCAoU0VMRUNUX0FSQ0hJVEVDVFVSRVMpOiAgRml4IG5hbWUuCgpXZWQgSmFuIDI3IDE3OjE2OjUxIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZi5jOiBHZXQgcmlkIG9mICIjaWZkZWYgc3BhcmMiLgoJKFJFTE9DX1RZUEVfTkFNRVMpOiBOZXZlciB1c2VkIChjdXJyZW50bHkpLCBzbyBkb24ndCBpbmNsdWRlIGl0LgoJKGVsZl9zcGFyY19ob3d0b190YWJsZSk6IFJlbmFtZWQgZnJvbSBlbGZfaG93dG9fdGFibGUsIGFuZCBhbHdheXMKCXVzZWQuCgkoZWxmX2luZm9fdG9faG93dG8pOiBVc2UgcnVudGltZSBjb25kaXRpb25hbHMgb24gQ1BVIHR5cGUsIG5vdAoJY29tcGlsZSB0eXBlIGNvbmRpdGlvbmFscyBvbiBob3N0IENQVS4KCShlbGZfbGl0dGxlX3ZlYywgZWxmX2JpZ192ZWMpOiBVc2UgYmZkX2RlZmF1bHRfcmVsb2NfdHlwZV9sb29rdXAsCglub3QgbnVsbCBwb2ludGVyLgoJKHJlbG9jX3R5cGUsIFJFTE9DX1RZUEVfTkFNRVMpOiBJbmNsdWRlIGkzODYgdmFsdWVzLgoKVHVlIEphbiAyNiAxMTo0MzoxNCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmMgKFNFQ19JU19DT01NT04pOiBOZXcgc2VjdGlvbiBmbGFnLCBuZWVkZWQgZm9yIE1JUFMKCUVDT0ZGIHdoaWNoIGhhcyB0d28gY29tbW9uIHNlY3Rpb25zLgoJKGJmZF9jb21fc2VjdGlvbik6IFNldCBTRUNfSVNfQ09NTU9OIGZsYWcuCgkqIGJmZC1pbi5oIChiZmRfaXNfY29tX3NlY3Rpb24pOiBOZXcgbWFjcm8gdG8gdGVzdCBTRUNfSVNfQ09NTU9OLgoJKiBhb3V0eC5oLCBhcmNoaXZlLmMsIGJvdXQuYywgY29mZi1hMjlrLmMsIGNvZmYtbTg4ay5jLAoJY29mZi1taXBzLmMsIGNvZmZnZW4uYywgaWVlZS5jLCBvYXN5cy5jLCByZWxvYy5jLCBzeW1zLjogVXNlCgliZmRfaXNfY29tX3NlY3Rpb24gbWFjcm8gcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIGVxdWFsaXR5IHRvCgliZmRfY29tX3NlY3Rpb24uCgpNb24gSmFuIDI1IDE1OjI3OjM2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKF9iZmRfY29mZl9ta29iamVjdF9ob29rKTogUGFzcyBhb3V0aGRyIGFyZ3VtZW50LgoJKGNvZmZfbWtvYmplY3RfaG9vayk6IEFjY2VwdCBhb3V0aGRyIGFyZ3VtZW50LgoJKiBjb2ZmZ2VuLmMgKGNvZmZfcmVhbF9vYmplY3RfcCk6IFBhc3MgYW91dGhkciB0byBta29iamVjdF9ob29rLgoJSGFuZGxlIE5VTEwgYW91dGhkciBhcmd1bWVudC4KCShjb2ZmX29iamVjdF9wKTogSWYgdGhlcmUgaXMgbm8gYW91dGhkciwgcGFzcyBpdCBhcyBOVUxMIHRvCgljb2ZmX3JlYWxfb2JqZWN0X3AuCgkqIGxpYmNvZmYuaDogUmVidWlsdCBmb3IgbWtvYmplY3RfaG9vayBjaGFuZ2VzLgoKCSogY29mZnN3YXAuaCAoY29mZl9zd2FwX2FvdXRoZHJfaW4sIGNvZmZfc3dhcF9hb3V0aGRyX2luKTogU3dhcAoJYWRkaXRpb25hbCBNSVBTIEVDT0ZGIGZpZWxkcy4KClNhdCBKYW4gMjMgMTg6MzY6MjAgUFNUIDE5OTMgIFJhbHBoIENhbXBiZWxsICAocmFscGhjQHB5cmFtaWQuY29tKQoKCSogY29uZmlndXJlLmhvc3Q6IGFkZGVkIG1pcHMtZGVjLWJzZCoKCSogY29uZmlndXJlLmluOiBhZGRlZCBtaXBzLWRlYy1ic2QqCgkqIGFvdXQtbWlwc2JzZC5jOiBuZXcgZmlsZSBmb3IgbWlwcy1kZWMtYnNkKgoJKiBhb3V0LXRhcmdldC5oOiBkb24ndCBkZWZpbmUgJycgaWYgJ01ZX0JGRF9UQVJHRVQnIGlzIGRlZmluZWQuCgkqIGFvdXR4Lmg6IGFkZGVkIG1pcHMgc3VwcG9ydC4KCSogYXJjaHVyZXMuYzogYWRkZWQgbWlwcyBzdXBwb3J0IHRvIGJmZF9kZWZhdWx0X3NjYW4oKS4KCSogY3B1LW1pcHMuYzogYWRkZWQgc3VwcG9ydCBmb3IgUjQwMDAgKHVudGVzdGVkKS4KCSogbGliYW91dC5oOiBhZGRlZCBNSVBTMSAmIE1JUFMyIG1hZ2ljIG51bWJlcnMuCgkqIHJlbG9jLmM6IGZpeCB0eXBvJ3MgaW4gY29tbWVudHMuIEFkZGVkIEJGRF9SRUxPQyBlbnRyaWVzIHdoaWNoIEkKCQlob3BlIHdpbGwgbWFrZSBpdCBpbnRvIGluY2x1ZGUvYmZkLmguCgkqIHRhcmdldHMuYzogYWRkZWQgYW91dF9taXBzXypfdmVjLgoKV2VkIEphbiAyMCAxNzoxNTo1MiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBjb25maWcvZGVjc3RhdGlvbi5tdDogU2V0IERFRkFVTFRfVkVDVE9SIHRvIGVjb2ZmX2xpdHRsZV92ZWMuCgpUdWUgSmFuIDE5IDA5OjA2OjE0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIChiZmRfYXN5bWJvbF92YWx1ZSk6IEFkZCBuZWVkZWQgcGFyZW50aGVzZXMuCgoJKiBsaWJjb2ZmLWluLmg6IFVwZGF0ZSBwcm90b3R5cGUgZm9yIGNvZmZfY291bnRfbGluZW51bWJlcnMuCgpGcmkgSmFuIDE1IDE4OjEzOjE3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtbXN5bS5jIChlY29mZl9zd2FwX2hkcl9vdXQsIGVjb2ZmX3N3YXBfZmRyX291dCwKCWVjb2ZmX3N3YXBfcGRyX291dCwgZWNvZmZfc3dhcF9zeW1fb3V0LCBlY29mZl9zd2FwX2V4dF9vdXQsCgllY29mZl9zd2FwX3JuZHhfb3V0LCBlY29mZl9zd2FwX3JmZF9vdXQsIGVjb2ZmX3N3YXBfb3B0X2luLAoJZWNvZmZfc3dhcF9vcHRfb3V0LCBlY29mZl9zd2FwX2Rucl9pbiwgZWNvZmZfc3dhcF9kbnJfb3V0KTogTmV3CglmdW5jdGlvbnMuCgkqIGNvZmZzd2FwLmg6IElmIE5PX0NPRkZfUkVMT0NTIGlzIGRlZmluZWQsIGRvbid0IGRlZmluZQoJYmZkX3N3YXBfcmVsb2NfaW4gb3IgY29mZl9zd2FwX3JlbG9jX291dC4KCSogY29mZi1taXBzLmM6IEFkZGVkIGNvZGUgdG8gbGluayBhbmQgd3JpdGUgb3V0IHN5bWJvbGljIGRlYnVnZ2luZwoJaW5mb3JtYXRpb24sIGFuZCB0byBzd2FwIHJlbG9jcyBpbiBhbmQgb3V0LgoKVGh1IEphbiAxNCAxNTo1MTo1OCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGxpYmNvZmYuaCwgY29mZmdlbi5jIChjb2ZmX2NvdW50X2xpbmVudW1iZXJzKSwgY29mZmNvZGUuaAoJKGNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogY29mZl9jb3VudF9saW5lbnVtYmVycyByZXR1cm5zIHRoZQoJbnVtYmVyIG9mIGxpbmUgbnVtYmVyIHJlY29yZHMgaXQgZm91bmQuCgoJKiBjb2ZmZ2VuLmMgKGNvZmZfd3JpdGVfbGluZW51bWJlcnMpOiBvbmx5IHdyaXRlIG91dCBsaW5lIG51bWJlcnMKCWluIHRoZSBzZWN0aW9uIHRoZXkgYmVsb25nIHRvLgoKTW9uIEphbiAxMSAxODozMjoyMiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB0YXJnZXRzLmMgKGJmZF90YXJnZXQpOiBBZGRlZCByZWxvY2F0ZWFibGUgYXJndW1lbnQgdG8KCV9iZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzLiAgQWRkZWQgX2JmZF9zZWNsZXRfbGluawoJdGFyZ2V0IHZlY3RvciBmb3IgbGlua2VyIHVzZS4KCSogYmZkLmMgKGJmZF9zZWNsZXRfbGluayk6IE5ldyBtYWNyby4KCSogYmZkLWluLmggKEpVTVBfVEFCTEUpOiBBZGRlZCBfYmZkX3NlY2xldF9saW5rLgoJKiBzZWNsZXQuYyAocmVsLCBzZWNsZXRfZHVtcF9zZWNsZXQpOiBBZGRlZCByZWxvY2F0ZWFibGUgYXJndW1lbnQKCWFuZCBib29sZWFuIHJldHVybiB2YWx1ZS4gIE1hZGUgc3RhdGljLgoJKGJmZF9nZW5lcmljX3NlY2xldF9saW5rKTogUmVuYW1lZCBmcm9tIHNlY2xldF9kdW1wLiAgQWRkZWQKCXJlbG9jYXRlYWJsZSBhcmd1bWVudC4KCSogcmVsb2MuYyAoYmZkX2dlbmVyaWNfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkZWQKCXJlbG9jYXRlYWJsZSBhcmd1bWVudCAoaWYgcmVsb2NhdGVhYmxlLCBzYXZlcyByZWxvY3MpLgoJKiBib3V0LmMgKGJfb3V0X2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyksCglyZWxvYzE2LmMgKGJmZF9jb2ZmX3JlbG9jMTZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkZWQKCXJlbG9jYXRlYWJsZSBhcmd1bWVudCAoaWYgcmVsb2NhdGVhYmxlLCBqdXN0IGNhbGxzCgliZmRfZ2VuZXJpY19nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMpLgoJKiBsaWJjb2ZmLWluLmggKGJmZF9jb2ZmX3JlbG9jMTZfZ2V0X3ZhbHVlKTogQWRkZWQgcmVsb2NhdGVhYmxlCglhcmd1bWVudCB0byBwcm90b3R5cGUuCgkqIEFsbCB0YXJnZXRzOiBTZXQgbmV3IF9iZmRfc2VjbGV0X2xpbmsgdmVjdG9yIHRvCgliZmRfZ2VuZXJpY19zZWNsZXRfbGluay4KClNhdCBKYW4gIDkgMjE6Mjk6MzIgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmZnZW4uYzogICNpbmNsdWRlIHNlY2xldC5oLgoKU2F0IEphbiAgOSAxOTo0ODoxNCAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaHBwYS5jIChocHBhX29iamVjdF9zZXR1cCk6ICBHZXQgcmlkIG9mIGFsbCBrbm93bGVkZ2Ugb2Ygc3RhYnMKCWRlYnVnIGluZm8uICBTZXR1cCBpbmZvIGFib3V0IGxpbmtlciBzeW1ib2xzIG9ubHksIGFuZCB1c2UKCXN0YW5kYXJkIGJmZCBmaWVsZHMgdG8gaG9sZCB0aGUgaW5mby4KCSogKGhwcGFfb2JqZWN0X3ApOiAgUmVtb3ZlIHVubmVlZGVkIGRlY2xzLgoJKiAoaHBwYV9uZXdfc2VjdGlvbl9ob29rKTogIEdldCByaWQgb2YgbW9zdCBvZiB0aGlzLgoJKiBsaWJocHBhLmggKHN0cnVjdCBocHBhZGF0YSk6ICBSZW1vdmUgdGVuIHBvdW5kcyBvZiB1c2VsZXNzIHVnbHkKCWZhdC4gIFJlbW92ZSBhbGwga25vd2xlZGdlIG9mIHN0YWJzLCByZW1vdmUgcmVkdW5kYW50IGtub3dsZWRnZSBvZgoJbGlua2VyIHN5bWJvbHMuCgkqIFJlbW92ZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBmaWVsZHMgd2hpY2ggYXJlIG5vdyBnb25lLgoKRnJpIEphbiAgOCAxNToyMDowMCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKHNlY190b19zdHlwX2ZsYWdzKTogYWxsb3cgU0VDX05FVkVSX0xPQUQgdG8gdHVybiBvbgoJU1RZUF9OT0xPQUQgYml0LgoJKiBjb2ZmLXo4ay5jOiBkZWxldGUgdW51c2VkIHJlbG9jIGZ1bmN0aW9ucwoKRnJpIEphbiAgOCAxNTo0Nzo1MyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBiZmQuYyAoc3RydWN0IF9iZmQpOiBBZGRlZCBlY29mZl90ZGF0YSB0byB0ZGF0YSB1bmlvbi4KCSogdGFyZ2V0cy5jIChlbnVtIHRhcmdldF9mbGF2b3VyKTogQWRkZWQgYmZkX3RhcmdldF9lY29mZl9mbGF2b3VyLgoJKiBjb2ZmLW1zeW0uYzogVXNlIERFRlVOIGZvciBmdW5jdGlvbiBkZWZpbml0b25zLgoJKiBjb2ZmLW1pcHMuYzogQWRkZWQgY29kZSB0byByZWFkIGFuZCBwcmludCBzeW1ib2xzLCBhbmQgdG8gZmluZAoJbGluZSBudW1iZXJzLgoKCSogY29mZmNvZGUuaDogTW92ZWQgbWFueSBnZW5lcmljIGZ1bmN0aW9ucyBpbnRvIGNvZmZnZW4uYy4gIE1vdmVkCglzd2FwcGluZyBmdW5jdGlvbnMgaW50byBjb2Zmc3dhcC5oIGZvciBFQ09GRiB1c2UuICBNb3ZlZAoJcmVsb2NhdGlvbiBmdW5jdGlvbnMsIG9ubHkgdXNlZCBieSBoODMwMCBhbmQgejhrLCBpbnRvIHJlbG9jMTYuYy4KCUFkZGVkIGhvb2tzIGZvciBjb2ZmZ2VuLmMgZnVuY3Rpb25zIHRvIGJhY2tlbmQgZGF0YSBzdHJ1Y3R1cmUsIGFuZAoJYWRkZWQgaG9vayBmdW5jdGlvbnMuICBTdGlsbCBtb3JlIGNvdWxkIGJlIGRvbmUuCgkqIGNvZmZzd2FwLmg6IE5ldyBmaWxlIHRvIGhvbGQgQ09GRiBzd2FwcGluZyByb3V0aW5lcy4KCSogY29mZmdlbi5jOiBOZXcgZmlsZSB0byBob2xkIGdlbmVyaWMgQ09GRiBmdW5jdGlvbnMuCgkqIHJlbG9jMTYuYzogTmV3IGZpbGUgdG8gaG9sZCBoODMwMCBhbmQgejhrIHNwZWNpZmljIHJlbG9jYXRpb24KCWZ1bmN0aW9ucy4KCSogbGliY29mZi1pbi5oOiBBZGRlZCBkZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyBpbiBjb2ZmZ2VuLmMuCgkqIGxpYmNvZmYuaDogUmVidWlsdCB0byBpbmNvcnBvcmF0ZSBjaGFuZ2VzLgoJKiBjb2ZmLWg4MzAwLmM6IEZ1bmN0aW9uIG5hbWUgY2hhbmdlcy4KCSogY29mZi16OGsuYzogRnVuY3Rpb24gbmFtZSBjaGFuZ2VzLiAgVXNlIGNvZmZfcmVsb2MxNl9leHRyYV9jYXNlcwoJaG9vayByYXRoZXIgdGhhbiBkZWZpbmluZyBFWFRSQV9DQVNFUy4KCSogTWFrZWZpbGUuaW46IEJ1aWxkIG5ldyBmaWxlcyBjb2ZmZ2VuIGFuZCByZWxvYzE2LiAgQWRkZWQKCWRlcGVuZGVuY2llcyBvZiBjb2ZmLSoubyBvbiBjb2Zmc3dhcC5oIGFuZCBzZWNsZXQuaC4KClRodSBKYW4gIDcgMTY6MTY6MjYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBpZWVlLmMgKGllZWVfc2x1cnBfc2VjdGlvbnMpOiAgQWRkIGNhc3QgdG8gYXZvaWQgd2FybmluZwoJYWJvdXQgZGlzY2FyZGluZyBjb25zdC4KCldlZCBKYW4gIDYgMDA6MTY6NDkgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jLCBzZWNsZXQuYywgZWxmLmMgdXNlIGJmZF94bWFsbG9jIGluc3RlYWQgb2YgbWFsbG9jCgpUdWUgSmFuICA1IDA5OjM1OjU3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAocG9zdC10YXJnZXQpOiBJZiAtLXdpdGgtbWluaW1hbC1iZmQgaXMgc3BlY2lmaWVkLAoJc2V0IE1JTklNSVpFPTEuCgpNb24gSmFuICA0IDA3OjIwOjAxIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogc3JlYy5jIChzcmVjX3dyaXRlX3JlY29yZHMpOiBvbmUgb2YgbXkgYm9hcmRzIHdhbnRzIGEgQ1IgYmV0d2VlbgoJcmVjb3Jkcy4KCldlZCBEZWMgMzAgMTI6NDY6MzAgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jIChkb19zbHVycF9jb2ZmX2FybWFwKTogc2V0IHN5bWRlZl9jb3VudCBjb3JyZWN0bHkKCShpdCBicm9rZSBhIGNvdXBsZSBvZiB3ZWVrcyBhZ28pLgoKVHVlIERlYyAyOSAyMTo0MTowNSAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX2VsZl9maW5kX3NlY3Rpb24pOiBTd2l0Y2ggYmFjayB0byAic3RydWN0IC4uLiIgZm9yCglyZXR1cm4gdHlwZSwgc28gbGliYmZkLmggZG9lc24ndCByZWZlcmVuY2UgdW5kZWZpbmVkIHR5cGVkZWZuYW1lcy4KClR1ZSBEZWMgMjkgMTM6NTQ6MzUgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9yZWFsX29iamVjdF9wKTogdXNlIG5hbWUgSTM4NkFJWE1BR0lDIHJhdGhlcgoJdGhhbiBJMzg2U1ZNQUdJQy4KCShjb2ZmX3BvaW50ZXJpemVfYXV4KTogZG9uJ3QgcG9pbnRlcml6ZSBhIG5lZ2F0aXZlIHRhZ25keAoJKHNvbWV0aW1lcyBnZW5lcmF0ZWQgYnkgU0NPIDMuMnY0IGNjKS4KCgkqIGJvdXQuYyAoY2FsbGp4X2NhbGxiYWNrLCBjYWxsal9jYWxsYmFjaywKCWJfb3V0X2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IHdhcm4gaWYgcmVsb2NhdGluZyBhZ2FpbnN0CglhbiB1bmRlZmluZWQgc3ltYm9sLgoKTW9uIERlYyAyOCAxNDozMDo1NSAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaHBwYS5jOiAgR2V0IHJpZCBvZiBERUZVTiwgdXNlIG1vcmUgY29udmVudGlvbmFsIHByb2xvZyBzdHVmZi4KCU1ha2UgYSBidW5jaCBtb3JlIHJvdXRpbmVzIGJlIHN0YXRpYy4KCSogaHBwYS5jIChmaWxsX3NwYWNlcyk6ICBHZXQgcmlkIG9mIHRoaXMsIHJlcGxhY2Ugd2l0aCBtdWNoIGJldHRlcgoJd3JpdHRlbiBzZXR1cF9zZWN0aW9ucygpLgoJKiAoc2V0dXBfc2VjdGlvbnMpOiAgTmV3IHJvdXRpbmUgdG8gY3JlYXRlIEJGRCBzZWN0aW9ucyBmb3IgZWFjaAoJc3BhY2UgYW5kIHN1YnNwYWNlIGluIFNPTSBmaWxlcy4KCSogKGhwcGFfb2JqZWN0X3NldHVwKTogIFVzZSBCRkQgc2VjdGlvbnMgY3JlYXRlZCBieQoJc2V0dXBfc2VjdGlvbnMoKSB0byBsb2NhdGUgR0RCIHN5bWJvbCB0YWJsZSBpbmZvLgoJKiAobWFrZV91bmlxdWVfc2VjdGlvbik6ICBOZXcgcm91dGluZSB0byBjcmVhdGUgYSBCRkQgc2VjdGlvbi4gIEl0CgllbnN1cmVzIHRoYXQgdGhlIGdpdmVuIG5hbWUgaXMgdW5pcXVlLCBhbmQgd2lsbCBnZW5lcmF0ZSBhIHVuaXF1ZQoJb25lIGlmIG5lY2Vzc2FyeS4KCSogKGhwcGFfb2JqZWN0X3ApOiAgQmVjb21lIG11Y2ggbW9yZSBwYXJhbm9pZCBhYm91dCBmaWxlIGhlYWRlci4KCSogKG1ha2VfYmZkX2FzZWN0aW9uKTogIENhbGwgYmZkX21ha2Vfc2VjdGlvbiB0byBkbyB0aGUgZGlydHkKCXdvcmsuICBTaW1wbGlmeSBjb2RlIHNvbWV3aGF0LgoJKiAoaHBwYV9jb3JlX2ZpbGVfcCk6ICBVc2UgcHJvcGVyIG5hbWUgZm9yIHN0YWNrIHNlY3Rpb24uCgkqIGxpYmhwcGEuaDogIFJlbW92ZSBtaWxsaWNvZGVfc3RhcnQsIG1pbGxpY29kZV9lbmQgZGVjbHMuCgpNb24gRGVjIDI4IDExOjAzOjIyIDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGNvZmYtd2UzMmsubywgY29mZi16OGsubyk6IE5vdGUgZGVwZW5kZW5jaWVzLgoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEZvciBub3JtYWwgMi0gb3IgNC1ieXRlCglyZWxvY3MsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgYWRqdXN0bWVudCBpZiB0aGUgdmFsdWUgdG8gYWRkIGlzCgl6ZXJvLgoKU3VuIERlYyAyNyAxNzo0NTowNSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGJmZC5jIChiZmRfZ2V0X3NpemUpOiAgTmV3IGZ1bmN0aW9uIHRoYXQgZ2V0cyBhbiB1cHBlciBib3VuZAoJb24gdGhlIHBvc3NpYmxlIHNpemUgb2YgYW55IG9iamVjdCBpbiBhIGJmZC4KCSogZWxmLmMgKGJmZF9lbGZfZmluZF9zZWN0aW9uLCBlbGZfZ2V0X3N0cl9zZWN0aW9uLAoJZWxmX2dldF9zeW10YWJfdXBwZXJfYm91bmQpOiAgUmV3cml0ZSB0byBhdm9pZCBOVUxMIHBvaW50ZXIKCWRlcmVmZXJlbmNlcy4KCSogZWxmLmMgKGVsZl9iaWdfdmVjLCBlbGZfbGl0dGxlX3ZlYyk6ICBEb2N1bWVudCBsYXN0IHRocmVlCgltZW1iZXJzIGluaXRpYWxpemVkIHRvIE5VTEwuCgpUaHUgRGVjIDI0IDE3OjQ5OjA5IDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGhwcGEuYzogY2hhbmdlIGEgJ2NvbnN0JyB0byAnQ09OU1QnLCBvciBlbHNlIEhQIEMgY29tcGlsZXIgZGllcwoKTW9uIERlYyAyMSAxNjozMzozNCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBob3N0cy9zdGQtaG9zdC5oOiAgTmV3IGZpbGUuICBBdHRlbXB0IGF0IGEgZ2VuZXJpYy9kZWZhdWx0CglzZXQgb2YgZGVmaW5pdGlvbnMsIHRvIGRpc2NvdXJhZ2UgcG9ydGluZyB0byBuZXcgaG9zdHMgYnkgY29weWluZy4KCSogaG9zdHMvbmV3cy5oOiAgUmVtb3ZlZC4KCSogaG9zdHMvc3BhcmMuaDogIFVzZSBzdGQtaG9zdC5oLgoJKiBiZmQtaW4uaDogIE5ldyBtYWNyb3MgYmZkX2FzeW1ib2xfYmZkIGFuZCBiZmRfYXN5bWJvbF9mbGF2b3VyOwoJcGVyaGFwcyB3ZSBjYW4gbGF0ZXIgcmVtb3ZlIHRoZSB0aGVfYmZkIGZpZWxkIGZyb20gZWFjaCBzeW1ib2wuCgkqIHN5bXMuYyAoc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSk6ICBSZW1vdmUgdW51c2VkIGZpZWxkCglhcHBfZGF0YS4gIEFkZCBjb21tZW50IG5vdGluZyB0aGF0IHRoZV9iZmQgaXMgYWxtb3N0IHJlZHVuZGFudCwKCWJ1dCBub3QgcXVpdGUuCgkqIGFvdXR4LmgsIGNvZmYtYTI5ay5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmZjb2RlLmg6CglVc2UgbmV3IG1hY3JvcyBiZmRfYXN5bWJvbF9iZmQgYW5kIGJmZF9hc3ltYm9sX2ZsYXZvdXIuCgkqIGhwcGEuYyAoZmlsbF9zcGFjZXMpOiAgTWFrZSBzbGlnaHRseSBtb3JlIHJlYnVzdC4KCSogY29uZmlndXJlLmluOiAgQWxsb3cgc3RkLWhvc3QgYXMgdGhlICJkZWZhdWx0IiBob3N0LgoKTW9uIERlYyAyMSAxNzoyNDoxMyAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYmZkLmM6ICBBZGQgc3RydWN0IGhwcGFfY29yZV9kYXRhIHRvIHRkYXRhIHVuaW9uLgoJKiBocHBhLmM6ICBDb25kaXRpb25hbGl6ZSBvbiBIT1NUX0hQUEFIUFVYIGluc3RlYWQgb2YgaHA5MDAwczgwMC4KCUdldCByaWQgb2YgSFBQQS9CU0Qgc3BlY2lmaWMgY29kZS4gIFRoYXQgd2lsbCBnbyBzb21ld2hlcmUgZWxzZQoJc29tZWRheS4KCSogKGZpbGxfc3BhY2VzKTogIERvbid0IHNwaW4gZm9yZXZlciBhbmQgZGllIGlmIHlvdSBkb24ndCBmaW5kCgkkTUlMTElDT0RFJCBzdWJzcGFjZS4KCSogKGhwcGFfb2JqZWN0X3ApOiAgTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHJlYWwgaG9uZXN0LXRvLWN0aHVsdQoJZXhlYyBmaWxlIQoJKiAoaHBwYV9jb3JlX2ZpbGVfZmFpbGluZ19zaWduYWwsIGhwcGFfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCk6CglNYWtlIHRoZXNlIHdvcmsgZm9yIEhQVVguCgkqIChtYWtlX2JmZF9hc2VjdGlvbik6ICBOZXcgcm91dGluZSB0byBtYWtlIHNlY3Rpb24gY3JlYXRpb24gYQoJbGl0dGxlIGVhc2llci4KCSogKGhwcGFfY29yZV9maWxlX3ApOiAgQ29tcGxldGVseSByZXdyaXRlLCBsZWF2ZSBvdXQgYnVncy4KCSogbGliaHBwYS5oOiAgI2luY2x1ZGUgdGhlIHJpZ2h0IHN5c3RlbSBmaWxlcy4gIFJlZGVmaW5lIGFsbCBvZgoJdGhlIHN0cnVjdHMvbWFjcm9zIGZvciBoYWNraW5nIGNvcmUgZmlsZXMgdG8gdXNlIG1vcmUgc2Vuc2libGUKCUhQVVggY29yZSBmaWxlIHN0cnVjdHVyZXMuCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6ICBDb25kaXRpb25hbGl6ZSBocHBhX3ZlYyBvbgoJSE9TVF9IUFBBSFBVWCwgbm90IGhwOTAwMHM4MDAuCgkqIGhvc3RzL2hwcGFocHV4Lmg6ICAjaW5jbHVkZSBzdGRsaWIuaCB0byBnZXQgY29ycmVjdCBkZWNscyBmb3IKCW1hbGxvYyBhbmQgcmVhbGxvYy4gICNkZWZpbmUgSE9TVF9IUFBBSFBVWC4KCk1vbiBEZWMgMjEgMTI6NDA6MTAgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogUGF0Y2hlcyBmcm9tIE1pbmggVHJhbi1sZSA8bXRyYW5sZUBwYXJpcy5pbnRlbGxpY29ycC5jb20+LgoJKiBjb25maWd1cmUuaW4gKGkzODYtKi1pc2MqLCBpMzg2LSotYWl4Kik6IE5ldyB0YXJnZXRzLgoJKiBjb25maWd1cmUuaG9zdCAoaTM4Ni0qLWlzYyosIGkzODYtKi1haXgqKTogTmV3IGhvc3RzLgoJKiBob3N0cy9pMzg2aXNjLmgsIGNvbmZpZy9pMzg2aXNjLm1oOiBOZXcgZmlsZXMgZm9yIEludGVyYWN0aXZlCglVbml4LgoJKiBob3N0cy9pMzg2YWl4LmgsIGNvbmZpZy9pMzg2YWl4Lm1oOiBOZXcgZmlsZXMgZm9yIEFJWCBvbiBQUy8yLgoJKiBhaXgzODYtY29yZS5jOiBOZXcgZmlsZSBmb3IgaGFuZGxpbmcgY29yZSBmaWxlcyBvbiBBSVggb24gUFMvMi4KCSogdGFyZ2V0cy5jOiBpZiBBSVgzODZfQ09SRSwgdXNlIGFpeDM4Nl9jb3JlX3ZlYy4KCSogY29mZmNvZGUuaCAoY29mZl9yZWFsX29iamVjdF9wKTogY2hlY2sgZm9yIEkzODZTVk1BR0lDIGFzIHdlbGwKCWFzIEkzODZNQUdJQy4KCkZyaSBEZWMgMTggMTA6MjA6MjcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCAoc3Vub3M0X3dyaXRlX29iamVjdF9jb250ZW50cyk6IHNldCBmbGFncyB0byAwLCBmaXhpbmcKCTE5MjcuCgpUaHUgRGVjIDE3IDE5OjM1OjMyIDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBkdmkgdGFyZ2V0CgpUaHUgRGVjIDE3IDAwOjM2OjI0IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogYmZkLmM6ICBVc2UgcmlnaHQgbmFtZSBmb3IgdGVraGV4IHRkYXRhIHN0cnVjdC4KCSogdGVraGV4LmM6ICBJbnNlcnQgbGVhZGluZ19jaGFyICgwKSBpbnRvIGJmZF90YXJnZXQgc3RydWN0LiAgU3R5bGUuCgkqIGxpYmNvZmYuaDogIFVwZGF0ZWQgdG8gZ2V0IHNwYWNpbmcgY2hhbmdlIGZyb20gY29mZmNvZGUuaC4KCSogdHJhZC1jb3JlLmM6ICBsZWFkaW5nX2NoYXIgaXMgMCAobm8gc3ltYm9scyEpLCBub3QgJ18nLgoKVHVlIERlYyAxNSAxNTo0MDozMCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoZG9fc2x1cnBfYnNkX2FybWFwLCBkb19zbHVycF9jb2ZmX2FybWFwKTogIE5ldwoJZnVuY3Rpb25zLCB3aXRoIHRoZSAiZ3V0cyIgb2YgdGhlIG9sZCBiZmRfc2x1cnBfYnNkX2FybWFwCglhbmQgYmZkX3NsdXJwX2NvZmZfYXJtYXAsIGJ1dCBhc3N1bWluZyB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQKCWlmIHRoZSBhcm1hcCBpcyBwcmVzZW50IG9yIG5vdC4KCUFsc28sIHJld3JpdGUgYSBiaXQgdG8gYXZvaWQga2VlcGluZyBhcm91bmQgb2JzdGFjayBkYXRhCgl0aGF0IHdlIGRvbid0IG5lZWQuCgkqIGFyY2hpdmUuYyAoc25hcmZfYXJfaGVhZGVyLCBfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUpOgoJVmFyaW91cyBmaXhlcyB0byBjb3JyZWN0bHkgaGFuZGxlIENPRkZfc3R5bGUgYXJjaGl2ZXMgbmFtZXMuCgkoTm90ZSB0aGF0IGJlY2F1c2UgdGhlc2UgaGF2ZSBhIHRyYWlsaW5nICcvJywgdGhlIG5hbWVzIGNhbgoJaGF2ZSBlbWJlZGRlZCBzcGFjZXMuKQoJKiBhcmNoaXZlLmMgKGJmZF9zbHVycF9hcm1hcCk6ICBOZXcgZnVuY3Rpb24sIHJlcGxhY2VzIG9sZAoJYmZkX3NsdXJwX2JzZF9hcm1hcCBhbmQgYmZkX3NsdXJwX2NvZmZfYXJtYXAuICBSZWNvZ25pemVzCglfZWl0aGVyXyBmb3JtYXQsIGFuZCBjYWxscyBkb19zbHVycF9ic2RfYXJtYXAgb3IKCWRvX3NsdXJwX2NvZmZfYXJtYXAgaWYgZWl0aGVyIGZvcm0gb2YgbWFwIGlzIHNlZW4uCgkqIGxpYmJmZC1pbi5oOiAgQ2hhbmdlZCBiZmRfc2x1cnBfYnNkX2FybWFwIGFuZAoJYmZkX3NsdXJwX2NvZmZfYXJtYXAgaW50byBtYWNybyBzeW5vbnltcyBmb3IgYmZkX3NsdXJwX2FybWFwLgoJKiBlbGYuYyAoZWxmX3NsdXJwX2FybWFwLCBlbGZfd3JpdGVfYXJtYXApOiAgRml4LgoJKiBNYWtlZmlsZS5pbiAoQVJfRkxBR1MpOiAgVXNlIHJjIGluc3RlYWQgb2Ygbm9uLXN0YW5kYXJkIHFjLgoKTW9uIERlYyAxNCAxNzowODowOCAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaHBwYS5jOiAgI2luY2x1ZGUgInN5c2RlcC5oIiwgbm90IDxzeXNkZXAuaD4uCgkqIGxpYmhwcGEuaDogIE1ha2UgbWlsbGljb2RlX3N0YXJ0IGFuZCBtaWxsaWNvZGVfZW5kIGJlIHVuc2lnbmVkCglpbnQgdG8gYmUgc2FtZSB0eXBlIGFzIENPUkVfQUREUiBpbiBHREIuICBXaHkgYXJlIHRoZXNlIGhlcmU/CgpTYXQgRGVjIDEyIDE1OjU0OjM2IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtaTM4Ni5jIChDQUxDX0FEREVORCk6IGlmIHJlbG9jIGlzIFBDIHJlbGF0aXZlLCBhZGQgdGhlCgl2YWRkciBvZiB0aGUgc2VjdGlvbiB0byB0aGUgYWRkZW5kLgoJKiB0YXJnZXRzLmM6IGlmIE1JTklNSVpFIGlzIDEsIGFuZCBTQ09fQ09SRSBpcyBkZWZpbmVkLCBhZGQKCVNDT19DT1JFIHRvIFNFTEVDVF9WRUNTLgoJKHRhcmdldF92ZWN0b3IpOiBhZGQgc2NvX2NvcmVfdmVjLgoJKiBzY28tY29yZS5jIChzY29fY29yZV92ZWMpOiBhZGQgbGVhZGluZyB1bmRlcnNjb3JlIGluaXRpYWxpemVyLgoJKiBjb25maWd1cmUuaW4gKGlbMzRdODYtKi1zY28qKTogdXNlIHRhcmdldCBpMzg2LXNjby4KCSogY29uZmlnL2kzODYtc2NvLm10OiBuZXcgZmlsZTsgZGVmaW5lIFNDT19DT1JFLgoKVGh1IERlYyAxMCAwMjoxMzoxNSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGFvdXQtYWRvYmUuYyAoYW91dF9hZG9iZV9vYmplY3RfcCk6ICBGaXggIXN0cmNtcCB0aGlua28uCgpGcmkgRGVjICA0IDE0OjAyOjQ5IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGJmZF9jb2ZmX3N0ZF9zd2FwX3RhYmxlKTogTm93IHN0YXRpYyBhbmQgY29uc3QuCgpUaHUgRGVjICAzIDE2OjU0OjU4IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2kzODZsaW51eC5oOiBJbmNsdWRlIHVuaXN0ZC5oLgoKCSogYW91dHguaCAocHJpbnRfc3ltYm9sKTogYW91dF9zdGFiX25hbWUgcmV0dXJucyBhIGNvbnN0YW50CglzdHJpbmcuCgkqIGxpYmFvdXQuaCAoYW91dF9zdGFiX25hbWUpOiBGaXggcHJvdG90eXBlLgoJKiBzdGFiLXN5bXMuYyAoYW91dF9zdGFiX25hbWVzKTogQXJyYXkgaXMgbm93IGNvbnN0LgoJKGFvdXRfc3RhYl9uYW1lKTogUmV0dXJuIHZhbHVlIGlzIG5vdyBwb2ludGVyIHRvIGNvbnN0LgoKCSogYW91dHguaCwgYXJjaGl2ZS5jLCBhcmNodXJlcy5jLCBjb2ZmY29kZS5oLCBjdG9yLmMsIHJlbG9jLmMsCglzeW1zLmM6IERvYyBmaXhlcy4KCgkqIHN5bXMuYyAoYXN5bWJvbCk6IEFkZGVkIG5ldyBmaWVsZCAiYXBwX2RhdGEiLCBmb3IgZGF0YQoJcGFydGljdWxhciB0byB0aGUgYXBwbGljYXRpb24uICBTb21lIG9mIHRoZSBsaW5rZXIgZmxhZ3Mgb3VnaHQgdG8KCWdldCBtb3ZlZCB0byB0aGlzIGZpZWxkIHNvbWVkYXkuCgoJKiBhcmNodXJlcy5jIChiZmRfZGVmYXVsdF9zY2FuKTogUmVjb2duaXplIGEgZmV3IG1vcmUgbnVtYmVyczoKCTgwNDg2LCA4MDk2MCwgYW5kIDk2MC4KCgkqIGJmZC1pbi5oIChDT0ZGX1NXQVBfVEFCTEUpOiBOZXcgaXMganVzdCBhZGRyZXNzIG9mCgliZmRfY29mZl9zdGRfc3dhcF90YWJsZSwgY2FzdCB0byBQVFIuCgkqIGJmZC5jIChiZmRfY29mZl9zd2FwXyopOiBEZWxldGVkIG1hY3Jvcy4KCSogdGFyZ2V0cy5jIChzdHJ1Y3QgYmZkX3RhcmdldCk6IERlbGV0ZWQgQ09GRi1zcGVjaWZpYyBzd2FwcGluZwoJcm91dGluZSBwb2ludGVycy4KCSogY29mZmNvZGUuaCAodHlwZSBiZmRfY29mZl9iYWNrZW5kX2RhdGEpOiBOZXcgc3RydWN0dXJlIHR5cGUsCgljb250YWlucyBwb2ludGVycyB0byB0aGUgQ09GRi1zcGVjaWZpYyBzd2FwcGluZyByb3V0aW5lcy4KCShiZmRfY29mZl9zdGRfc3dhcF90YWJsZSk6IE5ldyBkYXRhIHN0cnVjdHVyZSwgdG8gYmUgdXNlZCB3aGVuCglOT19DT0ZGX1NZTUJPTFMgYW5kIE5PX0NPRkZfTElORU5PUyBhcmUgbm90IGRlZmluZWQuCgkoYmZkX2NvZmZfc3dhcF8qKTogTmV3IG1hY3Jvcy4KCSogY29mZi1taXBzLmMgKG1pcHNfY29mZl9zd2FwX3RhYmxlKTogTmV3IGRhdGEgc3RydWN0dXJlLgoJKGVjb2ZmX2JpZ192ZWMpOiBVc2UgaXQuCgkqIEFsbCBDT0ZGIHRhcmdldHM6IE1vdmVkIENPRkZfU1dBUF9UQUJMRSB0byB0YXJnZXQtc3BlY2lmaWMgZGF0YS4KCSogQWxsIG90aGVyIHRhcmdldHM6IERlbGV0ZWQgY29mZi1zcGVjaWZpYyB2ZWN0b3IgZW50cmllcy4KCgkqIHRyYWQtY29yZS5jOiBGaXhlZCBzb21lIGBQQVJBTVMnIHVzZXMgdGhhdCB3ZXJlIG1pc3NpbmcKCXBhcmVudGhlc2VzLgoKU3VuIE5vdiAyOSAwODozNzoxMyAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHNvbWVfYW91dF9vYmplY3RfcCk6ICBQcm90ZWN0IGFyZyBwcm90b3R5cGUgaW4KCWNhbGxiYWNrX3RvX3JlYWxfb2JqZWN0X3Agd2l0aCBQQVJBTVMgbWFjcm8gZm9yIG5vbi1BTlNJIGNvbXBpbGVycy4KClNhdCBOb3YgMjggMDQ6MDE6MjEgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBhb3V0LXRhcmdldC5oLCBhb3V0ZjEuaCwgdHJhZC1jb3JlLmMsIGNvZmZjb2RlLmgsIGxpYmFvdXQuaCwKCWxpYmJmZC1pbi5oLCBiZmQtaW4uaDogRWxpbWluYXRlIGFsbCBQUk9UTyBjYWxscywgcmVwbGFjZSB3aXRoCglQQVJBTVMgZm9yIHJlYWRhYmlsaXR5LgoKCSogYW91dHguaDogIEFkZCB0eXBlIHRvIGNhbGxiYWNrIHBhcmFtZXRlci4KCSogY29mZi1taXBzLmM6ICBEb24ndCBjYWxsIHRyYWQtY29yZS5oLCBub3QgbmVlZGVkLgoJKiB0cmFkLWNvcmUuYzogIEluY29ycG9yYXRlIHRyYWQtY29yZS5oIGRlY2xhcmF0aW9ucy4gIEZpeCBjb21tZW50cy4KCSogdHJhZC1jb3JlLmg6ICBFbGltaW5hdGUsIHVudXNlZC4KCldlZCBOb3YgMTggMTM6MTY6MTcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBmb3JtYXQuYyAoYmZkX2NoZWNrX2Zvcm1hdCk6IGlmIGRlZmF1bHQgdGFyZ2V0IGlzbid0IGZvdW5kCgl0aGVuIGxvb2sgdGhyb3VnaCB0aGUgZW50aXJlIGxpc3QgcmF0aGVyIHRoYW4gcmV0dXJuIGVhcmx5LgoKTW9uIE5vdiAxNiAxNDozMzowMyAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWcvaTk2MC1jb2ZmLm10OiByZW9yZGVyIHZlYyB0byBtYXRjaCBiZmRfY2hlY2tfZm9ybWF0IChmcm9tIFBlcikKClRodSBOb3YgMTIgMTc6MDE6NDEgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHBhc3MgZG93biBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGluIEZMQUdTX1RPX1BBU1MKClRodSBOb3YgMTIgMDk6NDY6NDcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLXo4ay5jOiBjaGVja3BvaW50LCBtb3JlIGFkZHJlc3NpbmcgbW9kZXMgaGFuZGxlZAoJKiBjb2ZmY29kZS5oIChnZXRfdmFsdWUpOiBkb24ndCB0cnVuY2F0ZSByZWxvYy0+YWRkZW5kIGZpZWxkLCBpdCdzCglhIGxvbmcgbm93LgoKV2VkIE5vdiAxMSAyMzo1Nzo1NSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQoKCSogd2UzMmsubXQgKFRERUZBVUxUUyk6IFVzZSB3ZTMya2NvZmZfdmVjLCBub3QgaTM4NmNvZmZfdmVjLgoKVHVlIE5vdiAxMCAxNDowNDozOCAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogbWlub3IgdHdlYWtzIHRvIG1ha2UgJChDQykgY29tbWFuZCBsaW5lcyBtb3JlIGNvbnNpc3RlbnQKCk1vbiBOb3YgIDkgMjM6NTg6MTcgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIsIGJmZF9jbG9zZSk6ICBBZGQgZG9jIGFib3V0IGNhY2hlaW5nCglhbmQgYWJvdXQgd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQuCgpTYXQgTm92ICA3IDAwOjQyOjIwIDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGJvdXQuYyAoYl9vdXRfc3F1aXJ0X291dF9yZWxvY3MpOiBNYWtlIHN1cmUgYWxpZ25tZW50IHJlbG9jcyBnZXQKCXdyaXR0ZW4gb3V0IGNvcnJlY3RseS4KClRodSBOb3YgIDUgMTU6MzQ6MTkgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogc2VjdGlvbi5jOiBOZXcgc2VjdGlvbiBiaXQgU0VDX1NIQVJFRF9MSUJSQVJZLgoJY29mZmNvZGUuaCAoc3R5cF90b19zZWNfZmxhZ3MpOiBpZiBTVFlQX05PTE9BRCAmJiAoU1RZUF9URVhUIHx8CglTVFlQX0RBVEEpLCBzZXQgU0VDX1NIQVJFRF9MSUJSQVJZLiAgVGhpcyBzZWVtcyB0byBiZSBjb3JyZWN0IGZvcgoJaTM4Ni1zeXN2LgoKVGh1IE5vdiAgNSAwNDo0MzowOSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIHRhcmdldC5jIChzdHJ1Y3QgYmZkX3RhcmdldCk6ICBFbGltaW5hdGUgdGhlIFNERUYgYW5kIFNERUZfRk1UCgltYWNyb3M7IHVzZSBQQVJBTVMgdG8gZGVjbGFyZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgaW52b2x2ZWQuCgoJKiBiZmQtaW4uaCwgYmZkLmMsIGxpYmJmZC5oLCByZWxvYy5jLCBzZWNsZXQuaCwgc2VjdGlvbi5jLAoJdGFyZ2V0cy5jOiBSZW5hbWUgc3RydWN0IGJmZF9zZWNsZXRfc3RydWN0IHRvIHN0cnVjdCBiZmRfc2VjbGV0LgoKVGh1IE5vdiAgNSAwMjo1OTowOSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCglDbGVhbnVwOiAgUmVwbGFjZSBhbGwgdXNlcyBvZiBFWEZVTiBpbiB0aGUgQkZEIHNvdXJjZXMsIHdpdGggUEFSQU1TLgoKCSogYXJjaHVyZXMuYywgcmVsb2MuYywgc2VjdGlvbi5jLCB0ZWtoZXguYzogIFVzZSBQQVJBTVMgaW4KCWRlY2xhcmluZyBwb2ludGVycyB0byBmdW5jdGlvbnMuCgkqIGNhY2hlLmMsIGVsZi5jOiAgTW92ZSBzdGF0aWMgZnVuY3Rpb24gZGVjbHMgdG8gdG9wLCB1c2UgUEFSQU1TLgoJKiBzZWNsZXQuaDogIERlY2xhcmUgZXh0ZXJuYWwgZnVuY3Rpb24gd2l0aCBQQVJBTVMuCgoJKiBkb2MvY2hldy5jIChleGZ1bnN0dWZmKTogIEVsaW1pbmF0ZS4KCShwYXJhbXN0dWZmKTogIFJlcGxhY2UgZXhmdW5zdHVmZiB3aXRoIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIFBBUkFNUy4KCSogZG9jL3Byb3RvLnN0cjogIFVzZSBwYXJhbXN0dWZmIHJhdGhlciB0aGFuIGV4ZnVuc3R1ZmYuCgoJKiBsaWJiZmQuaDogIFVwZGF0ZSwgYmFzZWQgb24gY2hhbmdlcyBpbiBzb3VyY2UgY29kZSBhbmQgY2hldy4KCldlZCBOb3YgIDQgMjI6NDc6MjkgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBsaWJpZWVlLmg6ICBBZGQgRklYTUUgYWJvdXQgcmVtb3ZpbmcgbGltaXQgb24gbnVtYmVyIG9mIHNlY3Rpb25zLgoJKiBiZmQtaW4uaDogIEltcHJvdmUgY29tbWVudHMgdG8gbWFrZSBpdCBjbGVhciB0aGF0IGJmZC5oIGlzCgl0aGUgd3JvbmcgcGxhY2UgdG8gZWRpdCB0aGlzIGZpbGUuCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogIEluc3RhbGwgYW5zaWRlY2wuaCBhbmQgb2JzdGFjay5oIGluIHRoZQoJc2FtZSBwbGFjZXMgd2hlcmUgd2UgaW5zdGFsbCBiZmQuaC4KCldlZCBOb3YgIDQgMTM6NDA6MjMgMTk5MiAgU2VhbiBFcmljIEZhZ2FuICAoc2VmQGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3N3YXBfYXV4X291dCwgY29mZl9zd2FwX2F1eF9pbik6ICBjaGVjayBmb3IKCXN5bWJvbCB0eXBlIGJlZm9yZSBibGluZGx5IG1vZGlmeWluZyB0aGUgYXV4ZW50LiAgU3BlY2lmaWNhbGx5LAoJb25seSBtb2RpZnkgdGhlIGVuZG5keCBmaWVsZHMgZm9yIHR5cGVzIHRoYXQgbmVlZCBpdCwgYW5kIGRvbid0CglzZXQgdGhlIGFycmF5IGluZm9ybWF0aW9uIGZvciBub24tYXJyYXlzLgoKV2VkIE5vdiAgNCAwOTozMDo1MCAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHNvbWVfYW91dF9vYmplY3RfcCk6IFNlY3Rpb24gbGlzdCBzaG91bGQgYmUgc2V0IHVwCgljb3JyZWN0bHkgYW55d2F5czsgZG9uJ3QgaGF2ZSB0byBzZXQgdXAgIm5leHQiIHBvaW50ZXJzIG1hbnVhbGx5LgoKTW9uIE5vdiAgMiAxMjozNjoxNCAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb25maWcvZGVsdGE4OC5taCwgY29uZmlnL2hwMzAwLm1oLCBjb25maWcvaHBwYWhwdXgubWgsCgljb25maWcvaTM4NnYubWg6IHJlbW92ZWQgLURVU0cgZnJvbSBIREVGSU5FUy4KCWhvc3RzL2RlbHRhODguaCwgaG9zdHMvaHAzMDAuaCwgaG9zdHMvaHBwYWhwdXguaCwgaG9zdHMvaTM4NnYuaDoKCWRlZmluZWQgVVNFX1VUSU1FLgoJaG9zdHMvaTM4NnYuaDogZG9uJ3QgZGVmaW5lIFBPU0lYX1VUSU1FLgoKRnJpIE9jdCAzMCAxNjoxMzo1MiAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGllZWUuYyAoaWVlZV9zbHVycF9zZWN0aW9ucyk6IG1ha2UgYSBwcml2YXRlIGNvcHkgb2YgdGhlCglzZWN0aW9uJ3MgbmFtZSBiZWZvcmUgdHJ1bmNhdGluZyBpdC4KClRodSBPY3QgMjkgMDg6MzA6NTAgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBocHBhLmM6IGFkZCBzeW1ib2xfbGVhZGluZ19jaGFyIGVudHJ5IGluIHRyYW5zZmVyIHZlYwoKLFdlZCBPY3QgMjggMTY6MTE6NTcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBpZWVlLmMgKGdldF9zeW1ib2wpOiBjYW4gbm93IGNvcGUgd2hlbiB0d28gc3ltYm9scyBvZiBhCglkaWZmZXJlbnQgY2xhc3MsIGJ1dCB0aGUgc2FtZSBpbmRleCBudW1iZXIgb2NjdXIgY29uc2VjdXRpdmVseS4KCShnZXRfc2VjdGlvbl9lbnRyeSk6IG5pY2VyIG5hbWUgZm9yIHNlY3Rpb25zIGJlaW5nIGZvcndhcmQKCXJlZmVyZW5jZWQuIChpZWVlX2FyY2hpdmVfcCk6IGRvbid0IGZyZWUgdGhlIGZpbGVuYW1lIHN0cmluZywKCXNpbmNlIGl0IHdhcyBuZXZlciBtYWxsb2NlZC4KCldlZCBPY3QgMjggMTM6NDI6MDkgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6ICBaZXJvIHRpbWVzdGFtcCBmaWVsZC4KClR1ZSBPY3QgMjcgMTI6MjQ6MzQgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9zd2FwX2F1eF9vdXQpOiBzZXQgdGhlIGZjbmFyeSBpbmZvIGJlZm9yZQoJb3B0aW9uYWxseSBzZXR0aW5nIHRoZSBkaW1lbiBpbmZvLCBzaW5jZSB0aGV5IGFyZSBpbiB0aGUgc2FtZQoJbWVtb3J5IGxvY2F0aW9ucy4gIEFsc28gemVybyBvdXQgZXh0ZXJuYWwgYXV4ZW50LgoJKGNvZmZfd3JpdGVfc3ltYm9sKTogZG9uJ3QgemVybyBleHRlcm5hbCBhdXhlbnQ7IG5vdyBkb25lIGluCgljb2ZmX3N3YXBfYXV4X291dC4KCkZyaSBPY3QgMjMgMTM6NTU6MzUgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogQ2hlY2sgZmNsb3NlIHJldHVybiB2YWx1ZSBmb3IgZXJyb3JzLgoJbGliYmZkLmg6IGJmZF9jYWNoZV9jbG9zZSBub3cgcmV0dXJucyBhIGJvb2xlYW4uCgljYWNoZS5jIChiZmRfY2FjaGVfZGVsZXRlKTogcmV0dXJuIGZjbG9zZSBzdWNjZXNzIHZhbHVlLgoJKGJmZF9jYWNoZV9jbG9zZSk6IHJldHVybiBiZmRfY2FjaGVfZGVsZXRlIHJldHVybiB2YWx1ZS4KCW9wbmNscy5jIChiZmRfY2xvc2UsIGJmZF9jbG9zZV9hbGxfZG9uZSk6IHJldHVybiByZXN1bHQgb2YKCWJmZF9jYWNoZV9jbG9zZS4KCkZyaSBPY3QgMjMgMTA6MzI6MzYgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBzZWNsZXQuYyAocmVsKTogZG9uJ3QgbG9hZCBzZWN0aW9ucyB3aXRob3V0IHRoZSBTRUNfTE9BRCBiaXQuCgpUaHUgT2N0IDE1IDEwOjE2OjM1IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZi1tNjhrLmMgKG02OGtfaG93dG8ydHlwZSwgU0VMRUNUX1JFTE9DKTogbmV3IGZ1bmN0aW9uIHRvCgl3b3JrIG91dCBhIGNvZmYgcmVsb2NhdGlvbiB0eXBlIGZyb20gYSBob3d0bydzIGF0dHJpYnV0ZXMgcmF0aGVyCgl0aGFuIHVzaW5nIHRoZSBpbnB1dCByX3R5cGUgZmllbGQuIFRoaXMgZml4ZXMgUFIxNjc3IGFuZCBhbGxvd3MKCWNvbnZlcnNpb24gb2YgYS5vdXQgcmVsb2NzIHRvIGNvZmYgcmVsb2NzLgoKCSogY29mZmNvZGUuaCAoY29mZl93cml0ZV9yZWxvY3MpOiBpZiBzdXBwbGllZCBhIHJlbG9jYXRpb24KCXJlbGF0aXZlIHRvIGFuIGFic29sdXRlIHN5bWJvbCwgdXNlIHRoZSByaWdodCBzeW1ib2wgaW5kZXguCgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogZG8gYSBwYXJ0aWFsIGxpbmsgZm9yIGNvZmYKCXJlbG9jcyByaWdodC4KCkZyaSBPY3QgMjMgMDg6MTU6NTYgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY2hhbmdlcyB0byBzdXBwb3J0IGkzODYtc3lzdiB3aXRoIHNoYXJlZCBsaWJyYXJpZXM6CgkqIGNvZmZjb2RlLmggKHNlY190b19zdHlwX2ZsYWdzKTogaWYgVFdPX0RBVEFfU0VDUyBpcyBkZWZpbmVkLAoJY2hlY2sgZm9yIC5kYXRhMjsgaWYgX0xJQiBpcyBkZWZpbmVkLCBjaGVjayBmb3IgaXQ7IG1hcAoJU0VDX05FVkVSX0xPQUQgdG8gU1RZUF9OT0xPQUQuCgkoc3R5cF90b19zZWNfZmxhZ3MpOiBtYXAgU1RZUF9OT0xPQUQgdG8gU0VDX05FVkVSX0xPQUQuCgkobWFrZV9hX3NlY3Rpb25fZnJvbV9maWxlKTogaWYgVFdPX0RBVEFfU0VDUywgYWNjZXB0IC5kYXRhMi4KCShjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IGZvcmNlIHZhZGRyIG9mIC5saWIgdG8gMDsgc2V0IHNjbnB0cgoJaWYgc2VjdGlvbiBoYXMgY29udGVudHMsIG5vdCBqdXN0IGlmIGl0IGlzIGxvYWRhYmxlOyBpZgoJVFdPX0RBVEFfU0VDUywgY2hlY2sgZm9yIC5kYXRhMgoJKGNvZmZfc2V0X3NlY3Rpb25fY29udGVudHMpOiBzZXQgdm1hIG9mIC5saWIgc2VjdGlvbiB0byBudW1iZXIgb2YKCS5saWIgc2VjdGlvbnMuCgkqIGNvZmYtaTM4Ni5jOiBkZWZpbmUgVFdPX0RBVEFfU0VDUzsgdXNlIGEgc3BlY2lhbCBDQUxDX0FEREVORDsKCWRvbid0IGRlZmluZSBjb2ZmX3dyaXRlX2FybWFwIHRvIGJzZF93cml0ZV9hcm1hcC4KCSogaG9zdHMvaTM4NnYuaDogZG9uJ3QgaW5jbHVkZSA8dXRpbWUuaD4sIHNpbmNlIGl0IGlzIG5vdCBwcm92aWRlZAoJYnkgU1ZSMy4yLgoKVGh1IE9jdCAyMiAyMjo0MDoyMCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCgoJKiBzb2xhcmlzMi5oOiBHZXQgdGhlIGRlZmluaXRpb24gb2YgYWxsb2NhIGZyb20gYWxsb2NhLmggaWYgd2UKCWFyZW4ndCB1c2luZyBnY2MuCgpUaHUgT2N0IDIyIDAzOjA3OjI4IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChpOTYwLSote2FvdXQsYm91dH0pOiAgU3VwcG9ydCB0aGVzZS4KCldlZCBPY3QgMjEgMDM6NDY6MzQgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBjb25maWcvYTI5ay1hb3V0Lm10IChERUZBVUxUX1RBUkdFVCk6ICBTZXQgdG8gb25lIHRoYXQgZXhpc3RzLgoKVGh1IE9jdCAxNSAxNTowNTozOSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFwb2xsbzY4LmgsIGFwb2xsb3Y2OC5oLCBocDMwMC5oLCBpMzg2di5oLCBpcml4My5oOiBSZW1vdmUKCW5vLWxvbmdlci11c2VkIGRlZmluaXRpb25zIG9mIExfU0VUIGFuZCBMX0lOQ1IuCgkqIGkzODZsaW51eC5oOiAgVHdlYWtzIHRvIHNtb290aCBMaW51eCBidWlsZC4KClRodSBPY3QgMTUgMDE6MzI6MjIgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBzZWNsZXQuaDogIEFkZCBlbnVtIHRhZyB0byBiZmRfc2VjbGV0X2VudW1fdHlwZS4KCgkqIGJmZC1pbi5oIChmaWxlX3B0cik6ICBVcGRhdGUgY29tbWVudHMsIG1ha2UgRklYTUUgcmUgb2ZmX3QuCgoJKiBhb3V0LWFkb2JlLmMsIGFvdXRmMS5oLCBhcmNoaXZlLmMsIGJvdXQuYywgY29mZi1yczYwMDAuYywKCWNvZmZjb2RlLmgsIGVsZi5jLCBpZWVlLmMsIGxpYmFvdXQuaCwgbGliYmZkLmMsIG9hc3lzLmMsCglzY28tY29yZS5jOiAgTGludDogIFNlY29uZCBhcmd1bWVudCBvZiBiZmRfc2VlayBpcyBhbHdheXMgZmlsZV9wdHIuCglUaGlyZCBhcmd1bWVudCBpcyBTRUVLX1NFVCBvciBTRUVLX0NVUi4gIFJlc3VsdCBpcyBhbHdheXMgMCBvciAtMS4KCgkqIGFvdXQtYWRvYmUuYywgYW91dGYxLmgsIGFvdXR4LmgsIGJvdXQuYyBjb2ZmLW02OGsuYywgY29mZi16OGsuYywKCWNvZmZjb2RlLmgsIGVsZi5jLCBsaWJhb3V0LmgsIGxpYmJmZC1pbi5oLCBzcmVjLmM6ICBMaW50LgoKRnJpIE9jdCAgOSAwMzo0NjozNyAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5ob3N0OiAgTmV3IGZpbGUsIGNvbnRhaW5zIG1hcHBpbmcgb2YgaG9zdCBjb25maWdzCgl0byBob3N0IHN1cHBvcnQgZmlsZSBuYW1lcyBmb3IgYmZkLCBiaW51dGlscywgb3Bjb2Rlcy4KCSogY29uZmlndXJlLmluOiAgVXNlIGl0LgoJKiBpMzg2YW91dC5jOiAgQ2xlYW51cCwgZHVtcCBUQVJHRVRfSVNfTElUVExFX0VORElBTl9QLgoJKiBpMzg2YnNkLmM6ICBDbGVhbnVwLCByZWZvcm1hdC4KCSogY29uZmlnL2kzODYtYnNkLm10OiAgQ29tbWVudCBjaGFuZ2VzLgoJKiBjb25maWcvaTM4NmJzZC5taDogIE5ldyBmaWxlIGZvciBjb3JlIGZpbGUgc3VwcG9ydC4KCSogaG9zdHMvaTM4NmJzZC5oOiAgTWVyZ2UgY2hhbmdlcyBmcm9tIFBldGVyIFNjaGF1ZXIuCgkqIGJvdXQuYyAoQUxJR04pOiAgUmVuYW1lIHRvIEFMSUdORVIsIHNpbmNlIHN5c3RlbSBoZWFkZXIgZmlsZXMKCW9uIEJTRCA0LjQgZGVmaW5lIEFMSUdOIChzaWdoISkuCgpUaHUgT2N0ICA4IDIyOjE4OjEwIDE5OTIgIE1hcmsgRWljaGluICAoZWljaGluIGF0IHR3ZWVkbGVkdW1iZXIuY3lnbnVzLmNvbSkKCgkqIGxpYmFvdXQuaCAoYW91dF9iYWNrZW5kX2RhdGEpOiBhZGRlZCBleGVjX2hlYWRlcl9ub3RfY291bnRlZAoJZmllbGQuIEZvciBaTUFHSUMgZmlsZXMgb25seSwgd2hlbiB0ZXh0X2luY2x1ZGVzX2hlYWRlciBpcyBzZXQsIGJ5CglkZWZhdWx0IHRoZSBsZW5ndGggb2YgdGhlIGV4ZWMgaGVhZGVyIGlzIGNvdW50ZWQgaW4gdGhlIHRleHQKCXNlY3Rpb24gc2l6ZS4gRm9yIGdvMzIsIGV4ZWMgaGVhZGVyIGlzIG1hcHBlZCBpbiBidXQgZG9lcyAqbm90KgoJY29udHJpYnV0ZSB0byB0aGUgc2l6ZSBvZiBzZWN0aW9uLgoJKiBhb3V0eC5oIChhb3V0X2FkanVzdF9zaXplc19hbmRfdm1hcyk6IGlmIGV4ZWNfaGVhZGVyX25vdF9jb3VudGVkCglpcyBub3Qgc2V0LCBidXQgenRpaCBpcywgYWRkIHRoZSBzaXplIG9mIHRoZSBleGVjIGhlYWRlciB0byB0aGUKCXJlY29yZGVkIHNpemUgb2YgdGhlIHRleHQgc2VjdGlvbi4KCSogYW91dGYxLmggKHN1bm9zNF9hb3V0X2JhY2tlbmQpOiBjbGVhciBleGVjX2hlYWRlcl9ub3RfY291bnRlZC4KCSogaTM4NmFvdXQuYyAoaTM4NmFvdXRfYmFja2VuZF9kYXRhKTogc2V0IGV4ZWNfaGVhZGVyX25vdF9jb3VudGVkLgoJQWxzbyBzZXQgdGV4dF9pbmNsdWRlc19oZWFkZXIuCgkqIGFvdXQtdGFyZ2V0LmggKCpfYmFja2VuZF9kYXRhKTogY2xlYXJlIGV4ZWNfaGVhZGVyX25vdF9jb3VudGVkCglieSBkZWZhdWx0IGluIE1ZKGJhY2tlbmRfZGF0YSkuCgpUaHUgT2N0ICA4IDE4OjEyOjQ5IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogYW91dC10YXJnZXQuaCAoY2FsbGJhY2spOiBEb24ndCBkZWZpbmUgdGhpcyBmdW5jdGlvbiBpZiBpdCB3b24ndCBiZQoJdXNlZC4KCgkqIGFvdXR4LmggKHNvbWVfYW91dF9vYmplY3RfcCk6IFJlc3RvcmUgb2xkIGFvdXRfZGF0YSB2YWx1ZSBpZiB0aGlzCgl0eXBlIGRvZXNuJ3QgbWF0Y2guICBEb24ndCBsb3NlIGlmIGZpbGUgc2VjdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4KCWNyZWF0ZWQuCgkoc2V0X2FyY2hfbWFjaCk6IFNldCByZWxvY19lbnRyeV9zaXplLgoJKHNsdXJwX3N5bWJvbF90YWJsZSk6IFVzZSBiZmRfaF9nZXRfezE2LDh9IGZvciByZWFlZGluZyBzeW1ib2wgZGF0YS4KCgkqIGhvc3RzL2kzODZic2QuaDogTmV3IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGlbMzRdODYtKi1ic2QgaG9zdC4KCgkqIGFvdXQtdGFyZ2V0LmggKGNhbGxiYWNrLCB3cml0ZV9vYmplY3RfY29udGVudHMpOiBEZWxldGUgdW51c2VkCgl2YXJpYWJsZXMuCgoJKiBhb3V0eC5oIChyZWxvY190eXBlX2xvb2t1cCk6IE5ldyBmdW5jdGlvbi4KCSogYW91dC10YXJnZXQuaCAoTVlfcmVsb2NfaG93dG9fdHlwZV9sb29rdXApOiBVc2UgaXQgYXMgZGVmYXVsdC4KCSogYW91dGYxLmggKHN1bm9zNF9yZWxvY190eXBlX2xvb2t1cCk6IERlbGV0ZWQuCgkoTVlfcmVsb2NfaG93dG9fdHlwZV9sb29rdXApOiBEb24ndCBkZWZpbmUgaXQuCgoJKiBhb3V0eC5oIChhZGp1c3Rfc2l6ZXNfYW5kX3ZtYXMpOiBEb24ndCBib3RoZXIgd2l0aCBwYWRkaW5nIGZvcgoJT01BR0lDIGZpbGVzLgoJKHNsdXJwX3N5bWJvbF90YWJsZSk6IFVzZSBoZWFkZXIgYnl0ZSBvcmRlciwgbm90IHRhcmdldCBieXRlCglvcmRlciwgZm9yIHJlYWRpbmcgc3ltYm9sIGRhdGEuCgpUaHUgT2N0ICA4IDE3OjMzOjM5IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgVW5kbyBzb21lIGJyYWluIGRhbWFnZSBpbiB0aGUgaG9zdCBzZWN0aW9uLgoJKiBjb25maWd1cmUuaW46ICBSZWZvcm1hdCB0aGUgdGFyZ2V0IHNlY3Rpb24sIHRlc3QgbWFueSBjb25maWdzLgoJKiBNYWtlZmlsZS5pbiAobWFrZSk6ICBSZW1vdmUgb2Jzb2xldGUgYG1ha2UgbWFrZScuCgkqIGFvdXR4LmggKHNvbWVfYW91dF9vYmplY3RfcCk6ICBNYWtlIGRlZmluZXMgbGluZSB1cC4KClRodSBPY3QgIDggMDg6NTI6NDggMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJTm93IGEgYmZkIGtub3dzIHdoZXRoZXIgdW5kZXJzY29yZXMgYXJlIG5vcm1hbGx5IHByZXBlbmRlZAoJdG8gc3ltYm9scyBpbiBpdHMgZmlsZSBmb3JtYXQuCgoJKiBhb3V0LWFkb2JlLmMsIGFvdXQtdGFyZ2V0LmgsIGJvdXQuYywgY29mZi1hMjlrLmMsIGNvZmYtaDgzMDAuYywKCWNvZmYtejhrLmM6IHRhcmdldHMgc2V0IHNvIHRoZXkgaGF2ZSBsZWFkaW5nIHVuZGVyc2NvcmUKCSogY29mZi1pMzg2LmMsIGNvZmYtaTk2MC5jLCBjb2ZmLW02OGsuYywgY29mZi1taXBzLmMsIGNvZmYtbTg4ay5jLAoJY29mZi1yczYwMDAuYywgY29mZi13ZTMyay5jLCBlbGYuYywgaWVlZS5jLCBzcmVjLmM6IHRhcmdldHMgc2V0Cgl3aXRob3V0IGxlYWRpbmcgdW5kZXJzY29yZSBmbGFnCgkqIHRhcmdldHMuYzogYWRkIHN5bWJvbCBsZWFkaW5nIGNoYXIgdG8geHZlYyBkZXNjcmlwdGlvbgoJKiBiZmQtaW4uaCAoYmZkX2dldF9zeW1ib2xfbGVhZGluZ19jaGFyKTogbmV3IG1hY3JvLgoKTW9uIE9jdCAgNSAxNDozMjo1NSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYzogIE1ha2UgZXJybm8gZ2xvYmFsLgoJKiBhcmNoaXZlLmMgKF9iZmRfd3JpdGVfYXJjaGl2ZV9jb250ZW50cyk6ICBJZiByZWFkIGZhaWxzIChhbmQKCWVycm5vIT0wKSBzZXQgYmZkX2Vycm9yIHRvIG1hbGZvcm1lZF9hcmNoaXZlIChzaW5jZSB0aGlzIHByb2JhYmx5CglpbmRpY2F0ZXMgYSB0cnVuY2F0ZWQgYXJjaGl2ZSksIHJhdGhlciB0aGFuIHN5c3RlbV9jYWxsX2Vycm9yLgoKTW9uIE9jdCAgNSAwMzozMzozOSAxOTkyICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCB0d2VlZGxlZHVtYmVyLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogYWRkZWQgcnVsZXMgZm9yIGkzODZic2QuYwoJKiBpMzg2YnNkLmM6IG5ldyBmaWxlLCBzdXBwb3J0aW5nIDM4NmJzZC4KCSogY29uZmlndXJlLmluOiByZWNvZ25pemUgaTM4Ni0qLWJzZCB0YXJnZXQuCgkqIGNvbmZpZy9pMzg2LWJzZC5tdDogbmV3IGZpbGUgLSAzODZic2QgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgpUaHUgT2N0ICAxIDE3OjUxOjA3IDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogcmUtYXJyYW5nZSBob3N0IHNlY3Rpb24gdG8gdXNlICotKi0qIG5vdGF0aW9uLAoJY2xlYW4gdXAgc29tZSBvZiB0aGUgdGFyZ2V0IHNlY3Rpb24gYXMgd2VsbAoKCSogc2VjbGV0LmM6IGNhc3QgcmVzdWx0IG9mIGJmZF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMgdG8KCWF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzCgpUdWUgU2VwIDI5IDEzOjI0OjA5IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9zZWN0aW9uX3N5bWJvbCk6IENyZWF0ZSBzZWN0aW9uIGlmIGl0IGRvZXNuJ3QKCWFscmVhZHkgZXhpc3QuCgoJKiBib3V0LmM6IFJlbW92ZWQgc29tZSB1bnVzZWQgdmFyaWFibGVzLgoKVHVlIFNlcCAyOSAwODozMDoyMSAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBQb3J0YWJpbGl0eSBmaXhlcyBmcm9tIHAzOgoJY29mZmNvZGUuaCAoY29mZl93cml0ZV9yZWxvY3MpOiByZW1vdmVkIHNhbml0eSBjaGVjayB1bnRpbCBpdAoJd29ya3Mgb24gYWxsIHRhcmdldHMgKHBlciBhZHZpY2UgZnJvbSBzYWMpLgoJY29uZmlnL2hwOTAwMC5taDogbmV3IGZpbGUgdG8gZGVmaW5lIFVTRy4KCWhwcGEuYzogI3VuZGVmIGhwcGEgYmVmb3JlIHRoZSBKVU1QX1RBQkxFLgoJaG9zdHMvaHBwYWhwdXguaDogI2RlZmluZSBOQVRJVkVfSFBQQUhQVVhfQ09NUElMRVIgaWYgbm90CglfX1NURENfXy4KCXRhcmdldHMuYyAoYmZkX3RhcmdldF9saXN0KTogaWYgTkFUSVZFX0hQUEFIUFVYX0NPTVBJTEVSLCBtYWtlCglsb2NhbCB2YXJpYWJsZSB0YXJnZXQgdm9sYXRpbGUgdG8gYXZvaWQgbXlzdGVyaW91cyBidWcgaW4KCUhQOTAwMC83MDAgY2MuCgpTYXQgU2VwIDI2IDAzOjU4OjQ5IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogY29uZmlnL2hwcGFic2QubWgsIGNvbmZpZy5ocHBhaHB1eC5taDogIFJlbW92ZSB2YXJpb3VzIGJvZ29zaXR5LgoJKiBob3N0cy9ocHBhaHB1eC5oOiAgUmVtb3ZlIGJjb3B5IGFuZCBpbmRleCBjaXJjdW12ZW50aW9ucy4KCkZyaSBTZXAgMjUgMjI6MzY6NTIgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBjb2ZmLXo4ay5jIChmdW5jX2RhLCBmdW5jX2pyKTogIExpbnQuCgkqIGNvZmZjb2RlLmg6ICBVc2UgbWVtc2V0IHJhdGhlciB0aGFuIGJ6ZXJvLgoJKiBlbGYuYzogIFVzZSBtZW1jcHkgcmF0aGVyIHRoYW4gYmNvcHkuCgkqIHRla2hleC5jOiAgVXNlIG1lbXNldCByYXRoZXIgdGhhbiBiemVyby4KCkZyaSBTZXAgMjUgMTk6MTQ6NDggMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJQWRkIEFkb2JlIGEub3V0IHN1cHBvcnQuCgoJKiBhb3V0LWFkb2JlLmM6ICBOZXcgZmlsZS4gIFNvIGZhciwgb25seSByZWFkcyBhLm91dC5hZG9iZS4gIEZJWE1FLgoJKiBjb25maWcvYWRvYmUubXQ6ICBBZGQuCgkqIGNvbmZpZ3VyZS5pbiAoKi1hZG9iZS0qIHRhcmdldCk6ICBBZGQuCgkqIHRhcmdldHMuYyAoYV9vdXRfYWRvYmVfdmVjKTogIEFkZC4KCSogTWFrZWZpbGUuaW46ICBhZGQgYW91dC1hZG9iZS5jLgoKCSogY29uZmlndXJlLmluOiAgUHV0IHR3byBkYXNoZXMgaW4gYWxsIGVudHJpZXMgdG8gYmUgbWF0Y2hlZC4KCUFkZCBjb21tZW50cyB0byByZW1pbmQgcGVvcGxlIHRvIGRvIHRoaXMuCglSZW9yZGVyIGFsbCBlbnRyaWVzIHRoYXQgbWF0Y2ggbWFudWZhY3R1cmVyIG5hbWVzLCB0byBvY2N1cgoJbGFzdCwgc28gdGhleSB3aWxsIG9ubHkgYmUgbWF0Y2hlZCBpZiBubyBtb3JlIHNwZWNpZmljIG1hdGNoCglvY2N1cnMuICBSZW1vdmUgbWFudWZhY3R1cmVycyBgYW91dCcsIGBib3V0JywgYGNvZmYnLCBhbmQgYGVsZicuCgpGcmkgU2VwIDI1IDE1OjAzOjIyIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQHJ0bC5jeWdudXMuY29tKQoKCSogZWxmLmMgKHNlY3Rpb25fZnJvbV9lbGZfaW5kZXgpOiBSZXR1cm4gYmZkX2Fic19zZWN0aW9uLCBub3QgMCwKCXNpbmNlIHdlIHNob3VsZCBuZXZlciBoYXZlIGEgTlVMTCBzZWN0aW9uLgoJKGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiBJZiBzdF9zaG5keCBkb2Vzbid0IG1hdGNoIGFueSBvZiBvdXIKCXRlc3RzLCBzZXQgdGhlIHNlY3Rpb24gdG8gYmZkX2Fic19zZWN0aW9uLgoKRnJpIFNlcCAyNSAxMToxMTo1NyAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtejhrLmM6IGdldHRpbmcgY2xvc2VyCgkqIGNvZmZjb2RlLmggKGNvZmZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogYWxsb3cKCUVYVFJBX0NBU0VTIGhvb2tzIGZvciBkaWZmZXJlbnQgYXJjaGVzIHRvIHByb3ZpZGUgZGlmZmVyZW50IHJlbG9jCgl0eXBlcy4KCSogc2VjbGV0Lmg6ICNpZm5kZWYgYXJvdW5kIGl0IHRvIGFsbG93IG11bHRpcGxlIGluY2x1c2lvbgoJKiBzcmVjLmM6IG1pbm9yIGRvYyBmaXgKCk1vbiBTZXAgMjEgMTQ6MzM6NTggMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogaG9zdHMvaHA5MDAwLmgsIGhvc3RzL2lyaXgzLmg6IGNoYW5nZXMgZnJvbSBXUlMuCgpTdW4gU2VwIDIwIDA4OjQ4OjI1IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgVXNlIGkzODYtZWxmIGZvciBhbGwgaTM4Ni9pNDg2IHN5c3Y0IGhvc3RzLCBub3QKCWp1c3QgbmNyLgoKVGh1IFNlcCAxNyAwNjo0MDo0NiAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBib3V0LmMgKGJfb3V0X3NsdXJwX3JlbG9jX3RhYmxlKTogQ2xlYXIgaG93dG8gZmllbGQgYmVmb3JlCglmaWxsaW5nIGluIHJlbG9jLCBpbiBjYXNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBjb2RlIGRvZXNuJ3Qgc2V0CglpdC4KCkZyaSBTZXAgMTEgMTU6Mzc6MDYgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9yZW51bWJlcl9zeW1ib2xzKTogc2V0IHRoZSBsYXN0IHJlbnVtYmVyZWQKCXN5bWJvbCBwb2ludGVyIHRvIE5VTEwsIGFzIGV4cGVjdGVkIGJ5IGNvZmZfd3JpdGVfbGluZW51bWJlcnMuCgkoY29mZl93cml0ZV9yZWxvY3MpOiBhcHBhcmVudGx5IGEgbm9uLXplcm8gYWRkZW5kIGlzIE9LIGZvciByZWxvYwoJdHlwZSBSX0lIQ09OU1QgdXNlZCBvbiB0aGUgMjlrLgoKVGh1IFNlcCAxMCAxMzoyODoyNCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIG9wbmNscy5jIChiZmRfZmRvcGVucik6ICBEZXRlcm1pbmUgd2hldGhlciB0byBmZG9wZW4gZm9yCgl1cGRhdGUsIGJhc2VkIG9uIGhvdyB0aGUgdW5kZXJseWluZyBmaWxlIHdhcyBvcGVuZWQuICBPYnNvbGV0ZXMKCUZBU0NJU1RfRkRPUEVOLgoJKiBob3N0cy9yczYwMDAuaCwgaG9zdHMvdGFob2UuaCwgaG9zdHMvdmF4YnNkLmg6ICBSZW1vdmUKCWFsbCBGQVNDSVNUX0ZET1BFTiBjb25maWcgZGVmaW5lcy4KClR1ZSBTZXAgIDggMjE6Mzc6NTggMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogc3BhcmMtb3BjLmM6IE1vdmVkIHRvIG9wY29kZXMgbGlicmFyeSwgbm93IHRoYXQgd2UgaGF2ZSBvbmUuCgkqIE1ha2VmaWxlOiBEb24ndCBjb21waWxlIGl0LgoKVHVlIFNlcCAgOCAxMDoxMDozNCAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBhb3V0eC5oOiBhZGp1c3Rfc2l6ZXNfYW5kX3ZtYXMgZGlkIG5vdCByZXR1cm4gYW55dGhpbmcuCgpUaHUgU2VwICAzIDE5OjI5OjA0IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIHNlY3Rpb24uYyAoYmZkX3NldF9zZWN0aW9uX2ZsYWdzKTogIFJlbW92ZSBhIHNhbml0eSBjaGVjay4KCUl0IGlzIHVuZm9ydHVuYXRlbHkgYnJva2VuLCBhbmQgcHJldmVudHMgc3RyaXAgZnJvbSB3b3JraW5nLgoKVGh1IFNlcCAgMyAxNjoxNDo0MCAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCgoJKiBzcGFyYy1vcGMuYyAoY29uZHIpOiBSZW1vdmUgZXh0cmFuZW91cywgYnV0IGhhcm1sZXNzLCBiYWNrbGFzaAoJY3JlYXRlZCBieSBsYXN0IGNoYW5nZS4KClRodSBTZXAgIDMgMTM6NTI6MzggMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAocmVsb2NfaG93dG9fc3RydWN0KTogIE1ha2Ugc2l6ZSBmaWVsZCBiZSB1bnNpZ25lZC4KCSogYmZkLWluLmg6ICBCdW1wIHRvIHZlcnNpb24gMi4wLgoKVGh1IFNlcCAgMyAwOTowNTozNyAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYm91dC5jLCBjcHUtejhrLmM6ICBVc2UgZW51bXMgd2hlbiBpbml0aWFsaXppbmcgc3RydWN0cyB0byBrZWVwCglicmFpbmRhbWFnZWQgSFAvQXBvbGxvIGNvbXBpbGVyIGhhcHB5LgoKV2VkIFNlcCAgMiAwMjo1MzoyOSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGZvcm1hdC5jOiAgRml4IGRlc2NyaXB0aW9uIG9mIHNlYXJjaCBmb3IgbWF0Y2hpbmcgdGFyZ2V0LgoJKiBhb3V0eC5oIChzb21lX2FvdXRfb2JqZWN0X3ApOiAgU2V0IFNFQ19DT0RFIGFuZCBTRUNfREFUQS4KCSogdGFyZ2V0cy5jOiAgVXBkYXRlIGRlc2NyaXB0aW9uIG9mIHNlYXJjaCBmb3IgbWF0Y2hpbmcgdGFyZ2V0LgoJKiBNYWtlZmlsZS5pbiAoZG9fY2xlYW4sIGNsZWFuKTogIEZpeCBpbmZhbnQgbW9ydGFsaXR5IHR5cG8uCgkoZG9jZGlyKTogIFNldCB0byAuL2RvYywgbm90ICR7c3JjZGlyfS9kb2MsIHdoaWNoIGhhcyBubyBtYWtlZmlsZS4KCSh6OGsgYW5kIHdlMzJrIGZpbGVzKTogIGAqLm86ICouYyc6IGF2b2lkIFN1biBNYWtlIGJ1Zy4KCldlZCBTZXAgIDIgMDA6MjY6MzIgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBBZGRlZCBtb3N0bHljbGVhbi9jbGVhbi9kaXN0Y2xlYW4gcnVsZXMuCgpUdWUgU2VwICAxIDEzOjM4OjQwIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogIFRha2Ugb3V0IG9hc3lzICh1bmxlc3MgdGhhdCBpcwoJdGhlIGRlZmF1bHQpOiAgQmVjYXVzZSB0aGVyZSBpcyBubyBtYWdpYyBudW1iZXIgaW4gYXJjaGl2ZXMsCgl0aGVyZSBjYW4gYmUgYW5ub3lpbmcgdGFyZ2V0IG1pcy1tYXRjaGVzLgoKTW9uIEF1ZyAzMSAxMDoxMTozNyAxOTkyICBKaW0gV2lsc29uICAod2lsc29uQHNwaGFnbnVtLmN5Z251cy5jb20pCgoJKiBzcGFyYy1vcGMuYzogUmlnb3JvdXNseSB1cGRhdGVkIHRvIG1hdGNoIGFyY2hpdGVjdHVyZSBtYW51YWwuCgpNb24gQXVnIDMxIDA4OjA3OjU4IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYW91dHguaCAoYW91dDxuPnN3YXBfZXh0X3JlbG9jX291dCksIGJvdXQuYwoJKGJfb3V0X3NxdWlydF9vdXRfcmVsb2NzKTogZml4IGJ1ZyAxNTA2IHdoZXJlIGFicyBzeW1ib2xzIGF0dGFjaGVkCgl0byB0aGUgYnVpbHQtaW4gYWJzX3NlY3Rpb24gd2VyZSBub3Qgd3JpdHRlbiBvdXQgY29ycmVjdGx5LgoKRnJpIEF1ZyAyOCAxNjoyOToxNSAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMgKGJmZF9zbHVycF9ic2RfYXJtYXApOiBpZiB0aGUgc3ltZGVmX2NvdW50IGlzIHRvbwoJbGFyZ2UsIGFzc3VtZSB3ZSdyZSB1c2luZyBhIHN3YXBwZWQgYnl0ZSBvcmRlciBhbmQgZmFpbCB3aXRoCgl3cm9uZ19mb3JtYXQgcmF0aGVyIHRoYW4gZHVtcGluZyBjb3JlLgoKRnJpIEF1ZyAyOCAxNTozODowMyAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIFJlbmFtZWQgb3BjLXNwYXJjLmMgdG8gc3BhcmMtb3BjLmMgZm9yIHN5c3RlbXMgd2l0aCBzaG9ydAoJZmlsZW5hbWUgY29uc3RyYWludHMuCgkqIE1ha2VmaWxlLmluOiBVcGRhdGVkIHRvIHJlZmxlY3QgY2hhbmdlLgoKVGh1IEF1ZyAyNyAxMzowNToyOCAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQoKCUFkZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUgd2UzMms6CgoJKiBNYWtlZmlsZS5pbiwgYXJjaHVyZXMuYywgY29mZm9jb2RlLmgsIGNvbmZpZ3VyZS5pbiwgdGFyZ2V0cy5jOgoJTWlub3IgZWRpdHMuCgkqIGNvZmYtd2UzMmsuYywgY3B1LXdlMzJrLmMsIGNvbmZpZy93ZTMyay5tdCwgaG9zdHMvd2UzMmsuaDogTmV3IGZpbGVzLgoKV2VkIEF1ZyAyNiAxNDoyMDoxNiAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGJvdXQuYzogYWRkZWQgc3VwcG9ydCBmb3IgcmVsYXhhYmxlIGFsaWdubWVudCByZWxvY3MuCgoJKiBzZWNsZXQuYyAocmVsLCBzZWNsZXRfZHVtcF9zZWNsZXQsIHNlY2xldF9kdW1wKTogZ2V0IHRoZSBhcHAgdG8KCXBhc3MgZG93biBwb2ludGVyIHRvIHBsYXkgYXJlYSByYXRoZXIgdGhhbiB1c2UgYWxsb2NhCgoJKiBjcHUtejhrLmMgKGNvbXBhdGlibGUpOiBtYWRlIHN0YXRpYyB0byByZWR1Y2UgbmFtZSBzcGFjZQoJcG9sdXRpb24uCgpUdWUgQXVnIDI1IDA4OjM5OjEwIDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKICAgICAgICBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgdGhlIHo4azoKCgkqIE1ha2VmaWxlLmluLCBhcmNodXJlcy5jLCBjb2ZmY29kZS5oLCBjb25maWd1cmUuaW4sIHJlbG9jLmMsCglzZWN0aW9uLmMsIHRhcmdldHMuYywKCgkqIHN5bXMuYzogbW92ZSBtaXMtaW5zZXJ0ZWQgcGF0Y2guCgpGcmkgQXVnIDE0IDE1OjM5OjI5IFBEVCAxOTkyICBIb3dhcmQgQ2h1ICAoaHljQGhhbmF1bWEuanBsLm5hc2EuZ292KQoKCURvY3VtZW50YXRpb24gZml4ZXM6CgkqIGN0b3JzLmMsIGZvcm1hdC5jLCBzZWN0aW9uLmMsIHJlbG9jLmM6IGFwcGVuZCAiIC0iIHRvIGl0ZW0gdGFncy4KCSogcmVsb2MuYywgc2VjdGlvbi5jLCBzeW1zLmMsIHRhcmdldHMuYzogYWRkIERPQ0REIGJlZm9yZSBAbm9kZQoJCWNvbW1lbnRzLgoJKiByZWxvYy5jOiBicmVhayBvdXQgYWRkZW5kIGl0ZW0gZnJvbSBzdXJyb3VuZGluZyB0ZXh0LgoKCSogZG9jLnN0ciAoRE9DREQpOiBEZWZpbmVkLiBBZGRzIHRleHQgdG8gb3V0cHV0LgoJKGJvZHl0ZXh0KTogUHV0IGJ1bGxldGl6ZSBiZWZvcmUga2lsbF9ib2d1c19saW5lcy4KCSogY2hldy5jIChidWxsZXRpemUpOiBFbmQgaXRlbWl6YXRpb24gYWZ0ZXIgYSBibGFuayBsaW5lLCB0bwoJcHJldmVudCBmb2xsb3dpbmcgdGV4dCBmcm9tIGJlaW5nIHN3YWxsb3dlZCB1cCBpbiBhbiBpdGVtLgoKTW9uIEF1ZyAyNCAyMDo1MDoyMiAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgQWRkIHNwYXJjbGl0ZSBhcyBhIHRhcmdldC4KCk1vbiBBdWcgMjQgMTI6MDY6MzEgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBpZWVlLmMgKGllZWVfZ2V0X3N5bXRhYik6IGFsd2F5cyBudWxsIHRlcm1pbmF0ZSB0aGUgc3ltYm9sIGxpc3QsCglsaW50LgoKCSogY29mZmNvZGUuaCAoY29mZl9hZGRfbWlzc2luZ19zeW1ib2xzKTogaWYgc3ltYm9scyBkb24ndCBjb21lCglmcm9tIGEgY29mZiBmaWxlIChjc3ltIGlzIG51bGwpLCBkb250IGRlcmVmIHRoZW0KCgkqIGllZWUuYyAocGFyc2VfZXhwcmVzc2lvbik6IGdldCB0aGUgYW5zd2VyIHJpZ2h0IHdoZW4gYWRkaW5nIGFuCglhYnMrKHNlYytvZmYpLCAoaWVlZV9nZW5lcmljX3N0YXRfYXJjaF9lbHQpOiBjYWxsIGllZWVfb2JqZWN0X3AKCW9uIGVsdHMgc28gdGhhdCBmaWxlbmFtZSBpcyBmaWxsZWQgaW4uCgpUaHUgQXVnIDIwIDE5OjA1OjQ4IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogYm91dC5jIChob3d0b19hbGlnbl90YWJsZSk6IE5ldyBzZXQgb2YgcmVsb2NzLCB3aXRoIGVub3VnaAoJZGF0YSBmb3IgIm9iamR1bXAgLXIiIHRvIHdvcmsuCgkoYl9vdXRfcmVsb2NfdHlwZV9sb29rdXApOiBSZWNvZ25pemUgYWxpZ25tZW50IHJlbG9jcy4KClR1ZSBBdWcgMTggMTI6NTc6NDUgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKIAkqIE1ha2VmaWxlLmluOiBhZGRlZCBGTEFHU19UT19QQVNTLCBhbmQgdXNlZCBpdCBmb3IgYWxsIHJlY3Vyc2l2ZQoJaW52b2NhdGlvbnMgb2YgbWFrZS4gIEFsc28sIGFsd2F5cyBjcmVhdGUgaW5zdGFsbGF0aW9uCglkaXJlY3Rvcmllcy4KCgkqIGNvbmZpZy9hcG9sbG92NjgubWg6IHJlbW92ZWQgLWcgZnJvbSBDQyBkZWZpbml0aW9uLgoKTW9uIEF1ZyAxNyAxMzo0MDowOCAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9kZWNzdGF0aW9uLm1oIChIREVGSU5FUyk6IFNwZWNpZnkgIi1HIDQiIHRvIGF2b2lkCglvdmVyZmxvd2luZyBncC1vZmZzZXQgcmFuZ2UuCgpNb24gQXVnIDE3IDExOjQ0OjI4IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogc3JlYy5jIChzcmVjX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogZG9uJ3Qgd3JpdGUgb3V0IHNlY3Rpb25zCgl3aXRob3V0IHRoZSBMT0FEIGFuZCBBTExPQyBhdHRyaWJ1dGVzCgpNb24gQXVnIDE3IDExOjU1OjA3IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGFyY2h1cmVzLmMsIGNwdS1tNjhrLmMsIGNwdS1zcGFyYy5jOiBVbmRvIDE2IEp1bmUgY2hhbmdlcy4KCSogbGliYW91dC5oIChzdHJ1Y3QgYW91dF9iYWNrZW5kX2RhdGEpOiBOZXcgY2FsbGJhY2sgInNldF9zaXplcyIuCgkqIGFvdXQtdGFyZ2V0LmggKGNhbGxiYWNrKTogRG9uJ3Qgc2V0IHBhZ2Uvc2VnIHNpemVzLgoJKG1rb2JqZWN0KTogRGl0dG8uCgkoc2V0X3NpemVzKTogTmV3IHJvdXRpbmUuCgkoYmFja2VuZF9kYXRhKTogUG9pbnQgdG8gaXQuCgkqIGFvdXRmMS5oIChzdW5vczRfc2V0X3NpemVzKTogSGVlZCBhcmNoaXRlY3R1cmUgd2hlbiBzZXR0aW5nIHNpemVzLgoJKHN1bm9zNF9hb3V0X2JhY2tlbmQpOiBQb2ludCB0byBpdC4KCSogYW91dHguaCAoc2V0X2FyY2hfbWFjaCk6IENhbGwgc2V0X3NpemVzIGNhbGxiYWNrLgoKRnJpIEF1ZyAxNCAxOToyMjoxOCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFvdXQtdGFyZ2V0Lmg6ICBNYWtlIF9iZmRfc2x1cnBfZXh0ZW5kZWRfbmFtZV90YWJsZSBiZQoJdGhlIGRlZmF1bHQuICBHaXZlbiB0aGF0IHdlICp3cml0ZSogdGhlIHN1Y2tlcnMgKGZvciBsb25nCglhcmNoaXZlIG1lbWJlciBuYW1lcyksIHdlIHJlYWxseSBvdWdodCB0byBiZSBhYmxlIHRvIHJlYWQgdGhlbSEKCSogdHJhZC1jb3JlLmM6ICBEb24ndCBpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPi4gIEl0IGRvZXNuJ3QKCXNlZW0gdG8gYmUgbmVlZGVkLCBhbmQgbWFueSBtYWNoaW5lcyBkb24ndCBoYXZlIGl0LgoKVGh1IEF1ZyAxMyAwOTo1MzozOSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtbTY4ay5jICh2ZWN0b3IpOiByZWFkIGFuZCB3cml0ZSBhcmNoaXZlcyBpbiBjb2ZmIGZvcm1hdC4KClR1ZSBBdWcgMTEgMTI6MTk6NDIgMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBvcGMtc3BhcmMuYzogTmV3IGZpbGUuCgpTYXQgQXVnICA4IDIzOjE1OjM1IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogYm91dC5jIChiZmRfcmVsb2Nfc3RhdHVzX3R5cGUsIGNhbGxqX2NhbGxiYWNrKTogIENhc3Qgdm9pZCoKCXBvaW50ZXJzIHRvIGJmZF9ieXRlKiBiZWZvcmUgcGVyZm9ybWluZyBhcml0aG1ldGljIG9uIHRoZW0uICBTdWNoCgl1c2Ugd2l0aCBiYXJlIHZvaWQqIHBvaW50ZXJzIGlzIGEgZ2NjIGV4dGVuc2lvbi4KCSogY2FjaGUuYyAoYmZkX2NhY2hlX2RlbGV0ZSk6ICBGb3J3YXJkIGRlY2wgd2l0aCBwcm90b3R5cGUgZm9ybS4KCSogYXJjaGl2ZSAobm9ybWFsaXplKTogIEFkZCB0byBDT05TVCB0byBtYXRjaCBhY3R1YWwgdXNhZ2VzIHdpdGgKCUNPTlNULgoKTW9uIEF1ZyAgMyAwMDozNToyOSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogIFJlY29nbml6ZSBpNDg2IGhvc3QgY3B1LCBhbmQgdXNlIGkzODYtZWxmCglmb3IgaTQ4Ni1uY3Itc3lzdjQuCgpTYXQgQXVnICAxIDEzOjQ5OjU5IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlnL3N0cmF0dXMubXQgKENDKTogIFJlbW92ZSBkZWZpbml0aW9uLgoJKiBlbGYuYyAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogIFRlc3QgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0CglzZWN0aW9uX2Zyb21fZWxmX2luZGV4IHJldHVybnMgTlVMTCBhbmQgZG9uJ3QgZGVyZWZlcmVuY2UgaXQuCgpNb24gSnVsIDIwIDAyOjQ2OjA5IDE5OTIgIEQuIFYuIEhlbmtlbC1XYWxsYWNlICAoZ3VtYnlAY3lnbnVzLmNvbSkKCgkqIGFkZCBocHBhX2RhdGEgdG8gYmZkIHRkYXRhIChpbmRpcmVjdGx5IHZpYSBzZWYpLgoKCSogY29uZmlnL2hwcGFocHV4Lm1oOiBocHV4IGlzIC1EVVNHIChwYXRjaCBieSBzZWYpCgpTYXQgSnVsIDE4IDE1OjUwOjExIDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogZXJyb3IgbWVzc2FnZXMgdG8gc3RkZXJyLCBub3Qgc3Rkb3V0CgpGcmkgSnVsIDE3IDE4OjMyOjQ2IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBydGwuY3lnbnVzLmNvbSkKCgkqIGJmZC5jLCBjYWNoZS5jLCBjb2ZmLWEyOWsuYywgY29mZi1pMzg2LmMsIGNvZmYtaTk2MC5jLAoJICBjb2ZmLW02OGsuYywgY29mZi1tODhrLmMsIGRlbW82NC5jLCBsaWJhb3V0LmgsIGxpYmJmZC5jLAoJICBvYXN5cy5jLCBvcG5jbHMuYywgc3Vub3MuYywgdGFyZ2V0cy5jOiByZW1vdmVkIHJjc2lkJ3MuCgpGcmkgSnVsIDE3IDE3OjA2OjU2IDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogcmVjb2duaXplIGhwcGEqIGluc3RlYWQgb2YgaHBwYQoKVGh1IEp1bCAxNiAxNjozOToyNSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtbTY4ay5jOiBhZGRlZCBSX1JFTExPTkdfTkVHIHJlbG9jIHR5cGUsIGFuZCBjaGFuZ2VkCglSVFlQRTJIT1dUTyB0byBjb3BlIHdpdGggc2FtZS4KCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IGFkZGVkIHN1cHBvcnQgZm9yIHNpemUgb2YgLTIKCShzdWJ0cmFjdCBhIHdvcmQgcmVsb2MgdHlwZSkuIFVwZGF0ZWQgZG9jLgoKVGh1IEp1bCAxNiAxNjoyODowOSAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogbWVyZ2VkIGNoYW5nZXMgZnJvbSBwcm9ncmVzc2l2ZSwgcmVtb3ZlZCByY3NpZC4KCgkqIGFyY2h1cmVzLmMsIGFyY2hpdmUuYywgTWFrZWZpbGUuZG9zOiByZW1vdmVkIHJjc2lkLgoKVGh1IEp1bCAxNiAwODowODoyNSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIDogYWRkIEJGRF9JU19SRUxBWEFCTEUgZmxhZwoJKiBib3V0LmMgKGJvdXRfc3dhcF9leGVjX2hlYWRlcl9baW5fb3V0XSk6IG5ldyBmaWVsZCBpbiBleGVjCgloZWFkZXIgZV9yZWxheGFibGUsIG1ham9yIGhhY2tlcnkgaW4gY2FsbGJhY2tzCgkqIGxpYmFvdXQuaCA6IGFkZCBzcGFjZSBmb3IgYV9yZWxheGFibGUuCgkqIHNlY2xldC5jIChyZWwpOiBkb24ndCByZWxheCBlbXB0eSBzZWN0aW9ucwoKCldlZCBKdWwgMTUgMDc6NTc6NDYgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmMgKFNURF9TRUNUSU9OKTogYWRkIHNvbWUgY2FzdHMgdG8gdGhlIGluaXRpYWxpemVycyBmb3IKCWR1bWIgY29tcGlsZXJzCgpUdWUgSnVsIDE0IDE0OjA2OjI4IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiByczYwMDAtY29yZS5jIChyczYwMDBjb2ZmX2NvcmVfcCk6ICBHcmVhdGx5IHNpbXBsaWZ5IGV4cHJlc3Npb24sCglhbmQgYWRkIGFwcHJvcHJpYXRlIGNhc3RzIHRvIGtlZXAgKHBpY2F5dW5lKSBhaXgtY2MgaGFwcHkuCgpNb24gSnVsIDEzIDA1OjA2OjUxIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogZWxmLmMgKGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiAgTm93IDJuZCBhcmcgaXMgd2hlcmUgdG8gd3JpdGUKCXN5bWJvbCBwb2ludGVycy4gIFB1bnQgZXhwZW5zaXZlICYgdXNlbGVzcyBiZmRfcmVhbGxvYy4gIFVzZQoJbWFsbG9jIGZvciByYXcgc3ltYm9scywgYW5kIGZyZWUgaXQgYmVmb3JlIHJldHVybmluZy4KCShiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiAgRG8gbm90IHNsdXJwIHN5bWJvbCB0YWJsZSB1bnRpbCBwb2xpdGVseQoJYXNrZWQuIAlEbyBub3QgZXZlbiBzbHVycCBzdHJpbmcgdGFibGVzLgoJKGVsZl9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kKTogIENvdW50ICdlbSB3aXRob3V0IHJlYWRpbmcgdGhlbS4KCShlbGZfZ2V0X3N5bXRhYik6ICBUaGlzIGlzIGhvdyB0byBwb2xpdGVseSBhc2suICBTY2hsdXJwIQoJVGhpcyBzaG91bGQgcHJvYmFibHkganVzdCAqYmVjb21lKiBlbGZfc2x1cnBfc3ltYm9sX3RhYmxlLCBGSVhNRS4KCldlZCBKdWwgIDggMTY6MjQ6MzMgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMgKGJzZF93cml0ZV9hcm1hcCk6IHdyaXRlIHRoZSB0aW1lc3RhbXAgb2YgdGhlCglhcmNoaXZlIGhlYWRlciB0byBiZSBqdXN0IGEgbGl0dGxlIGJpdCBsYXRlciB0aGFuIHRoZSB0aW1lc3RhbXAgb2YKCXRoZSBmaWxlLCBvdGhlcndpc2UgdGhlIGxpbmtlciB3aWxsIGNvbXBsYWluIHRoYXQgdGhlIGluZGV4IGlzCglvdXQgb2YgZGF0ZS4KClR1ZSBKdWwgIDcgMDA6MjM6MjMgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IEFkZCBtNjhrLWVyaWNzc29uLSouCgpTYXQgSnVsICA0IDAzOjI5OjQxIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogc3ltcy5oOiAgRGVmaW5lIEJTRl9GSUxFLCB1cGRhdGUgQlNGX1NFQ1RJT05fU1lNIGRlc2MuCgkqIGVsZi5jOiAgUmVtb3ZlIHVuY29uZGl0aW9uYWwgZGVidWcgcHJpbnRmJ3MuCgkoZWxmX3dyaXRlX29iamVjdF9jb250ZW50cywgZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6ICBIYW5kbGUKCUJTRl9TRUNUSU9OX1NZTSA8PT4gU1RUX1NFQ1RJT04sIEJTRl9GSUxFIDw9PiBTVFRfRklMRS4KCShlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIEhhbmQgb3V0IHN5bWJvbHMgaW4gZm9yd2FyZCwgbm90CglyZXZlcnNlIG9yZGVyLiAgU2ltcGxpZnkgZHVwbGljYXRlIGNvZGUuCgpGcmkgSnVsICAzIDIwOjIzOjM0IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZWxmLmM6ICBSZW1vdmUgIih2b2lkKSIgY2FzdHMgZnJvbSBmdW5jdGlvbiBjYWxscyB3aGVyZSB0aGUKCXJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLCBpbiBhY2NvcmRhbmNlIHdpdGggR05VIGNvZGluZyBzdGFuZGFyZHMuCgpUdWUgSnVuIDMwIDE2OjQ5OjEyIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogaHBwYS5jOiAgQXBwbHkgSm9obidzIHN0YW5kYXJkIGZpeCB0byBhdm9pZCAiZW1wdHkgdHJhbnNsYXRpb24KCXVuaXQiIHdhcm5pbmdzIGZyb20gc29tZSBBTlNJLUMgY29tcGlsZXJzLgoKVGh1IEp1biAyNSAwNDozOToyNSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3NvbGFyaXMyLmg6ICBDb25maWd1cmUgc2FtZSBhcyBzeXN2NC4KClR1ZSBKdW4gMjMgMjE6NTQ6NDQgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBsaWJiZmQuaCwgbGliYmZkLWluLmggKGJmZF9zZWVrKTogIE1ha2UgcHJvdG90eXBlIG1hdGNoIGRlZmluaXRpb24uCgkqIHJlbG9jLmMgKGJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwKTogIE1ha2UgY2FzdCBvbiByZXR1cm4KCXR5cGUgbWF0Y2ggYWN0dWFsIHJldHVybiB0eXBlLgoJKiBlbGZfcHJpbnRfc3ltYm9sIChzZWN0aW9uX25hbWUpOiAgTWFrZSBDT05TVC4KCk1vbiBKdW4gMjIgMTc6MzU6MjQgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBpMzg2bGludXguYywgaG9zdHMvaTM4NmxpbnV4LmgsIGNvbmZpZy9pMzg2LWxpbnV4Lm10OgoJTmV3IGZpbGVzLCBmb3IgTGludXggKGEgZnJlZSBVbml4IGNsb25lIGZvciAzODYgbWFjaGluZXMpLgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmluLCB0YXJnZXRzLmM6ICBVcGRhdGUgYWNjb3JkaW5nbHkuCgpGcmkgSnVuIDE5IDIwOjIzOjIxIDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoJTGludHMgZm9yIGJmZF9yZWxvY19jb2RlX3R5cGUtPmJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSwgYW5kCgljb3JyZWN0IGNhbGxpbmcgb2YgaG93dG8gc3BlY2lhbCBmdW5jdGlvbnMgYW5kIGZpeGVzIGZyb20gUmFlYnVybgoJZm9yIGdhczw+YmZkbmVzcwoJKiBhcmNodXJlcy5jOiBudWtlIGJmZF9yZWxvY19jb2RlX3R5cGUKCSogYm91dC5jLCBjcHUtaDgzMDAuYywgY29mZi1pOTYwLmMsIGNvZmYtbTg4ay5jOiBzcGVjaWFsIGZ1bmN0aW9uIGxpbnQKCSogY29mZmNvZGUuaCAoc3R5cF90b19zZWNfZmxhZ3MpOiBTVFlQX0lORk8gaXMgbWFya2VkIGFzCglTRUNfTkVWRVJfTE9BRCwgdmFyaW91cyBvdGhlciBiZmRnYXMgbmV3bmVzcwoJKiByZWxvYy5jLT5saWJiZmQuaDogY2hhbmdlIHByb3R5cGUgb2YgYmZkX2RlZmF1bHRfcmVsb2NfdHlwZV9sb29rdXAKCSogdGFyZ2V0cy5jOiBjaGFuZ2UganVtcCB0YWJsZSB2ZWN0b3IgdG8gYWJvdmUKCgpGcmkgSnVuIDE5IDE5OjAwOjQ1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogZWxmLmMgKGJmZF9lbGZfZmluZF9zZWN0aW9uKTogIE1hcmsgYXMgSU5URVJOQUxfRlVOQ1RJT04gc28KCWl0cyBwcm90b3R5cGUgd2lsbCBiZSBpbmNsdWRlZCBpbiBsaWJiZmQuaC4gIENoYW5nZSByZXN1bHQgdHlwZQoJdG8gc3RydWN0ICogKHJhdGhlciB0aGFuIGVxdWl2YWxlbnQgdHlwZWRlZikgc28gaXQgY2FuIGJlIHVzZWQgaW4KCXRoZSBwcm90b3R5cGUsIHdoZXJlIHRoZXkgdHlwZWRlZiB3b24ndCBiZSBrbm93bi4KCSogbGliYmZkLmg6ICBVcGRhdGVkIHZlcnNpb24uCgpGcmkgSnVuIDE5IDE1OjIxOjU2IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgYXJjaHVyZXMuYywgY29uZmlndXJlLmluLCBjcHUtaHBwYS5jLCBocHBhLmMsIGxpYmhwcGEuaCwKCXRhcmdldHMuYzogIEhQUEEgbWVyZ2UuCgpGcmkgSnVuIDE5IDEyOjIxOjM4IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgU2VwYXJhdGUgU29sYXJpczIgZnJvbSBTWVNWNCBvbiBTUEFSQy4KCSogY29uZmlnL3NvbGFyaXMyLm1oOiAgS2x1ZGdlIGFyb3VuZCBTdW4gY29tcGlsZXIgYnVnLgoKV2VkIEp1biAxNyAxNDowMjo0NiAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogbGliYW91dC5oIChhb3V0X2JhY2tlbmRfZGF0YSk6ICBDaGFuZ2UgZGVmcyBvZiB0d28gYml0ZmllbGRzIHRvCgliZSB1bnNpZ25lZCBjaGFycyBpbnN0ZWFkIHRvIGdldCBhcm91bmQgcnM2MDAwIGNvbXBpbGVyIHByb2JsZW0uCgpXZWQgSnVuIDE3IDEzOjU1OjMxIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZWxmLmMgKGJmZF9zZWN0aW9uX2Zyb21fc2hkciwgZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6CglDb3JyZWN0IG1pc2NvbmNlcHRpb24gdGhhdCB0aGVyZSBjYW4gYmUgb25seSBvbmUgc3ltYm9sIHRhYmxlLgoJT25seSBjYWxsIGVsZl9zbHVycF9zeW1ib2xfdGFibGUgb24gdGhlIGZ1bGwgc3ltYm9sIHRhYmxlLCBub3QKCXRoZSBkeW5hbWljIG9uZSB3aGljaCBpcyBvbmx5IGEgc3Vic2V0IG9mIHRoZSBmdWxsIG9uZS4KCldlZCBKdW4gMTcgMTU6NTQ6NTcgMTk5MiAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IEZvciBJOTYwLAoJZG9uJ3QgYWxpZ24gc2VjdGlvbnMgaW4gZmlsZS4KClR1ZSBKdW4gMTYgMDY6Mjg6MjEgMTk5MiAgS2VuIFJhZWJ1cm4gIChSYWVidXJuQEN5Z251cy5DT00pCgoJKiB0YXJnZXRzLmMgKHN0cnVjdCBiZmRfdGFyZ2V0KTogQWRkZWQgZmllbGQgZm9yIHRhcmdldC1zcGVjaWZpYwoJKGJ1dCBub3QgZmlsZS1zcGVjaWZpYykgZGF0YSwgZm9yIGRpc3Rpbmd1aXNoaW5nIG1pbm9yCgljaGFyYWN0ZXJpc3RpY3MgYmV0d2VlbiAoZS5nLikgYS5vdXQgZm9ybWF0cy4KCgkqIHNlY3Rpb24uYyAoc3RydWN0IHNlYyk6IE5ldyBmaWVsZCB1c2VyX3NldF92bWEgaW5kaWNhdGVzIHZtYQoJZmllbGQgc2hvdWxkIGJlIGhlZWRlZCwgbm90IGFzc3VtZWQgdG8gYmUgdW5zZXQuCgkoU1REX1NFQ1RJT04pOiBJbml0aWFsaXplIHRoYXQgZmllbGQgb2Ygc3RhbmRhcmQgc2VjdGlvbnMgdG8gemVyby4KCSogYmZkLWluLmggKGJmZF9zZXRfc2VjdGlvbl92bWEpOiBTZXQgdXNlcl9zZXRfdm1hIHRvIHRydWUuCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3dyaXRlX3JlbG9jcyk6IFdyaXRlIG91dCBzd2FwcGVkIHJlbG9jLCBub3QKCXByZS1zd2FwcGVkIHZlcnNpb24uCgoJKiBhcmNodXJlcy5jIChzdHJ1Y3QgYmZkX2FyY2hfaW5mbyk6IEZpeGVkIG9yZGVyIG9mIGNvbW1lbnQgYW5kCglmaWVsZCBkZWNsLiAgTmV3IGZpZWxkcyBpbmRpY2F0ZSBzaXplIG9mIHBhZ2UgYW5kIHNlZ21lbnQgZm9yCglhcmNoaXRlY3R1cmUuCgkqIGNwdS1tNjhrLmMgKE4pOiBGaWxsIGluIHZhbHVlcy4KCSogY3B1LXNwYXJjLmMgKGFyY2hfaW5mb19zdHJ1Y3QpOiBEaXR0by4KCgkqIGxpYmFvdXQuaCAoc3RydWN0IGFvdXRfYmFja2VuZF9kYXRhKTogVmFyaW91cyBiaXRzIG9mIGRhdGEgKG5vdAoJYWxsIHVzZWQgY3VycmVudGx5KSB3aXRoIGNoYXJhY3RlcmlzdGljcyBvZiBhLm91dCBpbXBsZW1lbnRhdGlvbi4KCUltcG9ydGFudCBmaWVsZCBmb3Igbm93IGlzIHRleHRfaW5jbHVkZXNfaGVhZGVyLCBpbmRpY2F0aW5nIHRoYXQKCXRoZSB0ZXh0IHNlY3Rpb24gc3RhcnRzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmaWxlIGhlYWRlciwgd2hpY2gKCWdldHMgbWFwcGVkIGluIHdpdGggaXQuCgkoc3RydWN0IGFvdXRfZGF0YSk6IE5ldyBmaWVsZHMgaW5kaWNhdGUgd2hldGhlciB2bWEgaGFzIGJlZW4KCWFkanVzdGVkIHlldCAobm90IHlldCB1c2VkKSwgYW5kIHdoYXQgbWFnaWMgbnVtYmVyIHdpbGwgYmUgdXNlZCBpbgoJdGhlIG91dHB1dCBmaWxlIChzaG91bGQgZ28gYXdheSBpbiBmYXZvciBvZiB2bWFfYWRqdXN0ZWQpLgoJKFdSSVRFX0hFQURFUlMpOiBDb2RlIGZvciBkZWFsaW5nIHdpdGggc2VjdGlvbiBzaXplcyBhbmQgcmVsYXRlZAoJaGVhZGVyIGZpZWxkcyByZXBsYWNlZCB3aXRoIGNhbGwgdG8gYWRqdXN0X3NpemVzX2FuZF92bWFzLgoJKiBhb3V0eC5oIChzb21lX2FvdXRfb2JqZWN0X3ApOiBGaWxsIGluIG1hZ2ljIG51bWJlciBmaWVsZC4KCVNldCBXUF9URVhUIGZsYWcgZm9yIFpNQUdJQyBhcyB3ZWxsIGFzIE5NQUdJQyBmaWxlcy4KCShzZXRfYXJjaF9tYWNoKTogU2V0IHBhZ2Ugc2l6ZSBhbmQgc2VnbWVudCBzaXplIG9uY2UgQ1BVCgl0eXBlIGlzIGtub3duLgoJKGFkanVzdF9zaXplc19hbmRfdm1hcyk6IE5ldyBmdW5jdGlvbjsgaGFzIG11Y2ggY29kZSBtb3ZlZAoJZnJvbSBzZXRfc2VjdGlvbl9jb250ZW50cyBhbmQgV1JJVEVfSEVBREVSUy4gIFNldHMgb3IgYWRqdXN0cyB2bWEKCWFuZCBzaXplIHBhcmFtZXRlcnMsIGFzIHdlbGwgYXMgbWFueSBoZWFkZXIgZmllbGRzLCBhZnRlciBkZWNpZGluZwoJb24gbWFnaWMgbnVtYmVyIGZvciBvdXRwdXQgZmlsZS4gIENoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGlzCglhZGp1c3RtZW50IGhhcyBvbmx5IGJlZW4gZG9uZSBvbmNlLgoJKHNldF9zZWN0aW9uX2NvbnRlbnRzKTogQ2FsbCBhZGp1c3Rfc2l6ZXNfYW5kX3ZtYXMgaW5zdGVhZCBvZgoJZG9pbmcgbXVjaCBvZiB0aGUgd29yayBoZXJlLgoKCSogYW91dC10YXJnZXQuaCAoTVlfbWFrZV9kZWJ1Z19zeW1ib2wsIE1ZX2JhY2tlbmRfZGF0YSk6IFByb3ZpZGUKCWRlZmF1bHQgKG51bGwpIHZhbHVlcyBvZiB0aGVzZSBmaWVsZHMuCgkqIGFvdXRmMS5oIChzdW5vczRfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogRG9uJ3Qgb3ZlcnJpZGUgYV90ZXh0Cgl2YWx1ZSBpbiBleGVjIGhlYWRlci4KCShzdW5vczRfYW91dF9iYWNrZW5kLCBNWV9iYWNrZW5kX2RhdGEpOiBEZWZpbmUgYmFja2VuZCBkYXRhCglpbmRpY2F0aW5nIGZpbGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRleHQgc2VjdGlvbi4KCgkqIGFvdXRmMS5oIChNWV9yZWxvY19ob3d0b190eXBlX2xvb2t1cCk6IEZpeCB0eXBvLgoKCSogaG9zdHMvc3BhcmMuaCAoYWJvcnQsIGV4aXQpOiBIaWRlIHRoZXNlIG5hbWVzIGlmIGNvbXBpbGluZyB3aXRoCglnY2MgdmVyc2lvbiAyLCB0byBhdm9pZCB3YXJuaW5ncy4KCk1vbiBKdW4gMTUgMTI6MjY6NTYgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWcvbmNyMzAwMC5taCAoSU5TVEFMTCwgUkFOTElCKTogIERvbid0IHVzZSAvdXNyL3VjYi9pbnN0YWxsLAoJaXQncyBicm9rZW4gb24gbmNyIDMwMDAncy4gIFVzZSBzaW1wbGUgInRydWUiIGZvciBSQU5MSUIuCgpTYXQgSnVuIDEzIDA5OjE2OjQzIDE5OTIgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm5AcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKG02ODBbMDEyMzRdMC13cnMtKik6IEZpeCB0eXBvIGluIG1hdGNoIHBhdHRlcm4uCgpGcmkgSnVuIDEyIDE5OjQ4OjM0IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogc2VjdGlvbi5jIChTVERfU0VDVElPTik6ICBSZW1vdmUgZXh0cmEgc2VtaWNvbG9uIGluIGRlY2xhcmF0aW9ucy4KCSogY29uZmlndXJlLmluOiAgUmV3cml0ZSB0YXJnZXQgcGFyc2luZyB0byB1c2Ugc2ltcGxlIGZvcm1hdC4KCUhhbmRsZSBzcGFyYy1zdW4tc29sYXJpczIgY29uZmlndXJhdGlvbi4KCSogYW91dDY0Lmg6ICBBdm9pZCBBTlNJIEMgYnJhaW4gZGVhdGggd2FybmluZy4KCSogZWxmLmM6ICBBdm9pZCB0cmlncmFwaCAoPz8/KSBvciAvKiBpbiBjb21tZW50cy4KCkZyaSBKdW4gMTIgMTQ6NTE6MTQgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogY29uZmlnL3N5c3Y0Lm1oOiBuZXcgZmlsZSwgUkFOTElCPWVjaG8KCgkqIGNvbmZpZ3VyZS5pbjogaGFuZGxlIFNvbGFyaXMyIGFzIC1zeXN2NCBvciAtc29sYXJpczIKClRodSBKdW4gMTEgMDA6NTI6MDMgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBlbGYuYyAoZWxmX29ial90ZGF0YSk6ICBNZXJnZSBlbGZfb2JqX3RkYXRhX3N0cnVjdCBhbmQKCWVsZl9jb3JlX3RkYXRhX3N0cnVjdCBpbnRvIGEgc2luZ2xlIGNvbW1vbiBzdHJ1Y3QuICBDb3JlIGZpbGVzCgl3b3VsZG4ndCBoYXZlIHdvcmtlZCBhdCBhbGwgd2l0aG91dCB0aGlzLgoJKGJmZF9lbGZfZmluZF9zZWN0aW9uKTogIE5ldyBmdW5jdGlvbiBmb3IgR0RCJ3MgdW5kZXJjb3ZlciB1c2UKCXRvIGZpbmQgc3RyaW5nIHNlY3Rpb25zIHRoYXQgQkZEIGhpZGVzIGZyb20gaXQuCgkoZWxmX2dldF9zdHJfc2VjdGlvbik6ICBBdm9pZCBtdWx0aXBsZSBhbGxvYyZyZWFkcyBmb3Igc2FtZSBkYXRhOwoJbGludC4KCShlbGZfb2JqZWN0X3AsIGVsZl9jb3JlX2ZpbGVfcCk6ICBBbGxvY2F0ZSBpbnRlcm5hbCBmaWxlIGhlYWRlcgoJc3RvcmFnZSBkeW5hbWljYWxseS4KCSogYmZkLmMgKHVuaW9uIHsuLi59IHRkYXRhKTogIFJlbW92ZSBlbGZfY29yZV90ZGF0YV9zdHJ1Y3QuCgkqIGRlbW82NC5jOiAgUHJldmVudCAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZ3MgZnJvbSBpZGlvdHMuCgpUdWUgSnVuICA5IDE3OjE1OjI2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlnL3tpMzg2djQubWgsIG5jcjMwMDAubWh9OiAgVXBkYXRlIFJBTkxJQiwgYWRkIElOU1RBTEwuCgpTYXQgSnVuICA2IDE3OjAyOjUxIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgSGFuZGxlIFNvbGFyaXMyIGFzICotc3VuLXN5c3Y0IG9yIGFzICotc3VuLXN1bm9zNS4KClN1biBNYXkgMzEgMDU6NDU6MDAgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICh6b29AY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogaGFuZGxlIG02ODBbMDEyMzRdMCBhcyBhbGlhc2VzIGZvciBtNjhrCgpUdWUgTWF5IDI2IDE2OjUwOjU5IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZi1hMjlrLmM6IGRvIGJ5dGUgcmVsb2NzIGNvcnJlY3RseQoJKiBjb2ZmY29kZS5oIChzdHlwX3RvX3NlY19mbGFncyk6IG5ldmVyIGxvYWQgSU5GTyBzZWN0aW9ucwoJKiBzZWNsZXQuYyAocmVsKTogZG9uJ3QgcmVsb2NhdGUgSU5GTyBzZWN0aW9ucwoKV2VkIE1heSAyMCAwODoxODoxOCAxOTkyICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKCgkqIHNlY3Rpb24uYyAoYmZkXypfc3ltYm9sLCBiZmRfKl9zZWN0aW9uKTogSW5pdGlhbGl6ZSBzdGF0aWNhbGx5LgoJTWFrZSB0aGUgc3ltYm9scyB1bm1vZGlmaWFibGUuCgkoYmZkX3NlY3Rpb25faW5pdCk6IERlbGV0ZWQuCgkqIGluaXQuYyAoYmZkX2luaXQpOiBEb24ndCBjYWxsIGJmZF9zZWN0aW9uX2luaXQuCgoJKiBzZWN0aW9uLmMgKGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyk6IEVuc3VyZSB0aGF0IHJhbmdlIHRvIGJlCgl3cml0dGVuIGlzIHdpdGhpbiBzZWN0aW9uIGJvdW5kYXJpZXMuCgkoYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogTGlrZXdpc2UuICBEb24ndCBib3RoZXIgZGlzcGF0Y2hpbmcgaWYKCXNpemUgaXMgemVyby4KCgkqIGxpYmJmZC5jIChiZmRfeG1hbGxvYyk6IFRleHQgb2YgZXJyb3IgbWVzc2FnZSBzaG91bGQgYmUgY29uc3QuCgoJKiBjb2ZmLWk5NjAuYyAoaG93dG9fdGFibGUpOiBEZWxldGVkLgoJKGhvd3RvX3JlbGxvbmcsIGhvd3RvX2lwcm1lZCwgaG93dG9fb3B0Y2FsbCk6IE5ldyB2YXJzOwoJaW50ZXJlc3RpbmcgZW50cmllcyBmcm9tIG9sZCBob3d0b190YWJsZS4KCShSVFlQRTJIT1dUTyk6IEFkanVzdGVkIHRvIHVzZSBzd2l0Y2guCgkoY29mZl9pOTYwX3JlbG9jX3R5cGVfbG9va3VwKTogTmV3IGZ1bmN0aW9uLgoKCSogY29mZmNvZGUuaCAoY29mZl9uZXdfc2VjdGlvbl9ob29rKTogQWxsb2NhdGUgc3RvcmFnZSBmb3IgYXV4CglyZWNvcmRzIGZvciBzZWN0aW9uIHN5bWJvbC4KCShtYWtlX2Fic19zZWN0aW9uKTogVW51c2VkOyBkZWxldGVkLgoJKHJlbnVtYmVyX3N5bWJvbHMpOiBSZS1vcmRlciBzeW1ib2xzIHNvIHVuZGVmaW5lZCBzeW1ib2xzIGNvbWUKCWxhc3QsIGFzIENPRkYgZm9ybWF0IGRlc2lyZXMuCgkoY29mZl93cml0ZV9zeW1ib2wpOiBQdXQgQ19GSUxFIHN5bWJvbHMgaW4gZGVidWcgc2VjdGlvbiBhbHdheXMuCgkoY29mZl9zZWN0aW9uX3N5bWJvbCk6IE5ldyBmdW5jdGlvbjsgY3JlYXRlcyBhIHN5bWJvbCB3aXRoIHRoZQoJc2FtZSBuYW1lIGFzIGEgc2VjdGlvbiwgYW5kIHNldHMgdXAgYXV4IHJlY29yZHMgZm9yIGl0LgoJKGNvZmZfYWRkX21pc3Npbmdfc3ltYm9scyk6IE5ldyBmdW5jdGlvbjsgYWRkcyBzZWN0aW9uIHN5bWJvbHMgdG8KCXN5bWJvbCB0YWJsZSBpZiB0aGV5IGFyZW4ndCB0aGVyZSBhbHJlYWR5LiAgU2hvdWxkIHNvbWVkYXkgYWxzbwoJYWRkIGEgZHVtbXkgQ19GSUxFIHN5bWJvbCBpZiBub25lIGlzIHByZXNlbnQuCgkoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBBZGQgbWlzc2luZyBzeW1ib2xzIGJlZm9yZSBwcmVwYXJpbmcKCXN5bWJvbCB0YWJsZSB0byBiZSB3cml0dGVuLgoJKGNvZmZfc2x1cnBfcmVsb2NfdGFibGUpOiBWZXJpZnkgdGhhdCBzeW1ib2wgaW5kaWNlcyByZWFkIGluIGFyZQoJaW4gYSByZWFzb25hYmxlIHJhbmdlLgoJKiBsaWJjb2ZmLWluLmggKHN0cnVjdCBjb2ZmX3RkYXRhKTogTmV3IGZpZWxkIGNvbnZfdGFibGVfc2l6ZS4KCShvYmpfY29udl90YWJsZV9zaXplKTogQWNjZXNzb3IgbWFjcm8uCgoJKiBib3V0LmMgKGJfb3V0X3JlbG9jX3R5cGVfbG9va3VwKTogTmV3IGZ1bmN0aW9uLiAgSGFuZGxlcyB0aHJlZQoJcmVsb2MgdHlwZXMgb24gaTk2MC4KCgkqIGJmZC1pbi5oIChiZmRfZ2V0X3NlY3Rpb25fbmFtZSk6IE5ldyBtYWNyby4gIExpa2UKCWJmZF9zZWN0aW9uX25hbWUsIGJ1dCByZXR1cm5zIHJ2YWx1ZSwgbm90IGx2YWx1ZS4KCShiZmRfZ2V0X3NlY3Rpb25fdm1hLCBiZmRfZ2V0X3NlY3Rpb25fYWxpZ25tZW50KTogU2ltaWxhci4KCShiZmRfZ2V0X3NlY3Rpb25fZmxhZ3MpOiBOb3cgcmV0dXJucyBydmFsdWUuCgoJKiByZWxvYy5jIChlbnVtIGJmZF9yZWxvY19jb2RlX3JlYWwpOiBBZGQgc2V2ZXJhbCBuZXcgdmFsdWVzLCBzb21lCglnZW5lcmFsLCBzb21lIHNwZWNpZmljIHRvIHNwYXJjIG9yIGk5NjAuCgoJKiBhb3V0eC5oIChzZXRfc2VjdGlvbl9jb250ZW50cyk6IFNldCBWTUEgZm9yIGVhY2ggc2VjdGlvbiBiYXNlZAoJb24gcHJldmlvdXMgc2VjdGlvbi4gIElmIHRleHQgc2VjdGlvbiBWTUEgZG9lc24ndCBhcHBlYXIgdG8gaGF2ZQoJYmVlbiBzZXQsIG1ha2UgYSBiZXN0IGd1ZXNzIGZyb20gdGhlIHR5cGUgb2YgZmlsZS4KCgkqIGFvdXQtdGFyZ2V0LmggKE1ZX3JlbG9jX2hvd3RvX3R5cGVfbG9va3VwKTogRGVmaW5lIGFzIHplcm8gaWYKCW5vdCBkZWZpbmVkLgoJKE1ZKHZlYykpOiBJbml0aWFsaXplIHJlbG9jX3R5cGVfbG9va3VwIGZpZWxkLgoKCSogYW91dHguaCAoaG93dG9fdGFibGVfKik6IEV4cG9ydCBhcyBhb3V0XyNfKl9ob3d0b190YWJsZS4KCShiZmRfZXJyb3JfdHJhcCwgYmZkX2Vycm9yX3ZlY3Rvcik6IEV4dGVybiwgbm90IGNvbW1vbi4KCgkqIGFvdXRmMS5oIChzdW5vczRfcmVsb2NfdHlwZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uICBIYW5kbGVzIGEKCWZldyB0eXBlcyBvZiByZWxvY3MgZm9yIHNwYXJjOyB3aWxsIG5lZWQgZW5oYW5jZW1lbnQuCgoJKiBib3V0LmMgKGNhbGxqX2NhbGxiYWNrKTogVXNlIERFRlVOIG1hY3JvIGluIGRlZmluaXRpb24uCgkqIGNvZmYtaTk2MC5jIChvcHRjYWxsX2NhbGxiYWNrKTogTGlrZXdpc2UuCgoJKiB0YXJnZXRzLmMgKGJmZF90YXJnZXQpOiBBZGRlZCBmaWVsZHMgcmVsb2NfdHlwZV9sb29rdXAgYW5kCglfYmZkX21ha2VfZGVidWdfc3ltYm9sLiAgQWxzbyBtaW5vciBjb21tZW50IGNoYW5nZXMuCgkqIHN5bXMuYyAoYmZkX21ha2VfZGVidWdfc3ltYm9sKTogTmV3IGRpc3BhdGNoaW5nIG1hY3JvLgoJKiByZWxvYy5jIChiZmRfcmVsb2NfdHlwZV9sb29rdXApOiBUYWtlIGEgQkZEIHB0ciBhcyBhcmcgcmF0aGVyCgl0aGFuIGFyY2ggaW5mbywgYW5kIGRpc3BhdGNoIHdpdGggQkZEX1NFTkQuICBDYWxsZXJzIGNoYW5nZWQuCgkqIGFyY2h1cmVzLmMgKHN0cnVjdCBiZmRfYXJjaF9pbmZvKTogRGVsZXRlZCBmaWVsZAoJcmVsb2NfdHlwZV9sb29rdXAuCgkqIGNwdS0qLmM6IERvbid0IGluaXRpYWxpemUgdGhhdCBmaWVsZC4KCgkqIGJmZC1pbi5oIChlbnVtIGJmZF9lcnJvcik6IEFkZCBuZXcgdmFsdWUgImJhZF92YWx1ZSIuCgkqIGJmZC5jIChiZmRfZXJybXNncyk6IE5vdyBjb25zdDsgYWRkZWQgZW50cnkgZm9yIGJhZF92YWx1ZS4KCShiZmRfZXJybXNnKTogTm93IHJldHVybnMgcHRyIHRvIGNvbnN0LgoJKiBiZmQtaW4uaCAoYmZkX2Vycm1zZyk6IEZpeCBwcm90b3R5cGUuCgoJKiBjYWNoZS5jIChCRkRfQ0FDSEVfTUFYX09QRU4pOiBGaXggdHlwbyBpbiBkb2MuCgkqIHJlbG9jLmMgKGJmZF9nZW5lcmljX3JlbGF4X3NlY3Rpb24pOiBEaXR0by4KCgkqIHNlY3Rpb24uYyAoU2VjdGlvbiBPdXRwdXQgZG9jKTogSW1wcm92ZSBkZXNjcmlwdGlvbiBvZiB1c2Ugb2YKCW91dHB1dF9zZWN0aW9uIGFuZCBvdXRwdXRfb2Zmc2V0LgoKVHVlIE1heSAxOSAyMzo0MjoxMCAxOTkyICBELiBWLiBIZW5rZWwtV2FsbGFjZSAgKGd1bWJ5QGN5Z251cy5jb20pCgoJKiBzY28tY29yZS5jOiBuZXcgZmlsZSBmcm9tIG5ldC4KCSogYW91dHguaCAodHJhbnNsYXRlX3RvX25hdGl2ZV9zeW1fZmxhZ3MpOiBidWdmaXggZnJvbSBuZXQ6CgkgIE5vdyB3ZSBoYXZlIHRoZSBoYWlyeSBsaW5rZXIsIGl0J3MgcG9zc2libGUgdG8gbW92ZSBzeW1ib2xzIGZyb20KCSAgb25lIHNlY3Rpb24gaW50byBhbm90aGVyLiAgQWN0dWFsbHkgbWFrZSB0aGF0IHdvcmshCgpTYXQgTWF5IDE2IDE3OjU3OjU5IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBydGwuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3N1bjMuaDogZml4IGRlY2xhcmF0aW9uIG9mIGZyZWUuCgpUdWUgTWF5IDEyIDE0OjA4OjU5IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZi1hMjlrLmMgKHBlcmZvcm1fcmVsb2MpOiBmaXggYnVnIGluIGptcC9jYWxsIGV2YWx1YXRpb24KCSogY29mZi1oODMwMC5jIChyZWxvY19wcm9jZXNzaW5nKTogYWxsIHJlbG9jcyBhcmUgcmVsYXRpdmUgdG8KCXNlY3Rpb24gc3RhcnQuCgkqIG9wbmNscy5jOiBkb24ndCB1c2UgZmRvcGVuIG9uIERPUyBzeXN0ZW1zCgoJc2hvcnQgcGF0Y2hlcyBmcm9tIEdsZW5uIEthc3RlbiAoZ2xlbm5AcmVhZHkuY29tKQoJKiB0YXJnZXQuYzogZW5hYmxlZCBvYXN5cyBzdXBwb3J0CgkqIG9hc3lzLmM6ICBJbnNlcnQgLiB3aGVuIFVOREVSU0NPUkVfSEFDSyBpcyBlbmFibGVkLAoJZml4IHByb2JsZW0gd2hlcmUgYSByZWxvY2F0aW9uIHdoaWNoIGNyb3NzZWQgYSBtb2RpZmljYXRpb24gYnl0ZQoJYm91bmRhcnkgZGlkIG5vdCB3b3JrLiBGaXggcHJvYmxlbSB3aGVyZSBhIHJlbG9jYXRpb24gbmVhciB0aGUgZW5kCglvZiBhIGRhdGEgcmVjb3JkIGRpZCBub3Qgd29yay4KCgpUdWUgTWF5ICA1IDE4OjExOjI1IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jIChiZmRfc2x1cnBfY29mZl9hcm1hcCk6IG9sZCB2ZXJzaW9ucyBvZiBCRkQgd3JvdGUKCWFyY2h2aWUgaGVhZGVyIHN0cmluZyBjb3VudHMgdGhlIGVuZGlhbiB3YXksIHRoaXMgaGV1cmlzdGljIHNlZXMKCWhvdyBiaWcgYW4gYXJjaGl2ZSBzdHJpbmcgdG8gcmVhZCBieSB0cnlpbmcgaXQgb25lIHdheSBhbmQgaWYgdGhlCglzdHJpbmcgdGFibGUgaXMgdW5yZWFzb25hYmx5IGJpZywgdHJ5aW5nIGl0IHRoZSBvdGhlci4gKkZJWE1FKi4KCSogb3BuY2xzLmMgKGJmZF9mZG9wZW5yKTogY2FuJ3QgZG8gZmRvcGVucyBvbiBWTVMKClR1ZSBNYXkgIDUgMTQ6MTg6MjQgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogYmZkLWluLmg6ICBJbmNyZWFzZSB2ZXJzaW9uIG51bWJlciB0byAxLjk3LCBmb3IgY29uc2lzdGVuY3kKCXdpdGggLi4vYmludXRpbHMuCgkqIE1ha2VmaWxlLmluOiAgZG9jZGlyIGlzIC4vZG9jLCBub3QgJHtzcmNkaXJ9L2RvYy4KCk1vbiBNYXkgIDQgMTE6NDk6MTUgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgogICAgICAgICogYmZkLWluLmg6IGJ1bXAgdmVyc2lvbiB0byAxLjk2CiAgICAgICAgIE1ham9yIGNoYW5nZTsgY2hhbmdlZCBjYWxsaW5nIGNvbnZlbnRpb24gZm9yCgkgYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyBzbyB0aGF0IGNhbGxlciBhbGxvY2F0ZXMKCSBtZW1vcnkgZm9yIHNlY3Rpb24gZGF0YS4KCSogY29mZmNvZGUuaCAoYmZkX2NvZmZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKSwgcmVsb2MuYywKCXNlY2xldC5jLCB0YXJnZXRzLmMsIGJmZC5jOiByZWZsZWN0IG5ldyBjb252ZW50aW9uLgoJKiBjb2ZmY29kZS5oIChzdHlwX3RvX3NlY19mbGFncyk6IGlmIHN0eXBfZmxhZ3MgaXMgbm90IGEgc3BlY2lhbAoJY2FzZSwgdGhlbiB1c2UgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcyBmb3IgU0VDXyogZmxhZ3MuCgpGcmkgTWF5ICAxIDEyOjU4OjM0IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiB1c2UgUkVMU1ogdG8gd29yayBvdXQKCXNpemUgb2Ygb3V0cHV0IHJlbG9jIHN0cnVjdC4KCSogdGFyZ2V0cy5jLCBNYWtlZmlsZS5pbjogY29tbWVudCBvdXQgdGVraGV4IGZvciB0aGUgbW9tZW50LgoJKiBpZWVlLmM6IGlmIHNvbWUgcGxhY2VzIHdoZXJlIG51bGwgcG9pbnRlcnMgd2VyZSB1c2VkIGluc3RlYWQgb2YgJmJmZF9hYnNfc2VjdGlvbi4KCSogY29uZmlndXJlLmluOiB0YW5kZW0gdGFyZ2V0IGlzIHN0MjAwMAoJKiBjb2ZmLW02OGsuYzogcmVuYW1lIHN0YXRpYyBob3d0b190YWJsZSB0byBnbG9iYWwKCW02OGtjb2ZmX2hvd3RvX3RhYmxlLgoJKiBib3V0LmM6IHJlbW92ZSB1bm5lY2Vzc2FyeSBhYm9ydAoJKiBjb2ZmLWEyOWsuYzogdmFyaW91cyBjaGFuZ2VzIHRvIHRoZSB3YXkgcmVsb2NhdGlvbnMgd29yayB0byBjb3BlCgl3aXRoIHRoZSAibmV3IG9yZGVyIiBhbmQgbGF0ZW50IGJ1Z3MuCgkqIGNvZmZjb2RlLmg6IGxpbnQKCldlZCBBcHIgMjkgMTI6Mzc6MDcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChhb3V0X3N3YXBfZXh0X3JlbG9jX291dCwgYW91dF9zd2FwX3N0ZF9yZWxvY19vdXQpCglib3V0LmMgKGJfb3V0X3NxdWlydF9vdXRfcmVsb2NzKTogdHJlYXQgYWJzIHN1bWJvbHMgdGhlIHJpZ2h0IHdheS4KCSogcmVsb2MuYyAoYmZkX3BlcmZvcm0tcmVsb2NhdGlvbik6IGRvbid0IHJlbG9jYXRlIHJlZnMgdG8KCWFic29sdXRlIHN5bWJvbHMgaWYgZG9pbmcgYSBwYXJ0aWFsIGxpbmsuCgpGcmkgQXByIDI0IDA3OjM1OjI2IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBBZGQgYTI5ay1hbWQtdWRpLgoKVGh1IEFwciAyMyAxODozNzo1NSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGFvdXRfPGJpdHM+X3N3YXBfZXhlY19oZWFkZXJfaW4pOiAgWmVybyBvdXQgdGhlCglpbnRlcm5hbF9leGVjIHN0cnVjdHVyZSBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgdGhhdAoJYXJlIHVzZWQsIHNvIHRoYXQgdGhlIHVudXNlZCBmaWVsZHMgYXJlIGluIGEga25vd24gc3RhdGUuCgpXZWQgQXByIDIyIDA5OjM2OjA4IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogdGVraGV4LmMgKHN0cnVjdCBkYXRhX3N0cnVjdCk6ICBDb252ZXJ0IGZyb20gdHlwZWRlZiB0aGF0Cgl0eXBlZGVmcyBub3RoaW5nIHRvIGEgbm9ybWFsIHN0cnVjdHVyZSBkZWNsYXJhdGlvbi4KCSogdGVraGV4LmMgKHBhc3Nfb3Zlcik6ICBQcm90b3R5cGUgYXJncyBmb3IgZnVuY3Rpb24gdGhhdAoJc2Vjb25kIGFyZyBwb2ludHMgdG8uCgpNb24gQXByIDIwIDIyOjIyOjUxIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiByZW1vdmUgb2xkIHN0eWxlIHN0YWdpbmcuICBEbyBub3QgcHJpbnQgcmVjdXJzaW9uCgkgIGxpbmVzLgoKCSogTWFrZWZpbGUuaW46IHJld29yayBDRkxBR1Mgc28gdGhhdCBDRkxBR1MgY2FuIGJlIHBhc3NlZCBmcm9tIHRoZQoJICBNYWtlZmlsZSBjb21tYW5kIGxpbmUuICBSZW1vdmUgTUlOVVNfRy4gIERlZmF1bHQgQ0ZMQUdTIHRvIC1nLgoJICBQYXNzIENGTEFHUy4KCkZyaSBBcHIgMTcgMDk6MTU6MzEgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuYywgTWFrZWZpbGUuaW46IGFkZGVkIHRla2hleAoJKiBhb3V0eC5oIChzZXRfc2VjdGlvbl9jb250ZW50cyk6IHBhZ2VzIHNob3VsZCBiZSBwYWRkZWQgdG8gdGhlCglzaXplIG9mIGEgcGFnZSwgbm90IHRoZSBzaXplIG9mIGEgc2VnbWVudC4KCSogY29uZmlndXJlLmluOiBhZGRlZCBnbzMyIGhvc3QgYW5kIGkzODYtYW91dCB0YXJnZXQuCgkqIGkzODZhb3V0LmMsIGxpYmFvdXQuaDogbm93IHdvcmtzIGZvciBnbzMyIHRhcmdldAoJKiBpZWVlLmM6IGZpeCBiaXQgcm90LgoJKiBzZWNsZXQuYzogc3VwcG9ydCBmb3IgcGFkZGluZyBzZWNsZXQgdHlwZS4KCldlZCBBcHIgMTUgMTg6MTE6NTggMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGFkZGVkIC5OT0VYUE9SVDoKClR1ZSBBcHIgMTQgMTQ6MzQ6NDIgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX2FkZF9zdHJ0YWIsIGJmZF9hZGRfMl90b19zdHJ0YWIpOiAgQ09OU1Qgc3ByZWFkcwoJbGlrZSBvb3plLgoJKiBlbGYuYyAoZWxmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucywKCWVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiAgUmV0dXJuIGJvb2xlYW4sIG5vdCBOVUxMICh3aGljaAoJY2FuIGJlIHZvaWQgKikuCgkqIGVsZi5jIChiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiAgSWZkZWYtb3V0IGRlYnVnZ2luZyBjb2RlLgoJQWxzbyBpZmRlZi1vdXQgY29kZSB0aGF0IGFib3J0cyBvbiB1bmhhbmRsZWQgc2VjdGlvbiB0eXBlcy4KCkZyaSBBcHIgMTAgMjI6Mjk6MTggMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBSZWNvZ25pemUgbmNyMzAwMCBjb25maWcKCSogTWFrZWZpbGUuaW4gKE1JTlVTX0cpOiAgUGFzcyBvbiB0byByZWN1cnNpdmUgbWFrZXMuCgkqIGhvc3RzL25jcjMwMDAuaCwgY29uZmlnL25jcjMwMDAubWg6ICBBZGQgaG9zdCBjb25maWcgZmlsZXMuCgpUaHUgQXByICAyIDE3OjQyOjQ1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBOb3cgdGhhdCB3ZSBoYXZlIHN5bS5oIGFuZCBzeW1jb25zdC5oLCBjb21waWxlCgljb2ZmLW1zeW0uYyBvbiBhbGwgc3lzdGVtcy4KCSogY29uZmlnL3tkZWNzdGF0aW9uLm1oLCBpcml4My5taCwgaXJpeDQubWh9OiAgUmVtb3ZlIGNvZmYtbXN5bS5vIGRlcC4KCSogY29mZi1tc3ltLmM6ICBVcGRhdGUgaW5jbHVkZSBmaWxlcyBhbmQgY29tbWVudHM7IGFkZCB3ZWFrZXh0IGJpdC4KCldlZCBBcHIgIDEgMjM6MTY6MzggMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMsIGJmZC5jLCBib3V0LmMsIGNvZmZjb2RlLmgsIGluaXQuYywgcmVsb2MuYywKCXNlY3Rpb24uYywgc3JlYy5jLCBzeW1zLmMsIGNvZmYtaDgzMDAuYzogIExpbnQuCgpTdW4gTWFyIDI5IDA5OjM3OjU5IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYm91dC5jLCBjb2ZmLWEyOWsuYywgY29mZi1pOTYwLmM6ICBMaW50LgoJKiBjb25maWd1cmUuaW46ICBBZGQgbmV3IGhvc3QgYW5kIHRhcmdldCBjb25maWdzLgoJKiBlbGYuYyAoYmZkX3Byc3RhdHVzLCBiZmRfZnByZWdzZXQpOiAgQXZvaWQgdHlwZW5hbWUgb2YgcmVnaXN0ZXIKCXN0cnVjdHMsIHdoaWNoIHZhcnk7IGp1c3QgdXNlIG1lbWJlciBuYW1lLgoJKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogIExpbnQsIGZpeCBjb21tZW50cy4KCSogY29uZmlnL3NwYXJjLWVsZi5tdCwgaG9zdHMvc3lzdjQuaDogIE5ldyBjb25maWcgZmlsZXMuCgpTYXQgTWFyIDI4IDEzOjA3OjAyIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZWxmLmMgKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogIEZpeCB0byB1c2Ugb25seSBhIHNpbmdsZQoJbG9jYWwsIGRpc3Bvc2FibGUsIGNvcHkgb2YgdGhlIGV4dGVybmFsIGZvcm0gb2Ygc2VjdGlvbiBoZWFkZXIKCXRhYmxlIGFuZCBwcm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyaWVzLgoKVGh1IE1hciAyNiAxNjo1OTo1OCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgU2V0IE1JTklNSVpFIGJhY2sgdG8gMCBmb3IgYSByZWFsIHJlbGVhc2UuCgpUdWUgTWFyIDI0IDE1OjU3OjAzIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBjb25maWcvaXJpeDQubVtodF0sIGhvc3RzL2lyaXg0Lmg6IGFkZCBzdXBwb3J0IGZvcgoJICBpcml4NC4KCk1vbiBNYXIgMjMgMjI6Mzc6MzQgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYtbXN5bS5jIChlY29mZl9zd2FwX3JmZF9pbik6ICByZW1vdmUgJiBmb3IgYXJyYXkgcmVmLgoKVHVlIE1hciAxNyAxNDoxMjoyNSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBib3V0LmMgKGJfb3V0X3NsdXJwX3JlbG9jX3RhYmxlKTogIFVzZSBCRkRfQVNTRVJUIG1hY3JvLAoJbm90IGludGVybmFsIGJmZF9hc3NlcnQgZnVuY3Rpb24gKHR3aWNlKS4KClR1ZSBNYXIgMTcgMTA6NDU6MTIgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0LXRhcmdldC5oOiBjaGFuZ2UgYXJfbWF4X25hbWVsZW4gdG8gMTUgKHRoZSByaWdodCB2YWx1ZSkKCSogY29mZi1hMjlrLCBjb2ZmY29kZS5oOiBtb3JlIGhhbmdvdmVycyBmcm9tIHRoZSBiZmRfYWJzX3NlY3Rpb24KCWNoYW5nZQoKTW9uIE1hciAxNiAxNDo1NzoyMiAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BydGwuY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoYmZkX2dlbmVyaWNfYXJjaGl2ZV9wKTogY2hlY2sgZm9yIGJvdXQgYXJjaGl2ZXMgdG9vLgoJKiBib3V0LmM6IG1ha2UgaXQgd29yayBhZ2Fpbi4KClNhdCBNYXIgMTQgMTc6MzA6NDAgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBlbGYuYyAoZWxmX2NvcmVmaWxlX25vdGUpOiAgQ2FsbCBiZmRfeG1hbGxvYygpIGluc3RlYWQgb2YgYmFyZQoJbWFsbG9jKCkuCgkqIHJlbG9jLmMgKGJmZF9nZW5lcmljX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6ICBDYWxsCgliZmRfeG1hbGxvYygpIGluc3RlYWQgb2YgYmFyZSBtYWxsb2MoKS4KCkZyaSBNYXIgMTMgMTU6NDQ6MzcgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogcGFzcyBkb3duIE1BS0VJTkZPIG9uIGluZm8uCgpGcmkgTWFyIDEzIDA3OjQxOjEzIDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29uZmlnL210LTxmb28+IG5vdyA8Zm9vPi5tdCwgY29uZmlnL21oLTxmb28+IG5vdyA8Zm9vPi5taC4KCWhvc3QvaC08Zm9vPiBub3cganVzdCA8Zm9vPi4KCSogY29uZmlndXJlLmluOiByZWZsZWN0IGNoYW5nZXMKClRodSBNYXIgMTIgMTE6MTU6MDIgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBsaWJiZmQtaW4uaCAoc2V0X3RkYXRhKTogIE1ha2UgY2hhbmdlIG9mIEZlYiAyNyBpbiB0aGUKCWFjdHVhbCBzb3VyY2UgZmlsZSwgbm90IGp1c3QgdGhlIGdlbmVyYXRlZCBsaWJiZmQuaC4KClNhdCBNYXIgIDcgMTA6MzM6NDEgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLWk5NjAuYyAoaWNvZmZfbGl0dGxlX3ZlYyk6IGFkZCBDT0ZGX1NXQVBfVEFCTEUgc28gd2UgY2FuIHJ1bgoJZ2RiIG9uIGxpdHRsZS1lbmRpYW4gOTYwIGNvZGUuCgkqIGFyY2hpdmUuYyAoY29tcHV0ZV9hbmRfd3JpdGVfYXJtYXApOiBpbmRpcmVjdCBzeW1ib2xzIHNob3VsZCBnbwoJaW50byB0aGUgYXJjaGl2ZSBoZWFkZXIgdG9vLgoKRnJpIE1hciAgNiAyMTo1NToxNiAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBjaGVjayB0YXJnZXQuCgpUaHUgTWFyICA1IDIzOjUxOjQyIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29mZi1tc3ltLmM6ICBNb3ZlIHRoaXMgZmlsZSBmcm9tIGdkYi9lY29mZi5jLiAgSXQKCWhhbmRsZXMgYnl0ZS1zd2FwcGluZyBmb3IgRUNPRkYgKE1JUFMgc3ltYm9sKSBmaWxlcy4KCSogY29uZmlnL21oLWRlY3N0YXRpb24sIGNvbmZpZy9taC1pcml4MzogIEFkZCBjb2ZmLW1zeW0ubwoJdG8gdGhlIGZpbGVzIGJ1aWx0IG9uIE1JUFMtYmFzZWQgaG9zdHMuCgkqIE1ha2VmaWxlLmluOiAgQWRkIHJ1bGUgZm9yIGNvZmYtbXN5bS4KClRodSBNYXIgIDUgMjE6MzY6MDUgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogYWRkZWQgY2xlYW4taW5mbyB0YXJnZXQuICBNSU5JTUlaRT0xLgoKU3VuIE1hciAgMSAyMjozMjo1OCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGNvZmYtcnM2MDAwLmM6ICBNb3ZlIGNvcmUgZmlsZSBmdW5jdGlvbnMgaW50byBzZXBhcmF0ZQoJbmV3IGZpbGUgcnM2MDAwLWNvcmUuYy4gIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcmVhZGluZwoJY29yZSBmaWxlcyBkZXBlbmRzIG9uIG5hdGl2ZSBpbmNsdWRlIGZpbGVzIHRoYXQgY29uZmxpY3QKCXdpdGggLi4vaW5jbHVkZS9jb2ZmL3JzNjAwMC5oLgoJKiBjb25maWcvbWgtcnM2MDAwOiAgQWRkIHJzNjAwMC1jb3JlLm8gdG8gSERFUEZJTEVTLgoKVGh1IEZlYiAyNyAyMjoxOTo1NSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKE5BTUUoYW91dCxwcmludF9zeW1ib2wpKTogRG9uJ3QgcHJpbnQKCXN5bWJvbCBhZGRyZXNzcyBmb3IgdW5kZWZpbmVkIHN5bWJvbHMuCgkqIGNvZmYtcnM2MDAwLmM6ICBWYXJpb3VzIHVwZGF0ZXMgKGR1ZSB0byB0YXJnZXQtCglpbmRlcGVuZGVudCBjaGFuZ2VzKS4KCSogbGliYmZkLmg6ICBEaXR0byAodGRhdGEgZmllbGQgaXMgbm93IGEgdW5pb24pLgoJKiBob3N0cy9oLXNwYXJjLmg6ICBSZW1vdmVkIHByb3RvdHlwZSBmb3IgYm9ndXMgZnVuY3Rpb24KCSdlbXNldCcgKHByZXN1bWFibHkgc2hvdWxkIGhhdmUgYmVlbiAnbWVtc2V0JyAtIHdoaWNoIGlzIHRoZXJlKS4KClRodSBGZWIgMjcgMTE6NDY6MzMgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKG1pcHMtYmlnLSogdGFyZ2V0KTogIFNhbWUgaXMgSXJpcy4KClRodSBGZWIgMjcgMDk6MjQ6NTYgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzKTogd2hlbiBjcmVhdGluZyBhbgoJYWxpYXMgc3ltYm9sLCBmaWxsIGluIHRoZSBzZWN0aW9uIGFzIHVuZGVmaW5lZCwgcmF0aGVyIHRoYW4KCWxlYXZpbmcgaXQgYmxhbmsuIElmIGFuIG91dHB1dCBzZWN0aW9uIGNhbid0IGJlIGZvdW5kIGZvciBhCglzeW1ib2wsIHRoZW4gZG9uJ3QgY29yZSBkdW1wLgoKV2VkIEZlYiAyNiAxODowNDo0MCAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaW46IHJlbW92ZWQgdHJhY2VzIG9mIG5hbWVzdWJkaXIsCgkgIC1zdWJkaXJzLCAkKHN1YmRpciksICQodW5zdWJkaXIpLCBzb21lIHJjcyB0cmlnZ2Vycy4gIEZvcmNlZAoJICBjb3B5cmlnaHRzIHRvICc5MiwgY2hhbmdlZCBzb21lIGZyb20gQ3lnbnVzIHRvIEZTRi4KCldlZCBGZWIgMjYgMTk6NDA6NTkgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuYzogbGludAoJKiBjb2ZmLWg4MzAwLmM6IGZpeCBzdHVwaWQgcmVsb2Mgc3VidHJhY3Rpb24gYnVnCgkqIGNvZmZjb2RlLmggKGNvZmZfc3dhcF9hdXhfb3V0KTogb25seSBzd2FwIGEgdHZuZHggYnkgMiBieXRlcywKCXNpbmNlIHRoYXQncyBob3cgd2lkZSBpdCBpcy4gKGNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlKTogYWx3YXlzIHplcm8gb3V0Cgl0aGUgc3ltYm9sLmZsYWdzIGFuZCBkb25lX2xpbmVubyBmaWVsZHMuCgpUdWUgRmViIDI1IDE0OjI5OjI0IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl93cml0ZV9zeW1ib2wpOiB3cml0ZSBvdXQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mCglhdXhlbnRzLgoJKiBjcHUtaDgzMDAuYzogZml4IGRpc2Fzc2VtYmx5IGJ1ZwoKRnJpIEZlYiAyMSAyMTozOTo1NiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIChiZmRfZXJybXNnKSwgY29mZmNvZGUuaCAoY29mZl9zd2FwX2F1eF9pbiwKCXNlY3Rpb25fZnJvbV9iZmRfaW5kZXgpLCBjcHUtaDgzMDAuYyAoaG93dG8qX2NhbGxiYWNrKSwKCXJlbG9jLmMsIHNlY3Rpb24uYyAoYmZkX21hcF9vdmVyX3NlY3Rpb25zKSwgdGFyZ2V0cy5jCgkoYmZkX3RhcmdldF9saXN0KTogIFByb3RvbGludC4KCSogbGliYmZkLmg6ICBVcGRhdGUgdG8gbWF0Y2ggYSBsaWJiZmQtaW4uaCBmcm9tIGEgbW9udGggYWdvLgoKRnJpIEZlYiAyMSAxMDo1Nzo1NCAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfc3dhcF9hdXhfaW4pOiBsaW50LCAoY29mZl9wcmludF9zeW1ib2wpOiBwcmludHMKCW91dCB0YWduZHggdG9vLgoJKiBhb3V0eC5oIChzd2FwX3N0ZF9yZWxvY19vdXQsIHN3YXBfZXh0X3JlbG9jX291dCk6IHVzZSB0aGUgb3V0cHV0CglzZWN0aW9uIG9mIGEgc3ltYm9sIHJhdGhlciB0aGFuIHRoZSBzZWN0aW9uIG9mIGEgcmVmZmVkIHN5bWJvbCB0bwoJZGV0ZXJtaW5lIHRoZSByX2luZGV4IG9mIGFuIGVtbWl0dGVkIHJlbG9jLgoKVGh1IEZlYiAyMCAxODoxMDozNCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIFBPUlRJTkc6IE5ldyAocHJlbGltaW5hcnkpIHBvcnRpbmcgZ3VpZGUuCgpXZWQgRmViIDE5IDIxOjM5OjM3IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYm91dC5jIChjYWxsal9jYWxsYmFjayksIGNvZmYtYTI5ay5jIChhMjlrX3JlbG9jKSwgY29mZi1tODhrLmMKCShob3d0b19odnJ0MTYpOiAgbGludC4KCk1vbiBGZWIgMTcgMTI6MDI6MTcgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBocDMwMGJzZC5jIChuZXcpLCBjb25maWcvbXQtaHAzMDBic2Q6ICBNYWtlIGhwMzAwYnNkCglhIGZ1bGwgY29uZmlndXJhdGlvbiAod2l0aCBwb3NzaWJsZSBjcm9zcy1kZXZlbG9wbWVudCksCglpbnN0ZWFkIG9mIHVzaW5nIGhvc3QtYW91dC5jLgoKU3VuIEZlYiAxNiAxMzowMTo0OSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXQtdGFyZ2V0LmggKE1ZKHdyaXRlX29iamVjdF9jb250ZW50cyk6CglTZXQgb2JqX3JlbG9jX2VudHJ5X3NpemUgKGFiZmQpLgoJKiBnZW4tYW91dC5jOiAgQ2hhbmdlIHRvIGVtaXQgYSAuYyBmaWxlcywgbm90IGEgLmggZmlsZS4KClRodSBGZWIgMTMgMjA6MTE6NDcgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBlbGYuYyAoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6ICBSZW1vdmUgb2Jzb2xldGUgdXNlIG9mCglCU0ZfQUJTT0xVVEUgYW5kIHJlcGxhY2Ugd2l0aCBiZmRfYWJzX3NlY3Rpb24gcmVmZXJlbmNlLgoKVGh1IEZlYiAxMyAxNzoyMjo0NCAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGdldF9ub3JtYWxpemVkX3N5bXRhYik6IGZpeGVkIGJ1ZyB3aGVyZSBzeW1ib2xzCgl3aXRoIG1vcmUgdGhhbiBvbmUgYXV4ZW50IGNhbiBjYXVzZSBuYXN0eSBjb3JlIGR1bXBzLgoKCSogY29mZmNvZGUuaCwgbGliY29mZi5jOiBhZGRlZCBuZXcgZmllbGRlZCB0byBjb2ZmX3N5bWJvbF9zdHJ1Y3QKCSJkb25lX2xpbmVubyIgc28gdGhhdCBhIHN5bWJvbCB3aGljaCBhcHBlYXJzIHR3aWNlIGluIHRoZSBzeW1ib2wKCXRhYmxlIG9ubHkgZ2V0cyBpdCdzIGxpbmVudW1iZXJzIHJlbG9jYXRlZCBvbmNlLiBNb2RpZmVkCgkoY29mZl93cml0ZV9uYXRpdmVfc3ltYm9sKSBhbmQgKGNvZmZfbWFrZV9lbXB0eV9zeW1ib2wpIHRvIG1ha2UKCXVzZSBvZiBpdC4KClR1ZSBGZWIgIDQgMTU6Mzk6NTUgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oOiAodHJhbnNsYXRlX2Zyb21fbmF0aXZlX3N5bV9mbGFncyk6IGZpeCBjb25zdHJ1Y3RvcgoJc3R1ZmYgdG8gdXNlIHRoZSBOZXcgT3JkZXIuCgpGcmkgSmFuIDMxIDAxOjM0OjQ1IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBpZWVlLmM6ICBDaGFuZ2UgdHlwZSBvZiBlbnZpW10gdG8gdW5zaWduZWQgY2hhci4KCgkqIGNvbmZpZ3VyZS5pbjogIGZpeCB2YXggdWx0cml4IGNvbmZpZ3VyYXRpb24uCgoJKiBlbGYuYyAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogIERlYWwgd2l0aCBudWxsIHJldHVybiBmcm9tCgliZmRfbWFrZV9zZWN0aW9uKCkuICAoZWxmX29iamVjdF9wKTogIFNlbGVjdCBlbmRpYW5lc3MgcHJvcGVybHkuCgpGcmkgSmFuIDMxIDAxOjE5OjU1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogaG9zdHMvaC10YWhvZS5oLCBoLXZheGJzZC5oOiAgRml4IHN0YWNrIGluIGNvcmUgZmlsZXMuCgpUaHUgSmFuIDMwIDIzOjUxOjA3IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBob3N0LWFvdXQuYyBkb2Vzbid0IGRlcGVuZCBvbiBhb3V0LXBhcmFtcy5oLgoJKiBhb3V0LXRhcmdldC5oOiAgVXNlIFRBUkdFVF9CSUdfRU5ESUFOX1AgdG8gc2V0IHVwIHZlY3Rvci4KCSogaG9zdC1hb3V0LmM6ICBEb24ndCB1c2UgYW91dC1wYXJhbXMuaDsgY29uZmlndXJlIHRoZXNlIHN5c3RlbXMKCWluIHRoZWlyIHhtIGZpbGVzLCBub3QgaW4gYSByYW5kb21seSBnZW5lcmF0ZWQgZmlsZS4KCSogaG9zdHMvaC1ocDMwMGJzZC5oLCBoLXRhaG9lLmgsIGgtdmF4YnNkLmgsIGgtdmF4dWx0Lmg6CglTcGVjaWZ5IGJ5dGUgb3JkZXIuCgkqIGhvc3RzL2gtdmF4YnNkLmg6ICBEZWZpbmUgdGhlIGZvcm0gb2YgZXhlYyBhbmQgY29yZSBmaWxlcy4KClRodSBKYW4gMzAgMTM6MDI6NDEgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcvbXQtdGFob2UsIGNvbmZpZy9tdC12YXg6ICBDaGFuZ2UgREVGQVVMVF9WRUNUT1IgdG8KCWhvc3RfYW91dF92ZWMgaGVyZSBhcyB3ZWxsLgoKVGh1IEphbiAzMCAxMTo0MTo0NSAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaG9zdC1hb3V0LmM6ICBDaGFuZ2UgVEFSR0VUTkFNRSB0byAiYS5vdXQiIHRvIGJlIGNvbXBhdGlibGUgd2l0aAoJZ2RiLiAgY29uZmlnL210LWhwMzAwYnNkOiAgQ2hhbmdlIERFRkFVTFRfVkVDVE9SIHRvIGhvc3RfYW91dF92ZWMKCXRvIHByZXZlbnQgdW5kZWZpbmVkIHN5bWJvbC4KClRodSBKYW4gMzAgMDc6MjY6NTMgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJVmFyaW91cyBsaW50cyBmb3VuZCBvbiBQZXJzU29ueQoJKiBhb3V0eC5oOiBjYXN0IGFuIGVudW0KCSogY29mZi1hMjlrLmM6IG1hbnkgaW50cyBpbiByZWxvYyBzdHJ1Y3R1cmUgdHVybmVkIHRvIGVudW0KCSogY29mZmNvZGUuaDogbW9yZSBlbnVtcwoJKiBjcHUtaDgzMDAuYzogbW9yZSBlbnVtcwoJKiBvcG5jbHMuYzogbW9yZSBlbnVtcwoKVGh1IEphbiAzMCAwMToxOTo1NiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogIE1ha2UgVGFob2UgY29uZmlndXJhdGlvbiB3b3JrIGFnYWluLgoJKiBiZmQtaW4uaDogIFJlbW92ZSB0cmFpbGluZyBjb21tYSBmcm9tIGVudW0gZGVjbGFyYXRpb24uCgkqIGllZWUuYzogIENhbid0IHB1dCBieXRlIHZhbHVlcyA+MHg3RiBpbnRvIGEgc2lnbmVkIGNoYXIuCgpUdWUgSmFuIDI4IDIxOjEwOjUxIDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBBZGQgZGVwZW5kZW5jaWVzIGZvciB2YXJpb3VzIGNvZmYtKi5vIGZpbGVzLgoKCSogZWxmLmM6ICBSZW1vdmUgZXh0cmFuZW91cyBwYXJlbiBmcm9tIGNvcmVfcHJwc2luZm8gYW5kCgljb3JlX3BycHN0YXR1cyBtYWNyb3MsIHJlbmFtZSBjb3JlX3BycHN0YXR1cyB0byBjb3JlX3Byc3RhdHVzLgoJUmVwbGFjZSByZWZlcmVuY2VzIHRvIG9sZCBzZWN0aW9uICJzaXplIiBtZW1iZXIgd2l0aCBuZXcKCSJfcmF3X3NpemUiIG1lbWJlci4gIEltcGxlbWVudCBlbGZfbWFrZV9lbXB0eV9zeW1ib2wsIHdoaWNoCglpcyBub3cgdXNlZC4KClR1ZSBKYW4gMjggMTQ6NTE6NDAgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIHRyYWQtY29yZS5jLCBiZmQuYywgLi4vaW5jbHVkZS9iZmQuaDogIFZhcmlvdXMgZml4ZXMgZm9yIFBNQVgKCWNvcmUgcmVhZGluZy4KClR1ZSBKYW4gMjggMTA6NDY6MzIgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChiZmRfY29mZl9yZWxheF9zZWN0aW9uKTogbm93IHN0YXRpYy4KCShiZmRfY29mZl9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMpOiB2YXJpb3VzIHR5cGUgbGludHMuCgpNb24gSmFuIDI3IDE5OjQ0OjA4IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCU5ldyBlbnRyeSBwb2ludCBpbiB0aGUgdHJhbnNmZXIgdmVjdG9yIC0gYmZkX3JlbGF4X3NlY3Rpb24uCgoJKiBhb3V0LXRhcmdldC5oOiBhZGQgdG8gdmVjdG9yLCBjYWxsIGdlbmVyaWNfcmVsYXgKCSogYmZkLWluLmg6IGFkZCB0byB2ZWN0b3IKCSogYmZkLmM6IGFkZCAjZGVmaW5lIGZvciB2ZWN0b3IKCSogYm91dC5jOiBhZGQgdG8gdmVjdG9yLCBjYWxsIGdlbmVyaWNfcmVsYXgKCSogY29mZmNvZGUuaDogYWRkIHRvIHZlY3RvciwgYWxzbyBub3cgaGFzIGNvZmYgc3BlY2lmaWMgcmVsYXggY29kZQoJZm9yIHRoZSByZWxheGFibGUgSDgvMzAwIHJlbG9jcy4gQWxzbyBjbGVhbiB1cCBhYnMgc2VjdGlvbiBjcnVmdC4KCSogZWxmLmM6IGNhbGwgZ2VuZXJpY19yZWxheAoJKiBpZWVlLmM6IGNhbGwgbmV3IHZlY3RvciwgY2xlYW4gdXAgc29tZSBidWdzIGR1ZSB0byB0aGUgY3JlYXRpb24KCW9mIGJmZF9hYnNfc2VjdGlvbgoJKiBsaWJiZmQuaDogYWRkIGJmZF9nZW5lcmljX3JlbGF4X3NlY3Rpb24gRVhGVU4KCSogb2FzeXMuYzogY2FsbCBnZW5lcmljX3JlbGF4CgkqIHJlbG9jLmM6IGltcGxlbWVudCBnZW5lcmljX3JlbGF4CgkqIHNlY2xldC5jOiBtb3ZlZCBtdWNoIG9mIHRoaXMgaW50byBjb2ZmY29kZS5oCgkqIHNyZWMuYzogY2FsbCBnZW5lcmljX3JlbGF4CgkqIHRhcmdldHMuYzogZGVmaW5lIG5ldyB0cmFuc2ZlciB2ZWN0b3IKCkZyaSBKYW4gMjQgMTQ6NDA6MTcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBldmVyeXRoaW5nOiBub3cgbW9kaWZpZWQgdG8gdXNlIHNtYWxsZXIgcmVsb2MgdHlwZS4gU2VsZiBob3N0cwoJb24gc3VuMyAmIHN1bjQuCgpTYXQgSmFuIDE4IDE3OjAwOjE2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlnL21oLXN0cmF0dXMsIGNvbmZpZy9tdC1pODYwLWVsZiwgaG9zdHMvaC1zdHJhdHVzOgoJTmV3IGZpbGVzIGZvciBzdHJhdHVzLgoKCSogY29uZmlndXJlLmluOiAgQWRkIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGZvciBzdHJhdHVzLgoKV2VkIEphbiAxNSAxMDowMjo0MyAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKE5BTUUoYW91dCxmaW5kX25lYXJlc3RfbGluZSkpOiBEZWNsYXJlIHZhcmlvdXMgZmlsZW5hbWUKCXZhcmlhYmxlcyBhcyBDT05TVCBzaW5jZSB0aGV5IGFyZSBzZXQgdG8gcG9pbnQgdG8gYSBjb25zdCBjaGFyCglzdHJpbmcuICBGaXhlcyBjb21waWxlciBjb21wbGFpbnRzLgoKRnJpIEphbiAxMCAxNzo0NDo1MyAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2gtYW1peC5oIGhvc3RzL2gtaTM4NnY0Lmg6ICBDaGFuZ2UgYWJvcnQoKSB0byBhIGZ1bmN0aW9uCglyZXR1cm5pbmcgdm9pZC4KCkZyaSBKYW4gMTAgMTQ6MzM6MzIgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChOQU1FKGFvdXQsZmluZF9uZWFyZXN0X2xpbmUpKTogIFJlY29nbml6ZSBOX1NPTAoJc3ltYm9scywgc28gdGhhdCB3ZSBjYW4gZW1pdCB0aGUgY29ycmVjdCBmaWxlIG5hbWUgZXZlbgoJaWYgaXQncyBhbiBpbmNsdWRlIGZpbGUuCgpUaHUgSmFuICAyIDE2OjQzOjM0IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29mZi1pOTYwLmM6ICBBZGQgQ09GRl9TV0FQX1RBQkxFIHRvIGxpdHRsZV92ZWMgYXMgd2VsbCBhcyBiaWdfdmVjLgoJKFJlcG9ydGVkIGJ5IGpvaG5AbGFidGFtLmxhYnRhbS5vei5hdSAoSm9obiBDYXJleSkpLgoKV2VkIEphbiAgMSAwNDoyMzowNiAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGVsZi5jOiAgQ2hhbmdlIGFsbCAnI2lmIEhBVkVfUFJPQ0ZTJyB0byAnI2lmZGVmIEhBVkVfUFJPQ0ZTJy4KCgkqIGNvbmZpZy9taC1hbWl4LCBjb25maWcvbWgtaTM4NnY0OiAgUmVtb3ZlIEhERUZJTkVTIHRoYXQgd2FzCgliZWluZyB1c2VkIHRvIC1ESEFWRV9QUk9DRlMuCgoJKiBob3N0cy9oLWFtaXgsIGhvc3RzL2gtaTM4NnY0OiAgQWRkICcjZGVmaW5lIEhBVkVfUFJPQ0ZTJy4gIE1vdmUKCScjaW5jbHVkZSAiZm9wZW4tc2FtZS5oIicgdG8gZW5kIG9mIGZpbGUgdG8gbWF0Y2ggb3RoZXIgaC0qIGZpbGVzLgoKRnJpIERlYyAyMCAxMjowNjoxNyAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogIENoYW5nZSBzdnI0IHJlZmVyZW5jZXMgdG8gc3lzdjQuICBBZGQgY2FzZQoJInVua25vd24iIGZvciB0YXJnZXQgdmVuZG9yIGFuZCBpbmZlciBzb21lIHRhcmdldHMgYmFzZWQKCW9uIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW5nIHN5c3RlbS4KCldlZCBEZWMgMTggMTc6MTc6NTkgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oLCBsaWJhb3V0Lmg6ICBBTlNJZnkgZW51bXMuCgpXZWQgRGVjIDE4IDE2OjEyOjI1IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jIChub3JtYWxpemUpOiBjcmVhdGVkIHZlcnNpb24gZm9yIFZNUyB3aGljaCByZW1vdmVzIHRoZQoJVk1TIGRpcmVjdG9yeSBjcmFwIGZyb20gdGhlIGZyb250IGFuZCBlbmQgb2YgYSBmaWxlbmFtZSwgZWcgdHVybgoJWy0uZm9vXWJhci5vYmo7MTIzIGludG8gYmFyLm9iagoJKGJmZF9jb25zdHJ1Y3RfZXh0ZW5kZWRfbmFtZV90YWJsZSk6IG5vdyB3cml0ZXMgaW5kZXggaW50byBhbgoJZXh0ZW5kZWQgbmFtZSB0YWJsZSBpbiBkZWNpbWFsIC0gdGhlIHNhbWUgYmFzZSB1c2VkIHRvIHJlYWQgYW4KCWV4dGVuZGVkIG5hbWUgdGFibGUuCgpXZWQgRGVjIDE4IDE0OjQwOjM5IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogYW91dC1lbmNhcC5jOiAgRml4IHRvIHVzZSBhb3V0LXRhcmdldC5oLgoJKiBhb3V0ZjEuaDogIFVzZSBzdGFuZGFyZCBNWV9vYmplY3RfcCBhbmQgTVlfY2FsbGJhY2sKCWluIGFvdXQtdGFyZ2V0LmguICBSZW1vdmUgdGFyZ2V0LXNwZWNpZmljIHZlcnNpb25zLgoJKiBob3N0LWFvdXQuYzogIFJlLXdyaXRlIHRvIHVzZSBhb3V0LXRhcmdldC5oLgoJKiBnZW4tYW91dC5jOiAgTmV3IGZpbGVzIHVzZSB3aXRoIGhvc3QtYW91dC5jIHRvIGdlbmVyYXRlCglob3N0LXNwZWNpZmljIGEub3V0LXJlbGF0ZWQgcGFyYW1ldGVycy4KCSogTWFrZWZpbGUuaW46ICBob3N0LWFvdXQubyBkZXBlbmRzIG9uIGFvdXQtcGFyYW1zLmgsIHdoaWNoIGlzCglnZW5lcmF0ZWQgYnkgZ2VuLWFvdXQuCgkqIGFvdXQtdGFyZ2V0Lmg6ICBNYWtlIGEgbGl0dGxlIG1vcmUgZmxleGlibGUuCgkqIGxpYmFvdXQuaCwgYW91dC10YXJnZXQuaDogIFJlbW92ZWQgV09SS19PVVRfRklMRV9QT1NUSU9OUwoJbWFjcm8uICBJbnN0ZWFkLCBpbmxpbmUgaXQgaW4gYW91dC10YXJnZXQuaC4KCSogbmV3c29zMy5jOiAgRGVmaW5lIE5fU0hBUkVEX0xJQih4KSBhcyAwIHRvIGF2b2lkCglhIGdjYyAtV2FsbCB3YXJuaW5nLgoJKiBhcmNoaXZlLmM6ICBBZGQgbWlzc2luZyBjb21tYXMgaW4gREVGVU4gbWFjcm8gKDIgcGxhY2VzKS4KCSogZWxmLmMsIGNvZmZjb2RlLmgsIGFvdXRmMS5oOiAgVXNlIEFOU0kgZnVuY3Rpb25zIGluc3RlYWQgb2YKCUJlcmtlbGV5IG9uZXMsIG5vdyB0aGF0IGxpYmliZXJ0eSBoYXMgdGhlbToKCWJjb3B5LT5tZW1jcHksIGJ6ZXJvLT5tZW1zZXQsIGJjbXAtPm1lbWNtcC4KCSogYW91dHguaDogIFZhcmlvdXMgdG91Y2gtdXBzOiAgUmUtZm9ybWF0dGluZywgZml4IGEgY2FzdCwKCXJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgpUdWUgRGVjIDE3IDE5OjQ4OjU5IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLmMgKGVsZl9jb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3ApOiAgRW5jbG9zZSBjb3JlbmFtZQoJYW5kIGV4ZWNuYW1lIGluc2lkZSBIQVZFX1BST0NGUyBpZmRlZiBzaW5jZSB0aGV5IGFyZSB1bnVzZWQKCXdoZW4gaXQgaXMgbm90IGRlZmluZWQuCgpNb24gRGVjIDE2IDEyOjAwOjEwIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLmM6ICBGbGFnIGFsbCBzZWN0aW9ucyBhcyBlaXRoZXIgY29kZSBvciBkYXRhLiAgV2UgY2FuJ3QKCWJlIHN1cmUgd2hhdCB0aGV5IGFyZSBhbnl3YXksIHNpbmNlIEVMRiBkb2Vzbid0IGZpdCB0aGUKCXRyYWRpdGlvbmFsIG1vZGVsIG9mIHRleHQrZGF0YStic3MgdmVyeSB3ZWxsLiAgQWRkIG5ldyBsb2NhbAoJZnVuY3Rpb24gZWxmX3JlYWQoKSB0byBzaW1wbGlmeSBjb2RlLiAgUmVjb3JkIGVudHJ5IHBvaW50IGluCgl0aGUgYmZkIHN0cnVjdHVyZS4KClRodSBEZWMgMTIgMjE6MDE6MjIgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBob3N0cy9oLSouaDogIENvbmZpZ3VyZSBmb3BlbiB1c2luZyAuLi9pbmNsdWRlL2ZvcGVuLSouaAoJcmF0aGVyIHRoYW4gTiBjb3BpZXMgb2YgdGhlIHNhbWUgbGluZXMuCgpXZWQgRGVjIDExIDE2OjM5OjQ1IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogY3B1LWg4MzAwLmM6IGRpc2Fzc2VtYmxlIGJyYW5jaCBkaXNwbGFjZW1lbnRzIGNvcnJlY3RseQoJKiBjb2ZmLWg4MzAwLmM6IHB1dCByZWxvYyBvZmZzZXRzIG91dCBpbiAzMmJpdHMKCgkqIG1ha2VmaWxlLmRvcywgY29uZmlnZGouYmF0OiBOZXcgZmlsZXMgZnJvbSBESgoJKiBjYWNoZS5jOiBmb3BlbiB3aXRoIG5ldyBtYWNyb3MgaXMgbmVlZGVkIGZvciBET1MuCgkqIGllZWUuYzogZW52aXJvbiByZW5hbWVkIHRvIGVudmkgdG8gc3RvcCBhbiBpbmNsdWRlIGZpbGUKCWNvbmZsaWN0LgoJKiBvcG5jbHMuYywgY29mZi1yczYwMDAuYzogbW9yZSBmb3BlbnMgd2l0aCBtYWNyb3MuCgpUdWUgRGVjIDEwIDA0OjA3OjI0IDE5OTEgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaCBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBpbmZvZGlyIGJlbG9uZ3MgaW4gZGF0YWRpci4KClNhdCBEZWMgIDcgMTY6Mzk6MjMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJICogTWFrZWZpbGUuaW46IGZpeCB3aGVyZSBkb2NkaXIgbGl2ZXMKCgkgKiBhb3V0eC5oLCBhcmNoaXZlLmMsIGFyY2h1cmVzLmMsIGJmZC5jLCBjYWNoZS5jLCBjb2ZmLW04OGsuYywKCSBjb2ZmY29kZS5oLCBjb3JlLmMsIGN0b3IuYywgZWxmLmMsIGZvcm1hdC5jLCBpZWVlLmMsIGluaXQuYywKCSBsaWJiZmQuYywgbGliYmZkLmgsIGxpYmNvZmYuaCwgb3BuY2xzLmMsIHJlbG9jLmMsIHNlY3Rpb24uYywKCSBzcmVjLmMsIHN5bXMuYywgdGFyZ2V0cy5jIDogYWxsIG5ldyBkb2N1bWVudGF0aW9uIGFuZCBsaW50CgkgcmVtb3ZhbC4KCgpTYXQgRGVjICA3IDA3OjIyOjA5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCwgc3JlYy5jOiAgTGludC4KCkZyaSBEZWMgIDYgMjI6NTg6NDggMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGluc3RhbGwgdXNpbmcgSU5TVEFMTF9EQVRBLCBhZGRlZCBzdGFuZGFyZHMudGV4dAoJICBzdXBwb3J0LgoKCSogY29uZmlndXJlLmluOiBtYXJrIGRpcmVjdG9yeSBhcyB0YXJnZXQgZGVwZW5kZW50LiAgY29uZmlndXJlCgkgIG5vd3Mgd29ya3MgaW4gb2JqZGlyIGFsd2F5cyBzbyBtYWtlIGZpbGUgZXhpc3RlbmNlIGNoZWNrcwoJICBhZ2FpbnN0ICR7c3JjZGlyfS4KClRodSBEZWMgIDUgMjI6NDY6MTkgMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGlkZXN0ZGlyIGFuZCBkZGVzdGRpciBnbyBhd2F5LiAgQWRkZWQgY29weXJpZ2h0cwoJICBhbmQgc2hpZnQgZ3BsIHRvIHYyLiAgQWRkZWQgQ2hhbmdlTG9nIGlmIGl0IGRpZG4ndCBleGlzdC4gZG9jZGlyCgkgIGFuZCBtYW5kaXIgbm93IGtleWVkIG9mZiBkYXRhZGlyIGJ5IGRlZmF1bHQuCgpXZWQgRGVjICA0IDEwOjE0OjE3IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogYW91dGYxLmggKHN1bm9zXzxzaXplPl9vYmplY3RfcCwgc3Vub3M0X2NhbGxiYWNrKTogbW92ZWQgdGhlCgljb21wdXRhdGlvbiBvZiBhcmNoIGFuZCBtYWNoaW5lIHR5cGUgc28gaXQncyB3b3JrZWQgb3V0IGJlZm9yZQoJc29tZV9hb3V0X29iamVjdF9wIGlzIGNhbGxlZC4KCSogYW91dHguaDogKHNvbWVfYW91dF9vYmplY3RfcCk6IGRvbid0IHNldCBhcmNoIGFuZCBtYWNoIHRvCgl1bmtub3duLgoJKiBhcmNodXJlcy5jOiBhZGQgZXh0cmEgZmllbGQgJ3NlY3Rpb25fYWxpZ25fcG93ZXInIHRvIGhvbGQKCWRlZmF1bHQgc2VjdGlvbiBhbGlnbm1lbnQgaW4gb2JqZWN0IGZpbGVzLgoJKiBjcHUtYTI5ay5jLCBjcHUtaDgzMDAuYywgY3B1LWkzODYuYywgY3B1LWk5NjAuYywgY3B1LW02OGsuYywKCWNwdS1tODhrLmMsIGNwdS1taXBzLmMsIGNwdS1yczYwMDAuYywgY3B1LXNwYXJjLmMsIGNwdS12YXguYzoKCWluaXRpYWxpemUgdGhlIG5ldyBmaWVsZC4KCSogYm91dC5jIChiX291dF9jYWxsYmFjayk6IHJlcGxhY2UgdGhlIHRleHQgc2l6ZSwgc2luY2UgYW91dAoJZnJpZXMgdGhlbS4KCSogYW91dHguaDogRG9jdW1lbnRhdGlvbiBpbiB0aGUgbmV3IHN0eWxlCgpXZWQgRGVjICA0IDAyOjAwOjMwIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLmMgKGJmZF9nZXRfbXRpbWUpOiAgRG9uJ3QgY2FjaGUgbXRpbWUgYW55IG1vcmU7IG9ubHkKCXVzZSB0aGUgc2F2ZWQgdmFsdWUgaWYgbXRpbWVfc2V0IGlzIGFscmVhZHkgc2V0IChpbnRlbmRlZAoJZm9yIGFyY2hpdmUgZmlsZXMsIHRob3VnaCBhcHBhcmVudGx5IG5vdCB1c2VkIHlldCkuCgpUdWUgRGVjICAzIDIyOjU0OjUwIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogdGFyZ2V0cy5jOiAgUmV2aXNlIGNvbW1lbnRzIGFib3V0IGhvdyB0byBjb25maWd1cmUgdGhlIHRhcmdldAoJdmVjdG9yLCB0byBtYXRjaCByZWFsaXR5LiAgUmVtb3ZlIG1lbnRpb24gb2Ygb2Jzb2xldGUgbWV0aG9kcy4KCVJlbW92ZSBsb25nIGxpc3RzIG9mIGNhcGl0YWxpemVkIG1hY3JvcyB0aGF0IHR1cm4gaW50byB0aGUgc2FtZQoJdGhpbmcgaW4gbG93ZXJjYXNlLiAgTm9ybWFsIHZlY3RvciBzaW1wbHkgbGlzdHMgYWxsIGtub3duCglsb3dlcmNhc2UgeHZlYyBuYW1lczsgYWxsIG90aGVyIGNhc2VzIGFyZSBoYW5kbGVkIGJ5IFNFTEVDVF9WRUNTLgoKCSogY29uZmlnL210LWkzODYtY29mZjogIFNldCBERUZBVUxUX1ZFQ1RPUiB0byByZWFsIGlkZW50aWZpZXIsCglub3QgbWFjcm8gbmFtZS4KCgkqIGNvbmZpZy9tdC1pOTYwLXtjb2ZmLGJvdXR9OiAgVXNlIFNFTEVDVF9WRUNTIHRvIG1ha2UgYSBzaG9ydAoJbGlzdCBvZiBzdXBwb3J0ZWQgdGFyZ2V0cy4KClR1ZSBEZWMgIDMgMTQ6MDY6MTUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMgKGJzZF93cml0ZV9hcm1hcCk6ICBUaGUgcGFkIGJ5dGUgc29tZXRpbWVzIGFkZGVkIHRvCgl0aGUgc3RyaW5nIHRhYmxlIGluIGEgX18uU1lNREVGIG1lbWJlciBpcyBub3cKCWNvdW50ZWQgYXMgcGFydCBvZiB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIHRhYmxlLgoJVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9sZCByYW5saWIsIGFzIHdlbGwgYXMgU3VuJ3MuCgpUdWUgRGVjICAzIDEwOjUzOjMwIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogc3JlYy5jOiBSZXdyb3RlIHRvIGZpeCBtYW55IGJ1Z3M7IG5vdyBnZXRzIHRoZSByZWNvcmQgdHlwZQoJcmlnaHQsIGRvZXNuJ3QgY2hva2Ugb24gaW5wdXQsIHNldHMgdGhlIHN0YXJ0IGFkZHJlc3MgaW4gYW4gUzkgYW5kCglmaWxscyBpbiB0aGUgZmlsZW5hbWUgb24gYW4gUzAuCgpTYXQgTm92IDMwIDIxOjE5OjE1IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogY3B1LWg4MzAwLmM6IEFkZCBzdXBwb3J0IGZvciBNRU1JTkQgYWRkcmVzc2luZyBtb2RlCgoJKiBjb2ZmLWEyOWsuYzogZGVmaW5lZCBSRUxPQ19QUk9DRVNTSU5HIHRvIHRha2UgdGhlICNpZmRlZiBvdXQgb2YKCWNvZmZjb2RlLmgKCSogY29mZmNvZGUuaDogdXNlIHRoZSBuZXcgbWFjcm8gaWYgYXZhaWxhYmxlCgoJKiBlbGYuYyAoZWxmX2NvcmVmaWxlX25vdGUpOiBjYXN0IG1hbGxvYyB0byBhdm9pZCB3YXJuaW5nLgoJKiBNYWtlZmlsZS5pbjogRml4ZWQgZGVwZW5kZW5jaWVzIGR1ZSB0byBmaWxlIHJlbmFtZQoKCSogYW91dC1lbmNhcC5jLCBhb3V0ZjEuaCwgYW91dHguaCwgYXJjaGl2ZS5jLCBib3V0LmMsIGNvZmYtYTI5ay5jLAoJY29mZi1oODMwMC5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYywKCWNvZmYtbWlwcy5jLCBjb2ZmLXJzNjAwMC5jLCBjcHUtaDMwMC5jLCBlbGYuYywgaTM4NmFvdXQuYywKCW5ld29zMy5jLCBzdGFiLXN5bXMuYywgc3ltcy5jOiBBbGwgdGhlc2UgZmlsZXMgaGF2ZSBoYWQgdGhlaXIKCSNpbmNsdWRlcyBhbHRlcmVkIHRvIHBvaW50IHRvIHRoZSBuZXcgcGxhY2VzLgoKRnJpIE5vdiAyOSAyMDowNDo0OSAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC1pMzg2djQsIGNvbmZpZy9taC1pMzg2LWVsZiwgaG9zdHMvaC1pMzg2djQuaDogIE5ldyBmaWxlcy4KCgkqIGNvbmZpZ3VyZS5pbjogIEFkZCB2ZW5kb3IgIm5jciIgYXMgc3VwcG9ydGVkIHBlci10YXJnZXQgdmVuZG9yLgoJQWRkIHN2cjQgY2FzZSBmb3IgaTM4NiBwZXItaG9zdCBjYXNlLgoKCSogZWxmLmMgKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogIEFkZCBtaXNzaW5nICJicmVhayIgdG8KCUVMRkRBVEEyTFNCIGNhc2VzLgoKRnJpIE5vdiAyOSAxMjoxNjo1MSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN5bXMuYyAoYmZkX2RlY29kZV9zeW1jbGFzcyk6ICBSZXR1cm4gJ0EnCglmb3Igc3ltYm9scyB0aGF0IGFyZSBib3RoIGFic29sdXRlIGFuZCBnbG9iYWwuCgkqIGFyY2hpdmUuYyAoYmZkX3NwZWNpYWxfdW5kb2N1bWVudGVkX2dsdWUpOiAgUmV0dXJuIE5VTEwKCWlmIGJmZF9hcl9oZHJfZnJvbV9maWxlc3lzdGVtIHJldHVybnMgTlVMTC4KClR1ZSBOb3YgMjYgMDk6MTA6NTUgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBjb2ZmLWg4MzAwCgkqIGNvbmZpZ3VyZS5pbjogbm93IGg4IGlzIGEgY29mZiB0YXJnZXQKCSogY3B1LWg4MzAwLmM6IGZpeCB2YXJpb3VzIGRpc2Fzc2VtYmx5IHByb2JsZW1zCgkqIGxpYmNvZmYuaDogdG9vayBvdXQgc29tZSBjb2RlIHdoaWNoIGhhcyBiZWVuICMwZWQgZm9yIGEgbG9uZwoJdGltZS4KCSogdGFyZ2V0cy5jOiBhZGRlZCBoOCBjb2ZmCgkqIGNvZmYtYTI5ay5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYwoJYWRkZWQgbmV3IG1hY3JvIFJUWVBFMkhPV1RPIHRvIHRha2UgYSBsb2FkIG9mICNpZmRlZnMgb3V0IG9mCgljb2ZmY29kZS5oCgkqIGNvZmZjb2RlLmg6IFN0YXJ0ZWQgdG8gY2hhbmdlIHRoZSB3YXkgbWFjaGluZSBkZXBlbmRlbmNpZXMgYXJlCgloYW5kbGVkLCBmcm9tIHRoZSBuZXN0IG9mICNpZmRlZnMgdG8gbWFjcm9zIGRlZmluZWQgaW4gdGhlCglpbmNsdWRpbmcgY29mZi08Zm9vPi5jCgpGcmkgTm92IDIyIDA4OjExOjQyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW91dHguaCAoc29tZV9hb3V0X29iamVjdF9wKTogIFNldCB0aGUgYGV4ZWN1dGFibGUnIGJpdAoJaWYgdGhlIGVudHJ5IHBvaW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgdGV4dCBzZWdtZW50LCBldmVuIGlmIHRoZQoJdGV4dCBzZWdtZW50IGlzIGF0IGxvY2F0aW9uIDAuCgoJKiBjb2ZmLW1pcHMuYywgY29mZmNvZGUuaDogIFBldGVyIFNjaGF1ZXIncyBwYXRjaCB0byBrbHVkZ2UgaW4KCW5vbnN0YW5kYXJkIE1JUFMgc2VjdGlvbnMgKC5yZGF0YSwgLnNkYXRhLCBldGMpLgoKCSogYW91dHguaCwgYmZkLmMsIGNvZmZjb2RlLmgsIGllZWUuYywgb2FzeXMuYywgdGFyZ2V0cy5jOiBDT05TVCBsaW50LgoJKiBsaWJiZmQtaW4uaCwgbGliYmZkLmgsIGFvdXR4LmgsIGNvZmZjb2RlLmgsIGVsZi5jLCBsaWJhb3V0Lmg6CglSZW5hbWUgQUxJR04gdG8gQkZEX0FMSUdOIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggQlNEIDxzeXMvcGFyYW0uaD4uCgkqIGxpYmJmZC5jOiAgTGludC4KCSogaG9zdC1hb3V0LmMsIHRyYWQtY29yZS5jOiAgRml4IHdyaXRlX2FybWFwIHByb3RvdHlwZXMuICBMaW50LgoKVGh1IE5vdiAyMSAxOTo1Njo0MCAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN0YWItc3ltcy5jLCBzeW1zLmM6ICBNb3ZlZCBiZmRfc3RhYl9uYW1lKCkgYW5kIGJmZF9zdGFiX25hbWVzW10KCWZyb20gc3ltcy5jIHRvIG5ldyBmaWxlIHN0YWItc3ltcy5jLiAgQWxzbywgc2luY2UgR05VIGV4dGVuZGVkCgl0eXBlIGNvZGVzIHN1Y2ggYXMgTl9TRVRUIGFyZSBubyBsb25nZXIgaW4gLi4vaW5jbHVkZS9zdGFiLmRlZiwKCWluY2x1ZGUgdGhlbSBtYW51YWxseS4KCSogc3RhYi1zeW1zLmMsIGFvdXR4Lmg6IFJlbmFtZWQgYmZkX3N0YWJfbmFtZSgpIGFuZAoJYmZkX3N0YWJfbmFtZXNbXSB0byBhb3V0X3N0YWJfbmFtZSgpIGFuZCBhb3V0X3N0YWJfbmFtZXNbXS4KCSogbGliYW91dC5oOiBBZGRlZCBwcm90b3R5cGUgZm9yIGFvdXRfc3RhYl9uYW1lKCkuCgkqIE1ha2VmaWxlLmluOiAgVXBkYXRlIE1ha2VmaWxlIGZvciBuZXcgc3RhYi1zeW1zLltjb10uCgpUaHUgTm92IDIxIDExOjUwOjQ5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogbGliYW91dC5oIChXT1JLX09VVF9GSUxFX1BPU0lUSU9OUyk6ICBPbmUgbW9yZSB0cnkgYXQgdGhpcwoJcmF0aGVyIGNvbXBsaWNhdGVkIHNlZW1pbmcgcHJvYmxlbS4gIEVsaW1pbmF0ZSBMT0dJQ0FMXyB2ZXJzaW9ucywKCWp1c3QgbWFrZSBOX1hYWCB3b3JrIGJ5IGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGZyb20gdGhlIHRleHQgc2VnbWVudC4KCSogYW91dHguaDogIEZpeCBjb21tZW50cyB0byBtYXRjaC4KClR1ZSBOb3YgMTkgMTg6NDk6MDEgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBsaWJhb3V0LmggKFdPUktfT1VUX0ZJTEVfUE9TSVRJT05TKTogIFVzZSBuZXcgTE9HSUNBTF9UWFRBRERSLAoJTE9HSUNBTF9UWFRPRkYsIExPR0lDQUxfVFhUU0laRSBtYWNyb3MgdG8gZmlndXJlIG91dCBudW1iZXJzCglmb3IgdGhlICJsb2dpY2FsIiB0ZXh0IHNlZ21lbnQgKGkuZS4gbmV2ZXIgY29uc2lkZXIgdGhlIGV4ZWMKCWhlYWRlciB0byBiZSBwYXJ0IG9mIHRoZSB0ZXh0IHNlZ21lbnQpLiAgVGhpcyBjaGFuZ2UgaXMKCW5lZWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB2YXJpb3VzIG90aGVyIHBhcnRzIG9mIGJmZCBhbmQgbGQuCgkqIGFvdXR4LmggKE5BTUUoYW91dCxzb2VfYW91dF9vYmplY3RfcCkpOiAgRml4IGNvbW1lbnQsCglhbmQgbW92ZSBjYWxjdWxhdGlvbiBvZiBvYmpfdGV4dHNlYyhhYmZkKS0+c2l6ZSB0byBsaWJhb3V0LmguCgkqIGJmZC1pbi5oOiAgUmVtb3ZlZCBib2d1cyAnOycuCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBNSU5JTUlaRSBmbGFnIHRvIHNlbGVjdCBsZWFuCglvciBibG9hdGVkIHRhcmdldF92ZWN0b3IuCgkqIHRhcmdldHMuYzogIFVzZSBuZXcgTUlOSU1JWkUgbWFjcm8sIGFuZCBhZGQgdHJhZF9jb3JlIGlmIG5lZWRlZC4KCSogbmV3c29zMy5jOiAgRml4ZXMgdG8gLi4vaW5jbHVkZS9hb3V0NjQuaCByZW1vdmUgbmVlZAoJZm9yIHNwZWNpYWwgTl9UWFRPRkYgbWFjcm8sIGJ1dCByZXF1aXJlIE5fSEVBREVSX0lOX1RFWFQuCgpNb24gTm92IDE4IDEyOjAwOjU5IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogYW91dC10YXJnZXQuaCwgYW91dGYxLmgsIG5ld3NvczMuYzogIE1ha2UgYW91dC10YXJnZXQuaAoJaGFuZGxlIGJvdGggbGl0dGxlIGFuZCBiaWctZW5kaWFuIHRhcmdldHMsIHdpdGggbGl0dGxlCgl0aGUgZGVmYXVsdCB1bmxlc3MgVEFSR0VUX0lTX0JJR19FTkRJQU5fUCBpcyBkZWZpbmVkLgoJKiBob3N0LWFvdXQuYzogIEFkZCBGSVhNRSBub3RlLgoKU3VuIE5vdiAxNyAxMzoyOTozOSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHRhcmdldHMuYzogIE1ha2UgdGhlIGRlZmF1bHQgdGFyZ2V0X3ZlY3RvciBjb250YWluCglqdXN0ICZERUZBVUxUX1ZFQ1RPUi4gIFRoaXMgbWFrZXMgZXhlY3V0YWJsZXMgYSBsb3Qgc21hbGxlci4KCU9sZCBiZWhhdmlvciBjYW4gYmUgZ290dGVuIGJ5IGRlZmluaW5nIEFMTF9UQVJHRVRTLgoJKiBhb3V0ZjEuaCwgZGVtbzY0LmMsIGkzODZhb3V0LmMsIG5ld3NvczMuYywgc3Vub3MuYzoKCUZhY3RvcmVkIG91dCBjb21tb24gY29kZSBpbnRvIG5ldyBmaWxlIGFvdXQtdGFyZ2V0LmguCglTYXZlcyBhIGxvdCBvZiBkdXBsaWNhdGUgY29kZSBmb3IgYS5vdXQgdmFyaWFudHMuCgpGcmkgTm92IDE1IDEzOjAwOjQzIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCUdldCAnbWFrZSBoZWFkZXJzJyB0byB3b3JrIHdoZW4gY29uZmlndXJlZCB3aXRoICtzdWJkaXJzLgoJKiBNYWtlZmlsZS5pbjogQWRkICQoc3ViZGlyKSB0byBkb2NkaXIgcGF0aC4KCSogZG9jL01ha2VmaWxlLmluIChwcm90b3MpOiBBZGQgJChzcmNkaXIpIHByZWZpeAoJdG8gbmFtZSBvZiBzZWQgc2NyaXB0cy4KClRodSBOb3YgMTQgMTk6NDk6MTAgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChOQU1FKGFvdXQscHJpbnRfc3ltYm9sKSk6ICBGaXggdGhpbmtvLgoJKiBzeW1zLmMgKGJmZF9zdGFiX25hbWVzKTogIFR1cm4gb24gbmV3IEdOVV9FWFRSQV9TVEFCUyBtYWNybwoJdG8gaW5jbHVkZSBuYW1lcyBvZiBOX1NFVFQgZXRjLgoKVGh1IE5vdiAxNCAxOToxMToxMyAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCiAgICAJKiBlbGYuYzogIEFkZCBtaW5pbWFsIHN1cHBvcnQgZm9yIEVMRiBzeW1ib2wgdGFibGVzLiAgR2VuZXJhdGVzCgljYW5vbmljYWwgYmZkIHN5bWJvbCB0YWJsZXMgZnJvbSBFTEYgc3ltYm9sIHRhYmxlcy4gIENoYW5nZSB0aGUKCW5hbWUgb2Ygc29tZSBmdW5jdGlvbnMgZnJvbSBiZmRfPG5hbWU+IHRvIGVsZl88bmFtZT4uCgoJKiBzeW1zLmM6ICBUcml2aWFsIGZpeCB0byBjb21tZW50IHRvIHJlbW92ZSBhIHJlZHVuZGFudCAidG8iLgoKV2VkIE5vdiAxMyAxNzowMjowMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYte2kzODYsbTY4ayxtODhrfS5jOiAgQ2hhbmdlIG5hbWUgb2YgZmlsZSBmb3JtYXQgdG8gc3RhbmRhcmQKCWZvcm0gdGhhdCBHREIgcmVjb2duaXplcyBhcyBDT0ZGLgoKV2VkIE5vdiAxMyAwOTowOTo0MSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBjeWdudXMuY29tKQoKCSogaWVlZS5jIChpZWVlX29iamVjdF9wKTogIGNhc3QgTlVMTCBjb3JyZWN0bHkuCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgaGFycmlzIGhvc3QKCgkqIGNvZmYtYTI5ay5jOiBMb3RzIG9mIGNoYW5nZXMsIG1vc3QgZnJvbSBEYXZpZCBXb29kLgoKVHVlIE5vdiAxMiAwNzoyMTo0MSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYtbTg4ay5jIChjb2ZmX3dyaXRlX2FybWFwKTogIEp1c3QgI3VuZGVmIGl0LgoKTW9uIE5vdiAxMSAyMDozMDoxOCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHN0YW5kYXJkaXplIG9uIE1JTlVTX0cgdG8gZGlzYWJsZSBkZWJ1Z2dpbmcKCSogY29mZi1tODhrLmM6IGNyZWF0ZSBjb2ZmIGFybWFwcyBpbnN0ZWFkIG9mIGJzZCBvbmVzLgoJKiBvcG5jbHMuYyAoYmZkX2Nsb3NlX2FsbF9kb25lKSwgKGJmZF9jbG9zZSk6IE1hc2sgb3V0IHJhbmRvbSBiaXRzCgl3aGVuIGNhbGxpbmcgY2htb2QuCgpNb24gTm92IDExIDE5OjA3OjMyIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLmM6ICBBZGRpdGlvbnMgdG8gc3VwcG9ydCBFTEYgZm9ybWF0IGNvcmUgZmlsZXMuCgkqIGNvbmZpZy9taC1hbWl4OiAgQWRkIC1ESEFWRV9QUk9DRlMgdG8gSERFRklORVMsIHNpbmNlIGhvc3QKCWhhcyBzdXBwb3J0IGZvciAvcHJvYyAoYWxsIHRoZSBpbmNsdWRlIGZpbGVzIGluIHBhcnRpY3VsYXIpLgoKTW9uIE5vdiAxMSAxODozNjo0NyAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKE5BTUUoYW91dCxmaW5kX25lYXJlc3RfbGluZSkpOiAgSGFuZGxlIHRoZSBjYXNlCglvZiB0d28gTl9TTyBzdGFicywgb25lIGZvciBkaXJlY3RvcnksIGFuZCBvbmUgZm9yIGZpbGVuYW1lLgoKCSogYmZkLWluLmggKHByaW50X3ZtYSk6ICBGYWN0b3Igb3V0IGR1cGxpY2F0ZSBkZWZpbml0aW9uLgoKCUV4aXQgYSBsaXR0bGUgbW9yZSBncmFjZWZ1bGx5IHdoZW4gbWFsbG9jIHJldHVybnMgTlVMTC4KCSogbGliYmZkLmM6IE5ldyBmdW5jdGlvbiBiZmRfeG1hbGxvYyAobWFsbG9jIHdyYXBwZXIpLgoJKiBvcG5jbHMuYywgc3ltcy5jLCBib3V0LmMsIGFvdXR4Lmg6ICBSZXBsYWNlIG1hbGxvYyBieSBiZmRfeG1hbGxvYy4KCSogbGliYmZkLmg6IFJyZS1nZW5lcmF0ZWQgZHVlIHRvIGxpYmJmZC5jIHVwZGF0ZS4KClNhdCBOb3YgIDkgMTM6NDU6MDEgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcvbXQtbTY4ay1lbGY6ICBEZWZpbmUgREVGQVVMVF9WRUNUT1IgYXMgZWxmX2JpZ192ZWMuCgoJKiBlbGYuYyAoZWxmX29iamVjdF9wKTogIERvbid0IHRyeSB0byBjcmVhdGUgYSBiZmQgc2VjdGlvbiBmb3IKCXRoZSBmaXJzdCBFTEYgc2VjdGlvbiBoZWFkZXIuICBJdCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuCgpTYXQgTm92ICA5IDAzOjA0OjI2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29mZi1yczYwMDAuYywgY29uZmlnL21oLXJzNjAwMDogIE1ha2UgaXQgd29yayBvbiBhcmNoaXZlIGFuZAoJY29yZSBmaWxlcywgd2hlbiBjb21waWxpbmcgbmF0aXZlLgoJKiBob3N0cy9oLXJzNjAwMC5oOiAgRGVmaW5lIEZBU0NJU1RfRkRPUEVOIGZvciBiZmRfZmRvcGVuci4KCglGSVhNRTogIFRoZSBhb3V0ZjEuaCBjaGFuZ2UgYmVsb3cgbmVlZHMgdG8gYmUgcmV2ZXJzZWQgYmFjawoJdG8gdGhlIHdheSBpdCB3YXMuCgpUaHUgTm92ICA3IDExOjAzOjU1IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaDogRGVmaW5lZCBuZXcgbWFjcm9zIFtQVVR8R0VUXUxJTkVOT19MTk5PIGZvcgoJbWFuaXB1bGF0aW9uIG9mIGxubm8gZmllbGRzIGluIGxpbmVubyBzdHJ1Y3RzIGluIGEgY29mZi08Zj4uaAoJaW5kZXBlbmRlbnQgd2F5LiBPdmVycmlkZSBpdCBpbiBjb2ZmLTxmPi5oIHRvIHlvdXIgZmF2b3VyaXRlCgludW1iZXIgaWYgeW91IGRvbid0IGhhdmUgYSAxNmJpdCBsbm5vIGZpZWxkLiAoY29mZl9zd2FwX2xpbmVub19pbikKCShjb2ZmX3N3YXBfbGluZW5vX291dCk6IG1vZGlmaWVkIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4KCk1vbiBOb3YgIDQgMTE6Mzg6MzMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5oIChzdW5vczRfY2FsbGJhY2spOiBOb3cgZGVmYXVsdHMgdG8gNjgwMjAgcmF0aGVyIHRoYW4KCXVua25vd24gYXJjaCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgZG9lc24ndCBzcGVjaWZ5IHRoZQoJYXJjaGl0ZWN0dXJlLCBzaW5jZSBzb21lIE9TcyAoZWcgb2xkIHN1bjNzKSBkb24ndCBzZXQgdGhlIG51bWJlciwgYW5kCgkwMjAgaXMgcHJvYmFibHkgdGhlIHJpZ2h0IGFuc3dlciBhbnl3YXkuCgpTdW4gTm92ICAzIDEyOjA3OjA4IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogaG9zdHMvaC1uZXdzLmgsIGhvc3RzL2gtcnRic2QuaDoKCUdldCByaWQgb2YgTUlTU0lOR19WRlBSSU5URiwgc2luY2UgbGliaWJlcnR5IHByb3ZpZGVzIG9uZS4KCSogYmZkLWluLmggKGJmZF9wcmludF9zeW1ib2xfdHlwZV9ob3B3IGVudW0pOiAgIEFkZCBuZXcgb3B0aW9uCgliZmRfcHJpbnRfc3ltYm9sX25tLCBmb3IgdXNlIGJ5IG5tLgoJKiBhb3V0eC5oIChOQU1FKGFvdXQscHJpbnRfc3ltYm9sKSk6ICBBZGQgY29kZSBmb3IgbmV3CgliZmRfcHJpbnRfc3ltYm9sX25tIG9wdGlvbiwgdG8gcHJpbnQgaW4gbm0gZm9ybWF0LgoJKiBjb2ZmY29kZS5oIChjb2ZmX3ByaW50X3N5bWJvbCksIGllZWUuYyAoaWVlZV9wcmludF9zeW1ib2wpCglvYXN5cy5jIChvYXN5c19wcmludF9zeW1ib2wpOiAgUHJvdmlkZSBzdHViIGltcGxlbWVudGF0aW9ucwoJZm9yIGJmZF9wcmludF9zeW1ib2xfbm0uCgkqIHN5bXMuYzogIE5ldyBmdW5jdGlvbiBiZmRfZGVjb2RlX3N5bWNsYXNzLCB1c2VkIGJ5IG5tIHByaW50ZXIuCglOZXcgZnVuY3Rpb24gYmZkX3N0YWJfbmFtZSB0byBsb29rIHVwIHN0cmluZyBuYW1lIG9mIHN0YWIgY29kZS4KClNhdCBOb3YgIDIgMTQ6MjY6MDMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IEFkZGVkIGN0b3IuYwoJKiBhcmNodXJlcy5jIChiZmRfZGVmYXVsdF9hcmNoX3N0cnVjdCkgYWRkZWQKCWJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwLgoJKiBjb2ZmY29kZS5oOiByZW1vdmVkIGEgbG9hZCBvZiAjaWYgMGVkIGNvZGUuCgkoY29mZl9jb21wdXRlX2ZpbGVfc2VjdGlvbl9wb3NpdGlvbnMpOiBub3cgd29ya3Mgb3V0IHRoZSBzZWN0aW9uCglhbGlnbm1lbnQgYW5kIHNpemUgY29ycmVjdGx5IGluIGFsbCBjYXNlcy4KCShjb2ZmX2dldF9zeW10YWIpOiBsb29rcyBmb3IgY29uc3RydWN0b3Igc3ltYm9scyBhbmQgY2FsbHMgdGhlCglyaWdodCBmdW5jdGlvbiB3aGVuIHRoZXkncmUgZm91bmQuIChjb2ZmX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6Cglrbm93cyB3aGVuIGEgc2VjdGlvbiBpcyBmdWxsIG9mIGNvbnN0cnVjdG9ycyBhbmQgZG9lcyB0aGUgcmlnaHQKCXRoaW5nLgoJKiBjcHUtbTg4ay5jOiBBZGRlZCBkZWZhdWx0X3JlbG9jX3R5cGUgbG9va3VwIHRvIHRoZSBhcmNoaXRlY3R1cmUKCWRlc2NyaXB0aW9uLgoJKiBsaWJiZmQtaW4uaDogKGJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwKSBkZWZ1biAgYWRkZWQuCgkqIGxpYmNvZmYuaDogcmVtb3ZlZCAjaWYgMGVkIGNvZGUKCSogcmVsb2MuYzogKGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSkgYWRkZWQgQkZEX1JFTE9DX0NUT1IgZm9yCglhcmNoIGluZGVwZW5kZW50IGNvbnN0cnVjdG9yIHJlbG9jYXRpb24gdHlwZS4KCShiZmRfcmVsb2NfdHlwZV9sb29rdXApOiByZW1vdmVkIHRoZSBjb21tZW50ICJ0aGlzIHdpbGwgZ28gYXdheSIKCXNpbmNlIGl0IHdvbid0LiAoYmZkX2hvd3RvXzMyKTogc3RvbGVuIGZyb20gODhrLCB0aGlzIGlzIGEgMzJiaXQKCXJlbG9jIHdoaWNoIGlzIHVzZWQgd2hlbiBCRkRfUkVMT0NfQ1RPUiBmYWxscyB0aHJvdWdoIHRvIGdpdmUgYQoJZGVmYXVsdCAzMmJpdCByZWxvYyBmb3IgY29uc3RydWN0b3JzLgoJKGJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwKTogYWRkZWQuCgkqIGFvdXRmMS5oOiBmaXhlZCBTRUdNRU5UX1NJWkUgdHlwby4KClRodSBPY3QgMzEgMTg6MjM6MDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmLXJzNjAwMC5jOiAgQ2hhbmdlIG5hbWUgdG8gImFpeGNvZmYtcnM2MDAwIiwgdG8gYXZvaWQKCW1hdGNoaW5nIHByZWZpeCAiY29mZiIuCgkqIGNvZmZjb2RlLmggKGNvZmZfc3dhcF9hdXhfaW4sIGNvZmZfc3dhcF9hdXhfb3V0KTogIEhhbmRsZQoJcnMvNjAwMCBjc2VjdCByZWNvcmRzLgoKU3VuIE9jdCAyNyAxNjo1Njo1OCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmLW04OGsuYywgdGFyZ2V0cy5jOiBjaGFuZ2UgbmFtZSBvZiBtODhrX2JjcyB0byBtODhrYmNzCgkqIGNvbmZpZ3VyZS5pbjogYWRkIG1vdG9yb2xhIGRlbHRhODggY2FzZXMKCSogbGliYmZkLmgsIGxpYmJmZC1pbi5oLCBhcmNoaXZlLmMsIGllZWUuYywgZWxmLmMsIHNyZWMuYzogZml4Cgl3cml0ZV9hcm1hcCBwcm90b3R5cGUKCSogbGliYmZkLmM6IGFkZCBkb2Mgb24gYmZkX3dyaXRlX2JpZ2VuZGlhbl80Ynl0ZV9pbnQKCkZyaSBPY3QgMjUgMDI6NDg6MTkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBSZW5hbWUgQ09GRi1yZWxhdGVkIGZpbGVzIGluIGBjb2ZmLUFSQ0guYycgZm9ybS4KCWNvZmYtYTI5ay5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYywKCWNvZmYtbWlwcy5jLCBjb2ZmLXJzNjAwMC5jIHRvIGJlIGV4YWN0LgoKCSogTWFrZWZpbGUuaW46ICBPbmx5IHN1cHBseSBUQVJHRVRfREVGQVVMVFMgdG8gdGFyZ2V0cy5jLCByZWR1Y2luZwoJbWFrZSBvdXRwdXQgY2x1dHRlci4KCSogY29uZmlnL210LSo6ICBEaXR0by4KClRodSBPY3QgMjQgMjI6NDA6MDcgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJUlMvNjAwMCBzdXBwb3J0LCBieSBNZXRpbiBHLiBPemlzaWssIE1pbWkgUGj79G5nLVRo5W8gVvUsIGFuZAoJSm9obiBHaWxtb3JlLiAgQXJjaGl2ZSBzdXBwb3J0IGZyb20gRGFtb24gQS4gUGVybWV6ZWwuCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBjcHUtcnM2MDAwLmMgYW5kIHJzNjAwMGNvZmYuYy4KCSogY29uZmlndXJlLmluOiAgQWRkIHJzNjAwMCBjYXNlLgoJKiB0YXJnZXRzLmM6ICBBZGQgcnM2MDAwIHZlY3Rvci4KCSogYXJjaHVyZXMuYzogIEFkZCByczYwMDAsIGZpeCBjb21tZW50IG9uIHJvbXAuCgkqIGJmZC1pbi5oIChlbnVtIGJmZF9lcnJvcik6ICBBZGQgbm9fZGVidWdfc2VjdGlvbiBlcnJvci4KCSogbGliY29mZi1pbi5oIChzdHJ1Y3QgY29mZl90ZGF0YSk6ICBSZW1vdmUgdW51c2VkIHN0cmluZ190YWJsZS4KCSogYmZkLmMgKGJmZF9lcnJtc2dzKTogIEFkZCBub19kZWJ1Z19zZWN0aW9uIGVycm9yIG1lc3NhZ2UuCgkqIHNlY3Rpb24uYyAoYmZkX21ha2Vfc2VjdGlvbik6ICBSZXR1cm4gTlVMTCBvbiBhdHRlbXB0IHRvIGNyZWF0ZQoJYSBzZWN0aW9uIHR3aWNlLgoJKiBjb2ZmY29kZS5oIChiZmRfc3dhcF9yZWxvY19pbik6ICBIYW5kbGUgcl90eXBlIGFuZCByX3NpemUuCgkoYmZkX3N3YXBfYW91dGhkcl9pbik6ICBIYW5kbGUgbG90cyBtb3JlIG1lbWJlcnMuCgkobWFrZV9hX3NlY3Rpb25fZnJvbV9maWxlKTogIElmIHNlY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBzZWVuLAoJanVzdCByZXR1cm4gZmFsc2UgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQuCgkoY29mZl9yZWFsX29iamVjdF9wKTogIFVuZGVyc3RhbmQgaW5jb21pbmcgbWFnaWMgbnVtYmVycy4KCShjb2ZmX3NldF9mbGFncyk6ICBVbmRlcnN0YW5kIG91dGdvaW5nIG1hZ2ljIG51bWJlcnMuCgkoY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiAgb3V0Z29pbmcgYW91dGhkciBtYWdpYyAjLgoJKGJ1aWxkX2RlYnVnX3NlY3Rpb24pOiAgQWRkIGZuIGZvciByZWFkaW5nIGRlYnVnIHN0cmluZyBzZWN0aW9uLgoJKGdldF9ub3JtYWxpemVkX3N5bXRhYik6ICBIYW5kbGUgc3ltYm9sIG5hbWVzIGluIGRlYnVnIHN0cmluZyBzZWN0aW9uLgoJUmVtb3ZlIHVudXNlZCBvYmpfc3RyaW5nX3RhYmxlLgoJKGNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIEhhbmRsZSByczYwMDAtc3BlY2lmaWMgc3RvcmFnZSBjbGFzc2VzLgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzLCBOX1NFVCopOiAgQ2hlY2sgZm9yCglleGlzdGluZyBzZWN0aW9uIGJlZm9yZSBtYWtpbmcgb25lLgoJKiBjcHUtcnM2MDAwLmM6ICBOZXcgZmlsZS4KCSogcnM2MDAwY29mZi5jOiAgTmV3IGZpbGUuCgpUaHUgT2N0IDI0IDAyOjAzOjI0IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLmM6IEFkZCBwYXJ0aWFsIHN1cHBvcnQgZm9yIEVMRiBmb3JtYXQgY29yZWZpbGVzLiBTdGlsbCBuZWVkcwoJc3VwcG9ydCBmb3IgZXh0cmFjdGluZyByZWdpc3RlcnMgZnJvbSBjb3JlZmlsZXMuCgoJKiBjb25maWcvdC1tNjhrLWVsZjogIFNldCBERUZBVUxUX1ZFQ1RPUiB0byBlbGZfYmlnX3ZlYy4KCgkqIGNvbmZpZy97aC1hbWl4LGgtZGd1eCxoLWlyaXgzLGgtdWx0cmEzfTogRm9yIHN5c3RlbXMgd2hlcmUKCVJBTkxJQiBpcyBkZWZpbmVkIGFzIGVjaG8sIHNlbmQgdGhlIG91dHB1dCB0byAvZGV2L251bGwgdG8gaGVscAoJcmVkdWNlIGNsdXR0ZXIgaW4gdGhlIG91dHB1dCBmcm9tIGRvaW5nIGEgbWFrZS4KCk1vbiBPY3QgMjEgMTc6NDg6NDggMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBob3N0cy9oLXZheHVsdC5oOiAgUmVtb3ZlIG1hbGxvYy9mcmVlIGRlY2xzIGNvdmVyZWQgaW4gc3RkbGliLmguCglGaXggSE9TVF9QQUdFX1NJWkUgYW5kIEhPU1RfU0VHTUVOVF9TSVpFLiAgRnJvbSBEYXZpZCBUYXlsb3IuCgpNb24gT2N0IDIxIDA5OjM0OjExIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IG1ha2UgaXQgcGFkCglzZWN0aW9uIHNpemUgb3V0IGlmIHRoZXJlIGFyZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIHNvIHRoYXQgdGhlCglpbWFnZSB3aWxsIGJlIG9rIG9uIGEgc3lzdGVtIHdoZXJlIHNlY3Rpb24gcG9zaXRpb25zIGFyZSB3b3JrZWQKCW91dCBieSBhY2N1bXVsYXRpbmcgc2l6ZXMgcmF0aGVyIHRoYW4gZnJvbSB0aGUgc2VjdGlvbiBoZWFkZXJzLgoJKiB0YXJnZXRzLmMgKHByb3RvIHdyaXRlX2FybWFwKS4gQ2hhbmdlZCBvcmxfY291bnQgdG8gdW5zaWduZWQuCgkqIG9wbmNscy5jIChiZmRfY2xvc2VfYWxsX2RvbmUpLiBBZGRlZCBzbyB0aGF0IGdlbmVyYXRpdmUKCXByb2dyYW1zIGxpa2UgZ2FzIGNhbiBjbG9zZSBhIGJmZCB3aXRob3V0IGNhdXNpbmcgYmZkIGNvbmZ1c2lvbi4KCSogbGliYmZkLmggKGNoYW5nZWQgYmVjdWFzZSBvZiBwcm90b3MpCgkqIGFtZGNvZmYuYzogbWVzc2VkIHdpdGggdGhlIHdheSB0aGF0IGptcCBkaXNwbGFjZW1lbnRzIGFyZQoJY2FsY3VhbGF0ZWQuIFRoaXMgbWF5IG5vdCB5ZXQgYmUgdG90YWxseSBjb3JyZWN0LgoJKiBhcmNoaXZlLmMgKGNvZmZfd3JpdGVfYXJtYXApOiByZXdyb3RlIHRoZSB3YXkgdGhhdCByYW5saWJzIGFyZQoJd3JpdHRlbiBvdXQuCgkqIGNvZmZjb2RlLmggKGZpeHVwX3N5bWJvbF92YWx1ZSk6IG5vdyBkb2Vzbid0IGNvcmUgZHVtcCBpZiBhIG5vbgoJYWJzIHN5bWJvbCBoYXMgbm8gc2VjdGlvbiAobGlrZSBhIHJlZ2lzdGVyIHN5bWJvbCkuCgkoY29mZl93cml0ZV9zeW1ib2wpIG5vdyB6ZXJvcyBhdXhlbnQgYmVmb3JlIGZpbGxpbmcgaXQgdXAgdG8gaGVscAoJd2l0aCBzZW5zaXRpdmUgYXBwbGljYXRpb25zLgoJKiBsaWJiZmQuYyAoYmZkX3dyaXRlX2JpZ2VuZGlhbl80Ynl0ZV9pbnQpOiBhZGRlZC4KCldlZCBPY3QgMTYgMjI6NTg6NDUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBiZmQuYzogIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYSBtYWNybyBzdHJlcnJvcigpLgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIpOiAgSWYgRkFTQ0lTVF9GRE9QRU4sIHVzZSAiciIsIG5vdCAicisiLgoJKiB0cmFkLWNvcmUuYyAodHJhZF91bml4X2NvcmVfZmlsZV9mYWlsaW5nX2NvbW1hbmQpOiAgU3VwcHJlc3MKCWF0dGVtcHQgdG8gcmVjb3ZlciBjb21tYW5kLCBpZmRlZiBOT19DT1JFX0NPTU1BTkQuCgkqIGhvc3RzL2gtdGFob2UuaDogIEFkZCBGQVNDSVNUX0ZET1BFTiBhbmQgTk9fQ09SRV9DT01NQU5EOwoJcmV2YW1wIEhPU1RfKiwgZXRjLgoJKiBob3N0cy9oLWkzODZ2Lmg6ICBVc2UgPHV0aW1lLmg+LCBub3QgPHN5cy91dGltZS5oPiwgdW5saWtlIFBPU0lYLgoKV2VkIE9jdCAxNiAxMjo0Mzo0OSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoYnNkX3dyaXRlX2FyZ21hcCk6IFRoZSBzaXplIG9mIHRoZSByYW5saWIgc3RydWN0dXJlcwoJc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzaXplIGZpZWxkIGl0c2VsZi4KCSogYW91dHguaCwgbGliYW91dC5oIChOQU1FKGFvdXQsIHNpemVvZl9oZWFkZXJzKSk6ICBVc2UKCWFkYXRhKGFiZmQpLT5leGVjX2J5dGVzX3NpemUgZmllbGQgaW5zdGVhZCBvZiBjb25zdGFudCBtYWNybywKCWJlY2F1c2UgYW91dHguaCBjb21waWxlcyB0byBhIHNpbXBsZSAubyBmaWxlIHNoYXJlZCBieQoJYWxsIDMyLWJpdHMgYS5vdXQgdGFyZ2V0cy4KCldlZCBPY3QgMTYgMTE6MTE6MDUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBBbGxvdyBpMzg2LXNjby1zeXN2LgoJKiBib3V0LmM6ICBSZW1vdmUgdW51c2VkIGk5NjBfYWxpZ247IGxpbnQgZHVtbXkgY29yZSBmaWxlIGhhbmRsZXJzLgoJKiBjcHUtaDgzMDAuYzogIGxpbnQuCgoJKiBob3N0LWFvdXQuYzogIE5ldyBzdHJhdGVneS4gIFdlIHVzZSBjb21tb24gY29kZSwgaW5jbHVkZSBmaWxlcywKCWFuZCBkYXRhIHN0cnVjdHVyZXMgdG8gaGFuZGxlIHRoZSBmaWxlLCBidXQgc2V0IGEgZmV3IHBhcmFtZXRlcnMKCWZyb20gdGhlIGhvc3QncyBjb25maWcgZmlsZSAocGFnZSBzaXplLCB0ZXh0IHN0YXJ0IGFkZHIsIGV0YykuCgkqIGxpYmFvdXQuaDogIERlZmluZSBIUCBCU0QgbWFjaGluZSB0eXBlcy4KCSogYW91dGYxLmg6ICBIYW5kbGUgcmVhZGluZyBhLm91dHMgd2l0aCB0aGVzZSB0eXBlcy4KCgkqIHRyYWQtY29yZS5jOiAgUGFzcyB0aGUgdS51X2FyMCB2YWx1ZSBhcyB0aGUgbmVnYXRpdmUgb2YgdGhlCgl2aXJ0dWFsLW1lbW9yeS1hZGRyZXNzIG9mIHRoZSAucmVnIHNlY3Rpb24uICBXZSBjYW4ndCBqdXN0IG1ha2UgYQoJc2VjdGlvbiBmb3IgImFsbCB0aGUgcmVncyBhbmQgbm90aGluZyBlbHNlIiBiZWNhdXNlIG9ubHkgR0RCIGtub3dzCglleGFjdGx5IHdoZXJlIHRoZSByZWdzIGFyZSAoc2NhdHRlcmVkIGFyb3VuZCB0aGUgdXBhZ2UgYW5kIHN0YWNrKS4KCUNsZWFuIHVwIG1lbW9yeSBhbGxvY2F0aW9uLiAgUmVtb3ZlIGJpZy0gYW5kIGxpdHRsZS1lbmRpYW4KCXZlY3RvcnMsIHJlcGxhY2Ugd2l0aCBzaW5nbGUgdmVjdG9yOyB0aGlzIG9ubHkgcnVucyBvbiB0aGUgaG9zdCwKCWluIGhvc3QgYnl0ZSBvcmRlci4gIFJlcGxhY2UgYnl0ZXN3YXAgcm91dGluZXMgd2l0aCBhYm9ydHMgaW4gY2FzZQoJYW55b25lIGNhbGxzIHRoZW0uCgkqIHRhcmdldHMuYzogIFRoZXJlJ3Mgb25seSBvbmUgdHJhZF9jb3JlX3ZlYyBub3cuCgkqIGFvdXRmMS5oIChzdW5vc19jb3JlX2ZpbGVfcCk6ICBWTUEgb2YgLnJlZyogbm93IG5lZWRzIHRvIGJlIDAuCgpUdWUgT2N0IDE1IDA4OjI5OjAzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogaG9zdHMvaC1hbWl4LmggKGZyZWUpOiAgRml4IHByb3RvdHlwZS4KCgkqIGFvdXR4Lmg6ICBEb24ndCB1c2UgTlVMTCBhcyBhbiBpbnRlZ2VyLCBmb3IgYnJhaW5kZWFkIHN5c3RlbXMKCXRoYXQgZGVjbGFyZSBpdCBhcyAodm9pZCAqKTAuICAoRnJvbSBQZXRlciBTY2hhdWVyLikKCk1vbiBPY3QgMTQgMTc6MjA6NDcgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIpOiAgQWRkIHBhcmVudGhlc2VzIHRvIGF2b2lkIHJlcG9ydGVkCglwcm9ibGVtIHdpdGggYmFkIFVsdHJpeCBzeXN0ZW0gaGVhZGVycy4KCSogYW91dHguaCAoTkFNRShhb3V0LHNldF9zZWN0aW9uX2NvbnRlbnRzKSk6ICBUcnkgdG8gaGFuZGxlIHRoZQoJdmFyaW91cyBraW5kcyBvZiBhbGlnbm1lbnRzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZgoJbWFnaWMgbnVtYmVycy4KCk1vbiBPY3QgMTQgMTQ6MjM6MTAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBkb2MvTWFrZWZpbGU6ICBEb24ndCBhc3N1bWUgLiBpcyBvbiB0aGUgcGF0aCAoZnJvbSBKYW1lcyBDbGFyaykuCgpGcmkgT2N0IDExIDIyOjQ1OjE0IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBBdm9pZCBTdW4gTWFrZSBWUEFUSCBidWdzLgoJKiB0YXJnZXRzLmM6ICBEZWNsYXJlIHRyYWRfY29yZSB2ZWN0b3JzIGV4dGVybi4KCkZyaSBPY3QgMTEgMTM6MDM6MDIgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oOiBNb3ZlZCBBTElHTiBtYWNybyB0byBsaWJiZmQuaC4gUmVtb3ZlZCBpOTYwX2FsaWduLgoJKiBsaWJiZmQuaDogTW92ZWQgQUxJR04gbWFjcm8gaGVyZS4KCSogYm91dC5jIChiX291dF9jYWxsYmFjayk6IFJlcGxhY2UgaTk2MF9hbGlnbiBieSBhbGlnbl9wb3dlci4KCgkqIGxpYmFvdXQuaCAoc3RydWN0IGFvdXRkYXRhKTogIEFkZGVkIGZpZWxkcyBwYWdlX3NpemUsCglzZWdtZW50X3NpemUgYW5kIGV4ZWNfYnl0ZXNfc2l6ZS4gIFRoZXNlIGhlbHAgZ2VuZXJpYyBjb2RlCgkoaW4gYW91dHguaCBhbmQgbGliYW91dC5oKSB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGFsaWduCgl0aGUgdmFyaW91cyBzZWdtZW50cyBpbiBhIGRlbWFuZCBwYWdlZCBmaWxlLgoJKiBsaWJhb3V0LmggKFdSSVRFX0hFQURFUik6ICBVc2UgbmV3IChzdHJ1Y3QgYW91dGRhdGEpIGZpZWxkcwoJdG8gZGVjaWRlIGlmIHRoZSBleGVjIGhlYWRlciBjb3VudHMgaW4gYV90ZXh0ICh0ZXh0IHNlZ21lbnQgc2l6ZSkuCglBbHNvLCBhc3N1bWUgRF9QQUdFRCBmbGFnIGlzIHNldDsgZG9uJ3Qgc2V0IGl0IGhlcmUuCgkqIGJvdXQuYyAoYl9vdXRfY2FsbGJhY2spOiBBZGQgaW5pdGlhbGl6YXRpb24gb2YKCWFkYXRhIGZpZWxkcyBwYWdlX3NpemUsIHNlZ21lbnRfc2l6ZSwgYW5kIGV4ZWNfYnl0ZXNfc2l6ZS4KCSogaG9zdC1hb3V0LmMgKE5BTUUoaG9zdF9hb3V0LCBjYWxsYmFjaykgYW5kCglOQU1FKGhvc3RfYW91dCxta29iamVjdCk6IERpdHRvLgoJKiBpMzg2YW91dC5jIChhb3V0Mzg2X2NhbGxiYWNrKSBhbmQgbmV3IGFvdXQzODZfbWtvYmplY3QpOiBEaXR0by4KCSogbmV3b3MzLmMgKG5ld3NvczNfY2FsbGJhY2spIGFuZCBuZXcgbmV3c29zX21rb2JqZWN0KTogRGl0dG8uCgkqIGFvdXRmMS5jIChzdW5vczRfY2FsbGJhY2spIGFuZCBuZXcgc3Vub3NfbWtvYmplY3QpOiBEaXR0by4KCSogYW91dHguaCAoTkFNRShhb3V0LHNvbWVfYW91dF9vYmplY3RfcCkpOiBEb24ndCBzdWJ0cmFjdAoJRVhFQ19CWVRFU19TSVpFIGZyb20gdGhlIGFfdGVzdCBzaXplOyB0aGlzIGlzIG9ubHkgYXBwcm9wcmlhdGUKCWZvciBzb21lIHN5c3RlbXMgKG1haW5seSBzdW5vcyksIHNvIGRvIGl0IGluIHRoZSBjYWxsYmFjayBpbnN0ZWFkLgoJU2FtZSByb3V0aW5lOiBBZGQgc3R1ZmYgdG8gdGhlIFRISVNfSVNfT05MWV9ET0NVTUVOVEFUSU9OIGNvbW1lbnQuCgkqIGFvdXR4LmggKE5BTUUoYW91dCxzZXRfc2VjdGlvbl9jb250ZW50cyk6IENoYW5nZSB0aGUgd2F5CglmaWxlcG9zIGFuZCBzaXplIG9mIHNlY3Rpb25zIGFyZSBjYXJyaWVkIG91dCB0byBzdXBwb3J0CglvbGRlciBzdHlsZXMgb2YgZGVtYW5kIHBhZ2VkIGV4ZWN1dGFibGVzLgoKCkZyaSBPY3QgMTEgMTI6MzM6MzYgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdudXMuY29tKQoKCSogYmZkLWluLmg6IEFkZGVkIG1vcmUgbWFjcm9zIHRvIENPRkZfU1dBUF9UQUJMRS4KCSogYmZkLmM6IEFkZGVkIG1hY3JvcyB0byBlbmFibGUgZ2FzIHRvIHN3YXAgY29mZiByZWNvcmRzLgoJKiBjb2ZmY29kZS5oOiBNYWtlIHRoZSBjb2ZmX3N3YXBfKl9vdXQgcm91dGluZXMgcmV0dXJuIHRoZSBudW1iZXIKCW9mIGJ5dGVzIHN3YXBwZWQsIGFuZCBjbGVhbmVkIHVwIHRoZWlyIHByb3RvdHlwZXMuCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZWJtb24vY29mZiBzdXBwb3J0CgkqIGVjb2ZmLmM6IENoYW5nZWQgbnVsbCBkZWZpbml0aW9ucyBvZiBjb2ZmX3N3YXBfKl9vdXQgdG8gY29uZm9ybQoJdG8gbmV3IHByb3RvdHlwZXMKCSogdGFyZ2V0cy5jOiBBZGRlZCBuZXcgZW50cnkgcG9pbnRzIGZvciBjb2ZmIHN3YXBwaW5nCgpGcmkgT2N0IDExIDAzOjAxOjUyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCVJlc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gc2NoZW1lIGZvciBiZmQsIGJpbnV0aWxzLCBsZC4KCgkqIGluY2x1ZGUvc3lzL2gtKi5oOiAgTW92ZSB0byBiZmQvaG9zdHMvaC0qLmguCgkqIGNvbmZpZ3VyZS5pbjogIFJldmlzZSB0byBzeW1saW5rIHN5c2RlcC5oIHRvIGhvc3RzL2gteHh4LmguCglDaGFuZ2Ugc29tZSBjb25maWcgbmFtZXMgdG8gbWF0Y2ggb3RoZXIgZGlycy4KCSogKi5jOiAgSW5jbHVkZSBiZmQuaCBiZWZvcmUgc3lzZGVwLmgsIHNvIGFuc2lkZWNsIGFuZCBQUk9UTygpCglnZXQgZGVmaW5lZCBmaXJzdC4KCSogTWFrZWZpbGUuaW46ICBVc2UgLUkuIHRvIGdldCBzeXNkZXAuaC4gIFJlbW92ZSByZWZzIHRvCgkuLi9pbmNsdWRlL3N5c2RlcC5oLgoJKiBjcHUtaTk2MC5jOiAgU3RybmNtcCBuZWVkZWQgYSBsZW5ndGggYXJnLgoJKiBlY29mZi5jOiAgRG9uJ3QgZXZlciBjYWxsIHRyYWRfdW5peF9jb3JlX2ZpbGVfcCBmcm9tIGhlcmUuCgkqIGkzODZhb3V0LmM6ICBSZW1vdmUgZGVhZCBOX1RYVE9GRiBvdmVycmlkZS4KCSogdHJhZC1jb3JlLmM6ICBEb24ndCBkaXNhYmxlIHRoZSB3aG9sZSBmaWxlIGlmIFNVTjRfU1lTLgoJKiBjb25maWcvOiAgUmVuYW1lIHNvbWUgY29uZmlnIGZpbGVzIHRvIG1hdGNoIHVwIGgtKi5oIG5hbWVzLgoJUmVtb3ZlIGFsbCB0aGUgSE9TVF9TWVMgZGVmaW5pdGlvbnMgZnJvbSB0aGUgY29uZmlnIGZpbGVzLgoJKiBob3N0cy9oLWFtaXguaCwgaC1pMzg2di5oOiAgRGVmaW5lIFBPU0lYX1VUSU1FLCBub3QgVVNHLgoJKiBob3N0cy9oLWhwOTAwMC5oOiAgUmVtb3ZlIFVTRyBjb21tZW50LgoJKiBob3N0cy9oLXJzNjAwMC5oOiAgSW5jbHVkZSA8c3RkbGliLmg+IGZvciBtYWxsb2MuCgkqIGhvc3RzL2gtbmV3cy5oLCBoLXNwYXJjLTY0Lmg6ICBOZXcgY29uZmlnIGZpbGVzIHRoYXQgaGFkCglwcmV2aW91c2x5IGJlZW4ga2x1ZGdlZCBpbiB0aGUgPHN5c2RlcC5oPiBmaWxlLgoKVGh1IE9jdCAxMCAxNzo1NDowOCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy8qOiAgdHJhZC1jb3JlIHN1cHBvcnQgaXMgSE9TVCBkZXBlbmRlbnQsIG5vdCB0YXJnZXQKCWRlcGVuZGVudC4gIFRhcmdldCBjb25maWcgZmlsZXMgb25seSBzZXQgREVGQVVMVF9WRUNUT1IgYW5kL29yCglvdGhlciB2ZWN0b3IgZWxlbWVudHMuICBFeGNlcHRpb246ICB3aGVuIGhvc3QtYW91dC5jIGlzIGluIHVzZSwKCWluIHdoaWNoIGNhc2Ugd2UncmUgZm9yY2VkIHRvIGFzc3VtZSB3ZSdyZSBuYXRpdmUgKGhwLCB2YXgsCgl0YWhvZSkuICBSZW5hbWUgWERFUEZJTEVTIHRvIEhERVBGSUxFUy4KCSogTWFrZWZpbGUuaW46ICBSZW5hbWUgWERFUEZJTEVTLgoJKiBjb25maWcvaC1zdW4qOiAgRG9uJ3QgZm9yY2Ugc3RhdGljIGxpbmtpbmcuCgkqIHRyYWQtY29yZS5jOiAgRG9jdW1lbnQgaG93IHRvIHVzZSBpdCBub3dhZGF5cy4KCSogaTM4NmFvdXQuYywgbmV3c29zMy5jOiAgQ2xlYW4gdXAuCgkqIGkzODZjb2ZmLmM6ICBBbGxvdyAzODYgY29mZiBmaWxlcyB0byBiZSB1c2VkIGFzIGNvcmUgZmlsZXMgdG9vCgkoZm9yIHJlYWRpbmcgY29yZSBmaWxlcyBmcm9tIGVtYmVkZGVkIHN5c3RlbXMpLgoKVHVlIE9jdCAgOCAxNTozMDozOSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIEFkZCBpMzg2YW91dC5jIGZvciBhLm91dCBzdXBwb3J0IG9uIHRoZSBpMzg2LgoKVHVlIE9jdCAgOCAxMjoxODo1NCAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdudXMuY29tKQoKCSogcmVsb2MuYywgc2VjdGlvbi5jLCBzeW1zLmMsIHRhcmdldHMuYzogY29ycmVjdCBpbmZvLW5vZGUKCXN0cnVjdHVyZSBpbiAqZG9jKiBjb21tZW50cy4KCWRvYy9NYWtlZmlsZTogc3RvcCBoaWRpbmcgY29tcGxhaW50cyBmcm9tIG1ha2VpbmZvLgoKU3VuIE9jdCAgNiAxOToxMDowNiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKC4uLnNvbWVfYW91dF9vYmplY3RfcCk6ICBUYWtlIGEgdGhpcmQgcGFyYW1ldGVyLAoJdGhlIGludGVybmFsX2V4ZWMgc3RydWN0LCBhbmQgYXZvaWQgZXZlciBsb29raW5nIGF0IGFuCglleHRlcm5hbF9leGVjLiAgQWxsIGNhbGxlcnMgY2hhbmdlZCB0byByZWFkIHRoZSBlbnRpcmUKCWV4dGVybmFsX2V4ZWMgc3RydWN0LCBzd2FwIGFuZCBjaGVjayBpdHMgbWFnaWMgbnVtYmVyLAoJc3dhcCBpbiB0aGUgd2hvbGUgc3RydWN0dXJlLCBhbmQgcGFzcyB0aGUgc3dhcHBlZC1pbiB2ZXJzaW9uIHRvCglzb21lX2FvdXRfb2JqZWN0X3AuCgkqIGJvdXQuYzogIEJyaW5nIGludG8gbW9kZXJuIGVyYS4gIFVzZSBzaW5nbGUgX29iamVjdF9wIHJvdXRpbmUKCWZvciBiaWctIGFhbmQgbGl0dGxlLWVuZGlhbi4gIFByb3ZpZGUgaW50ZXJuYWwgYW5kIGV4dGVybmFsCglleGVjIGhlYWRlciBzdHJ1Y3RzLiAgVXNlIHNlcGFyYXRlIHN3YXAtaW4gYW5kIHN3YXAtb3V0IHJvdXRpbmVzLgoKCSogbGliYW91dC5oOiAgTW92ZSBzdHJ1Y3QgaW50ZXJuYWxfZXhlYyBmcm9tIC4uL2luY2x1ZGUvYW91dDY0LmgKCXRvIGhlcmUuICBBZGQgb2JqX3N5bWJvbF9lbnRyeV9zaXplIHRvIHN0cnVjdCBhb3V0ZGF0YS4KCSogYW91dHguaCAoLi4uc29tZV9hb3V0X29iamVjdF9wKTogIFNldCBvYmpfc3ltYm9sX2VudHJ5X3NpemUuCgoJKiAuLi9pbmNsdWRlL2FvdXQ2NC5oOiAgQ2hhbmdlIEVYVEVSTkFMX0xJU1RfU0laRSB0bwoJRVhURVJOQUxfTkxJU1RfU0laRS4gIENhbGxlcnMgY2hhbmdlZC4KCkZyaSBPY3QgIDQgMTg6MTg6NDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBiZmQuYzogIFJlbW92ZSBzdHJlcnJvcigpIHRvIGxpYmliZXJ0eS4KCgkqIGVsZi5jOiAgUmVtb3ZlIGVsZl9zZXRfc2VjdGlvbl9jb250ZW50cywgdXNlIGdlbmVyaWMgb25lLiAgTGludC4KCSogbGliYmZkLWluLmgsIGxpYmJmZC5jOiAgQWRkIGJmZF9nZW5lcmljX3NldF9zZWN0aW9uX2NvbnRlbnRzLgoJKiBsaWJiZmQuYyAoYmZkX2dlbmVyaWNfe2dldCxzZXR9X3NlY3Rpb25fY29udGVudHMpOiAgQ2hlY2sgdGhhdAoJbGFzdCBieXRlIG9mIHRyYW5zZmVyLCBub3QgZmlyc3QgYnl0ZSwgaXMgd2l0aGluIHRoZSBzZWN0aW9uLgoKCSogaG9zdC1hb3V0LmM6ICBSZW1vdmUgYEJTRCcgYXJjaGl2ZSBzdXBwb3J0LiAgTGludC4KCgkqIGFyY2h1cmVzLmM6IFJlbmFtZSBgc3RydWN0IGJmZF9hcmNoX2luZm9fc3RydWN0JyB0byBgc3RydWN0CgliZmRfYXJjaF9pbmZvJy4gIFJlbmFtZSBgdHlwZWRlZiBiZmRfYXJjaF9pbmZvX3N0cnVjdF90eXBlJyB0bwoJYGJmZF9hcmNoX2luZm9fdHlwZScuICBBbGwgdXNlcyBjaGFuZ2VkLgoJKiByZWxvYy5jOiAgUmVuYW1lIGBiZmRfcmVsb2Nfc3RhdHVzX2VudW1fdHlwZScgdG8KCWBiZmRfcmVsb2Nfc3RhdHVzX3R5cGUnLiAgUmVuYW1lIGBiZmRfcmVsb2NfY29kZV9lbnVtX3JlYWxfdHlwZScKCXRvIGBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUnLiAgKFRoaXMgc2VlbXMgdG8gYmUgYSBtaXNub21lciwKCWl0IG5lZWRzIGEgYmV0dGVyIG5hbWUuKSAgQWxsIHVzZXMgY2hhbmdlZC4KCSogdGFyZ2V0cy5jOiAgUmVuYW1lIGBlbnVtIHRhcmdldF9mbGF2b3VyX2VudW0nIHRvIGBlbnVtCgl0YXJnZXRfZmxhdm91cicsIGFuZCByZW1vdmUgdGhlIGBfZW51bScgZnJvbSBhbGwgb2YgdGhlIGVudW0KCXZhbHVlcyB0aGVtc2VsdmVzLiAgQWxsIHVzZXMgY2hhbmdlZC4KCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnL2gtaTM4Nm1hY2g6ICBpMzg2IG1hY2ggaG9zdC4KCSogY29uZmlnL3QtaTM4Ni1hb3V0OiAgVXNlIGhvc3QtYW91dC5jLgoKCSogdHJhZC1jb3JlLmM6ICBHaXZlIGl0IGl0cyBvd24geHZlYydzIHRvIG1ha2UgaXQgaW5kZXBlbmRlbnQKCW9mIG90aGVyIGZpbGUgZm9ybWF0cy4KCSogZWNvZmYuYywgaG9zdC1hb3V0LmM6ICBSZW1vdmUgcmVmcyB0byB0cmFkLWNvcmUuCgkqIGNvbmZpZy90LWRlYzMxMDAsIHQtaHAzMDBic2QsIHQtdGFob2UsIHQtdmF4OiAgRGVmaW5lIFRSQURfQ09SRS4KCSogdGFyZ2V0cy5jOiAgI2lmZGVmIFRSQURfQ09SRSwgaW5jbHVkZSBpdCBpbiB0aGUgdmVjdG9yLgoKRnJpIE9jdCAgNCAxNzozODowMyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiByZWxvYy5jOiBFeHRlbmRlZCBORVdIT1dUTyBtYWNybwoJKiBpZWVlLmM6IENoYW5nZWQgdGhlIHdheSA4Yml0IHBjcmVsIGlzIGRvbmUKCSogY3B1LWg4MzAwLmM6IGdvdCB0aGUgcmVnaXN0ZXJzIGluIHRoZSByaWdodCBvcmRlcgoKVGh1IE9jdCAgMyAxOTozOTo1NSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oOiAgZW51bSBib29sZWFuID0+IGVudW0gYmZkX2Jvb2xlYW4gZm9yIFNWUjQuICBHdW1ieSdzCglwcmVkaWN0aW9uIGlzIHZpbmRpY2F0ZWQhCgoJKiBiZmQtaW4uaCwgbGliYmZkLWluLmgsIGRvYy9NYWtlZmlsZSwgZG9jL3RvbGliYmZkLCBkb2MvaW50b2JmZDoKCVJlbW92ZSByZWZzIHRvIGhvd3RvLmMsIHNpbmNlIFN0ZXZlIGZvcmdvdC4KClRodSBPY3QgIDMgMDc6NDk6MjEgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdudXMuY29tKQoKCSogZWxmLmM6IHRvb2sgdGhlIGFib3J0IG91dCBvZiBzZXRfYXJjaF9tYWNoIHNvIHRoYXQgb2JqZHVtcCAtaSB3aWxsCglzdGlsbCB3b3JrLiBOb3cgYWxsb3dzIGFueSBhcmNoaXRlY3R1cmUvbWFjaGluZSB0byBiZSBzZXQuCgpXZWQgT2N0ICAyIDEzOjUwOjM1IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnbnVzLmNvbSkKCgkqIGhvd3RvLmMgZGVsZXRlZCBhbmQgbW92ZWQgY29kZSB0byByZWxvYy5jCgoJKiBsaWJiZmQuaCwgbGliYmZkLWluLmggcmVtb3ZlZCAkaWQgc3R1ZmYgZm9yIHJlYWwKCgkqIGNwdS1oODMwMC5jIE1hZGUgaXQgbWF0Y2ggdmFyaW91cyBkaWZmZXJlbnQgc3BlbGxpbmdzIG9mIGg4MzAwLgoKCSogYXJjaHVyZXMuYzogVG9vayBvdXQgdGhlIGZpcnN0IGNoYXIgZmlsdGVyIHdoaWNoIG1hZGUgaXQgb25seQoJbG9vayBmb3IgYSBjcHUvYXJjaCBtYXRjaCB3aGVuIHRoZSBmaXJzdCBjaGFycyBvZiBzdXBwbGllZCBhbmQKCXRlc3RlZCBuYW1lcyB3ZXJlIHRoZSBzYW1lLgoKCSogdGFyZ2V0cy5jIHJlbW92ZWQgb2FzeXMgc3R1ZmYsIHBlbmRpbmcgc29tZW9uZSB0byBmaXggdGhlIGJ1Z3MKCWluIGl0LgoKClR1ZSBPY3QgIDEgMTI6Mjk6NDQgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmluLCB0YXJnZXRzLmMsIGVsZi5jOiAgQWRkIHByZWxpbWluYXJ5CglFTEYgc3VwcG9ydCBnb29kIGVub3VnaCBmb3IgR0RCLgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZy9oLWFtaXgsIGNvbmZpZy90LW02OGstZWxmOiAgSGFuZGxlCgltNjhrLWNibS1zdnI0IGhvc3QgYW5kIHRhcmdldC4KCSogY29uZmlnL3QtbTY4ay1jb2ZmLCB0LW04OGstY29mZiwgdC1tODhrLWFvdXQ6ICBNYWtlIGZpbGVzIG5vbmVtcHR5CglzbyBgZGlmZicgYW5kIGBwYXRjaCcgY2FuIGNvcGUuCgpUdWUgT2N0ICAxIDExOjI0OjMxIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnbnVzLmNvbSkKCgkqIGFyY2h1cmVzLmM6IHJlbW92ZWQgdGV4aW5mbyBlcnJvcgoKCSogaW5pdC5jOiBhZGRlZCB0ZXhpbmZvIGhvb2tzLCBhbmQgcmVtb3ZlZCBpbml0aWFsaXphdGlvbiBlcnJvcgoJbWVzc2FnZS4KCgkqIGxpYmNvZmYtaW4uaCwgbGliYmZkLWluLmggcmVtb3ZlZCAkaWQgZmllbGQgc28gY3ZzIGNhbiBtZXJnZQoJd2l0aG91dCBjb21wbGFpbnRzLgoKVHVlIE9jdCAgMSAwNTowMjo1MyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNwdS1pOTYwLmM6ICBBdm9pZCBudW1lcmljYWwgY291bnQgb2YgaW5pdGlhbGl6ZXJzLgoKCVZheCBVbHRyaXggY2hhbmdlcyBmcm9tIERhdmlkIFRheWxvciA8dGF5bG9yQHRoaW5rLmNvbT46CgkqIGhvc3QtYW91dC5jOiAgTWFrZSBsaXR0bGUtZW5kaWFuIHZlY3RvciByZWFsbHkgbGl0dGxlLWVuZGlhbi4KCSogY29uZmlndXJlLmluOiAgU2VwYXJhdGUgdmF4IGFuZCB0YWhvZSBjYXNlcywgaGFuZGxlIHVsdHJpeC4KCSogY29uZmlnL3QtdmF4OiAgQWRkIHRyYWQtY29yZS5vLgoJKiBjb25maWcvaC12YXh1bHQ6ICBOZXcgaG9zdCBzeXN0ZW0uCgpNb24gU2VwIDMwIDE1OjEzOjQ2IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIFZFUlNJT04sIGNoYW5nZSB2ZXJzaW9uIG51bWJlciB0byAwLjE4LCB0aGlzIG1ha2VzIGEKCWdhcCwgYnV0IG5vdyBpcyB0aGUgc2FtZSBhcyB0aGUgbGlua2VyIHZlcnNpb24gbnVtYmVyLgoKCSogY3B1LWEyOWsuYywgY3B1LWkzODYuYywgY3B1LW02OGsuYywgY3B1LW1pcHMuYywgY3B1LXZheC5jLAoJY3B1LWg4MzAwLmMsIGNwdS1pOTYwLmMsIGNwdS1tODhrLmMsIGNwdS1zcGFyYy5jOiBhZGRlZC4gVGhlc2UKCWZpbGVzIHdpbGwgZXZlbnR1YWxseSBjb250YWluIHByb2Nlc3NvciBzcGVjaWZpYyBiaXRzIGZvciBiZmQsCglsaWtlIHN0cmFuZ2UgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZGlzL2Fzc2VtYmx5LiAgU28gZmFyIG9ubHkKCXRoZSBIOCBoYXMgYmVlbiBldmVuIHBhcnRpYWxseSBkb25lLiAgVGhpcyB3b3JrIGFsc28gdGllcyBpbiB3aXRoCgl0aGUgY2hhbmdlIGluIGhhbmRsaW5nIGFyY2hpdGVjdHVyZXMuCgoJKiBhbWRjb2ZmLmM6IChhMjlrX3JlbG9jKSBmaXggZXJyb3IgbWVzc2FnZS4KCgkqIGFvdXQtZjEuaDogKGNob29zZV9yZWxvY19zaXplKSBub3cgY2FsbHMgYmZkX2dldF9hcmNoIHRvCglkaXNjb3ZlciB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBiZmQuIChzdW5vczRfY2FsbGJhY2spIGNhbGxzIHRoZQoJZnVuY3Rpb24gYmZkX3NldF9hcmNoX21hY2ggcmF0aGVyIHRoYW4gc3R1ZmZpbmcgc3R1ZmYgZGlyZWN0bHkKCWludG8gdGhlIGJmZC4gKHN1bm9zNF93cml0ZV9vYmplY3RfY29udGVudHMpLCBjaGFuZ2VkIG5hbWVzIG9mCglhY2Nlc3NvciBmdW5jdGlvbnMuCgoJKiBhb3V0eC5oOiAoc2V0X2FyY2hfbWFjaCkgbm93IGNhbGxzIGJmZF9kZWZhdWx0X3NldF9hcmNoX21hY2ggdG8KCXNldHVwIHRoZSBlbnZpcm9ubWVudC4KCgkqIGFyY2hpdmUuYzogKGJmZF9zbHVycF9jb2ZmX2FybWFwKSBjb2ZmIGFyY2hpdmVzIGFsd2F5cyBoYXZlIHRoZQoJaGVhZGVycyBpbiBiaWcgZW5kaWFuIGZvcm1hdCwgcmVnYXJkbGVzcyBvZiB0aGUgZW5kaWFuZXNzIG9mIHRoZQoJaG9zdCBvciB0YXJnZXQuCgoJKiBhcmNodXJlcy5jOiB0b3RhbGx5IGNoYW5nZWQuIE5vdyBhbiBhcmNoaXRlY3R1cmUgaXMgcmVwcmVzZW50ZWQKCXdpdGggYSBwb2ludGVyIHRvIGFuIGluZm8gc3RydWN0dXJlIHJhdGhlciB0aGFuIGFuIGVudW1lcmF0ZWQgdHlwZQoJYW5kIGEgbG9uZy4gVGhlIG9sZCBpbmZvIGlzIGF2YWlsYWJsZSBhcyB0d28gZWxlbWVudHMgaW4gdGhlCglzdHJ1Y3R1cmUuICBGdXR1cmUgZW5oYW5jZW1lbnRzIHRvIGFyY2hpdGVjdXJlIHN1cHBvcnQgd2lsbAoJaW52b2x2ZSBwb2ludGVycyB0byBtZXRob2RzIGJlaW5nIHBsYWNlZCBpbnRvIHRoZSBpbmZvIHN0cnVjdHVyZS4KCgkqIGJmZC5jOiBjaGFuZ2VkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBiZmQgc3RydWN0dXJlIGZvciB0aGUgbmV3CglhcmNoaXRlY3R1cmUgc3R1ZmYuCgoJKiBib3V0LmM6IChiX291dF9zZXRfYXJjaF9tYWNoKSBjaGFuZ2VkIHRvIHVzZSB0aGUgbmV3CglhcmNoaXRlY3R1cmUgbWVjaGFuaXNtLgoKCSogY29mZmNvZGUuaDogKGNvZmZfc2V0X2FyY2hfbWFjaCwgY29mZl9zZXRfZmxhZ3MpIGNoYW5nZWQgdG8gdXNlCgl0aGUgbmV3IGFyY2hpdGVjdHVyZSBtZWNoYW5pc20uCgoJKiBjb25maWd1cmUuaW46IGFkZGVkIGg4IHN0dWZmLgoKCSogaWVlZS5jOiB0b28gbWFueSBjaGFuZ2VzIHRvIG5vdGUuICBOb3cgaWVlZSBmaWxlcyB3cml0dGVuIHdpdGgKCWJmZCBnYXMgYW5kIGxkIGNhbiBiZSByZWFkIGJ5IGdsZCBhbmQgaWVlZSBvbmx5IGxpbmtlcnMgYW5kCglzaW11bGF0b3JzLgoKCSogbGliYmZkLmMsIGxpYmJmZC5oOiBjaGFuZ2VkIHByb3RvdHlwZSBvZiBiZmRfd3JpdGUuCgoJKiBuZXdzb3MzLmM6IChuZXdvczNfY2FsbGJhY2spIG5vdyBjYWxscyBiZmRfc2V0X2FyY2hfbWFjaCByYXRoZXIKCXRoYW4gZml4aW5nIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkuCgoJKiBvYXN5cy5jOiAob2FzeXNfb2JqZWN0X3ApIG5vdyBjYWxscyBiZmRfZGVmYXVsdF9zZXRfYXJjaF9tYWNoIHJhdGhlcgoJdGhhbiBmaXhpbmcgdGhlIHN0cnVjdHVyZSBkaXJlY3RseS4KCgkqIG9wbmNscy5jOiAobmV3X2JmZCkgbWFrZXMgc3VyZSB0aGF0IGJmZF9pbml0IGhhcyBiZWVuIGNhbGxlZAoJYmVmb3JlIG9wZW5pbmcgYSBiZmQuCgoJKiBzcmVjLmM6IChzcmVjX3NldF9hcmNoX21hY2gpIG5vdyBjYWxscyBiZmRfZGVmYXVsdF9zZXRfYXJjaF9tYWNoCglyYXRoZXIgdGhhbiBmaXhpbmcgdGhlIHN0cnVjdHVyZSBkaXJlY3RseS4KCgkqIHRhcmdldHMuYzogKHRhcmdldF92ZWN0b3IpIG5vdyBieSBkZWZpbmluZyBTRUxFQ1RfVkVDUyAocGVyaGFwcwoJaW4gdGhlIHQvaG1ha2UgZmlsZSkgYSB1c2VyIGNhbiBzZWxlY3Qgd2hpY2ggYmFja2VuZHMgdGhleSB3YW50CglsaW5rZWQgd2l0aCBiZmQgd2l0aG91dCBjaGFuZ2luZyB0aGUgc291cmNlLgoKCSogaW5pdC5jOiBuZXcsIGxvb2tzIGFmdGVyIGluaXRpYWxpemluZyBtb2R1bGVzLgoKCSogaG93dG8uYzogZm9yIGZ1dHVyZSB1c2UsIHdpbGwgYWxsb3cgYW4gYXBwbGljYXRpb24gdG8gd29yayBvdXQKCXdoYXQgY29va2llIHRvIHVzZSBhcyBhIGhhbmRsZSBvbiBhIHJlbGNvYXRpbyBob3d0by4KCk1vbiBTZXAgMzAgMTM6MzE6MTUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBzcmVjLmM6ICBCZXR0ZXIgZXJyb3IgY2hlY2tpbmcsIHBhcnRseSBmcm9tIFBldGVyIFNjaGF1ZXIuCgkoc3JlY19vYmplY3RfcCk6ICBBdm9pZCBhc3N1bWluZyBhbnkgZmlsZSB0aGF0IHN0YXJ0cyB3aXRoICdTJyBpcwoJYW4gUy1yZWNvcmQgZmlsZSEgIChDaGVjayBmb3IgMyB1cHBlcmNhc2UtaGV4IGRpZ2l0cyBhZnRlciBpdC4pCgkoSVNIRVgpOiAgRGVmaW5lIG5ldyBtYWNybyBmb3IgY2hlY2tpbmcgc3VwcG9zZWRseSBoZXggY2hhcmFjdGVycy4KCShwYXNzX292ZXIpOiAgVHJlYXQgYXMgRU9GIGFueSBTLXJlY29yZCBsaW5lIHRoYXQ6CgkgICAgKiAgZG9lc24ndCBoYXZlIGhleCBpbiBlaXRoZXIgc2l6ZSBjaGFyYWN0ZXIKCSAgICAqICBwcm9kdWNlcyBhIHNpemUgbGFyZ2VyIHRoYW4gMHg3RgoJICAgICogIGhhcyBhbiB1bnJlY29nbml6ZWQgdHlwZSBudW1iZXIKClRodSBTZXAgMjYgMTU6Mjc6MjkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCwgYW91dHguaCwgYm91dC5jLCBjb2ZmY29kZS5oLCBob3N0LWFvdXQuYywgb2FzeXMuYywKCW9wbmNscy5jOiAgTGludCAoc2FiZXIgYWN0dWFsbHkpLgoKVGh1IFNlcCAyNiAxMToyNDoyNCAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGxpYmFvdXQuaCAoV1JJVEVfSEVBREVSUyk6IFNldCBoZWFkZXIncyBhX3RleHQgZmllbGQgYWx3YXlzLgoJKiBuZXdzb3MzLmM6IEZpeGVkIHR3byB0eXBlczogbmV3b3MzIC0+IG5ld3NvczMuCgkqIHJlbG9jLmMgKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24pOiBGaXggcGMtcmVsYXRpdmUgcmVsb2NhdGlvbgoJdG8gdXNlIGNvcnJlY3Qgc2VnbWVudC4KCk1vbiBTZXAgMjMgMTg6MjQ6MzQgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChwcmludF9zeW1ib2wpOiAgSGFuZGxlIG1pc3Npbmcgc3ltYm9sLT5uYW1lLgoKRnJpIFNlcCAyMCAxMjoyNjowMSAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYW91dGYxLmggKHN3YXBjb3JlX3NwYXJjKTogIENoYW5nZSBuYW1lIG9mIFVTUlNUQUNLLCBmaXggY29tbWVudAoJYXQgdG9wIG9mIHJvdXRpbmUuCgpUdWUgU2VwIDE3IDE3OjIzOjQ5IDE5OTEgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBvYXN5cy5jLCBjb25maWd1cmUuaW4sIGNvbmZpZy9oLWlyaXgzLCBjb25maWcvdC1pcml4MzoKCWFkZCBzZ2kvaXJpeCBzdXBwb3J0LgoKVGh1IFNlcCAxMiAxNDoyOTowOSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJQ2hhbmdlcyBmb3IgdGhlIEFNRCAyOTAwMCBVbHRyYWNvbXB1dGVyIHBvcnQgZnJvbSBEYXZpZCBXb29kLgoJKHdvb2RAbnl1LmVkdSkuCgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIpOiAgSGFuZGxlIE5PX0ZDTlRMLgoKCSogTWFrZWZpbGUuaW46ICBNYWtlIHN1YmRpcnMgd29yayBieSB1c2luZyAkKElOQ0RJUikgaW4gdGhlCgljcnVkZSBkZXBlbmRlbmNpZXMuCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3JlYWxfb2JqZWN0X3ApOiAgUGFzcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKCWN1cnJlbnQgZmlsZSdzIGNvZmYgc3ltYm9sIGZvcm1hdCB0byBCRkQgdmlhIHRoZSBjb2ZmX2RhdGEgc3RydWN0LgoJKGNvZmZfZmluZF9uZWFyZXN0X2xpbmUpOiAgb2JqX2ljb2YgPT4gY29mZl9kYXRhLgoJKGNvZmZfc3dhcF9zeW1fe2luLG91dH0pOiAgQ2hlY2sgdGhhdCBTWU1OTUxFTiA9PSBFX1NZTU5NTEVOLgoJKGNvZmZfc3dhcF9hdXhfe2luLG91dH0pOiAgQ2hlY2sgdGhhdCBGSUxOTUxFTiA9PSBFX0ZJTE5NTEVOCglhbmQgRElNTlVNID09IEVfRElNTlVNLgoJKiBjb25maWd1cmUuaW46ICBIYW5kbGUgYTI5ay0qLSogaG9zdHMsIGFuZCB0YXJnZXRzCglhMjlrLSotY29mZiwgYTI5ay0qLWFvdXQsIGFuZCBhMjlrLSotc3ltMS4KCSogbGliY29mZi1pbi5oOiAgQWRkIGxvY2FsX25fYnRtYXNrLCBsb2NhbF9uX2J0c2hmdCwKCWxvY2FsX25fdG1hc2ssIGxvY2FsX25fdHNoaWZ0LCBsb2NhbF9zeW1lc3osIGxvY2FsX2F1eGVzeiwKCWxvY2FsX2xpbmVzeiB0byBgY29mZl9kYXRhJyAodGRhdGEpIHN0cnVjdC4KCShjb2ZmX2RhdGEsIGNvZmZfZGF0YV90eXBlLCBjb2ZmX3RkYXRhKTogIFJlbmFtZSBzdHJ1Y3QgaWNvZmRhdGEuCgkqIGNvbmZpZy9oLXVsdHJhMzogIEhhbmRsZSBhMjlrLSotKiBob3N0cyBhcyBVbHRyYWNvbXB1dGVycy4KClRodSBTZXAgMTIgMTQ6MDc6MjIgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogJChNQUtFKSBmb3IgbWFrZSwgJChkb2NkaXIpIGZvciBkb2MKCSogZG9jL01ha2VmaWxlOiByZWR1bmRhbnQgZGVwZW5kZW5jaWVzIGZvciBTdW4tbWFrZSBWUEFUSCBidWcKClR1ZSBTZXAgMTAgMjA6MzQ6MTIgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYW91dGYxLmggKHN1bm9zNF9jb3JlX2ZpbGVfcCk6ICBSZWxlYXNlIHRoZSByaWdodCBzdG9yYWdlIGluCgllcnJvciBjYXNlLgoJKHN1bm9zNF9jb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3ApOiAgRml4IGhlYWRlciBjb21wYXJpc29uLgoJKiBhb3V0eC5oOiAgQXZvaWQgc2hpZnRzIG9mIDMyIGJpdHMsIHVuZGVmaW5lZCBpbiBDLiAgTGludC4KCSogYm91dC5jLCBpY29mZi5jLCBpZWVlLmMsIGxpYmJmZC5jLCBvYXN5cy5jOiAgZ2NjIC1PIC1XIGxpbnQuCgpXZWQgU2VwICA0IDAwOjQ0OjUyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglBbGxvdyBHREIgdG8gcGF0Y2ggb2JqZWN0IGZpbGVzLgoKCSogYW91dGYxLmggKHN1bm9zX2NvcmVfZmlsZV9wKTogIFNldCBTRUNfSEFTX0NPTlRFTlRTIG9uIGFsbCBzZWN0aW9ucy4KCSogdHJhZC1jb3JlLmggKHRyYWRfdW5peF9jb3JlX2ZpbGVfcCk6ICBEaXR0by4KCSogYW91dHguaCAoYW91dF9zZXRfc2VjdGlvbl9jb250ZW50cyk6ICBPbiBmaXJzdCBvdXRwdXQsIGNoZWNrCglhYmZkLT5kaXJlY3Rpb24gYW5kIGNvbXBsYWluIGlmIGVycm9uZW91cy4KCgkqIE1ha2VmaWxlLmluOiAgQWRkIGNydWRlIGRlcGVuZGVuY2llcy4KClR1ZSBTZXAgIDMgMTM6NDY6MTkgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy8qIGFvdXR4LmggY29uZmlndXJlKiBzaG9ydGVuZWQgYWxsIHRoZSBoL3RtYWtlLXh4eHgKCXRvIGgvdC14eHh4IGZpbGVzIHNvIHRoYXQgZXZlcnl0aGluZyB3aWxsIHdvcmsgb24gU3lzdGVtIFYuCgpGcmkgQXVnIDIzIDEzOjUxOjA2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGFvdXR4Lmg6ICBBZGQgaW5mb3JtYXRpb24gb24gaG9zdC1hb3V0LmMgYW5kIGhvdyB0byBjb25maWd1cmUKCXRvIHVzZSBpdCwgdG8gdGhlIG1hbnVhbC4KCSogY29uZmlndXJlLmluOiAgVGl4IHR5cG8uCgkqIGVjb2ZmLmM6ICBJZiBjb21waWxpbmcgZm9yIERFQzMxMDAsIHVzZSB0cmFkX3VuaXggY29yZSBmaWxlcywKCWVsc2UgZHVtbXkgb3V0IHRoZSBjb3JlIGZpbGUgc3VwcG9ydC4KCSogdHJhZC1jb3JlLmMgKHRyYWRfdW5peF9jb3JlX2ZpbGVfcCk6ICBJZiBIT1NUX0RBVEFfU1RBUlRfQUREUiBpcwoJc3BlY2lmaWVkLCB1c2UgaXQgdG8gbG9jYXRlIHRoZSBkYXRhIHNlY3Rpb24uCgkqIGNvZmZjb2RlLmggKGNvZmZfd3JpdGVfc3ltYm9scyk6ICBEZWNsYXJlIGJ1ZmZlciBhcyBiZmRfYnl0ZXMKCXJhdGhlciB0aGFuIGFzIGNoYXJzIChsaW50KS4KClRodSBBdWcgMjIgMjI6MjA6MTkgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhb3V0eC5oLCBjb2ZmY29kZS5oOiAgc2FiZXJpemVkLgoKVGh1IEF1ZyAyMiAxMToyNzowNiAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGJmZC50ZXhpbmZvOiBzb21lIGNsZWFudXAsIHJlaW5jb3Jwb3JhdGVkIG1vcmUgaW50cm8gbWF0dGVyIGZyb20KCWJmZC5kb2MKCWJmZC5jLCB0YXJnZXRzLmM6IG1pbm9yIHJld29yZGluZyBvZiBkb2Mgc2VnbWVudHMKCgpXZWQgQXVnIDIxIDE5OjEzOjIyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHRyYWQtY29yZS5jICh0cmFkX3VuaXhfY29yZV9maWxlX3ApOiAgVXNlIEhPU1RfVEVYVF9TVEFSVF9BRERSLAoJZXRjLCByYXRoZXIgdGhhbiBURVhUX1NUQVJUX0FERFIuCgkqIGhvc3QtYW91dC5jOiAgUmVtb3ZlICNpZiAwIGFyb3VuZCB3aG9sZSB0aGluZy4KCVVwZGF0ZSB0byBtb2Rlcm4gKDMyLzY0LWJpdCkgYS5vdXQgbmFtaW5nIGNvbnZlbnRpb25zLgoJSW5jbHVkZSBhIGxhcmdlIGNodW5rIG9mIC4uL2luY2x1ZGUvYS5vdXQuZ251LmggdG8gZ2V0IG1hY3JvcyB0aGF0CglhcmUgbm90IGRlZmluZWQgYnkgdGhlIHN5c3RlbSBpbmNsdWRlIGZpbGVzLgoJKGhvc3RfYW91dF97MzIsNjR9X3dyaXRlX29iamVjdF9jb250ZW50cyk6ICBVc2UgdGhlIFdSSVRFX0hFQURFUlMKCW1hY3JvIHVzZWQgYnkgdGhlIG90aGVyIGEub3V0IGltcGxlbWVudGF0aW9ucy4KCSogTWFrZWZpbGUuaW46ICBHaXZlIGRlcGVuZGVuY2llcyB0byBPUFRJT05BTF9CQUNLRU5EUy4KCldlZCBBdWcgMjEgMTQ6MzM6MDYgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogdXNlIHRhcmdldHMgImJmZC5kdmkiIGFuZCAiYmZkLnBzIiBpbnN0ZWFkIG9mCgl0ZXhkb2MgYW5kIHBzZG9jOyBtYWtlIHRoZXNlIGRlcGVuZCBvbiBnZW5lcmF0ZWQgLnRleGkncwoKCSogc2Nhbml0LCAobmV3KSB1blBST1RPOiB0dXJuIFBST1RPIG1hY3JvcyBpbnRvIEFOU0kgZGVjbGFyYXRpb25zIGluCglkb2MKCgkqIGJmZC5jLCByZWxvYy5jLCBzeW1zLmM6IG1pbm9yIHNwZWxsaW5nL3dvcmRpbmcgZml4ZXMgaW4gZG9jCglwb3J0aW9ucwoKCSogTWFrZWZpbGUuaW4sIGF3a3NjYW4taXAsIGF3a3NjYW4tcCwgaW50b2JmZCwKCWxpYmJmZC5oLCBsaWJjb2ZmLmgsIHRvbGliY29mZjsgbmV3IGJmZC1pbi5oLCBsaWJiZmQtaW4uaCwKCWxpYmNvZmYtaW4uaDogKGEpIHVzZSBzZXBhcmF0ZSBmaWxlcyBmb3IgaW52YXJpYW50IHBhcnRzIG9mIGJmZC5oLAoJbGliYmZkLmgsIGFuZCBsaWJjb2ZmLmg7IChiKSBpbiBnZW5lcmF0ZWQgcGFydHMgb2Ygc2FtZSwgdXNlIGxlc3MKCW9idHJ1c2l2ZSBtYXJrcyBpbmRpY2F0aW5nIC5jIG9yaWdpbnMuCgoJKiBiZmQudGV4aW5mbzogZ2VuZXJhbGl6ZSBtb3N0IHJlZmVyZW5jZXMgdG8gbGlua2VyCgpUdWUgQXVnIDIwIDE1OjE4OjAyIDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGluY2x1ZGUgY29yZS5wIGluIFBST1RPUyAoYnVpbGRpbmcgYmV0dGVyIGJmZC5oKQoJKiBhcmNodXJlcy5jOiByZW1vdmUgZW1wdHkgZm9vKCkgZGVmaW5pdGlvbiAoY3JlcHQgaW4gYXQgdm4xLjkpCgpNb24gQXVnIDE5IDEzOjQ4OjIyIDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYmZkLnRleGluZm86IHVzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb24gaW5zdGVhZCBvZiBsb3RzIG9mCglAcGFnZSdzOyBtaW5vciByZXBocmFzaW5nIGluIEludHJvZHVjdGlvbi4KCgkqIGFvdXR4LmgsIGFyY2hpdmUuYywgYXJjaHVyZXMuYywgYmZkLmMsIGJmZC50ZXhpbmZvLCBjYWNoZS5jLAoJY29mZmNvZGUuaCwgY29yZS5jLCBmb3JtYXQuYywgaWVlZS5jLCBsaWJiZmQuYywgbGliYmZkLmgsIGxpYmNvZmYuaCwKCW9hc3lzLmMsIG9wbmNscy5jLCByZWxvYy5jLCBzZWN0aW9uLmMsIHN5bXMuYywgdGFyZ2V0cy5jIChkb2N1bWVudGF0aW9uCglzZWdtZW50cyk6IHVzZWQgQkZEIChjYXBzKSBtb3JlIGNvbnNpc3RlbnRseSBhcyBhIG5hbWUgaW4KCWRpc2NvdXJzZSwgZml4ZWQgYSBmZXcgb3RoZXIgbWlub3IgdHlwb3MgYW5kIHVzZXMgb2YgZm9udHMKCgpUaHUgQXVnICA4IDE2OjQ3OjQzIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oOiBmaXhlZCBidWcgd2hlcmUgc3RyaW5nIHRhYmxlIHNpemUgd2Fzbid0IGJlaW5nIHN3YXBwZWQuCgpUaHUgQXVnICAxIDE2OjM1OjI4IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmM6IGFkZGVkIFNFQ19DT05TVFJVQ1RPUl9URVhUfERBVEF8QlNTIGZsYWdzCgoJKiBzeW1zLmM6IGFkZGVkIEJTRl9DT05TVFJVQ1RPUiwgQlNGX1dBUk5JTkcgYW5kIEJTRl9JTkRJUkVDVAoJZmxhZ3MuIChiZmRfcHJpbnRfc3ltYm9sX3ZhbmRmKSBub3cga25vd3Mgd2hhdCB0byBkbyB3aXRoIHRoZQoJYWJvdmUgZmxhZ3MuCgoJKiBhb3V0eC5oOiBtYWRlIHRyYW5zbGF0ZV9mcm9tX25hdGl2ZV9zeW1fZmxhZ3MgYW5kCgl0cmFuc2xhdGVfdG9fbmF0aXZlX3N5bV9mbGFncyBwcm9kdWNlIHRoZSBhYm92ZSBmbGFncy4KCgpXZWQgSnVsIDMxIDA5OjUzOjUyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGFsbCBmaWxlczogIHVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlcyBmb3IgR1BMIHZlcnNpb24gMi4KCUluc3RhbGwgaGVhZGVyIGNvbW1lbnRzIGFuZCBhdHRyaWJ1dGUgbW9zdCBtb2R1bGVzIHRvIHRoZWlyCglhdXRob3JzLiAgQkZEJ3MgbmFtZSBpcyBub3cgb2ZmaWNpYWxseSAiQmluYXJ5IEZpbGUgRGVzY3JpcHRvciIsCglzbyByZW1vdmUgYW55IGNvbmZsaWN0aW5nIHBlam9yYXRpdmVzLgoJYXJjaHVyZXMuaDogIENvbnNpc3RzIHNvbGVseSBvZiBjb21tZW50czsgcmVtb3ZlIGl0LgoKRnJpIEp1bCAyNiAxODoxMTozNCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGJmZC5jOiBNYWRlIGl0IGNvbXBpbGUgYWdhaW4uCgpGcmkgSnVsIDE5IDA4OjE3OjA5IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBuZXdzb3MzLmMsIHRhcmdldHMuYywgY29mZmNvZGUuaDogbmV3IHBhdGNoZXMgZnJvbSBEYXZpZCBXb29kCgoKTW9uIEp1bCAxNSAxNjoyNzo0MiAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYW91dGYxLmggYXJjaGl2ZS5jIGJmZC5jIGNvZmZjb2RlLmggY29yZS5jIGVjb2ZmLmMgaWVlZS5jCgliZmQudGV4aW5mbyBvYXN5cy5jIG9wbmNscy5jIHJlbG9jLmMgc3JlYy5jOiBNb3JlIGRvY3VtZW50YXRpb24gb24KCWxpbnQgZml4ZXMuCgoJKiBhbWRjb2ZmLmMgYmZkLnRleGluZm8gTWFrZWZpbGUuaW4gOiBGb2xkZWQgaW4gY2hhbmdlcyBmb3IgYW1kCgkyOWsgY29mZiBieSBEYXZpZCBXb29kICh3b29kQGxhYi51bHRyYS5ueXUuZWR1KS4KClRodSBKdWwgIDQgMDk6NTM6MTYgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIEV2ZXJ5dGhpbmc6IGNyZWF0ZWQgc29tZSBuZXcgZmlsZXMsIGNvcmUuYyBmb3JtYXQuYywgcmVsb2MuYywKCXNlY3Rpb24uYyBhbmQgc3ltcy5jIHRvIHNwbGl0IHRoZSBmdW5jdGlvbmFsaXR5IGEgYml0IGJldHRlci4KCUNsZWFuZWQgdXAgdGhlIHJlc3Qgb2YgdGhlIGZpbGVzIGEgYml0LCBhbmQgYWRkZWQgc29tZQoJZG9jdW1lbnRhdGlvbi4KCgpNb24gSnVsICAxIDEzOjI5OjQ3IDE5OTEgIERhdmlkIFdvb2QgKHdvb2QgYXQgZGF2aWQudWx0cmEubnlhLmVkdSkKCgkqIG9wbmNscy5jLCAuLi9pbmNsdWRlL3N5cy9oLXN1bjMuaCAuLi9pbmNsdWRlL3N5cy9oLXN1bjQuaDogZmNudGwKCXJlYWxseSB0YWtlcyAzIGFyZ3VtZW50cywgcGF0Y2hlZCBjb2RlIGFuZCBhbW1lbmRlZCBwcm90b3R5cGVzLgoKRnJpIEp1biAxNCAxMzoxOTo0MCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogLi4vaW5jbHVkZS9iZmQuaCAoc3RydWN0IGJmZF90YXJnZXQpOiBBZGRlZCBuZXcgZmllbGQKCSJhbGlnbl9wb3dlcl9taW4iIHdoaWNoIGNvbnRhaW5zIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgYQoJc2VjdGlvbi4gVGhpcyBpcyB1c2VkIGluIGNvZmZfbmV3X3NlY3Rpb25faG9vay4gVGhlIGZpZWxkCglpbnNlcnRpb24gbmVjZXNzaXRhdGVzIGFuIHVwZGF0ZSBvZiBhbGwgYmFja2VuZHMuLgoKCSogYW91dGYxLmgganVtcCB0YWJsZSBmaWVsZCBpbnNlcnRlZAoKCSogYXJjaGl2ZS5jKHNuYXJmX2FyX2hkcikoYmZkX3NsdXJwX2NvZmZfYXJtYXApIGNhbiBub3cgcGFyc2UgZGd1eCBzdHlsZSBleHRlbmRlZAoJZmlsZW5hbWVzIHRvby4KCgkqIGJvdXQuYyhiX291dF9zcXVpcnRfb3V0X3JlbG9jcykgZml4IHRvIGFzc2VydGlvbiB0ZXN0cy4gSnVtcAoJdGFibGUgZmllbGQgaW5zZXJ0ZWQuCgoJKiBjb2ZmY29kZS5oKGp1c3QgYWJvdXQgZXZlcnl0aGluZykgTm93IHBhdGNoZXMgdXAgc3ltYm9sIHRhYmxlcwoJdXNpbmcgYSBkaWZmZXJlbnQgbWVjaGFuaXNtLiBUaGUgSW50ZWwgbWFqb3IgYnVnIGhhcyBiZWVuIGZpeGVkLAoJYW5kIHRoZSBsaW5rZXIgY2FuIHNlbGYgaG9zdCBvbiB0aGUgQXZpaW9uIGFuZCBiZSBkZWJ1Z2dlZCB3aXRoCglnZGIuCgoJKiBlY29mZi5jOiBuZXcgaW5jbHVkZSBhbmQganVtcCB0YWJsZSBwYXRjaCwgaTM4NmNvZmYuYzogbmV3CglpbmNsdWRlIGFuZCBqdW1wIHRhYmxlIHBhdGNoLCAgaWNvZmYuYzogbmV3IGluY2x1ZGUgYW5kIGp1bXAgdGFibGUKCXBhdGNoLCBpZWVlLmM6IGNhbiBub3cgcmVhZCBhcmNoaXZlcyBjb250YWluaW5nIGllZWUgbW9kdWxlcy4sCglsaWJjb2ZmLmg6IGFkZGVkIChjb21iaW5lZF9lbnRyeV90eXBlKSwgbGliaWVlZS5oOiB1cGVkIG1heAoJc2VjdGlvbnMgdG8gMjAsIG02OGtjb2ZmLmM6IG5ldyBpbmNsdWRlIGFuZCBqdW1wIHRhYmxlIHBhdGNoLAoJbTg4a2Jjcy5jOiBuZXcgaW5jbHVkZSBhbmQganVtcCB0YWJsZSBwYXRjaCwgb2FzeXMuYzogdmFyaW91cyBidWdzCglmaXhlZC4gb3BuY2xzLmM6IGFkZGVkIGJmZF9hbGxvY19ncm93IGFuZCBiZmRfYWxsb2NfZmluaXNoLgoJc3JlYy5jOiBqdW1wIHRhYmxlIHBhdGNoLiB0cmFkLWNvZGUuYyBmaXhlZCAjSUYgdHlwZW8KCkZyaSBKdW4gIDcgMTI6MzU6NDYgMTk5MSAgU2VhbiBGYWdhbiAgKHNlZiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCiAJKiBjb2ZmY29kZS5oIChjb2ZmX3N3YXBfYXV4X2luKTogYWRkZWQgZWxzZSBjYXNlIHRvIGRlYWwgd2l0aAogCWZpbGVuYW1lcyBsZXNzIHRoYW4gOSBjaGFyYWN0ZXJzLgoKClRodSBKdW4gIDYgMTg6Mjc6MzggMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIC4uL2luY2x1ZGUvb2FzeXMuaCBvYXN5cy5jIChvYXN5c19hcmNoaXZlX3ApOiBmaXhlZCBzbyBpdCB3b3JrcwoKCSogc3JlYy5jOiBub3cgYWxsb3dzIGFueSBudW1iZXIgb2Ygc2VjdGlvbnMgdG8gYmUgY3JlYXRlZCBpbiBhCglmaWxlLiBPdXRwdXRzIGFkZHJlc3NlcyBvZiB0aGUgcmlnaHQgbGVuZ3RoLgoKVGh1IE1heSAzMCAxNTozMDoxMCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYmZkLmMgKGJmZF9jaGVja19mb3JtYXQpOiBGaXhlZCBwcm9ibGVtIHdoZXJlIHdoZW4gYSBkZWZhdWx0ZWQKCXRhcmdldCBkaWRuJ3QgbWF0Y2gsIHRoZSBmb3JtYXQgZ290IHNldCB0byB0aGUgYXR0ZW1wdGVkIG1hdGNoLAoJYnJlYWtpbmcgYSBmdXR1cmUgdGVzdC4KCiAgICAgICAgKi4uL2luY2x1ZGUvaTM4NmNvZmYuaCA6IGZpeGVkIHR5cG8gaW4gdHlwZSBmaWVsZCB3aXRoIHNpemUKCgkqIGkzODZjb2ZmLmMgaWNvZmYuYyBtODhrLWJjcy5jIGVjb2ZmLmMgLi4vaW5jbHVkZS9iZmQuaCA6IEFkZGVkCglzdXBwb3J0IGluIHRoZSBqdW1wIHRhYmxlIGZvciB0aGUgc3dhcHBpbmcgcm91dGluZXMgZXhwb3J0ZWQgdG8KCWdkYi4gTm93IGdkYiB3b3JrcyB3aXRoIHRoZSAzODYuCgpUdWUgTWF5IDI4IDE3OjIxOjQzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIE1lcmdlIGluIGNoYW5nZXMgZnJvbSBnZGItMy45NSByZWxlYXNlLgoJTWFrZWZpbGUuaW46ICBBbGxvdyBobWFrZSBhbmQgdG1ha2UgZmlsZXMgdG8gYWRkIE9GSUxFUy4KCWFvdXRmMS5oOgoJYmZkLmM6ICBzdXBwb3J0IHNwZWNpZmljIHRhcmdldHMgYXMgd2VsbCBhcyBzZWFyY2hpbmcuICBXaGVuCglzZWFyY2hpbmcsIHRha2UgZGVmYXVsdCB0YXJnZXQgaW4gcHJlZmVyZW5jZSB0byBvdGhlcnMuCgliZmQuZG9jOiAgdHlwb3MKCWllZWUuYywgb2FzeXMuYzogIEF2b2lkIHVzaW5nIHRoZSAidGRhdGEiIG1hY3JvcyBsZWZ0IG9mIGFzc2lnbm1lbnQuCglsaWJhLm91dC5oOiAgRG9uJ3QgaGFyZC1jb2RlIGZpbGUgb2Zmc2V0czsgdXNlIE5fIG1hY3JvcyBmb3IgdGhlbS4KCWxpYmJmZC5oOiAgU3VwcG9ydCBzcGVjaWZpYyB0YXJnZXRzIGFzIHdlbGwgYXMgc2VhcmNoaW5nLgoJb3BuY2xzLmM6ICBTdXBwb3J0IHNwZWNpZmljIHRhcmdldHMgYXMgd2VsbCBhcyBzZWFyY2hpbmcuCgl0YXJnZXRzLmM6ICBTZWFyY2ggaXMgc2hvcnQtY2lyY3VpdGVkIGlmIGRlZmF1bHQgdGFyZ2V0IG1hdGNoZXMuCglsaWJvYXN5cy5jLCBsaWJpZWVlLmM6ICBVbmRvIGJvdGhuZXIgY2hhbmdlcyB0aGF0IG1ha2UgbWFjcm9zCgl3b3JrIHRvIHRoZSBsZWZ0IG9mIGFzc2lnbm1lbnQsIGJ1dCB3aGljaCBkZXBlbmQgb24gdGhlCglyZXByZXNlbnRhdGlvbnMgb2YgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgYmVpbmcgdGhlIHNhbWUuCgpGcmkgTWF5IDI0IDE4OjU2OjUyIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpMzg2Y29mZi5jOiBjcmVhdGVkLgoJKiBjb2ZmY29kZS5oOiBhZGRlZCBzdXBwb3J0IGZvciAzODYuCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBzdXBwb3J0IGZvciAzODYuCgkqIC4uL2luY2x1ZGUvaTM4NmNvZmYuaDogY3JlYXRlZAoKV2VkIE1heSAyMiAwNzoyNjozOCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaDogcmVtb3ZlZCBhbGwgcHV0X3hfPHNpemVzPgoJKiBsaWJiZmQuYzogQ2hhbmdlZCAjaWZkZWYgX19HTlVDX18gdG8gI2lmZGVmIEhPU1RfNjRfQklULCBBZGRlZAoJREVGVU5TCgoKVHVlIE1heSAyMSAwODo1ODo1OCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoJKGJvdGhuZXIpCgkqIG9wbmNscy5jOiBDaGFuZ2VkIG9ic3RhY2tfY2h1bmtfYWxsb2MgdXNlIHhtYWxsb2MKCk1vbiBNYXkgMjAgMTc6MTI6MTcgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGV2ZXJ5dGhpbmc6IFJlbW92ZWQgc3lzZGVwLmggZnJvbSBiZmQuaCBhbmQgcHV0IGJhY2sgaW50byBmaWxlcwoJZnJvbSB3aGljaCBpdCB3YXMgc3BsaXQgb3V0LiBOb3cgNjQgYml0IHZlcnNpb24gaXMgYnVpbHQgd2l0aCBhCgktREhPU1RfNjRfQklUPSJsb25nIGxvbmciIG9uIHRoZSBjb21waWxlIGxpbmUuCgpGcmkgTWF5IDE3IDE5OjM1OjI2IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJQ2hhbmdlZCBhbGwgdGhlIFtnZXR8cHV0XVtuYW1lXSByb3V0aW5lcyB0byB1c2UgIFtnZXR8cHV0XV9bc2l6ZQoJaW4gYnl0ZXNdLgoKCVB1dCBpbiBzdXBwb3J0IGZvciA2NCBiaXQgd29yay4gTm93IHR3byB2ZXJzaW9ucyBvZiBiZmQgbWF5IGJlCglnZW5lcmF0ZWQsIGFjY29yZGluZyB0byB0aGUgc3RhdGUgb2YgVEFSR0VUXzY0X0JJVCwgb25lIHdoaWNoIGlzCgkzMiBiaXQgb25seSwgYW5kIG9uZSB3aGljaCBpcyA2NC8zMiBiaXRzLgoJQ3JlYXRlZCBuZXcgYmFjayBlbmQgJ2RlbW82NCcgdG8gdGVzdCA2NCBiaXQgZnVuY3Rpb25hbGl0eS4KCglSZW5hbWVkIHNvbWUgZmlsZXMgdG8gd29yayBvbiBET1MuCgoJKiBhcmNoaXZlLmM6IGxpbnQgKiBiZmQuYzogcHJvdG90eXBlcyBhbmQgbGludC4gKiBlY29mZi5jOiBhZGRlZAoJNjRiaXQgdHJhbnNmZXIgCSogaWNvZmYuYzogYWRkZWQgNjRiaXQgdHJhbnNmZXIgKiBpZWVlLmM6IG5hbWUKCWNoYWdlLCA2NCBiaXQgdHJhbnNmZXIuICogbGliYS5vdXQuaDogU3BsaXQgb3V0IGNvbW1vbiBjb2RlIGZyb20KCXN1bm9zIGFuZCBuZXdzb3MgaW50byBsaWJhLm91dC4gTmFtZSBjaGFuZ2VzIGFuZCBwcm90b3R5cGUgbW9kcy4gKgoJbGliYmZkLmM6IGxpbnQgYW5kIHByb3RvdHlwZXMsIGV4dHJhIDY0Yml0IHN3YXBzLiAqIGxpYmJmZC5oOgoJcHJvdG90eXBlcyBmb3IgbmV3IGZ1bmN0aW9ucy4gKiBsaWJjb2ZmLmg6IGxpbnQgKiBsaWJpZWVlLmg6IG1ha2UKCXdvcmsgb24gRE9TICogbGlib2FzeXMuaDogbWFrZSB3b3JrIG9uIERPUyAqIG04OGstYmNzLmM6IE5hbWUKCWNoYW5nZSBhbmQgNjRiaXQgc3R1ZmYuKiBuZXdzb3MzLmM6IGNvbW1vbiBjb2RlIHJlbW92ZWQsIG5ldyBqdW1wCgl0YWJsZS4gKiBvYXN5cy5jOiBOYW1lIGNoYW5nZSAqIG9wbmNscy5jOiBQb3J0YWJpbGl0eSBmaXhlcyAqCglzcmVjLmM6IE5hbWUgY2hhbmdlcyAqIHN1bm9zLmM6IFJlbW92ZWQgY29tb24gY29kZS4gKiB0YXJnZXRzLmM6CglBZGRlZCBkZW1vICogYW91dDMyLCBhb3V0NjQuYyBpbmNsdWRlICBhb3V0eC5oICogYm91dC5jOiB1c2VkIHRvCgliZSBjYWxsZWQgYi5vdXQuYyAqIGNvZmZjb2RlLmg6IHVzZWQgdG8gYmUgY2FsbGVkIGNvZmYtY29kZS5oLCBub3cKCTY0Yml0IGl6ZWQuICogZGVtbzY0LmM6IDY0IGJpdCBhLm91dCBiYWNrIGVuZAoKVGh1IE1heSAxNiAxNjowMjowNyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoJZnJvbSBib3RobmVyCiAJKiBsaWJpZWVlLmg6IE1ha2UgaWVlZV9kYXRhIGFuZCBpZWVlX2FyX2RhdGEgbWFjcm9zIHVzYWJsZQoJb24gTEhTIG9mIGFzc2lnbm1lbnQsIGV2ZW4gd2hlbiB1c2luZyBvbGQgY29tcGlsZXJzLgoJKiBsaWJvYXN5cy5oOiBEaXR0byBmb3Igb2FzeXNfZGF0YSBhbmQgb2FzeXNfYXJfZGF0YS4KCSogbTY4a2NvZmYuYzogQWRkIGVudW0tdG8taW50IGNhc3RzIHRvIGFjY29tb2RhdGUgb2xkIGNvbXBpbGVycy4KCSogbmV3c29zMy5jOiBGaXggZGVmaW5pdGlvbnMgb2YgU0VHTUVOVF9TSVpFIGFuZCBURVhUX1NUQVJUX0FERFIuCgkqIG9wbmNscy5jOiBEZWZpbmUgU19JWFVTUiwgU19JWEdSUCwgU19JWE9USCBpZiB1bmRlZmluZWQuCgkqIHRhcmdldHMuYzogQWRkIGRlY2xhcmF0aW9uIG9mIG5ld3NvczNfdmVjLgoKTW9uIE1heSAxMyAxMDowMzoyOSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYW91dC5jOiBmaXh4ZWQgc29tZSBvZiB0aGUgcHJvYmxlbXMgd2l0aCBmaWxlcG9zIGNhbGN1bGF0aW9uLgoJKHN3YXBfZXh0X3JlbG9jKTogZml4ZWQgcHJvYmxlbSB3aXRoIGNyZWF0aW9uIG9mIHJlbG9jcy4KCShhb3V0X3NldF9zZWN0aW9uX2NvbnRlbnRzKTogZml4ZWQgZmlsZXBvcyBwcm9ibGVtCgoJKiBjb2ZmLWNvZGUuaDogKHN3YXBfZmlsZWhkcl9pbiwgc3dhcF9maWxlaGRyX291dCkgYWRkLgoJKHN3YXBfZmlsZWhkcikgZGVsZXRlLiBDaGFuZ2VkIGFsbCB0aGUgdXNhZ2Ugb2YgYmZkX2hfcHV0X3guCgkoc3dhcF9hb3V0aGRyX2luLCBzd2FwX2FvdXRoZHJfb3V0KSBhZGQuIChzd2FwX2FvdXRoZHIpIGRlbGV0ZS4KCShjb2ZmX3JlYWxfb2JqZWN0X3ApIGNsZWFuZWQgdXAsIGFkZGVkIE1JUFMuIChjb2ZmX29iamVjdF9wKQoJY2xlYW5lZCB1cC4gKGNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKSBjbGVhbmVkIHVwLgoKCSogZWNvZmYuYzogVG90YWxseSBkaWZmZXJlbnQuIE5vdyBzdXBwb3J0cyBlY29mZiBmdWxseS4KCgkqIGljb2ZmLmM6IGZpeGVkIHByb2JsZW1zIGluIHJlbG9jYXRpb24gY2FsbG91dC4KCgkqIGxpYmNvZmYuaDogKHN0cnVjdCBpY29mZGF0YSkgcmVtb3ZlZCBoZHIgc3RydWN0dXJlIGZyb20gdGRhdGEuCgoJKiBtNjhrY29mZi5jOiB1cGRhdGVkIHRhcmdldCB2ZWN0b3IuCgoJKiBzdW5vcy5jOiAoY2hvb3NlX3JlbG9jX3NpemUpIGFkZGVkOiAoc3Vub3M0X2NhbGxiYWNrKSBjYWxscwoJY2hvb3NlX3JlbG9jX3NpemUuIChzdW5vczRfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKSBub3cgY2FsbHMKCWNob29zZV9yZWxvY19zaXplIHNvIG91dHB1dHMgcmVsb2NzIGNvcnJlY3RseSwgYWxzbyBjYWxjdWxhdGVzIHRoZQoJc2l6ZSBvZiB0aGUgc2VjdGlvbnMgY29ycmVjdGx5LgoKCgpGcmkgTWF5IDEwIDE2OjU4OjUzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglNZXJnZSBQZXIgQm90aG5lcidzIGNoYW5nZXMgdG8gbW9kdWxhcml6ZSBCRkQgYS5vdXQgYSBiaXQuCgoJKiBsaWJiZmQuaCwgbGliYmZkLmMgKGJmZF9nZW5lcmljX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogIEFkZC4KCSogaWVlZS5jOiAgQ2FzdCBlbnVtcyB0byBpbnQgYmVmb3JlIGNvbXBhcmluZyB0aGVtLCBmb3IgYnJhaW4tCglkZWFkIGNvbXBpbGVycy4KCSogY29mZi1jb2RlLmg6ICBSZW1vdmUgY29mZl9nZXRfc2VjdGlvbl9jb250ZW50cywgYW5kIHVzZSB0aGUKCWdlbmVyaWMgb25lIGluc3RlYWQuCgoJKiBhb3V0LmM6ICBEZXJpdmUgbmV3IG1vZHVsZSBmcm9tIHN1bm9zLmMsIGNvbnRhaW5pbmcgZ2VuZXJpYwoJc3VwcG9ydCBjb2RlIGZvciBhbGwga2luZHMgb2YgYS5vdXQgZmlsZXMuCgoJKiBzdW5vcy5jOiBSZW1vdmUgYWxsIGNvZGUgdGhhdCBnb2VzIGluIGFvdXQuYy4gIFNwbGl0IG91dAoJbWFjaGluZSBkZXBlbmRlbnQgZm9sbG93dXAgaW4gc3Vub3M0X29iamVjdF9wIGludG8KCXN1bm9zNF9jYWxsYmFjay4gIFVzZSBKVU1QX1RBQkxFKGFvdXQpIGZvciB0aGUgdHJhbnN2ZXIgdmVjdG9yLAoJYW5kIHJlZGVmaW5lIG9ubHkgdGhlIG5hbWVzIHdlIENIQU5HRSwgbm90IGFsbCB0aGUgbmFtZXMuICBEcm9wCgl0aGUgbGl0dGxlLWVuZGlhbiB2ZWN0b3IsIGFuZCByZW5hbWUgdGhlIHZlY3RvciBhcyBzdW5vczQgcmF0aGVyCgl0aGFuIGdlbmVyaWMuCgoJKiBiLm91dC5jOiAgVXNlIGFvdXQuYyByb3V0aW5lcyBmb3IgbW9zdCBvZiB0aGUgd29yay4gIFNsaWdodAoJY2hhbmdlcyBmb3IgdGhlIG5ldyByZWdpbWUuICBSZW1vdmUgY2xvc2VfYW5kX2NsZWFudXAgYW5kCglnZXRfc2VjdGlvbl9jb250ZW50cyBpbiBmYXZvciBvZiBnZW5lcmljcy4gIE5ldyB0cmFuc2ZlciB2ZWN0b3IKCXJlZ2ltZS4KCgkqIG5ld3Nvcy5jOiAgTmV3IHN1cHBvcnQgZm9yIFNvbnkgTkVXUywgYW5vdGhlciBhLm91dCBmb3JtYXQuCgoJKiBlY29mZi5jOiAgUmVtb3ZlIGNsb3NlX2FuZF9jbGVhbnVwLiAgTmV3IHR2ZWMgcmVnaW1lLgoJKiBpY29mZi5jLCBtODhrLWJjcy5jOiAgQWRkIHdyaXRlX2NvbnRlbnRzIHRvIHR2ZWMuCgkqIGllZWUuYywgb2FzeXMuYzogIFJlbW92ZSBjbG9zZV9hbmRfY2xlYW51cCwgYWRkIHdyaXRlX2NvbnRlbnRzCgl0byB0dmVjLgoJKiBvcG5jbHMuYyAoYmZkX2Nsb3NlKTogIENhbGwgZm9ybWF0LWRlcGVuZGVudCB3cml0ZV9jb250ZW50cwoJcm91dGluZSwgaWYgd3JpdGluZywgYmVmb3JlIGNhbGxpbmcgdGFyZ2V0LWRlcGVuZGVudAoJY2xvc2VfYW5kX2NsZWFudXAgcm91dGluZSAod2hpY2ggaXMgbm93IGFsd2F5cyBnZW5lcmljLCBJIHRoaW5rKS4KCSogc3JlYy5jOiAgVXNlIGJmZF9hbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFJlbW92ZQoJY2xvc2VfYW5kX2NsZWFudXAgYW5kIG1vdmUgY29kZSBmcm9tIGl0IHRvCglzcmVjX3dyaXRlX29iamVjdF9jb250ZW50cy4gIEFkZCB3cml0ZV9jb250ZW50cyB0byB0dmVjLgoJKiB0YXJnZXRzLmM6ICBSZW1vdmUgYS5vdXQgbGl0dGxlIHZlY3RvciwgcmVwbGFjZSBhLm91dCBiaWcKCXZlY3RvciB3aXRoIFN1bk9TIHZlY3Rvci4gIEZJWE1FOiAgTmVlZCBWYXggc3VwcG9ydCBhZ2FpbiBub3cuCgoJKiBsaWJiZmQuaDogIEFkZCB3cml0ZV9jb250ZW50cyBmb3JtYXQtZGVwZW5kZW50LXZlY3RvciB0byB0aGUKCWJmZF90YXJnZXQgdmVjdG9yLiAgU3VwcGx5IGEgZ2VuZXJpYyBjbG9zZV9hbmRfY2xlYW51cCByb3V0aW5lLgoJKiBsaWJhLm91dC5oOiAgSGFuZGxlIHRoZSBuZXcgYW91dC5jIHNwbGl0LiAgQWRkIHByb3RvdHlwZXMgZm9yCglhbGwgcm91dGluZXMgZGVmaW5lZCBpbiBhb3V0LmMuICBSZW5hbWUgInN1bm9zIiB0aGluZ3MgdG8gImFvdXQiCgl0aGluZ3MuICBBZGQgYSBmZXcgZmllbGRzIHdoZXJlIG5lZWRlZCBmb3IgdmFyaW91cyBmb3JtYXRzLgoJKiBNYWtlZmlsZS5pbjogIEFkZCBhb3V0LmMgYW5kIG5ld3Nvcy5jLgoKCSogYXJjaGl2ZS5jLCBpZWVlLmMsIG9hc3lzLmM6ICBMaW50LgoKRnJpIE1heSAxMCAxMjozNDo0OCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogLi4vaW5jbHVkZS9iZmQuaAoJY2hhbmdlZCBmb3J3YXJkIGRlY2xhcmF0aW9uIHN0cnVjdCBzdGF0OyB0byByZWR1Y2Ugd2FybmluZ3MuIENoYW5nZWQKCWNvbW1lbnQgb24gYmZkX2hfPHg+X3guCgoJKiAuLi9pbmNsdWRlL202OGtjb2ZmLmgsIC4uL2luY2x1ZGUvaW50ZWwtY29mZi5oLAoJLi4vaW5jbHVkZS9tODhrLWJjcy5oCglOb3cgdGhlcmUgYXJlIHR3byBpbmNhcm5hdGlvbnMgb2YgcmVsb2NzLCBsaW5lbm9zIGFuZCBzeW1lbnRzLiBPbmUgZm9yCglpbnRlcm5hbCBkaWdlc3Rpb24sIGFuZCBvbmUgZnVsbCBvZiBjaGFyIGFycmF5cyBmb3IgSS9PLiBUaGUgb3JpZ2luYWwKCW5hbWVzIGhhdmUgZ29uZSB0byBkZXRlY3QgZXJyb3JzLgoKCSogTWFrZWZpbGUuaW4sIG02OGtjb2ZmLmMsIHRhcmdldHMuYwoJVGVzdCBuZXcgc3RydWN0dXJlIGNvZGUgd2l0aCBhIDY4ayBjb2ZmIGltcGxlbWVudGFpb24KCgkqIGNvZmYtY29kZS5oLCBpY29mZi5jLCBjb2Zmc3dhcC5jLCBsaWJjb2ZmLmgKCUZpeGVkIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoZXJlIHdlcmUgcHJvYmxlbXMgd2l0aCB0aGUgc2l6ZSBhbmQKCWFsaWdubWVudHMgb2Ygc3RydWN0dXJlcyBvbiBkaXNrIGFuZCBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gI2lmZWQgb3V0CglhbGwgdGhlIGNvZGUgaW4gY29mZnN3YXAuYywgc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgdXNpbmcgdGhlIHRhcmdldAoJc3dhcCByb3V0aW5lcyBub3cuCgpUaHUgTWF5ICA5IDExOjAwOjQ1IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpZWVlLmMgKGRvX29uZSwgaWVlZV9zbHVycF9zZWN0aW9uX2RhdGEpOiBub3cgc3VwcG9ydHMgdGhlIGxvYWQKCW11bHRpcGxlIHJlbG9jIGNvbW1hbmQuCgoJKiBzdW5vcy5jIChzdW5vczRfc2V0X3NlY3Rpb25fY29udGVudHMpOiBNYWRlIGl0IHNvIHRoYXQgc2VjdGlvbnMKCWFyZSBhbHdheXMgcGFkZGVkIHRvIHRoZWlyIGFsaWdubWVudCBzaXplLgoKU2F0IE1heSAgNCAxNTo0OTo0MyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMsIGJmZC5jLCBjb2ZmLWNvZGUuaCwgb3BuY2xzLmMsIHN1bm9zLmMsIHRyYWQtY29yZS5jOgoJQ2xlYW4gdXAgdHlwZXMgYW5kIHN1Y2ggKHNhYmVyIEMgcHJvYmxlbXMpLgoJKiBlY29mZi5jOiAgQ2xlYW4gdXAgdHlwZXMgYW5kIHN1Y2guICBSZW1vdmUgcm91dGluZXMgdGhhdCBhcmUKCW5vdCB1c2VkLiAgRml4IHVwIHJlYWRpbmcgYW5kIHN3YXBwaW5nIG9mIHNob3J0cyBmcm9tIGZpbGVzLgoKICAgTm90ZXMgb24gYmZkLTAuNS4yLXBhdGNoMWEsIGZyb20gUGVyIEJvdGhuZXI6CgoJKiBhLm91dC52YXguYzogUmVtb3ZlIHR3byBib2d1cyAic3RhdGljIiBmcm9tIHByb3RvdHlwZXMuCgoJKiBlY29mZi5jOiBHb3QgcmlkIG9mIGxvdHMgb2Ygbm9uLXdvcmtpbmcganVuayAodGhhdCBoYWQKCWJlZW4gY29waWVkIGRpcmVjdGx5IGZyb20gY29mZi1jb2RlLmgpLgoJVXBkYXRlZCB0byBiZSBjb25zaXN0ZW50IHdpdGggdXBkYXRlcyB0byBpY29mZi5jIGFuZCBjb2ZmLWNvZGUuaC4KCgkqIGxpYmJmZC5oOiBBZGRlZCBkZWZpbml0aW9ucyBmb3IgU19JWFVTUiwgU19JWEdSUCwgYW5kIFNfSVhPVEgKCWlmIHRoZXkncmUgbWlzc2luZyAoYXMgdGhleSBhcmUgaW4gKEJEUy00LjMtYmFzZWQpIE5ld3NPUy0zKS4KCgkqIHN1bm9zLmMgKG5fdHh0b2ZmKTogKFJlLSlBZGQgc3VwcG9ydCBmb3Igc29ueS4gVGhpcyBpcyBhIGtsdWRnZSwKCWJ1dCB1bnRpbCB0aGUgdGFyZ2V0X3ZlY3RvciBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwKCWl0J3MgYXMgZ29vZCBhcyBhbnkuIE5vdGUgdGhhdCB0aGUgdGV4dCBvZmZzZXQgaXMgdGhlIG9ubHkKCWRpZmZlcmVuY2UgYmV0d2VlbiBOZXdzT1MgYW5kIFN1bk9zIChpbmNsdWRpbmcgbWFnaWMgbnVtYmVycykuCgkoTW9zdCBvZiB0aGUgc3Vub3NfKiByb3V0aW5lcyBzaG91bGQgdG8gcmVuYW1lZCBic2RfKgoJYW5kIG1vdmUgdG8gYSBic2QuYyBmaWxlLiBUaGVuIChhbmQgd2hlbiB0aGUgdGFyZ2V0X3ZlY3RvcgoJaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQpIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gY3JlYXRlCglhIHNlcGFyYXRlIFNvbnkgdGFyZ2V0LikKCgkqIHN5c2RlcC5oOiBEb24ndCBkZWNsYXJlIGZyZWFkIGFuZCBmd3JpdGUuIENhdXNlcyB0cm91YmxlCglvbiBzb21lIHN5c3RlbXMsIGFuZCBkb2Vzbid0IGhlbHAgb24gb3RoZXJzLgoJU2ltaWxhcmx5LCBvbmx5IGRlZmluZSBYX09LIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgoJKiB0cmFkLWNvcmUuYzogRG9uJ3QgaW5jbHVkZSBzeXMvc3RhdC5oIC0gYXQgbGVhc3QKCW9uIE5ld3NPUyAzLCBpdCBoYXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLgoKVHVlIE1hciAgNSAwMTo0Nzo1NyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBjb2ZmLWNvZGUuaCAoYmZkX2NvZmZfc3dhcF9zeW0sIGJmZF9jb2ZmX3N3YXBfYXV4LAoJYmZkX2NvZmZfc3dhcF9saW5lbm8pOiAgRXhwb3J0IHRoZSByb3V0aW5lcyB0aGF0IGJ5dGUtc3dhcCBDT0ZGCglzeW1ib2wgdGFibGVzIGlmIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgdGhlbSBpbiwgc28gZ2RiIGNhbiB1c2UKCXRoZW0uICBBZGQgImJmZF9jb2ZmXyIgdG8gdGhlIG5hbWVzIHNvIHRoZXkgd29uJ3QgY29uZmxpY3Qgd2l0aAoJbmFtZXMgaW4gY2FsbGluZyBwcm9ncmFtcy4gIEZJWE1FLXNvb246ICBpZiBjb2ZmLWNvZGUuaCBpcwoJaW5jbHVkZWQgaW4gdHdvIEJGRCBtb2R1bGVzLCB0aGlzIHdpbGwgY2F1c2UgZHVwbGljYXRlCglkZWZpbml0aW9uczsgdGhlIHJvdXRpbmVzIHNob3VsZCBiZSBleHBvcnRlZCB0byBhIHNlcGFyYXRlLAoJY29tbW9uLCBtb2R1bGUgKHByb2JhYmx5IGFsb25nIHdpdGggYSBtZXNzIG9mIG90aGVyIG9uZXMpLgoKU2F0IE1hciAgMiAxMjoxMToyNiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJSW1wcm92ZSBtb2R0aW1lIHN1cHBvcnQuCgoJKiBiZmQuaDogIEFkZCBib29sZWFuIG10aW1lX3NldCwgYW5kIGRlY2xhcmUgYmZkX2dldF9tdGltZS4KCVJlbW92ZSAjZGVmaW5lIGZvciBiZmRfZ2V0X210aW1lLiAgUmVtb3ZlIGdyYXR1aXRvdXMgY29tbWVudC4KCSogYmZkLmMgKGJmZF9nZXRfbXRpbWUpOiAgTmV3IGZuLCBjYWNoZXMgbXRpbWUsIGdldHMgaWYgbm90IGNhY2hlZC4KCUJVRzogIGFyY2hpdmUgbWVtYmVycyBzdGlsbCBkbyBub3QgZ2V0IGNvcnJlY3QgbW9kIHRpbWVzLgoKCUltcHJvdmUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBmb3IgY29yZSBmaWxlcy4KCgkqIHN1bm9zLmMgKHN0cnVjdCBjb3JlKTogIENoYW5nZSB2b2lkICpmcGFfZHVtbXkgdG8gZG91YmxlIGZwX3N0dWZmLgoJKHN1bm9zNF9jb3JlX2ZpbGVfcCk6ICBDcmVhdGUgYSBzZWNvbmQgcmVnaXN0ZXJzIHNlY3Rpb24gaW4gdGhlCgljb3JlIGZpbGUsIGNhbGxlZCAiLnJlZzIiLCBmb3IgdGhlIGZsb2F0IHJlZ2lzdGVycy4KClRodSBGZWIgMTQgMTU6NDk6MDYgMTk5MSAgR3VtYnkgVmluYXlhayBXYWxsYWNlICAoZ3VtYnkgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBtYW55IGNoYW5nZXMgdG8gaW1wcm92ZSBhcmNoaXZlIGhhbmRsaW5nOyBmb3VuZCBhIGxvZ2ljIGZsYXcgaW4KCSAgYmZkX2NoZWNrX2Zvcm1hdCB3aGljaCBvbmx5IGp1c3QgaGFwcGVuZWQgdG8gd29yayBieSBjb29uY2lkZW5jZS4KClRodSBGZWIgMTQgMDc6NTM6MTYgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGJmZC5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogZml4ZWQgdG8gdXNlIG91dHB1dF9vZmZzZXRzCgljb3JyZWN0bHkuCgoJKiBiZmQuaDogY2hhbmdlZCB0eXBlIG9mIHVkYXRhIGluIGFzeW1ib2wgdG8gdm9pZCAqLCBsaWtlIGl0CglzaG91bGQgYmUuIEFkZGVkIGJmZF9yZWxvY19kYW5nZXJvdXMgZW51bSBtZW1iZXIuCgoJKiBjb2ZmLWNvZGUuaDogRml4ZWQgaXQgc28gdGhhdCBpbnRlcm5hbGx5IGdlbmVyYXRlZCBzeW1ib2xzIGdldAoJdGhlaXIgdmFsdWVzIHJlbG9jYXRlZCBjb3JyZWN0bHkgaW4gYWxsIGNhc2VzLiBSZW1vdmVkIGNhbGxzIHRvCgl4bWFsbG9jLgoKCSogaWNvZmYuYzogTm90IHVuZGVyc3RhbmRpbmcgdGhlIGRlc3RpbmF0aW9uIHN5bWJvbCBvZiBhIHJlbG9jIGlzCglub3QgYSBmYWlsdXJlIGFueSBtb3JlLCBqdXN0ICdkYW5nZXJvdXMnLiBUaGlzIGFsbG93cyBsaW5raW5nIG9mCgliLm91dCBhbmQgY29mZiBpbWFnZXMuCgoJKiBzdW5vcy5jOiBDbGVhbmVkIHVwIHRoZSB3YXkgdGhhdCBaTUFHSUMgc2VjdGlvbiBzaXplcyBhcmUKCWNhbGN1bGF0ZWQuCgoKVHVlIEZlYiAxMiAxMzoyNTo0NiAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogc3Vub3MuYyAodHJhbnNsYXRlX3RvX25hdGl2ZV9zeW1fZmxhZ3MpOiBmaXhlZAoJc3ltX3BvaW50ZXItPm5fdmFsdWUgc28gdGhhdCBzeW1ib2xzIG9uIHRoZSB3YXkgb3V0IGdldCB0aGVpcgoJc2VjdGlvbiByZWxhdGl2ZSB2YWx1ZXMgY2FsY3VsYXRlZCBjb3JyZWN0bHkuCgoJKiBjb2ZmLWNvZGUuaCAobWFuZ2xlX3N5bWJvbHMpOiBmaXhlZCBwcm9ibGVtIHdoZXJlIHRhZ3Mgd2VyZSBub3QKCWJlaW5nIHJlbG9jYXRlZCBmb3Igc3RydWN0cywgZW51bXMsIHVuaW9ucy4gQWxzbyB2YXJpb3VzIGxpbnRzLgoKTW9uIEZlYiAxMSAxOTo1MjoyNiAxOTkxICBHdW1ieSBWaW5heWFrIFdhbGxhY2UgIChndW1ieSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoZ2V0X2VsdF9hdF9maWxlcG9zKTogc3lzdGVtX2NhbGxfZXJyb3IgcmV0dXJuZWQKCSAgaW5jb3JyZWN0bHkuCgpTdW4gRmViIDEwIDIzOjE4OjQwIDE5OTEgIEd1bWJ5IFZpbmF5YWsgV2FsbGFjZSAgKGd1bWJ5IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogUmVzb2x2ZSB0aGUgdXNlIG9mIG5vX2Vycm9yIGFuZCBzeXN0ZW1fY2FsbF9lcnJvci4KCSAgVGhlIGJmZCBsaWJyYXJ5IGl0c2VsZiBub3cgd2lsbCBuZXZlciBzZXQgYmZkX2Vycm9yIHRvCgkgIG5vX2Vycm9yLgoKCSAgVGhlIGNvZGUgc3RpbGwgbmVlZHMgdG8gYmUgY29tYmVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGVycm9yCgkgIGNvZGVzIGFyZSBjb3JyZWN0LiAgSSBzdXNwZWN0IHRoZXkgYXJlIG5vdCBhbHdheXMgc2V0IGNvcnJlY3RseS4KCgkqIFRoZSBuYW1lcyBvZiBhbGwgdGhlIG1lc3NhZ2VzIGhhdmUgXyBwcmVwZW5kZWQgYmVjYXVzZSB0aGUgc3VuCgkgIGJ1bmRsZWQgY29tcGlsZXIgY2FuJ3QgZGlzdGluZ3Vpc2ggZnJvbSBhIG1hY3JvIHdoaWNoIHRha2VzIGFuCgkgIGFyZ3VtZW50IGFuZCB0aGUgc2FtZSBpZGVudGlmaWVyIGluIGEgbm9uLW1hY3JvIGNvbnRleHQuCgoJKiBUaGUgcmVhc29uIGZvciB0aGUgYWJvdmUgYmVpbmcgdGhhdCBlbnRyeSBwb2ludHMgd2hpY2ggdXNlZCB0bwoJICBiZSB0cmFtcG9saW5lIGZ1bmN0aW9ucyBhcmUgbm93IGp1c3QgbWFjcm9zIHdoaWNoIGV4cGFuZCB0byBhCgkgIGRpcmVjdCBjYWxsIHRocm91Z2ggdGhlIGJmZCdzIHhmZXIgdmVjdG9yLgoKCSogKC4uL2luY2x1ZGUvaW50ZWwtY29mZi5oKSBGX0FSMzJXUjogZml4IHRoaXMgY29uc3RhbnQuICBXaHkKCSAgbXVzdCBnYXMgaGF2ZSBpdHMgb3duIHZlcnNpb24gb2YgZXZlcnl0aGluZyAodGhlIGdhcyB2ZXJzaW9uCgkgIGhhZCB0aGUgY29ycmVjdCB2YWx1ZSkKClR1ZSBGZWIgIDUgMTE6NDY6NTMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGIub3V0LmM6IEFkZGVkIHBhdGNoZXMgc3VwcGxpZWQgYnkgY2hyaXNiQG1pcG9uMi5pbnRlbC5jb20gdG8KCXByb3Blcmx5IHN1cHBvcnQgaTk2MCBhcmNoaXRlY3R1cmUgYW5kIG91dHB1dCBjb3JyZWN0IHJlbG9jIHN0dWZmLgoKCSogYmZkLmg6IGFkZGVkIHByb3RvdHlwZSBmb3IgYmZkX3ByaW50YWJsZV9hcmNoX21hY2gsIGFkZGVkCglCRkRfRkFJTAoKCSogY29mZi1jb2RlLmg6IEFwcGxpZWQgcGF0Y2hlcyBmcm9tIGNocmlzYiB0byBzdXBwb3J0IGk5NjAKCWFyY2hpdGVjdHVyZSwgemVybyByZWxvY3MgYW5kIHN3YXAgdGhlbSBjb3JyZWNseSBhbmQgY29uZGl0aW9uYWxseQoJY29tcGlsZWQgdGhlIHRpbWVzdGFtcC4KCgkqIHN1bm9zLmM6IE1hZGUgdGhlIGRlZmF1bHQgc2VjdGlvbiBhbGlnbm1lbnQgMl4zIHNvIHRoYXQgZG91YmxlcwoJYXJlIGRvbmUgcHJvcGVybHkuIEZpeGVkIHRoZSBzYW1lIHJlbG9jIGJ1ZyB0aGF0IHdhcyBpbiBiLm91dC5jCgoJKiBzeXNkZXAuaDogTm93IGNvbXBpbGVzIG9uIGEgUG9zaXggYm94CgpXZWQgSmFuIDMwIDIxOjM2OjI2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGljb2ZmLmM6ICBGaXggY29tbWVudCBvbiBiaWctZW5kaWFuIHZlcnNpb24uCgkqIGNvZmYtY29kZS5oOiAgTWFrZSBIQVNfUkVMT0MgcmVhbGx5IHdvcmsgKGl0J3MgYmFja3dhcmRzIGZyb20KCUZfUkVMRkxHKS4gIFNldCBGX0FSMzJXUiBpbiBvdXRwdXQgZmlsZXMgaWYgbGl0dGxlIGVuZGlhbgoJYXJjaGl0ZWN0dXJlLgoKVHVlIEphbiAyOSAyMDo1NjoxMCBQU1QgMTk5MSBzdGV2ZUBjeWdudXMuY29tCgoJKiBhcmNodXJlcy5jIGZpeGVkID0vPT0gdHlwbwoKCSogc3Vub3MuYyBhZGRlZCBhcmNoaXRlY3R1cmUgc3R1ZmYgZm9yIG91dHB1dC4gRml4ZWQKCWJ1ZyB3aGVyZSBmaWxlcyB3aGVyZSB2bWEoZGF0YSkgIT0gc2l6ZSh0ZXh0KQoJd2VyZSBwcm9jZXNzZWQgd3JvbmcuCgoJKiBjb2ZmLWNvZGUuaCBhZGRlZCBhIGxpbnQgY2FzdAoKCSogKC4uL2luY2x1ZGUvYS5vdXQuc3VuNC5oKSBmaXhlZCBpdCBzbyB6bWFnaWMKCXdvcmtlZAoKTW9uIEphbiAyOCAxOToxNToyOSBQU1QgMTk5MSBzdGV2ZUBjeWdudXMuY29tCgoJKiBhcmNoaXZlLmMgcmVtb3ZlZCBsb2FkcyBvZiBpbmNsdWRlcywgYW5kIGZpeGVkIGJ1ZyB3aGVyZSBzdHJpbmcKCXRhYmxlIGRpZG4ndCBoYXZlIGEgbnVsbCBhdCB0aGUgZW5kLgoKCSogYmZkLmMgZml4ZWQgaW5jbHVkZXMsIGFkZGVkIHN5bWJvbHMgYXJndW1lbnQgdG8KCWNhbm9uaWNhbGl6ZV9yZWxvYyBlbnRyeSBwb2ludC4KCgkqIGxpYmJmZC5jIGZpeGVkIGluY2x1ZGVzIGFuZCBhZGRlZCBzb21lIGxpbnQgcGF0Y2hlcy4KCgkqIHRhcmdldHMuYyBhZGRlZCBib3RoIHNvcnRzIG9mIGludGVsIGNvZmYuCgoJKiBiLm91dC5jIGZpeGVkIGluY2x1ZGVkLCBjaGFuZ2VkIHdhcyB0aGUgY2Fub25pY2FsCglyZWxvY3Mgd2VyZSBkb25lLgoKCSogaWNvZmYuYyBhZGRlZCBzdXBwb3J0IGZvciBjYWxsaiBhbmQgYmlnIGFuZCBsaXR0bGUKCWVuaWRpYW4gdGFibGVzLgoKCSogb3BuY2xzLmMgYWRkZWQgY2htb2QreGluZyBmb3IgZmlsZXMgd2l0aCBFWEVDX1Agc2V0LgoKCSogc3Vub3MuYyBmaXhlZCBpbmNsdWRlcy4gQ2hhbmdlZCBkZWZhdWx0IHNlY3Rpb24KCWFsaWduZW1lbnQgdG8gd29yZHMuIEZpeGVkIHJlbG9jYXRpb24gc3R1ZmYgdG8gd29yayB3aXRoCgluZXcgc2NoZW1lCgoJKiBiZmQuaCB2YXJpb3VzIG5ldyB0eXBlcyBhZGRlZCwgcHJvdG90eXBlIGZvciBuZXcKCXJlbG9jIGNhbGxzLCBjaGFuZ2VkIGJmZC0+aW9zdHJlYW0gdG8gYSB2b2lkICoKCXRvIGluY2x1ZGluZyBmaWxlcyBkb24ndCBuZWVkIHN0ZGlvLmguCgoJKiBsaWJjb2ZmLmggYWRkZWQgY29udmVyc2lvbiB0YWJsZSB0byB0aWUgcmVsb2NzIHRvCgljYW5vbmljYWwgc3ltYm9scwoKCSogc3lzZGVwLmggY3JlYXRlZAoKCSogY29mZi1jb2RlLmggZml4ZWQgaW5jbHVkZXMuIEFkZGVkIGNvZGUgdG8gc3VwcG9ydAoJYmlnIGFuZCBsaXR0bGUgZW5kaWFuIGZvcm1hdHMuIFZhcmlvdXMgbGludHMuIEJldHRlcgoJcHJvY2Vzc2luZyBvZiBzeW1ib2xzLiBDaGFuZ2VkIHJlbG9jIHN0dWZmIHRvIG5ldwoJb3JkZXIKCgkqIGxpYmJmZC5oIGZpeGVkIGluY2x1ZGVzCgoKTW9uIEphbiAyMSAxMTo1Mzo1MSBQU1QgMTk5MSBzdGV2ZUBjeWdudXMuY29tCgoJKiBiZmQuaAljaGFuZ2VkIG5hbWUgb2YgYWxpZ25tZW50IGVudHJ5IGluIHNlY19zdHJ1Y3QgdG8KCWFsaWdubWVudF9wb3dlciwgYmVjYXVzZSBvZiBjb25mbGljdGluZyB1c2VzIHdpdGhpbiBiZmQuCglOb3cgaXQgc2hvdWxkIGJlIG9idmlvdXMgdGhhdCBpdCdzIGEgMioqbiBhbGlnbm1lbnQKCXNwZWNpZmllci4gUmVtb3ZlZCBzdGFydF9wYWQsIGVuZF9hbGlnbm1lbnQsIGJsb2NrLCBtaW5zaXplLAoJb3V0cHV0X2ZpbGVfYWxpZ25tZW50LCBzdWJzZWN0aW9uX2FsaWdubWVudCBhbmQgb3JpZ2luYWxfdm1hIGZpZWxkcy4KCUFkZGVkIGFsaWduX3Bvd2VyKCkgbWFjcm8uIEZpeGVkIGJmZF9zZWN0aW9uX2FsaWdubWVudAoJYWNlc3NvciBtYWNyb3MuIEFkZGVkIGJmZF9zeW1ib2xfc2FtZV90YXJnZXQgbWFjcm8uCgoJKiBiLm91dC5jIChiX291dF93cml0ZV9vYmplY3RfY29udGVudHMpIGZpeGVkIHRvIHVzZQoJbmV3IGFsaWdubWVudCBtZW1iZXIuIEZpeGVkIChjYWxsal9jYWxsYmFjaykgdG8gdXNlIHNlY3Rpb24KCXJlbGF0aXZlIHN5bWJvbHMgcHJvcGVybHkuCgoJKiBzdW5vcy5jIChzdW5vczRfb2JqZWN0X3ApIGZpeGVkIHRvIHVzZSBuZXcgYWxpZ25tZW50X3Bvd2VyLgoJRml4ZWQgKHRyYW5zbGF0ZV9mcm9tX25hdGl2ZV9zeW1fZmxhZ3MpIHRvIGNvcnJlY3RseSBtYWtlCglzeW1ib2xzIHNlY3Rpb24gcmVsYXRpdmUuCgoJKiBiZmQuYyAoYmZkX2Vycm1zZykgZml4ZWQgdmFyaW91cyBlbnVtIGNhc3QgcHJvYmxlbXMuCgkoYmZkX21ha2Vfc2VjdGlvbikgdG9vayBvdXQgaW5pdGlhbGl6YXRpb24gb2Ygb2Jzb2xldGUgbWVtYmVycy4KCShiZmRfcHJpbnRfc3ltYm9sX3ZhbmRmKSBhZGRlZAoKCSogb3BuY2xzLmMgKGJmZF9jcmVhdGUpIGNyZWF0ZWQuCgoJKiBjb2ZmLWNvZGUuaCAoY29mZl9uZXdfc2VjdGlvbl9ob29rKSB0b29rIGF3YXkgcmVmcwoJdG8gb2Jzb2xldGUgbWVtYmVycy4gKG1ha2VfYV9zZWN0aW9uX2Zyb21fZmlsZSkgYWRkZWQKCWNvbnZlcnNpb24gYmV0d2VlbiBhbGlnbm1lbnQgdHlwZXMuIChjb2ZmX3N5bWJvbF9mcm9tKQoJYWRkZWQuIChjb2ZmX2NvdW50X2xpbmVudW1iZXJzKSBvbmx5IGNvdW50cyBsaW5lbnVtYmVycwoJaWYgc3ltYm9sIGlzIG9mIGNvZmYtdHlwZS4gKGNvZmZfbWFuZ2xlX3N5bWJvbHMpIG9ubHkKCWhlYXZpbHkgbWFuZ2xlcyBzeW1ib2xzIGlmIHN5bWJvbCBpcyBjb2ZmLXR5cGUuCgkoY29mZl93cml0ZV9zeW1ib2xzKSB2YXJpb3VzIGxpbnRzLiAoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpCgl2YXJpb3VzIGxpbnRzIGFuZCBtb2RpZmljYXRpb24gZm9yIGFsaWdubWVudCBjb252ZXJzaW9uLgoJKGNvZmZfc2x1cnBfcmVsb2NzKSBmaXhlZCBmb3IgdXNlIHdpdGggbmV3IGFzZWN0aW9uIHNoYXBlLgoKU2F0IEphbiAxOSAxNjoxMDo0MiBQU1QgMTk5MSBzdGV2ZUBjeWdudXMuY29tCgoJKiBhcmNoaXZlLmMgbG90cyBvZiBsaW50CgoJKiBiLm91dC5jIGFkZGVkIGNhbGxqIHJlbG9jYXRpb24gc3VwcG9ydCwgdXBncmF0ZWQgcmVsb2MgaG93dG8uCglGaXhlZCBzbyB0aGF0IGFzeW1ib2wgYW5kIHJlbG9jIHJlY29yZHMgYXJlIG91dHB1dAoJY29ycmVjdGx5LgoKCSogYmZkLmMgbG90cyBvZiBsaW50LCBzdXBwb3J0IGZvciBuZXcgYmZkIGVudHJ5IHBvaW50CgliZmRfcHJpbnRfc3ltYm9sLgoKCSogYmZkLmggY2hhbmdlZCBkZWZpbml0aW9uIG9mIGFzeW1ib2wgdG8gY29udGFpbiBwb2ludGVyIHRvCglvd25pbmcgYmZkLCByZW1vdmVkIHRhcmdldCBkZXBlbmRlbmNpZXMuCgoJKiBjYWNoZS5jIHRvb2sgb3V0IHByaW50IHN0YXRlbWVudHMsIHB1dCBpbiBCRkRfQVNTRVJUIGNhbGxzLgoKCSogY29mZi1jb2RlLmggdmFyaW91cyBsaW50cywgY29ycmVjdGVkIGxpbmVudW1iZXIgb3V0cHV0CglmdW5jdGlvbmFsaXR5LiBBZGRlZCBzdXBwb3J0IGZvciBuZXcgc3R5bGUgYXN5bWJvbHMgYW5kCgliZmRfcHJpbnRfc3ltYm9sLiBGaXhlZCBzbyB0aGF0IGFzeW1ib2wgYW5kCglyZWxvYyByZWNvcmRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gQWRkZWQgdGltZXN0YW1wLgoKCSogaWNvZmYuYyBBZGRlZCBzdXBwb3J0IGZvciBuZXcgaG93dG8gc2hhcGUuCgoJKiBsaWJhLm91dC5oIEFkZGVkIHN1cHBvcnQgZm9yIG5ldyBhc3ltYm9sIHNoYXBlCgoJKiBsaWJiZmQuYyB2YXJpb3VzIGxpbnRzCgoJKiBsaWJiZmQuaCB2YXJpb3VzIGxpbnRzCgoJKiBsaWJjb2ZmLmggYWRkZWQgc3VwcG9ydCBmb3IgbmV3IGFzeW1ib2wgc2hhcGUuCgoJKiBzdW5vcy5jICB2YXJpb3VzIGxpbnRzLiBBZGRlZCBzdXBwb3J0IGZvciBuZXcgYXN5bWJvbCBzaGFwZQoJYW5kIGJmZF9wcmludF9zeW1ib2wuCgpXZWQgSmFuIDE2IDIxOjM4OjA5IFBTVCAxOTkxIHN0ZXZlQGN5Z251cy5jb20KCgkqIGIub3V0LmMgcmVtb3ZlZCBwcm90b3R5cGUgb2Ygc3Vub3M0X2VubmF0aXZhdGVfc3ltdGFiLCBsb3RzIG9mCglwb2ludGVyIGxpbnQuIEFkZGVkIHN1cHBvcnQgZm9yIGNhbGxqIHJlbG9jYXRpb24uIEZpeGVkIGJ1ZyB3aGVyZQoJdGhlIGxhc3QgMzIgYnl0ZXMgb2YgdGhlIHRleHQgc2VjdGlvbiB3ZXJlIG92ZXJ3cml0dGVuIGJ5IGRhdGEuIEZpeGVkIGJ1ZwoJd2hlcmUgYXJjaGl2ZXMgb2YgYi5vdXQgZGlkbid0IHdvcmsgZHVlIGJmZF9zbHVycF9leHRlbmRlZF9uYW1lX3RhYmxlCglyZXR1cm5pbmcgZmFsc2UuCgoJKiBzdW5vcy5jIGFkZGVkIHN1cHBvcnQgZm9yIG5fb3RoZXIgZmllbGQuIEJyYWNlZCB0aGUgaG93dG8gdGFibGUgc28KCXRoYXQgaXQgd29uJ3QgYmUgYWZmZWN0ZWQgYnkgYW55IGxlbmd0aGluZyBvZiB0aGUgaG93dG8gc3RydWN0IHR5cGVkZWYuCglWYXJpb3VzIGxpbnRzCgoJKiBiZmQuaCBhZGRlZCBzdXBwb3J0IGZvciBuX290aGVyIGZpZWxkLCBhZGRlZCBzcGVjaWFsX2Z1bmN0aW9uCglyZWxvYyB0eXBlLCBtb2RpZmllZCBiZmRfcGVyZm9ybV9yZWxvY2F0aW9uIHByb3RvdHlwZS4gQWRkZWQgYmZkX2hfZ2V0X3gKCW1hY3Jvcy4KCgkqIGJmZC5jIHVwZ3JhZGVkIGJmZF9wZXJmb3JtX3JlbG9jYXRpb24sIHZhcmlvdXMgbGludHMuCgpXZWQgSmFuIDE2IDAxOjU1OjUzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBydGwpCgoJKiBDaGFuZ2VMb2c6ICBTdGFydGVkIENoYW5nZUxvZyBmb3IgQkZELgoJKiBUb0RvOiAgQ3JlYXRlIGZpbGUgZm9yIHN1Z2dlc3Rpb25zLgoKCSogTWFrZWZpbGU6ICBTdXBwb3J0IGVhc3kgbG9hZGluZyBpbnRvIFNhYmVyIEMuCglBZGQgZGVwZW5kZW5jaWVzIGZvciBpY29mZi5vIGFuZCBiY3M4OGtjb2ZmLm8uCglSZW5hbWUgY29mZi5jIHRvIGNvZmYtY29kZS5oLiAgQ2hhbmdlIGNhbGxlcnMuCgoJKiBiZmQuYyAoYmZkX2NoZWNrX2Zvcm1hdCk6ICBBbGxvdyB0aGUgY2hlY2tfZm9ybWF0IHJvdXRpbmVzCgl0byByZXR1cm4gdGhlIGRlc2lyZWQgdGFyZ2V0IHZlY3RvciwgcmF0aGVyIHRoYW4ganVzdCBhIEJvb2xlYW4uCgliZmQuaCAoYmZkX2NoZWNrX2Zvcm1hdCk6ICBDaGFuZ2UgZnVuY3Rpb24gcG9pbnRlciByZXR1cm4gdHlwZS4KCWFyY2hpdmUuYyAoYmZkX2dlbmVyaWNfYXJjaGl2ZV9wKTogIGNoYW5nZSBjYWxsZWUuCgliLm91dC5jIChiX291dF9saXR0bGVfb2JqZWN0X3AsIGJfb3V0X2JpZ19vYmplY3RfcCwKCWJfb3V0X3JlYWxfb2JqZWN0X3ApOiAgY2hhbmdlIGNhbGxlZS4KCWxpYmJmZC5jIChfYmZkX2R1bW15X3RhcmdldCk6ICBEdW1teSByb3V0aW5lIHJlcGxhY2luZyBiZmRfZmFsc2UKCWluIGNoZWNrX2Zvcm1hdCB0cmFuc2ZlciB2ZWN0b3JzIHRoYXQgbmVlZCBhIGZpbGxlci4KCWxpYmJmZC5oIChiZmRfZ2VuZXJpY19hcmNoaXZlX3AsIF9iZmRfZHVtbXlfdGFyZ2V0KTogIEZpeCBkZWNscy4KCWJjczg4a2NvZmYuYzogIGNoYW5nZSBjYWxsZWUuCgljb2ZmLWNvZGUuaCAoY29mZl9yZWFsX29iamVjdF9wLCBjb2ZmX2JpZ19vYmplY3RfcCk6ICBjaGFuZ2UgY2FsbGVlLgoJaWNvZmYuYzogIGNoYW5nZSBjYWxsZWUuCglzdW5vcy5jIChzdW5vczRfb2JqZWN0X3AsIHN1bm9zNF9jb3JlX2ZpbGVfcCk6ICBjaGFuZ2UgY2FsbGVlLgoKCSogbGliYmZkLmMgKHphbGxvYyk6ICBJdCBzaG91bGQgYWN0dWFsbHkgemVybyB0aGUgc3RvcmFnZSEKCVRoaXMgd2FzIGNvbW1lbnRlZCBvdXQgZm9yIHNvbWUgcmVhc29uLgoKCSogbGliYmZkLmg6ICBBZGQgbWFsbG9jLCB4bWFsbG9jLCBtZW1jcHksIGFuZCBmYXRhbCBkZWNscy4KCVRoaXMgaXMgc28gY2FsbGVycyBjYW4gYXZvaWQgPHN0ZGxpYi5oPiB3aGljaCBkb2Vzbid0IGV4aXN0CglvbiBvbGRlciBzeXN0ZW1zLgoKCSogYmZkLmMgKG1hcF9vdmVyX3NlY3Rpb25zKTogIEFkZCBkZWJ1Z2dpbmcgY29kZSwgc2luY2UgSQoJbm90aWNlZCB0aGUgc2VjdGlvbiBjb3VudCBmb3Igc3Vub3MgY29yZSBmaWxlcyB3YXMgYmFkLCBidXQgb25seQoJR0RCIGhhZCBkZXRlY3RlZCB0aGUgcHJvYmxlbS4KCShiZmRfc2V0X3NlY3Rpb25fbGluZW5vX3NpemUsIGJmZF9zZXRfc2VjdGlvbl9saW5lbm9zLAoJYmZkX2dldF9zZWN0aW9uX2xpbmVub3MpOiAgUmVtb3ZlIG9ic29sZXRlIGZ1bmN0aW9ucy4KCShiZmRfYXBwbHlfcmVsb2NhdGlvbnMpOiAgVXNlIGxvbmdzLCBub3QgaW50cywgZm9yIHRoZSBtYXRoLgoKCSogYmZkLmg6ICBEZWNsYXJlIGVudW0gYm9vbGVhbiBhbmQgc3RydWN0IGJmZF90YXJnZXQgYXMgd2VsbAoJYXMgdHlwZWRlZnMgZm9yIHRoZW0uICBSZW1vdmUgb2Jzb2xldGUKCWJmZF9nZXRfc2VjdGlvbl9saW5lbm9fc2l6ZS4KCgkqIGNhY2hlLmM6ICBNYWtlIHRoZSAiZmRvcGVuIiBzdXBwb3J0IHdvcmsuICBLZWVwIGJldHRlciB0cmFjawoJb2YgaG93IG1hbnkgZmlsZXMgYXJlIG9wZW4uICBDZW50cmFsaXplIHRoZSBvcGVuaW5nIG9mIGZpbGVzCglhbmQgYmUgc3VyZSBiZmRfb3Blbltyd10gYWN0dWFsbHkgdHJ5IHRvIG9wZW4gdGhlIGZpbGUuICBFdmFkZQoJbGlua2VkIGxpc3QgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuCgoJKiBiLm91dC5jLCBjb2ZmLWNvZGUuaCwgb3BuY2xzLmMsIHN1bm9zLmM6ICBsaW50LgoKCSogY29mZi1jb2RlLmggKGNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIE51bGwtdGVybWluYXRlIHN5bXRhYiBuYW1lcy4KCgkqIGNwbHVzLWRlbS5jOiAgRGVsZXRlIGZpbGUsIHNpbmNlIGl0IGlzIG5vdCBwYXJ0IG9mIEJGRC4KCgkqIG9wbmNscy5jIChiZmRfb3BlbnIpOiAgRWxpbWluYXRlIG1pc3BsYWNlZCAjaWYgMCBjb2RlLgoJKGJmZF9vcGVuciwgYmZkX29wZW53KTogIEFjdHVhbGx5IG9wZW4gdGhlIGZpbGUsIGdpdmUgZXJyb3Igbm93LgoKCSogc3Vub3MuYyAoc3Vub3M0X2NvcmVfZmlsZV9wKTogIFNldCBzZWN0aW9uIGNvdW50LgoJKHN1bm9zNF9zZXRfc2VjdGlvbl9saW5lbm9zLCBzdGFiX25hbWVzLCBmcHJpbnRfbmFtZSk6ICBFbGltaW5pYXRlCglvYnNvbGV0ZSBkZWZpbml0aW9ucy4KCShfd3JpdGVfc3ltYm9sX3RhYmxlKTogIEluaXRpYWxpemUgPGlkeD4gY291bnRlci4KCShmb29wKTogIEVsaW1pbmF0ZSBkZWJ1Z2dpbmcgY29kZS4KDApMb2NhbCBWYXJpYWJsZXM6Cm1vZGU6IGNoYW5nZS1sb2cKbGVmdC1tYXJnaW46IDgKZmlsbC1jb2x1bW46IDc0CnZlcnNpb24tY29udHJvbDogbmV2ZXIKRW5kOgo=