MjAwMC0wNi0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSW5jcmVtZW50IGNvbW1hbmRzX3N0YXJ0ZWQgYmVmb3JlIHRoZQoJc3BlY2lhbCBjaGVjayBmb3IgIjoiIChlbXB0eSBjb21tYW5kKSB0byBhdm9pZCBzcHVyaW91cyAiaXMgdXAgdG8KCWRhdGUiIG1lc3NhZ2VzLiAgQWxzbyBtb3ZlIHRoZSB0ZXN0IGZvciBxdWVzdGlvbl9mbGFnIGFmdGVyIHdlCglleHBhbmQgYXJndW1lbnRzLCBhbmQgb25seSBzdG9wIGlmIHRoZSBleHBhbnNpb24gcHJvdmlkZWQgYW4KCWFjdHVhbCBjb21tYW5kIHRvIHJ1biwgbm90IGp1c3Qgd2hpdGVzcGFjZS4gIFRoaXMgZml4ZXMgUFIvMTc4MC4KCjIwMDAtMDYtMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmIHdlIGZpbmQgYSBzZW1pY29sb24gaW4gdGhlIHRhcmdldAoJZGVmaW5pdGlvbiwgcmVtZW1iZXIgd2hlcmUgaXQgd2FzLiAgSWYgdGhlIGxpbmUgdHVybnMgb3V0IHRvIGJlIGEKCXRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSwgYWRkIGJhY2sgdGhlIHNlbWljb2xvbiBhbmQgZXZlcnl0aGluZwoJYWZ0ZXIgaXQuICBGaXhlcyBQUi8xNzA5LgoKMjAwMC0wNi0xOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlnLmgtdm1zLnRlbXBsYXRlOiAjZGVmaW5lIHVpbnRtYXhfdCBmb3IgdGhpcyBzeXN0ZW0uCgkqIGNvbmZpZy5hbWkudGVtcGxhdGU6IERpdHRvLgoJKiBjb25maWcuaC5XMzIudGVtcGxhdGU6IERpdHRvLgoKCSogY29uZmlndXJlLmluOiBXZSBkb24ndCB1c2Ugc2VsZWN0KDIpIGFueW1vcmUsIHNvIGRvbid0IGJvdGhlcgoJY2hlY2tpbmcgZm9yIGl0LgoJKiBhY2NvbmZpZy5oOiBEaXR0by4KCSogYWNpbmNsdWRlLm00OiBEaXR0by4KCgkqIGZpbGUuYyAoYWxsX3NlY29uZGFyeSk6IE5ldyBzdGF0aWMgZ2xvYmFsOyBpZiAxIGl0IG1lYW5zCgkuU0VDT05EQVJZIHdpdGggbm8gcHJlcmVxdWlzaXRlcyB3YXMgc2VlbiBpbiB0aGUgbWFrZWZpbGUuCgkoc25hcF9kZXBzKTogU2V0IGl0IGFwcHJvcHJpYXRlbHkuCgkocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBDaGVjayBpdC4KCShudW1faW50ZXJtZWRpYXRlcyk6IFJlbW92ZSB0aGlzIGdsb2JhbCwgaXQncyBub3QgdXNlZCBhbnl3aGVyZS4KCShjb25zaWRlcmVkKTogTW92ZSB0aGlzIHRvIHJlbWFrZS5jIGFuZCBtYWtlIGl0IHN0YXRpYy4KCgkqIE5FV1M6IERvY3VtZW50IHRoZSBjaGFuZ2UgdG8gLlNFQ09OREFSWS4KCSogbWFrZS50ZXhpbmZvIChTcGVjaWFsIFRhcmdldHMpOiBEb2N1bWVudCB0aGUgY2hhbmdlIHRvIC5TRUNPTkRBUlkuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFJlbW92ZSB0aGUgaW5jcmVtZW50IG9mCgludW1faW50ZXJtZWRpYXRlczsgaXQncyBub3QgdXNlZC4KCSogZmlsZWRlZi5oOiBSZW1vdmUgbnVtX2ludGVybWVkaWF0ZXMgYW5kIGNvbnNpZGVyZWQuCgoJKiBmdW5jdGlvbi5jIChoYW5kbGVfZnVuY3Rpb24pOiBJZiB0aGUgbGFzdCBhcmd1bWVudCB3YXMgZW1wdHksIHdlCgl3ZXJlIHByZXRlbmRpbmcgaXQgZGlkbid0IGV4aXN0IHJhdGhlciB0aGFuIHByb3ZpZGluZyBhbiBlbXB0eQoJdmFsdWUuICBLZWVwIGxvb2tpbmcgdW50aWwgd2UncmUgcGFzdCB0aGUgZW5kLCBub3QganVzdCBhdCB0aGUgZW5kLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBNdWx0aS10YXJnZXQgaW1wbGljaXQgcnVsZXMgd2VyZW4ndAoJZXhwYW5kaW5nIHRoZSAiYWxzbyBtYWRlIiB0YXJnZXRzIGNvcnJlY3RseSBpZiB0aGUgcGF0dGVybiBkaWRuJ3QKCWNvbnRhaW4gYSBzbGFzaCBidXQgdGhlIHRhcmdldCBkaWQ7IGluIHRoYXQgY2FzZSB0aGUgZGlyZWN0b3J5CglwYXJ0IHdhc24ndCBiZWluZyBhZGRlZCBiYWNrIHRvIHRoZSBzdGVtIG9uIHRoZSAiYWxzbyBtYWRlIgoJdGFyZ2V0cy4gIFJlcG9ydGVkIGJ5IFNldGggTSBMYUZvcmdlIDxzZXRobWxAbmV3dG9ubGFicy5jb20+LCB3aXRoCglhIHBhdGNoLgoKMjAwMC0wNi0xNyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZSAoREVTVERJUiwgYmluZGlyLCBkYXRhZGlyLCBsaWJkaXIpCgkoaW5mb2RpciwgbWFuZGlyLCBpbmNsdWRlZGlyKTogU3VwcG9ydCBpbnN0YWxsYXRpb24gdW5kZXIgYQoJbm9uLWRlZmF1bHQgREVTVERJUi4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogRml4IHRoZSBzcGVsbGluZyBvZiBfX01TRE9TX18uCgoJKiBjb25maWdoLkRPUy50ZW1wbGF0ZSAoSEFWRV9GRE9QRU4sIEhBVkVfTUtTVEVNUCk6IERlZmluZS4KCjIwMDAtMDYtMTQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGFjaW5jbHVkZS5tNCAocGRzX1dJVEhfR0VUVEVYVCk6IHJld3JpdGUgZnBfV0lUSF9HRVRURVhUIGFuZAoJcmVuYW1lIGl0IHRvIGF2b2lkIGNvbmZ1c2lvbi4gIFRoaXMgdmVyc2lvbiBpcyB2ZXJ5IHNwZWNpZmljOiBpdAoJd29uJ3QgYWNjZXB0IGFueSBnZXR0ZXh0IHRoYXQgaXNuJ3QgR05VLiAgSWYgdGhlIHVzZXIgZG9lc24ndAoJZXhwbGljaXRseSBhc2sgZm9yIHRoZSBpbmNsdWRlZCBnZXR0ZXh0LCB3ZSBsb29rIHRvIHNlZSBpZiB0aGUKCXN5c3RlbSBnZXR0ZXh0IGlzIEdOVSAodGVzdGluZyBib3RoIHRoZSBhY3R1YWwgbGliaW50bCBsaWJyYXJ5LAoJYW5kIHRoZSBsaWJpbnRsLmggaGVhZGVyIGZpbGUpLiAgT25seSBpZiB0aGUgc3lzdGVtIGdldHRleHQgaXMKCXJlYWxseSBHTlUgZ2V0dGV4dCB3aWxsIHdlIGFsbG93IGl0IHRvIGJlIHVzZWQuCgkocGRzX0NIRUNLX1NZU1RFTV9HRVRURVhUKTogQSBoZWxwZXIgZnVuY3Rpb24uCgoyMDAwLTA2LTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBnZXR0ZXh0Lmg6IElmIHdlIGhhdmUgbGliaW50bC5oLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGFueSBvZiB0aGUKCWNvbnRlbnRzIG9mIGdldHRleHQuaC4gIFdlIHdvbid0IGNoZWNrIGZvciBsaWJpbnRsLmggdW5sZXNzIHdlJ3JlCgl1c2luZyB0aGUgc3lzdGVtIGdldHRleHQuCgoJKiBmdW5jdGlvbi5jIChmdW5jX3dvcmQpOiBDbGFyaWZ5IGVycm9yIG1lc3NhZ2UuCgoyMDAwLTA2LTEwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCglTdXBwb3J0IG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBvbiBob3N0cyB3aXRoIDY0LWJpdCB0aW1lX3QgYW5kCgl1aW50bWF4X3QgKGUuZy4gNjQtYml0IFNwYXJjIFNvbGFyaXMpLCBieSBzcGxpdHRpbmcKCUZJTEVfVElNRVNUQU1QIGludG8gYSAzMC1iaXQgcGFydCBmb3IgbmFub3NlY29uZHMsIHdpdGggdGhlCglyZXN0IGZvciBzZWNvbmRzLCBpZiBGSUxFX1RJTUVTVEFNUCBpcyBhdCBsZWFzdCA2NCBiaXRzIHdpZGUuCgoJKiBtYWtlLmg6IEFsd2F5cyBkZWZpbmUgRklMRV9USU1FU1RBTVAgdG8gYmUgdWludG1heF90LCBmb3IKCXNpbXBsaWNpdHkuCgoJKiBmaWxlZGVmLmggKEZJTEVfVElNRVNUQU1QX0hJX1JFUywgRklMRV9USU1FU1RBTVBfTE9fQklUUykKCShVTktOT1dOX01USU1FLCBOT05FWElTVEVOVF9NVElNRSwgT0xEX01USU1FKQoJKE9SRElOQVJZX01USU1FX01JTiwgT1JESU5BUllfTVRJTUVfTUFYKTogTmV3IG1hY3Jvcy4KCShGSUxFX1RJTUVTVEFNUF9TVEFUX01PRFRJTUUpOiBOb3cgdGFrZXMgZm5hbWUgYXJnLiAgQWxsIHVzZXMgY2hhbmdlZC4KCShGSUxFX1RJTUVTVEFNUF9ESVYsIEZJTEVfVElNRVNUQU1QX01PRCkKCShGSUxFX1RJTUVTVEFNUF9GUk9NX1NfQU5EX05TKTogUmVtb3ZlLgoJKEZJTEVfVElNRVNUQU1QX1MsIEZJTEVfVElNRVNUQU1QX05TKTogVXNlIHNoaWZ0cyBpbnN0ZWFkIG9mCgltdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24uICBPZmZzZXQgdGhlIHRpbWVzdGFtcHMgYnkKCU9SRElOQVJZX01USU1FX01JTi4KCShmaWxlX3RpbWVzdGFtcF9jb25zKTogTmV3IGRlY2wuCgkoTkVXX01USU1FKTogTm93IGp1c3QgdGhlIG1heGltYWwgdGltZXN0YW1wIHZhbHVlLCBhcyB3ZSBubyBsb25nZXIgdXNlCgktMSB0byByZWZlciB0byBub25leGlzdGVudCBmaWxlcy4KCgkqIGZpbGUuYyAoc25hcF9kZXBzLCBwcmludF9maWxlKTogVXNlIE5PTkVYSVNURU5UX01USU1FLAoJVU5LTk9XTl9NVElNRSwgYW5kIE9MRF9NVElNRSBpbnN0ZWFkIG9mIG1hZ2ljIGNvbnN0YW50cy4KCSogZmlsZWRlZi5oIChmaWxlX210aW1lXzEpOiBMaWtld2lzZS4KCSogbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xLCBub3RpY2VfZmluaXNoZWRfZmlsZSwgY2hlY2tfZGVwKQoJKGZfbXRpbWUsIG5hbWVfbXRpbWUsIGxpYnJhcnlfc2VhcmNoKTogTGlrZXdpc2UuCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBMaWtld2lzZS4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogRG8gbm90IGFzc3VtZSB0aGF0ICh0aW1lX3QpIC0xIGVxdWFscwoJTk9ORVhJU1RFTlRfTVRJTUUuICBXaGVuIGZ1dHppbmcgd2l0aCB0aW1lIHN0YW1wcywgYWRqdXN0IGJ5CgltdWx0aXBsZXMgb2YgMioqMzAsIG5vdCAxMCoqOS4gIERvIG5vdCBjYWxjdWxhdGUgdGltZXN0YW1wCglhZGp1c3RtZW50cyBvbiBET1MgdW5sZXNzIHRoZXkgYXJlIG5lZWRlZC4KCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV90YXJnZXQpOiBEbyBub3QgYXNzdW1lIHRoYXQKCUZJTEVfVElNRVNUQU1QX1MgeWllbGRzIC0xIGZvciBhIG5vbmV4aXN0ZW50IGZpbGUsIGFzIHRoYXQgaXMKCW5vIGxvbmdlciB0cnVlIHdpdGggdGhlIG5ldyByZXByZXNlbnRhdGlvbi4KCgkqIGZpbGUuYyAoZmlsZV90aW1lc3RhbXBfY29ucyk6IE5ldyBmdW5jdGlvbiwgcmVwbGFjaW5nCglGSUxFX1RJTUVTVEFNUF9GUk9NX1NfQU5EX05TLiAgQWxsIHVzZXMgY2hhbmdlZC4KCShmaWxlX3RpbWVzdGFtcF9ub3cpOiBVc2UgRklMRV9USU1FU1RBTVBfSElfUkVTIGluc3RlYWQgb2YgMSA8CglGSUxFX1RJTUVTVEFNUFNfUEVSX1MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UncmUgdXNpbmcgaGktcmVzCgl0aW1lc3RhbXBzLgoJKHByaW50X2ZpbGUpOiBQcmludCBPTERfTVRJTUUgdmFsdWVzIGFzICJ2ZXJ5IG9sZCIgaW5zdGVhZCBvZgoJYXMgYSB0aW1lc3RhbXAuCgoyMDAwLTA1LTMxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIHJlbWFrZS5jIChuYW1lX210aW1lKTogQ2hlY2sgZm9yIHN0YXQgZmFpbHVyZXMuICBSZXRyeSBpZiBFSU5UUi4KCjIwMDAtMDUtMjQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogVGhlICJwb3NpdGl2ZV9pbnQiIHN3aXRjaCB1c2VzIGF0b2koKQoJd2hpY2ggc3VjY2VlZHMgZm9yIGFueSBpbnB1dCwgYW5kIGRvZXNuJ3Qgbm90aWNlIGlmIGV4dHJhLAoJbm9uLWRpZ2l0IHRleHQgaXMgYWZ0ZXIgdGhlIG51bWJlci4gIFRoaXMgY2F1c2VzIG1ha2UgdG8gbWlzLXBhcnNlCgljb21tYW5kIGxpbmVzIGxpa2UgIm1ha2UgLWogNWZvbyIgYXMgIm1ha2UgLWo1IiAoaWdub3JpbmcgImZvbyIKCWNvbXBsZXRlbHkpIGluc3RlYWQgb2YgIm1ha2UgLWowIDVmb28iICh3aGVyZSAiNWZvbyIgaXMgYQoJdGFyZ2V0KS4gIEZpeCB0aGlzIGJ5IGNoZWNraW5nIHRoZSB2YWx1ZSBieSBoYW5kLiAgV2UgY291bGQgdXNlCglzdHJ0b2woKSBpZiB3ZSB3ZXJlIHN1cmUgb2YgaGF2aW5nIGl0OyB0aGlzIGlzIHRoZSBvbmx5CglxdWVzdGlvbmFibGUgdXNlIG9mIGF0b2koKSBJIGZvdW5kIHNvIHdlJ2xsIGp1c3Qgc3RpY2sgd2l0aCB0aGF0LgoJRml4ZXMgUFIvMTcxNi4KCgkqIGkxOG4vamEucG8sIGkxOG4vbmwucG8sIGkxOG4vcHRfQlIucG86IE5ldyB0cmFuc2xhdGlvbiBmaWxlcy4KCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZGVkIHB0X0JSLgoKMjAwMC0wNS0yMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IEZpeCBidWcgd2hlbiBoYW5kbGluZyBmdXR1cmUgb2RkCgl0aW1lc3RhbXBzIGluIHRoZSBXSU5ET1dTMzIgY2FzZS4gIERvIG5vdCBib3RoZXIgaW5pdGlhbGl6aW5nCglzdGF0aWMgdmFyIHRvIHplcm8uICBTaW1wbGlmeSBjb2RlIHRoYXQgd29ya3MgYXJvdW5kIFdJTkRPV1MzMgoJYW5kIF9fTVNET1NfXyB0aW1lIHNrZXcgYnJhaW4gZGFtYWdlLgoKMjAwMC0wNS0yMiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBqb2IuYzogRG9uJ3QgaW5jbHVkZSB0aW1lLmgsIGFzIG1ha2UuaCBhbHJlYWR5IGRvZXMgdGhpcy4KCjIwMDAtMDUtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogY29uZmlndXJlLmluIChBQ19DSEVDS19IRUFERVJTKTogQWRkIHN5cy90aW1lLmguCgkoQUNfSEVBREVSX1RJTUUpOiBBZGQuCgkoY2xvY2tfZ2V0dGltZSk6IFByZWZlciAtbHJ0IHRvIC1scG9zaXg0LCBmb3IgU29sYXJpcyA3LgoJKGdldHRpbWVvZmRheSk6IEFkZCBjaGVjayBmb3Igc3RhbmRhcmQgdmVyc2lvbiBvZiBnZXR0aW1lb2ZkYXkuCglUaGlzIG1lcmdlcyBjaGFuZ2VzIHdyaXR0ZW4gYnkgUGF1bCBELiBTbWl0aC4KCgkqIGZpbGUuYyAoZmlsZV90aW1lc3RhbXBfbm93KTogIFVzZSBnZXR0aW1lb2ZkYXkgaWYgYXZhaWxhYmxlCglhbmQgaWYgY2xvY2tfZ2V0dGltZSBkb2VzIG5vdCB3b3JrLiAgRG9uJ3QgYm90aGVyIHdpdGgKCWhpZ2gtcmVzb2x1dGlvbiBjbG9ja3MgaWYgZmlsZSB0aW1lc3RhbXBzIGhhdmUgb25seSBvbmUtc2Vjb25kCglyZXNvbHV0aW9uLgoKCSogbWFrZS5oIDxzeXMvdGltZS5oPjogSW5jbHVkZSwgY29uZGl0aW9uYWxseSBvbiB0aGUgdXN1YWwKCVRJTUVfV0lUSF9TWVNfVElNRSBhbmQgSEFWRV9TWVNfVElNRV9IIG1hY3Jvcy4gIFRoaXMgaXMgbmVlZGVkCglmb3IgZ2V0dGltZW9mZGF5LgoKMjAwMC0wNS0yMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogV2Ugd2VyZW4ndCBrZWVwaW5nIG1ha2VmaWxlIG5hbWVzIGFyb3VuZAoJdW5sZXNzIHRoZXJlIHdhcyBhIHJ1bGUgZGVmaW5lZCBpbiB0aGVtOyBidXQgbm93IHdlIG5lZWQgdG8ga2VlcAoJdGhlbSBmb3IgdmFyaWFibGVzIGFzIHdlbGwuICBGb3JnZXQgdHJ5aW5nIHRvIGJlIGZhbmN5OiBqdXN0IGtlZXAKCWV2ZXJ5IG1ha2VmaWxlIG5hbWUgd2Ugc3VjY2Vzc2Z1bGx5IG9wZW4uCgoJKiByZW1vdGUtY3N0bXMuYyAoc3RhcnRfcmVtb3RlX2pvYl9wKTogQ2hhbmdlIERCX0VYVFJBICg/KSB0byBEQl9KT0JTLgoKMjAwMC0wNS0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBjb21tYW5kcy5jIChjaG9wX2NvbW1hbmRzKTogRW5zdXJlIGN0eXBlIG1hY3JvIGFyZ3MgYXJlIG5vbm5lZ2F0aXZlLgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kX3N0cmluZyk6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jIChzdWJzdF9leHBhbmQsIGxvb2t1cF9mdW5jdGlvbiwgbXNkb3Nfb3BlbnBpcGUpOgoJTGlrZXdpc2UuCgkqIGpvYi5jICh2bXNfcmVkaXJlY3QsIHN0YXJ0X2pvYl9jb21tYW5kLCBuZXdfam9iLCBjaGlsZF9leGVjdXRlX2pvYiwKCWNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwsIGNvbnN0cnVjdF9jb21tYW5kX2FyZ3YpOiBMaWtld2lzZS4KCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzLCBxdW90ZV9mb3JfZW52KTogTGlrZXdpc2UuCgkqIG1pc2MuYyAoY29sbGFwc2VfY29udGludWF0aW9ucywgZW5kX29mX3Rva2VuLCBlbmRfb2ZfdG9rZW5fdzMyLAoJbmV4dF90b2tlbik6IExpa2V3aXNlLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUsIGRvX2RlZmluZSwgY29uZGl0aW9uYWxfbGluZSwKCWZpbmRfY2hhcl91bnF1b3RlLGdldF9uZXh0X213b3JkKTogTGlrZXdpc2UuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogTGlrZXdpc2UuCgkqIHczMi9wYXRoc3R1ZmYuYyAoY29udmVydF92cGF0aF90b193aW5kb3dzMzIpOiBMaWtld2lzZS4KCjIwMDAtMDUtMTAgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWluLmMgKG1haW4pIFtfX01TRE9TX19dOiBBZGQgU0lHRlBFIHRvIHNpZ25hbHMgd2UgYmxvY2sgd2hlbgoJcnVubmluZyBjaGlsZCBwcm9ncmFtcywgdG8gcHJldmVudCBNYWtlIGZyb20gZHlpbmcgb24gV2luZG93cyA5WAoJd2hlbiB0aGUgY2hpbGQgdHJpZ2dlcnMgYW4gRlAgZXhjZXB0aW9uLgoKMjAwMC0wNS0wOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZGlyLmMgKGZpbmRfZGlyZWN0b3J5KSBbV0lORE9XUzMyXTogSWYgd2Ugc3RyaXAgYSB0cmFpbGluZyAiXCIKCWZyb20gdGhlIGRpcmVjdG9yeSBuYW1lLCByZW1lbWJlciB0byBhZGQgaXQgYmFjay4gIFRoZSBhcmd1bWVudAoJbWlnaHQgcmVhbGx5IGJlIGluc2lkZSBhIGxvbmdlciBzdHJpbmcgKGUuZy4gJVBhdGglKSBhbmQgaWYgeW91Cglkb24ndCByZXN0b3JlIHRoZSAiXCIgaXQnbGwgYmUgdHJ1bmNhdGVkIHBlcm1hbmVudGx5LiAgRml4ZXMgUFIvMTcyMi4KCVJlcG9ydGVkIGJ5IDxzdGV2ZW5Ac3VyZmNhc3QuY29tPgoKMjAwMC0wNS0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtXSU5ET1dTMzJdOiBBZGRlZCAicmQiCglhbmQgInJtZGlyIiB0byB0aGUgbGlzdCBvZiBjb21tYW5kLmNvbSBjb21tYW5kcy4KCVJlcG9ydGVkIGJ5IEVsb2QgSG9ydmF0aCA8RWxvZF9Ib3J2YXRoQGxub3RlczUuYmFua29mbnkuY29tPgoKMjAwMC0wNC0yNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogaTE4bi9qYS5wbzogTmV3IHRyYW5zbGF0aW9uIGZpbGUgZnJvbSB0aGUgSmFwYW5lc2UgbGFuZ3VhZ2UgdGVhbS4KCjIwMDAtMDQtMTggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogSWYgYXJfbWVtYmVyX2RhdGUoKSByZXR1cm5zIC0xICh0aGUgbWVtYmVyCglkb2Vzbid0IGV4aXN0KSwgdGhlbiByZXR1cm4gKEZJTEVfVElNRVNUQU1QKS0xIHJhdGhlciB0aGFuCglyZXR1cm5pbmcgdGhlIHRpbWVzdGFtcCBjYWxjdWxhdGVkIGZyb20gdGhlIHZhbHVlIC0xLiAgRml4ZXMgUFIvMTY5Ni4KCVJlcG9ydGVkIGJ5IEdpbGxlcyBCb3VyaGlzIDxHaWxsZXMuQm91cmhpc0B1bml2LXJlbm5lczEuZnI+LgoKMjAwMC0wNC0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlnLmguVzMyLnRlbXBsYXRlOiBBZGQgTE9DQUxFRElSIG1hY3JvIHJlc29sdmluZyB0byAiIi4KCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYyAocHJvY2Vzc19iZWdpbik6IFJlbW92ZSByZWZlcmVuY2UgdG8KCWRlYnVnX2ZsYWc7IGNoYW5nZSBpdCB0byBhIERCKCkgY2FsbC4gIEZpeGVzIFBSLzE3MDAuCglSZXBvcnRlZCBieSBKaW0gU21pdGggPGp3a3NtaXRoQGF0dGdsb2JhbC5uZXQ+CgoyMDAwLTA0LTE3ICBCcnVubyBIYWlibGUgIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+CgoJKiBhcnNjYW4uYyBbQmVPU106IEFkZCByZXBsYWNlbWVudCBmb3Igbm9uZXhpc3RlbnQgPGFyLmg+IGZyb20gR05VCgliaW51dGlscy4KCjIwMDAtMDQtMTEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9idWlsdGluX2Z1bmN0aW9uKTogSWYgbm8gYXJndW1lbnRzIHdlcmUKCXByb3ZpZGVkLCBqdXN0IHF1aXQgZWFybHkgcmF0aGVyIHRoYW4gY2hhbmdpbmcgZWFjaCBmdW5jdGlvbiB0bwoJdGVzdCBmb3IgdGhpcy4KCShmdW5jdGlvbl90YWJsZVtdKTogQ2hhbmdlIHRoZSBtaW4gIyBvZiBhcmd1bWVudHMgdG8gMCBmb3IgYWxsCgl0aG9zZSBmdW5jdGlvbnMgZm9yIHdoaWNoIGl0IG1ha2VzIHNlbnNlIChjdXJyZW50bHkgZXZlcnl0aGluZwoJdGhhdCB1c2VkIHRvIHRha2UgYSBtaW5pbXVtIG9mIDEgYXJndW1lbnQsIGV4Y2VwdCAkKGNhbGwgLi4uKSkuCglGaXhlcyBQUi8xNjg5LgoKMjAwMC0wNC0wOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIFJFQURNRS5ET1M6IEFkZCBpbnN0cnVjdGlvbnMgdG8gaW5zdGFsbCBhIGJpbmFyeSBkaXN0cm8uCglNZW50aW9uIGxhdGVzdCB2ZXJzaW9ucyBvZiBXaW5kb3dzLgoKMjAwMC0wNC0wNyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1haW4uYyAobWFpbik6IFJlbmFtZSBUTVBfVEVNUExBVEUgaW50byBERUZBVUxUX1RNUERJUiwgYW5kIHVzZQoJaXQgZm9yIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLiAgSWYgUF90bXBkaXIgaXMKCWRlZmluZWQsIHVzZSBpdCBpbiBwcmVmZXJlbmNlIHRvICIvdG1wLyIuICBUcnkgJFRNUERJUiwgJFRFTVAsIGFuZAoJJFRNUCBpbiB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIGRlZmF1bHRpbmcgdG8gREVGQVVMVF9UTVBESVIuCgkocHJpbnRfdmVyc2lvbik6IEFkZCB5ZWFyIDIwMDAgdG8gdGhlIENvcHlyaWdodCBsaW5lLgoKMjAwMC0wNC0wNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc5IHJlbGVhc2VkLgoKCSogbWFrZS50ZXhpbmZvOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiB3aXRoIG5ldyBmZWF0dXJlcyBmb3IgMy43OS4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfd29yZGxpc3QpOiBEb24ndCByZS1vcmRlciBhcmd1bWVudHMgdG8KCXdvcmRsaXN0LgoKMjAwMC0wNC0wMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBBcmNoaXZlIG1lbWJlciB0aW1lc3RhbXBzIGFyZSBzdG9yZWQgYXMKCXRpbWVfdCwgd2l0aG91dCBuYW5vc2Vjb25kcy4gIEJ1dCwgZl9tdGltZSgpIHdhbnRzIHRvIHJldHVybgoJbmFub3NlY29uZCBpbmZvIG9uIHRob3NlIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGl0LiAgU28sIGNvbnZlcnQgdGhlCglyZXR1cm4gdmFsdWUgb2YgYXJfbWVtYmVyX2RhdGUoKSBpbnRvIGEgRklMRV9USU1FU1RBTVAsIHVzaW5nIDAgYXMKCXRoZSBuYW5vc2Vjb25kcy4KCjIwMDAtMDMtMjggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43OC45MiByZWxlYXNlZC4KCgkqIGJ1aWxkLnRlbXBsYXRlOiBVcGRhdGVzIGZvciBnZXR0ZXh0IHN1cHBvcnQ7IHNvbWUgYnVncyBmaXhlZC4KCjIwMDAtMDMtMjcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YjogVXBkYXRlZCBmcm9tIGNvbmZpZyBDVlMgYXJjaGl2ZSBhdAoJOnBzZXJ2ZXI6YW5vbmN2c0BzdWJ2ZXJzaW9ucy5nbnUub3JnOi9ob21lL2N2cyBhcyBvZiB0b2RheS4KCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogQ2hlY2sgaWYgZXhwYW5kaW5nIGEgc3RhdGljIHBhdHRlcm4KCXJ1bGUncyBwcmVyZXF1aXNpdGUgcGF0dGVybiBsZWF2ZXMgYW4gZW1wdHkgc3RyaW5nIGFzIHRoZQoJcHJlcmVxdWlzaXRlLCBhbmQgaXNzdWUgYW4gZXJyb3IgaWYgc28uICBGaXhlcyBQUi8xNjcwLgoJKHJlYWRfbWFrZWZpbGUpOiBTdG9yZSB0aGUgc3RhcnRpbmcgbGluZW51bWJlciBmb3IgYSBydWxlIGluCglUR1RTX1NUQVJURUQuCgkocmVjb3JkX3dhaXRpbmdfZmlsZXMpOiBVc2UgdGhlIFRHVFNfU1RBUlRFRCB2YWx1ZSBmb3IgdGhlIGZpbGUKCWxvY2F0aW9uIHBhc3NlZCB0byByZWNvcmRfZmlsZSgpIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQKCWxpbmVudW1iZXIsIHNvIGVycm9yIG1lc3NhZ2VzIGxpc3QgdGhlIGxpbmUgd2hlcmUgdGhlIHRhcmdldCB3YXMKCWRlZmluZWQgaW5zdGVhZCBvZiB0aGUgbGluZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBydWxlIGRlZmluaXRpb24uCgoJKiByZW1ha2UuYyAoc3RhcnRfdXBkYXRpbmcsIGZpbmlzaF91cGRhdGluZywgaXNfdXBkYXRpbmcpOiBGaXgKCVBSLzE2NzE7IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBpbiBkb3VibGUtY29sb24gcnVsZXMgYXJlIG5vdAoJZGlhZ25vc2VkLiAgVGhlc2UgbWFjcm9zIHNldCB0aGUgdXBkYXRpbmcgZmxhZyBpbiB0aGUgcm9vdAoJZG91YmxlLWNvbG9uIGZpbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBvbmUsIGlmIGl0J3MgcGFydCBvZiBhCglkb3VibGUtY29sb24gbGlzdC4gIFRoaXMgc29sdXRpb24gcHJvdmlkZWQgYnkgVGltIE1hZ2lsbAoJPG1hZ2lsbEBnYXRlLm5ldD47IEkganVzdCBjaGFuZ2VkIHRoZSBtYWNybyBuYW1lcyA6KS4KCSh1cGRhdGVfZmlsZV8xKTogQ2FsbCB0aGVtLgoJKGNoZWNrX2RlcCk6IENhbGwgdGhlbS4KCglUaGUgY2hhbmdlIHRvIG5vdCBhdXRvbWF0aWNhbGx5IGV2YWx1YXRlIHRoZSAkKGNhbGwgLi4uKQoJZnVuY3Rpb24ncyBhcmd1bWVudHMgYnJlYWtzIHJlY3Vyc2l2ZSB1c2Ugb2YgY2FsbC4gIEFsdGhvdWdoIHVzaW5nCgkkKGlmIC4uLikgYW5kICQoZm9yZWFjaCAuLi4pIGluICQoY2FsbCAuLi4pIG1hY3JvcyBpcyBpbXBvcnRhbnQsCgl0aGUgZXJyb3IgY29uZGl0aW9ucyBnZW5lcmF0ZWQgYXJlIHNpbXBseSB0byBvYnNjdXJlIGZvciBtZSB0bwoJZmVlbCBjb21mb3J0YWJsZSB3aXRoLiAgSWYgYSBtZXRob2QgaXMgZGV2aXNlZCB0byBnZXQgYm90aAoJd29ya2luZywgd2UnbGwgcmV2aXNpdC4gIEZvciBub3csIHJlbW92ZSB0aGlzIGNoYW5nZS4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmN0aW9uX3RhYmxlKTogVHVybiBvbiB0aGUgZXhwYW5kIGJpdCBmb3IgZnVuY19jYWxsLgoJKGZ1bmNfY2FsbCk6IERvbid0IGV4cGFuZCBhcmd1bWVudHMgZm9yIGJ1aWx0aW4gZnVuY3Rpb25zOyB0aGF0Cgl3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCgoyMDAwLTAzLTI2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogTmV2ZXIgcmVtb3ZlIHRhcmdldHMgZXhwbGljaXRseQoJcmVxdWVzdGVkIG9uIHRoZSBjb21tYW5kLWxpbmUgYnkgY2hlY2tpbmcgdGhlIGNtZF90YXJnZXQgZmxhZy4KCUZpeGVkIFBSLzE2NjkuCgoyMDAwLTAzLTIzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGZpbGVkZWYuaCAoRklMRV9USU1FU1RBTVBfU1RBVF9NT0RUSU1FKTogVXNlIHN0X210aW1lIGluc3RlYWQgb2YKCXN0X210aW0udHZfc2VjOyB0aGUgbGF0dGVyIGRvZXNuJ3Qgd29yayBvbiBVbml4d2FyZS4KCjIwMDAtMDMtMTggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogSWYgd2UncmUgdHJ5aW5nIHRvIGNoYW5nZSBhIGZpbGUgaW50bwoJaXRzZWxmLCBqdXN0IHJldHVybi4gIFdlIHVzZWQgdG8gYXNzZXJ0IHRoaXMgd2Fzbid0IHRydWUsIGJ1dAoJc29tZW9uZSBjYW1lIHVwIHdpdGggYSB3ZWlyZCBjYXNlIGludm9sdmluZyBhcmNoaXZlcy4gIEFmdGVyCglwbGF5aW5nIHdpdGggaXQgZm9yIGEgd2hpbGUgSSBkZWNpZGVkIGl0IHdhcyBPSyB0byBpZ25vcmUgaXQuCgoJKiBkZWZhdWx0LmM6IERlZmluZSBDT0ZMQUdTIHRvIGVtcHR5IHRvIGF2b2lkIHNwdXJpb3VzIHdhcm5pbmdzLgoKCSogZmlsZWRlZi5oOiBDaGFuZ2UgI2lmIFNUX01USU1fTlNFQyB0byAjaWZkZWY7IHRoaXMgaXMgYSBtYWNybwoJY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgbnNlYyBmaWVsZCwgbm90IHRydWUvZmFsc2UuCgkqIG1ha2UuaDogRGl0dG8uCglSZXBvcnRlZCBieSBNYXJjbyBGcmFuemVuIDxNYXJjby5GcmFuemVuQFRoeXJvbi5jb20+LgoKMjAwMC0wMy0wOCAgVGltIE1hZ2lsbCAgPG1hZ2lsbEBnYXRlLm5ldD4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IFJldHVybiB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHBydW5lZAoJZmlsZSB3aGVuIHBydW5pbmcsIG5vdCBqdXN0IDAuICBGaXhlcyBQUi8xNjM0LgoKMjAwMC0wMi0yNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBDbG9zZSBhIG1pbm9yIHBvdGVudGlhbCBzZWN1cml0eSBob2xlOyBpZiB5b3UncmUKCXJlYWRpbmcgbWFrZWZpbGVzIGZyb20gc3RkaW4gKHdobyBkb2VzIHRoYXQ/KSB5b3UgY291bGQgcnVuIGludG8gYQoJcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgdGVtcCBmaWxlIHVzaW5nIG1rdGVtcCgpIG9yIHRtcG5hbSgpLiAgQWRkCglhIGNoZWNrIGZvciBta3N0ZW1wKCkgYW5kIGZkb3BlbigpLgoJKiBtYWluLmMgKG9wZW5fdG1wZmlsZSk6IE5ldyBmdW5jdGlvbiB0byBvcGVuIGEgdGVtcG9yYXJ5IGZpbGUuCglJZiB3ZSBoYXZlIG1rc3RlbXAoKSAoYW5kIGZkb3BlbigpKSwgdXNlIHRoYXQuICBJZiBub3QgdXNlCglta3RlbXAoKSBvciB0bXBuYW0oKS4gIElmIHdlIGhhdmUgZmRvcGVuKCksIHVzZSBvcGVuKCkgdG8gb3BlbiB0aGUKCWZpbGUgT19DUkVBVHxPX0VYQ0wuICBJZiBub3QsIGZhbGwgYmFjayB0byBub3JtYWwgZm9wZW4oKSAoaW5zZWN1cmUpLgoJKG1haW4pOiBDYWxsIGl0LgoJKiBqb2IuYyAoY2hpbGRfZXhlY3V0ZV9qb2IpIFtWTVNdOiBDYWxsIGl0LgoKCSogdmFyaWFibGUuYyAobG9va3VwX3ZhcmlhYmxlKTogSWYgd2UgZmluZCBhIHZhcmlhYmxlIHdoaWNoIGlzCgliZWluZyBleHBhbmRlZCwgdGhlbiBub3RlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgdGhyb3VnaCB0aGUgcmVzdCBvZgoJdGhlIHNldCBsaXN0IHRvIHNlZSBpZiB3ZSBjYW4gZmluZCBvbmUgdGhhdCBpc24ndC4gIElmIHdlIGRvLAoJcmV0dXJuIHRoYXQuICBJZiB3ZSBkb24ndCwgcmV0dXJuIHRoZSBvcmlnaW5hbC4gIEZpeCBmb3IgUFIvMTYxMC4KCglXaGlsZSBpbXBsZW1lbnRpbmcgdGhpcyBJIHJlYWxpemVkIHRoYXQgaXQgYWxzbyBzb2x2ZXMgUFIvMTM4MCBpbgoJYSBtdWNoIG1vcmUgZWxlZ2FudCB3YXkuICBJIGRvbid0IGtub3cgd2hhdCBJIHdhcyBzbW9raW5nIGJlZm9yZS4KCVNvLCByZW1vdmUgdGhlIGhhY2thZ2Ugc3Vycm91bmRpbmcgdGhlIG9yaWdpbmFsIGZpeCBmb3IgdGhhdCAoc2VlCgliZWxvdykuICBDaGFuZ2UgdGhpcyBmdW5jdGlvbiBiYWNrIHRvIGxvb2t1cF92YXJpYWJsZSBhbmQgcmVtb3ZlCgl0aGUgZXh0cmEgc2V0bGlzdCBhcmd1bWVudC4KCSogdmFyaWFibGUuaCAocmVjdXJzaXZlbHlfZXhwYW5kX3NldGxpc3QpOiBSZW1vdmUgdGhlIG1hY3JvLAoJcmVuYW1lIHRoZSBwcm90b3R5cGUsIGFuZCByZW1vdmUgdGhlIGV4dHJhIHNldGxpc3QgYXJndW1lbnQuCgkobG9va3VwX3ZhcmlhYmxlKTogRGl0dG8uCgkqIGV4cGFuZC5jIChyZWN1cnNpdmVseV9leHBhbmQpOiBSZW5hbWUgYW5kIHJlbW92ZSB0aGUgZXh0cmEKCXNldGxpc3QgYXJndW1lbnQuCgkocmVmZXJlbmNlX3ZhcmlhYmxlKTogVXNlIGxvb2t1cF92YXJpYWJsZSgpIGFnYWluLgoJKGFsbG9jYXRlZF92YXJpYWJsZV9hcHBlbmQpOiBSZW1vdmUgdGhlIGV4dHJhIHNldGxpc3QgYXJndW1lbnQuCgoyMDAwLTAyLTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBSRUFETUUudGVtcGxhdGU6IEEgZmV3IHVwZGF0ZXMuCgoJKiBpMThuL2RlLnBvOiBOZXcgdmVyc2lvbiBmcm9tIHRoZSBHZXJtYW4gdHJhbnNsYXRpb24gdGVhbS4KCjIwMDAtMDItMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43OC45MSByZWxlYXNlZC4KCjIwMDAtMDItMDcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlc2V0ICpwMiB0byAnOicsIG5vdCAqY29sb25wLiAgSWYgYW55CglmaWxlbmFtZXMgY29udGFpbmVkIGJhY2tzbGFzaGVzIHRoZSByZXN1bHRpbmcgb3V0cHV0ICh3aXRob3V0CgliYWNrc2xhc2hlcykgd2lsbCBiZSBzaG9ydGVyLCBzbyBzZXR0aW5nICpjb2xvbnAgZG9lc24ndCBjaGFuZ2UKCXRoZSByaWdodCBjaGFyYWN0ZXIuICBGaXggZm9yIFBSLzE1ODYuCgoJRm9yICs9IHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZXMgd2UgbmVlZCB0byByZW1lbWJlciB3aGljaAoJdmFyaWFibGUgc2V0IHdlIGZvdW5kIHRoZSB2YXJpYWJsZSBpbiwgc28gd2UgY2FuIHN0YXJ0IGxvb2tpbmcKCWZyb20gdGhlcmUgaW4gdGhlIG5leHQgaXRlcmF0aW9uIChvdGhlcndpc2Ugd2UgbWlnaHQgc2VlIGl0IGFnYWluCglpbiByZWN1cnNpdmVseV9leHBhbmQgYW5kIGZhaWwhKS4gIFRoaXMgaXMgdHVybmluZyBpbnRvIGEgaGFjazsgaWYKCWl0IGdldHMgYW55IHdvcnNlIHdlJ2xsIGhhdmUgdG8gcmV0aGluayB0aGlzIGVudGlyZSBhbGdvcml0aG0uLi4KCWltcGxlbWVudGluZyBleHBhbnNpb24gb2YgdGhlc2UgcmVmZXJlbmNlcyBzZXBhcmF0ZWx5IGZyb20gdGhlCgkibm9ybWFsIiBleHBhbnNpb24sIHNheSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgc2FtZSBjb2RlcGF0aC4KCUFjdHVhbGx5LCBpdCdzIGFscmVhZHkgIndvcnNlIGVub3VnaCIgOi0vLgoJRml4IGZvciBQUi8xMzgwLgoKCSogdmFyaWFibGUuaCAocmVjdXJzaXZlbHlfZXhwYW5kX3NldGxpc3QpOiBSZW5hbWUKCXJlY3Vyc2l2ZWx5X2V4cGFuZCB0byBhZGQgYSBzdHJ1Y3QgdmFyaWFibGVfc2V0X2xpc3QgYXJndW1lbnQsIGFuZAoJbWFrZSBhIG1hY3JvIGZvciByZWN1cnNpdmVseV9leHBhbmQuCgkobG9va3VwX3ZhcmlhYmxlX3NldGxpc3QpOiBSZW5hbWUgbG9va3VwX3ZhcmlhYmxlIHRvIGFkZCBhIHN0cnVjdAoJdmFyaWFibGVfc2V0X2xpc3QgYXJndW1lbnQsIGFuZCBtYWtlIGEgbWFjcm8gZm9yIGxvb2t1cF92YXJpYWJsZS4KCgkqIGV4cGFuZC5jIChyZWN1cnNpdmVseV9leHBhbmRfc2V0bGlzdCk6IFRha2UgYW4gZXh0cmEgc3RydWN0Cgl2YXJpYWJsZV9zZXRfbGlzdCBhcmd1bWVudCBhbmQgcGFzcyBpdCB0byBhbGxvY2F0ZWRfdmFyaWFibGVfYXBwZW5kKCkuCgkocmVmZXJlbmNlX3ZhcmlhYmxlKTogVXNlIGxvb2t1cF92YXJpYWJsZV9zZXRsaXN0KCkgYW5kIHBhc3MgdGhlCglyZXR1cm5lZCB2YXJpYWJsZV9zZXRfbGlzdCB0byByZWN1cnNpdmVseV9leHBhbmRfc2V0bGlzdC4KCShhbGxvY2F0ZWRfdmFyaWFibGVfYXBwZW5kKTogVGFrZSBhbiBleHRyYSBzZXRsaXN0IGFyZ3VtZW50IGFuZAoJdXNlIHRoaXMgYXMgdGhlIHN0YXJ0aW5nIHBsYWNlIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgYXBwZW5kZWQKCWV4cGFuc2lvbi4gIElmIGl0J3MgbnVsbCwgdXNlIGN1cnJlbnRfdmFyaWFibGVfc2V0X2xpc3QgYXMgYmVmb3JlLgoKCSogdmFyaWFibGUuYyAobG9va3VwX3ZhcmlhYmxlX3NldGxpc3QpOiBJZiB0aGUgTElTVFAgYXJndW1lbnQgaXMKCW5vdCBuaWwsIHNldCBpdCB0byB0aGUgbGlzdCBjb250YWluaW5nIHRoZSB2YXJpYWJsZSB3ZSBmb3VuZC4KCjIwMDAtMDItMDQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHZhcmlhYmxlLmMgKHByaW50X3ZhcmlhYmxlKTogV3JpdGUgb3V0IGZpbGVuYW1lL2xpbmVudW1iZXIKCWluZm9ybWF0aW9uIGZvciB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbiBpZiBwcmVzZW50LgoJKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBTdG9yZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBpZiBwcm92aWRlZC4KCShkZWZpbmVfdmFyaWFibGUsIGRlZmluZV92YXJpYWJsZV9mb3JfZmlsZSk6IFJlbW92ZWQuCgkodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBVc2UgZGVmaW5lX3ZhcmlhYmxlX2xvYygpIHRvIGtlZXAKCXZhcmlhYmxlIGRlZmluaXRpb24gbG9jYXRpb24gaW5mb3JtYXRpb24uCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEtlZXAgdmFyaWFibGUgZGVmaW5pdGlvbiBsb2NhdGlvbiBpbmZvLgoJKGRvX2RlZmluZSk6IERpdHRvLgoJKHJlY29yZF90YXJnZXRfdmFyKTogRGl0dG8uCgkqIHZhcmlhYmxlLmggKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBOZXcgZmlsZWluZm8gYXJndW1lbnQuCgkoZGVmaW5lX3ZhcmlhYmxlLCBkZWZpbmVfdmFyaWFibGVfbG9jLCBkZWZpbmVfdmFyaWFibGVfZm9yX2ZpbGUpOgoJRGVjbGFyZSBuZXcgbWFjcm9zLgoKCUZpeCBQUi8xNDA3OgoKCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IFJlbmFtZSBwYXR2YXIgdG8gcGF0X3ZhcmlhYmxlcyBhbmQgbWFrZQoJaXQganVzdCBhIHZhcmlhYmxlX3NldF9saXN0OyB3ZSBuZWVkIG91ciBvd24gY29weSBvZiB0aGUgcGF0dGVybgoJdmFyaWFibGUncyB2YXJpYWJsZSBzZXQgbGlzdCBoZXJlIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRoZSBnbG9iYWwKCW9uZS4KCSogdmFyaWFibGUuYyAoaW5pdGlhbGl6ZV9maWxlX3ZhcmlhYmxlcyk6IE1vdmUgdGhlIGluc3RhbnRpYXRpb24KCW9mIHRoZSBwYXRfdmFyaWFibGVzIHBvaW50ZXIgaGVyZS4gIE9ubHkgZG8gdGhlIHNlYXJjaCBhZnRlciB3ZSdyZQoJZG9uZSByZWFkaW5nIHRoZSBtYWtlZmlsZXMgc28gd2UgZG9uJ3Qgc2VhcmNoIHRvbyBlYXJseS4gIElmCgl0aGVyZSdzIGEgcGF0X3ZhcmlhYmxlcyB2YWx1ZSwgc2V0IHVwIHRoZSB2YXJpYWJsZXMgbmV4dCBwdHIuCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGUpOiBSZW1vdmUgdGhlIHNldHVwIG9mIHRoZQoJcGF0X3ZhcmlhYmxlcyBpbmZvOyBpdCdzIGRvbmUgZWFybGllciBub3cgdG8gZW5zdXJlIHRoZSBwYXJlbnQncwoJcGF0dGVybiB2YXJpYWJsZXMgYXJlIHNldCB1cCBjb3JyZWN0bHkgYXMgd2VsbC4KCjIwMDAtMDItMDMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChzaF9jaGFyc19kb3MpIFtXSU5ET1dTMzJdOiBBZGQgIiYiIGFzIGEgc2hlbGwKCW1ldGFjaGFyYWN0ZXIgZm9yIHRoZSBXMzIgRE9TIHNoZWxsLgoJUmVwb3J0ZWQgYnkgV2FycmVuIEpvbmVzIDx3am9uZXNAdGMuZmx1a2UuY29tPi4KCjIwMDAtMDItMDIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglGaXhlcyBmb3IgdGhlIE9wZW5WTVMgcG9ydCBmcm9tIEhhcnRtdXQgQmVja2VyIDxiZWNrZXJAcnRvLmRlYy5jb20+CgoJKiBjb25maWcuaC12bXMgW1ZNU106IERlZmluZSBMT0NBTEVESVIgdG8gc29tZXRoaW5nOyBuZWVkZWQgZm9yCgl0aGUgZXhwYW5zaW9uIG9mIGJpbmR0ZXh0ZG9tYWluKCkgZXZlbiB0aG91Z2ggaXQncyBhIG5vLW9wLgoJKiB2bXNmdW5jdGlvbnMuYyAoc3RyY21waSk6IFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiBzdHJjbXBpKCkuCgkocmVhZGRpcik6IFVzZSBEQigpIGluc3RlYWQgb2YgdGVzdGluZyBkZWJ1Z19mbGFnLgoJKiBkaXIuYyAoZmlsZV9pbXBvc3NpYmxlKSBbVk1TXTogU2VhcmNoICJwIiBub3QgIm5hbWUiLgoJKiBqb2IuYyBbVk1TXTogU3dpdGNoIGZyb20gZGVidWdfZmxhZyB0byB0aGUgbmV3IERCIG1hY3JvLiAgQWRkCglzb21lIGkxOG4gXygpIG1hY3JvcyAoZXZlbiB0aG91Z2ggVk1TIGRvZXNuJ3QgeWV0IHN1cHBvcnQgaXQpLgoKCSogZnVuY3Rpb24uYyAocGF0c3Vic3RfZXhwYW5kKTogQ2hhbmdlICJsZW4iIHRvIG5vdCBiZSB1bnNpZ25lZCB0bwoJYXZvaWQgdHlwZSBtaXNtYXRjaGVzLgoKCSogbWFpbi5jIChtYWluKTogRGVjbGFyZSBzaWduYW1lX2luaXQoKSBpZiB3ZSdyZSBnb2luZyB0byBjYWxsIGl0LgoKMjAwMC0wMS0yOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZTogVHJhY2sgY2hhbmdlcyBpbiBNYWtlZmlsZS5pbgoJKGluc3RhbGwtcmVjdXJzaXZlLCB1bmluc3RhbGwtcmVjdXJzaXZlKTogQWRkIG1pc3NpbmcgdGFyZ2V0cy4KCShERVNURElSKTogRGVmaW5lLgoJKGluc3RhbGwtYmluUFJPR1JBTVMsIHVuaW5zdGFsbC1iaW5QUk9HUkFNUyk6IFVzZSAkKERFU1RESVIpLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19fTVNET1NfX106IERlZmluZSBDWFggdG8gZ3BwLgoKMjAwMC0wMS0yNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZ2V0dGV4dC5jOiBTb21lIHdhcm5pbmcgY2xlYW51cHMsIGFuZCBhIGZpeCBmb3Igc3lzdGVtcyB3aGljaAoJZG9uJ3QgZGVmaW5lIEhBVkVfQUxMT0NBICh0aGUgd29ya2Fyb3VuZCBjb2RlIHdhcyBpbmNsdWRlZAoJdHdpY2UpLgoKMjAwMC0wMS0yNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc4LjkwIHJlbGVhc2VkLgoKMjAwMC0wMS0yNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCUNoYW5nZSBnZXR0ZXh0IHN1cHBvcnQgdG8gdXNlIHRoZSBzaW1wbGlmaWVkIHZlcnNpb24gaW4gbGliaXQgMC43LgoKCSogZ2V0b3B0LmMsIG1ha2UuaDogVXNlIGdldHRleHQuaCBpbnN0ZWFkIG9mIGxpYmludGwuaC4KCSogQUJPVVQtTkxTLCBnZXR0ZXh0LmgsIGdldHRleHQuYzogTmV3IGZpbGVzIGZyb20gbGliaXQgMC43LgoJTW9kaWZpZWQgdG8gcmVtb3ZlIHNvbWUgc3RhdGljIGRlY2xhcmF0aW9ucyB3aGljaCBhcmVuJ3QgZGVmaW5lZC4KCSogYWNjb25maWcuaDogVXNlIG5ldyBnZXR0ZXh0ICNkZWZpbmVzLgoJKiBhY2luY2x1ZGUubTQ6IEFkZCBmcF9XSVRIX0dFVFRFWFQ7IHJlbW92ZSBBTV9HTlVfR0VUVEVYVC4KCSogY29uZmlndXJlLmluOiBDYWxsIGZwX1dJVEhfR0VUVEVYVCBpbnN0ZWFkLgoJKiBNYWtlZmlsZS5hbTogTmV3IGdldHRleHQgc3R1ZmYuICBBbHNvIGZvcmNlIGluY2x1c2lvbiBvZiBnbG9iCglmaWxlcyBmb3Igc3lzdGVtcyB3aGljaCBoYXZlIExJQkMgZ2xvYi4KCgkqIGkxOG4vTWFrZWZpbGUuYW0sIGkxOG4vLmN2c2lnbm9yZTogTmV3IGRpciBmb3IgdHJhbnNsYXRpb24gZmlsZXMuCgkqIGkxOG4vZGUucG8sIGkxOG4vZXMucG8sIGkxOG4vZnIucG8sIGkxOG4va28ucG8sIGkxOG4vbmwucG86CgkqIGkxOG4vcGwucG8sIGkxOG4vcnUucG86IEltcG9ydCB0cmFuc2xhdGlvbnMgYWxyZWFkeSBkb25lIGZvcgoJZWFybGllciB2ZXJzaW9ucyBvZiBHTlUgbWFrZS4gIFRoYW5rcyBmb3IgdGhhdCB3b3JrISEKCgkqIHBvL01ha2VmaWxlLmluLmluLCBwby9QT1RGSUxFUy5pbjogUmVtb3ZlZC4KCjIwMDAtMDEtMjMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAoZGVjb2RlX2RlYnVnX2ZsYWdzKTogSWYgZGVidWdfZmxhZyBpcyBzZXQsIGVuYWJsZSBhbGwKCWRlYnVnZ2luZyBsZXZlbHMuCgkoZGVidWdfZmxhZyk6IFJlc3VycmVjdCB0aGlzIGZsYWcgdmFyaWFibGUuCgkoc3dpdGNoZXMpOiBNYWtlIC1kIGdpdmUgdGhlIG9sZCBiZWhhdmlvciBvZiB0dXJuaW5nIG9uIGFsbAoJZGVidWdnaW5nLiAgQ2hhbmdlIC0tZGVidWcgYWxvbmUgdG8gZW1pdCBiYXNpYyBkZWJ1Z2dpbmcgYW5kIHRha2UKCW9wdGlvbmFsIGFyZ3VtZW50cyB0byBleHBhbmQgZGVidWdnaW5nLgoJKiBORVdTOiBEb2N1bWVudCB0aGUgbmV3IGRlYnVnZ2luZyBvcHRpb25zLgoKCSogcmVtYWtlLmMgKG5vX3J1bGVfZXJyb3IpOiBSZW1vdmUgdGhpcyBmdW5jdGlvbi4gIFRoaXMgdHJpZXMgdG8KCWZpeCBhIHJlYWwgcHJvYmxlbS0tc2VlIHRoZSBkZXNjcmlwdGlvbiB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YKCXRoaXMgZnVuY3Rpb24gYmVsb3cuICBIb3dldmVyLCB0aGUgY3VyZSBpcyB3b3JzZSB0aGFuIHRoZSBkaXNlYXNlCglhbmQgdGhpcyBhcHByb2FjaCB3b24ndCB3b3JrLgoJKHJlbWFrZV9maWxlKTogUHV0IHRoZSBjb2RlIGZyb20gbm9fcnVsZV9lcnJvciBiYWNrIGhlcmUuCgkodXBkYXRlX2ZpbGVfMSk6IFJlbW92ZSBjYWxsIHRvIG5vX3J1bGVfZXJyb3IuCgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogUmVtb3ZlIG1maWxlX3N0YXR1cyBmaWVsZC4KCjIwMDAtMDEtMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglJbnRlZ3JhdGUgR05VIGdldHRleHQgc3VwcG9ydC4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFNX0dOVV9HRVRURVhULgoJKiBNYWtlZmlsZS5hbTogQWRkIG9wdGlvbnMgZm9yIHNldHRpbmcgTE9DQUxFRElSLCAtSWludGwsIGV0Yy4KCSogYWNpbmNsdWRlLm00OiBBZGQgZ2V0dGV4dCBhdXRvY29uZiBtYWNyb3MuCgkqIGFjY29uZmlnLmg6IEFkZCBuZXcgZ2V0dGV4dCAjZGVmaW5lcy4KCSogbWFrZS5oOiBJbmNsdWRlIGxpYmludGwuaC4gIE1ha2Ugc3VyZSBfKCkgYW5kIE5fKCkgbWFjcm9zIGFyZQoJZGVjbGFyZWQuICBNYWtlIGdldHRleHQoKSBhbiBlbXB0eSBtYWNybyBpcyBOTFMgaXMgZGlzYWJsZWQuCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoIHN3aXRjaGVzW10pOiBDYW4ndCBpbml0aWFsaXplCglzdGF0aWMgZGF0YSB3aXRoIF8oKSAoZ2V0dGV4dCBjYWxscyksIHNvIHVzZSBOXygpIHRoZXJlIHRoZW4gdXNlCglnZXR0ZXh0KCkgZGlyZWN0bHkgd2hlbiBwcmludGluZyB0aGUgc3RyaW5ncy4KCSogcmVtYWtlLmMgKG5vX3J1bGVfZXJyb3IpOiBUaGUgc3RyaW5nIGNvbnN0YW50cyBjYW4ndCBiZSBzdGF0aWMKCXdoZW4gaW5pdGlhbGl6aW5nIF8oKSBtYWNyb3MuCgkqIGZpbGUuYyAocHJpbnRfZmlsZSk6IFJlZm9ybWF0IGEgZmV3IHN0cmluZ3MgdG8gd29yayBiZXR0ZXIgZm9yCgl0cmFuc2xhdGlvbi4KCSogcG8vUE9URklMRVMuaW4sIHBvL01ha2VmaWxlLmluLmluOiBOZXcgZmlsZXMuICBUYWtlCglNYWtlZmlsZS5pbi5pbiBmcm9tIHRoZSBsYXRlc3QgR05VIHRhciBkaXN0cmlidXRpb24sIGFzIHRoYXQKCXZlcnNpb24gd29ya3MgYmV0dGVyIHRoYW4gdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGggZ2V0dGV4dC4KCSogTkVXUzogTWVudGlvbiBpMThuIGFiaWxpdHkuCgoyMDAwLTAxLTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJSW5zdGFsbGVkIHBhdGNoZXMgZm9yIHRoZSBWTVMgcG9ydC4KCVBhdGNoZXMgcHJvdmlkZWQgYnk6IEhhcnRtdXQgQmVja2VyIDxIYXJ0bXV0LkJlY2tlckBjb21wYXEuY29tPgoKCSogcmVhZG1lLnZtcywgYXJzY2FuLmMsIGNvbmZpZy5oLXZtcywgZGVmYXVsdC5jLCBkaXIuYywgZmlsZS5jOgoJKiBpbXBsaWNpdC5jLCBqb2IuYywgbWFrZS5oLCBtYWtlZmlsZS5jb20sIG1ha2VmaWxlLnZtcywgcnVsZS5jOgoJKiB2YXJpYWJsZS5jLCB2bXNkaXIuaCwgdm1zZnVuY3Rpb25zLmMsIHZtc2lmeS5jLCBnbG9iL2dsb2IuYzoKCSogZ2xvYi9nbG9iLmg6IEluc3RhbGxlZCBwYXRjaGVzLiAgU2VlIHJlYWRtZS52bXMgZm9yIGRldGFpbHMuCgoyMDAwLTAxLTE0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogZGlyLmMgKHJlYWRfZGlyc3RyZWFtKTogSW5pdGlhbGl6ZSBkX3R5cGUgaWYgaXQgZXhpc3RzLgoKMjAwMC0wMS0xMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCVJlc29sdmUgUFIveHh4eDogZG9uJ3QgYXV0b21hdGljYWxseSBldmFsdWF0ZSB0aGUgJChjYWxsIC4uLikKCWZ1bmN0aW9uJ3MgYXJndW1lbnRzLiAgV2hpbGUgd2UncmUgaGVyZSwgY2xlYW4gdXAgYXJndW1lbnQgcGFzc2luZwoJcHJvdG9jb2wgdG8gYWx3YXlzIHVzZSBzaW1wbGUgbnVsLXRlcm1pbmF0ZWQgc3RyaW5ncywgaW5zdGVhZCBvZgoJc29tZXRpbWVzIHVzaW5nIG9mZnNldCBwb2ludGVycyB0byBtYXJrIHRoZSBlbmQgb2YgYXJndW1lbnRzLgoJVGhpcyBjaGFuZ2UgYWxzbyBmaXhlcyBQUi8xNTE3LgoJUmVwb3J0ZWQgYnkgRGFtaWVuIEdJQk9VIDxkYW1pZW4uZ2lib3VAc3QuY29tPi4KCgkqIGZ1bmN0aW9uLmMgKHN0cnVjdCBmdW5jdGlvbl90YWJsZV9lbnRyeSk6IFJlbW92ZSB0aGUgbmVnYXRpdmUKCXJlcXVpcmVkX2FyZ3MgaGFjazsgcHV0IGluIGV4cGxpY2l0IG1pbiBhbmQgbWF4ICMgb2YgYXJndW1lbnRzLgoJKGZ1bmN0aW9uX3RhYmxlKTogQWRkIGluIHRoZSBtYXggdmFsdWUuICBUdXJuIG9mZiB0aGUgZXhwYW5kIGJpdAoJZm9yIGZ1bmNfY2FsbC4KCShleHBhbmRfYnVpbHRpbl9mdW5jdGlvbik6IFRlc3QgYWdhaW5zdCBtaW5pbXVtX2FyZ3MgaW5zdGVhZCBvZgoJdGhlIG9ic29sZXRlIHJlcXVpcmVkX2FyZ3MuCgkoaGFuZGxlX2Z1bmN0aW9uKTogUmV3cml0ZSB0aGlzLiAgV2UgZG9uJ3QgdHJ5IHRvIGJlIGZhbmN5IGFuZAoJcGFzcyBvbmUgc3R5bGUgb2YgYXJndW1lbnRzIHRvIGV4cGFuZGVkIGZ1bmN0aW9ucyBhbmQgYW5vdGhlcgoJc3R5bGUgdG8gbm9uLWV4cGFuZGVkIGZ1bmN0aW9uczogcGFzcyBwb2ludGVycyB0byBudWwtdGVybWluYXRlZAoJc3RyaW5ncyB0byBhbGwgZnVuY3Rpb25zLgoJKGZ1bmNfY2FsbCk6IFJld3JpdGUgdGhpcy4gIElmIHdlIGFyZSBpbnZva2luZyBhIGJ1aWx0aW4gZnVuY3Rpb24KCWFuZCBpdCdzIHN1cHBvc2VkIHRvIGhhdmUgaXRzIGFyZ3VtZW50cyBleHBhbmRlZCwgZG8gdGhhdCAoc2luY2UKCWl0J3Mgbm90IGRvbmUgYnkgaGFuZGxlX2Z1bmN0aW9uIGZvciAkKGNhbGwgLi4uKSBhbnltb3JlKS4gIEZvcgoJbm9uLWJ1aWx0aW5zLCBqdXN0IGFkZCB0aGUgdmFyaWFibGVzIGFzIGJlZm9yZSBidXQgbWFyayB0aGVtIGFzCglyZWN1cnNpdmUgc28gdGhleSdsbCBiZSBleHBhbmRlZCBsYXRlciwgYXMgbmVlZGVkLgoJKGZ1bmNfaWYpOiBBbGwgYXJndW1lbnRzIGFyZSB2YW5pbGxhIG51bC10ZXJtaW5hdGVkIHN0cmluZ3M6CglyZW1vdmUgdHJpY2tlcnkgd2l0aCAiYXJndlsxXS0xIi4KCShmdW5jX2ZvcmVhY2gpOiBEaXR0by4KCgkqIGV4cGFuZC5jIChleHBhbmRfYXJndW1lbnQpOiBJZiB0aGUgc2Vjb25kIGFyZyBpcyBOVUxMLCBleHBhbmQKCXRoZSBlbnRpcmUgZmlyc3QgYXJndW1lbnQuCgoJKiBqb2IuYyAobmV3X2pvYik6IFplcm8gdGhlIGNoaWxkIHN0cnVjdC4gIFRoaXMgY2hhbmdlIHdhcyBqdXN0CgltYWRlIHRvIGtlZXAgc29tZSBoZWFwIGNoZWNraW5nIHNvZnR3YXJlIGhhcHB5LCBub3QgYmVjYXVzZSB0aGVyZQoJd2FzIGFuIGFjdHVhbCBidWcgKHRoZSBpbXBvcnRhbnQgbWVtb3J5IHdhcyBiZWluZyBjbGVhcmVkIHByb3Blcmx5KS4KCjE5OTktMTItMTUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHZhcmlhYmxlLmMgKHByaW50X3ZhcmlhYmxlKTogUHJpbnQgdGhlIHZhcmlhYmxlIHdpdGggKz0gaWYgdGhlCglhcHBlbmQgZmxhZyBpcyBzZXQuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFJlbW92ZSB0aGUgZXh0cmEgY2hlY2sgb2YgdGhlCglpbXBsaWNpdCBmbGFnIGFkZGVkIG9uIDgvMjQvMTk5OC4gIFRoaXMgY2F1c2VzIHByb2JsZW1zIGFuZCB0aGUKCXJlYXNvbiBmb3IgdGhlIGNoYW5nZSB3YXMgYmV0dGVyIHJlc29sdmVkIGJ5IHRoZSBjaGFuZ2UgbWFkZSB0bwoJY2hlY2tfZGVwcygpIG9uIDE5OTgtMDgtMjYuICBUaGlzIGZpeGVzIFBSLzE0MjMuCgoxOTk5LTEyLTA4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBkaXIuYyAoZGlyX3NldHVwX2dsb2IpOiBPbiA2NCBiaXQgUmVsaWFudFVOSVggKDUuNDQgYW5kIGFib3ZlKQoJaW4gTEZTIG1vZGUsIHN0YXQoKSBpcyBhY3R1YWxseSBhIG1hY3JvIGZvciBzdGF0NjQoKS4gIEFzc2lnbm1lbnQKCWRvZXNuJ3Qgd29yayBpbiB0aGF0IGNhc2UuICBTbywgc3RhdCBpcyBhIG1hY3JvLCBtYWtlIGEgbG9jYWwKCXdyYXBwZXIgZnVuY3Rpb24gdG8gaW52b2tlIGl0LgoJKGxvY2FsX3N0YXQpOiBXcmFwcGVyIGZ1bmN0aW9uLCBpZiBuZWVkZWQuCglSZXBvcnRlZCBieSBBbmRyZWogQm9yc2Vua293IDxBbmRyZWouQm9yc2Vua293QG1vdy5zaWVtZW5zLnJ1Pi4KCjE5OTktMTItMDIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IE1vdmUgdGhlIGNvbnNpZGVyZWQgdGVzdCBvdXRzaWRlIHRoZQoJZG91YmxlLWNvbG9uIGxvb3AsIF9idXRfIG1ha2Ugc3VyZSB3ZSB0ZXN0IHRoZSBkb3VibGVfY29sb24gdGFyZ2V0Cglub3QgdGhlICJjdXJyZW50IiB0YXJnZXQuICBJZiB3ZSBzdG9wIGVhcmx5IGJlY2F1c2Ugb25lCglkb3VibGUtY29sb24gdGFyZ2V0IGlzIHJ1bm5pbmcsIG1hcmsgYWxsIHRoZSByZXN0IGNvbnNpZGVyZWQgYW5kCgl0cnkgdG8gc3RhcnQgdGhlaXIgcHJlcmVxdWlzaXRlcyAoc28gdGhleSdyZSBtYXJrZWQgY29uc2lkZXJlZCkuCglGaXggZm9yIFBSLzE0NzYgc3VnZ2VzdGVkIGJ5IFRpbSBNYWdpbGwgPHRpbS5tYWdpbGxAdGVsb3BzLmd0ZS5jb20+LgoKMTk5OS0xMS0yMiAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAZGV2LnRpdm9saS5jb20+CgoJKiBmdW5jdGlvbi5jICh3aW5kb3dzMzJfb3BlbnBpcGUsIGZ1bmNfc2hlbGwpOiBDb3JyZWN0IFdpbmRvd3MzMgoJcHJvYmxlbSB3aGVyZSAkKHNoZWxsIG5vc3VjaGZpbGUpIHdvdWxkIGluY29ycmVjdGx5IGV4aXQgbWFrZS4gVGhlCglmaXggaXMgdG8gcHJpbnQgdGhlIGVycm9yIGFuZCBsZXQgbWFrZSBjb250aW51ZS4KCVJlcG9ydGVkIGJ5IERhdmlkIE1hc3RlcnNvbiA8RGF2aWQuTWFzdGVyc29uQGtsYS10ZW5jb3IuY29tPi4KCgkqIHczMi9zdWJwcm9jL21pc2MuYyAoYXJyMmVudmJsayk6IE1lbW9yeSBsZWFrIGZpeC4KCjE5OTktMTEtMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglSZXdvcmsgR05VIG1ha2UgZGVidWdnaW5nIHRvIHByb3ZpZGUgZGlmZmVyZW50IGxldmVscyBvZiBvdXRwdXQuCgoJKiBORVdTOiBtZW50aW9uIGl0LgoJKiBkZWJ1Zy5oOiBOZXcgZmlsZS4gIERlZmluZSB2YXJpb3VzIGRlYnVnZ2luZyBsZXZlbHMgYW5kIG1hY3Jvcy4KCSogZnVuY3Rpb24uYywgaW1wbGljaXQuYywgam9iLmMsIG1haW4uYywgbWlzYy5jLCByZWFkLmMsIHJlbWFrZS5jCgkqIHJlbW90ZS1jc3Rtcy5jLCB2bXNmdW5jdGlvbnMuYzogUmVwbGFjZSBhbGwgY29kZSBkZXBlbmRpbmcgb24KCWRlYnVnX2ZsYWcgd2l0aCBpbnZvY2F0aW9ucyBvZiBkZWJ1Z2dpbmcgbWFjcm9zLgoJKiBtYWtlLmg6IFJlbW92ZSBkZWJ1Z19mbGFnIGFuZCBERUJVR1BSLCBhZGQgZGJfbGV2ZWwuCgoxOTk5LTExLTE4ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGFjaW5jbHVkZS5tNCAoQUNfU1lTX0xBUkdFRklMRV9GTEFHUyk6IFdvcmsgYXJvdW5kIGEgcHJvYmxlbQoJd2l0aCB0aGUgUU5YIDQuMjUgc2hlbGwsIHdoaWNoIGRvZXNuJ3QgcHJvcGFnYXRlIGV4aXQgc3RhdHVzIG9mCglmYWlsZWQgY29tbWFuZHMgaW5zaWRlIHNoZWxsIGFzc2lnbm1lbnRzLgoKMTk5OS0xMS0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZnVuY3Rpb24uYyAoZnVuY19pZik6IEZpbmQgdGhlIGVuZCBvZiB0aGUgYXJnIGxpc3QgYnkgdGVzdGluZwoJdGhlIG5leHQgaXRlbSBmb3IgTlVMTDsgYW55IG90aGVyIHRlc3QgaXMgbm90IGNvcnJlY3QuCglSZXBvcnRlZCBieSBHcmFoYW0gUmVlZCA8Z3JhaGFtckBhbGdvcml0aG1pY3MuY29tPiAoUFIvMTQyOSkuCgoJRml4ICs9IHdoZW4gdXNlZCBpbiBhIHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSBjb250ZXh0LgoKCSogdmFyaWFibGUuaDogTmV3IGJpdGZpZWxkIEFQUEVORCBzZXQgaWYgd2UgaGF2ZSBhICs9Cgl0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IEFkZCBhbiBhcmd1bWVudCB0byBzcGVjaWZ5CglpZiB3ZSdyZSB0cnlpbmcgYSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUuICBJZiB3ZSBhcmUgYW5kIGl0J3MgYW4KCWFwcGVuZCBzdHlsZSwgZG9uJ3QgYXBwZW5kIGl0LCByZWNvcmQgaXQgYXMgbm9ybWFsIHJlY3Vyc2l2ZSwgYnV0CglzZXQgdGhlIEFQUEVORCBmbGFnIHNvIGl0J2xsIGJlIGV4cGFuZGVkIGxhdGVyLgoJKiBtYWluLmMgKGhhbmRsZV9ub25fc3dpdGNoX2FyZ3VtZW50KTogVXNlIG5ldwoJdHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24oKSBzaWduYXR1cmUuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSxyZWNvcmRfdGFyZ2V0X3Zhcik6IERpdHRvLgoKCSogZXhwYW5kLmMgKGFsbG9jYXRlZF92YXJpYWJsZV9hcHBlbmQpOiBOZXcgZnVuY3Rpb246IGxpa2UKCWFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQoKSwgYnV0IHdlIGV4cGFuZCB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lCglpbiB0aGUgY29udGV4dCBvZiB0aGUgYGBuZXh0JycgdmFyaWFibGUgc2V0LCB0aGVuIHdlIGFwcGVuZCB0aGlzCglleHBhbmRlZCB2YWx1ZS4KCShyZWN1cnNpdmVseV9leHBhbmQpOiBJbnZva2UgaXQsIGlmIHRoZSBBUFBFTkQgYml0IGlzIHNldC4KCjE5OTktMTEtMTAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogSWYgdGhlIC5OT1RQQVJBTExFTCB0YXJnZXQgaXMgZGVmaW5lZCwgdHVybgoJb2ZmIHBhcmFsbGVsIGJ1aWxkcyBmb3IgdGhpcyBtYWtlIG9ubHkgKHN0aWxsIGFsbG93IHN1Ym1ha2VzIHRvIGJlCglydW4gaW4gcGFyYWxsZWwpLgoJKiBtYWluLmM6IE5ldyB2YXJpYWJsZSwgYGBub3RfcGFyYWxsZWwnJy4KCSogbWFrZS5oOiBBZGQgYW4gZXh0ZXJuIGZvciBpdC4KCSogam9iLmMgKG5ld19qb2IpOiBUZXN0IE5PVF9QQVJBTExFTCBhcyB3ZWxsIGFzIEpPQl9TTE9UUy4KCSogTkVXUzogQWRkIGluZm8gb24gLk5PVFBBUkFMTEVMLgoJKiBtYWtlLnRleGluZm8gKFNwZWNpYWwgVGFyZ2V0cyk6IERvY3VtZW50IGl0LgoKCSogY29uZmlndXJlLmluIChHTE9CRElSKTogU2V0IHRvICJnbG9iIiBpZiB3ZSBuZWVkIHRvIGJ1aWxkIHRoZQoJZ2xvYiBsaWJyYXJ5LgoJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IFVzZSB0aGUgR0xPQkRJUiB2YXJpYWJsZSBpbnN0ZWFkIG9mCgkiZ2xvYiIgc28gd2UgZG9uJ3QgdHJ5IHRvIGJ1aWxkIGdsb2IgaWYgd2UgZG9uJ3QgbmVlZCB0byAoaWYgd2UKCWhhdmUgR0xJQkMgZ2xvYikuICBSZXBvcnRlZCBieSBMYXJzIEhlY2tpbmcgPGxoZWNraW5nQG5tcmMudWNjLmllPi4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IHB1dCAiKioqIiBpbiB0aGUgY2xvY2sgc2tldyB3YXJuaW5nCgltZXNzYWdlLiAgUmVwb3J0ZWQgYnkga2FybEBnbnUub3JnLgoKCSogbWFrZS5oOiBSZW1vdmUgdW5uZWVkZWQgc2lnbmFsIHNldHVwLgoKCSogc2lnbmFtZS5jOiBSZW1vdmUgZXh0cmFuZW91cyAjaW5jbHVkZXM7IHNvbWUgdmVyc2lvbnMgb2YgVWx0cml4Cglkb24ndCBwcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9ucyBhbmQgaXQgY2F1c2VzIGNvbXBpbGUKCWVycm9ycy4gIFJlcG9ydGVkIGJ5IFNpbW9uIEJ1cmdlIDxzaW1vbmJAdGhpc3RsZWRvd24uY29tLmF1Pi4KCjE5OTktMTAtMTUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAocXVvdGVfZm9yX2Vudik6IFJlbmFtZSBmcm9tIHF1b3RlX2FzX3dvcmQoKS4KCgkqIG1ha2UuaCwgKi5jOiBQcmVmZXIgc3RyY2hyKCkgYW5kIHN0cnJjaHIoKSBpbiB0aGUgY29kZQoJcmF0aGVyIHRoYW4gaW5kZXgoKSBhbmQgcmluZGV4KCkuICBEZWZpbmUgc3RyY2hyL3N0cnJjaHIgaW4gdGVybXMKCW9mIGluZGV4L3JpbmRleCBpZiB0aGUgZm9ybWVyIGFyZW4ndCBzdXBwb3J0ZWQuCgoJKiBkZWZhdWx0LmMgKENIRUNLT1VULHYpOiBSZXBsYWNlIHRoZSBmYW5jeSwgY29tcGxpY2F0ZWQKCXBhdHN1YnN0L2ZpbHRlciBleHByZXNzaW9uIHdpdGggYSBzaW1wbGUgJChpZiAuLi4pIGV4cHJlc3Npb24uCgoJKiBtYWluLmMgKHByaW50X3VzYWdlKTogQWRkIHRoZSBidWcgcmVwb3J0aW5nIG1haWxpbmcgYWRkcmVzcyB0bwoJdGhlIC0taGVscCBvdXRwdXQsIGFzIHBlciB0aGUgR05VIGNvZGluZyBzdGFuZGFyZHMuCglSZXBvcnRlZCBieSBQYXVsIEVnZ2VydCA8ZWdnZXJ0QHR3aW5zdW4uY29tPi4KCgkqIFJFQURNRS5jdXN0b21zOiBJbnN0YWxsZWQgaW5mb3JtYXRpb24gb24gcnVubmluZyBDdXN0b21zLWl6ZWQKCUdOVSBtYWtlIGFuZCBzZXR1aWQgcm9vdCwgY29sbGVjdGVkIGJ5IFRlZCBTdGVybiA8c3Rlcm5AdGVyYS5jb20+LgoKCSogcmVhZC5jIChyZWFkX2FsbF9tYWtlZmlsZXMpOiBQUi8xMzk0OiBNYXJrIHRoZSBlbmQgb2YgdGhlIG5leHQKCXRva2VuIGluIHRoZSBNQUtFRklMRVMgdmFsdWUgc3RyaW5nIF9iZWZvcmVfIHdlIGR1cCBpdC4KCjE5OTktMTAtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAobWFrZV9jdl9zeXNfZ251X2dsb2IpOiBXZSB1c2VkIHRvIGFkZCB0aGUgLUlnbG9iCglmbGFnIHRvIENQUEZMQUdTLCBidXQgdGhhdCBsb3NlcyBpZiB0aGUgdXNlciBzcGVjaWZpZXMgaGlzIG93bgoJQ1BQRkxBR1M7IHRoaXMgb25lIGdldHMgYWRkZWQgX2FmdGVyXyBoaXMgYW5kIGlmIGhlIGhhcHBlbnMgdG8KCWhhdmUgYW4gb2xkIG9yIGJyb2tlbiBnbG9iLmgtLWJvb20uICBJbnN0ZWFkLCBwdXQgaXQgaW4gR0xPQklOQwoJYW5kIFNVQlNUIGl0LgoKCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkIEBHTE9CSU5DQCB0byB0aGUgSU5DTFVERVMgbWFjcm87Cgl0aGVzZSB0aGluZ3MgZ2V0IG9uIHRoZSBjb21waWxlIGxpbmUgd2VsbCBiZWZvcmUgdGhlIHVzZXIncwoJQ1BQRkxBR1MuCgoxOTk5LTEwLTEyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBJZiB3ZSBnZXQgaGVyZSBhbmQgLW4gaXMgc2V0LAoJc2VlIGlmIGFsbCB0aGUgY29tbWFuZCBsaW5lcyBhcmUgbWFya2VkIHJlY3Vyc2l2ZS4gIElmIHNvLCB0aGVuIHdlCglyYW4gZXZlcnkgY29tbWFuZCB0aGVyZSBpcywgc28gY2hlY2sgdGhlIG10aW1lIG9uIHRoaXMgZmlsZSBqdXN0CglsaWtlIHdlIHdvdWxkIG5vcm1hbGx5LiAgSWYgbm90LCB3ZSBhc3N1bWUgdGhlIGNvbW1hbmQgd2UgZGlkbid0CglydW4gd291bGQgdXBkYXRlcyB0aGUgdGFyZ2V0IGFuZCBzZXQgbXRpbWUgb2YgdGhlIHRhcmdldCB0byAidmVyeSBuZXciLgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogVXBkYXRlIGxpbmVzX2ZsYWdzIGluIHRoZSBmaWxlJ3MgY21kcwoJc3RydWN0dXJlIHdpdGggYW55IHBlci1saW5lIHRva2VucyB3ZSBmb3VuZCAoYEAnLCBgLScsIGArJykuCgoxOTk5LTEwLTA4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiB2YXJpYWJsZS5jIChpbml0aWFsaXplX2ZpbGVfdmFyaWFibGVzKTogQWx3YXlzIHJlY3Vyc2UgdG8KCWluaXRpYWxpemUgdGhlIHBhcmVudCdzIGZpbGUgdmFyaWFibGVzOiB0aGUgcGFyZW50IG1pZ2h0IG5vdCBoYXZlCglhbnkgcnVsZXMgdG8gcnVuIHNvIGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYmVmb3JlCgl0aGlzLS13ZSBuZWVkIHRoaXMgdG8gc2V0IHVwIHRoZSBjaGFpbiBwcm9wZXJseSBmb3IKCXRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZXMuCgoxOTk5LTA5LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIG1haW4uYyAocXVvdGVfYXNfd29yZCk6IEFsd2F5cyBxdW90ZSBmb3IgZGVjb2RlX2Vudl9zd2l0Y2hlcwogICAgICAgIGluc3RlYWQgb2YgZm9yIHRoZSBzaGVsbCwgc28gdGhhdCBhcmd1bWVudHMgd2l0aCBzdHJhbmdlCiAgICAgICAgY2hhcmFjdGVycyBhcmUgYXJlIHBhc3NlZCB0byBzdWJtYWtlcyBjb3JyZWN0bHkuICBSZW1vdmUKICAgICAgICBkb3VibGVfZG9sbGFycyBhcmc7IHdlIGFsd2F5cyBkb3VibGUgZG9sbGFycyBub3cuICBBbGwgY2FsbGVycwogICAgICAgIGNoYW5nZWQuCiAgICAgICAgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBEb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YgYW4gZW52aXJvbm1lbnQKICAgICAgICB2YXJpYWJsZSB3aG9zZSBjb250ZW50cyBlbmRzIGluIGEgdW5lc2NhcGVkIGJhY2tzbGFzaC4KCjE5OTktMDktMjMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbW1hbmRzLmMsIGZ1bmN0aW9uLmMsIGpvYi5jLCByZWFkLmM6IENhc3QgYXJndW1lbnRzIHRvCgljdHlwZS5oIGZ1bmN0aW9ucy9tYWNyb3MgdG8gX3Vuc2lnbmVkXyBjaGFyIGZvciBwb3J0YWJpbGl0eS4KCgkqIHJlbWFrZS5jLCBmdW5jdGlvbi5jOiBDb21waWxlciB3YXJuaW5nIGZpeGVzOiB0aGUgc2Vjb25kCglhcmd1bWVudCB0byBmaW5kX25leHRfdG9rZW4oKSBzaG91bGQgYmUgYW4gX3Vuc2lnbmVkXyBpbnQqLgoJUmVwb3J0ZWQgYnkgSGFuLVdlbiBOaWVuaHV5cyA8aGFud2VuQGNzLnV1Lm5sPi4KCjE5OTktMDktMjMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43OC4xIHJlbGVhc2VkLgoKCSogbWFrZS50ZXhpbmZvOiBVcGRhdGUgdmVyc2lvbi9kYXRlIHN0YW1wLgoKCSogbWFpbi5jIChtYWluKTogQXJnaC4gIEZvciBzb21lIHJlYXNvbiB3ZSB3ZXJlIGNsb3NpbmcgX2FsbF8gdGhlCglqb2JzZXJ2ZXIgcGlwZXMgYmVmb3JlIHdlIHJlLWV4ZWMnZCBkdWUgdG8gY2hhbmdlZCBtYWtlZmlsZXMuCglUaGlzIG1lYW5zIHRoYXQgYW55IHJlLWV4ZWMgZ290IGEgImpvYnNlcnZlciB1bmF2YWlsYWJsZSIgZXJyb3IgOi0vLgoJSSBjYW4ndCBiZWxpZXZlIHdlIGRpZG4ndCBub3RpY2UgdGhpcyBiZWZvcmUuCgoxOTk5LTA5LTIyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzggcmVsZWFzZWQuCgoJKiBtYWluLmMgKG1haW4pOiBPbmx5IGZhaWwgb24gbXVsdGlwbGUgLS1qb2JzZXJ2ZXItZmRzIG9wdGlvbnMgaWYKCXRoZXkgYXJlbid0IGFsbCB0aGUgc2FtZS4gIFNvbWUgbWFrZWZpbGVzIHVzZSB0aGluZ3MgbGlrZQoJJChNQUtFKSAkKE1GTEFHUykgd2hpY2ggd2lsbCBjYXVzZSBtdWx0aXBsZSwgaWRlbnRpY2FsIGNvcGllcyBvZgoJLS1qb2JzZXJ2ZXItZmRzIHRvIHNob3cgdXAuCgoxOTk5LTA5LTE2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBaZXJvIG91dCBGTEFHU1RSSU5HIHRvIGF2b2lkCgl1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aGVuIGNoZWNraW5nICpwICE9ICctJyBpbiB0aGUgbG9vcC4KCjE5OTktMDktMTUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45NyByZWxlYXNlZC4KCgkqIGNvbmZpZ3VyZS5pbiAoTUFLRV9IT1NUKTogQUNfU1VCU1QgdGhpcyBzbyBpdCB3aWxsIGdvIGludG8gdGhlCgltYWtlZmlsZS4KCSogTWFrZWZpbGUuYW0gKGNoZWNrLWxvY2FsKTogUHJpbnQgYSBzdWNjZXNzIGJhbm5lciBpZiB0aGUgY2hlY2sKCXN1Y2NlZWRzLgoJKGNoZWNrLXJlZ3Jlc3Npb24pOiBBIGJpdCBvZiBmaW5lLXR1bmluZy4KCjE5OTktMDktMTUgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBSRUFETUUuRE9TLnRlbXBsYXRlOiBEb2N1bWVudCByZXF1aXJlbWVudHMgZm9yIHRoZSB0ZXN0IHN1aXRlLgoJKiBNYWtlZmlsZS5ET1MudGVtcGxhdGU6IFVwZGF0ZXMgdG8gYWxsb3cgdGhlIHRlc3Qgc3VpdGUgdG8gcnVuCglmcm9tICJtYWtlIGNoZWNrIi4KCgkqIG1haW4uYyAobWFpbik6IEhhbmRsZSBpdCBpZiBhcmd2WzBdIGlzbid0IGFuIGFic29sdXRlIHBhdGguCgoxOTk5LTA5LTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcuOTYgcmVsZWFzZWQuCgoJKiBNYWtlZmlsZS5hbSAobG9hZGF2Zyk6IFVzZSBDUFBGTEFHUywgZXRjLiB0byBtYWtlIHN1cmUgd2UgZ2V0CglhbGwgdGhlIHJpZ2h0ICNkZWZpbmVzIHRvIGNvbXBpbGUuCgkoY2hlY2stcmVncmVzc2lvbik6IExvb2sgZm9yIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgaW4gdGhlIG1ha2UKCXBhY2thZ2UgaXRzZWxmLiAgSWYgd2UncmUgYnVpbGRpbmcgcmVtb3RlbHksIHVzZSBzeW1saW5rcyB0byBtYWtlCglhIGxvY2FsIGNvcHkuCgkoZGlzdC1ob29rKTogUHV0IHRoZSB0ZXN0IHN1aXRlIGludG8gdGhlIHRhciBmaWxlLgoKCSogY29uZmlndXJlLmluOiBMb29rIGZvciBwZXJsIGZvciB0aGUgdGVzdCBzdWl0ZS4KCjE5OTktMDktMTAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKICAgICAgICAqIGFjaW5jbHVkZS5tNCAoQUNfU1lTX0xBUkdFRklMRV9GTEFHUyk6IElmIG9uIEhQLVVYIDEwLjIwIG9yCiAgICAgICAgbGF0ZXIsIGFuZCB1c2luZyBHQ0MsIGRlZmluZSBfX1NURENfRVhUX187IHRoaXMgd29ya3MgYXJvdW5kIGEKICAgICAgICBidWcgaW4gR0NDIDIuOTUuMS4KCjE5OTktMDktMDggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IFVnaC4gIEdMSUJDJ3MgY29uZmlndXJlIHRyaWVzIHRvIGNoZWNrCgltYWtlIHZlcnNpb24gc3RyaW5ncyBhbmQgaXMgdG9vIGFnZ3Jlc3NpdmUgd2l0aCB0aGVpciBtYXRjaGluZwoJZXhwcmVzc2lvbnMuICBJJ3ZlIHN0cnVjayBhIGRlYWwgd2l0aCB0aGVtIHRvIGxlYXZlIHRoZSB2ZXJzaW9uCglvdXRwdXQgYXMtaXMgZm9yIDMuNzgsIGFuZCB0aGV5J2xsIGNoYW5nZSB0aGVpciBjb25maWd1cmUgY2hlY2tzCglzbyB0aGF0IEkgY2FuIGNoYW5nZSB0aGlzIGJhY2sgaW4gdGhlIGZ1dHVyZS4KCjE5OTktMDktMDcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCkgW19fTVNET1NfX106IEFkZCAiZWNobyIKCWFuZCAidW5zZXQiIHRvIHRoZSBsaXN0IG9mIGJ1aWx0aW4gc2hlbGwgY29tbWFuZHMuCgoJKiBjb25maWdoLkRPUy50ZW1wbGF0ZSAoTUFLRV9IT1NUKTogRGVmaW5lIHRvICJpMzg2LXBjLW1zZG9zZGpncHAiCgl3aGljaCBpcyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlIERKR1BQIGhvc3QuCgoxOTk5LTA5LTA1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcuOTUgcmVsZWFzZWQuCgoJKiBtYWtlLnRleGluZm8gKE1ha2UgRXJyb3JzKTogRG9jdW1lbnQgc29tZSBuZXcgam9ic2VydmVyIGVycm9yCgltZXNzYWdlcy4KCjE5OTktMDktMDQgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWtlLnRleGluZm8gKE1ha2UgRXJyb3JzKTogRG9jdW1lbnQgdGhlIGhpbnQgYWJvdXQgOCBzcGFjZXMKCWluc3RlYWQgb2YgYSBUQUIuCgkoQ2FsbCBGdW5jdGlvbiwgUXVpY2sgUmVmZXJlbmNlKTogVXNlIEBjb2RleyQoMSl9LCBub3QgQHZhci4KCgkqIG1haW4uYyAobWFpbikgW19fTVNET1NfX106IFNheSAib24gdGhpcyBwbGF0Zm9ybSIgaW5zdGVhZCBvZiAib24KCU1TLURPUyIsIHNpbmNlIHRoZSBNU0RPUyB2ZXJzaW9uIGNvdWxkIHJ1biBvbiBXaW5kb3dzLgoKMTk5OS0wOS0wMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogQWx3YXlzIHNldCBtdGltZV9iZWZvcmVfdXBkYXRlCglpZiBpdCdzIG5vdCBiZWVuIHNldCwgbm90IGp1c3QgaWYgd2UgcmFuIHNvbWUgcnVsZXMuICBPdGhlcndpc2Ugd2UKCW1heSBoYXZlIGEgc2l0dWF0aW9uIHdoZXJlIGEgdGFyZ2V0J3MgcHJlcmVxdWlzaXRlIHdhcyByZWJ1aWx0IGJ1dAoJbm90IGNoYW5nZWQsIHNvIHRoaXMgdGFyZ2V0J3MgcnVsZXMgd2VyZW4ndCBydW4sIHRoZW4KCXVwZGF0ZV9nb2FsX2NoYWluKCkgc2VlcyBtdGltZV9iZWZvcmVfdXBkYXRlICE9IGxhc3RfbXRpbWUgYW5kCgl0aGlua3MgdGhhdCB0aGUgdG9wLWxldmVsIHRhcmdldCBjaGFuZ2VkIHdoZW4gaXQgcmVhbGx5IGRpZG4ndC4KCVRoaXMgY2FuIGNhdXNlIGFuIGluZmluaXRlIGxvb3Agd2hlbiByZW1ha2luZyBtYWtlZmlsZXMuCgkodXBkYXRlX2dvYWxfY2hhaW4pOiBJZiB3ZSBnZXQgYmFjayB0byB0aGUgdG9wIGFuZCB3ZSBkb24ndCBrbm93Cgl3aGF0IHRoZSBnb2FsJ3MgbGFzdF9tdGltZSB3YXMsIGZpbmQgaXQgbm93LiAgV2UgbmVlZCB0byBrbm93IHNvCgl3ZSBjYW4gY29tcGFyZSBpdCB0byBtdGltZV9iZWZvcmVfdXBkYXRlIGxhdGVyICh0aGlzIGlzIG9ubHkKCWNydWNpYWwgd2hlbiByZW1ha2luZyBtYWtlZmlsZXMtLXNob3VsZCB3ZSBvbmx5IGRvIGl0IHRoZW4/KQoKMTk5OS0wOS0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgIm92ZXJyaWRlIiBhcHBlYXJzIGFzIHRoZSBmaXJzdAoJcHJlcmVxdWlzaXRlLCBsb29rIGZ1cnRoZXIgdG8gZW5zdXJlIHRoaXMgaXMgcmVhbGx5IGEKCXRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSBkZWZpbml0aW9uLCBhbmQgbm90IGp1c3Qgc29tZQoJcHJlcmVxdWlzaXRlIG5hbWVkICJvdmVycmlkZSIuCgoxOTk5LTA5LTAxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmdW5jdGlvbi5jIChJU19QQVRIU0VQKSBbV0lORE9XUzMyXTogQWxsb3cgYmFja3NsYXNoIHNlcGFyYXRvcnMKCWZvciBXMzIgcGxhdGZvcm1zLgoJKiByZWFkLmMgKHJlY29yZF9maWxlcykgW1dJTkRPV1MzMl06IEFsbG93IGJhY2tzbGFzaCBzZXBhcmF0b3JzCglmb3IgVzMyIHBsYXRmb3Jtcy4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpIFtXSU5ET1dTMzJdOiBBbGxvdyBiYWNrc2xhc2gKCXNlcGFyYXRvcnMgZm9yIFczMiBwbGF0Zm9ybXMuCgoJKiBjb25maWd1cmUuaW4gKE1BS0VfSE9TVCk6IERlZmluZSBpdCB0byBiZSB0aGUgY2Fub25pY2FsIGJ1aWxkCglob3N0IGluZm8sIG5vdyB0aGF0IHdlIG5lZWQgQUNfQ0FOT05JQ0FMX0hPU1QgYW55d2F5IChmb3IgbGFyZ2UKCWZpbGUgc3VwcG9ydCkuCgkqIHZlcnNpb24uYyAobWFrZV9ob3N0KTogRGVmaW5lIGEgdmFyaWFibGUgdG8gTUFLRV9IT1NUIHNvIHdlJ3JlCglzdXJlIHRvIGdldCBpdCBmcm9tIHRoZSBsb2NhbCBjb25maWcuaC4KCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogVXNlIGl0IGluIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uLgoJKiBjb25maWcuYW1pLnRlbXBsYXRlOiBBZGQgTUFLRV9IT1NULgoJKiBjb25maWdoLmRvcy50ZW1wbGF0ZTogRGl0dG8uCgkqIGNvbmZpZy5oLlczMi50ZW1wbGF0ZTogRGl0dG8uCgkqIGNvbmZpZy5oLXZtcy50ZW1wbGF0ZTogRGl0dG8uCgoJKiBtYWluLmMgKG1haW4pOiBDbG9zZSB0aGUgam9ic2VydmVyIGZpbGUgZGVzY3JpcHRvcnMgaWYgd2UgbmVlZAoJdG8gcmUtZXhlYyBvdXJzZWx2ZXMuCglBbHNvIHByaW50IG1vcmUgcmVhc29uYWJsZSBlcnJvciBpZiB1c2VycyBmb3JjZSAtak4gZm9yIHN1Ym1ha2VzLgoJVGhpcyBtYXkgYmUgY29tbW9uIGZvciBhIHdoaWxlIHVudGlsIHBlb3BsZSB1c2UgdGhlIGpvYnNlcnZlcgoJZmVhdHVyZS4gIElmIGl0IGhhcHBlbnMsIHdlIGlnbm9yZSB0aGUgZXhpc3Rpbmcgam9ic2VydmVyIHN0dWZmCglhbmQgdXNlIHdoYXRldmVyIHRoZXkgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4KCShkZWZpbmVfbWFrZWZsYWdzKTogRml4ZWQgYSBsb25nLXN0YW5kaW5nIGJ1ZzogaWYgYSBsb25nIG5hbWUKCW9ubHkgb3B0aW9uIGNvbWVzIGltbWVkaWF0ZWx5IGFmdGVyIGEgc2luZ2xlIGxldHRlciBvcHRpb24gd2l0aCBubwoJYXJndW1lbnQsIHRoZW4gdGhlIG9wdGlvbiBzdHJpbmcgaXMgY29uc3RydWN0ZWQgaW5jb3JyZWN0bHkuICBGb3IKCWV4YW1wbGUsIHdpdGggLXcgYW5kIC0tam9ic2VydmVyLWZkcyB5b3UgZ2V0ICItdy1qb2JzZXJ2ZXItZmRzLi4uIgoJaW5zdGVhZCBvZiAiLXcgLS1qb2JzZXJ2ZXItZmRzLi4uIjsgYWRkIGluIGFuIGV4dHJhICIgLSIuCgoJKiBtYWtlLnRleGluZm8gKFBob255IFRhcmdldHMpOiBBZGQgYW5vdGhlciBleGFtcGxlIG9mIHVzaW5nCgkuUEhPTlkgd2l0aCBzdWJkaXJlY3Rvcmllcy9yZWN1cnNpdmUgbWFrZS4KCjE5OTktMDgtMzAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFJFQURNRS5XMzIudGVtcGxhdGU6IFJlbmFtZWQgZnJvbSBSRUFETUUuVzMyIHNvIGl0J3MKCWF1dG9nZW5lcmF0ZWQgZHVyaW5nIHRoZSBkaXN0LiAgQSBmZXcgbWlub3IgbW9kaWZpY2F0aW9ucy4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGtzdGF0X29wZW4gYmVmb3JlIEFDX0ZVTkNfR0VUTE9BREFWRwoJc2luY2UgdGhlIGxhdHRlciBuZWVkcyB0byBrbm93IHdoZXRoZXIgdGhlIGZvcm1lciBleGlzdHMgdG8gZ2l2ZQoJYW4gYWNjdXJhdGUgcmVzdWx0LgoKMTk5OS0wOC0yNiAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAZGV2LnRpdm9saS5jb20+CgoJKiBOTWFrZWZpbGUgW1dJTkRPV1MzMl06IE5vdyBtb3JlIHJvYnVzdC4gSWYgeW91IGNoYW5nZSBhIGZpbGUKCXVuZGVyIHczMi9zdWJwcm9jLCB0aGUgbWFrZS5leGUgd2lsbCBiZSByZWxpbmtlZC4gQWxzbyBhZGRlZCBzb21lCgl0ZXN0cyB0byBtYWtlIHN1cmUgZXJhc2UgY29tbWFuZHMgd29uJ3QgZmFpbCB3aGVuIGV4ZWN1dGVkIGluIGEKCXByaXN0aW5lIGJ1aWxkIGVudmlyb25tZW50LgoKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYyBbV0lORE9XUzMyXTogQWRkZWQgc3VwcG9ydCBmb3IKCUhBVkVfQ1lHV0lOX1NIRUxMLiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBDeWd3aW4gQjIwLjEgcmVsZWFzZSwgaXQKCWlzIG5vdyBwb3NzaWJsZSB0byBoYXZlIGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yIHRoaXMgc2hlbGwgd2l0aG91dAoJaGF2aW5nIHRvIHJlbHkgb24ga2x1dHp5IEJBVENIX01PREVfT05MWV9TSEVMTC4KCgkqIGNvbmZpZy5oLlczMiBbV0lORE9XUzMyXTogQWRkZWQgSEFWRV9DWUdXSU5fU0hFTEwgbWFjcm8gd2hpY2gKCXVzZXJzIGNhbiBkZWZpbmUgaWYgdGhleSB3YW50IHRvIGJ1aWxkIG1ha2UgdG8gdXNlIHRoaXMgc2hlbGwuCgoJKiBSRUFETUUuVzMyIFtXSU5ET1dTMzJdOiBBZGRlZCBpbmZvcm1hdG9uIGFib3V0CglIQVZFX0NZR1dJTl9TSEVMTC4gQ2xlYW5lZCB1cCB0ZXh0IGEgYml0IHRvIG1ha2UgaXQgbW9yZSBjdXJyZW50LgoKMTk5OS0wOC0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJU3VwcG9ydCBsYXJnZSBmaWxlcyBpbiBBSVgsIEhQLVVYLCBhbmQgSVJJWC4KCgkqIGFjaW5jbHVkZS5tNCAoQUNfTEZTKTogUmVtb3ZlLiAgU3VwZXJzZWRlZCBieSBBQ19TWVNfTEFSR0VGSUxFLgoJKEFDX1NZU19MQVJHRUZJTEVfRkxBR1MsIEFDX1NZU19MQVJHRUZJTEVfU1BBQ0VfQVBQRU5ELAoJQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRSwgQUNfU1lTX0xBUkdFRklMRSk6IE5ldyBtYWNyb3MuCgkoam1fQUNfVFlQRV9VSU5UTUFYX1QpOiBDaGVjayBmb3IgYnVzdGVkIGNvbXBpbGVycyB0aGF0IGNhbid0CglzaGlmdCBvciBkaXZpZGUgdW5zaWduZWQgbG9uZyBsb25nLgoJKEFNX1BST0dfQ0NfU1REQyk6IE5ldyBtYWNybzsgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBvZiBhIGJ1ZyBpbgoJYXV0b21ha2UgMS40LgoKCSogY29uZmlndXJlLmluIChBQ19DQU5PTklDQUxfSE9TVCk6IEFkZDsgcmVxdWlyZWQgYnkgbmV3CglBQ19TWVNfTEFSR0VGSUxFLgoJKEFDX1NZU19MQVJHRUZJTEUpOiBSZW5hbWVkIGZyb20gQUNfTEZTLgoJKEFNX1BST0dfQ0NfU1REQyk6IEFkZC4KCgkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YjogTmV3IGZpbGVzLCBuZWVkZWQgZm9yIEFDX0NBTk9OSUNBTF9IT1NULgoKMTk5OS0wOC0yNSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBtYWtlLmggKENIQVJfTUFYKTogTmV3IG1hY3JvLgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaCk6IGMgaXMgbm93IGludCwKCXNvIHRoYXQgaXQgY2FuIHN0b3JlIHZhbHVlcyBncmVhdGVyIHRoYW4gQ0hBUl9NQVguCgkoc3dpdGNoZXMpOiBSZXBsYWNlIHNtYWxsIG51bWJlcnMgTiB3aXRoIENIQVJfTUFYK04tMSwKCXRvIGF2b2lkIHByb2JsZW1zIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlciBzZXRzLgoJKHNob3J0X29wdGlvbik6IE5ldyBtYWNyby4KCShpbml0X3N3aXRjaGVzLCBwcmludF91c2FnZSwgZGVmaW5lX21ha2VmbGFncyk6IFVzZSBpdCBpbnN0ZWFkIG9mCglpc2FsbnVtLgoKMTk5OS0wOC0yNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3Ljk0IHJlbGVhc2VkLgoKCSogbWFpbi5jIChtYWluKSBbX19NU0RPU19fXTogSWYgdGhlIHVzZXIgdXNlcyAtaiwgd2FybiB0aGF0IGl0J3MKCW5vdCBzdXBwb3J0ZWQgYW5kIHJlc2V0IGl0LgoKCSogbWFrZS5oIChJU0RJR0lUKTogT2J0YWluZWQgdGhpcyBmcm9tIHRoZSB0ZXh0dXRpbHMgZGlzdHJpYnV0aW9uLgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IFVzZSBpdC4KCSogZnVuY3Rpb24uYyAoaXNfbnVtZXJpYyk6IFVzZSBpdC4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogU3RvcmUgdGhlIHN3aXRjaCBjaGFyIGluIGFuCgl1bnNpZ25lZCBjaGFyIHRvIHNodXQgdXAgR0NDIGFib3V0IHVzaW5nIGl0IHdpdGggY3R5cGUuaCBtYWNyb3MuCglCZXNpZGVzLCBpdCBfaXNfIGFsd2F5cyB1bnNpZ25lZC4KCjE5OTktMDgtMjQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbzogQ2hhbmdlICJkZXBlbmRlbmN5IiB0byAicHJlcmVxdWlzaXRlIiBhbmQKCSJkZXBlbmRlbmNpZXMiIHRvICJwcmVyZXF1aXNpdGVzIi4gIFZhcmlvdXMgb3RoZXIgY2xlYW51cHMgcmVsYXRlZAoJdG8gdGhlIHRlcm1pbm9sb2d5IGNoYW5nZS4KCSogZmlsZS5jOiBDaGFuZ2UgZGVidWdnaW5nIGFuZCBlcnJvciBtZXNzYWdlcyB0byB1c2UKCSJwcmVyZXF1aXNpdGUiIGluc3RlYWQgb2YgImRlcGVuZGVuY3kiLgoJKiBpbXBsaWNpdC5jOiBEaXR0by4KCSogcmVtYWtlLmM6IERpdHRvLgoJKiBORVdTOiBEb2N1bWVudCBpdC4KCjE5OTktMDgtMjMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IE1vdmUgdGhlIGNvbnNpZGVyZWQgY2hlY2sgaW50byB0aGUKCWRvdWJsZS1jb2xvbiBydWxlIGxvb3AsIHNvIHdlIGNvbnNpZGVyIGRvdWJsZS1jb2xvbiBydWxlcwoJaW5kaXZpZHVhbGx5IChvdGhlcndpc2UgYWZ0ZXIgdGhlIGZpcnN0IGlzIHBydW5lZCwgdGhlIHJlc3Qgd29uJ3QKCWdldCBydW4pLgoKCSogUkVBRE1FLnRlbXBsYXRlOiBNaW5vciBjaGFuZ2VzLgoKCVJlbW92ZSB0aGUgZGVidWdnaW5nIGZlYXR1cmVzIG9mIHRoZSBqb2JzZXJ2ZXIsIHNvIGl0IG5vIGxvbmdlcgoJd3JpdGVzIGRpc3RpbmN0IHRva2VucyB0byB0aGUgcGlwZS4gIFRodXMsIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUKCXRoZSB0b2tlbiB3ZSBnZXQuICBBIHNpZGUgZWZmZWN0IG9mIHRoaXMgaXMgdG8gcmVtb3ZlIGEgcG90ZW50aWFsCgkidW5hdmFpbGFibGUgdG9rZW4iIHNpdHVhdGlvbjogbWFrZS0xIGludm9rZXMgbWFrZS0yIHdpdGggaXRzCglzcGVjaWFsIHRva2VuIGFuZCBtYWtlLTMgd2l0aCBhIG5vcm1hbCB0b2tlbjsgbWFrZS0yIGNvbXBsZXRlcy4KCU5vdyB3ZSdyZSB3YWl0aW5nIGZvciBtYWtlLTMgYnV0IHVzaW5nIDIgdG9rZW5zOyBvdXIgc3BlY2lhbCB0b2tlbgoJaXMgaWRsZS4gIEluIHRoZSBuZXcgdmVyc2lvbiB3ZSBkb24ndCBoYXZlIHNwZWNpYWwgdG9rZW5zIHBlciBzZSwKCXdlIG1lcmVseSBkZWNpZGUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY2hpbGQgb3Igbm90LiAgSWYgd2UgZG9uJ3QsCgl3ZSBkb24ndCBuZWVkIGEgdG9rZW4uICBJZiB3ZSBkbywgd2UgaGF2ZSB0byBnZXQgb25lIHRvIHJ1biB0aGUKCW5leHQgY2hpbGQuICBTaW1pbGFyIGZvciBwdXR0aW5nIHRva2VucyBiYWNrOiBpZiB3ZSdyZSBjbGVhbmluZyB1cAoJdGhlIGxhc3QgY2hpbGQsIHdlIGRvbid0IHB1dCBhIHRva2VuIGJhY2suICBPdGhlcndpc2UsIHdlIGRvLgoKCSogbWFpbi5jOiBBZGQgYSBuZXcsIGludGVybmFsIGZsYWcgLS1qb2JzZXJ2ZXItZmRzIGluc3RlYWQgb2YKCW92ZXJsb2FkaW5nIHRoZSBtZWFuaW5nIG9mIC1qLiAgUmVtb3ZlIGpvYl9zbG90c19zdHIgYW5kIGFkZCB0aGUKCXN0cmluZ2xpc3Qgam9ic2VydmVyX2Zkcy4KCShzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBXZSBkb24ndCBuZWVkIHRoZSBpbnRfc3RyaW5nIHR5cGUuCgkoc3dpdGNoZXNbXSk6IEFkZCBhIG5ldyBvcHRpb24gZm9yIC0tam9ic2VydmVyLWZkcyBhbmQgcmVtb3ZlCgljb25kaXRpb25zIGFyb3VuZCAtai4gIE1ha2UgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgZm9ybWVyIDAgc28gaXQKCWRvZXNuJ3QgcHJpbnQgZHVyaW5nICJtYWtlIC0taGVscCIuCgkobWFpbik6IFJld29yayBqb2JzZXJ2ZXIgcGFyc2luZy4gIElmIHdlIGdvdCAtLWpvYnNlcnZlci1mZHMKCW1ha2Ugc3VyZSBpdCdzIHZhbGlkLiAgV2Ugb25seSBnZXQgb25lIGFuZCBqb2Jfc2xvdHMgbXVzdCBiZSAwLgoJSWYgd2UncmUgdGhlIHRvcGxldmVsIG1ha2UgKC1qTiB3aXRob3V0IC0tam9ic2VydmVyLWZkcykgY3JlYXRlCgl0aGUgcGlwZSBhbmQgd3JpdGUgZ2VuZXJpYyB0b2tlbnMuCglDcmVhdGUgdGhlIHN0cmluZ2xpc3Qgc3RydWN0IGZvciB0aGUgc3VibWFrZXMuCglDbGVhbiB1cCB0aGUgc3RyaW5nbGlzdCB3aGVyZSBuZWNlc3NhcnkuCgkoaW5pdF9zd2l0Y2hlcyk6IFJlbW92ZSBpbnRfc3RyaW5nIGhhbmRsaW5nLgoJKHByaW50X3VzYWdlKTogRG9uJ3QgcHJpbnQgaW50ZXJuYWwgZmxhZ3MgKGRlc2NyaXB0aW9uIHB0ciBpcyAwKS4KCShkZWNvZGVfc3dpdGNoZXMpOiBSZW1vdmUgaW50X3N0cmluZyBoYW5kbGluZy4KCShkZWZpbmVfbWFrZWZsYWdzKTogUmVtb3ZlIGludF9zdHJpbmcgaGFuZGxpbmcuCgoJKiBqb2IuYzogUmVtb3ZlIG15X2pvYl90b2tlbiBmbGFnIGFuZCBhbGwgcmVmZXJlbmNlcyB0byB0aGUKCWNoaWxkLT5qb2JfdG9rZW4gZmllbGQuCgkoZnJlZV9qb2JfdG9rZW4pOiBSZW1vdmUgdGhpcyBhbmQgbWVyZ2UgaXQgaW50byBmcmVlX2NoaWxkKCkuCgkocmVhcF9jaGlsZHJlbik6IFJld29yayB0aGUgInJlYXBlZCBhIGNoaWxkIiBsb2dpYyBzbGlnaHRseS4KCURvbid0IGNhbGwgZGVmdW5jdCBmcmVlX2pvYl90b2tlbiBhbnltb3JlLiAgQWx3YXlzIGNhbGwKCWZyZWVfY2hpbGQsIGV2ZW4gaWYgd2UncmUgZHlpbmcuCgkoZnJlZV9jaGlsZCk6IElmIHdlJ3JlIG5vdCBmcmVlaW5nIHRoZSBvbmx5IGNoaWxkLCBwdXQgYSB0b2tlbgoJYmFjayBpbiB0aGUgcGlwZS4gIFRoZW4sIGlmIHdlJ3JlIGR5aW5nLCBkb24ndCBib3RoZXIgdG8gZnJlZS4KCShuZXdfam9iKTogSWYgd2UgYXJlIHVzaW5nIHRoZSBqb2JzZXJ2ZXIsIGxvb3AgY2hlY2tpbmcgdG8gc2VlIGlmCglhKSB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gb3IgYikgd2UgZ2V0IGEgdG9rZW4gZnJvbSB0aGUgcGlwZS4KCgkqIGpvYi5oIChzdHJ1Y3QgY2hpbGQpOiBSZW1vdmUgdGhlIGpvYl90b2tlbiBmaWVsZC4KCjE5OTktMDgtMjAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogQWxsb2NhdGUgZm9yIHZhcmlhYmxlCglleHBhbnNpb24gaW4gZl9hcHBlbmQgd2l0aCBhIHNpbXBsZSB2YXJpYWJsZTogaWYgd2UncmUgbG9va2luZyBhdAoJdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlcyB3ZSBkb24ndCB3YW50IHRvIHRyYXNoIHRoZSBidWZmZXIuCglOb3RpY2VkIGJ5IFJlaW5lciBCZW5pbmdhIDxSZWluZXIuQmVuaW5nYUBtY2hwLnNpZW1lbnMuZGU+LgoKMTk5OS0wOC0xNiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1haW4uYyAobWFpbikgW19fTVNET1NfX106IE1pcnJvciBhbnkgYmFja3NsYXNoZXMgaW4gYXJndlswXSwgdG8KCWF2b2lkIHByb2JsZW1zIGluIHNoZWxsIGNvbW1hbmRzIHRoYXQgdXNlIGJhY2tzbGFzaGVzIGFzIGVzY2FwZQoJY2hhcmFjdGVycy4KCjE5OTktMDgtMTYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45MyByZWxlYXNlZC4KCjE5OTktMDgtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZwoKCSogZnVuY3Rpb24uYyAoZnVuY19pZik6IE5ldyBmdW5jdGlvbiAkKGlmIC4uLikgYmFzZWQgb24gdGhlCglvcmlnaW5hbCBieSBIYW4tV2VuIGJ1dCByZXdvcmtlZCBxdWl0ZSBhIGJpdC4KCShmdW5jdGlvbl90YWJsZSk6IEFkZCBpdC4KCSogTkVXUzogSW50cm9kdWNlIGl0LgoJKiBtYWtlLnRleGluZm8gKElmIEZ1bmN0aW9uKTogRG9jdW1lbnQgaXQuCgoJKiBqb2IuYyAoZnJlZV9qb2JfdG9rZW4pOiBDaGVjayBmb3IgRUlOVFIgd2hlbiB3cml0aW5nIHRva2VucyB0bwoJdGhlIGpvYnNlcnZlciBwaXBlLgoKMTk5OS0wOC0xMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCUFub3RoZXIgam9ic2VydmVyIGFsZ29yaXRobSBjaGFuZ2UuICBXZSBjb252ZW5pZW50bHkgZm9yZ290IHRoYXQKCXRoZSBibG9ja2luZyBiaXQgaXMgc2hhcmVkIGJ5IGFsbCB1c2VycyBvZiB0aGUgcGlwZSwgaXQncyBub3QgYQoJcGVyLXByb2Nlc3Mgc2V0dGluZy4gIFNpbmNlIHdlIGhhdmUgbWFueSBtYWtlIHByb2Nlc3NlcyBhbGwKCXNoYXJpbmcgdGhlIHBpcGUgd2UgY2FuJ3QgdXNlIHRoZSBibG9ja2luZyBiaXQgYXMgYSBzaWduYWwgaGFuZGxlcgoJZmxhZy4gIEluc3RlYWQsIHdlJ2xsIGR1cCB0aGUgcGlwZSdzIHJlYWQgRkQgYW5kIGhhdmUgdGhlIFNJR0NITEQKCWhhbmRsZXIgY2xvc2UgdGhlIGR1cCdkIEZELiAgVGhpcyB3aWxsIGNhdXNlIHRoZSByZWFkKCkgdG8gZmFpbAoJd2l0aCBFQkFERiB0aGUgbmV4dCB0aW1lIHdlIGludm9rZSBpdCwgc28gd2Uga25vdyB3ZSBuZWVkIHRvIHJlYXAKCWNoaWxkcmVuLiAgV2UgdGhlbiByZS1kdXAgYW5kIHJlYXAuCgoJKiBtYWluLmMgKG1haW4pOiBEZWZpbmUgdGhlIGpvYl9yZmQgdmFyaWFibGUgdG8gaG9sZCB0aGUgZHVwJ2QgRkQuCglBY3R1YWxseSBkdXAgdGhlIHJlYWQgc2lkZSBvZiB0aGUgcGlwZS4gIERvbid0IGJvdGhlciBzZXR0aW5nIHRoZQoJYmxvY2tpbmcgYml0IG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IuCgkqIG1ha2UuaDogRGVjbGFyZSB0aGUgam9iX3JmZCB2YXJpYWJsZS4KCSogam9iLmMgKGNoaWxkX2hhbmRsZXIpOiBJZiB0aGUgZHVwJ2Qgam9ic2VydmVyIHBpcGUgaXMgb3BlbiwKCWNsb3NlIGl0IGFuZCBhc3NpZ24gLTEgdG8gam9iX3JmZCB0byBub3RpZnkgdGhlIG1haW4gcHJvZ3JhbSB0aGF0Cgl3ZSBnb3QgYSBTSUdDSExELgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogQ2xvc2UgdGhlIGR1cCdkIEZEIGJlZm9yZSBleGVjJ2luZyBjaGlsZHJlbi4KCVNpbmNlIHdlIG9wZW4gYW5kIGNsb3NlIHRoaXMgdGhpbmcgc28gb2Z0ZW4gaXQgZG9lc24ndCBzZWVtCgl3b3J0aCBpdCB0byB1c2UgdGhlIGNsb3NlLW9uLWV4ZWMgYml0LgoJKG5ld19qb2IpOiBSZW1vdmUgY29kZSBmb3IgdGVzdGluZy9zZXR0aW5nIHRoZSBibG9ja2luZyBiaXQuCglJbnN0ZWFkIG9mIEVBR0FJTiwgdGVzdCBmb3IgRUJBREYuICBJZiB0aGUgZHVwJ2QgRkQgaGFzIGJlZW4KCWNsb3NlZCwgcmUtZHVwIGl0IGJlZm9yZSB3ZSByZWFwIGNoaWxkcmVuLgoKCSogZnVuY3Rpb24uYyAoZnVuY19zaGVsbCk6IEJlIGEgbGl0dGxlIG1vcmUgYWNjdXJhdGUgYWJvdXQgdGhlCglsZW5ndGggb2YgdGhlIGVycm9yIHN0cmluZyB0byBhbGxvY2F0ZS4KCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGUpOiBJZiB0aGVyZSdzIG5vIGZpbGVubSBpbmZvCgkoc2F5LCBmcm9tIGEgYnVpbHRpbiBjb21tYW5kKSB0aGVuIHJlc2V0IHJlYWRpbmdfZmlsZSB0byAwLgoKMTk5OS0wOC0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbnRNYWtlZmlsZTogVXNlIGcgaW4gc2VkIChzLy8vZykgdG8gcmVwbGFjZSA+MSB2YXJpYWJsZSBwZXIKCWxpbmUuCgoJKiBNYWtlZmlsZS5ET1MudGVtcGxhdGUgW19fTVNET1NfX106IEZpeCBtb3N0bHljbGVhbi1hbWluZm8gdG8KCXJlbW92ZSB0aGUgcmlnaHQgZmlsZXMuCgoxOTk5LTA4LTAxICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogZnVuY3Rpb24uYyAobXNkb3Nfb3BlbnBpcGUpIFtfX01TRE9TX19dOiAqUmVhbGx5KiByZXR1cm4gYSBGSUxFCglwdHIuCgoxOTk5LTA4LTAxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJTmV3IGpvYnNlcnZlciBhbGdvcml0aG0gdG8gYXZvaWQgYSBwb3NzaWJsZSBob2xlIHdoZXJlIHdlIGNvdWxkCgltaXNzIFNJR0NITERzIGFuZCBnZXQgaW50byBhIGRlYWRsb2NrLiAgVGhlIG9yaWdpbmFsIGFsZ29yaXRobSB3YXMKCXN1Z2dlc3RlZCBieSBSb2xhbmQgTWNHcmF0aCB3aXRoIGEgbmljZSByZWZpbmVtZW50IGJ5IFBhdWwgRWdnZXJ0LgoJTWFueSB0aGFua3MgYXMgd2VsbCB0byBUaW0gTWFnaWxsIGFuZCBIb3dhcmQgQ2h1LCB3aG8gYWxzbwoJcHJvdmlkZWQgbWFueSB2aWFibGUgaWRlYXMgYW5kIGNyaXRpcXVlcy4gIFdlIGFsbCBoYWQgYSBmdW4gd2VlawoJZHJlYW1pbmcgdXAgaW50ZXJlc3Rpbmcgd2F5cyB0byB1c2UgYW5kIGFidXNlIFVOSVggc3lzY2FsbHMgOikuCgoJUHJldmlvdXNseSB3ZSBjb3VsZCBtaXNzIGEgU0lHQ0hMRCBpZiBpdCBoYXBwZW5lZCBhZnRlciB3ZSByZWFwZWQKCXRoZSBjaGlsZHJlbiBidXQgYmVmb3JlIHdlIHJlLWVudGVyZWQgdGhlIGJsb2NraW5nIHJlYWQuICBJZiB0aGlzCgloYXBwZW5lZCB0byBhbGwgbWFrZXMgYW5kL29yIGFsbCBjaGlsZHJlbiwgbWFrZSB3b3VsZCBuZXZlciB3YWtlCgl1cC4KCglXZSBhdm9pZCB0aGlzIGJ5IGhhdmluZyB0aGUgU0lHQ0hMRCBoYW5kbGVyIHJlc2V0IHRoZSBibG9ja2luZyBiaXQKCW9uIHRoZSBqb2JzZXJ2ZXIgcGlwZSByZWFkIEZEIChub3JtYWxseSByZWFkIGRvZXMgYmxvY2sgaW4gdGhpcwoJYWxnb3JpdGhtKS4gIE5vdyBpZiB0aGUgaGFuZGxlciBpcyBjYWxsZWQgYmV0d2VlbiB0aGUgdGltZSB3ZSByZWFwCglhbmQgdGhlIHRpbWUgd2UgcmVhZCgpLCBhbmQgdGhlcmUgYXJlIG5vIHRva2VucyBhdmFpbGFibGUsIHRoZQoJcmVhZCB3aWxsIG1lcmVseSByZXR1cm4gd2l0aCBFQUdBSU4gaW5zdGVhZCBvZiBibG9ja2luZy4KCgkqIG1haW4uYyAobWFpbik6IFNldCB0aGUgYmxvY2tpbmcgYml0IGV4cGxpY2l0bHkgaGVyZS4KCSogam9iLmMgKGNoaWxkX2hhbmRsZXIpOiBJZiB3ZSBoYXZlIGEgam9ic2VydmVyIHBpcGUsIHNldCB0aGUKCW5vbi1ibG9ja2luZyBiaXQgZm9yIGl0LgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogTW92ZSB0aGUgdG9rZW4gc3R1ZmYgYmFjayB0byBuZXdfam9iOyBpZiB3ZQoJZG8gaXQgaGVyZSB0aGVuIHdlJ3JlIG5vdCBjb250cm9sbGluZyB0aGUgbnVtYmVyIG9mIHJlbW90ZSBqb2JzCglzdGFydGVkIQoJKG5ld19qb2IpOiBNb3ZlIHRoZSBjaGVjayBmb3Igam9iIHNsb3RzIHRvIF9hZnRlcl8gd2UndmUgY3JlYXRlZCBhCgljaGlsZCBzdHJ1Y3R1cmUuICBJZiB0aGUgcmVhZCByZXR1cm5zIHdpdGhvdXQgZ2V0dGluZyBhIHRva2VuLCBzZXQKCXRoZSBibG9ja2luZyBiaXQgdGhlbiB0cnkgdG8gcmVhcF9jaGlsZHJlbi4KCgkqIG1ha2UuaCAoRUlOVFJfU0VUKTogRGVmaW5lIHRvIHRlc3QgZXJybm8gaWYgRUlOVFIgaXMgYXZhaWxhYmxlLAoJb3IgMCBvdGhlcndpc2UuICBKdXN0IHNvbWUgY29kZSBjbGVhbnVwLgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKTogVXNlIGl0LgoJKiBmdW5jdGlvbi5jIChmdW5jX3NoZWxsKTogVXNlIGl0LgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IFVzZSBpdC4KCSogcmVtYWtlLmMgKHRvdWNoX2ZpbGUpOiBVc2UgaXQuCgoxOTk5LTA3LTI4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLmg6IERlZmluZSBfKCkgYW5kIE5fKCkgbWFjcm9zIGFzIHBhc3N0aHJvdWdoIHRvIGluaXRpYXRlCglOTFMgc3VwcG9ydC4KCSogPGFsbD46IEFkZCBfKCkvTl8oKSBhcm91bmQgdHJhbnNsYXRhYmxlIHN0cmluZ3MuCgoxOTk5LTA3LTI3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmM6IE1ha2Ugc3VyZSBtYWtlLmggY29tZXMgYmVmb3JlIG90aGVyIGhlYWRlcnMuCgoxOTk5LTA3LTI2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKFF1aWNrIFJlZmVyZW5jZSk6IFVwZGF0ZSB3aXRoIHRoZSBuZXcgZmVhdHVyZXMuCgoxOTk5LTA3LTI1ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogcmVtYWtlLmMgW19fTVNET1NfX106IERvbid0IGluY2x1ZGUgdmFyaWFibGVzLmgsIGl0J3MgYWxyZWFkeQoJaW5jbHVkZWQuCgoJKiBmdW5jdGlvbi5jIChtc2Rvc19vcGVucGlwZSkgW19fTVNET1NfX106IFJldHVybiBGSUxFIHB0ci4KCShmdW5jX3NoZWxsKSBbX19NU0RPU19fXTogRml4IHRoZSBhcmd1bWVudCBsaXN0LgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlOiBVcGRhdGUgZnJvbSBNYWtlZmlsZS5pbi4KCgkqIFJFQURNRS5ET1MudGVtcGxhdGU6IENvbmZpZ3VyZSBjb21tYW5kIGZpeGVkLgoKCSogY29uZmlnaC5kb3MudGVtcGxhdGU6IFVwZGF0ZSB0byBwcm92aWRlIGRlZmluaXRpb25zIGZvcgoJdWludG1heF90LCBmZF9zZXRfc2l6ZV90LCBhbmQgSEFWRV9TRUxFQ1QuCgoxOTk5LTA3LTI0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcuOTEgcmVsZWFzZWQuCgoJKiBjb25maWd1cmUuaW46IENoYW5nZXMgdG8gdGhlIGJvb3N0cmFwcGluZyBjb2RlOiBpZiBidWlsZC5zaC5pbgoJZG9lc24ndCBleGlzdCBjb25maWd1cmUgc3BpdHMgYW4gZXJyb3IgYW5kIGdlbmVyYXRlcyBhbiBlbXB0eQoJYnVpbGQuc2ggZmlsZSB3aGljaCBjYXVzZXMgbWFrZSB0byBiZSBjb25mdXNlZC4KCSogbWFpbnRNYWtlZmlsZTogRG9uJ3QgYnVpbGQgUkVBRE1FIGVhcmx5LgoKMTk5OS0wNy0yMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKG15X2pvYl90b2tlbik6IFRoaXMgdmFyaWFibGUgY29udHJvbHMgd2hldGhlciB3ZSd2ZQoJaGFuZGVkIG91ciBwZXJzb25hbCB0b2tlbiB0byBhIHN1YnByb2Nlc3Mgb3Igbm90LiAgTm90ZSB3ZSBjb3VsZAoJcHJvYmFibHkgaW5mZXIgdGhpcyBmcm9tIHRoZSB2YWx1ZSBvZiBqb2Jfc2xvdHNfdXNlZCwgYnV0IGl0J3MKCWNsZWFyZXIgdG8ganVzdCBrZWVwIGl0IHNlcGFyYXRlbHkuICBKb2Jfc2xvdHNfdXNlZCBpc24ndCByZWFsbHkKCXJlbGV2YW50IHdoZW4gcnVubmluZyB0aGUgam9iIHNlcnZlci4KCShmcmVlX2pvYl90b2tlbik6IE5ldyBmdW5jdGlvbjogZnJlZSBhIGpvYiB0b2tlbi4gIElmIHdlIGRvbid0CgloYXZlIG9uZSwgbm8tb3AuICBJZiB3ZSBoYXZlIHRoZSBwZXJzb25hbCB0b2tlbiwgcmVjbGFpbSBpdC4gIElmCgl3ZSBoYXZlIGFub3RoZXIgdG9rZW4sIHdyaXRlIGl0IGJhY2sgdG8gdGhlIHBpcGUuCgkocmVhcF9jaGlsZHJlbik6IENhbGwgZnJlZV9qb2JfdG9rZW4uCgkoZnJlZV9jaGlsZCk6IENhbGwgZnJlZV9qb2JfdG9rZW4uCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBSZW1vdmUgZHVwbGljYXRlIHRlc3QgZm9yICcrJyBpbiB0aGUgY29tbWFuZC4KCUlmIHdlIGRvbid0IGFwcGVhciB0byBiZSBydW5uaW5nIGEgcmVjdXJzaXZlIG1ha2UsIGNsb3NlIHRoZQoJam9ic2VydmVyIGZpbGVkZXNjcmlwdG9ycy4KCShzdGFydF93YWl0aW5nX2pvYik6IElmIG91ciBwZXJzb25hbCB0b2tlbiBpcyBhdmFpbGFibGUsIHVzZSB0aGF0CglpbnN0ZWFkIG9mIGdvaW5nIHRvIHRoZSBzZXJ2ZXIgcGlwZS4KCSgqKTogQWRkIHRoZSB0b2tlbiB2YWx1ZSB0byBtYW55IGRlYnVnZ2luZyBzdGF0ZW1lbnRzLCBhbmQgcHJpbnQKCXRoZSBjaGlsZCB0YXJnZXQgbmFtZSBpbiBhZGRpdGlvbiB0byB0aGUgcHRyIGhleCB2YWx1ZS4KCUNoYW5nZSB0aGUgZGVmYXVsdCAibm8gdG9rZW4iIHZhbHVlIGZyb20gJ1wwJyB0byAnLScgc28gaXQgbG9va3MKCWJldHRlciBpbiB0aGUgb3V0cHV0LgoKCSogbWFpbi5jIChtYWluKTogSW5zdGFsbCB0aGUgY2hpbGRfaGFuZGxlciB3aXRoIHNpZ2FjdGlvbigpCglpbnN0ZWFkIG9mIHNpZ25hbCgpIGlmIHdlIGhhdmUgaXQuICBPbiBTeXNWIHN5c3RlbXMsIHNpZ25hbCgpIHVzZXMKCVN5c1Ygc2VtYW50aWNzIHdoaWNoIGFyZSBhIHBhaW4uICBCdXQgc2lnYWN0aW9uKCkgYWx3YXlzIGRvZXMgd2hhdAoJd2Ugd2FudC4KCShtYWluKTogSWYgd2UgZ290IGpvYiBzZXJ2ZXIgRkRzIGZyb20gdGhlIGVudmlyb25tZW50LCB0ZXN0IHRoZW0KCXRvIHNlZSBpZiB0aGV5J3JlIG9wZW4uICBJZiBub3QsIHRoZSBwYXJlbnQgbWFrZSBjbG9zZWQgdGhlbQoJYmVjYXVzZSBpdCBkaWRuJ3QgdGhpbmsgd2Ugd2VyZSBhIHN1Ym1ha2UuICBQcmludCBhIHdhcm5pbmcgYW5kCglzdWdnZXN0aW9uIHRvIHVzZSAiKyIgb24gdGhlIHN1Ym1ha2UgaW52b2NhdGlvbiwgYW5kIGhhcmQtc2V0IHRvCgktajEgZm9yIHRoaXMgaW5zdGFuY2Ugb2YgbWFrZS4KCShtYWluKTogQ2hhbmdlIHRoZSBhbGdvcml0aG0gZm9yIGFzc2lnbmluZyBzbG90cyB0byBiZSBtb3JlCglyb2J1c3QuICBQcmV2aW91c2x5IG1ha2UgY2hlY2tlZCB0byBzZWUgaWYgaXQgdGhvdWdodCBhIHN1YnByb2Nlc3MKCXdhcyBhIHN1Ym1ha2UgYW5kIGlmIHNvLCBkaWRuJ3QgZ2l2ZSBpdCBhIHRva2VuLiAgU2luY2UgbWFrZSdzCglkb24ndCBjb25zdW1lIHRva2VucyB3ZSBjb3VsZCBzcGF3biBtYW55IG9mIG1ha2VzIGZpZ2h0aW5nIGZvciBhCglzbWFsbCBudW1iZXIgb2YgdG9rZW5zLiAgUGx1cyB0aGlzIGlzIHVucmVsaWFibGUgYmVjYXVzZSBzdWJtYWtlcwoJbWlnaHQgbm90IGJlIHJlY29nbml6ZWQgYnkgdGhlIHBhcmVudCAoc2VlIGFib3ZlKSB0aGVuIGFsbCB0aGUKCXRva2VucyBjb3VsZCBiZSB1c2VkIHVwIGJ5IHVucmVjb2duaXplZCBtYWtlcywgYW5kIG5vIG9uZSBjb3VsZAoJcnVuLiAgTm93IGV2ZXJ5IG1ha2UgY29uc3VtZXMgYSB0b2tlbiBmcm9tIGl0cyBwYXJlbnQuICBIb3dldmVyLAoJdGhlIG1ha2UgY2FuIGFsc28gdXNlIHRoaXMgdG9rZW4gdG8gc3Bhd24gYSBjaGlsZC4gIElmIHRoZSBtYWtlCgl3YW50cyBtb3JlIHRoYW4gb25lLCBpdCBnb2VzIHRvIHRoZSBqb2JzZXJ2ZXIgcGlwZS4gIFRodXMgdGhlcmUKCXdpbGwgbmV2ZXIgYmUgbW9yZSB0aGFuIE4gbWFrZXMgcnVubmluZyBmb3IgLWpOLCBhbmQgTioyIHByb2Nlc3NlcwoJKE4gbWFrZXMgYW5kIHRoZWlyIE4gY2hpbGRyZW4pLiAgRXZlcnkgbWFrZSBjYW4gYWx3YXlzIHJ1biBhdAoJbGVhc3Qgb25lIGpvYiwgYW5kIHdlJ2xsIG5ldmVyIGRlYWRsb2NrLiAgKE5vdGUgdGhlIGNsb3Npbmcgb2YgdGhlCglwaXBlIGZvciBub24tc3VibWFrZXMgYWxzbyBzb2x2ZXMgdGhpcywgYnV0IHRoaXMgaXMgc3RpbGwgYSBiZXR0ZXIKCWFsZ29yaXRobS4pICBTbyEgIE9ubHkgcHV0IE4tMSB0b2tlbnMgaW50byB0aGUgcGlwZSwgc2luY2UgdGhlCgl0b3Btb3N0IG1ha2Uga2VlcHMgb25lIGZvciBpdHNlbGYuCgoJKiBjb25maWd1cmUuaW46IEZpbmQgc2lnYWN0aW9uLiAgRGlzYWJsZSBqb2Igc2VydmVyIHN1cHBvcnQgdW5sZXNzCgl0aGUgc3lzdGVtIHByb3ZpZGVzIGl0LCBpbiBhZGRpdGlvbiB0byBlaXRoZXIgd2FpdHBpZCgpIG9yCgl3YWl0MygpLgoKMTk5OS0wNy0yMiAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAZGV2LnRpdm9saS5jb20+CgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKSBbV0lORE9XUzMyXTogVGhlIGFyX2RhdGUgZmllbGQgaXMgYQoJc3RyaW5nIG9uIFdpbmRvd3MsIG5vdCBhIHRpbWVzdGFtcC4KCjE5OTktMDctMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45MCByZWxlYXNlZC4KCgkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogUmVxdWlyZSBhdXRvbWFrZSAxLjQuCgoJKiBmdW5jdGlvbi5jOiBSZWFycmFuZ2Ugc28gd2UgZG9uJ3QgbmVlZCB0byBwcmVkZWNsYXJlIHRoZQoJZnVuY3Rpb25fdGFibGUgYXJyYXk7IEsmUiBDIGNvbXBpbGVycyBkb24ndCBsaWtlIHRoYXQuCgoJKiBhY2luY2x1ZGUubTQgKEFDX0ZVTkNfU0VMRUNUKTogT3VjaDsgdGhpcyByZXF1aXJlcyBhbiBBTlNJIEMKCWNvbXBpbGVyISAgQ2hhbmdlIHRvIHdvcmsgd2l0aCBLJlIgY29tcGlsZXJzIGFzIHdlbGwuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IFB1dCBidWlsZC5zaCBiYWNrLiAgSSBkb24ndCBrbm93IGhvdyBJCgl0aG91Z2h0IGl0IHdvdWxkIHdvcmsgdGhpcyB3YXkgOi0vLiAgV2UnbGwgaGF2ZSB0byB0aGluayBvZgoJc29tZXRoaW5nIGVsc2UuCgkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgcnVsZSB0byBjcmVhdGUgYnVpbGQuc2guCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogUmVhcnJhbmdlIHRoZSBkZWZhdWx0IGNvbW1hbmQKCWxpbmVzIHRvIGNvbmZvcm0gdG8gUE9TSVggcnVsZXMgKHB1dCB0aGUgZmlsZW5hbWUgYXJndW1lbnQgJDwKCV9hZnRlcl8gdGhlIE9VVFBVVF9PUFRJT04sIG5vdCBiZWZvcmUgaXQpLgoKCSogdmFyaW91czogQ2hhbmdlZCAhc3RybmNtcCgpIGNhbGxzIHRvIHN0cm5lcSgpIG1hY3Jvcy4KCgkqIG1pc2MuYyAoc2luZGV4KTogTWFrZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudC4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGUpOiBDaGFuZ2Ugc2F2ZXN0cmluZyhYLHN0cmxlbihYKSkgdG8geHN0cmR1cCgpLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IERpdHRvLgoJKiBtYWluLmMgKGVudGVyX2NvbW1hbmRfbGluZV9maWxlKTogRGl0dG8uCgkobWFpbik6IERpdHRvLgoJKiBtaXNjLmMgKGNvcHlfZGVwX2NoYWluKTogRGl0dG8uCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERpdHRvLgoJKHBhcnNlX2ZpbGVfc2VxKTogRGl0dG8uCgkodGlsZGVfZXhwYW5kKTogRGl0dG8uCgkobXVsdGlfZ2xvYik6IERpdHRvLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogRGl0dG8uCgkqIHZhcmlhYmxlLmMgKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBEaXR0by4KCShkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IERpdHRvLgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IERpdHRvLgoKCSogbWlzYy5jICh4cmVhbGxvYyk6IFNvbWUgcmVhbGxvY3MgYXJlIG5vbi1zdGFuZGFyZDogd29yayBhcm91bmQKCXRoZW0gaW4geHJlYWxsb2MgYnkgY2FsbGluZyBtYWxsb2MgaWYgUFRSIGlzIE5VTEwuCgkqIG1haW4uYyAobWFpbik6IENhbGwgeHJlYWxsb2MoKSBkaXJlY3RseSBpbnN0ZWFkIG9mIHRlc3RpbmcgZm9yCglOVUxMLgoKCSogZnVuY3Rpb24uYyAoZnVuY19zb3J0KTogRG9uJ3QgdHJ5IHRvIGZyZWUgTlVMTDsgc29tZSBvbGRlciwKCW5vbi1zdGFuZGFyZCB2ZXJzaW9ucyBvZiBmcmVlKCkgZG9uJ3QgbGlrZSBpdC4KCgkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtZG1hbGxvYyk6IEluc3RhbGwgc29tZSBzdXBwb3J0IGZvciB1c2luZwoJZG1hbGxvYyAoaHR0cDovL3d3dy5kbWFsbG9jLmNvbS8pIHdpdGggbWFrZS4gIFVzZSAtLWVuYWJsZS1kbWFsbG9jCgl3aXRoIGNvbmZpZ3VyZSB0byBlbmFibGUgaXQuCgoJKiBmdW5jdGlvbi5jIChmdW5jdGlvbl90YWJsZV9lbnRyeSk6IFdob29wcyEgIFRoZSBmdW5jdGlvbi5jCglyZXdyaXRlIGJyZWFrcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBhbGwgdGV4dCB0byBhIGZ1bmN0aW9uIGlzCglicm9rZW4gaW50byBhcmd1bWVudHMsIGFuZCBleHRyYXMgYXJlIGlnbm9yZWQuICBTbyAkKHNvcnQgYSxiLGMpCglyZXR1cm5zICJhIiEgIEV0Yy4gIE91Y2guICBGaXggaXQgYnkgbWFraW5nIGEgcG9zaXRpdmUgdmFsdWUgaW4KCXRoZSBSRVFVSVJFRF9BUkdTIGZpZWxkIG1lYW4gZXhhY3RseSB0aGF0IG1hbnkgYXJndW1lbnRzIHRvIHRoZQoJZnVuY3Rpb247IGFueSAiZXh0cmFzIiBhcmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBsYXN0IGFyZ3VtZW50IGFzCgliZWZvcmUuICBBIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIGF0IGxlYXN0IHRoYXQgbWFueSwgYnV0IG1heSBiZQoJbW9yZTogaW4gdGhpcyBjYXNlIGFsbCB0ZXh0IGlzIGJyb2tlbiBvbiBjb21tYXMuCgkoaGFuZGxlX2Z1bmN0aW9uKTogU3RvcCB3aGVuIHdlJ3ZlIHNlZW4gUkVRVUlSRURfQVJHUyBhcmdzLCBpZiA+MC4KCShleHBhbmRfYnVpbHRpbl9mdW5jdGlvbik6IENvbXBhcmUgbnVtYmVyIG9mIGFyZ3MgdG8gdGhlIGFic29sdXRlCgl2YWx1ZSBvZiBSRVFVSVJFRF9BUkdTLgoKMTk5OS0wNy0yMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogRW5zdXJlIHRoYXQgdGhlIHN0YXRlIG9mIHRoZSB0YXJnZXQKCWlzIGNzX3J1bm5pbmcuICBJdCBtaWdodCBub3QgYmUgaWYgd2Ugc2tpcHBlZCBhbGwgdGhlIGxpbmVzIGR1ZSB0bwoJLW4gKGZvciBleGFtcGxlKS4KCgkqIGNvbW1hbmRzLmMgKGV4ZWN1dGVfZmlsZV9jb21tYW5kcyk6IElmIHdlIGRpc2NvdmVyIHRoYXQgdGhlCgljb21tYW5kIHNjcmlwdCBpcyBlbXB0eSBhbmQgc3VjY2VlZCBlYXJseSwgc2V0IGNzX3J1bm5pbmcgc28gdGhlCgltb2R0aW1lIG9mIHRoZSB0YXJnZXQgaXMgc3RpbGwgcmVjaGVja2VkLgoKCSogcnVsZS5jIChmcmVlcnVsZSk6IEZyZWUgdGhlIGRlcGVuZGVuY3kgbGlzdCBmb3IgdGhlIHJ1bGUuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFdoZW4gdHVybmluZyBhbiBpbnRlcm1lZGlhdGUgZmlsZQoJaW50byBhIHJlYWwgdGFyZ2V0LCBrZWVwIHRoZSBhbHNvX21ha2UgbGlzdC4KCUZyZWUgdGhlIGRlcC0+bmFtZSBpZiB3ZSBkaWRuJ3QgdXNlIGl0IGR1cmluZyBlbnRlcl9maWxlKCkuCgoxOTk5LTA3LTE2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEb24ndCBhbGxvY2F0ZSB0aGUgY29tbWFuZHMgYnVmZmVyIHVudGlsCgl3ZSdyZSBzdXJlIHdlIGZvdW5kIGEgbWFrZWZpbGUgYW5kIHdvbid0IHJldHVybiBlYXJseSAobWVtIGxlYWspLgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogQnJva2VuICNpZmRlZiB0ZXN0OiBsb29rIGZvciBGX1NFVEZELAoJbm90IEZEX1NFVEZELiAgQ2xvc2Utb24tZXhlYyBpc24ndCBnZXR0aW5nIHNldCBvbiB0aGUgYmFkX3N0ZGluCglmaWxlIGRlc2NyaXB0b3IgYW5kIGl0J3MgbGVha2luZyA6LS8uCgkqIGdldGxvYWRhdmcuYyAoZ2V0bG9hZGF2Zyk6IERpdHRvLgoKMTk5OS0wNy0xNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRml4IHNvbWUgcG90ZW50aWFsIG1lbW9yeSBzdG9tcHMgcGFyc2luZwoJYGRlZmluZScgZGlyZWN0aXZlcyB3aGVyZSBubyB2YXJpYWJsZSBuYW1lIGlzIGdpdmVuLgoKCSogZnVuY3Rpb24uYyAoZnVuY19jYWxsKTogUmVuYW1lIGZyb20gZnVuY19hcHBseS4gIFZhcmlvdXMgY29kZQoJY2xlYW51cCBhbmQgdGlnaHRlbmluZy4KCShmdW5jdGlvbl90YWJsZSk6IEFkZCAiY2FsbCIgYXMgYSB2YWxpZCBidWlsdGluIGZ1bmN0aW9uLgoKCSogbWFrZS50ZXhpbmZvIChDYWxsIEZ1bmN0aW9uKTogRG9jdW1lbnQgaXQuCgoJKiBORVdTOiBBbm5vdW5jZSBpdC4KCjE5OTktMDctMDkgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbikgW19fTVNET1NfXywgV0lORE9XUzMyXToKCVRyZWF0ICJvdmVycmlkZSBTSEVMTD0iIHRoZSBzYW1lIGFzIGp1c3QgIlNIRUxMPSIuCgoxOTk5LTA3LTA5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBEb24ndCBnZXQgYSBzZWNvbmQgam9iIHRva2VuIGlmIHdlCglhbHJlYWR5IGhhdmUgb25lOyBpZiB3ZSdyZSB3YWl0aW5nIG9uIHRoZSBsb2FkIHRvIGdvIGRvd24KCXN0YXJ0X3dhaXRpbmdfam9iKCkgbWlnaHQgZ2V0IGNhbGxlZCB0d2ljZSBvbiB0aGUgc2FtZSBmaWxlLgoKCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IEFkZCBuZXcgZmllbGQsIG10aW1lX2JlZm9yZV91cGRhdGUuCglXaGVuIG5vdGljZV9maW5pc2hlZF9maWxlIHJ1bnMgaXQgYXNzaWducyB0aGUgY2FjaGVkIGxhc3RfbXRpbWUgdG8KCXRoaXMgZmllbGQuCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IE5vdGljZSB0aGF0IGEgZmlsZSB3YXNuJ3QgdXBkYXRlZAoJYnkgYXNraW5nIGlmIGl0IGNoYW5nZWQgKGctPmNoYW5nZWQpIGFuZCBjb21wYXJpbmcgdGhlIGN1cnJlbnQKCWNhY2hlZCB0aW1lIChsYXN0X210aW1lKSB3aXRoIHRoZSBwcmV2aW91cyBvbmUsIHN0b3JlZCBpbgoJbXRpbWVfYmVmb3JlX3VwZGF0ZS4gIFRoZSBwcmV2aW91cyBjaGVjayAoImRpZCBsYXN0X210aW1lIGNoYW5nZWQKCWR1cmluZyB0aGUgcnVuIG9mIHVwZGF0ZV9maWxlPyIpIGZhaWxzIGZvciBwYXJhbGxlbCBidWlsZHMgYmVjYXVzZQoJbGFzdF9tdGltZSBpcyBzZXQgZHVyaW5nIHJlYXBfY2hpbGRyZW4sIGJlZm9yZSB1cGRhdGVfZmlsZSBpcyBydW4uCglUaGlzIGNhdXNlcyB1cGRhdGVfZ29hbF9jaGFpbiB0byBhbHdheXMgcmV0dXJuIC0xIChub3RoaW5nCglyZWJ1aWx0KSB3aGVuIHJ1bm5pbmcgcGFyYWxsZWwgKC1qTikuICBUaGlzIGlzIE9LIGR1cmluZyAibm9ybWFsIgoJYnVpbGRzIHNpbmNlIG91ciBjYWxsZXIgKG1haW4pIHRyZWF0cyB0aGVzZSBjYXNlcyBpZGVudGljYWxseSBpbgoJdGhhdCBjYXNlLCBidXQgaWYgd2hlbiByZWJ1aWxkaW5nIG1ha2VmaWxlcyB0aGUgZGlmZmVyZW5jZSBpcyB2ZXJ5CglpbXBvcnRhbnQsIGFzIGl0IGNvbnRyb2xzIHdoZXRoZXIgd2UgcmUtZXhlYyBvciBub3QuCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogQ29weSB0aGUgbXRpbWVfYmVmb3JlX3VwZGF0ZSBmaWVsZC4KCShzbmFwX2RlcHMpOiBJbml0aWFsaXplIG10aW1lX2JlZm9yZV91cGRhdGUgdG8gLTEuCgkqIG1haW4uYyAobWFpbik6IEluaXRpYWxpemUgbXRpbWVfYmVmb3JlX3VwZGF0ZSBvbiBvbGQgKC1vKSBhbmQKCW5ldyAoLVcpIGZpbGVzLgoKMTk5OS0wNy0wOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IERlZmluZSBhIG5ldyBzd2l0Y2ggLVIgKG9yCgktLW5vLWJ1aWx0aW4tdmFyaWFibGVzKS4gIFRoaXMgb3B0aW9uIGRpc2FibGVzIHRoZSBkZWZpbmluZyBvZiBhbGwKCXRoZSBHTlUgbWFrZSBidWlsdGluIHZhcmlhYmxlcy4KCShtYWluKTogSWYgLVIgd2FzIGdpdmVuLCBmb3JjZSAtciBhcyB3ZWxsLgoJKiBkZWZhdWx0LmMgKGRlZmluZV9kZWZhdWx0X3ZhcmlhYmxlcyk6IFRlc3QgdGhlIG5ldyBmbGFnLgoJKiBtYWtlLmg6IERlY2xhcmUgZ2xvYmFsIGZsYWcuCgkqIG1ha2UudGV4aW5mbyAoT3B0aW9ucyBTdW1tYXJ5KTogRG9jdW1lbnQgdGhlIG5ldyBvcHRpb24uCgkoSW1wbGljaXQgVmFyaWFibGVzKTogRGl0dG8uCgoxOTk5LTA3LTA2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbnMgU3VtbWFyeSk6IENvcnJlY3QgZXhhbXBsZXMgaW4KCS0tcHJpbnQtZGF0YS1iYXNlIG9wdGlvbiBzdW1tYXJ5IChwcm9ibGVtIHJlcG9ydGVkIGJ5IERhdmlkIE1vcnNlCgk8bW9yc2VAbmljaGltZW4uY29tPikuCgoJKiBhcnNjYW4uYzogQWRkIHN1cHBvcnQgZm9yIGFyY2hpdmVzIGluIFdpbmRvd3MgKFZDKyspLiAgRnJhbmsKCUxpYmJyZWNodCA8ZnJhbmtsQGFienguYmVsZ2l1bS5ocC5jb20+IHByb3ZpZGVkIGluZm8gb24gaG93IHRvIGRvCgl0aGlzLgoJKiBOTWFrZWZpbGUudGVtcGxhdGUgKENGTEFHU19hbnkpOiBSZW1vdmUgTk9fQVJDSElWRVMgZnJvbSB0aGUKCWNvbXBpbGUgbGluZS4KCSogYnVpbGRfdzMyLmJhdDogRGl0dG8uCgoJKiByZW1ha2UuYyAobm9fcnVsZV9lcnJvcik6IEZpeCAtaW5jbHVkZS9zaW5jbHVkZSBzbyBpdCBkb2Vzbid0CglnaXZlIGVycm9ycyBpZiB5b3UgdHJ5IHRvIC1pbmNsdWRlIHRoZSBzYW1lIGZpbGUgdHdpY2UuCgkodXBkYXRpbmdfbWFrZWZpbGVzKTogTmV3IHZhcmlhYmxlOiB3ZSBuZWVkIHRvIGtub3cgdGhpcyBpbmZvIGluCglub19ydWxlX2Vycm9yKCkgc28gd2Uga25vdyB3aGV0aGVyIHRvIHByaW50IGFuIGVycm9yIG9yIG5vdC4KCSh1cGRhdGVfZmlsZV8xKTogVW5jb25kaXRpb25hbGx5IGNhbGwgbm9fcnVsZV9lcnJvcigpLCBkb24ndCB0cnkKCXRvIHBsYXkgZ2FtZXMgd2l0aCB0aGUgZG9udGNhcmUgZmxhZy4KCjE5OTktMDYtMTQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoUmVtYWtpbmcgTWFrZWZpbGVzKTogQWRkIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvCglwcmV2ZW50IGltcGxpY2l0IHJ1bGUgc2VhcmNoZXMgZm9yIG1ha2VmaWxlcy4KCgkqIG1ha2UuMTogUmVtb3ZlIHN0YXRlbWVudCB0aGF0IG1ha2UgY29udGludWVzIHByb2Nlc3Npbmcgd2hlbiAtdgoJaXMgZ2l2ZW4uCgoxOTk5LTA2LTE0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDYXN0IC0xIGFyZ3VtZW50cyB0bwoJdmFyaWFibGVfZXhwYW5kX3N0cmluZygpIHRvIGxvbmcuICBBbGV4YW5kcmUgU2F1dmUKCTxBbGV4YW5kcmUuU0FVVkVAaWZwLmZyPiByZXBvcnRzIHRoYXQgd2l0aG91dCBjYXN0cywgdGhpcyBicmVha3MKCW9uIGEgTkVDIFNVUEVSLVVYIFNYLTQgc3lzdGVtIChhbmQgaXQncyB3cm9uZyB3aXRob3V0IGEgY2FzdAoJYW55d2F5KS4gIE9mIGNvdXJzZSwgKGEpIEknZCByZWFsbHkgbG92ZSB0byBzdGFydCB1c2luZyBmdW5jdGlvbgoJcHJvdG90eXBlcywgYW5kIChiKSB0aGVyZSdzIGEgd2hvbGUgc2xldyBvZiBpc3N1ZXMgcmVsYXRlZCB0byBpbnQKCXZzLiBsb25nIGFuZCBzaWduZWQgdnMuIHVuc2lnbmVkIGluIHRoZSBsZW5ndGggaGFuZGxpbmcgb2YKCXZhcmlhYmxlIGJ1ZmZlcnMsIGV0Yy4gIEdyb3NzLiAgTmVlZHMgYSBjb21wbGV0ZSBtdWNraW5nLW91dC4KCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IERpdHRvLgoKCSogYWNpbmNsdWRlLm00IChBQ19GVU5DX1NFTEVDVCk6IFNsaWdodCBlbmhhbmNlbWVudCBmb3IgQUlYIDMuMiBieQoJTGFycyBIZWNraW5nIDxsaGVja2luZ0BubXJjLnVjYy5pZT4uCgoJKiByZWFkLmMgKGdldF9uZXh0X213b3JkKTogQWxsb3cgY29sb25zIHRvIGJlIGVzY2FwZWQgaW4gdGFyZ2V0CgluYW1lczogZml4IGZvciByZWdyZXNzaW9uIGZhaWx1cmUuCgoxOTk5LTA0LTI2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBSZXNldCByZWFkX21ha2VmaWxlcyB0byBlbXB0eSBhZnRlciBwcm9jZXNzaW5nIHNvCgl3ZSBnZXQgdGhlIHJpZ2h0IGVycm9yIG1lc3NhZ2UuCgoxOTk5LTA0LTI1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm86IFVwZGF0ZXMgdG8gQGRpcmNhdGVnb3J5IGFuZCBAZGlyZW50cnkgc3VnZ2VzdGVkIGJ5CglLYXJsIEJlcnJ5IDxrYXJsQGNzLnVtYi5lZHU+LgoKMTk5OS0wNC0yMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCkgW19fTVNET1NfX106IENhbGwgdW5ibG9ja19zaWdzIGJlZm9yZQoJdHVybmluZyBvZmYgZG9zX2NvbW1hbmRfcnVubmluZywgc28gY2hpbGQncyBzaWduYWxzIHByb2R1Y2UgdGhlCglyaWdodCBlZmZlY3QuCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpIFtfX01TRE9TX19dOiBVc2UgRVhJVF9GQUlMVVJFCglpbnN0ZWFkIG9mIDEuCgoxOTk5LTA0LTE4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogY29uZmlnaC5kb3MudGVtcGxhdGU6IFVwZGF0ZSB0byByZWNvZ25pemUgdGhhdCB2ZXJzaW9uIDIuMDIgb2YKCURKR1BQIGNvbnRhaW5zIHN5c19zaWdsaXN0IHN0dWZmLgoKMTk5OS0wNC0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChPcHRpb25zL1JlY3Vyc2lvbik6IERvY3VtZW50IHRoZSBqb2Igc2VydmVyLgoJKFBhcmFsbGVsKTogVHdlYWtzLgoKMTk5OS0wNC0xMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCUltcGxlbWVudCBhIG5ldyAiam9iIHNlcnZlciIgZmVhdHVyZTsgdGhlIGltcGxlbWVudGF0aW9uIHdhcwoJc3VnZ2VzdGVkIGJ5IEhvd2FyZCBDaHUgPGh5Y0BoaWdobGFuZHN1bi5jb20+LgoKCSogY29uZmlndXJlLmluIChqb2Itc2VydmVyKTogTmV3IGRpc2FibGUgb3B0aW9uIGZvciBqb2Igc2VydmVyCglzdXBwb3J0LS1pdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIElmIGl0IHdvcmtzIHdlbGwgdGhpcyB3aWxsIGdvCglhd2F5LgoKCSogTkVXUzogU3VtbWFyaXplIHRoZSBuZXcgZmVhdHVyZS4KCgkqIGFjY29uZmlnLmg6IE5ldyBkZWZpbml0aW9uIE1BS0VfSk9CU0VSVkVSIGlmIGpvYiBzZXJ2ZXIgc3VwcG9ydAoJaXMgZW5hYmxlZC4KCSogY29uZmlnLmgtdm1zLnRlbXBsYXRlOiBVbmRlZiBNQUtFX0pPQlNFUlZFUiBmb3IgdGhpcyBwb3J0LgoJKiBjb25maWcuaC5XMzIudGVtcGxhdGU6IERpdHRvLgoJKiBjb25maWcuYW1pLnRlbXBsYXRlOiBEaXR0by4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogQWRkIGEgbmV3IHR5cGU6IGludF9zdHJpbmcuCgkoc3dpdGNoZXNbXSkgVXNlIGludF9zdHJpbmcgZm9yIC1qIGlmIE1BS0VfSk9CU0VSVkVSLgoJKGluaXRfc3dpdGNoZXMpOiBJbml0aWFsaXplIHRoZSBuZXcgaW50X3N0cmluZyBzd2l0Y2ggdHlwZS4KCShwcmludF91c2FnZSk6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20gZGVjb2RlX3N3aXRjaGVzKCkuCgkoZGVjb2RlX3N3aXRjaGVzKTogQ2FsbCBpdC4gIERlY29kZSB0aGUgbmV3IGludF9zdHJpbmcgc3dpdGNoIHR5cGUuCgkoZGVmaW5lX21ha2VmbGFncyk6IEFkZCBuZXcgaW50X3N0cmluZyBzd2l0Y2ggZGF0YSB0byBNQUtFRkxBR1MuCgkoam9iX2Zkc1tdKSBBcnJheSB0byBjb250YWluIHRoZSBwaXBlIGZpbGUgZGVzY3JpcHRvcnMuCgkobWFpbik6IFBhcnNlIHRoZSBqb2Jfc2xvdHNfc3RyIG9wdGlvbiByZXN1bHRzLiAgSWYgbmVjZXNzYXJ5LAoJY3JlYXRlIHRoZSBwaXBlIGFuZCBzZWVkIGl0IHdpdGggdG9rZW5zLiAgU2V0IHRoZSBub24tYmxvY2tpbmcgYml0Cglmb3IgdGhlIHJlYWQgZmQuICBFbmFibGUgdGhlIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdDSExEIGV2ZW4gaWYgd2UKCWhhdmUgYSBub24taGFuZ2luZyB3YWl0OyBpdCdzIG5lZWRlZCB0byBpbnRlcnJ1cHQgdGhlIHNlbGVjdCgpIGluCglqb2IuYzpzdGFydF93YWl0aW5nX2pvYigpLgoKCSogbWFrZS5oOiBEZWNsYXJlIGpvYl9mZHNbXS4KCgkqIGpvYi5oIChzdHJ1Y3QgY2hpbGQpOiBBZGQgam9iX3Rva2VuIGZpZWxkIHRvIHN0b3JlIHRoZSB0b2tlbiBmb3IKCXRoaXMgam9iIChpZiBhbnkpLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBXaGVuIGEgY2hpbGQgaXMgZnVsbHkgcmVhcGVkLCByZWxlYXNlIHRoZQoJdG9rZW4gYmFjayBpbnRvIHRoZSBwaXBlLgoJKGZyZWVfY2hpbGQpOiBJZiB0aGUgY2hpbGQgdG8gYmUgZnJlZWQgc3RpbGwgaGFzIGEgdG9rZW4sIHB1dCBpdAoJYmFjay4KCShuZXdfam9iKTogSW5pdGlhbGl6ZSB0aGUgam9iX3Rva2VuIG1lbWJlci4KCShzdGFydF93YWl0aW5nX2pvYik6IEZvciBsb2NhbCBqb2JzLCBpZiB3ZSdyZSB1c2luZyB0aGUgcGlwZSwgZ2V0CglhIHRva2VuIGJlZm9yZSB3ZSBjaGVjayB0aGUgbG9hZCwgZXRjLiAgV2UgZG8gdGhpcyBieSBwZXJmb3JtaW5nIGEKCW5vbi1ibG9ja2luZyByZWFkIGluIGEgbG9vcC4gIElmIHRoZSByZWFkIGZhaWxzLCBubyB0b2tlbiBpcwoJYXZhaWxhYmxlLiAgRG8gYSBzZWxlY3Qgb24gdGhlIGZkIHRvIHdhaXQgZm9yIGEgdG9rZW4uICBXZSBuZWVkIHRvCglyZS1lbmFibGUgdGhlIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdDSExEIGV2ZW4gaWYgd2UgaGF2ZSBhCglub24taGFuZ2luZyB3YWl0cGlkKCkgb3Igd2FpdDMoKSwgc28gdGhhdCB0aGUgc2lnbmFsIHdpbGwKCWludGVycnVwdCB0aGUgc2VsZWN0KCkgYW5kIHdlIGNhbiB3YWtlIHVwIHRvIHJlYXAgY2hpbGRyZW4uCgkoY2hpbGRfaGFuZGxlcik6IFJlLWVuYWJsZSB0aGUgc2lnbmFsIGhhbmRsZXIuICBUaGUgY291bnQgaXMgc3RpbGwKCWtlcHQgYWx0aG91Z2ggaXQncyBub3QgbmVlZGVkIG9yIHVzZWQgdW5sZXNzIHlvdSBkb24ndCBoYXZlCgl3YWl0cGlkKCkgb3Igd2FpdDMoKS4KCjE5OTktMDQtMTAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAobWFpbik6IFJlc2V0IHRoZSBjb25zaWRlcmVkIGJpdCBvbiBhbGwgdGhlIG1ha2VmaWxlcyBpZgoJc29tZXRoaW5nIGZhaWxlZCB0byB1cGRhdGU7IHdlIG5lZWQgdG8gZXhhbWluZSB0aGVtIGFnYWluIGlmIHRoZXkKCWFwcGVhciBhcyBub3JtYWwgdGFyZ2V0cyBpbiBvcmRlciB0byBnZXQgdGhlIHByb3BlciBlcnJvciBtZXNzYWdlLgoKMTk5OS0wNC0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCVBlcmZvcm1hbmNlIGVuaGFuY2VtZW50IGZyb20gVGltIE1hZ2lsbCA8dGltLm1hZ2lsbEB0ZWxvcHMuZ3RlLmNvbT4uCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBJZiB5b3UgaGF2ZSBsYXJnZSBudW1iZXJzIG9mCglkZXBlbmRlbmNpZXMgYW5kIHlvdSBydW4gaW4gcGFyYWxsZWwsIG1ha2UgY2FuIHNwZW5kIGNvbnNpZGVyYWJsZQoJdGltZSBlYWNoIHBhc3MgdGhyb3VnaCB0aGUgZ3JhcGggbG9va2luZyBhdCBicmFuY2hlcyBpdCBoYXMKCWFscmVhZHkgc2Vlbi4gIFNpbmNlIHdlIG9ubHkgcmVhcF9jaGlsZHJlbigpIHdoZW4gc3RhcnRpbmcgYSBwYXNzLAoJbm90IGluIHRoZSBtaWRkbGUsIGlmIGEgYnJhbmNoIGhhcyBiZWVuIHNlZW4gYWxyZWFkeSBpbiB0aGF0IHBhc3MKCW5vdGhpbmcgaW50ZXJlc3RpbmcgY2FuIGhhcHBlbiB1bnRpbCB0aGUgbmV4dCBwYXNzLiAgU28sIHdlIHRvZ2dsZQoJYSBiaXQgc2F5aW5nIHdoZXRoZXIgd2UndmUgc2VlbiB0aGlzIHRhcmdldCBpbiB0aGlzIHBhc3Mgb3Igbm90LgoJKHVwZGF0ZV9nb2FsX2NoYWluKTogSW5pdGlhbGx5IHNldCB0aGUgZ2xvYmFsIGNvbnNpZGVyZWQgdG9nZ2xlIHRvCgkxLCBzaW5jZSBhbGwgdGFyZ2V0cyBpbml0aWFsaXplIHRoZWlyIGJvb2xlYW4gdG8gMC4gIEF0IHRoZSBlbmQgb2YKCWVhY2ggcGFzcywgdG9nZ2xlIHRoZSBnbG9iYWwgY29uc2lkZXJlZCB2YXJpYWJsZS4KCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IFBlci1maWxlIGNvbnNpZGVyZWQgdG9nZ2xlIGJpdC4KCSogZmlsZS5jOiBOZXcgZ2xvYmFsIHRvZ2dsZSB2YXJpYWJsZSBjb25zaWRlcmVkLgoKMTk5OS0wNC0wNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pOiBBZGRlZCBzdXBwb3J0IGZvciBBUkZaTUFHIChjb21wcmVzc2VkCglhcmNoaXZlcz8pIGZvciBEaWdpdGFsIFVOSVggQysrLiAgSW5mb3JtYXRpb24gcHJvdmlkZWQgYnkKCVBhdHJpY2sJRS4gS3JvZ2VsIDxwZWtyb2dlbEBtdHUuZWR1Pi4KCShhcl9tZW1iZXJfdG91Y2gpOiBEaXR0by4KCjE5OTktMDQtMDMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogSWY6IGEpIHdlIGZvdW5kIGEgZmlsZSBhbmQgYikgd2UgZGlkbid0CgljcmVhdGUgaXQgYW5kIGMpIGl0J3Mgbm90IG1hcmtlZCBhcyBhbiBpbXBsaWNpdCB0YXJnZXQgYW5kIGQpIGl0CglpcyBtYXJrZWQgYXMgYW4gaW50ZXJtZWRpYXRlIHRhcmdldCwgdGhlbiBpdCB3YXMgc28gbWFya2VkIGR1ZSB0bwoJYW4gLklOVEVSTUVESUFURSBzcGVjaWFsIHRhcmdldCwgYnV0IGl0IGFscmVhZHkgZXhpc3RlZCBpbiB0aGUKCWRpcmVjdG9yeS4gIEluIHRoaXMgY2FzZSwgdW5zZXQgdGhlIGludGVybWVkaWF0ZSBmbGFnIHNvIHdlIHdvbid0CglkZWxldGUgaXQgd2hlbiBtYWtlIGlzIGRvbmUuICBJdCBmZWVscyBsaWtlIGl0IHdvdWxkIGJlIGNsZWFuZXIgdG8KCXB1dCB0aGlzIGNoZWNrIGluIHVwZGF0ZV9maWxlXzEoKSBidXQgSSB3b3JyeSBpdCdsbCBnZXQgbWlzc2VkLi4uCgoxOTk5LTA0LTAxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFVzZSBiY29weSgpIHRvIGNvcHkKCW92ZXJsYXBwaW5nIHN0cmluZ3MsIHJhdGhlciB0aGFuIHN0cmNweSgpLiAgSVNPIEMgc2F5cyB0aGUgbGF0dGVyCglpcyB1bmRlZmluZWQuICBGb3VuZCB0aGlzIGluIGEgYnVnIHJlcG9ydCBmcm9tIDE5OTYhICBPdWNoIQoKMTk5OS0wMy0zMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkbGluZSk6IElnbm9yZSBjYXJyaWFnZSByZXR1cm5zIGF0IHRoZSBlbmQgb2YgdGhlCglsaW5lLCB0byBhbGxvdyBXaW5kb3dzLXkgQ1JMRiBsaW5lIHRlcm1pbmF0b3JzLgoKMTk5OS0wMy0zMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBEb24ndCBwdXQgYnVpbGQuc2ggaGVyZSwgc2luY2UgYnVpbGQuc2guaW4gZG9lc24ndAoJZXhpc3QgaW5pdGlhbGx5LiAgVGhpcyBjYXVzZSBhdXRvcmVjb25mIGFuZCBhdXRvbWFrZSB0byBmYWlsIHdoZW4KCXJ1biBvbiBhIGNsZWFuIENWUyBjaGVja291dC4gIEluc3RlYWQsIHdlIGNyZWF0ZSBidWlsZC5zaCBpbiB0aGUKCU1ha2VmaWxlIChzZWUgYmVsb3cpLgoKCSogTWFrZWZpbGUuYW06IFJlbW92ZSBCVUlMVF9TT1VSQ0VTOyB0aGlzIGlzIG5vIGxvbmdlciByZWxldmFudC4KCVB1dCB0aG9zZSBmaWxlcyBkaXJlY3RseSBpbnRvIEVYVFJBX0RJU1Qgc28gdGhleSdyZSBkaXN0cmlidXRlZC4KCUNyZWF0ZSBhIGxvY2FsIGJ1aWxkIHJ1bGUgdG8gY3JlYXRlIGJ1aWxkLnNoLgoJQ3JlYXRlIGEgbG9jYWwgbWFpbnRhaW5lci1jbGVhbiBydWxlIHRvIGRlbGV0ZSBhbGwgdGhlIGZ1bmt5CgltYWludGFpbmVycyBmaWxlcy4KCgkqIG1haW50TWFrZWZpbGU6IE1ha2VmaWxlLmluIGRlcGVuZHMgb24gUkVBRE1FLCBzaW5jZSBhdXRvbWFrZQoJZmFpbHMgaWYgaXQgZG9lc24ndCBleGlzdC4gIEFsc28gZG9uJ3QgcmVtb3ZlIGdsb2IvTWFrZWZpbGUuaW4KCWhlcmUsIGFzIGl0IGNhdXNlcyBwcm9ibGVtcy4KCjE5OTktMDMtMjYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogU3Vic3RpdHV0ZSBHTE9CTElCIGlmIHdlIG5lZWQgdGhlIGxpbmsgdGhlCglnbG9iL2xpYmdsb2IuYSBsaWJyYXJ5LgoJKiBNYWtlZmlsZS5hbSAobWFrZV9MREFERCk6IFVzZSB0aGUgc3Vic3QgdmFyaWFibGUgR0xPQkxJQiBzbyB3ZQoJZG9uJ3QgbGluayB0aGUgbG9jYWwgbGliZ2xvYi5hIGF0IGFsbCBpZiB3ZSBkb24ndCBuZWVkIGl0LgoJKiBidWlsZC50ZW1wbGF0ZTogRG9uJ3QgY29tcGlsZSBnbG9iLyoubyB1bmxlc3Mgd2Ugd2FudCBnbG9ibGliLgoJKiBtYWludE1ha2VmaWxlIChidWlsZC5zaC5pbik6IFN1YnN0aXR1dGUgdGhlIGdsb2IvKi5vIGZpbGVzCglzZXBhcmF0ZWx5LgoKMTk5OS0wMy0yNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBWYXJpb3VzIHR5cG9zIGFuZCBhZGRpdGlvbnMsIHBvaW50ZWQgb3V0IGJ5IEphbWVzCglHLiBTYWNrIDxqc2Fja0Bkb3JuZmVsZC5jb20+LgoKMTk5OS0wMy0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChGdW5jdGlvbnMpOiBBZGQgYSBuZXcgc2VjdGlvbiBkb2N1bWVudGluZyB0aGUgbmV3CgkkKGVycm9yIC4uLikgYW5kICQod2FybmluZyAuLi4pIGZ1bmN0aW9ucy4gIEFsc28gdXBkYXRlZCBjb3B5cmlnaHQKCWRhdGVzLgoJKiBORVdTOiBVcGRhdGVkIGZvciB0aGUgbmV3IGZ1bmN0aW9ucy4KCSogZnVuY3Rpb24uYyAoZnVuY19lcnJvcik6IEltcGxlbWVudCB0aGUgbmV3ICQoZXJyb3IgLi4uKSBhbmQKCSQod2FybmluZyAuLi4pIGZ1bmN0aW9ucy4KCShmdW5jdGlvbl90YWJsZSk6IEluc2VydCBuZXcgZnVuY3Rpb25zIGludG8gdGhlIHRhYmxlLgoJKGZ1bmNfZmlyc3R3b3JkKTogRG9uJ3QgY2FsbCBmaW5kX25leHRfdG9rZW4oKSB3aXRoIGFyZ3ZbMF0KCWl0c2VsZiwgc2luY2UgdGhhdCBmdW5jdGlvbiBtb2RpZmllcyB0aGUgcG9pbnRlci4KCSogZnVuY3Rpb24uYzogQ2xlYW51cHMgYW5kIHNsaWdodCBjaGFuZ2VzIHRvIHRoZSBuZXcgbWV0aG9kIG9mCgljYWxsaW5nIGZ1bmN0aW9ucy4KCjE5OTktMDMtMjAgIEhhbi1XZW4gTmllbmh1eXMgIDxoYW53ZW5AY3MudXUubmw+CgoJKiBmdW5jdGlvbi5jOiBSZXdyaXRlIHRvIHVzZSBvbmUgQyBmdW5jdGlvbiBwZXIgbWFrZSBmdW5jdGlvbiwKCWluc3RlYWQgb2YgYSBodWdlIHN3aXRjaCBzdGF0ZW1lbnQuICBBbHNvIGFsbG93cyBzb21lIGNsZWFudXAgb2YKCW11bHRpLWFyY2hpdGVjdHVyZSBpc3N1ZXMsIGFuZCBhIGNsZWFuZXIgQVBJIHdoaWNoIG1ha2VzIHRoaW5ncwoJbGlrZSBmdW5jX2FwcGx5KCkgc2ltcGxlLgoKCSogZnVuY3Rpb24uYyAoZnVuY19hcHBseSk6IEluaXRpYWwgaW1wbGVtZW50YXRpb24uICBFeHBhbmQgZWl0aGVyCglhIGJ1aWx0aW4gZnVuY3Rpb24gb3IgYSBtYWtlIHZhcmlhYmxlIGluIHRoZSBjb250ZXh0IG9mIHNvbWUKCWFyZ3VtZW50cywgcHJvdmlkZWQgYXMgJDEsICQyLCAuLi4gJE4uCgoxOTk5LTAzLTE5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoxOTk5LTAzLTE5ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEBkZXYudGl2b2xpLmNvbT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRG9uJ3QgdHJlYXQgX2FsbF8KCWJhY2tzbGFzaGVzIGFzIGVzY2FwZXMsIG9ubHkgdGhvc2Ugd2hpY2ggcmVhbGx5IGVzY2FwZSBhIHNwZWNpYWwKCWNoYXJhY3Rlci4gIFRoaXMgYWxsb3dzIG1vc3Qgbm9ybWFsICJcIiBkaXJlY3Rvcnkgc2VwYXJhdG9ycyB0byBiZQoJdHJlYXRlZCBub3JtYWxseS4KCjE5OTktMDMtMDUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGEgc3lzdGVtIHN0cmR1cCgpLgoJKiBtaXNjLmMgKHhzdHJkdXApOiBDcmVhdGVkLiAgU3VnZ2VzdGlvbiBieSBIYW4tV2VuIE5pZW5odXlzCgk8aGFud2VuQGNzLnV1Lm5sPi4KCSogbWFrZS5oOiBQcm90b3R5cGUgeHN0cmR1cCgpLgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBVc2UgaXQuCgkqIG1haW4uYyAobWFpbik6IFVzZSBpdC4KCShmaW5kX2FuZF9zZXRfZGVmYXVsdF9zaGVsbCk6IFVzZSBpdC4KCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBVc2UgaXQuCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSk6IFVzZSBpdC4KCgkqIE1ha2VmaWxlLmFtLCBjb25maWd1cmUuaW46IFVzZSBBQ19TVUJTVF9GSUxFIHRvIGluc2VydCB0aGUKCW1haW50TWFrZWZpbGUgaW5zdGVhZCBvZiAiaW5jbHVkZSIsIHRvIGF2b2lkIGF1dG9tYWtlIDEuNAoJaW5jb21wYXRpYmlsaXR5LgoKMTk5OS0wMy0wNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogYW1pZ2EuYywgYW1pZ2EuaCwgYXIuYywgYXJzY2FuLmMsIGNvbW1hbmRzLmMsIGNvbW1hbmRzLmgsCgkqIGRlZmF1bHQuYywgZGVwLmgsIGRpci5jLCBleHBhbmQuYywgZmlsZS5jLCBmaWxlZGVmLmgsIGZ1bmN0aW9uLmMsCgkqIGltcGxpY2l0LmMsIGpvYi5jLCBqb2IuaCwgbWFpbi5jLCBtYWtlLmgsIG1pc2MuYywgcmVhZC5jLCByZW1ha2UuYwoJKiByZW1vdGUtY3N0bXMuYywgcmVtb3RlLXN0dWIuYywgcnVsZS5oLCB2YXJpYWJsZS5jLCB2YXJpYWJsZS5oLAoJKiB2cGF0aC5jLCBNYWtlZmlsZS5hbWksIE5NYWtlZmlsZS50ZW1wbGF0ZSwgYnVpbGQudGVtcGxhdGUsCgkqIG1ha2VmaWxlLnZtczogVXBkYXRlZCBGU0YgYWRkcmVzcyBpbiB0aGUgY29weXJpZ2h0IG5vdGljZS4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogSWYgd2Ugc2VlIGEgY29uZGl0aW9uYWwKCXZhcmlhYmxlIGFuZCB3ZSBkZWNpZGUgdG8gc2V0IGl0LCByZS10eXBlIGl0IGFzIHJlY3Vyc2l2ZSBzbyBpdAoJd2lsbCBiZSBleHBhbmRlZCBwcm9wZXJseSBsYXRlci4KCjE5OTktMDItMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIE5FV1M6IE1lbnRpb24gbmV3IC5MSUJQQVRURVJOUyBmZWF0dXJlLgoKCSogbWFrZS50ZXhpbmZvIChMaWJyYXJpZXMvU2VhcmNoKTogRGVzY3JpYmUgdGhlIHVzZSBhbmQKCXJhbWlmaWNhdGlvbnMgb2YgdGhlIG5ldyAuTElCUEFUVEVSTlMgdmFyaWFibGUuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBJbnN0ZWFkIG9mIHNlYXJjaGluZyBvbmx5IGZvciB0aGUKCWhhcmRjb2RlZCBleHBhbnNpb24gImxpYlguYSIgZm9yIGEgbGlicmFyeSByZWZlcmVuY2UgIi1sWCIsIHdlCglvYnRhaW4gYSBsaXN0IG9mIHBhdHRlcm5zIGZyb20gdGhlIC5MSUJQQVRURVJOUyB2YXJpYWJsZSBhbmQKCXNlYXJjaCB0aG9zZSBpbiBvcmRlci4KCgkqIGRlZmF1bHQuYzogQWRkZWQgYSBuZXcgZGVmYXVsdCB2YXJpYWJsZSAuTElCUEFUVEVSTlMuICBUaGUKCWRlZmF1bHQgZm9yIFVOSVggaXMgImxpYiUuc28gbGliJS5hIi4gIEFtaWdhIGFuZCBET1MgdmFsdWVzIGFyZQoJYWxzbyBwcm92aWRlZC4KCgkqIHJlYWQuYzogUmVtb3ZlIGJvZ3VzIEhBVkVfR0xPQl9IIHJlZmVyZW5jZXM7IGFsd2F5cyBpbmNsdWRlCgl2YW5pbGxhIGdsb2IuaC4KCjE5OTktMDItMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6IFNldCB2YWx1ZSB0byAwIHRvIGF2b2lkIGZyZWVpbmcgaXQuCgkqIHZhcmlhYmxlLmMgKHBvcF92YXJpYWJsZV9zY29wZSk6IEZyZWUgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IEZvciBzaW1wbGUgdmFyaWFibGVzLCB1c2UKCWFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQoKSB0byBhdm9pZCBzdG9tcGluZyBvbiB0aGUgdmFyaWFibGUKCWJ1ZmZlciB3aGVuIHdlIHN0aWxsIG5lZWQgaXQgZm9yIG90aGVyIHRoaW5ncy4KCgkqIGFyc2Nhbi5jOiBNb2RpZmllZCB0byBzdXBwb3J0IEFJWCA0LjMgYmlnIGFyY2hpdmVzLiAgVGhlIGNoYW5nZXMKCWFyZSBiYXNlZCBvbiBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBQaGlsIEFkYW1zCgk8cGFkYW1zQGF1c3Rpbi5pYm0uY29tPi4KCjE5OTktMDItMTkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgdG8gc2VlIGlmIHRoZSBHTlUgZ2xvYiBsaWJyYXJ5IGlzIGFscmVhZHkKCWluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLiAgSWYgc28sIF9kb24ndF8gYWRkIC1JLi9nbG9iIHRvIHRoZQoJY29tcGlsZSBsaW5lLiAgVXNpbmcgdGhlIHN5c3RlbSBnbG9iIGNvZGUgd2l0aCB0aGUgbG9jYWwgaGVhZGVycwoJaXMgdmVyeSBiYWQgbW9qbyEKCVJld3JpdGUgU0NDUyBtYWNyb3MgdG8gdXNlIG1vcmUgYXV0b2NvbmYgZmFjaWxpdGllcy4KCgkqIE1ha2VmaWxlLmFtOiBNb3ZlIC1JZ2xvYiBvdXQgb2YgSU5DTFVERVM7IGl0J2xsIGdldCBhZGRlZCB0bwoJQ1BQRkxBR1MgYnkgY29uZmlndXJlIG5vdy4KCUF1dG9tYWtlIDEuNCBpbnRyb2R1Y2VkIGl0cyBvd24gImluY2x1ZGUiIGZlYXR1cmUgd2hpY2ggY29uZmxpY3RzCgl3aXRoIHRoZSBtYWludE1ha2VmaWxlIHN0dWZmLiAgQSBoYWNrIHRoYXQgc2VlbXMgdG8gd29yayBpcyBhZGQgYQoJc3BhY2UgYmVmb3JlIHRoZSBpbmNsdWRlIDotLy4KCgkqIGJ1aWxkLnRlbXBsYXRlOiBNb3ZlIC1JZ2xvYiBvdXQgb2YgdGhlIGNvbXBpbGUgbGluZTsgaXQnbGwgZ2V0CglhZGRlZCB0byBDUFBGTEFHUyBieSBjb25maWd1cmUgbm93LgoKMTk5OS0wMi0xNiAgR2xlbm4gRC4gV29sZiAgPEdsZW5uX1dvbGZAZW1haWwuc3BzLm1vdC5jb20+CgoJKiBhcnNjYW4uYyAoYXJfc2NhbikgW1ZNU106IEluaXRpYWxpemVkIFZNU19tZW1iZXJfZGF0ZSBiZWZvcmUKCWNhbGxpbmcgbGJyJGdldF9pbmRleCBzaW5jZSBpZiB0aGUgYXJjaGl2ZSBpcyBlbXB0eSwKCVZNU19nZXRfbWVtYmVyX2luZm8gd29uJ3QgZ2V0IGNhbGxlZCBhdCBhbGwsIGFuZCBhbnkgbGVmdG92ZXIgZGF0ZQoJd2lsbCBiZSB1c2VkLiAgVGhpcyBidWcgc2hvd3MgdXAgaWYgYW55IG1lbWJlciBvZiBhbnkgYXJjaGl2ZSBpcwoJbWFkZSwgZm9sbG93ZWQgYnkgYSBkZXBlbmRlbmN5IGNoZWNrIG9uIGEgZGlmZmVyZW50LCBlbXB0eQoJYXJjaGl2ZS4KCjE5OTgtMTItMTMgIE1hcnRpbiBaaW5zZXIgIDx6aW5zZXJAZGVjdXMuZGVjdXMuZGU+CgoJKiBjb25maWcuaC12bXMgW1ZNU106IFNldCBfUE9TSVhfQ19TT1VSQ0UuICBSZWRlZmluZSB0aGUgZ2V0b3B0CglmdW5jdGlvbnMgc28gd2UgZG9uJ3QgdXNlIHRoZSBicm9rZW4gVk1TIHZlcnNpb25zLgoJKiBtYWtlZmlsZS5jb20gW1ZNU106IEFsbG93IGRlYnVnZ2luZy4KCSogZGlyLmMgKGRpcl9zZXR1cF9nbG9iKSBbVk1TXTogRG9uJ3QgZXh0ZXJuIHN0YXQoKSBvbiBWTVMuCgoxOTk4LTExLTMwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBzaWduYW1lLmMgKGluaXRfc2lnKTogQ2hlY2sgdGhlIHNpemVzIG9mIHNpZ25hbHMgYmVpbmcgc2V0IHVwIHRvCglhdm9pZCBhcnJheSBvdmVyd3JpdGVzIChpZiB0aGUgc3lzdGVtIGhlYWRlcnMgaGF2ZSBwcm9ibGVtcykuCgoxOTk4LTExLTE3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IENsZWFuIHVwIHNvbWUgaW5kZW50YXRpb24uCgoxOTk4LTExLTA4ICBIYW4tV2VuIE5pZW5odXlzICA8aGFud2VuQGNzLnV1Lm5sPgoKCSogcnVsZS5jIChwcmludF9ydWxlX2RhdGFfYmFzZSk6IEZpeCBhcmd1bWVudHMgdG8gZmF0YWwoKSBjYWxsLgoKMTk5OC0xMC0xMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSWYgdGhlIGNvbW1hbmQgbGlzdCByZXNvbHZlcyB0byBubwoJY2hhcnMgYXQgYWxsIChlLmcuOiAiZm9vOjskKGVtcHR5KSIpIHRoZW4gY29tbWFuZF9wdHIgaXMgTlVMTDsKCXF1aXQgZWFybHkuCgoxOTk4LTEwLTEyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBydWxlLmMgKHByaW50X3J1bGVfZGF0YV9iYXNlKTogSWdub3JlIG51bV9wYXR0ZXJuX3J1bGVzIGlmIGl0IGlzCgl6ZXJvLgoKMTk5OC0xMC0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWxsb3cgbm9uLWVtcHR5IGxpbmVzIHRvIGV4cGFuZCB0byB0aGUKCWVtcHR5IHN0cmluZyBhZnRlciB2YXJpYWJsZSwgZXRjLiwgZXhwYW5zaW9uLCBhbmQgYmUgaWdub3JlZC4KCjE5OTgtMDktMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogT25seSBhZGQgQ09NTUFORC5DT00KCSJAZWNobyBvZmYiIGxpbmUgZm9yIG5vbi1VTklYeSBzaGVsbHMuCgoxOTk4LTA5LTA5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBBZGQgaW4gbWlzc2luZyBIQVZFX01LU19TSEVMTCB0ZXN0cy4KCjE5OTgtMDktMDQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmIHdlIGhpdCB0aGUgIm1pc3Npbmcgc2VwYXJhdG9yIiBlcnJvciwKCWNoZWNrIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgOCBzcGFjZXMgaW5zdGVhZCBvZiBhIFRBQiBhbmQgZ2l2ZSBhbgoJZXh0cmEgY29tbWVudCB0byBoZWxwIHBlb3BsZSBvdXQuCgoxOTk4LTA4LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfU1RSVUNUX1NUX01USU1fTlNFQyk6CglSZW5hbWVkIGZyb20gQUNfU1RSVUNUX1NUX01USU0uCgoJKiBhY2luY2x1ZGUubTQgKEFDX1NUUlVDVF9TVF9NVElNX05TRUMpOiAgTGlrZXdpc2UuCglQb3J0IHRvIFVuaXhXYXJlIDIuMS4yIGFuZCBwZWRhbnRpYyBTb2xhcmlzIDIuNi4KCgkqIGFjY29uZmlnLmggKFNUX01USU1fTlNFQyk6CglSZW5hbWVkIGZyb20gSEFWRV9TVF9NVElNLCB3aXRoIGEgbmV3IG1lYW5pbmcuCgoJKiBmaWxlZGVmLmggKEZJTEVfVElNRVNUQU1QX0ZST01fU19BTkRfTlMpOgoJVXNlIG5ldyBTVF9NVElNX05TRUMgbWFjcm8uCgoxOTk4LTA4LTI2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogRm9yIGFueSBpbnRlcm1lZGlhdGUgZmlsZSwgbm90IGp1c3QKCXNlY29uZGFyeSBvbmVzLCB0cnkgaW1wbGljaXQgYW5kIGRlZmF1bHQgcnVsZXMgaWYgbm8gZXhwbGljaXQKCXJ1bGVzIGFyZSBnaXZlbi4gIEknbSBub3Qgc3VyZSB3aHkgdGhpcyB3YXMgcmVzdHJpY3RlZCB0bwoJc2Vjb25kYXJ5IHJ1bGVzIGluIHRoZSBmaXJzdCBwbGFjZS4KCjE5OTgtMDgtMjQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoU3BlY2lhbCBUYXJnZXRzKTogVXBkYXRlIGRvY3VtZW50YXRpb24gZm9yCgkuSU5URVJNRURJQVRFOiBpZiB1c2VkIHdpdGggbm8gZGVwZW5kZW5jaWVzLCB0aGVuIGl0IGRvZXMgbm90aGluZzsKCW9sZCBkb2NzIHNhaWQgaXQgbWFya2VkIGFsbCB0YXJnZXRzIGFzIGludGVybWVkaWF0ZSwgd2hpY2ggaXQKCWRpZG4ndC4uLiBhbmQgd2hpY2ggd291bGQgYmUgc2lsbHkgOikuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IElmIHdlIGZpbmQgYSBkZXBlbmRlbmN5IGluIG91cgoJaW50ZXJuYWwgdGFibGVzLCBtYWtlIHN1cmUgaXQncyBub3QgbWFya2VkIGludGVybWVkaWF0ZSBiZWZvcmUKCWFjY2VwdGluZyBpdCBhcyBhIGZvdW5kX2ZpbGVbXS4KCjE5OTgtMDgtMjAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGFyLmMgKGFyX2dsb2IpOiBVc2UgZXhpc3RpbmcgYWxwaGFfY29tcGFyZSgpIHdpdGggcXNvcnQuCgkoYXJfZ2xvYl9hbHBoYWNvbXBhcmUpOiBSZW1vdmUgaXQuCgoJTW9kaWZ5IFBhdWwgRWdnZXJ0J3MgcGF0Y2ggc28gd2UgZG9uJ3QgYWJhbmRvbiBvbGRlciBzeXN0ZW1zOgoKCSogY29uZmlndXJlLmluOiBXYXJuIHRoZSB1c2VyIGlmIG5laXRoZXIgd2FpdHBpZCgpIG5vciB3YWl0MygpIGlzCglhdmFpbGFibGUuCgoJKiBqb2IuYyAoV0FJVF9OT0hBTkcpOiBEb24ndCBzeW50YXggZXJyb3Igb24gYW5jaWVudCBob3N0cy4KCShjaGlsZF9oYW5kbGVyLCBkZWFkX2NoaWxkcmVuKTogRGVmaW5lIHRoZXNlIGlmIFdBSVRfTk9IQU5HIGlzIG5vdAoJYXZhaWxhYmxlLgoJKHJlYXBfY2hpbGRyZW4pOiBPbmx5IHRyYWNrIHRoZSBkZWFkX2NoaWxkcmVuIGNvdW50IGlmIG5vCglXQUlUX05PSEFORy4gIE90aGVyd2lzZSwgaXQncyBhIGJvb2xlYW4uCgoJKiBtYWluLmMgKG1haW4pOiBBZGQgYmFjayBzaWduYWwgaGFuZGxlciBpZiBubyBXQUlUX05PSEFORyBpcwoJYXZhaWxhYmxlOyBvbmx5IHVzZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIGlmIGl0IGlzLgoKMTk5OC0wOC0yMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJSW5zdGFsbCBhIG1vcmUgcm9idXN0IHNpZ25hbCBoYW5kbGluZyBtZWNoYW5pc20gZm9yIHN5c3RlbXMgd2hpY2gKCXN1cHBvcnQgaXQuCgoJKiBqb2IuYyAoV0FJVF9OT0hBTkcpOiBEZWZpbmUgdG8gYSBzeW50YXggZXJyb3IgaWYgb3VyIGhvc3QKCWlzIHRydWx5IGFuY2llbnQ7IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KCShjaGlsZF9oYW5kbGVyLCBkZWFkX2NoaWxkcmVuKTogUmVtb3ZlLgoJKHJlYXBfY2hpbGRyZW4pOiBEb24ndCB0cnkgdG8ga2VlcCBzZXBhcmF0ZSB0cmFjayBvZiBob3cgbWFueQoJZGVhZCBjaGlsZHJlbiB3ZSBoYXZlLCBhcyB0aGlzIGlzIHRvbyBidWctcHJvbmUuCglKdXN0IGFzayB0aGUgT1MgaW5zdGVhZC4KCSh2bXNIYW5kbGVDaGlsZFRlcm0pOiBGaXggdHlwbyBpbiBlcnJvciBtZXNzYWdlOyBkb24ndCBtZW50aW9uCgljaGlsZF9oYW5kbGVyLgoKCSogbWFpbi5jIChtYWluKTogTWFrZSBzdXJlIHdlJ3JlIG5vdCBpZ25vcmluZyBTSUdDSExEL1NJR0NMRDsKCWRvIHRoaXMgZWFybHksIGJlZm9yZSB3ZSBjb3VsZCBwb3NzaWJseSBjcmVhdGUgYSBzdWJwcm9jZXNzLgoJSnVzdCB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3I7IGRvbid0IGhhdmUgb3VyIG93biBoYW5kbGVyLgoKMTk5OC0wOC0xOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSkgW19fTVNET1NfXywgV0lORE9XUzMyXTogQWRkIGNvZGUgdG8KCXJlY29nbml6ZSBsaWJyYXJ5IGFyY2hpdmUgbWVtYmVycyB3aGVuIGRlYWxpbmcgd2l0aCBkcml2ZSBzcGVjCgltZXNzLiAgRGlzY292ZXJ5IGFuZCBpbml0aWFsIGZpeCBieSBHZW9yZ2UgUmFjeiA8Z3JhY3pAbWluY29tLmNvbT4uCgoxOTk4LTA4LTE4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzdGRsaWIuaCBleHBsaWNpdGx5IChzb21lIGhvc3RzIGhhdmUgaXQKCWJ1dCBkb24ndCBoYXZlIFNURENfSEVBREVSUykuCgkqIG1ha2UuaDogVXNlIEhBVkVfU1RETElCX0guICBDbGVhbiB1cCBzb21lICNkZWZpbmVzLgoJKiBjb25maWcuYW1pOiBSZS1jb21wdXRlIGJhc2VkIG9uIG5ldyBjb25maWcuaC5pbiBjb250ZW50cy4KCSogY29uZmlnLmgtdm1zOiBEaXR0by4KCSogY29uZmlnLmguVzMyOiBEaXR0by4KCSogY29uZmlnaC5kb3M6IERpdHRvLgoKCSogZGlyLmMgKGZpbmRfZGlyZWN0b3J5KSBbV0lORE9XUzMyXTogV2luZG93cyBzdGF0KCkgZmFpbHMgaWYKCWRpcmVjdG9yeSBuYW1lcyBlbmQgd2l0aCBgXCcgc28gc3RyaXAgaXQuCgoxOTk4LTA4LTE3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm86IEFkZGVkIGNvcHlyaWdodCB5ZWFyIHRvIHRoZSBwcmludGVkIGNvcHkuICBSZW1vdmVkCgl0aGUgcHJpY2UgZnJvbSB0aGUgbWFudWFsLiAgQ2hhbmdlIHRoZSB0b3AtbGV2ZWwgcmVmZXJlbmNlIHRvCglydW5uaW5nIG1ha2UgdG8gYmUgIkludm9raW5nIG1ha2UiIGluc3RlYWQgb2YgIm1ha2UgSW52b2NhdGlvbiIsCgl0byBjb21wbHkgd2l0aCBHTlUgZG9jIHN0YW5kYXJkcy4KCgkqIG1ha2UuaCAoX19mb3JtYXRfXywgX19wcmludGZfXyk6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZXNlIGluCglfX2F0dHJpYnV0ZV9fIG1hY3JvLgoJKG1lc3NhZ2UsIGVycm9yLCBmYXRhbCk6IFVzZSAuLi4gcHJvdG90eXBlIGZvcm0gdW5kZXIgX19TVERDX18uCglBZGQgX19mb3JtYXRfXyBhdHRyaWJ1dGVzIGZvciBwcmludGYtc3R5bGUgZnVuY3Rpb25zLgoKCSogY29uZmlndXJlLmluIChBQ19GVU5DX1ZQUklOVEYpOiBDaGVjayBmb3IgdnByaW50ZigpL19kb3BybnQoKS4KCgkqIG1pc2MuYyAobWVzc2FnZSwgZXJyb3IsIGZhdGFsKTogQWRkIHByZXByb2Nlc3NvciBzdHVmZiB0byBlbmFibGUKCWNyZWF0aW9uIG9mIHZhcmlhYmxlLWFyZ3VtZW50IGZ1bmN0aW9ucyB3aXRoIGFwcHJvcHJpYXRlCglwcm90b3R5cGVzLCB0aGF0IHdvcmtzIHdpdGggQU5TSSwgcHJlLUFOU0ksIHZhcmFyZ3MuaCwgc3RkYXJnLmgsCgl2KnByaW50ZigpLCBfZG9wcm50KCksIG9yIG5vbmUgb2YgdGhlIGFib3ZlLiAgQ3VsbGVkIGZyb20gR05VCglmaWxldXRpbHMgYW5kIHNsaWdodGx5IG1vZGlmaWVkLgoJKG1ha2VmaWxlX2Vycm9yLCBtYWtlZmlsZV9lcnJvcik6IFJlbW92ZWQgKG1lcmdlZCBpbnRvIGVycm9yKCkgYW5kCglmYXRhbCgpLCByZXNwZWN0aXZlbHkpLgoJKiBhbWlnYS5jOiBVc2UgdGhlbS4KCSogYXIuYzogVXNlIHRoZW0uCgkqIGFyc2Nhbi5jOiBVc2UgdGhlbS4KCSogY29tbWFuZHMuYzogVXNlIHRoZW0uCgkqIGV4cGFuZC5jOiBVc2UgdGhlbS4KCSogZmlsZS5jOiBVc2UgdGhlbS4KCSogZnVuY3Rpb24uYzogVXNlIHRoZW0uCgkqIGpvYi5jOiBVc2UgdGhlbS4KCSogbWFpbi5jOiBVc2UgdGhlbS4KCSogbWlzYy5jOiBVc2UgdGhlbS4KCSogcmVhZC5jOiBVc2UgdGhlbS4KCSogcmVtYWtlLmM6IFVzZSB0aGVtLgoJKiByZW1vdGUtY3N0bXMuYzogVXNlIHRoZW0uCgkqIHJ1bGUuYzogVXNlIHRoZW0uCgkqIHZhcmlhYmxlLmM6IFVzZSB0aGVtLgoKCSogbWFrZS5oIChzdHJ1Y3QgZmxvYyk6IE5ldyBzdHJ1Y3R1cmUgdG8gc3RvcmUgZmlsZSBsb2NhdGlvbgoJaW5mb3JtYXRpb24uCgkqIGNvbW1hbmRzLmggKHN0cnVjdCBjb21tYW5kcyk6IFVzZSBpdC4KCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBVc2UgaXQuCgkqIGNvbW1hbmRzLmM6IFVzZSBpdC4KCSogZGVmYXVsdC5jOiBVc2UgaXQuCgkqIGZpbGUuYzogVXNlIGl0LgoJKiBmdW5jdGlvbi5jOiBVc2UgaXQuCgkqIG1pc2MuYzogVXNlIGl0LgoJKiByZWFkLmM6IFVzZSBpdC4KCSogcnVsZS5jOiBVc2UgaXQuCgoxOTk4LTA4LTE2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGZpbGVkZWYuaCAoRklMRV9USU1FU1RBTVBfUFJJTlRfTEVOX0JPVU5EKTogQWRkIDEwLCBmb3IgbmFub3NlY29uZHMuCgoxOTk4LTA4LTE2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGZpbGVkZWYuaCAoRkxPT1JfTE9HMl9TRUNPTkRTX1BFUl9ZRUFSKTogTmV3IG1hY3JvLgoJKEZJTEVfVElNRVNUQU1QX1BSSU5UX0xFTl9CT1VORCk6IFRpZ2h0ZW4gYm91bmQsIGFuZCB0cnkgdG8KCW1ha2UgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCgoxOTk4LTA4LTE0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBXZSd2ZSBhbHJlYWR5IHVucXVvdGVkIGFueSBjb2xvbiBjaGFycwoJYnkgdGhlIHRpbWUgd2UncmUgZG9uZSByZWFkaW5nIHRoZSB0YXJnZXRzLCBzbyBhcnJhbmdlIGZvcgoJcGFyc2VfZmlsZV9zZXEoKSBvbiB0aGUgdGFyZ2V0IGxpc3QgdG8gbm90IGRvIHNvIGFnYWluLgoKMTk5OC0wOC0wNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBBZGRlZCBnbG9iL2NvbmZpZ3VyZS5pbiBkYXRhLiAgV2UnbGwgaGF2ZSB0aGUgZ2xvYgoJY29kZSBpbmNsdWRlIHRoZSByZWd1bGFyIG1ha2UgY29uZmlnLmgsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGl0cwoJb3duLgoKCSogZ2V0bG9hZGF2Zy5jIChtYWluKTogQ2hhbmdlIHJldHVybiB0eXBlIHRvIGludC4KCjE5OTgtMDgtMDEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBJZ25vcmUgdW5rbm93biBjaGlsZHJlbi4KCjE5OTgtMDctMzEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UuaCwgZmlsZWRlZi5oLCBkZXAuaCwgcnVsZS5oLCBjb21tYW5kcy5oLCByZW1ha2UuYzoKCUFkZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMuICBTb21lIHByb3RvdHlwZXMgbmVlZGVkIHRvIGJlIG1vdmVkCglpbiBvcmRlciB0byBnZXQgI2luY2x1ZGUgb3JkZXIgcmVhc29uYWJsZS4KCjE5OTgtMDctMzAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UuaDogQWRkZWQgTUlOL01BWC4KCSogZmlsZWRlZi5oOiBVc2UgdGhlbTsgcmVtb3ZlIEZJTEVfVElNRVNUQU1QX01JTi4KCjE5OTgtMDctMzAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc3ViLXNlY29uZCB0aW1lc3RhbXAgcmVzb2x1dGlvbiBvbiBob3N0cyB0aGF0CiAgICAgICAgc3VwcG9ydCBpdCAoanVzdCBTb2xhcmlzIDIuNiwgc28gZmFyKS4KCgkqIGFjY29uZmlnLmggKEhBVkVfU1RfTVRJTSwgdWludG1heF90KTogTmV3IHVuZGVmcy4KCSogYWNpbmNsdWRlLm00IChqbV9BQ19IRUFERVJfSU5UVFlQRVNfSCwgQUNfU1RSVUNUX1NUX01USU0sCiAgICAgICAgam1fQUNfVFlQRV9VSU5UTUFYX1QpOiBOZXcgZGVmdW5zLgoJKiBjb21tYW5kcy5jIChkZWxldGVfdGFyZ2V0KTogQ29udmVydCBmaWxlIHRpbWVzdGFtcCB0bwogICAgICAgIHNlY29uZHMgYmVmb3JlIGNvbXBhcmluZyB0byBhcmNoaXZlIHRpbWVzdGFtcC4gIEV4dHJhY3QgbW9kCiAgICAgICAgdGltZSBmcm9tIHN0cnVjdCBzdGF0IHVzaW5nIEZJTEVfVElNRVNUQU1QX1NUQVRfTU9EVElNRS4KCSogY29uZmlndXJlLmluIChDX1NUUlVDVF9TVF9NVElNLCBqbV9BQ19UWVBFX1VJTlRNQVhfVCk6IEFkZC4KICAgICAgICAoQUNfQ0hFQ0tfTElCLCBBQ19DSEVDS19GVU5DUyk6IEFkZCBjbG9ja19nZXR0aW1lLgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IFVzZSBGSUxFX1RJTUVTVEFNUCwgbm90IHRpbWVfdC4KICAgICAgICAoZmlsZV90aW1lc3RhbXBfbm93LCBmaWxlX3RpbWVzdGFtcF9zcHJpbnRmKTogTmV3IGZ1bmN0aW9ucy4KICAgICAgICAocHJpbnRfZmlsZSk6IFByaW50IGZpbGUgdGltZXN0YW1wcyBhcyBGSUxFX1RJTUVTVEFNUCwgbm90CiAgICAgICAgdGltZV90LgoJKiBmaWxlZGVmLmg6IEluY2x1ZGUgPGludHR5cGVzLmg+IGlmIGF2YWlsYWJsZSBhbmQgaWYgSEFWRV9TVF9NVElNLgogICAgICAgIChGSUxFX1RJTUVTVEFNUCwgRklMRV9USU1FU1RBTVBfU1RBVF9NT0RUSU1FLCBGSUxFX1RJTUVTVEFNUF9NSU4sCiAgICAgICAgRklMRV9USU1FU1RBTVBTX1BFUl9TLCBGSUxFX1RJTUVTVEFNUF9GUk9NX1NfQU5EX05TLAogICAgICAgIEZJTEVfVElNRVNUQU1QX0RJViwgRklMRV9USU1FU1RBTVBfTU9ELCBGSUxFX1RJTUVTVEFNUF9TLAogICAgICAgIEZJTEVfVElNRVNUQU1QX05TLCBGSUxFX1RJTUVTVEFNUF9QUklOVF9MRU5fQk9VTkQpOiBOZXcgbWFjcm9zLgogICAgICAgIChmaWxlX3RpbWVzdGFtcF9ub3csIGZpbGVfdGltZXN0YW1wX3NwcmludGYpOiBOZXcgZGVjbHMuCiAgICAgICAgKHN0cnVjdCBmaWxlLmxhc3RfbXRpbWUsIGZfbXRpbWUsIGZpbGVfbXRpbWVfMSwgTkVXX01USU1FKToKICAgICAgICB0aW1lX3QgLT4gRklMRV9USU1FU1RBTVAuCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogTGlrZXdpc2UuCgkqIHZwYXRoLmMgKHZwYXRoX3NlYXJjaCwgc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IExpa2V3aXNlLgoJKiBtYWluLmMgKG1haW4pOiBMaWtld2lzZS4KCSogcmVtYWtlLmMgKGNoZWNrX2RlcCwgbmFtZV9tdGltZSwgbGlicmFyeV9zZWFyY2gsIGZfbXRpbWUpOiBMaWtld2lzZS4KICAgICAgICAoZl9tdGltZSk6IFVzZSBmaWxlX3RpbWVzdGFtcF9ub3cgaW5zdGVhZCBvZiBgdGltZScuCiAgICAgICAgUHJpbnQgZmlsZSB0aW1lc3RhbXAgd2l0aCBmaWxlX3RpbWVzdGFtcF9zcHJpbnRmLgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogRXh0cmFjdCBmaWxlIHRpbWUgc3RhbXAgZnJvbQogICAgICAgIHN0cnVjdCBzdGF0IHdpdGggRklMRV9USU1FU1RBTVBfU1RBVF9NT0RUSU1FLgoKMTk5OC0wNy0yOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3IHJlbGVhc2VkLgoKCSogZG9zYnVpbGQuYmF0OiBDaGFuZ2UgdG8gRE9TIENSTEYgbGluZSB0ZXJtaW5hdG9ycy4KCgkqIG1ha2Utc3Rkcy50ZXhpOiBVcGRhdGUgZnJvbSBsYXRlc3QgdmVyc2lvbi4KCgkqIG1ha2UudGV4aW5mbyAoT3B0aW9ucyBTdW1tYXJ5KTogQ2xhcmlmeSB0aGF0IHRoZSAtciBvcHRpb24KCWFmZmVjdHMgb25seSBydWxlcywgbm90IGJ1aWx0aW4gdmFyaWFibGVzLgoKMTk5OC0wNy0yNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS5oOiBNYWtlIF9fYXR0cmlidXRlX18gcmVzb2x2ZSB0byBlbXB0eSBmb3Igbm9uLUdDQyBfYW5kXwoJZm9yIEdDQyBwcmUtMi41LnguCgoJKiBtaXNjLmMgKGxvZ19hY2Nlc3MpOiBQcmludCBVSUQvR0lEJ3MgYXMgdW5zaWduZWQgbG9uZyBpbnQgZm9yCgltYXhpbXVtIHBvcnRhYmlsaXR5LgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBQcmludCBQSURzIGFzIGxvbmcgaW50IGZvciBtYXhpbXVtCglwb3J0YWJpbGl0eS4KCjE5OTgtMDctMjQgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBNYWtlZmlsZS5ET1MgKCpfSU5TVEFMTCwgKl9VTklOU1RBTEwpOiBSZXBsYWNlIGB0cnVlJyB3aXRoIGA6Jy4KCjE5OTgtMDctMjUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ni45NCByZWxlYXNlZC4KCjE5OTgtMDctMjMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZy5oLlczMi50ZW1wbGF0ZTogTWFrZSBzdXJlIGFsbCB0aGUgI2RlZmluZXMgb2YgbWFjcm9zIGhlcmUKCWhhdmUgYSB2YWx1ZSAoZS5nLiwgdXNlIGBgI2RlZmluZSBIQVZFX1NUUklOR19IIDEnJyBpbnN0ZWFkIG9mCglqdXN0IGBgI2RlZmluZSBIQVZFX1NUUklOR19IJycuICBLZWVwcyB0aGUgcHJlcHJvY2Vzc29yIGhhcHB5IGluCglzb21lIGNvbnRleHRzLgoKCSogbWFrZS5oOiBSZW1vdmUgX19hdHRyaWJ1dGVfXygoZm9ybWF0Li4uKSkgc3R1ZmY7IHVzaW5nIGl0IHdpdGgKCXVuLXByb3RvdHlwZWQgZnVuY3Rpb25zIGNhdXNlcyBvbGRlciBHQ0MncyB0byBmYWlsLgoKCSogVmVyc2lvbiAzLjc2LjkzIHJlbGVhc2VkLgoKMTk5OC0wNy0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZmlsZS5jIChwcmludF9maWxlX2RhdGFfYmFzZSk6IEZpeCBhdmVyYWdlIGNhbGN1bGF0aW9uLgoKMTk5OC0wNy0yMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChkaWUpOiBQb3N0cG9uZSB0aGUgY2hkaXIoKSB1bnRpbCBhZnRlcgoJcmVtb3ZlX2ludGVybWVkaWF0ZXMoKSBzbyB0aGF0IGludGVybWVkaWF0ZSB0YXJnZXRzIHdpdGggcmVsYXRpdmUKCXBhdGhuYW1lcyBhcmUgcmVtb3ZlZCBwcm9wZXJseS4KCjE5OTgtMDctMTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBOZXcgZmxhZzogZGlkIHdlIHByaW50IGFuIGVycm9yIG9yIG5vdD8KCgkqIHJlbWFrZS5jIChub19ydWxlX2Vycm9yKTogTmV3IGZ1bmN0aW9uIHRvIHByaW50IGVycm9yIG1lc3NhZ2VzLAoJZXh0cmFjZWQgZnJvbSByZW1ha2VfZmlsZSgpLgoKCSogcmVtYWtlLmMgKHJlbWFrZV9maWxlKTogSW52b2tlIHRoZSBuZXcgZXJyb3IgcHJpbnQgZnVuY3Rpb24uCgkodXBkYXRlX2ZpbGVfMSk6IEludm9rZSB0aGUgZXJyb3IgcHJpbnQgZnVuY3Rpb24gaWYgd2Ugc2VlIHRoYXQgd2UKCWFscmVhZHkgdHJpZWQgdGhpcyB0YXJnZXQgYW5kIGl0IGZhaWxlZCwgYnV0IHRoYXQgYW4gZXJyb3Igd2Fzbid0CglwcmludGVkIGZvciBpdC4gIFRoaXMgY2FuIGhhcHBlbiBpZiBhIGZpbGUgaXMgaW5jbHVkZWQgd2l0aAoJLWluY2x1ZGUgb3Igc2luY2x1ZGUgYW5kIGNvdWxkbid0IGJlIGJ1aWx0LCB0aGVuIGxhdGVyIGlzIGFsc28KCXRoZSBkZXBlbmRlbmN5IG9mIGFub3RoZXIgdGFyZ2V0LiAgV2l0aG91dCB0aGlzIGNoYW5nZSwgbWFrZSBqdXN0CglzaWxlbnRseSBzdG9wcyA6LS8uCgoxOTk4LTA3LTE2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm86IFJlbW92ZWQgImJldGEiIHZlcnNpb24gZGVzaWduYXRvci4KCVVwZGF0ZWQgSVNCTiBmb3IgdGhlIG5leHQgcHJpbnRpbmcuCgoxOTk4LTA3LTEzICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGFjaW5jbHVkZS5tNDogTmV3IEFDX0xGUyBtYWNybyB0byBkZXRlcm1pbmUgaWYgc3BlY2lhbCBjb21waWxlcgoJZmxhZ3MgYXJlIG5lZWRlZCB0byBhbGxvdyBhY2Nlc3MgdG8gbGFyZ2UgZmlsZXMgKGUuZy4sIFNvbGFyaXMgMi42KS4KCSogY29uZmlndXJlLmluOiBJbnZva2UgaXQuCgoxOTk4LTA3LTA4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogTWFrZWZpbGUuRE9TOiB0cmFjayBjaGFuZ2VzIGluIE1ha2VmaWxlLmluLgoKMTk5OC0wNy0wNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtb3RlLWNzdG1zLmMgKHN0YXJ0X3JlbW90ZV9qb2IpOiBNb3ZlIGdldGhvc3RieWFkZHIoKSB0byB0aGUKCXRvcCBzbyBob3N0IGlzIGluaXRpYWxpemVkIGVhcmx5IGVub3VnaC4KCgkqIGFjaW5jbHVkZS5tNDogTmV3IGZpbGUuICBOZWVkIHNvbWUgc3BlY2lhbCBhdXRvY29uZiBtYWNyb3MgdG8KCWNoZWNrIGZvciBuZXR3b3JrIGxpYnJhcmllcyAoLWxzb2NrZXQsIC1sbnNsLCBldGMuKSB3aGVuCgljb25maWd1cmluZyBDdXN0b21zLgoKCSogY29uZmlndXJlLmluIChtYWtlX3RyeV9jdXN0b21zKTogSW52b2tlIG5ldyBuZXR3b3JrIGxpYnMgbWFjcm8uCgoxOTk4LTA3LTA2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzYuOTIgcmVsZWFzZWQuCgoJKiBSRUFETUUuY3VzdG9tczogQWRkZWQgdG8gdGhlIGRpc3RyaWJ1dGlvbi4KCgkqIGNvbmZpZ3VyZS5pbiAobWFrZV90cnlfY3VzdG9tcyk6IFJld3JpdGUgdG8gcmVxdWlyZSBhbiBpbnN0YWxsZWQKCUN1c3RvbXMgbGlicmFyeSwgcmF0aGVyIHRoYW4gbG9va2luZyBhdCB0aGUgYnVpbGQgZGlyZWN0b3J5LgoKCSogTWFrZWZpbGUuYW0gKG1hbl9NQU5TKTogSW5zdGFsbCBtYWtlLjEuCgkqIG1ha2UuMTogUmVuYW1lZCBmcm9tIG1ha2UubWFuLgoKCSogbWFrZS50ZXhpbmZvIChCdWdzKTogTmV3IG1haWxpbmcgbGlzdCBhZGRyZXNzIGZvciBHTlUgbWFrZSBidWcKCXJlcG9ydHMuCgoxOTk4LTA3LTAyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzYuOTEgcmVsZWFzZWQuCgoJKiBkZWZhdWx0LmM6IEFkZGVkIGRlZmF1bHQgcnVsZSBmb3IgbmV3LXN0eWxlIFJDUyBtYXN0ZXIgZmlsZQoJc3RvcmFnZTsgYGAlIDo6IFJDUy8lJycuCglBZGRlZCBkZWZhdWx0IHJ1bGVzIGZvciBET1Mtc3R5bGUgQysrIGZpbGVzIHdpdGggc3VmZml4ICIuY3BwIi4KCVRoZXkgdXNlIHRoZSBuZXcgTElOSy5jcHAgYW5kIENPTVBJTEUuY3BwIG1hY3Jvcywgd2hpY2ggYXJlIHNldCBieQoJZGVmYXVsdCB0byBiZSBlcXVhbCB0byBMSU5LLmNjIGFuZCBDT01QSUxFLmNjLgoKMTk5OC0wNi0xOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFJlc2V0IGV4ZWN1dGVfYnlfc2hlbGwgYWZ0ZXIgYW4gZW1wdHkKICAgICAgICBjb21tYW5kIHdhcyBza2lwcGVkLgoKMTk5OC0wNi0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogS2VlcCB0cmFjayBvZiB0aGUgdGVtcG9yYXJ5IGZpbGVuYW1lIGNyZWF0ZWQgd2hlbgoJcmVhZGluZyBhIG1ha2VmaWxlIGZyb20gc3RkaW4gKC1mLSkgYW5kIGF0dGVtcHQgdG8gcmVtb3ZlIGl0CglhcyBzb29uIGFzIHdlIGtub3cgd2UncmUgbm90IGdvaW5nIHRvIHJlLWV4ZWMuICBJZiB3ZSBhcmUsIGFkZCBpdAoJdG8gdGhlIGV4ZWMnZCBtYWtlJ3MgY21kIGxpbmUgd2l0aCAiLW8iIHNvIHRoZSBleGVjJ2QgbWFrZSBkb2Vzbid0Cgl0cnkgdG8gcmVidWlsZCBpdC4gIFdlIHN0aWxsIGhhdmUgYSBob2xlOiBpZiBtYWtlIHJlLWV4ZWNzIHRoZW4KCXRoZSB0ZW1wb3JhcnkgZmlsZSB3aWxsIG5ldmVyIGJlIHJlbW92ZWQuICBUbyBmaXggdGhpcyB3ZSdkIG5lZWQKCWEgYnJhbmQgbmV3IG9wdGlvbiB0aGF0IG1lYW50ICJyZWFsbHkgZGVsZXRlIHRoaXMiLgoJKiBBVVRIT1JTLCBnZXRvcHQuYywgZ2V0b3B0MS5jLCBnZXRvcHQuaCwgbWFpbi5jIChwcmludF92ZXJzaW9uKToKCVVwZGF0ZWQgbWFpbGluZyBhZGRyZXNzZXMuCgoxOTk4LTA2LTA4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBBbmRyZWFzIEx1aWsgPGx1aWtAaXNhLmRlPiBwb2ludHMgb3V0IHRoYXQgdGhlCgljaGVjayBmb3IgbWFrZWZpbGUgOjogcnVsZXMgd2l0aCBjb21tYW5kcyBidXQgbm8gZGVwZW5kZW5jaWVzCgljYXVzaW5nIGEgbG9vcCB0ZXJtaW5hdGVzIGluY29ycmVjdGx5LgoKCSogbWFpbnRNYWtlZmlsZTogTWFrZSBhIHRlbXBsYXRlIGZvciBSRUFETUUuRE9TIHRvIHVwZGF0ZSB2ZXJzaW9uCgludW1iZXJzLgoKMTk5OC0wNS0zMCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IERvbid0IGZyZWUgdGhlIG1lbW9yeSBmb3IgdGhlCglkZXBlbmRlbmN5IHN0cnVjdHVyZSB3aGVuIGRyb3BwaW5nIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS4KCjE5OTgtMDUtMzAgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBkaXIuYyAoZmlsZV9leGlzdHNfcCwgZmlsZV9pbXBvc3NpYmxlX3AsIGZpbGVfaW1wb3NzaWJsZSkKCVtfX01TRE9TX18sIFdJTkRPV1MzMl06IFJldGFpbiB0cmFpbGluZyBzbGFzaCBpbiAiZDovIiwgYW5kIG1ha2UKCWRpcm5hbWUgb2YgImQ6Zm9vIiBiZSAiZDoiLgoKMTk5OC0wNS0yNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBdm9pZCBydW5uaW5nIHBhc3QgRU9TIHdoZW4gc2Nhbm5pbmcKCWZpbGUgbmFtZSBhZnRlciBgaW5jbHVkZScuCgoxOTk4LTA1LTI2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIG1ha2UudGV4aW5mbyAoRmxhdm9ycyk6IENvcnJlY3QgZGVzY3JpcHRpb24gb2YgY29uZGl0aW9uYWwKCWFzc2lnbm1lbnQsIHdoaWNoIGlzIG5vdCBlcXVpdmFsZW50IHRvIGlmbmRlZi4KCShTZXR0aW5nKTogTGlrZXdpc2UuCgoxOTk4LTA1LTI0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCk6IHN0cm5jbXAoKSBtaWdodCBiZSBpbXBsZW1lbnRlZCBhcyBhCgltYWNybywgc28gZG9uJ3QgcHV0IHByZXByb2Nlc3NvciBjb25kaXRpb25zIGluc2lkZSB0aGUgYXJndW1lbnRzCglsaXN0LgoKMTk5OC0wNS0yMyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSkgW19fTVNET1NfXywgV0lORE9XUzMyXTogU2tpcCBjb2xvbnMgaW4KCWRyaXZlIHNwZWNzIHdoZW4gcGFyc2luZyB0YXJnZXRzLCB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGVzIGFuZAoJc3RhdGljIHBhdHRlcm4gcnVsZXMuICBBIGNvbG9uIGNhbiBvbmx5IGJlIHBhcnQgb2YgZHJpdmUgc3BlYyBpZgoJaXQgaXMgYWZ0ZXIgdGhlIGZpcnN0IGxldHRlciBpbiBhIHRva2VuLgoKMTk5OC0wNS0yMiAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIHJlbWFrZS5jIChmX210aW1lKSBbX19NU0RPU19fXTogQWxsb3cgdXAgdG8gMyBzZWMgb2Ygc2tldyBiZWZvcmUKCXllbGxpbmcgYmxvb2R5IG11cmRlci4KCgkqIGRvc2J1aWxkLmJhdDogVXNlIC1ESU5DTFVERURJUj0gYW5kIC1ETElCRElSPSB3aGVyZSBhcHByb3ByaWF0ZS4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBDb21iaW5lIHRoZSBzcGVjaWFsIGZpbGUtaGFuZGxpbmcgY29kZQoJZm9yIFdJTkRPV1MzMiBhbmQgX19NU0RPU19fIGludG8gYSBzaW5nbGUgc25pcHBldC4KCShnZXRfbmV4dF9td29yZCkgW19fTVNET1NfXywgV0lORE9XUzMyXTogQWxsb3cgYSB3b3JkIHRvIGluY2x1ZGUgYQoJY29sb24gYXMgcGFydCBvZiBhIGRyaXZlIHNwZWMuCgoJKiBqb2IuYyAoYmF0Y2hfbW9kZV9zaGVsbCkgW19fTVNET1NfX106IERlY2xhcmUuCgoxOTk4LTA1LTIwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzYuOTAgcmVsZWFzZWQuCgoxOTk4LTA1LTE5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKE1ha2UgRXJyb3JzKTogQWRkZWQgYSBuZXcgYXBwZW5kaXggZGVzY3JpYmluZwoJY29tbW9uIGVycm9ycyBtYWtlIG1pZ2h0IGdlbmVyYXRlIGFuZCBob3cgdG8gcmVzb2x2ZSB0aGVtIChvciBhdAoJbGVhc3QgbW9yZSBpbmZvcm1hdGlvbiBvbiB3aGF0IHRoZXkgbWVhbikuCgoJKiBtYWludE1ha2VmaWxlIChOTUFLRUZJTEVTKTogVXNlIHRoZSBuZXcgYXV0b21ha2UgMS4zIGZlYXR1cmUKCXRvIGNyZWF0ZSBhIGRlcGVuZGVuY3kgZmlsZSB0byBjb25zdHJ1Y3QgTWFrZWZpbGUuRE9TLCBTTWFrZWZpbGUsCglhbmQgTk1ha2VmaWxlLgoJKC5kZXBfc2VnbWVudCk6IEdlbmVyYXRlIHRoZSBkZXBlbmRlbmN5IGZyYWdtZW50IGZpbGUuCgoxOTk4LTA1LTE0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLm1hbjogTWlub3IgY2hhbmdlcy4KCjE5OTgtMDUtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZ1bmN0aW9uLmMgKHBhdHRlcm5fbWF0Y2hlcyxleHBhbmRfZnVuY3Rpb24pOiBDaGFuZ2UgdmFyaWFibGVzCglhbmQgdHlwZXMgbmFtZWQgIndvcmQiIHRvIHNvbWV0aGluZyBlbHNlLCB0byBhdm9pZCBjb21waWxhdGlvbgoJcHJvYmxlbXMgb24gQ3JheSBDOTAgVW5pY29zLgoJKiB2YXJpYWJsZS5oOiBNb2RpZnkgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZS4KCjE5OTgtMDUtMTEgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCkgW1dJTkRPV1MzMl06IFR1cm4gb2ZmCgllY2hvIHdoZW4gdXNpbmcgYSBiYXRjaCBmaWxlLCBhbmQgbWFrZSBzdXJlIHRoZSBjb21tYW5kIGVuZHMgaW4gYQoJbmV3bGluZS4KCjE5OTgtMDUtMDMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAobWFrZV90cnlfY3VzdG9tcyk6IEFkZCBzb21lIGN1c3RvbXMgZmxhZ3MgaWYgdGhlCgl1c2VyIGNvbmZpZ3VyZXMgY3VzdG9tIHN1cHBvcnQuCgoJKiBqb2IuYywgcmVtb3RlLWNzdG1zLmM6IE1lcmdlIGluIGNoYW5nZXMgZm9yIGN1c3RvbSBsaWJyYXJ5LgoKCSogcmVtb3RlLXN0dWIuYzogQWRkIG9wdGlvbiB0byBzdHViIHN0YXJ0X3JlbW90ZV9qb2JfcCgpLgoKMTk5OC0wNS0wMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBJbnN0YWxsIFZQQVRIKyBoYW5kbGluZyBmb3IgYXJjaGl2ZXM7IHVzZQoJdGhlIGhuYW1lIGZpZWxkIGluc3RlYWQgb2YgdGhlIG5hbWUgZmllbGQsIGFuZCByZWhhc2ggd2hlbgoJYXBwcm9wcmlhdGUuCgoxOTk4LTA0LTMwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBydWxlLmMgKHByaW50X3J1bGVfZGF0YV9iYXNlKTogUHJpbnQgb3V0IGFueSBwYXR0ZXJuLXNwZWNpZmljCgl2YXJpYWJsZSB2YWx1ZXMgaW50byB0aGUgcnVsZXMgZGF0YWJhc2UuCgoJKiB2YXJpYWJsZS5jIChwcmludF92YXJpYWJsZV9zZXQpOiBNYWtlIHRoaXMgdmFyaWFibGUgZXh0ZXJuLCB0bwoJYmUgY2FsbGVkIGJ5IHByaW50X3J1bGVfZGF0YV9iYXNlKCkgZm9yIHBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGVzLgoKCSogbWFrZS50ZXhpbmZvIChQYXR0ZXJuLXNwZWNpZmljKTogRG9jdW1lbnQgcGF0dGVybi1zcGVjaWZpYwoJdmFyaWFibGVzLgoKMTk5OC0wNC0yOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZSk6IE1ha2Ugc3RhdGljOyBpdHMgb25seQoJY2FsbGVkIGludGVybmFsbHkuICBMb29rIHVwIHRoaXMgdGFyZ2V0IGluIHRoZSBsaXN0IG9mCglwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlcyBhbmQgaW5zZXJ0IHRoZSB2YXJpYWJsZSBzZXQgaW50byB0aGUKCXF1ZXVlIHRvIGJlIHNlYXJjaGVkLgoKCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IEFkZCBhIG5ldyBmaWVsZCB0byBob2xkIHRoZQoJcHJldmlvdXNseS1mb3VuZCBwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlIHJlZmVyZW5jZS4gIEFkZCBhIG5ldwoJZmxhZyB0byByZW1lbWJlciB3aGV0aGVyIHdlIGFscmVhZHkgc2VhcmNoZWQgZm9yIHRoaXMgZmlsZS4KCgkqIHJ1bGUuaCAoc3RydWN0IHBhdHRlcm5fdmFyKTogTmV3IHN0cnVjdHVyZSBmb3Igc3RvcmluZwoJcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZSB2YWx1ZXMuICBEZWZpbmUgbmV3IGZ1bmN0aW9uIHByb3RvdHlwZXMuCgoJKiBydWxlLmM6IE5ldyB2YXJpYWJsZXMgcGF0dGVybl92YXJzIGFuZCBsYXN0X3BhdHRlcm5fdmFyIGZvcgoJc3RvcmFnZSBhbmQgaGFuZGxpbmcgb2YgcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZSB2YWx1ZXMuCgkoY3JlYXRlX3BhdHRlcm5fdmFyKTogQ3JlYXRlIGEgbmV3IHBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgdmFsdWUKCXN0cnVjdHVyZS4KCShsb29rdXBfcGF0dGVybl92YXIpOiBUcnkgdG8gbWF0Y2ggYSB0YXJnZXQgdG8gb25lIG9mIHRoZQoJcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZSB2YWx1ZXMuCgoxOTk4LTA0LTIyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKFRhcmdldC1zcGVjaWZpYyk6IERvY3VtZW50IHRhcmdldC1zcGVjaWZpYwoJdmFyaWFibGVzLgoKMTk5OC0wNC0yMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IE1hZGUgZ2xvYmFsbHkgdmlzaWJsZS4KCShsb29rdXBfdmFyaWFibGVfaW5fc2V0KTogTmV3IGZ1bmN0aW9uOiBsaWtlIGxvb2t1cF92YXJpYWJsZSBidXQKCWxvb2sgb25seSBpbiBhIHNwZWNpZmljIHZhcmlhYmxlIHNldC4KCSh0YXJnZXRfZW52aXJvbm1lbnQpOiBVc2UgbG9va3VwX3ZhcmlhYmxlX2luX3NldCgpIHRvIGdldCB0aGUKCWNvcnJlY3QgZXhwb3J0IHJ1bGVzIGZvciBhIHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZS4KCShjcmVhdGVfbmV3X3ZhcmlhYmxlX3NldCk6IENyZWF0ZSBhIG5ldyB2YXJpYWJsZSBzZXQsIGFuZCBqdXN0CglyZXR1cm4gaXQgd2l0aG91dCBpbnN0YWxsaW5nIGl0IGFueXdoZXJlLgoJKHB1c2hfbmV3X3ZhcmlhYmxlX3Njb3BlKTogUmVpbXBsZW1lbnQgaW4gdGVybXMgb2YKCWNyZWF0ZV9uZXdfdmFyaWFibGVfc2V0LgoKCSogcmVhZC5jIChyZWNvcmRfdGFyZ2V0X3Zhcik6IExpa2UgcmVjb3JkX2ZpbGVzLCBidXQgaW5zdGVhZCBvZgoJZmlsZXMgY3JlYXRlIGEgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIHZhbHVlIGZvciBlYWNoIG9mIHRoZQoJbGlzdGVkIHRhcmdldHMuICBJbnZva2VkIGZyb20gcmVhZF9tYWtlZmlsZSgpIHdoZW4gdGhlIHRhcmdldCBsaW5lCgl0dXJucyBvdXQgdG8gYmUgYSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgYXNzaWdubWVudC4KCjE5OTgtMDQtMTkgIFBhdWwgRC4gU21pdGggPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmV3cml0ZSB0aGUgZW50aXJlIHRhcmdldCBwYXJzaW5nCglzZWN0aW9uIHRvIGltcGxlbWVudCB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGVzLiAgSW4gcGFydGljdWxhciwgd2UKCWNhbm5vdCBleHBhbmQgdGhlIGVudGlyZSBsaW5lIGFzIHNvb24gYXMgaXQncyByZWFkIGluLCBzaW5jZSB3ZQoJbWF5IHdhbnQgdG8gZXZhbHVhdGUgcGFydHMgb2YgaXQgd2l0aCBkaWZmZXJlbnQgdmFyaWFibGUgY29udGV4dHMKCWFjdGl2ZS4gIEluc3RlYWQsIHN0YXJ0IGV4cGFuZGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgdW50aWwgd2UgZmluZAoJdGhlIGA6JyAob3IgYDo6JyksIHRoZW4gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBsaW5lIHRoaXMgaXMgYW5kCgljb250aW51ZSBhcHByb3ByaWF0ZWx5LgoKCSogcmVhZC5jIChnZXRfbmV4dF9td29yZCk6IE5ldyBmdW5jdGlvbiB0byBwYXJzZSBhIG1ha2VmaWxlIGxpbmUKCWJ5ICJ3b3JkcyIsIGNvbnNpZGVyaW5nIGFuIGVudGlyZSB2YXJpYWJsZSBvciBmdW5jdGlvbiBhcyBvbmUKCXdvcmQuICBSZXR1cm4gdGhlIHR5cGUgcmVhZCBpbiwgYWxvbmcgd2l0aCBpdHMgc3RhcnRpbmcgcG9zaXRpb24KCWFuZCBsZW5ndGguCgkoZW51bSBtYWtlX3dvcmRfdHlwZSk6IFRoZSB0eXBlcyBvZiB3b3JkcyB0aGF0IGFyZSByZWNvZ25pemVkIGJ5CglnZXRfbmV4dF9td29yZCgpLgoKCSogdmFyaWFibGUuaCAoc3RydWN0IHZhcmlhYmxlKTogQWRkIGEgZmxhZyB0byBzcGVjaWZ5IGEgcGVyLXRhcmdldAoJdmFyaWFibGUuCgoJKiBleHBhbmQuYzogTWFrZSB2YXJpYWJsZV9idWZmZXIgZ2xvYmFsLiAgV2UgbmVlZCB0aGlzIGR1cmluZyB0aGUKCW5ldyBwYXJzaW5nIG9mIHRoZSBtYWtlZmlsZS4KCSh2YXJpYWJsZV9leHBhbmRfc3RyaW5nKTogTmV3IGZ1bmN0aW9uLiAgTGlrZSB2YXJpYWJsZV9leHBhbmQoKSwKCWJ1dCBzdGFydCBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRoZSBidWZmZXIsIG5vdCB0aGUgYmVnaW5uaW5nLgoJKHZhcmlhYmxlX2V4cGFuZCk6IFJld3JpdGUgdG8gc2ltcGx5IGNhbGwgdmFyaWFibGVfZXhwYW5kX3N0cmluZygpLgoKMTk5OC0wNC0xMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogQWxsb3cgdGhlIHJlYnVpbGRpbmcgbWFrZWZpbGVzCglzdGVwIHRvIHVzZSBwYXJhbGxlbCBqb2JzLiAgTm90IHN1cmUgd2h5IHRoaXMgd2FzIGRpc2FibGVkOgoJaG9wZWZ1bGx5IHdlIHdvbid0IGZpbmQgb3V0IDotLy4KCjE5OTgtMDQtMTEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAobWFpbik6IFNldCB0aGUgQ1VSRElSIG1ha2VmaWxlIHZhcmlhYmxlLgoJKiBtYWtlLnRleGluZm8gKFJlY3Vyc2lvbik6IERvY3VtZW50IGl0LgoKMTk5OC0wMy0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWlzYy5jIChtYWtlZmlsZV9mYXRhbCk6IElmIEZJTEUgaXMgbmlsLCBpbnZva2UgcGxhaW4gZmF0YWwoKS4KCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBVc2UgbmV3IGZlYXR1cmUuCgoxOTk4LTAzLTEwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBwYXNzIGluY2x1ZGVkLCByZWJ1aWx0IG1ha2VmaWxlcyB0bwoJcmUtZXhlYydkIG1ha2VzIHdpdGggLW8uICBSZW9wZW5zIGEgcG9zc2libGUgbG9vcCwgYnV0IGl0IGNhdXNlZAoJdG9vIG1hbnkgcHJvYmxlbXMuCgoxOTk4LTAzLTAyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IEltcGxlbWVudCA/PS4KCSogbWFrZS50ZXhpbmZvIChTZXR0aW5nKTogRG9jdW1lbnQgaXQuCgoxOTk4LTAyLTI4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVzZXQgZXhlY3V0ZV9ieV9zaGVsbCBhZnRlciBhbiBlbXB0eQogICAgICAgIGNvbW1hbmQsIGxpa2UgIjoiLCBoYXMgYmVlbiBzZWVuLgoKVHVlIE9jdCAwNyAxNTowMDowMCAxOTk3ICBQaGlsIEJyb29rcyA8cGhpbGxpcF9icm9va3NAaHAuY29tPgoKCSogbWFrZS5oIFtXSU5ET1dTMzJdOiBtYWtlIGNhc2Ugc2Vuc2l0aXZpdHkgY29uZmlndXJhYmxlCgkqIGRpci5jIFtXSU5ET1dTMzJdOiBtYWtlIGNhc2Ugc2Vuc2l0aXZpdHkgY29uZmlndXJhYmxlCgkqIFJFQURNRS5XMzI6IERvY3VtZW50IGNhc2Ugc2Vuc2l0aXZpdHkKCSogY29uZmlnLmFtaTogU2hhcmUgY2FzZSB3YXJwaW5nIGNvZGUgd2l0aCBXaW5kb3dzCgpNb24gT2N0ICA2IDE4OjQ4OjQ1IENEVCAxOTk3IFJvYiBUdWxsb2ggPHJvYl90dWxsb2hAZGV2LnRpdm9saS5jb20+CgoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBBZGRlZCBzdXBwb3J0IGZvciBNS1MgdG9vbGtpdCBzaGVsbAoJKHR1cm4gb24gSEFWRV9NS1NfU0hFTEwpLgoJKiByZWFkLmMgW1dJTkRPV1MzMl06IEZpeGVkIGEgcHJvYmxlbSB3aXRoIG11bHRpcGxlIHRhcmdldCBydWxlcwogCXJlcG9ydGVkIGJ5IEdpbGJlcnQgQ2F0aXBvbiAoZ2NhdGlwb25AdGliY28uY29tKS4gIElmIG11bHRpcGxlCiAJcGF0aCB0b2tlbnMgaW4gYSBydWxlIGRpZCBub3QgaGF2ZSBkcml2ZSBsZXR0ZXJzLCBtYWtlIHdvdWxkCiAJaW5jb3JyZWN0bHkgY29uY2F0ZW5hdGUgdGhlIDIgdG9rZW5zIHRvZ2V0aGVyLgoJKiBtYWluLmMvdmFyaWFibGUuYyBbV0lORE9XUzMyXTogY2hhbmdlZCBTSEVMTCBkZXRlY3Rpb24gY29kZSB0bwogCWZvbGxvdyB3aGF0IE1TRE9TIGRpZC4gSW4gYWRkaXRpb24gdG8gd2F0Y2hpbmcgZm9yIFNIRUxMIHZhcmlhYmxlCiAJdXBkYXRlcywgbWFrZSdzIG1haW4gd2lsbCBhdHRlbXB0IHRvIGRlZmF1bHQgdGhlIHZhbHVlIG9mIFNIRUxMCiAJYmVmb3JlIGFuZCBhZnRlciBtYWtlZmlsZXMgYXJlIHBhcnNlZC4KCSogam9iLmMvam9iLmggW1dJTkRPV1MzMl06IFRoZSBsYXRlc3QgY2hhbmdlcyBtYWRlIHRvIGVuYWJsZSB1c2UKIAlvZiB0aGUgR05VV0lOMzIgc2hlbGwgZnJvbSBtYWtlIGNvdWxkIGNhdXNlIG1ha2UgdG8gZmFpbCBkdWUgdG8gYQogCWNvbmN1cnJlbmN5IGNvbmRpdGlvbiBiZXR3ZWVuIHBhcmVudCBhbmQgY2hpbGQgcHJvY2Vzc2VzLiAgTWFrZQogCW5vdyBjcmVhdGVzIGEgYmF0Y2ggZmlsZSBwZXIgam9iIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHJldXNlIHRoZQogCXNhbWUgc2luZ2xldG9uIGJhdGNoIGZpbGUuCgkqIGpvYi5jL2pvYi5oL2Z1bmN0aW9uLmMvY29uZmlnLmguVzMyIFtXSU5ET1dTMzJdOiBSZW5hbWVkIG1hY3JvCiAJZnJvbSBIQVZFX0NZR05VU19HTlVXSU4zMl9UT09MUyB0byBCQVRDSF9NT0RFX09OTFlfU0hFTEwuIFJld29ya2VkCiAJbG9naWMgdG8gcmVkdWNlIGNvbXBsZXhpdHkuIFdJTkRPV1MzMiBub3cgdXNlcyB0aGUgdW5peHlfc2hlbGwKIAl2YXJpYWJsZSB0byBkZXRlY3QgQm91cm5lLXNoZWxsIGNvbXBhdGlibGUgZW52aXJvbm1lbnRzLiBUaGVyZSBpcwogCWFsc28gYSBiYXRjaF9tb2RlX3NoZWxsIHZhcmlhYmxlIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIG5vdAogCWNvbW1hbmQgbGluZXMgc2hvdWxkIGJlIGV4ZWN1dGVkIHZpYSBzY3JpcHQgZmlsZXMuIEEgV0lORE9XUzMyCiAJc3lzdGVtIHdpdGggbm8gc2guZXhlIGluc3RhbGxlZCB3b3VsZCBoYXZlIHVuaXh5X3NoZWxsIHNldCB0bwogCUZBTFNFIGFuZCBiYXRjaF9tb2RlX3NoZWxsIHNldCB0byBUUlVFLiBJZiB5b3UgaGF2ZSBhIHVuaXh5IHNoZWxsCiAJdGhhdCBkb2VzIG5vdCBiZWhhdmUgd2VsbCB3aGVuIGludm9raW5nIHRoaW5ncyB2aWEgJ3NoIC1jIHh4eCcsCiAJeW91IG1heSB3YW50IHRvIHR1cm4gb24gQkFUQ0hfTU9ERV9PTkxZX1NIRUxMIGFuZCBzZWUgaWYgdGhpbmdzCiAJaW1wcm92ZS4KCSogTk1ha2VmaWxlOiBBZGRlZCAvRCBERUJVRyB0byBkZWJ1ZyBidWlsZCBmbGFncyBzbyB0aGF0IHVuaGFuZGxlZAogCWV4Y2VwdGlvbnMgY291bGQgYmUgZGVidWdnZWQuCgpNb24gT2N0ICA2IDAwOjA0OjI1IDE5OTcgIFJvYiBUdWxsb2ggPHJvYl90dWxsb2hAZGV2LnRpdm9saS5jb20+CgoJKiBtYWluLmMgW1dJTkRPV1MzMl06IFRoZSBmdW5jdGlvbiBkZWZpbmVfdmFyaWFibGUoKSBkb2VzIG5vdAogCWhhbmRsZSBOVUxMLiBUZXN0IGJlZm9yZSBjYWxsaW5nIGl0IHRvIHNldCBQYXRoLgoJKiBtYWluLmMgW1dJTkRPV1MzMl06IFNlYXJjaCBQYXRoIGFnYWluIGFmdGVyIG1ha2VmaWxlcyBoYXZlIGJlZW4KCXBhcnNlZCB0byBkZXRlY3Qgc2guZXhlLgoJKiBqb2IuYyBbV0lORE9XUzMyXTogQWRkZWQgc3VwcG9ydCBmb3IgQ3lnbnVzIEdOVSBXSU4zMiB0b29scy4KCVRvIHVzZSwgdHVybiBvbiBIQVZFX0NZR05VU19HTlVXSU4zMl9UT09MUyBpbiBjb25maWcuaC5XMzIuCgkqIGNvbmZpZy5oLlczMjogQWRkZWQgSEFWRV9DWUdOVVNfR05VV0lOMzJfVE9PTFMgbWFjcm8uCgpTdW4gT2N0ICA1IDIyOjQzOjU5IDE5OTcgIEpvaG4gVy4gRWF0b24gPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIGdsb2IvZ2xvYi5jIChnbG9iX2luX2RpcikgW1ZNU106IEdsb2JiaW5nIHNob3VsZG4ndCBiZQoJY2FzZS1zZW5zaXRpdmUuCgkqIGpvYi5jIChjaGlsZF9leGVjdXRlX2pvYikgW1ZNU106IFVzZSBhIFZNUyAuY29tIGZpbGUgaWYgdGhlCgljb21tYW5kIGNvbnRhaW5zIGEgbmV3bGluZSAoZS5nLiBmcm9tIGEgZGVmaW5lL2VuZGRlZiBibG9jaykuCgkqIHZtc2lmeS5jICh2bXNpZnkpOiBSZXR1cm4gcmVsYXRpdmUgcGF0aG5hbWVzIHdoZXJldmVyIHBvc3NpYmxlLgoJKiB2bXNpZnkuYyAodm1zaWZ5KTogQW4gaW5wdXQgc3RyaW5nIGxpa2UgIi4uLy4uIiByZXR1cm5zICJbLS1dIi4KCldlZCBPY3QgIDEgMTU6NDU6MDkgMTk5NyAgUm9iIFR1bGxvaCA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogTk1ha2VmaWxlOiBDaGFuZ2VkIG5tYWtlIHRvICQoTUFLRSkuCgkqIHN1YnByb2MuYmF0OiBUYWtlIHRoZSBtYWtlIGNvbW1hbmQgbmFtZSBmcm9tIHRoZSBjb21tYW5kCglsaW5lLiBJZiBubyBjb21tYW5kIG5hbWUgd2FzIGdpdmVuLCBkZWZhdWx0IHRvIG5tYWtlLgoJKiBqb2IuYyBbTVNET1MsIFdJTkRPV1MzMl06IEZpeCBtZW1vcnkgc3RvbXA6IHRlbXBvcmFyeSBmaWxlIG5hbWVzCglhcmUgbm93IGFsd2F5cyBjcmVhdGVkIGluIGhlYXAgbWVtb3J5LgoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBOZXcgaW1wbGVtZW50YXRpb24gb2YgbWFrZV9jb21tYW5kX2xpbmUoKQoJd2hpY2ggaXMgbW9yZSBjb21wYXRpYmxlIHdpdGggZGlmZmVyZW50IEJvdXJuZSBzaGVsbCBpbXBsZW1lbnRhdGlvbnMuCglEZWxldGVkIHRoZSBub3cgb2Jzb2xldGUgZml4X2NvbW1hbmRfbGluZSgpIGZ1bmN0aW9uLgoJKiBtYWluLmMgW1dJTkRPV1MzMl06IEFueSBhcmJpdHJhcnkgc3BlbGxpbmcgb2YgUGF0aCBjYW4gYmUKCWRldGVjdGVkLiBNYWtlIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHNwZWNpYWwgc3BlbGxpbmcgYFBhdGgnIGlzCglpbnNlcnRlZCBpbnRvIHRoZSBlbnZpcm9ubWVudCB3aGVuIHRoZSBwYXRoIHZhcmlhYmxlIGlzIHByb3BhZ2F0ZWQKCXdpdGhpbiBpdHNlbGYgYW5kIHRvIG1ha2UncyBjaGlsZHJlbi4KCSogbWFpbi5jIFtXSU5ET1dTMzJdOiBEZXRlY3Rpb24gb2Ygc2guZXhlIHdhcyBvY2N1cnJpbmcgdG9vCglzb29uLiBUaGUgMm5kIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHNoLmV4ZSBtdXN0IGNvbWUgYWZ0ZXIKCXRoZSBjYWxsIHRvIHJlYWRfYWxsX21ha2VmaWxlcygpLgoKRnJpIFNlcCAyNiAwMToxNDoxOCAxOTk3ICA8emluc2VyQGF4cDYwMi5nc2kuZGU+CgoJKiBtYWtlZmlsZS5jb20gW1ZNU106IEZpeGVkIGRlZmluaXRpb24gb2Ygc3lzLgoJKiByZWFkbWUudm1zOiBDb21tZW50cyBvbiB3aGF0J3MgY2hhbmdlZCBsYXRlbHkuCgpGcmkgU2VwIDI2IDAxOjE0OjE4IDE5OTcgIEpvaG4gVy4gRWF0b24gPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogQWxsb3cgbWFrZSB0byBmaW5kIGZpbGVzIG5hbWVkCgkiTUFLRUZJTEUiIHdpdGggbm8gZXh0ZW5zaW9uIG9uIFZNUy4KCSogZmlsZS5jIChsb29rdXBfZmlsZSk6IExvd2VyY2FzZSBmaWxlbmFtZXMgb24gVk1TLgoKMTk5Ny0wOS0yOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZXdvcmtlZCB0YXJnZXQgZGV0ZWN0aW9uIGFnYWluOyB0aGUgb2xkCgl2ZXJzaW9uIGhhZCBhbiBvYnNjdXJlIHF1aXJrLgoKRnJpIFNlcCAxOSAwOToyMDo0OSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43Ni4xIHJlbGVhc2VkLgoKCSogTWFrZWZpbGUuYW06IEFkZCBsb2FkYXZnIGZpbGVzIHRvIGNsZWFuIHJ1bGVzLgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBSZW1vdmUgc3RhbXAtY29uZmlnOyBubyBsb25nZXIgbmVlZGVkLgoJKiBNYWtlZmlsZS5hbWkgKGRpc3RjbGVhbik6IERpdHRvLgoJKiBTTWFrZWZpbGUgKGRpc3RjbGVhbik6IERpdHRvLgoKCSogbWFpbi5jIChtYWluKTogQXJnIGNvdW50IHNob3VsZCBiZSBpbnQsIG5vdCBjaGFyISAgTWFqb3IgYnJhaW5vLgoKVHVlIFNlcCAxNiAxMDoxODoyMiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NiByZWxlYXNlZC4KClR1ZSBTZXAgIDIgMTA6MDc6MzkgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBXaGVuIHByb2Nlc3NpbmcgJChzaGVsbC4uLikKICAJdHJhbnNsYXRlIGEgQ1JMRiAoXHJcbikgc2VxdWVuY2UgYXMgd2VsbCBhcyBhIG5ld2xpbmUgKFxuKSB0byBhCiAJc3BhY2UuICBBbHNvIHJlbW92ZSBhbiBlbmRpbmcgXHJcbiBzZXF1ZW5jZS4KCSogbWFrZS50ZXhpbmZvIChTaGVsbCBGdW5jdGlvbik6IERvY3VtZW50IGl0LgoKRnJpIEF1ZyAyOSAxMjo1OTowNiAxOTk3ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogdzMyL3BhdGhzdHVmZi5jIChjb252ZXJ0X1BhdGhfdG9fd2luZG93czMyKTogRml4IHByb2JsZW0gd2hlcmUKIAlwYXRocyB3aGljaCBjb250YWluIHNpbmdsZSBjaGFyYWN0ZXIgZW50cmllcyBsaWtlIGAuJyBhcmUgbm90CiAJaGFuZGxlZCBjb3JyZWN0bHkuCgoJKiBSRUFETUUuVzMyOiBEb2N1bWVudCBwYXRoIGhhbmRsaW5nIGlzc3VlcyBvbiBXaW5kb3dzIHN5c3RlbXMuCgpGcmkgQXVnIDI5IDAyOjAxOjI3IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc1LjkzLgoKVGh1IEF1ZyAyOCAxOTozOTowNiAxOTk3ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogam9iLmMgKGV4ZWNfY29tbWFuZCkgW1dJTkRPV1MzMl06IElmIGV4ZWNfY29tbWFuZCgpIGlzIGludm9rZWQKIAlmcm9tIG1haW4oKSB0byByZS1leGVjIG1ha2UsIHRoZSBjYWxsIHRvIGV4ZWN2cCgpIHdvdWxkCiAJaW5jb3JyZWN0bHkgcmV0dXJuIGNvbnRyb2wgdG8gcGFyZW50IHNoZWxsIGJlZm9yZSB0aGUgZXhlYydlZAogCWNvbW1hbmQgY291bGQgcnVuIHRvIGNvbXBsZXRpb24uIEkgYmVsaWV2ZSB0aGlzIGlzIGEgZmVhdHVyZSBvZgogCXRoZSB3YXkgdGhhdCBleGVjdnAoKSBpcyBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgV0lORE9XUzMyIEFQSXMuIFRvCiAJYWxsZXZpYXRlIHRoZSBwcm9ibGVtLCB1c2UgdGhlIHN1cHBsaWVkIHByb2Nlc3MgbGF1bmNoIGZ1bmN0aW9uIGluCiAJdGhlIHN1Yl9wcm9jIGxpYnJhcnkgYW5kIHN1c3BlbmQgdGhlIHBhcmVudCBwcm9jZXNzIHVudGlsIHRoZQogCWNoaWxkIHByb2Nlc3MgaGFzIHJ1bi4gIFdoZW4gdGhlIGNoaWxkIGV4aXRzLCBleGl0IHRoZSBwYXJlbnQgbWFrZQogCXdpdGggdGhlIGV4aXQgY29kZSBvZiB0aGUgY2hpbGQgbWFrZS4KClRodSBBdWcgMjggMTc6MDQ6NDcgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBNYWtlZmlsZS5ET1MudGVtcGxhdGUgKGRpc3RkaXIpOiBGaXggYSBsaW5lIHRoYXQgZ290IHdyYXBwZWQgaW4KCWVtYWlsLgoKCSogTWFrZWZpbGUuYW0gKGxvYWRhdmcpOiBHaXZlIHRoZSBuZWNlc3NhcnkgY21kbGluZSBvcHRpb25zIHdoZW4KCWxpbmtpbmcgbG9hZGF2Zy4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHBzdGF0X2dldGR5bmFtaWMgZm9yIGdldGxvYWR2ZyBvbiBIUC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCkgW1ZNUywgX0FNSUdBXTogRG9uJ3QgcGVyZm9ybSBlbXB0eQoJY29tbWFuZCBvcHRpbWl6YXRpb24gb24gdGhlc2Ugc3lzdGVtczsgaXQgZG9lc24ndCBtYWtlIHNlbnNlLgoKV2VkIEF1ZyAyNyAxNzowOTozMiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS45MgoKVHVlIEF1ZyAyNiAxMTo1OToxNSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IEFkZCAnOTcgdG8gY29weXJpZ2h0IHllYXJzLgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBDaGVjayB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBiZWZvcmUgbG9va2luZwoJYXQgYSBwYXJ0aWN1bGFyIG9mZnNldC4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRXhhbWluZSB0aGUgbGFzdCBieXRlCglvZiB0aGUgcHJldmlvdXMgYXJnLCBub3QgdGhlIGJ5dGUgYWZ0ZXIgdGhhdC4KClNhdCBBdWcgMjMgMTk5NyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZTogTmV3IGZpbGUgKGNvbnZlcnRlZCB0byBNYWtlZmlsZS5ET1MgaW4KCXRoZSBkaXN0cmlidXRpb24pLgoKCSogY29uZmlndXJlLmJhdDogUmV3cml0ZSB0byB1c2UgTWFrZWZpbGUuRE9TIGluc3RlYWQgb2YgZWRpdGluZwogICAgICAgIE1ha2VmaWxlLmluLiAgQWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIGZyb20gb3V0c2lkZSBvZiB0aGUgc291cmNlCiAgICAgICAgZGlyZWN0b3J5LiAgRmFpbCBpZiB0aGUgZW52aXJvbm1lbnQgYmxvY2sgaXMgdG9vIHNtYWxsLgoKCSogY29uZmlnaC5kb3M6IFVzZSA8c3lzL2NvbmZpZy5oPi4KCgkqIFJFQURNRS5ET1M6IFVwZGF0ZSBpbnN0cnVjdGlvbnMuCgpGcmkgQXVnIDIyIDE5OTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpIFtfX01TRE9TX19dOiBEb24ndCB0ZXN0IGZvciAiL2Jpbi9zaCIKICAgICAgICBsaXRlcmFsbHksIHVzZSB2YWx1ZSBvZiB1bml4eV9zaGVsbCBpbnN0ZWFkLgoKCSogZmlsZWRlZi5oIChORVdfTVRJTUUpOiBVc2UgMSBsZXNzIHRoYW4gbWF4aW11bSBwb3NzaWJsZSB2YWx1ZSBpZgogICAgICAgIHRpbWVfdCBpcyB1bnNpZ25lZC4KClNhdCBBdWcgMTYgMDA6NTY6MTUgMTk5NyAgSm9obiBXLiBFYXRvbiAgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIHZtc2lmeS5jICh2bXNpZnksIGNhc2UgMTEpOiBBZnRlciB0cmFuc2xhdGluZyBgLi4nIGVsZW1lbnRzLCBzZXQKICAgICAgICBuc3RhdGUgdG8gTl9PUEVOIGlmIHRoZXJlIGFyZSBzdGlsbCBtb3JlIGVsZW1lbnRzIHRvIHByb2Nlc3MuCiAgICAgICAgKHZtc2lmeSwgY2FzZSAyKTogQWZ0ZXIgdHJhbnNsYXRpbmcgYGZvby9iYXInIHVwIHRvIHRoZSBzbGFzaCwKICAgICAgICBzZXQgbnN0YXRlIHRvIE5fT1BFTiwgbm90IE5fRE9ULgoKRnJpIEF1ZyAgOCAxNToxODowOSAxOTk3ICBKb2huIFcuIEVhdG9uICA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKCSogZGlyLmMgKHZtc3N0YXRfZGlyKTogTGVhdmUgbmFtZSB1bm1vZGlmaWVkIG9uIGV4aXQuCgkqIG1ha2UuaCAoUEFUSF9TRVBBUkFUT1JfQ0hBUik6IFNldCB0byBjb21tYSBmb3IgVk1TLgoJKiB2cGF0aC5jOiBGaXggY29tbWVudHMgdG8gcmVmZXIgdG8gcGF0aCBzZXBhcmF0b3IsIG5vdCBjb2xvbi4KICAgICAgICAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IEF2b2lkIFVuaXh5IHNsYXNoIGhhbmRsaW5nIGZvciBWTVMuCgpUaHUgQXVnICA3IDIyOjI0OjAzIDE5OTcgIEpvaG4gVy4gRWF0b24gIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiBhci5jIFtWTVNdOiBEb24ndCBkZWNsYXJlIGFyX21lbWJlcl90b3VjaC4KCURlbGV0ZSBWTVMgdmVyc2lvbiBvZiBhcl9tZW1iZXJfZGF0ZS4KCUVuYWJsZSBub24tVk1TIHZlcnNpb25zIG9mIGFyX21lbWJlcl9kYXRlIGFuZCBhcl9tZW1iZXJfZGF0ZV8xIGZvcgoJVk1TIHRvby4KCSogYXJzY2FuLmMgKFZNU19nZXRfbWVtYmVyX2luZm8pOiBOZXcgZnVuY3Rpb24uCgkoYXJfc2Nhbik6IFByb3ZpZGUgdmVyc2lvbiBmb3IgVk1TIHN5c3RlbXMuCgkoYXJfbmFtZV9lcXVhbCk6IFNpbXBseSBjb21wYXJlIG5hbWUgYW5kIG1lbSBvbiBWTVMgc3lzdGVtcy4KCURvbid0IGRlZmluZSBhcl9tZW1iZXJfcG9zIG9yIGFyX21lbWJlcl90b3VjaCBvbiBWTVMgc3lzdGVtcy4KCgkqIGNvbmZpZy5oLXZtcyAocGlkX3QsIHVpZF90KTogRG9uJ3QgZGVmaW5lLgoKCSogcmVtYWtlLmM6IERlbGV0ZSBkZWNsYXJhdGlvbiBvZiB2bXNfc3RhdC4KCShuYW1lX210aW1lKTogRG9uJ3QgY2FsbCB2bXNfc3RhdC4KCShmX210aW1lKSBbVk1TXTogRnVua3kgdGltZSB2YWx1ZSBtYW5pcHVsYXRpb24gbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZSk6IFtWTVNdIFVzZSBjdGltZSwgbm90IGN2dF90aW1lLgoKCSogbWFrZS5oIFtWTVNdOiBEb24ndCBkZWZpbmUgUE9TSVguCgoJKiBtYWtlZmlsZS5jb20gKGZpbGVsaXN0KTogSW5jbHVkZSBhciBhbmQgYXJzY2FuLgoJQWxzbyBpbmNsdWRlIHRoZW0gaW4gdGhlIGxpbmsgY29tbWFuZHMuCglEb24ndCBkZWZpbmUgTk9fQVJDSElWRVMgaW4gY2MgY29tbWFuZC4KCgkqIG1ha2VmaWxlLnZtcyAoQVJDSElWRVMsIEFSQ0hJVkVTX1NSQyk6IFVuY29tbWVudC4KCShkZWZpbmVzKTogRGVsZXRlIE5PX0FSQ0hJVkVTIGZyb20gbGlzdC4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogT25seSBjaGVjayB0byBzZWUgaWYgaW50ZXJtZWRpYXRlIGZpbGUgaXMKCW91dCBvZiBkYXRlIGlmIGl0IGFsc28gZXhpc3RzIChpLmUuLCBtdGltZSAhPSAodGltZV90KSAtMSkuCgoJKiB2bXNkaXIuaCAodV9sb25nLCB1X3Nob3J0KTogU2tpcCB0eXBlZGVmcyBpZiB1c2luZyBERUMgQy4KCkZyaSBKdW4gMjAgMjM6MDI6MDcgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIHczMi9zdWJwcm9jL3N1Yl9wcm9jLmM6IEdldCBXMzIgc3ViX3Byb2MgdG8gaGFuZGxlIHNoZWJhbmcKCSgjIS9iaW4vc2gpIGluIHNjcmlwdCBmaWxlcyBjb3JyZWN0bHkuCglGaXhlZCBhIGNvdXBsZSBvZiBtZW1vcnkgbGVha3MuCglGaXhlZCBzZWFyY2ggb3JkZXIgaW4gZmluZF9maWxlKCkgKHczMi9zdWJwcm9jL3N1Yl9wcm9jLmMpIHNvIHRoYXQKCWZpbGVzIHdpdGggZXh0ZW5zaW9ucyBhcmUgcHJlZmVycmVkIG92ZXIgZmlsZXMgd2l0aG91dCBleHRlbnNpb25zLgoJQWRkZWQgc2VhcmNoIGZvciBmaWxlcyB3aXRoIC5jbWQgZXh0ZW5zaW9uIHRvby4KCSogdzMyL3N1YnByb2MvbWlzYy5jIChhcnIyZW52YmxrKTogRml4ZWQgbWVtb3J5IGxlYWsuCgpNb24gQXVnIDE4IDA5OjQxOjA4IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc1LjkxCgpGcmkgQXVnIDE1IDEzOjUwOjU0IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBSZW1lbWJlciB0byBjb3VudCB0aGUgbmV3bGluZSBhZnRlciB0aGUgZW5kZWYuCgpUaHUgQXVnIDE0IDIzOjE0OjM3IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFueTogUmV3cm90ZSBidWlsZHMgdG8gdXNlIEF1dG9tYWtlIDEuMi4KCgkqIEFVVEhPUlM6IE5ldyBmaWxlLgoJKiBtYWludE1ha2VmaWxlOiBDb250YWlucyBtYWludGFpbmVyLW9ubHkgbWFrZSBzbmlwcGV0cy4KCSogR05VbWFrZWZpbGU6IFRoaXMgbm93IG9ubHkgcnVucyB0aGUgaW5pdGlhbCBhdXRvKiB0b29scy4KCSogQ09QWUlORyx0ZXhpbmZvLnRleCxta2luc3RhbGxkaXJzLGluc3RhbGwtc2g6IFJlbW92ZWQgKG9idGFpbmVkCglhdXRvbWF0aWNhbGx5IGJ5IGF1dG9tYWtlKS4KCSogY29tcGF0TWFrZWZpbGU6IFJlbW92ZWQgKG5vdCBuZWVkZWQgYW55bW9yZSkuCgkqIFJFQURNRSxidWlsZC5zaC5pbjogUmVtb3ZlZCAoYnVpbHQgZnJvbSB0ZW1wbGF0ZXMpLgoJKiBjb25maWcuaC5pbixNYWtlZmlsZS5pbjogUmVtb3ZlZCAoYnVpbHQgYnkgdG9vbHMpLgoKV2VkIEF1ZyAxMyAwMjoyMjowOCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1ha2UudGV4aW5mbzogVXBkYXRlcyBmb3IgRE9TL1dpbmRvd3MgaW5mb3JtYXRpb24gKEVsaSBaYXJldHNraWkpCgkqIFJFQURNRSxSRUFETUUuRE9TOiBEaXR0by4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xLGZfbXRpbWUpOiBGaXggR1BBVEggaGFuZGxpbmcuCgkqIHZwYXRoLmMgKGdwYXRoX3NlYXJjaCk6IERpdHRvLgoKCSogZmlsZS5jIChyZW5hbWVfZmlsZSk6IE5ldyBmdW5jdGlvbjogcmVoYXNoLCBidXQgYWxzbyByZW5hbWUgdG8KCXRoZSBoYXNobmFtZS4KCSogZmlsZWRlZi5oOiBEZWNsYXJlIGl0LgoKCSogdmFyaWFibGUuYyAobWVyZ2VfdmFyaWFibGVfc2V0X2xpc3RzKTogUmVtb3ZlIGZyZWUoKSBvZiB2YXJpYWJsZQoJc2V0OyBzaW5jZSB2YXJpb3VzIGZpbGVzIGNhbiBzaGFyZSB2YXJpYWJsZSBzZXRzIHdlIGRvbid0IHdhbnQgdG8KCWZyZWUgdGhlbSBoZXJlLgoKVHVlIEF1ZyAxMiAxMDo1MTo1NCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVxdWlyZSBhdXRvY29uZiAyLjEyCgoJKiBtYWtlLnRleGluZm86IFJlcGxhY2UgYWxsICJjZCBzdWJkaXI7ICQoTUFLRSkiIGV4YW1wbGVzIHdpdGggYQoJbW9yZSBzdHlsaXN0aWNhbGx5IGNvcnJlY3QgImNkIHN1YmRpciAmJiAkKE1BS0UpIi4KCgkqIG1haW4uYzogR2xvYmFsIHZhcmlhYmxlIGBjbG9ja19za2V3X2RldGVjdGVkJyBkZWZpbmVkLgoJKG1haW4pOiBQcmludCBmaW5hbCB3YXJuaW5nIGlmIGl0J3Mgc2V0LgoJKiBtYWtlLmg6IERlY2xhcmUgaXQuCgkqIHJlbWFrZS5jIChmX210aW1lKTogVGVzdCBhbmQgc2V0IGl0LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogQWRkIHNwZWNpYWwgb3B0aW1pemF0aW9ucyBmb3IKIAkiZG8tbm90aGluZyIgcnVsZXMsIGNvbnRhaW5pbmcganVzdCB0aGUgc2hlbGwgbm8tb3AgIjoiLiAgVGhpcyBpcwogCXVzZWZ1bCBmb3IgdGltZXN0YW1wIGZpbGVzIGFuZCBjYW4gbWFrZSBhIHJlYWwgZGlmZmVyZW5jZSBpZiB5b3UKIAloYXZlIGEgbG90IG9mIHRoZW0gKHJlcXVlc3RlZCBieSBGZXJndXMgSGVuZGVyc29uIDxmamhAY3MubXUub3ouYXU+KS4KCgkqIGNvbmZpZ3VyZS5pbixNYWtlZmlsZS5pbjogUmV3cm90ZSB0byB1c2UgdGhlIG5ldyBhdXRvY29uZgoJcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBtYWNyby4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmN0aW9uX3N0cmlwKTogU3RyaXAgbmV3bGluZXMgYXMgd2VsbCBhcyBzcGFjZXMKCWFuZCBUQUJzLgoKRnJpIEp1biAgNiAyMzo0MTowNCAxOTk3ICBSb2IgVHVsbG9oIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IERhdGVzdGFtcHMgb24gRkFULWJhc2VkIGZpbGVzIGFyZSByb3VuZGVkIHRvCglldmVuIHNlY29uZHMgd2hlbiBzdG9yZWQsIHNvIGlmIHRoZSBkYXRlIGNoZWNrIGZhaWxzIG9uIFdJTkRPV1MzMgoJIHN5c3RlbXMsIHNlZSBpZiB0aGlzICJvZmYtYnktb25lIiBlcnJvciBpcyB0aGUgcHJvYmxlbS4KCgkqIEdlbmVyYWw6IElmIHlvdXIgVFogZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBjb3JyZWN0bHkKCXRoZW4gYWxsIHlvdXIgdGltZXN0YW1wcyB3aWxsIGJlIG9mZiBieSBob3Vycy4gIFNvLCBzZXQgaXQhCgpNb24gQXByICA3IDAyOjA2OjIyIDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc1LjEKCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogRGVmaW5lICYgdXNlIHRoZSAkKEdMT0IpIHZhcmlhYmxlIHNvCgl0aGF0IGl0J3MgcmVtb3ZlZCBjb3JyZWN0bHkgZnJvbSBidWlsZC5zaC5pbiB3aGVuIGl0J3MgYnVpbHQuCgoJKiBjb25maWd1cmUuaW46IE9uIFNvbGFyaXMgd2UgY2FuIHVzZSB0aGUga3N0YXRfKigpIGZ1bmN0aW9ucyB0bwoJZ2V0IGxvYWQgYXZlcmFnZXMgd2l0aG91dCBuZWVkaW5nIHNwZWNpYWwgcGVybWlzc2lvbnMuICBBZGQgYQoJY2hlY2sgZm9yIC1sa3N0YXQgdG8gc2VlIGlmIHdlIGhhdmUgaXQuCgoJKiBnZXRsb2FkYXZnLmMgKGdldGxvYWRhdmcpOiBVc2UgSEFWRV9MSUJLU1RBVCBpbnN0ZWFkIG9mIFNVTjUgYXMKCXRoZSB0ZXN0IHRvIGVuYWJsZSBrc3RhdF9vcGVuKCksIGV0Yy4gcHJvY2Vzc2luZy4KCkZyaSBBcHIgIDQgMjA6MjE6MTggMTk5NyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIDxsb3RzPjogRml4ZXMgdG8gd29yayBpbiB0aGUgREpHUFAgRE9TIGVudmlyb25tZW50LgoKTW9uIE1hciAzMSAwMjo0Mjo1MiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6IEFkZGVkIG5ldyBmdW5jdGlvbiAkKHdvcmRsaXN0KS4KCgkqIG1ha2UudGV4aW5mbyAoRmlsZW5hbWUgRnVuY3Rpb25zKTogRG9jdW1lbnQgJCh3b3JkbGlzdCkgZnVuY3Rpb24uCgoJKiB2cGF0aC5jIChidWlsZF92cGF0aF9saXN0cyk6IENvbnN0cnVjdCB0aGUgR1BBVEggdmFyaWFibGUKCWluZm9ybWF0aW9uIGluIHRoZSBzYW1lIG1hbm5lciB3ZSB1c2VkIHRvIGNvbnN0cnVjdCBWUEFUSC4KCShncGF0aF9zZWFyY2gpOiBOZXcgZnVuY3Rpb24gdG8gc2VhcmNoIEdQQVRILgoKCSogbWFrZS5oOiBEZWNsYXJlIHRoZSBuZXcgZnVuY3Rpb24uCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IENhbGwgaXQsIGFuZCBrZWVwIFZQQVRIIGlmIGl0J3MgZm91bmQuCgoJKiBtYWtlLnRleGluZm8gKFNlYXJjaCBBbGdvcml0aG0pOiBEb2N1bWVudCBHUEFUSCB2YXJpYWJsZS4KClN1biBNYXIgMzAgMjA6NTc6MTYgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWluLmMgKGhhbmRsZV9ub25fc3dpdGNoX2FyZ3VtZW50KTogRGVmaW5lZCB0aGUgTUFLRUNNREdPQUxTCgl2YXJpYWJsZSB0byBjb250YWluIHRoZSB1c2VyIG9wdGlvbnMgcGFzc2VkIGluIG9uIHRoZSBjbWQgbGluZS4KCgkqIG1ha2UudGV4aW5mbyAoR29hbHMpOiBEb2N1bWVudCBNQUtFQ01ER09BTFMgdmFyaWFibGUuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IFByaW50IGEgd2FybmluZyBpZiB3ZSBkZXRlY3QgYSBjbG9jayBza2V3CgllcnJvciwgcmF0aGVyIHRoYW4gZmFpbGluZy4KCgkqIG1haW4uYyAobWFpbik6IElmIHdlIHJlYnVpbGQgYW55IG1ha2VmaWxlcyBhbmQgbmVlZCB0byByZS1leGVjLAoJYWRkICItbzxta2ZpbGU+IiBvcHRpb25zIGZvciBlYWNoIG1ha2VmaWxlIHJlYnVpbHQgdG8gYXZvaWQKCWluZmluaXRlIGxvb3BpbmcuCgpGcmkgTWFyIDI4IDE1OjI2OjA1IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBUcmFjayB3aGV0aGVyIHRoZSBsYXN0CglhcmcgaW4gdGhlIGNtZCBzdHJpbmcgd2FzIGVtcHR5IG9yIG5vdCAoUm9sYW5kKS4KCShjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogSWYgdGhlIHNoZWxsIGxpbmUgaXMgZW1wdHksCglkb24ndCBkbyBhbnl0aGluZyAoUm9sYW5kKS4KCgkqIGdsb2IvZ2xvYi5oLGdsb2IvZ2xvYi5jLGdsb2IvZm5tYXRjaC5jLGdsb2IvZm5tYXRjaC5oOiBJbnN0YWxsCgl0aGUgbGF0ZXN0IGNoYW5nZXMgZnJvbSB0aGUgR0xJQkMgdmVyc2lvbiBvZiBnbG9iIChVbHJpY2ggRHJlcHBlcikuCgoJKiBnZXRsb2FkYXZnLmMsbWFrZS1zdGRzLnRleGk6IE5ldyB2ZXJzaW9uIChSb2xhbmQpLgoKCSogKEFMTCk6IENoYW5nZWQgV0lOMzIgdG8gVzMyIG9yIFdJTkRPV1MzMiAoUk1TKS4KCk1vbiBNYXIgMjQgMTU6MzM6MzQgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIFJFQURNRS5XMzI6IERlc2NyaWJlIHByZWxpbWluYXJ5IEZBVCBzdXBwb3J0LgoKCSogYnVpbGRfdzMyLmJhdDogVXNlIGEgdmFyaWFibGUgZm9yIHRoZSBmaW5hbCBleGUgbmFtZS4KCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSk6IFczMjogRmluZCB0aGUgZmlsZXN5c3RlbSB0eXBlLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVzMyOiBmb3IgRkFUIGZpbGVzeXN0ZW1zLCBhbHdheXMKCXJlaGFzaCBzaW5jZSBGQVQgZG9lc24ndCBjaGFuZ2UgZGlyZWN0b3J5IG10aW1lIG9uIGNoYW5nZS4KCgkqIG1haW4uYyAoaGFuZGxlX3J1bnRpbWVfZXhjZXB0aW9ucyk6IFczMjogQWRkIGFuCiAJVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyIHNvIHRoYXQgd2hlbiBtYWtlIGJvbWJzIGR1ZSB0byBeQyBvciBhCiAJYnVnLCBpdCB3b24ndCBjYXVzZSBhIEdVSSByZXF1ZXN0b3IgdG8gcG9wIHVwIHVubGVzcyBkZWJ1ZyBpcwogCXR1cm5lZCBvbi4KCShtYWluKTogQ2FsbCBpdC4KCk1vbiBNYXIgMjQgMDA6NTc6MzQgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZy5oLmluLCBjb25maWcuYW1pLCBjb25maWcuaC12bXMsIGNvbmZpZy5oLnczMjoKIAlDaGVjayBmb3IgbWVtbW92ZSgpIGZ1bmN0aW9uLgoKCSogbWFrZS5oIChiY29weSk6IElmIG1lbW1vdmUoKSBhdmFpbGFibGUsIGRlZmluZSBiY29weSgpIHRvIHVzZSBpdC4KCU90aGVyd2lzZSBqdXN0IHVzZSBiY29weSgpLiAgRG9uJ3QgdXNlIG1lbWNweSgpOyBpdCdzIG5vdCBndWFyYW50ZWVkCgl0byBoYW5kbGUgb3ZlcmxhcHBpbmcgbW92ZXMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGaXggc29tZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcwoJKHJlcG9ydGVkIGJ5IFB1cmlmeSkuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFVzZSBiY29weSgpIG5vdAoJc3RyY3B5KCk7IHN0cmNweSgpIGlzbid0IGd1YXJhbnRlZWQgdG8gaGFuZGxlIG92ZXJsYXBwaW5nIG1vdmVzLgoKCSogTWFrZWZpbGUuaW46IENoYW5nZSBpbnN0YWxsLWluZm8gb3B0aW9uIGBgLS1pbmZvZGlyJycgdG8KCWBgLS1pbmZvLWRpcicnIGZvciB1c2Ugd2l0aCBuZXcgdGV4aW5mby4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6ICQoYmFzZW5hbWUpIGFuZCAkKHN1ZmZpeCkgc2hvdWxkCglvbmx5IHNlYXJjaCBmb3Igc3VmZml4ZXMgYXMgZmFyIGJhY2sgYXMgdGhlIGxhc3QgZGlyZWN0b3J5IChlLmcuLAoJb25seSB0aGUgZmluYWwgZmlsZW5hbWUgaW4gdGhlIHBhdGgpLgoKU3VuIE1hciAyMyAwMDoxMzowNSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1ha2UudGV4aW5mbzogQWRkIEBkaXJjYXRlZ29yeS9AZGlyZW50cnkgaW5mb3JtYXRpb24uCgkoVG9wKTogUmVtb3ZlIHByZXZpb3VzIHJlZmVyZW5jZSB0byAoZGlyKSAoZnJvbSBSTVMpLgoJKFN0YXRpYyBVc2FnZSk6IEFkZCAiYWxsOiIgcnVsZSB0byBleGFtcGxlLgoJKEF1dG9tYXRpYyBEZXBlbmRlbmNpZXMpOiBmaXggLmQgZmlsZSBjcmVhdGlvbiBleGFtcGxlLgoKCSogSW5zdGFsbCBWUEFUSCsgcGF0Y2g6CgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogQWRkIGluIGhuYW1lIGZpZWxkIHRvIHN0b3JlIHRoZSBoYXNoZWQKICAgICAgICBmaWxlbmFtZSwgYW5kIGEgZmxhZyB0byByZW1lbWJlciBpZiB3ZSdyZSB1c2luZyB0aGUgdnBhdGggZmlsZW5hbWUKCW9yIG5vdC4gIFJlbmFtZWQgYSBmZXcgZnVuY3Rpb25zIGZvciBtb3JlIGNsYXJpdHkuCgoJKiBmaWxlLmMgKGxvb2t1cF9maWxlLGVudGVyX2ZpbGUsZmlsZV9oYXNoX2VudGVyKTogU3RvcmUgZmlsZW5hbWVzCglpbiB0aGUgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGVpciAiaGFzaCBuYW1lIi4gIFdlIGNhbiBjaGFuZ2UgdGhpcwoJd2hpbGUga2VlcGluZyB0aGUgb3JpZ2luYWwgdGFyZ2V0IGluICJuYW1lIi4KCShyZWhhc2hfZmlsZSk6IFJlbmFtZWQgZnJvbSAicmVuYW1lX2ZpbGUiIHRvIGJlIG1vcmUgYWNjdXJhdGUuCglDaGFuZ2VzIHRoZSBoYXNoIG5hbWUsIGJ1dCBub3QgdGhlIHRhcmdldCBuYW1lLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBNb2RpZnkgLWQgb3V0cHV0IGZvciBtb3JlIGRldGFpbGVkCiAJVlBBVEggaW5mby4gIElmIHdlIGRvbid0IG5lZWQgdG8gcmVidWlsZCwgdXNlIHRoZSBWUEFUSCBuYW1lLgoJKGZfbXRpbWUpOiBEb24ndCBzZWFyY2ggZm9yIHZwYXRoIGlmIHdlJ3JlIGlnbm9yaW5nIGl0LiAgQ2FsbAogCXJlbmFtZWQgZnVuY3Rpb24gcmVoYXNoX2ZpbGUuICBDYWxsIG5hbWVfbXRpbWUgaW5zdGVhZCBvZgogCWZpbGVfbXRpbWUsIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBzaW5jZSB0aGUgZmlsZSB3YXNuJ3QKIAlhY3R1YWxseSByZW5hbWVkLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBpZiB3ZSBmaW5kIGFuIGltcGxpY2l0IGZpbGUgaW4KCVZQQVRILCBzYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG5vdCB0aGUgVlBBVEggbmFtZS4KCgkqIG1ha2UudGV4aW5mbyAoRGlyZWN0b3J5IFNlYXJjaCk6IEFkZCBhIHNlY3Rpb24gb24gdGhlIG5ldyBWUEFUSAoJZnVuY3Rpb25hbGl0eS4KClN1biBEZWMgIDEgMTg6MzY6MDQgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBkaXIuYyAoZmlsZV9leGlzdHNfcCwgZmlsZV9pbXBvc3NpYmxlLCBmaWxlX2ltcG9zc2libGVfcCk6IElmCglkaXJuYW1lIGlzIGVtcHR5IHJlcGxhY2UgaXQgYnkgdGhlIG5hbWUgb2YgdGhlIHJvb3QgZGlyZWN0b3J5LgoJTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrICh5ZXQpIGZvciBXMzIsIEFtaWdhLCBvciBWTVMuCgpUdWUgT2N0IDA4IDEzOjU3OjAzIDE5OTYgIFJvYiBUdWxsb2ggIDx0dWxsb2hAdGl2b2xpLmNvbT4KCgkqIG1haW4uYyAobWFpbik6IFczMiBidWcgZml4IGZvciBQQVRIIHZhcnMuCgpUdWUgU2VwIDE3IDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogZmlsZWRlZi5oIChORVdfTVRJTUUpOiBEb24ndCBhc3N1bWUgdGhhdCB0aW1lX3QgaXMgYSBzaWduZWQKIAkzMi1iaXQgcXVhbnRpdHkuCgoJKiBtYWtlLmg6IChDSEFSX0JJVCwgSU5URUdFUl9UWVBFX1NJR05FRCwgSU5URUdFUl9UWVBFX01BWElNVU0sCiAJSU5URUdFUl9UWVBFX01JTklNVU0pOiBOZXcgbWFjcm9zLgoKVHVlIEF1ZyAyNyAwMTowNjozNCAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBiYWFscGVyYXppbS5mcm9iLmNvbT4KCgkqIFZlcnNpb24gMy43NSByZWxlYXNlZC4KCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IFByaW50IG91dCBidWctcmVwb3J0aW5nIGFkZHJlc3MuCgpNb24gQXVnIDI2IDE5OjU1OjQ3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGJhYWxwZXJhemltLmZyb2IuY29tPgoKCSogbWFpbi5jIChwcmludF9kYXRhX2Jhc2UpOiBEb24ndCBkZWNsYXJlIGN0aW1lOyBoZWFkZXJzIGRvIGl0IGZvciB1cwogCWFscmVhZHkuCgpTdW4gSnVsIDI4IDE1OjM3OjA5IDE5OTYgIFJvYiBUdWxsb2ggKHR1bGxvaEB0aXZvbGkuY29tKQoKCSogdzMyL3BhdGhzdHVmZi5jOiBUdXJuZWQgY29udmVydF92cGF0aF90b193MzIoKSBpbnRvIGEKCXJlYWwgZnVuY3Rpb24uIFRoaXMgd2FzIGRvbmUgc28gdGhhdCBWUEFUSCBjb3VsZCBjb250YWluCgl3aGl0ZSBzcGFjZSBzZXBhcmF0ZWQgcGF0aG5hbWVzLiBQbGVhc2Ugbm90ZSB0aGF0IGRpcmVjdG9yeQoJcGF0aHMgKGluIFZQQVRIL3ZwYXRoIGNvbnRleHQpIGNvbnRhaW5pbmcgd2hpdGUgc3BhY2UgYXJlIG5vdAoJc3VwcG9ydGVkIChqdXN0IGFzIHRoZXkgYXJlIG5vdCB1bmRlciBVbml4KS4gU2VlIFJFQURNRS5XMzIKCWZvciBzdWdnZXN0aW9ucy4KCgkqIHczMi9pbmNsdWRlL3BhdGhzdHVmZi5oOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBuZXcKCWZ1bmN0aW9uIGNvbnZlcnRfdnBhdGhfdG9fdzMyLiBEZWxldGVkIG1hY3JvIGZvciBzYW1lLgoKCSogUkVBRE1FLlczMjogQWRkZWQgc29tZSBub3RlcyBhYm91dCB3aHkgSSBjaG9zZSBub3QgdG8gdHJ5CglhbmQgc3VwcG9ydCBwYXRobmFtZXMgd2hpY2ggY29udGFpbiB3aGl0ZSBzcGFjZSBhbmQgc29tZQoJd29ya2Fyb3VuZCBzdWdnZXN0aW9ucy4KClRodSBKdWwgMjUgMTk6NTM6MzEgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIEdOVW1ha2VmaWxlIChta2RlcC1ub2xpYik6IFVzZSAtTU0gb3B0aW9uIHVuY29uZGl0aW9uYWxseS4KCgkqIFZlcnNpb24gMy43NC43LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQmFjayB1cCBQIHRvIHBvaW50IGF0IG51bGwgdGVybWluYXRvcgoJd2hlbiBraWxsaW5nIGZpbmFsIHNwYWNlIGFuZCBkYXNoIGJlZm9yZSBzZXR0aW5nIE1GTEFHUy4KCglGcm9tIFJvYmVydCBIb2VobmUgPHJvYmVydC5ob2VobmVATWF0aGVtYXRpay5UVS1DaGVtbml0ei5ERT46CgkqIGRpci5jIFtfX01TRE9TX18gJiYgREpHUFAgPiAxXTogSW5jbHVkZSA8bGliYy9kb3Npby5oPiBhbmQgZGVmaW4KCWBfX29wZW5kaXJfZmxhZ3MnIGluaXRpYWxpemVkIHRvIDAuCgkoZG9zaWZ5KSBbX19NU0RPU19fICYmIERKR1BQID4gMV06IFJldHVybiBuYW1lIHVuY2hhbmdlZCBpZiBfVVNFX0xGTi4KCShmaW5kX2RpcmVjdG9yeSkgW19fTVNET1NfXyAmJiBESkdQUCA+IDFdOiBJZiBfVVNFX0xHTiwgc2V0CglfX29wZW5kaXJfZmxhZ3MgdG8gX19PUEVORElSX1BSRVNFUlZFX0NBU0UuCgoJKiB2bXNmdW5jdGlvbnMuYyAodm1zX3N0YXQpOiBgc3lzJGRhc3NnbiAoRGV2Q2hhbik7JyBhZGRlZCBieSBra2FlbXBmLgoKCSogR05VbWFrZWZpbGUgKHczMmZpbGVzKTogQWRkIE5NYWtlZmlsZS4KCgkqIE5NYWtlZmlsZSAoTERGTEFHU19kZWJ1Zyk6IFZhbHVlIGZpeGVkIGJ5IHR1bGxvaC4KClNhdCBKdWwgMjAgMTI6MzI6MTAgMTk5NiAgS2xhdXMgS+RtcGYgKGtrYWVtcGZAcHJvZ2lzLmRlKQoKCSogcmVtYWtlLmMgKGZfbXRpbWUpIFtWTVNdOiBBZGQgbWlzc2luZyBgaWYnIGNvbmRpdGlvbmFsIGZvciBmdXR1cmUKCW1vZHRpbWUgY2hlY2suCgkqIGNvbmZpZy5oLXZtcywgbWFrZWZpbGUudm1zLCByZWFkbWUudm1zLCB2bXNpZnkuYzogVXBkYXRlIGFkZHJlc3MuCgpTYXQgSnVsIDIwIDA1OjI5OjQzIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IFJlcXVpcmUgYXV0b2NvbmYgMi4xMCBvciBsYXRlci4KCkZyaSBKdWwgMTkgMTY6NTc6MjcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC42LgoKCSogR05VbWFrZWZpbGUgKHczMmZpbGVzKTogTmV3IHZhcmlhYmxlLgoJKGRpc3RmaWxlcyk6IEFkZCBpdC4KCSogdzMyOiBVcGRhdGVkIGJ5IFJvYiBUdWxsb2guCgoJKiBtYWtlZmlsZS52bXMgKExPQURMSUJFUyk6IEZpeCB0eXBvLgoKU3VuIEp1bCAxNCAxMjo1OToyNyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBGaXggdXAgI2Vsc2UsICNlbmRpZnMuCgoJKiBjb25maWdoLmRvczogRGVmaW5lIEhBVkVfRElSRU5UX0ggaW5zdGVhZCBvZiBESVJFTlQuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IERvbid0IGNvbXBhcmUgTVRJTUUgdG8gTk9XIGlmIE1USU1FID09IC0xLgoKCSogVmVyc2lvbiAzLjc0LjUuCgoJKiBtYWluLmMgKG1haW4pOiBFeGl0IHdpdGggc3RhdHVzIDIgd2hlbiB1cGRhdGVfZ29hbF9jaGFpbiByZXR1cm5zIDIuCgpTYXQgSnVuIDIyIDE0OjU2OjA1IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciBfc3lzX3NpZ2xpc3QuCgkqIG1ha2UuaCBbSEFWRV9fU1lTX1NJR0xJU1RdOiBEb24ndCB0ZXN0IHRoaXM7IGp1c3QgcHVudCBpZiB0aGVyZSBpcwoJbm8gc3Ryc2lnbmFsIG9yIHN5c19zaWdsaXN0LgoKCSogcmVhZC5jIChjb25kaXRpb25hbF9saW5lKTogU3RyaXAgd3MgaW4gYGlmZXEgKGEgLCBiKScgc28gaXQgaXMgdGhlCglzYW1lIGFzIGBpZmVxIChhLCBiKScuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERvbid0IGNhbGwgZGllIGlmIGhhbmRsaW5nX2ZhdGFsX3NpZ25hbC4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogQWxsb3cgcmVuYW1pbmcgOjogdG8gOiB3aGVuIGxhdHRlciBpcwoJbm9uLXRhcmdldCwgb3IgOiB0byA6OiB3aGVuIGZvcm1lciBpcyBub24tdGFyZ2V0LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogQ2FsbCBibG9ja19zaWdzLgoJKGJsb2NrX3NpZ3MpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2Ygc3RhcnRfam9iX2NvbW1hbmQuCgkocmVhcF9jaGlsZHJlbik6IEJsb2NrIGZhdGFsIHNpZ25hbHMgYXJvdW5kIHJlbW92aW5nIGRlYWQgY2hpbGQgZnJvbQoJY2hhaW4gYW5kIGFkanVzdGluZyBqb2Jfc2xvdHNfdXNlZC4KCSogam9iLmg6IERlY2xhcmUgYmxvY2tfc2lncy4KCgkqIHJlbW90ZS1zdHViLmMgKHJlbW90ZV9zZXR1cCwgcmVtb3RlX2NsZWFudXApOiBOZXcgKGVtcHR5KSBmdW5jdGlvbnMuCgkqIG1haW4uYyAobWFpbik6IENhbGwgcmVtb3RlX3NldHVwLgoJKGRpZSk6IENhbGwgcmVtb3RlX2NsZWFudXAuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IFF1aWVzY2VudCB2YWx1ZSBvZiBzaGVsbF9mdW5jdGlvbl9waWQgaXMKCXplcm8sIG5vdCAtMS4KCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IEFkZCA5NiB0byBjb3B5cmlnaHQgeWVhcnMuCgpTYXQgSnVuIDE1IDIwOjMwOjAxIDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVhZC5jIChmaW5kX2NoYXJfdW5xdW90ZSk6IEF2b2lkIGNhbGxpbmcgc3RybGVuIG9uIGV2ZXJ5IGNhbGwKCWp1c3QgdG8gdGhyb3cgYXdheSB0aGUgdmFsdWUgbW9zdCBvZiB0aGUgdGltZS4KClN1biBKdW4gIDIgMTI6MjQ6MDEgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFByZXBlbmQgJy0nIHRvIEFSR1ZbMV0gaWYgaXQgY29udGFpbnMKCW5vICc9JywgcmVnYXJkbGVzcyBvZiBBUkdDLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBFbGlkZSBsZWFkaW5nICctJyBmcm9tIE1BS0VGTEFHUyB2YWx1ZSBpZiBmaXJzdAoJd29yZCBpcyBzaG9ydCBvcHRpb24sIHJlZ2FyZGxlc3Mgb2YgV09SRFMuCgpXZWQgTWF5IDIyIDE3OjI0OjUxIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlZmlsZS52bXM6IFNldCBMT0FETElCRVMuCgkqIG1ha2VmaWxlLmNvbSAobGlua191c2luZ19saWJyYXJ5KTogRml4IHR5cG8uCgpXZWQgTWF5IDE1IDE3OjM3OjI2IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBkaXIuYyAocHJpbnRfZGlyX2RhdGFfYmFzZSk6IFVzZSAlbGQgZGV2IGFuZCBpbm8gYW5kIGNhc3QgdGhlbSB0bwoJbG9uZy4KCldlZCBNYXkgMTUgMTA6MTQ6MTQgQ0RUIDE5OTYgIFJvYiBUdWxsb2ggIDx0dWxsb2hAdGl2b2xpLmNvbT4KCgkqIGRpci5jOiBXMzIgZG9lcyBub3Qgc3VwcG9ydCBpbm9kZS4gRm9yIG5vdywgZnVsbHkgcXVhbGlmaWVkCglwYXRobmFtZSBhbG9uZyB3aXRoIHN0X210aW1lIHdpbGwgYmUga2V5cyBmb3IgZmlsZXMuCglGaXhlZCBwcm9ibGVtIHdoZXJlIHZwYXRoIGNhbiBiZSBjb25mdXNlZCB3aGVuIGZpbGVzCglhcmUgYWRkZWQgdG8gYSBkaXJlY3RvcnkgYWZ0ZXIgdGhlIGRpcmVjdG9yeSBoYXMgYWxyZWFkeSBiZWVuCglyZWFkIGluLiBUaGUgY29kZSBub3cgYXR0ZW1wdHMgdG8gcmVyZWFkIHRoZSBkaXJlY3RvcnkgaWYgaXQKCWRpc2NvdmVycyB0aGF0IHRoZSBkYXRlc3RhbXAgb24gdGhlIGRpcmVjdG9yeSBoYXMgY2hhbmdlZCBzaW5jZQoJaXQgd2FzIGNhY2hlZCBieSBtYWtlLiBUaGlzIHByb2JsZW0gb25seSBzZWVtcyB0byBvY2N1ciBvbiBXMzIKCXJpZ2h0IG5vdyBzbyBpdCBpcyBsdW1wZWQgdW5kZXIgcG9ydCAjaWZkZWYgV0lORE9XUzMyLgoKCSogZnVuY3Rpb24uYzogVzMyOiBjYWxsIHN1YnByb2MgbGlicmFyeSAoQ3JlYXRlUHJvY2VzcygpKSBpbnN0ZWFkIG9mCglmb3JrL2V4ZWMuCgoJKiBqb2IuYzogVzMyOiBBZGRlZCB0aGUgY29kZSB0byBkbyBmb3JrL2V4ZWMvd2FpdHBpZCBzdHlsZSBwcm9jZXNzaW5nCglvbiBXMzIgc3lzdGVtcyB2aWEgY2FsbHMgdG8gc3VicHJvYyBsaWJyYXJ5LgoKCSogbWFpbi5jOiBXMzI6IFNldmVyYWwgdGhpbmdzIGFkZGVkIGhlcmUuIEZpcnN0LCB0aGVyZSBpcyBjb2RlCglmb3IgZGVhbGluZyB3aXRoIFBBVEggYW5kIFNIRUxMIGRlZmF1bHRzLiBNYWtlIHRyaWVzIHRvIGZpZ3VyZQoJb3V0IGlmIHRoZSB1c2VyIGhhcyAlUEFUSCUgc2V0IGluIHRoZSBlbnZpcm9ubWVudCBhbmQgc2V0cyBpdCB0bwoJJVBhdGglIGlmIGl0IGlzIG5vdCBzZXQgYWxyZWFkeS4gTWFrZSBhbHNvIGxvb2tzIHRvIHNlZSBpZiBzaC5leGUKCWlzIGFueXdoZXJlIHRvIGJlIGZvdW5kLiBDb2RlIHBhdGggdGhyb3VnaCBqb2IuYyB3aWxsIGNoYW5nZQoJYmFzZWQgb24gZXhpc3RlbmNlIG9mIGEgd29ya2luZyBCb3VybmUgc2hlbGwuIFRoZSBjaGVja2luZyBmb3IKCWRlZmF1bHQgc2hlbGwgaXMgZG9uZSB0d2ljZTogb25jZSBiZWZvcmUgbWFrZWZpbGVzIGFyZSByZWFkIGluCglhbmQgYWdhaW4gYWZ0ZXIuIEZhbGwgYmFjayB0byBNU0RPUyBzdHlsZSBleGVjdXRpb24gbW9kZSBpZiBubyBzaC5leGUKCWlzIGZvdW5kLiBBbHNvIGFkZGVkIHNvbWUgZGVidWcgc3VwcG9ydCB0aGF0IGFsbG93cyB1c2VyIHRvIHBhdXNlIG1ha2UKCXdpdGggLUQgc3dpdGNoIGFuZCBhdHRhY2ggYSBkZWJ1Z2dlci4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IKCWRlYnVnZ2luZyByZWN1cnNpdmUgY2FsbHMgdG8gbWFrZSB3aGVyZSBwcm9ibGVtcyBhcHBlYXIgb25seSBpbiB0aGUKCXN1Yi1tYWtlLgoKCSogbWFrZS5oOiBXMzI6IEEgZmV3IG1hY3JvcyBhbmQgaGVhZGVyIGZpbGVzIGZvciBXMzIgc3VwcG9ydC4KCgkqIG1pc2MuYzogVzMyOiBBZGRlZCBhIGZ1bmN0aW9uIGVuZF9vZl90b2tlbl93MzIoKSB0byBhc3Npc3QKCWluIHBhcnNpbmcgY29kZSBpbiByZWFkLmMuCgoJKiByZWFkLmM6IFczMjogRml4ZXMgc2ltaWxhciB0byBNU0RPUyB3aGljaCBhbGxvdyBjb2xvbiB0bwoJYXBwZWFyIGluIGZpbGVuYW1lcy4gVXNlIG9mIGNvbG9uIGluIGZpbGVuYW1lcyB3b3VsZCBvdGhlcndpc2UKCWNvbmZ1c2UgbWFrZS4KCgkqIHJlbWFrZS5jOiBXMzI6IEFkZGVkIGluY2x1ZGUgb2YgaW8uaCB0byBlbGltaW5hdGUgY29tcGlsZXIKCXdhcm5pbmdzLiBBZGRlZCBzb21lIGNvZGUgdG8gZGVmYXVsdCBMSUJESVIgaWYgaXQgaXMgbm90IHNldAoJb24gVzMyLgoKCSogdmFyaWFibGUuYzogVzMyOiBBZGRlZCBzdXBwb3J0IGZvciBkZXRlY3RpbmcgUGF0aC9QQVRICglhbmQgY29udmVydGluZyB0aGVtIHRvIHNlbWljb2xvbiBzZXBhcmF0ZWQgbGlzdHMgZm9yIG1ha2UncwoJaW50ZXJuYWwgdXNlLiBOZXcgZnVuY3Rpb24gc3luY19QYXRoX2Vudmlyb25tZW50KCkKCXdoaWNoIGlzIGNhbGxlZCBpbiBqb2IuYyBhbmQgZnVuY3Rpb24uYyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcKCXByb2Nlc3MuIENhbGxlciBtdXN0IHNldCBQYXRoIGluIGVudmlyb25tZW50IHNpbmNlIHdlIGRvbid0CgloYXZlIGZvcmsoKSB0byBkbyB0aGlzIGZvciB1cy4KCgkqIHZwYXRoLmM6IFczMjogQWRkZWQgZGV0ZWN0aW9uIGZvciBmaWxlbmFtZXMgY29udGFpbmluZwoJZm9yd2FyZCBvciBiYWNrd2FyZCBzbGFzaGVzLgoKCSogTk1ha2VmaWxlOiBXMzI6IFZpc3VhbCBDIGNvbXBhdGlibGUgbWFrZWZpbGUgZm9yIHVzZSB3aXRoIG5tYWtlLgoJVXNlIHRoaXMgdG8gYnVpbGQgR05VIG1ha2UgdGhlIGZpcnN0IHRpbWUgb24gV2luZG93cyBOVCBvciBXaW5kb3dzIDk1LgoKCSogUkVBRE1FLlczMjogVzMyOiBDb250YWlucyBzb21lIGhlbHBmdWwgbm90ZXMuCgoJKiBidWlsZF93MzIuYmF0OiBXMzI6IElmIHlvdSBkb24ndCBsaWtlIG5tYWtlLCB1c2UgdGhpcyB0aGUgZmlyc3QKCXRpbWUgeW91IGJ1aWxkIEdOVSBtYWtlIG9uIFdpbmRvd3MgTlQgb3IgV2luZG93cyA5NS4KCgkqIGNvbmZpZy5oLlczMjogVzMyIHZlcnNpb24gb2YgY29uZmlnLmgKCgkqIHN1YnByb2MuYmF0OiBXMzI6IEEgYmF0IGZpbGUgdXNlZCB0byBidWlsZCB0aGUKCXN1YnByb2MgbGlicmFyeSBmcm9tIHRoZSB0b3AtbGV2ZWwgTk1ha2VmaWxlLiBOZWVkZWQgYmVjYXVzZQoJV0luZG93cyA5NSAobm1ha2UpIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGNkIGluIGEgbWFrZSBydWxlLgoKCSogdzMyL2luY2x1ZGUvZGlyZW50LmgKCSogdzMyL2NvbXBhdC9kaXJlbnQuYzogVzMyOiBvcGVuZGlyLCByZWFkZGlyLCBjbG9zZWRpciwgZXRjLgoKCSogdzMyL2luY2x1ZGUvcGF0aHN0dWZmLmg6IFczMjogdXNlZCBieSBmaWxlcyBuZWVkZWQgZnVuY3Rpb25zCglkZWZpbmVkIGluIHBhdGhzdHVmZi5jIChwcm90b3R5cGVzKS4KCgkqIHczMi9pbmNsdWRlL3N1Yl9wcm9jLmg6IFczMjogcHJvdG90eXBlcyBmb3Igc3VicHJvYy5saWIgZnVuY3Rpb25zLgoKCSogdzMyL2luY2x1ZGUvdzMyZXJyLmg6IFczMjogcHJvdG90eXBlcyBmb3IgdzMyZXJyLmMuCgoJKiB3MzIvcGF0aHN0dWZmLmM6IFczMjogRmlsZSBhbmQgUGF0aC9QYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zLgoKCSogdzMyL3N1YnByb2MvYnVpbGQuYmF0OiBXMzI6IGJ1aWxkIHNjcmlwdCBmb3Igc3VicHJvYyBsaWJyYXJ5CglpZiB5b3UgZG9uJ3Qgd2lzaCB0byB1c2Ugbm1ha2UuCgoJKiB3MzIvc3VicHJvYy9OTWFrZWZpbGU6IFczMjogVmlzdWFsIEMgY29tcGF0aWJsZSBtYWtlZmlsZSBmb3IgdXNlCgl3aXRoIG5tYWtlLiBVc2VkIHRvIGJ1aWxkIHN1YnByb2MgbGlicmFyeS4KCgkqIHczMi9zdWJwcm9jL21pc2MuYzogVzMyOiBzdWJwcm9jIGxpYnJhcnkgc3VwcG9ydCBjb2RlCgkqIHczMi9zdWJwcm9jL3Byb2MuaDogVzMyOiBzdWJwcm9jIGxpYnJhcnkgc3VwcG9ydCBjb2RlCgkqIHczMi9zdWJwcm9jL3N1Yl9wcm9jLmM6IFczMjogc3VicHJvYyBsaWJyYXJ5IHNvdXJjZSBjb2RlCgkqIHczMi9zdWJwcm9jL3czMmVyci5jOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzdXBwb3J0IGNvZGUKCk1vbiBNYXkgMTMgMTQ6Mzc6NDIgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC40LgoKCSogR05VbWFrZWZpbGUgKHZtc2ZpbGVzKTogRml4IHR5cG8uCgoJKiBHTlVtYWtlZmlsZSAoYW1pZ2FmaWxlcyk6IEFkZCBhbWlnYS5oLgoKU3VuIE1heSAxMiAxOToxOTo0MyAxOTk2ICBBYXJvbiBEaWd1bGxhICAgPGRpZ3VsbGFAZmgta29uc3RhbnouZGU+CgoJKiBkaXIuYzogTmV3IGZ1bmN0aW9uOiBhbWlnYWZ5KCkgdG8gZm9sZCBmaWxlbmFtZXMKCUNoYW5nZXMgSEFTSCgpIHRvIEhBU0hJKCkgdG8gZm9sZCBmaWxlbmFtZXMgb24gQW1pZ2EuCglTdHJpbmdjb21wYXJlcyB1c2Ugc3RyaWVxKCkgaW5zdGVhZCBvZiBzdHJlcSgpCglUaGUgY3VycmVudCBkaXJlY3Rvcnkgb24gQW1pZ2EgaXMgIiIgaW5zdGVhZCBvZiAiLiIKCSogZmlsZS5jOiBMaWtld2lzZS4KCgkqIGFtaWdhLmM6IE5ldyBmdW5jdGlvbiB3aWxkY2FyZF9leHBhbnNpb24oKS4gQWxsb3dzIHRvIHVzZQoJQW1pZ2Egd2lsZGNhcmRzIHdpdGggJCh3aWxkY2FyZCApCgoJKiBhbWlnYS5oOiBOZXcgZmlsZS4gUHJvdG90eXBlcyBmb3IgYW1pZ2EuYwoKCSogZnVuY3Rpb24uYzogVXNlIHNwZWNpYWwgZnVuY3Rpb24gd2lsZGNhcmRfZXhwYW5zaW9uKCkgZm9yCgkkKHdpbGRjYXJkICkgdG8gYWxsb3cgQW1pZ2Egd2lsZGNhcmRzCglUaGUgY3VycmVudCBkaXJlY3Rvcnkgb24gQW1pZ2EgaXMgIiIgaW5zdGVhZCBvZiAiLiIKCgkqIGpvYi5jOiBObyBQaXBlcyBvbiBBbWlnYSwgdG9vCgkobG9hZF90b29faGlnaCkgTmVpdGhlciBvbiBBbWlnYQoJRU5WIHZhcmlhYmxlIG9uIEFtaWdhIGFyZSBpbiBhIHNwZWNpYWwgZGlyZWN0b3J5IGFuZCBhcmUgbm90CglwYXNzZWQgYXMgdGhpcmQgYXJndW1lbnQgdG8gbWFpbigpLgoKCSogam9iLmg6IE5vIGVudnAgb24gQW1pZ2EKCgkqIG1ha2UuaDogQWRkZWQgSEFTSEkoKS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBIQVNIKCkgYnV0IGNvbnZlcnRzCglpdCdzIHNlY29uZCBwYXJhbWV0ZXIgdG8gbG93ZXJjYXNlIG9uIEFtaWdhIHRvIGZvbGQgZmlsZW5hbWVzLgoKCSogbWFpbi5jOiAobWFpbiksIHZhcmlhYmxlLmMgQ2hhbmdlZCBoYW5kbGluZyBvZiBFTlYtdmFycy4gTWFrZQoJc3RvcmVzIG5vdyB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyBvbmx5IGFuZCByZWFkcyB0aGVpciBjb250ZW50cwoJd2hlbiB0aGV5IGFyZSBhY2Nlc3NlZCB0byByZWZsZWN0IHRoYXQgdGhlc2UgdmFyaWFibGVzIGFyZSByZWFsbHkKCWdsb2JhbCAoaS5lLiwgdGhleSBDQU4gY2hhbmdlIFdISUxFIG1ha2UgcnVucyAhKSBUaGlzIGhhbmRsaW5nIGlzCgltYWRlIGluIGxvb2t1cF92YXJpYWJsZSgpCgoJKiBNYWtlZmlsZS5hbWk6IHJlbmFtZWQgZmlsZS5oIHRvIGZpbGVkZXAuaAoJVXBkYXRlZCBkZXBlbmRlbmNpZXMKCgkqIHJlYWQuYzogImZpbmRfc2VtaWNvbG9uIiBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgYnV0IG5ldmVyIGRlZmluZWQuCglObyBkaWZmZXJlbmNlIGJldHdlZW4gTWFrZWZpbGUgYW5kIG1ha2VmaWxlIG9uIEFtaWdhOyBhZGRlZAoJU01ha2VmaWxlIHRvICpkZWZhdWx0X21ha2VmaWxlc1tdLgoJKHJlYWRfbWFrZWZpbGUpIFNBUy9DIHdhbnQncyB0d29fY29sb24gYW5kIHBhdHRlcm5fcGVyY2VudCBiZSBzZXQKCWJlZm9yZSB1c2UuCglUaGUgY3VycmVudCBkaXJlY3Rvcnkgb24gQW1pZ2EgaXMgIiIgaW5zdGVhZCBvZiAiLiIKCVN0cmFuZ2UgI2VuZGlmIG1vdmVkLgoKCSogUkVBRE1FLkFtaWdhOiB1cGRhdGVkIGZlYXR1cmUgbGlzdAoKCSogU01ha2VmaWxlOiBVcGRhdGVkIGRlcGVuZGVuY2llcwoKCSogdmFyaWFibGUuYzogSGFuZGxpbmcgb2YgRU5WIHZhcmlhYmxlIGhhcHBlbnMgaW5zaWRlIGxvb2t1cF92YXJpYWJsZSgpCgpTYXQgTWF5IDExIDE3OjU4OjMyIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENvdW50IHBhcmVucyBpbiBsaHMgdmFyaWFibGUKCXJlZnMgdG8gYXZvaWQgc2VlaW5nID0vOj0vKz0gaW5zaWRlIGEgcmVmLgoKVGh1IE1heSAgOSAxMzo1NDo0OSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbU0lHUVVJVF06IE1ha2UgU0lHUVVJVCBjaGVjawoJY29uZGl0aW9uYWwuCgoJKiBtYWluLmMgKG1haW4pOiBVc2UgdW5zaWduZWQgZm9yIGZyZWFkIHJldHVybi4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBVc2UgYGludCcgZm9yIGNoYXIgYXJnIHRvIGF2b2lkIHdpZGVuaW5nCgljb25mbGljdCBpc3N1ZXMuCgkqIGRlcC5oOiBGaXggcHJvdG90eXBlLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKSBbX0FNSUdBXTogRml4IHNvbWUgdHlwb3MuCgkocGF0c3Vic3RfZXhwYW5kKTogTWFrZSBsZW4gdmFycyB1bnNpZ25lZC4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgQW1pZ2FET1Mgc3VwcG9ydCBmaWxlcy4KCShkaXN0ZmlsZXMpOiBBZGQgJChhbWlnYWZpbGVzKS4KCShhbWlnYWZpbGVzKTogTmV3IHZhcmlhYmxlLgoKVGh1IE5vdiAgNyAxMDoxODoxNiAxOTk1ICBBYXJvbiBEaWd1bGxhICAgPGRpZ3VsbGFAZmgta29uc3RhbnouZGU+CgoJKiBBZGRlZCBBbWlnYSBzdXBwb3J0IGluIGNvbW1hbmRzLmMsIGRpci5jLCBmdW5jdGlvbi5jLAoJam9iLmMsIG1haW4uYywgbWFrZS5oLCByZWFkLmMsIHJlbWFrZS5jCgkqIGNvbW1hbmRzLmM6IEFtaWdhIGhhcyBuZWl0aGVyIFNJR0hVUCBub3IgU0lHUVVJVAoJKiBkaXIuYzogQW1pZ2EgaGFzIGZpbGVuYW1lcyB3aXRoIFVwcGVyLSBhbmQgTG93ZXJjYXNlLAoJYnV0ICJGaWxlTmFtZSIgaXMgdGhlIHNhbWUgYXMgImZpbGVuYW1lIi4gQWRkZWQgc3RyaWVxKCkKCXdoaWNoIGlzIHVzZSB0byBjb21wYXJlIGZpbGVuYW1lcy4gVGhpcyBpcyBsaWtlIHN0cmVxKCkKCW9uIGFsbCBvdGhlciBzeXN0ZW1zLiBBbHNvIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMKCSIuIiB1bmRlciBBbWlnYURPUy4KCSogZnVuY3Rpb24uYzogT24gQW1pZ2EsIHRoZSBlbnZpcm9ubWVudCBpcyBub3QgcGFzc2VkIGFzIGVudnAsCgl0aGVyZSBhcmUgbm8gcGlwZXMgYW5kIEFtaWdhIGNhbid0IGZvcmsuIFVzZSBteSBvd24gZnVuY3Rpb24KCXRvIGNyZWF0ZSBhIG5ldyBjaGlsZC4KCSogam9iLmM6IGRlZmF1bHRfc2hlbGwgaXMgIiIgKFRoZSBzeXN0ZW0gYXV0b21hdGljYWxseSBjaG9vc2VzCglhIHNoZWxsIGZvciBtZSkuIEhhdmUgdG8gdXNlIHRoZSBzYW1lIHdvcmthcm91bmQgYXMgTVNET1MgZm9yCglydW5uaW5nIGJhdGNoIGNvbW1hbmRzLiBBZGRlZCBIQVZFX1NZU19QQVJBTV9ILiBOT0ZJTEUgaXNuJ3QKCWtub3duIG9uIEFtaWdhLiBDbG9uZWQgY29kZSB0byBydW4gY2hpbGRyZW4gZnJvbSBNU0RPUy4gT3duCgl2ZXJzaW9uIG9mIHNoX2NoYXJzW10gYW5kIHNoX2NtZHNbXS4gTm8gZHVwMigpIG9yIGR1cCgpIG9uIEFtaWdhLgoJKiBtYWluLmM6IEZvcmNlIHN0YWNrIHRvIDIwMDAwIGJ5dGVzLiBSZWFkIGVudmlyb25tZW50IGZyb20gRU5WOgoJZGV2aWNlLiBPbiBBbWlnYSwgZXhlY19jb21tYW5kKCkgZG9lcyByZXR1cm4sIHNvIEkgZXhpdCgpCglhZnRlcndhcmRzLgoJKiBtYWtlLmg6IEFkZGVkIHN0cmllcSgpIHRvIGNvbXBhcmUgZmlsZW5hbWVzLgoJKiByZWFkLmM6IEFtaWdhIG5lZWRzIHNwZWNpYWwgZXh0ZW5zaW9uIHRvIGhhdmUgcGFzc3dkLiBPbmx5CglvbmUgaW5jbHVkZS1kaXIuICJNYWtlZmlsZSIgYW5kICJtYWtlZmlsZSIgYXJlIHRoZSBzYW1lLgoJQWRkZWQgIlNNYWtlZmlsZSIuICBBZGRlZCBzcGVjaWFsIGNvZGUgdG8gaGFuZGxlIGRldmljZSBuYW1lcyAoeHh4OikKCWFuZCAiLi8iIGluIHJ1bGVzLgoJKiByZW1ha2UuYzogT25seSBvbmUgbGliLWRpci4gQW1pZ2EgbGluay1saWJzIGFyZSBuYW1lZCAiJXMubGliIgoJaW5zdGVhZCBvZiAibGliJXMuYSIuCgkqIG1haW4uYywgcnVsZS5jLCB2YXJpYWJsZS5jOiBBdm9pZCBmbG9hdHMgYXQgYWxsIGNvc3RzLgoJKiB2cGF0aC5jOiBHZXQgcmlkIG9mIGFzIG1hbnkgYWxsb2NhKClzIGFzIHBvc3NpYmxlLgoKVGh1IE1heSAgOSAxMzoyMDo0MyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogR3JvayBgc2luY2x1ZGUnIGFzIGFsaWFzIGZvciBgLWluY2x1ZGUnLgoKV2VkIE1hciAyMCAwOTo1MjoyNyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogR05VbWFrZWZpbGUgKHZtc2ZpbGVzKTogTmV3IHZhcmlhYmxlLgoJKGRpc3RmaWxlcyk6IEluY2x1ZGUgJCh2bXNmaWxlcykuCgpUdWUgTWFyIDE5IDIwOjIxOjM0IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJTWVyZ2VkIFZNUyBwb3J0IGZyb20gS2xhdXMgS2FlbXBmIDxra2FlbXBmQGRpZHltdXMucm1pLmRlPi4KCSogbWFrZS5oIChQQVJBTVMpOiBOZXcgbWFjcm8uCgkqIGNvbmZpZy5oLXZtczogTmV3IGZpbGUuCgkqIG1ha2VmaWxlLmNvbTogTmV3IGZpbGUuCgkqIG1ha2VmaWxlLnZtczogTmV3IGZpbGUuCgkqIHJlYWRtZS52bXM6IE5ldyBmaWxlLgoJKiB2bXNkaXIuaDogTmV3IGZpbGUuCgkqIHZtc2Z1bmN0aW9ucy5jOiBOZXcgZmlsZS4KCSogdm1zaWZ5LmM6IE5ldyBmaWxlLgoJKiBmaWxlLmg6IFJlbmFtZWQgdG8gZmlsZWRlZi5oIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggVk1TIHN5c3RlbSBoZHIuCgkqIGFyLmM6IEFkZGVkIHByb3RvdHlwZXMgYW5kIGNoYW5nZXMgZm9yIFZNUy4KCSogY29tbWFuZHMuYzogTGlrZXdpc2UuCgkqIGNvbW1hbmRzLmg6IExpa2V3aXNlLgoJKiBkZWZhdWx0LmM6IExpa2V3aXNlLgoJKiBkZXAuaDogTGlrZXdpc2UuCgkqIGRpci5jOiBMaWtld2lzZS4KCSogZXhwYW5kLmM6IExpa2V3aXNlLgoJKiBmaWxlLmM6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jOiBMaWtld2lzZS4KCSogaW1wbGljaXQuYzogTGlrZXdpc2UuCgkqIGpvYi5jOiBMaWtld2lzZS4KCSogam9iLmg6IExpa2V3aXNlLgoJKiBtYWluLmM6IExpa2V3aXNlLgoJKiBtYWtlLmg6IExpa2V3aXNlLgoJKiBtaXNjLmM6IExpa2V3aXNlLgoJKiByZWFkLmM6IExpa2V3aXNlLgoJKiByZW1ha2UuYzogTGlrZXdpc2UuCgkqIHJlbW90ZS1zdHViLmM6IExpa2V3aXNlLgoJKiBydWxlLmM6IExpa2V3aXNlLgoJKiBydWxlLmg6IExpa2V3aXNlLgoJKiB2YXJpYWJsZS5jOiBMaWtld2lzZS4KCSogdmFyaWFibGUuaDogTGlrZXdpc2UuCgkqIHZwYXRoLmM6IExpa2V3aXNlLgoJKiBjb21wYXRNYWtlZmlsZSAoc3Jjcyk6IFJlbmFtZSBmaWxlLmggdG8gZmlsZWRlZi5oLgoKU2F0IEF1ZyAxOSAyMzoxMTowMCAxOTk1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogRm9yIGEgc2Vjb25kYXJ5IGZpbGUsIHRyeSBpbXBsaWNpdCBhbmQKCWRlZmF1bHQgcnVsZXMgaWYgYXBwcm9wcmlhdGUuCgpXZWQgQXVnICAyIDA0OjI5OjQyIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBJZiBhbiBpbnRlcm1lZGlhdGUgZmlsZSBleGlzdHMsCglkbyBjb25zaWRlciBpdHMgYWN0dWFsIGRhdGUuCgpTdW4gSnVsIDMwIDAwOjQ5OjUzIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuaCAoc3RydWN0IGZpbGUpOiBOZXcgZmllbGQgYHNlY29uZGFyeScuCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogQ2hlY2sgZm9yIC5JTlRFUk1FRElBVEUgYW5kIC5TRUNPTkRBUlkuCgkocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBEb24ndCBkZWxldGUgLlNFQ09OREFSWSBmaWxlcy4KClNhdCBNYXIgIDIgMTY6MjY6NTIgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNzKTogQWRkIGdldG9wdC5oOyBwcmVwZW5kICQoc3JjZGlyKS8gdG8gZ2V0b3B0Ki4KCkZyaSBNYXIgIDEgMTI6MDQ6NDcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4zLgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBNb3ZlIGZ1dHVyZSBtb2R0aW1lIGNoZWNrIGJlZm9yZSBGSUxFIGlzCgljbG9iYmVyZWQgYnkgOjogbG9vcC4KCgkqIGRpci5jOiBVc2UgY2Fub25pY2FsIGNvZGUgZnJvbSBhdXRvY29uZiBtYW51YWwgZm9yIGRpcmVudCBpbmNsdWRlLgoJW19EX05BTUxFTl06IFJlZGVmaW5lIE5BTUxFTiB1c2luZyB0aGlzLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVXNlIE5BTUxFTiBtYWNyby4KCShyZWFkX2RpcnN0cmVhbSkgW19ESVJFTlRfSEFWRV9EX05BTUxFTl06IE9ubHkgc2V0IGRfbmFtbGVuICNpZiB0aGlzLgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2guCgpXZWQgRmViIDI4IDAzOjU2OjIwIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBSZW1vdmUgKyBwcmVmaXggZnJvbSBSQ1MgY21kcy4KCShkZWZhdWx0X3ZhcmlhYmxlcyk6IFB1dCArIHByZWZpeCBpbiAkKENIRUNLT1VULHYpIHZhbHVlIGluc3RlYWQuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IENoZWNrIGZvciBmdXR1cmUgdGltZXN0YW1wczsgZ2l2ZSBlcnJvciBhbmQgbWFyawoJZmlsZSBhcyAiZmFpbGVkIHRvIHVwZGF0ZSIuCgpGcmkgSmFuIDEyIDE4OjA5OjM2IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYzogRG9uJ3QgZGVjbGFyZSB1bmJsb2NrX3NpZ3M7IGpvYi5oIGFscmVhZHkgZG9lcy4KClNhdCBKYW4gIDYgMTY6MjQ6NDQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGFjY29uZmlnLmggKEhBVkVfU1lTQ09ORl9PUEVOX01BWCk6ICN1bmRlZiByZW1vdmVkLgoKCSogam9iLmMgKE5HUk9VUFNfTUFYKTogRG9uJ3QgdHJ5IHRvIGRlZmluZSB0aGlzIG1hY3JvLgoKRnJpIERlYyAyMiAxODo0NDo0NCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKEdFVE9QVCwgR0VUT1BUX1NSQywgR0xPQik6IFZhcmlhYmxlcyByZW1vdmVkLgoJKG9ianMsIHNyY3MpOiBJbmNsdWRlIHRoZWlyIHZhbHVlcyBoZXJlIGluc3RlYWQgb2YgcmVmZXJlbmNlcy4KClRodSBEZWMgMTQgMDY6MjE6MjkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4yLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBDYWxsIHVuYmxvY2tfc2lncyBhZnRlciBzdGFydF9qb2JfY29tbWFuZC4KClRodSBEZWMgMTQgMDc6MjI6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZHVhbGl0eS5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChkaXJfc2V0dXBfZ2xvYik6IERvbid0IHVzZSBsc3RhdDsgZ2xvYiBuZXZlciBjYWxscyBpdCBhbnl3YXkuCglBdm9pZCAmIGJlZm9yZSBmdW5jdGlvbiBuYW1lcyB0byBzaWxlbmNlIGJvZ3VzIHN1bm9zNCBjb21waWxlci4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGNoZWNrIGZvciBgc3lzY29uZiAoX1NDX09QRU5fTUFYKScuCgpUdWUgRGVjIDEyIDAwOjQ4OjQyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuMS4KCgkqIGRpci5jIChyZWFkX2RpcnN0cmVhbSk6IEZpeCBicmFpbm86IGZpbGwgaW4gdGhlIGJ1ZmZlciB3aGVuIG5vdAoJcmVhbGxvY2F0aW5nIGl0IQoKTW9uIERlYyAxMSAyMjoyNjoxNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWlzYy5jIChjb2xsYXBzZV9jb250aW51YXRpb25zKTogRml4IHNraXBwaW5nIG9mIHRyYWlsaW5nIFxzIHNvCglpdCBjYW4gbmV2ZXIgZGVyZWZlcmVuY2UgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgoKCSogcmVhZC5jIChmaW5kX3NlbWljb2xvbik6IEZ1bmN0aW9uIHJlbW92ZWQuCgkocmVhZF9tYWtlZmlsZSk6IERvbid0IHVzZSBmaW5kX3NlbWljb2xvbiBvciByZW1vdmVfY29tbWVudHMgZm9yCglydWxlIGxpbmVzLiAgVXNlIGZpbmRfY2hhcl91bnF1b3RlIGRpcmVjdGx5IGFuZCBoYW5kbGUgcXVvdGVkIGNvbW1lbnRzCglwcm9wZXJseS4KCgkqIGRlZmF1bHQuYzogUmVtb3ZlIGFsbCBbTV9YRU5JWF0gY29kZS4KCgkqIGRpci5jIFtIQVZFX0RfTkFNTEVOXTogRGVmaW5lIHRoaXMgZm9yIF9fR05VX0xJQlJBUllfXyA+IDEuCgkoRF9OQU1MRU4pOiBNYWNybyByZW1vdmVkLgoJKEZBS0VfRElSX0VOVFJZKTogTmV3IG1hY3JvLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVGVzdCBIQVZFX0RfTkFNTEVOIGluc3RlYWQgb2YgdXNpbmcKCURfTkFNTEVOLgoJKHJlYWRfZGlyc3RyZWFtKTogUmV0dXJuIGEgc3RydWN0IGRpcmVudCAqIGZvciBuZXcgZ2xvYiBpbnRlcmZhY2UuCgkoaW5pdF9kaXIpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGRpcl9zZXR1cF9nbG9iKTogTmV3IGZ1bmN0aW9uLgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBjYWxsIGluaXRfZGlyLgoJKiByZWFkLmMgKG11bHRpX2dsb2IpOiBDYWxsIGRpcl9zZXR1cF9nbG9iIG9uIG91ciBnbG9iX3QgYW5kIHVzZQoJR0xPQl9BTFRESVJGVU5DIGZsYWcuCgoJKiBtaXNjLmMgKHNhZmVfc3RhdCk6IEZ1bmN0aW9uIHJlbW92ZWQuCgkqIHJlYWQuYywgY29tbWFuZHMuYywgcmVtYWtlLmMsIHZwYXRoLmM6IFVzZSBwbGFpbiBzdGF0IGluc3RlYWQgb2YKCXNhZmVfc3RhdC4KClNhdCBOb3YgMjUgMjA6MzU6MTggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIFtIQVZFX1VOSU9OX1dBSVRdOiBJbmNsdWRlIHN5cy93YWl0LmguCgoJKiBtYWluLmMgKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IE1hZGUgZ2xvYmFsLgoJUHJpbnQgZW50ZXJpbmcgbXNnIG9ubHkgb25jZS4KCSogbWFrZS5oIChsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBEZWNsYXJlIGl0LgoJKiBtaXNjLmMgKG1lc3NhZ2UpOiBUYWtlIG5ldyBhcmcgUFJFRklYLiAgUHJpbnQgIm1ha2U6ICIgb25seSBpZgoJbm9uemVyby4gIENhbGwgbG9nX3dvcmtpbmdfZGlyZWN0b3J5LgoJKiByZW1ha2UuYzogUGFzcyBuZXcgYXJnIGluIGBtZXNzYWdlJyBjYWxscy4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUGFzcyBuZXcgYXJnIHRvIGBtZXNzYWdlJzsgZml4CglpbnZlcnRlZCB0ZXN0IGluIHRoYXQgY2FsbC4KClR1ZSBOb3YgMjEgMTk6MDE6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFVzZSBgbWVzc2FnZScgdG8gcHJpbnQgdGhlIGNvbW1hbmQsCglhbmQgY2FsbCBpdCB3aXRoIG51bGwgaWYgdGhlIGNvbW1hbmQgaXMgc2lsZW50LgoJKiByZW1ha2UuYyAodG91Y2hfZmlsZSk6IFVzZSBtZXNzYWdlIGluc3RlYWQgb2YgcHJpbnRmLgoKVHVlIE9jdCAxMCAxNDo1OTozMCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IEJhcmYgaWYgTkFNRSBpcyAiIi4KClNhdCBTZXAgIDkgMDY6MzM6MjAgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAd2hpei1iYW5nLmdudS5haS5taXQuZWR1PgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IElnbm9yZSB1bmxpbmsgZmFpbHVyZSBpZiBpdCBpcyBFTk9FTlQuCgpUaHUgQXVnIDE3IDE1OjA4OjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciBnZXRkdGFibGVzaXplLgoJKiBqb2IuYyAoZ2V0ZHRhYmxlc2l6ZSk6IFJlbW92ZSBkZWNscyBhbmQgbWFjcm9zLgoKVGh1IEF1ZyAxMCAxOToxMDowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogT21pdCBjb21tYW5kIGxpbmUgdmFyaWFibGUKIAlkZWZpbml0aW9ucyBmcm9tIE1GTEFHUyB2YWx1ZS4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKSBbQUlBTUFHXTogQ2hlY2sgZm9yIHplcm8gTUVNQkVSX09GRlNFVCwKIAlpbmRpY2F0aW5nIGEgdmFsaWQsIGJ1dCBlbXB0eSwgYXJjaGl2ZS4KCk1vbiBBdWcgIDcgMTU6NDA6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGVfcCk6IENvcnJlY3RseSByZXNldCBGSUxFTkFNRSB0byBuYW1lCiAJd2l0aGluIGRpcmVjdG9yeSBiZWZvcmUgaGFzaCBzZWFyY2guCgoJKiBqb2IuYyAoY2hpbGRfZXJyb3IpOiBEbyBub3RoaW5nIGlmIElHTk9SRUQgdW5kZXIgLXMuCgoJKiBqb2IuYyAoZXhlY19jb21tYW5kKTogQ29ycmVjdGx5IHVzZSBBUkdWWzBdIGZvciBzY3JpcHQgbmFtZSB3aGVuCiAJcnVubmluZyBzaGVsbCBkaXJlY3RseS4KClR1ZSBBdWcgIDEgMTQ6Mzk6MTQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChjaGlsZF9leGVjdXRlX2pvYik6IENsb3NlIFNURElOX0ZEIGFuZCBTVERPVVRfRkQgYWZ0ZXIKIAlkdXAnaW5nIGZyb20gdGhlbS4gIERvbid0IHRyeSB0byBjbG9zZSBhbGwgZXhjZXNzIGRlc2NyaXB0b3JzOwogCWdldGR0YWJsZXNpemUgbWlnaHQgcmV0dXJuIGEgaHVnZSB2YWx1ZS4gIEFueSBvcGVuIGRlc2NyaXB0b3JzIGluCiAJdGhlIHBhcmVudCBzaG91bGQgaGF2ZSBGRF9DTE9FWEVDIHNldC4KCShzdGFydF9qb2JfY29tbWFuZCk6IFNldCBGRF9DTE9FWEVDIGZsYWcgb24gQkFEX1NURElOIGRlc2NyaXB0b3IuCgpUdWUgSnVuIDIwIDAzOjQ3OjE1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IFByb3Blcmx5IGFwcGVuZCBkZWZhdWx0IG1ha2VmaWxlcwogCXRvIHRoZSBlbmQgb2YgdGhlIGByZWFkX21ha2VmaWxlcycgY2hhaW4uCgpGcmkgTWF5IDE5IDE2OjM2OjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQgcmVsZWFzZWQuCgpXZWQgTWF5IDEwIDE3OjQzOjM0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzMuMy4KClR1ZSBNYXkgIDkgMTc6MTU6MjMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpL21ha2UuaW5mbyk6IE1ha2Ugc3VyZSAkJGRpciBpcyBzZXQgaW4KIAlpbnN0YWxsLWluZm8gY21kLgoKV2VkIE1heSAgMyAxNTo1NjowNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChwcmludF9maWxlKTogR3JvayB1cGRhdGVfc3RhdHVzIG9mIDEgZm9yIC1xLgoKVGh1IEFwciAyNyAxMjozOTozNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjczLjIuCgpXZWQgQXByIDI2IDE3OjE1OjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogRml4IGludmVydGVkIHRlc3QgdG8gYmFpbCB1bmRlcgogCS1uIGZvciBzaWduYWwgY2FzZS4gIEJhaWwgdW5kZXIgLXEgb3IgLXQuCglTa2lwIGZpbGVzIHdpdGggdXBkYXRlX3N0YXR1cz09LTEuCgoJKiBqb2IuYyAoam9iX25leHRfY29tbWFuZCk6IFNraXAgZW1wdHkgbGluZXMuCgkobmV3X2pvYik6IERvbid0IHRlc3QgdGhlIHJldHVybiBvZiBqb2JfbmV4dF9jb21tYW5kLgoJSnVzdCBsZXQgc3RhcnRfd2FpdGluZ19qb2IgaGFuZGxlIHRoZSBjYXNlIG9mIGVtcHR5IGNvbW1hbmRzLgoKV2VkIEFwciAxOSAwMzoyNTo1NCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZnVuY3Rpb24uYyBbX19NU0RPU19fXTogSW5jbHVkZSA8ZmNudGwuaD4uICBGcm9tIERKIERlbG9yaWUuCgoJKiBWZXJzaW9uIDMuNzMuMS4KClNhdCBBcHIgIDggMTQ6NTM6MjQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFNldCBGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8KIAlpZiBpdCdzIC0xLgoKV2VkIEFwciAgNSAwMDoyMDoyNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjczIHJlbGVhc2VkLgoKVHVlIE1hciAyOCAxMzoyNTo0NiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogRml4ZWQgYnJhaW5vIGluIGFzc2VydC4KCgkqIFZlcnNpb24gMy43Mi4xMy4KCk1vbiBNYXIgMjcgMDU6Mjk6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYzogQXZvaWQgc3RyaW5nIGluIGFzc2VydCBleHByZXNzaW9uLiAgU29tZSBzeXN0ZW1zIGFyZSBicm9rZW4uCgpGcmkgTWFyIDI0IDAwOjMyOjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBIYW5kbGUgMSBhbmQgMiByZXR1cm5zIGZyb20gdXBkYXRlX2dvYWxfY2hhaW4KIAltYWtlZmlsZSBydW4gcHJvcGVybHkuCgoJKiBWZXJzaW9uIDMuNzIuMTIuCgoJKiBtYWluLmMgKGhhbmRsZV9ub25fc3dpdGNoX2FyZ3VtZW50KTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCiAJZGVjb2RlX3N3aXRjaGVzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFNldCBvcHRpbmQgdG8gMCB0byByZWluaXRpYWxpemUgZ2V0b3B0LCBub3QgdG8gMS4KCVdoZW4gZ2V0b3B0X2xvbmcgcmV0dXJucyBFT0YsIGJyZWFrIHRoZSBsb29wIGFuZCBoYW5kbGUgcmVtYWluaW5nIGFyZ3MKIAl3aXRoIGEgc2ltcGxlIHNlY29uZCBsb29wLgoKCSogcmVtYWtlLmMgKHJlbWFrZV9maWxlKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMiBpbnN0ZWFkIG9mIDEgZm9yCiAJbm8gcnVsZSB0byBtYWtlLiAgTWVudGlvbiBwYXJlbnQgKGRlcGVuZGVudCkgaW4gZXJyb3IgbWVzc2FnZS4KCSh1cGRhdGVfZmlsZV8xKTogSGFuZGxlIEZJTEUtPnVwZGF0ZV9zdGF0dXMgPT0gMiBpbiAtZCBwcmludG91dC4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kLCByZWFwX2NoaWxkcmVuKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMgogCWluc3RlYWQgb2YgMSBmb3IgZmFpbGVkIGNvbW1hbmRzLgoKVHVlIE1hciAyMSAxNjoyMzozOCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHNlYXJjaF9wYXRoKTogRnVuY3Rpb24gcmVtb3ZlZCAod2FzIGFscmVhZHkgI2lmIDAnZCBvdXQpLgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSBBQ19UWVBFX0dFVEdST1VQUzsgbm90aGluZyBuZWVkcyBpdCBhbnkgbW9yZS4KCkZyaSBNYXIgMTcgMTU6NTc6NDAgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5iYXQ6IFdyaXRlIEBDUFBGTEFHU0AgdHJhbnNsYXRpb24uCgpNb24gTWFyIDEzIDAwOjQ1OjU5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogUmVhcnJhbmdlZCBgbChhIGIpJyAtPiBgbChhKSBsKGIpJyBsb29wCiAJdG8gbm90IHNraXAgdGhlIGVsdCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYGwoLi4uJy4KCkZyaSBNYXIgMTAgMTM6NTY6NDkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4xMS4KCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBNYWtlIHNlY29uZCBhcmcgYSBzdHJpbmcgb2Ygc3RvcAogCWNoYXJzIGluc3RlYWQgb2YgYSBzaW5nbGUgc3RvcCBjaGFyLiAgU3RvcCB3aGVuIGFueSBjaGFyIGluIHRoZQogCXN0cmluZyBpcyBoaXQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGZpbmRfc2VtaWNvbG9uKTogUGFzcyBzdG9wIGNoYXJzICIjOyIgdG8gb25lIGZpbmRfY2hhcl91bnF1b3RlIGNhbGwsCglpbnN0ZWFkIG9mIHVzaW5nIHR3byBjYWxscy4gIElmIHRoZSBtYXRjaCBpcyBub3QgYSA7IGJ1dCBhICMsCiAJcmV0dXJuIHplcm8uCgkqIG1pc2MuYzogQ2hhbmdlZCBmaW5kX2NoYXJfdW5xdW90ZSBjYWxsZXJzIGhlcmUgdG9vLgoKCSogVmVyc2lvbiAzLjcyLjEwLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlLCBwYXJzZV9maWxlX3NlcSk6IEZpeCB0eXBvIF9fTVNfRE9TX18gLT4KIAlfX01TRE9TX18uCgoJKiBHTlVtYWtlZmlsZSAoZ2xvYmZpbGVzKTogQWRkIGdsb2IvY29uZmlndXJlLmJhdC4KCShkaXN0ZmlsZXMpOiBBZGQgY29uZmlnaC5kb3MsIGNvbmZpZ3VyZS5iYXQuCgpXZWQgTWFyICA4IDEzOjEwOjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJRml4ZXMgZm9yIE1TLURPUyBmcm9tIERKIERlbG9yaWUuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSwgcGFyc2VfZmlsZV9zZXEpIFtfX01TX0RPU19fXTogRG9uJ3Qgc2VlIDoKIAlhcyBzZXBhcmF0b3IgaW4gIkM6XC4uLiIuCgkqIGNvbmZpZ2guZG9zIChTVERDX0hFQURFUlMpOiBEZWZpbmUgb25seSBpZiB1bmRlZmluZWQuCgkoSEFWRV9TWVNfUEFSQU1fSCk6IERvbid0IGRlZmluZSB0aGlzLgoJKEhBVkVfU1RSRVJST1IpOiBEZWZpbmUgdGhpcy4KCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtfX01TRE9TX19dOiBGaXggdHlwb3MuCgoJKiBWZXJzaW9uIDMuNzIuOS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogUmVzZXQgb3B0aW5kIHRvIDEgaW5zdGVhZCBvZiAwLgoKVHVlIE1hciAgNyAxNzozMTowNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSWYgbm9uLW9wdGlvbiBhcmcgaXMgIi0iLCBpZ25vcmUgaXQuCgpNb24gTWFyICA2IDIzOjU3OjM4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuOC4KCldlZCBGZWIgMjIgMjE6MjY6MzYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi43LgoKVHVlIEZlYiAyMSAyMjoxMDo0MyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogUGFzcyBtaXNzaW5nIGFyZyB0byB0bXBuYW0uCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzdHJzaWduYWwuCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IFVzZSBzdHJzaWduYWwuCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgc2lnbmFtZV9pbml0ICNpZmRlZiBIQVZFX1NUUlNJR05BTC4KCgkqIG1pc2MuYyAoc3RyZXJyb3IpOiBGaXggc3dhcHBlZCBhcmdzIGluIHNwcmludGYuCgpNb24gRmViIDEzIDExOjUwOjA4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW4gKENGTEFHUywgTERGTEFHUyk6IERvbid0IHNldCB0aGVzZSB2YXJpYWJsZXMuCgpGcmkgRmViIDEwIDE4OjQ0OjEyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgOTUgdG8gY29weXJpZ2h0IHllYXJzLgoKCSogVmVyc2lvbiAzLjcyLjYuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZW1lbWJlciB0byBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlCiAJdW5kZXIgLW4gd2hlbiBub3QgcmVjdXJzaW5nLiAgVG8gZG8gdGhpcywgY29uc29saWRhdGUgdGhhdCBjb2RlCiAJdW5kZXIgdGhlIGVtcHR5IGNvbW1hbmQgY2FzZSBhbmQgZ290byB0aGVyZSBmb3IgdGhlIC1uIGNhc2UuCgpUdWUgRmViICA3IDEzOjM2OjAzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlLmggWyEgU1REQ19IRUFERVJTXTogRG9uJ3QgZGVjbGFyZSBxc29ydC4gIFN1biBoZWFkZXJzCiAJZGVjbGFyZSBpdCBpbnQuCgpNb24gRmViICA2IDE3OjM3OjAxIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGb3IgYm9ndXMgbGluZSBzdGFydGluZyB3aXRoIHRhYiwgaWdub3JlCiAJaXQgaWYgYmxhbmsgYWZ0ZXIgcmVtb3ZpbmcgY29tbWVudHMuCgoJKiBtYWluLmM6IENhc3QgcmVzdWx0cyBvZiBgYWxsb2NhJyB0byBgY2hhciAqJy4KCSogZXhwYW5kLmM6IExpa2V3aXNlLgoKU3VuIEZlYiAgNSAxODozNTo0NiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjUuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBta3RlbXAuCgkqIG1haW4uYyAobWFpbikgWyEgSEFWRV9NS1RFTVBdOiBVc2UgdG1wbmFtIGluc3RlYWQgb2YgbWt0ZW1wLgoKCSogY29uZmlndXJlLmluIChtYWtlX2N2X3N5c2NvbmZfb3Blbl9tYXgpOiBOZXcgY2hlY2sgZm9yIGBzeXNjb25mCiAJKF9TQ19PUEVOX01BWCknLgoJKiBhY2NvbmZpZy5oOiBBZGRlZCAjdW5kZWYgSEFWRV9TWVNDT05GX09QRU5fTUFYLgoJKiBqb2IuYyBbSEFWRV9TWVNDT05GX09QRU5fTUFYXSAoZ2V0ZHRhYmxlc2l6ZSk6IERlZmluZSBhcyBtYWNybwogCXVzaW5nIHN5c2NvbmYuCgpGcmkgSmFuIDI3IDA0OjQyOjA5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IFdoZW4gIU1VU1RfTUFLRSwgZG9uJ3Qgc2V0CiAJRklMRS0+dXBkYXRlX3N0YXR1cyB0byB6ZXJvIGJlZm9yZSBjYWxsaW5nIG5vdGljZV9maW5pc2hlZF9maWxlLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogVG91Y2ggb25seSB3aGVuIEZJTEUtPnVwZGF0ZV9zdGF0dXMgaXMgemVyby4KCShyZW1ha2VfZmlsZSk6IFNldCBGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8gYWZ0ZXIgbm90IGNhbGxpbmcKCWV4ZWN1dGVfZmlsZV9jb21tYW5kIGFuZCBkZWNpZGluZyB0byB0b3VjaCBpbnN0ZWFkLgoKVGh1IEphbiAyNiAwMToyOTozMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWJ1Z19zaWduYWxfaGFuZGxlcik6IE5ldyBmdW5jdGlvbjsgdG9nZ2xlcyBkZWJ1Z19mbGFnLgoJKG1haW4pOiBIYW5kbGUgU0lHVVNSMSB3aXRoIHRoYXQuCgpNb24gSmFuIDE2IDE1OjQ2OjU2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogUmVtb3ZlIEluZm8gZmlsZXMuCgpTdW4gSmFuIDE1IDA4OjIzOjA5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuNC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFNhdmUgYW5kIHJlc3RvcmUgZW52aXJvbiBhcm91bmQgdmZvcmsKICAgICAgICBjYWxsLgoJKHNlYXJjaF9wYXRoKTogRnVuY3Rpb24gI2lmIDAnZCBvdXQuCgkoZXhlY19jb21tYW5kKTogVXNlIGV4ZWN2cCBpbnN0ZWFkIG9mIHNlYXJjaF9wYXRoLgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IFJld3JvdGUgY29tcHV0ZWQgdmFyaWFibGUgbmFtZSBhbmQKCXN1YnN0aXR1dGlvbiByZWZlcmVuY2UgaGFuZGxpbmcgdG8gYmUgc2ltcGxlci4gIEZpcnN0IGV4cGFuZCB0aGUKCWVudGlyZSB0ZXh0IGJldHdlZW4gdGhlIHBhcmVucyBpZiBpdCBjb250YWlucyBhbnkgJHMsIHRoZW4gZXhhbWluZQoJdGhlIHJlc3VsdCBvZiB0aGF0IGZvciBzdWJ0aXR1dGlvbiByZWZlcmVuY2VzIGFuZCBkbyBubyBmdXJ0aGVyCglleHBhbnNpb24gd2hpbGUgcGFyc2luZyB0aGVtLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBIYW5kbGUgIiBxdW90aW5nIHRvbywKCXdoZW4gbm8gYmFja3NsYXNoLCAkIG9yIGAgY2hhcmFjdGVycyBhcHBlYXIgaW5zaWRlIHRoZSBxdW90ZXMuCgoJKiBjb25maWd1cmUuaW4gKHVuaW9uIHdhaXQgY2hlY2spOiBJZiBXRVhJVFNUQVRVUyBhbmQgV1RFUk1TSUcgYXJlCiAgICAgICAgZGVmaW5lZCwganVzdCB1c2UgaW50LgoKVHVlIEphbiAxMCAwNjoyNzoyNyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19faHB1eF06IFJlbW92ZSBzcGVjaWFsCglkZWZpbml0aW9uIG9mIEFSRkxBR1MuICBFeGlzdGVuY2Ugb2YgdGhlIGBmJyBmbGFnIGlzIG5vdAoJY29uc2lzdGVudCBhY3Jvc3MgSFBVWCB2ZXJzaW9uczsgYW5kIG9uZSBtaWdodCBiZSB1c2luZyBHTlUgYXIKCWFueXdheS4KCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IERvbid0IHJlbW92ZSBJbmZvIGZpbGVzLgoKCSogY29tcGF0TWFrZWZpbGUgKGNoZWNrKTogUmVtb3ZlIGdyYXR1aXRvdXMgdGFyZ2V0IGRlY2xhcmF0aW9uLgoKU2F0IEphbiAgNyAxMTozODoyMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKEVUQUdTLCBDVEFHUyk6IERvbid0IHVzZSAtdC4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKSBbY3JheV06IFN1YnRyYWN0IDEgbGlrZSBbX19ocHV4XS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRm9yIC0taGVscCwgcHJpbnQgdXNhZ2UgdG8gc3Rkb3V0LgoKTW9uIERlYyAgNSAxMjo0MjoxOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjMuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IERvIHNldF9jb21tYW5kX3N0YXRlIChGSUxFLAoJY3Nfbm90X3N0YXJ0ZWQpIG9ubHkgaWYgb2xkIHN0YXRlIHdhcyBkZXBzX3J1bm5pbmcuCgpNb24gTm92IDI4IDE0OjI0OjAzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBVc2Ugc2V0X2NvbW1hbmRfc3RhdGUuCgoJKiBidWlsZC50ZW1wbGF0ZSAoQ1BQRkxBR1MpOiBOZXcgdmFyaWFibGUuCgkocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCBmcm9tIEAuLi5ALgoJKGNvbXBpbGF0aW9uIGxvb3ApOiBQYXNzICRDUFBGTEFHUyB0byBjb21waWxlci4KCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IE1ha2UgaXQgZXhlY3V0YWJsZS4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgY29uZmlndXJlLmluLCBjb25maWd1cmUuCgoJKiBWZXJzaW9uIDMuNzIuMi4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogRG9uJ3Qgd3JpdGUgZ2xvYi9NYWtlZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfU1lNQk9MKTogVXNlIEFDX0RFRklORV9VTlFVT1RFRC4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIHJhbmxpYi4KClR1ZSBOb3YgMjIgMjI6NDI6NDAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IE9ubHkgbWFyayBhbHNvX21ha2UncyBhcwoJdXBkYXRlZCBpZiByZWFsbHkgcmFuIGNtZHMuCgpUdWUgTm92IDE1IDA2OjMyOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IFB1dCBkbmxzIGJlZm9yZSByYW5kb20gd2hpdGVzcGFjZS4KClN1biBOb3YgMTMgMDU6MDI6MjUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZSwgc2V0IGZyb20gQENQUEZMQUdTQC4KCShSQU5MSUIpOiBWYXJpYWJsZSByZW1vdmVkLgoJKHByZWZpeCwgZXhlY19wcmVmaXgpOiBTZXQgdGhlc2UgZnJvbSBALi4uQC4KCSguYy5vKTogVXNlICQoQ1BQRkxBR1MpLgoJKGdsb2IvbGliZ2xvYi5hKTogRG9uJ3QgcGFzcyBkb3duIHZhcmlhYmxlcyB0byBzdWItbWFrZS4KCWdsb2IvTWFrZWZpbGUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgYnkgY29uZmlndXJlLgoJKGRpc3RjbGVhbik6IFJlbW92ZSBjb25maWcubG9nIGFuZCBjb25maWcuY2FjaGUgKGF1dG9jb25mIHN0dWZmKS4KCk1vbiBOb3YgIDcgMTM6NTg6MDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGFjY29uZmlnLmg6IEFkZCAjdW5kZWYgSEFWRV9VTklPTl9XQUlULgoJKiBjb25maWd1cmUuaW46IENvbnZlcnRlZCB0byBBdXRvY29uZiB2Mi4KCSogZGlyLmM6IFRlc3QgSEFWRV9ESVJFTlRfSCwgSEFWRV9TWVNfRElSX0gsIEhBVkVfTkRJUl9IIGluc3RlYWQKCW9mIERJUkVOVCwgU1lTRElSLCBORElSLgoJKiBidWlsZC5zaC5pbiAocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCB0aGVzZSBmcm9tIEAuLi5ALgoJKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLCBzZXQgZnJvbSBAQ1BQRkxBR1NALgoJKGNvbXBpbGluZyBsb29wKTogUGFzcyAkQ1BQRkxBR1MgYmVmb3JlICRDRkxBR1MuCgkqIGluc3RhbGwuc2g6IEZpbGUgcmVuYW1lZCB0byBpbnN0YWxsLXNoLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogV2hlbiBubyBmbGFncywgc2V0IFdPUkRTIHRvIHplcm8uCgpTdW4gTm92ICA2IDE4OjM0OjAxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuMS4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFRlcm1pbmF0ZSBwcm9wZXJseSB3aGVuIEZMQUdTVFJJTkcgaXMKICAgICAgICBlbXB0eS4KCkZyaSBOb3YgIDQgMTY6MDI6NTEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4KClR1ZSBOb3YgIDEgMDE6MTg6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS41LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogV2hlbiBBUkdWIGlzIG5pbCwgb25seSBzZXQKCXVwZGF0ZV9zdGF0ZSBhbmQgY2FsbCBub3RpY2VfZmluaXNoZWRfZmlsZSBpZiBqb2JfbmV4dF9jb21tYW5kCglyZXR1cm5zIHplcm8uCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBDYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGZvciBlbXB0eQogICAgICAgIGNvbW1hbmQgbGluZS4KClRodSBPY3QgMjcgMDI6MDI6NDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogU2V0IENPTU1BTkRTX1NJTEVOVCBmb3IgLlNJTEVOVCwgbm90CiAgICAgICAgQ09NTUFORFNfTk9FUlJPUi4KCldlZCBPY3QgMjYgMDI6MTQ6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS40LgoKVHVlIE9jdCAyNSAyMjo0OToyNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBTZXQgY29tbWFuZF9mbGFncyBiaXRzIGluIGFsbCA6OiBlbnRyaWVzLgoKTW9uIE9jdCAyNCAxODo0Nzo1MCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFrZS5oIChwb3NpeF9wZWRhbnRpYyk6IERlY2xhcmUgaXQuCgkqIG1haW4uYyAobWFpbik6IE1vdmUgY2hlY2tzIC5JR05PUkUsIC5TSUxFTlQsIC5QT1NJWCB0bwogICAgICAgIHNuYXBfZGVwcy4KCSogZmlsZS5jIChzbmFwX2RlcHMpOiBDaGVjayAuSUdOT1JFLCAuU0lMRU5ULCAuUE9TSVggaGVyZSBpbnN0ZWFkCglvZiBpbiBtYWluLiAgSWYgLklHTk9SRSBoYXMgZGVwcywgT1IgQ09NTUFORFNfTk9FUlJPUiBpbnRvIHRoZWlyCgljb21tYW5kX2ZsYWdzIGFuZCBkb24ndCBzZXQgLWkuICBMaWtld2lzZSAuU0lMRU5ULgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBJbiBGTEFHUyBpbml0aWFsaXphdGlvbiwgT1IgaW4KCUNISUxELT5maWxlLT5jb21tYW5kX2ZsYWdzLgoJKiBmaWxlLmggKHN0cnVjdCBmaWxlKTogTmV3IG1lbWJlciBgY29tbWFuZF9mbGFncycuCgpTdW4gT2N0IDE2IDAxOjAxOjUxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKHN3aXRjaGVzKTogQnVtcCBmbGFnIHZhbHVlcyBmb3IgLS1uby1wcmludC1kaXJlY3RvcnkgYW5kCgktLXdhcm4tdW5kZWZpbmVkLXZhcmlhYmxlcywgc28gbmVpdGhlciBpcyAxICh3aGljaCBpbmRpY2F0ZXMgYQoJbm9ub3B0aW9uIGFyZ3VtZW50KS4KClNhdCBPY3QgMTUgMjM6Mzk6NDggMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IEFkZCBtaXNzaW5nIGNvZGUgaW4gLklHTk9SRSB0ZXN0LgoKTW9uIE9jdCAxMCAwNDowOTowMyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgK0QgYW5kICtGLgoKU2F0IE9jdCAgMSAwNDowNzo0OCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIGhpZGRlbiBhdXRvbWF0aWMgdmFyaWFibGUgd2l0aCBjb21tYW5kCgl2YXJzLCBhbmQgTUFLRU9WRVJSSURFUyB0byBhIHJlZmVyZW5jZSB0byB0aGF0LgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBJZiBwb3NpeF9wZWRhbnRpYywgd3JpdGUgYSByZWZlcmVuY2UgdG8gdGhhdAoJaW5zdGVhZC4KClRodSBTZXAgMjkgMDA6MTQ6MjYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAocG9zaXhfcGVkYW50aWMpOiBOZXcgdmFyaWFibGUuCgkobWFpbik6IFNldCBwb3NpeF9wZWRhbnRpYyBpZiAuUE9TSVggaXMgYSB0YXJnZXQuCglGaXggLklHTk9SRSBhbmQgLlNJTEVOVCBjaGVja3MgdG8gcmVxdWlyZSBpc190YXJnZXQuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBEZWZpbmUgbmV3IGF1dG9tYXRpYyB2YXJpYWJsZQoJJCssIGxpa2UgJF4gYnV0IGJlZm9yZSBjYWxsaW5nIHVuaXF1aXplX2RlcHMuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IENhbGwgZGVsZXRlX2NoaWxkX3RhcmdldHMgZm9yIG5vbi1zaWduYWwKCWVycm9yIGlmIC5ERUxFVEVfT05fRVJST1IgaXMgYSB0YXJnZXQuCgpUdWUgU2VwIDI3IDAxOjU3OjE0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzEuMy4KCk1vbiBTZXAgMjYgMTg6MTY6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3QgY2hhbmdlIEMtPmZpbGUtPmNvbW1hbmRfc3RhdGUgd2hlbgoJZHlpbmcuICBUZXN0IGl0IG9ubHkgYWZ0ZXIgY2FsbGluZyBzdGFydF9qb2JfY29tbWFuZCBmb3IgYSBuZXcKCWNvbW1hbmQgbGluZS4gIFdoZW4gbm8gbW9yZSBjbWRzLCBqdXN0IHNldCBDLT5maWxlLT51cGRhdGVfc3RhdHVzLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogV2hlbiB0aGUgbGFzdCBsaW5lIGlzIGVtcHR5IG9yIHVuZGVyIC1uLCBzZXQKCUMtPmZpbGUtPnVwZGF0ZV9zdGF0dXMuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBHcm9rIGNzX25vdF9zdGFydGVkIGFmdGVyIHN0YXJ0X2pvYl9jb21tYW5kCglhcyBzdWNjZXNzLgoJKG5ld19qb2IpOiBTZXQgQy0+ZmlsZS0+dXBkYXRlX3N0YXR1cyB3aGVuIHRoZXJlIGFyZSBubyBjbWRzLgoJKGpvYl9uZXh0X2NvbW1hbmQpOiBXaGVuIG91dCBvZiBsaW5lcywgZG9uJ3Qgc2V0CglDSElMRC0+ZmlsZS0+dXBkYXRlX3N0YXR1cyBvciBDSElMRC0+ZmlsZS0+Y29tbWFuZF9zdGF0ZS4KCgkqIG1haW4uYyAocXVvdGVfYXNfd29yZCk6IFJlbmFtZWQgZnJvbSBzaGVsbF9xdW90ZS4gIFRha2UgbmV3IGFyZzsKCWlmIG5vbnplcm8sIGFsc28gZG91YmxlICRzLgoJKG1haW4pOiBEZWZpbmUgTUFLRU9WRVJSSURFUyBmcm9tIGNvbW1hbmRfdmFyaWFibGVzIGhlcmUuCgkoZGVmaW5lX21ha2VmbGFncyk6IERvbid0IHVzZSBjb21tYW5kX3ZhcmlhYmxlcyBoZXJlOyBpbnN0ZWFkIHdyaXRlIGEKCXJlZmVyZW5jZSAkKE1BS0VPVkVSUklERVMpIGluIE1BS0VGTEFHUy4gIE1ha2UgdmFycyByZWN1cnNpdmUuCgoJKiBkaXIuYyBbX19NU0RPU19fXTogRml4ZWQgdHlwby4KCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBSZXNldCBFWElTVFMgd2hlbiBzdGF0IGZhaWxzLgoKU2F0IFNlcCAxMCAwMzowMTozNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmM6IEluY2x1ZGUgPGFzc2VydC5oPiBhbmQgdXNlIGFzc2VydCBpbnN0ZWFkIG9mIHByaW50ZnMKICAgICAgICBhbmQgYWJvcnQuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IExvb3AgdW50aWwgb3B0aW5kIGhpdHMgQVJHQywgbm90IGp1c3QKCXVudGlsIGdldG9wdF9sb25nIHJldHVybnMgRU9GLiAgSW5pdGlhbGl6ZSBDIHRvIHplcm8gYmVmb3JlIGxvb3A7CglpbiBsb29wIGlmIEMgaXMgRU9GLCBzZXQgb3B0YXJnIGZyb20gQVJHVltvcHRpbmQrK10sIGVsc2UgY2FsbAoJZ2V0b3B0X2xvbmcuCgkoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSB2YXJpYWJsZV9leHBhbmQgaW5zdGVhZCBvZgoJYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZC4gIEFsbG9jYXRlIGEgZnJlc2ggYnVmZmVyIHRvIGNvcHkgc3BsaXQKCXdvcmRzIGludG87IHNjYW4gY2hhcmFjdGVycyBieSBoYW5kIHRvIGJyZWFrIHdvcmRzIGFuZAoJZGViYWNrc2xhc2hpZnkuCgkoc2hlbGxfcXVvdGUpOiBOZXcgZnVuY3Rpb24uCgkoZGVmaW5lX21ha2VmbGFncyk6IEFsbG9jYXRlIGRvdWJsZWQgc3BhY2UgZm9yIHN3aXRjaCBhcmdzLCBhbmQgY29tbWFuZAoJdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlczsgdXNlIHNoZWxsX3F1b3RlIHRvIHF1b3RlIHRob3NlIHRoaW5ncy4KCkZyaSBTZXAgIDkgMDE6Mzc6NDcgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS4yLgoKCSogYWNjb25maWcuaDogQWRkIEhBVkVfU1lTX1NJR0xJU1QgYW5kIEhBVkVfX1NZU19TSUdMSVNULgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBUaGUgbm9uLW9wdGlvbiByZXR1cm4gZnJvbSBnZXRvcHQgaXMKCTEsIG5vdCAwLgoJKGNvbW1hbmRfdmFyaWFibGVzKTogTmV3IHR5cGUgYW5kIHZhcmlhYmxlLgoJKGRlY29kZV9zd2l0Y2hlcywgZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IEFmdGVyIG1ha2luZyBhIHZhcmlhYmxlCglkZWZpbml0aW9uLCByZWNvcmQgdGhlIHN0cnVjdCB2YXJpYWJsZSBwb2ludGVyIGluIHRoZQoJY29tbWFuZF92YXJpYWJsZXMgY2hhaW4uCgkoZGVmaW5lX21ha2VmbGFncyk6IElmIEFMTCwgd3JpdGUgdmFyaWFibGUgZGVmaW5pdGlvbnMgZm9yCgljb21tYW5kX3ZhcmlhYmxlcy4KCgkqIG1haW4uYyAob3RoZXJfYXJncyk6IFZhcmlhYmxlIHJlbW92ZWQuCgkoZ29hbHMsIGxhc3Rnb2FsKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMgKG1vdmVkIGZyb20gYXV0byBpbiBtYWluKS4KCShtYWluKTogRG9uJ3QgcHJvY2VzcyBPVEhFUl9BUkdTIGF0IGFsbC4KCURvbid0IHNldCB2YXJpYWJsZSBNQUtFT1ZFUlJJREVTIGF0IGFsbDsgZGVmaW5lIE1BS0UgdG8ganVzdAogICAgICAgICQoTUFLRV9DT01NQU5EKS4KCShpbml0X3N3aXRjaGVzKTogUHJlcGVuZCBhIC0ge3JldHVybiBpbiBvcmRlcn0gaW5zdGVhZCBvZiBhICsKCXtyZXF1aXJlIG9yZGVyfS4KCShkZWNvZGVfc3dpdGNoZXMpOiBEb24ndCBzZXQgT1RIRVJfQVJHUyBhdCBhbGwuCglHcm9rICdcMCcgcmV0dXJuIGZyb20gZ2V0b3B0X2xvbmcgYXMgbm9uLW9wdGlvbiBhcmd1bWVudDsgdHJ5Cgl2YXJpYWJsZSBkZWZpbml0aW9uIGFuZCAoaWYgIUVOVikgZW50ZXIgZ29hbCB0YXJnZXRzIGhlcmUuCgkoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSBhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kIHRvIHN0b3JlIHZhbHVlLgoJVXNlIGZpbmRfbmV4dF90b2tlbiB0byBzaW1wbGlmeSB3b3JkLXNwbGl0dGluZyBsb29wLiAgRG9uJ3QKCXByZXBlbmQgYSBkYXNoIHRvIHVuaW50ZXJwcmV0ZWQgdmFsdWUuICBJbnN0ZWFkLCBpZiBzcGxpdCBpbnRvCglvbmx5IG9uZSB3b3JkLCB0cnkgdmFyaWFibGUgZGVmaW5pdGlvbiBhbmQgZmFpbGluZyB0aGF0IHByZXBlbmQgYQoJZGFzaCB0byB0aGUgd29yZCBhbmQgcGFzcyBpdCB0byBkZWNvZGVfc3dpdGNoZXMgYXMgYSBzaW5nbGUgYXJnLgoKV2VkIFNlcCAgNyAwMzowMjo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogT25seSByZWNoZWNrIG1vZHRpbWVzIGlmCglGSUxFLT5jb21tYW5kX3N0YXRlIHdhcyBjc19ydW5uaW5nIG9uIGVudHJ5IChtZWFuaW5nIHRoZSBjb21tYW5kcwoJYWN0dWFsbHkganVzdCByYW4pLgoJKHVwZGF0ZV9maWxlXzEpOiBXaGVuZXZlciB3ZSBzZXQgRklMRS0+dXBkYXRlX3N0YXR1cywgY2FsbAoJbm90aWNlX2ZpbmlzaGVkX2ZpbGUgaW5zdGVhZCBvZiBqdXN0IHNldF9jb21tYW5kX3N0YXRlLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBXaGVuZXZlciB3ZSBzZXQKCUNISUxELT5maWxlLT51cGRhdGVfc3RhdHVzLCBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGluc3RlYWQgb2YKCWp1c3Qgc2V0X2NvbW1hbmRfc3RhdGUuCgpUdWUgU2VwICA2IDE5OjEzOjU0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1PgoKCSogZGVmYXVsdC5jOiBBZGQgbWlzc2luZyAiLgoKCSogam9iLmM6IENoYW5nZWQgYWxsIGFzc2lnbm1lbnRzIG9mIGNvbW1hbmRfc3RhdGUgbWVtYmVycyB0byBjYWxscwoJdG8gc2V0X2NvbW1hbmRfc3RhdGUuCgkqIHJlbWFrZS5jOiBMaWtld2lzZS4KCSogZmlsZS5jIChzZXRfY29tbWFuZF9zdGF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogZmlsZS5oOiBEZWNsYXJlIHNldF9jb21tYW5kX3N0YXRlLgoKCSogbWFpbi5jIChpbml0X3N3aXRjaGVzKTogUHV0IGEgKyBmaXJzdCBpbiBvcHRpb25zLgoKTW9uIEp1bCAyNSAxODowNzo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCU1lcmdlIE1TRE9TL0dPMzIgcG9ydCBmcm9tIERKIERlbG9yaWUgPGRqQGN0cm9uLmNvbT4uCgkqIHZwYXRoLmM6IENoYW5nZWQgYWxsIHVzZXMgb2YgJzonIHRvIFBBVEhfU0VQQVJBVE9SX0NIQVIuCgkqIG1haW4uYyAoZGlyZWN0b3J5X2JlZm9yZV9jaGRpcik6IE5ldyB2YXJpYWJsZSwgbW92ZWQgb3V0IG9mIG1haW4KICAgICAgICAod2FzIGxvY2FsKS4KCShtYWluKSBbX19NU0RPU19fXTogTG9vayBmb3IgXCBvciA6IHRvIGRlbGltaXQgbGFzdCBjb21wb25lbnQgb2YKCVBST0dSQU0uICBEb24ndCBmcm9iIEFSR1ZbMF0gYmVmb3JlIHNldHRpbmcgTUFLRV9DT01NQU5EIHZhcmlhYmxlLgoJKGRpZSk6IENoYW5nZSBiYWNrIHRvIGBkaXJlY3RvcnlfYmVmb3JlX2NoZGlyJyBiZWZvcmUgZHlpbmcuCgkqIG1ha2UuaCAoUEFUSF9TRVBBUkFUT1JfQ0hBUik6IE5ldyBtYWNybzsgZGlmZmVyaW5nIGRlZm5zIGZvcgogICAgICAgIFtfX01TRE9TX19dIGFuZCBub3QuCgkqIGpvYi5jIFtfX01TRE9TX19dOiBJbmNsdWRlIDxwcm9jZXNzLmg+LgoJW19fTVNET1NfX10gKGRvc19waWQsIGRvc19zdGF0dXMsIGRvc19ibmFtZSwgZG9zX2JlbmFtZSwKCWRvc19iYXRjaF9maWxlKTogTmV3IHZhcmlhYmxlcy4KCShyZWFwX2NoaWxkcmVuKSBbX19NU0RPU19fXTogRG9uJ3QgY2FsbCB3YWl0OyBqdXN0IGV4YW1pbmUgdGhvc2UgdmFycy4KCSh1bmJsb2NrX3NpZ3MpIFtfX01TRE9TX19dOiBEbyBub3RoaW5nLgoJKHN0YXJ0X2pvYl9jb21tYW5kKSBbX19NU0RPU19fXTogVXNlIHNwYXdudnBlIGluc3RlYWQgb2YgdmZvcmsgJiBleGVjLgoJKGxvYWRfdG9vX2hpZ2gpIFtfX01TRE9TX19dOiBBbHdheXMgcmV0dXJuIHRydWUuCgkoc2VhcmNoX3BhdGgpIFtfX01TRE9TX19dOiBDaGVjayBmb3IgOiBvciAvIGluIEZJTEUgdG8gcHVudC4KCVVzZSBQQVRIX1NFUEFSQVRPUl9DSEFSIGluc3RlYWQgb2YgJzonLgoJKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtfX01TRE9TX19dOiBXaG9sbHkgZGlmZmVyZW50Cgl2YWx1ZXMgZm9yIHNoX2NoYXJzIGFuZCBzaF9jbWRzLiAgV2hvbGx5IG5ldyBjb2RlIHRvIGhhbmRsZSBzaGVsbAoJc2NyaXB0cy4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKSBbX19NU0RPU19fXTogV2hvbGx5IG5ldwogICAgICAgIGltcGxlbWVudGF0aW9uLgoJKiBkaXIuYyBbX19NU0RPU19fXSAoZG9zaWZ5KTogTmV3IGZ1bmN0aW9uLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKSBbX19NU0RPU19fXTogQ2FsbCBpdCBvbiBGSUxFTkFNRSBhbmQKCXByb2Nlc3MgdGhlIHJlc3VsdCBpbnN0ZWFkIG9mIEZJTEVOQU1FIGl0c2VsZi4KCShmaWxlX2ltcG9zc2libGVfcCkgW19fTVNET1NfX106IExpa2V3aXNlLgoJKiBkZWZhdWx0LmMgW19fTVNET1NfX106IERlZmluZSBHQ0NfSVNfTkFUSVZFLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzKSBbX19NU0RPU19fXTogVXNlIGB5X3RhYi5jJyBpbnN0ZWFkIG9mIGB5LnRhYi5jJy4KCShkZWZhdWx0X3ZhcmlhYmxlcykgW0dDQ19JU19OQVRJVkVdOiBTZXQgQ0MgYW5kIENYWCB0byBgZ2NjJywgWUFDQyB0bwoJYGJpc29uIC15JywgYW5kIExFWCB0byBgZmxleCcuCgkqIGNvbmZpZ3VyZS5iYXQsIGNvbmZpZ2guZG9zOiBOZXcgZmlsZXMuCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCkgW19fTVNET1NfX106IEp1c3QgcmVtb3ZlCglpbnRlcm1lZGlhdGVzIGFuZCBleGl0LgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogQWRkIHBhcmVucyBpbiBsZW5ndGgKCWNvbXB1dGF0aW9uIGluIC5TVUZGSVhFUyBkZXAgbG9vcCB0byBxdWlldCBjb21waWxlciB3YXJuaW5nLiAgRnJvbQoJSmltIE1leWVyaW5nLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRnJlZSBGSUxFTkFNRSBpZiB3ZSBhbGxvY2F0ZWQgaXQuICBGcm9tCiAgICAgICAgSmltIE1leWVyaW5nLgoKTW9uIEp1bCAgNCAxNzo0NzowOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChzYWZlX3N0YXQpOiBOZXcgZnVuY3Rpb24sIEVJTlRSLXNhZmUgd3JhcHBlciBhcm91bmQgc3RhdC4KCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogcmVhZC5jIChjb25zdHJ1Y3RfaW5jbHVkZV9wYXRoKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogYXJzY2FuLmMgKGFyX21lbWJlcl90b3VjaCkgW0VJTlRSXTogRG8gRUlOVFIgbG9vcGluZyBhcm91bmQgZnN0YXQuCgkqIHJlbWFrZS5jIChuYW1lX210aW1lKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKHRvdWNoX2ZpbGUpIFtFSU5UUl06IERvIEVJTlRSIGxvb3BpbmcgYXJvdW5kIGZzdGF0LgoKRnJpIEp1biAyNCAwNTo0MDoyNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2hlY2sgZm9yIGEgc2hlbGwgY29tbWFuZCBmaXJzdCwgYW5kCgl0aGVuIHN0cmlwIGxlYWRpbmcgdGFicyBiZWZvcmUgZnVydGhlciBjaGVja2luZyBpZiBpdCdzIG5vdCBhCglzaGVsbCBjb21tYW5kIGxpbmUuCgoJKiBtYWtlLmggW19fYXJtXTogVW5kZWZpbmUgUE9TSVguCglbIV9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVggJiYgIV9QT1NJWF9WRVJTSU9OXTogRG9uJ3QgZGVjbGFyZSBzeXN0ZW0KCWZ1bmN0aW9ucyB0aGF0IHJldHVybiBpbnQuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFmdGVyIHN3YWxsb3dpbmcgYQoJYmFja3NsYXNoLW5ld2xpbmUgY29tYmluYXRpb24sIGlmIElOU1RSSU5HIGlzIHNldCBnb3RvIHN0cmluZ19jaGFyCgkobmV3IGxhYmVsKSBmb3Igbm9ybWFsIElOU1RSSU5HIGhhbmRsaW5nIGNvZGUuCgpTYXQgSnVuICA0IDAxOjExOjIwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3Igc3lzX3NpZ2xpc3QgYW5kIF9zeXNfc2lnbGlzdCB3aXRoCglBQ19IQVZFX0ZVTkNTLiAgSW5zdGVhZCB1c2UgdHdvIEFDX0NPTVBJTEVfQ0hFQ0tzLgoKTW9uIE1heSAyMyAxODoyMDozOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcxLjEgcmVsZWFzZWQuCgoJKiBtYWtlLmggWyFfX0dOVV9MSUJSQVJZX18gJiYgIVBPU0lYXTogQWxzbyB0ZXN0ICNpZm5kZWYKCV9QT1NJWF9WRVJTSU9OIGZvciB0aGVzZSBkZWNsYXJhdGlvbnMuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gW1BPU0lYXTogUmVtb3ZlIGJvZ3VzICNpZm5kZWZzCglhcm91bmQgI3VuZGVmcyBvZiBIQVZFX1NFVFJFVUlEIGFuZCBIQVZFX1NFVFJFR0lELgoKU2F0IE1heSAyMSAxNjoyNjozOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcxIHJlbGVhc2VkLgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFtQT1NJWF06IERvbid0IHRlc3QgW0hBVkVfU0VUVUlEXQoJYW5kIFtIQVZFX1NFVEdJRF0uICBFdmVyeSBzeXN0ZW0gaGFzIHRob3NlLCBhbmQgY29uZmlndXJlIGRvZXNuJ3QKCWNoZWNrIGZvciB0aGVtLgoKCSogbWFrZS5oIFtfUE9TSVhfVkVSU0lPTl06IERvbid0ICNkZWZpbmUgUE9TSVggI2lmZGVmIHVsdHJpeC4KCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnKTogRGVwZW5kIG9uIGFuZCB1c2UgbG9hZGF2Zy5jIGluc3RlYWQgb2YKCWdldGxvYWRhdmcuYy4KCShsb2FkYXZnLmMpOiBMaW5rIG9yIGNvcHkgaXQgZnJvbSBnZXRsb2FkYXZnLmMuCgkoZGlzdGNsZWFuKTogUmVtb3ZlIGxvYWRhdmcuYy4KCk1vbiBNYXkgMTYgMjI6NTk6MDQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC40LgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFshIFBPU0lYXTogVW5kZWZpbmUgSEFWRV9TRVRFVUlECglhbmQgSEFWRV9TRVRFR0lELgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogSW4gU0NDUyBydWxlcywgcHV0CgkkKFNDQ1NfT1VUUFVUX09QVElPTikgYmVmb3JlICQ8LiAgT24gc29tZSBzeXN0ZW1zIC1HIGlzIGdyb2trZWQKCW9ubHkgYmVmb3JlIHRoZSBmaWxlIG5hbWUuCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCAtRyBmbGFnIGJlZm9yZSBmaWxlIG5hbWUuCgpUdWUgTWF5IDEwIDE2OjI3OjM4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFN3YWxsb3cKCWJhY2tzbGFzaC1uZXdsaW5lIGNvbWJpbmF0aW9ucyBpbnNpZGUgJycgc3RyaW5ncyB0b28uCgpUaHUgTWF5ICA1IDA0OjE1OjEwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IENhbGwgY29sbGFwc2VfY29udGludWF0aW9ucyBvbiBlYWNoIGxpbmUKCWJlZm9yZSBhbGwgZWxzZS4KCk1vbiBBcHIgMjUgMTk6MzI6MDIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogTm90aWNlIG5ld2xpbmUgaW5zaWRlCgknJyBzdHJpbmcgd2hlbiBSRVNUUCBpcyBub24tbnVsbC4KCkZyaSBBcHIgMjIgMTc6MzM6MzAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAuMy4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFJlc2V0IEZJTEUgdG8gRy0+ZmlsZSBhZnRlciB0aGUKCWRvdWJsZS1jb2xvbiBsb29wIHNvIGl0IGlzIG5ldmVyIG51bGwgZm9yIGZvbGxvd2luZyBjb2RlLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRml4IGBvdmVycmlkZSBkZWZpbmUnIHBhcnNpbmcgdG8gc2tpcAoJd2hpdGVzcGFjZSBhZnRlciBgZGVmaW5lJyBwcm9wZXJseS4KCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNkaXIpOiBEZWZpbmUgYXMgQHNyY2RpckA7IGRvbid0IHJlZmVyZW5jZQoJJChWUEFUSCkuCgkoZ2xvYi9NYWtlZmlsZSk6IE5ldyB0YXJnZXQuCgpUaHUgQXByIDIxIDE2OjE2OjU1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjIuCgoJKiBtaXNjLmMgKHJlbW92ZV9jb21tZW50cyk6IFVzZSBmaW5kX2NoYXJfdW5xdW90ZS4KCSogbWFrZS5oIChmaW5kX2NoYXJfdW5xdW90ZSk6IERlY2xhcmUgaXQuCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBOZXcgZnVuY3Rpb24sIGdlbmVyYWxpemVkIGZyb20KCWZpbmRfcGVyY2VudC4KCShmaW5kX3BlcmNlbnQsIGZpbmRfc2VtaWNvbG9uLCBwYXJzZV9maWxlX3NlcSk6IFVzZSB0aGF0LgoKV2VkIEFwciAyMCAxODo0MjozOSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBBbHdheXMgYWxsb2NhdGUgbmV3IHN0b3JhZ2UgZm9yCglGSUxFLT5zdGVtLiAgSXQgaXMgbm90IHNhZmUgdG8gc3RvcmUgU1RFTSdzIGFkZHJlc3MgYmVjYXVzZSBpdAoJbWlnaHQgYmUgYXV0byBzdG9yYWdlLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc2V0ZXVpZCBhbmQgc2V0ZWdpZC4KCSogbWlzYy5jIFtIQVZFX1NFVEVVSURdOiBEZWNsYXJlIHNldGV1aWQuCglbSEFWRV9TRVRFR0lEXTogRGVjbGFyZSBzZXRlZ2lkLgoJKG1ha2VfYWNjZXNzLCB1c2VyX2FjY2VzcykgW0hBVkVfU0VURVVJRF06IFVzZSBzZXRldWlkLgoJW0hBVkVfU0VURUdJRF06IFVzZSBzZXRlZ2lkLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogU2V0IFNUQVRVUyB0byBGSUxFLT51cGRhdGVfc3RhdHVzLAoJdG8gcHJlc2VydmUgd2hldGhlciBpdCdzIDIgZm9yIGVycm9yIG9yIDEgZm9yIC1xIHRyaWdnZXIuICBXaGVuCglTVEFUVVMgZ2V0cyBub256ZXJvIGFuZCAtcSBpcyBzZXQsIGFsd2F5cyBzdG9wIGltbWVkaWF0ZWx5LgoJKiBtYWluLmMgKG1haW4sIGRlY29kZV9zd2l0Y2hlcyk6IERpZSB3aXRoIDIgZm9yIGVycm9ycy4KCShtYWluKTogQWNjZXB0IDIgcmV0dXJuIGZyb20gdXBkYXRlX2dvYWxfY2hhaW4gYW5kIGRpZSB3aXRoIHRoYXQuCgkqIG1pc2MuYyAoZmF0YWwsIG1ha2VmaWxlX2ZhdGFsKTogRGllIHdpdGggMjsgMSBpcyByZXNlcnZlZCBmb3IgLXEKCWFuc3dlci4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEaWUgd2l0aCAyIGZvciBlcnJvci4KCShzdGFydF9qb2JfY29tbWFuZCk6IFNldCB1cGRhdGVfc3RhdHVzIHRvIDIgZm9yIGVycm9yLiAgU2V0IGl0IHRvCgkxIHdoZW4gd2Ugd291bGQgcnVuIGEgY29tbWFuZCBhbmQgcXVlc3Rpb25fZmxhZyBpcyBzZXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEb24ndCBtYXJrIG1ha2VmaWxlcyBhcyBwcmVjaW91cy4gIEp1c3QKCWxpa2Ugb3RoZXIgdGFyZ2V0cywgdGhleSBjYW4gYmUgbGVmdCBpbmNvbnNpc3RlbnQgYW5kIGluIG5lZWQgb2YKCXJlbWFraW5nIGJ5IGFib3J0ZWQgY29tbWFuZHMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBXcml0ZSBubyBlcnJvciBtc2cgZm9yIC1pbmNsdWRlIGZpbGUuCgpUdWUgQXByICA1IDA1OjIyOjE5IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBEb24ndCB1bmJsb2NrIHNpZ25hbHMuCgoJKiBmaWxlLmggKHN0cnVjdCBmaWxlKTogQ2hhbmdlIG1lbWJlciBgZG91YmxlX2NvbG9uJyBmcm9tIGZsYWcgdG8KCWBzdHJ1Y3QgZmlsZSAqJy4KCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBTZXQgZG91YmxlX2NvbG9uIHBvaW50ZXIgaW5zdGVhZCBvZiBmbGFnLgoJKiBtYWluLmMgKG1haW4pOiBXaGVuIGRpc3F1YWxpZnlpbmcgbWFrZWZpbGVzIGZvciB1cGRhdGluZywgdXNlCglkb3VibGVfY29sb24gcG9pbnRlciB0byBmaW5kIGFsbCBlbnRyaWVzIGZvciBhIGZpbGUuCgkqIGZpbGUuYyAoZW50ZXJfZmlsZSk6IElmIHRoZXJlIGlzIGFscmVhZHkgYSBkb3VibGUtY29sb24gZW50cnkKCWZvciB0aGUgZmlsZSwgc2V0IE5FVy0+ZG91YmxlX2NvbG9uIHRvIHRoYXQgcG9pbnRlci4KCShmaWxlX2hhc2hfZW50ZXIpOiBVc2UgRklMRS0+ZG91YmxlX2NvbG9uIHRvIGZpbmQgYWxsIGVudHJpZXMgdG8KCXNldCBuYW1lLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBEbyBpbm5lciBsb29wIG9uIGRvdWJsZS1jb2xvbiBlbnRyaWVzLgoJKHVwZGF0ZV9maWxlKTogVXNlIEZJTEUtPmRvdWJsZV9jb2xvbiBwb2ludGVyIHRvIGZpbmQgYWxsIGVudHJpZXMuCgkoZl9tdGltZSk6IExpa2V3aXNlLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogUHJvcGFnYXRlIG10aW1lIGNoYW5nZSB0byBhbGwgZW50cmllcy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmV0dXJuIGFmdGVyIGFib3J0LgoKRnJpIEFwciAgMSAxODo0NDoxNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCShwYXJzZV9maWxlX3NlcSk6IFdoZW4gcmVtb3ZpbmcgYW4gZWx0IHRoYXQgaXMganVzdCBgKScsIHByb3Blcmx5CglmaXggdXAgdGhlIHByZXZpb3VzIGVsdCdzIG5leHQgcG9pbnRlci4KCk1vbiBNYXIgMjggMTg6MzE6NDkgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogRG8gQUNfU0VUX01BS0UuCgkqIEdOVW1ha2VmaWxlIChNYWtlZmlsZS5pbik6IEVkaXQgTUFLRSBhc3NpZ25tZW50IGludG8gQFNFVF9NQUtFQC4KCkZyaSBNYXIgIDQgMDA6MDI6MzIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKHN1YnN0X2V4cGFuZCk6IElmIEJZX1dPUkQgb3IgU1VGRklYX09OTFkgaXMgc2V0IGFuZAoJdGhlIHNlYXJjaCBzdHJpbmcgaXMgdGhlIGVtcHR5IHN0cmluZywgZmluZCBhIG1hdGNoIGF0IHRoZSBlbmQgb2YKCWVhY2ggd29yZCAodXNpbmcgZW5kX29mX3Rva2VuIGluIHBsYWNlIG9mIHNpbmRleCkuCgoJKiBtaXNjLmMgKGVuZF9vZl90b2tlbik6IERvbid0IHRyZWF0IGJhY2tzbGFzaGVzIHNwZWNpYWxseTsgeW91CgljYW4gbm8gbG9uZ2VyIGVzY2FwZSBibGFua3Mgd2l0aCBiYWNrc2xhc2hlcyBpbiBleHBvcnQsIHVuZXhwb3J0LAoJYW5kIHZwYXRoLiAgVGhpcyB3YXMgbmV2ZXIgZG9jdW1lbnRlZCBhbnl3YXkuCgpUaHUgTWFyICAzIDIzOjUzOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBWYXJpYWJsZSBuYW1lIGZvciBgZGVmaW5lJyBpcyBub3QganVzdAoJZmlyc3QgdG9rZW47IHVzZSB3aG9sZSByZXN0IG9mIGxpbmUgYW5kIHN0cmlwIHRyYWlsaW5nIGJsYW5rcy4KCldlZCBGZWIgMTYgMTY6MDM6NDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC4xLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWRkIC1kIG1zZyBzdGF0aW5nIGFyZ3MuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBVc2UgaXNzcGFjZSB0byBza2lwIG92ZXIgbGVhZGluZwoJd2hpdGVzcGFjZSwgYW5kIGV4cGxpY2l0bHkgYXZvaWQgc2tpcHBpbmcgb3ZlciB0YWJzLiAgRG9uJ3Qgd2FudAoJdG8gc2tpcCBqdXN0IHNwYWNlcyB0aG91Z2g7IGZvcm1mZWVkcyBldCBhbCBzaG91bGQgYmUgc2tpcHBlZC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfX2hwdXhdOiBBZGQgZiBpbiBBUkZMQUdTLgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtfX2hwdXhdOiBTdWJ0cmFjdCAyIGluc3RlYWQgb2YgMSBmcm9tCglzaXplb2YgYXJfbmFtZSBmb3IgbWF4IGxlbmd0aCB0byBjb21wYXJlLgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFtQT1NJWF06IFVuZGVmaW5lIEhBVkVfU0VUUkVVSUQKCSNpZmRlZiBIQVZFX1NFVFVJRDsgbGlrZXdpc2UgSEFWRV9TRVRSRUdJRCBhbmQgSEFWRV9TRVRHSUQuCgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIHVzZXJfYWNjZXNzIGFmdGVyIHNldHRpbmcgYHByb2dyYW0nLCBpbiBjYXNlCglpdCBuZWVkcyB0byB1c2UgaXQgaW4gYW4gZXJyb3IgbWVzc2FnZS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElnbm9yZSBhbiBlbXB0eSBsaW5lIHN0YXJ0aW5nIHdpdGggYSB0YWIuCgpUaHUgRmViIDEwIDIxOjQ1OjMxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKEFDX1NZU19TSUdMSVNUX0RFQ0xBUkVEKTogVXNlIHRoaXMgaW5zdGVhZCBvZgoJQUNfQ09NUElMRV9DSEVDSyB0aGF0IGlzIG5vdyBpdHMgY29udGVudHMuCgpGcmkgRmViICA0IDE2OjI4OjU0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmg6ICN1bmRlZiBzdHJlcnJvciBhZnRlciAjaW5jbHVkZSA8c3RyaW5nLmg+LgoJWyEgQU5TSV9TVFJJTkddOiBEZWNsYXJlIHN0cmVycm9yLgoKVGh1IEZlYiAgMyAwMjoyMToyMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChzdHJlcnJvcik6ICN1bmRlZiBhbnkgbWFjcm8gYmVmb3JlIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpNb24gSmFuIDMxIDE5OjA3OjIzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENhbGN1bGF0ZSBCRUcgYmVmb3JlIGxvb3AKCXRvIHN0cmlwIGJsYW5rcyBieSBkZWNyZW1lbnRpbmcgRU5ELiAgRG9uJ3QgZGVjciBFTkQgdG8gYmVmb3JlIEJFRy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNraXAgb3ZlciBsZWFkaW5nIHNwYWNlIGNoYXJhY3RlcnMsIGJ1dAoJbm90IHRhYnMsIGFmdGVyIHJlbW92aW5nIGNvbnRpbnVhdGlvbnMgYW5kIGNvbW1lbnRzIChpdCB1c2VkIHRvCgl1c2UgaXNzcGFjZSkuCgpUdWUgSmFuIDI1IDE2OjQ1OjA1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEluICQoQEQpIGV0IGFsLCB1c2UKCXBhdHN1YnN0IHRvIHJlbW92ZSB0cmFpbGluZyBzbGFzaC4KCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV90YXJnZXQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCWRlbGV0ZV9jaGlsZF90YXJnZXRzLiAgQ2hlY2sgZm9yIGFyY2hpdmUgbWVtYmVycyBhbmQgZ2l2ZSBzcGVjaWFsIG1zZy4KCShkZWxldGVfY2hpbGRfdGFyZ2V0cyk6IFVzZSBkZWxldGVfdGFyZ2V0LgoKTW9uIEphbiAxNyAxNzowMzoyMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IFVzZSAkKFRFWEkyRFZJX0ZMQUdTKSBpbgoJdGV4aTJkdmkgcnVsZXMuCVVzZSAkKE1BS0VJTkZPX0ZMQUdTKSBpbiBtYWtlaW5mbyBydWxlcy4KClR1ZSBKYW4gMTEgMTk6Mjk6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlICh0YXJmaWxlcyk6IE9taXQgbWFrZS1kb2MuCgkobWFrZS0kKHZlcnNpb24pLnRhcik6IEluY2x1ZGUgbWFrZS5pbmZvKi4KCkZyaSBKYW4gIDcgMTY6Mjc6MDAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWd1cmUsIGNvbmZpZy5oLmluKTogQ29tbWVudCBvdXQgcnVsZXMuCgpUaHUgSmFuICA2IDE4OjA4OjA4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoYmlucHJlZml4LCBtYW5wcmVmaXgpOiBOZXcgdmFyaWFibGVzLgoJKGluc3RuYW1lKTogVmFyaWFibGUgcmVtb3ZlZC4KCShpbnN0YWxsKTogVXNlICQoe2JpbixtYW59cHJlZml4KW1ha2UgaW4gcGxhY2Ugb2YgJChpbnN0bmFtZSkuCglGaWxlIHRhcmdldHMgbGlrZXdpc2VkIHJlbmFtZWQuCgpNb24gSmFuICAzIDE3OjUwOjI1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAgcmVsZWFzZWQuCgpUaHUgRGVjIDIzIDE0OjQ2OjU0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjkuMy4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBJbnNpZGUgbXVsdGktd29yZCBhcmNoaXZlIHJlZgoJdHJhbnNsYXRpb24gbG9vcCwgY2hlY2sgTkVXMT09MCBhdCBlbmQgYW5kIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyKTogRGlzdHJpYnV0ZSBpbnN0YWxsLnNoLgoJKiBpbnN0YWxsLnNoOiBOZXcgZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCByZWRpcmVjdGlvbiBmb3IgYWRtaW4KCWNtZHMgb3V0c2lkZSBzdWJzaGVsbCBwYXJlbnMsIHRvIGF2b2lkICJjb21tYW5kIG5vdCBmb3VuZCIgbXNncwoJZnJvbSB0aGUgc2hlbGwuCgpXZWQgRGVjIDIyIDE3OjAwOjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKFNDQ1NfR0VUX01JTlVTX0cgY2hlY2spOiBQdXQgLUcgZmxhZyBsYXN0IGluIGdldCBjbWQuCglSZWRpcmVjdCBvdXRwdXQgJiBlcnJvciBmcm9tIGdldCB0byAvZGV2L251bGwuCglGaXggcmV2ZXJzZWQgc2Vuc2Ugb2YgdGVzdC4KCkZyaSBEZWMgMTcgMTU6MzE6MzYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFVzZSBwYXJlbnMgaW5zdGVhZCBvZgoJYnJhY2VzIGluc2lkZSBpZiBjb25kaXRpb24gY29tbWFuZDsgc29tZSBzaGVsbHMgbG9zZS4KClRodSBEZWMgMTYgMTU6MTA6MjMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4yLgoKCSogYXJzY2FuLmMgW01fVU5JWF06IE1vdmUgI3VuZGVmIE1fWEVOSVggZm9yIFBPUlRBUiBzdHVmZi4KCShQT1JUQVIpIFtNX1hFTklYXTogRGVmaW5lIHRvIDAgaW5zdGVhZCBvZiAxLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogT25seSBleHBvcnQgTUFLRUZMQUdTIGlmICFBTEwuCgpXZWQgRGVjIDE1IDE3OjQ3OjQ4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBDYXN0IHJlc3VsdCBvZiBwb2ludGVyIGFyaXRoIHRvIHVuc2lnbmVkIGludAoJYmVmb3JlIHBhc3NpbmcgdG8gZGVmaW5lX3ZhcmlhYmxlIGZvciBlbnZhcnMuICBNYXR0ZXJzIHdoZW4KCXNpemVvZih1bnNpZ25lZCkhPXNpemVvZihwdHJkaWZmX3QpLgoKVHVlIERlYyAxNCAxNDoyMToxNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBBZGQgbmV3IGNoZWNrIGZvciBTQ0NTX0dFVF9NSU5VU19HLgoJKiBjb25maWcuaC5pbjogQWRkICN1bmRlZiBTQ0NTX0dFVF9NSU5VU19HLgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBVc2UgYCQoU0NDU19PVVRQVVRfT1BUSU9OKScgaW4KCXBsYWNlIG9mIGAtRyAkQCcgaW4gU0NDUyBjb21tYW5kcy4KCShkZWZhdWx0X3ZhcmlhYmxlcykgW1NDQ1NfR0VUX01JTlVTX0ddOiBEZWZpbmUgU0NDU19PVVRQVVRfT1BUSU9OCgl0byAiLUckQCIuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IFB1dCB0b3VjaCBzdGFtcC1jb25maWcgaW4gc2Vjb25kIGFyZwoJKHNvIGl0IGdvZXMgaW4gY29uZmlnLnN0YXR1cyksIHJhdGhlciB0aGFuIGFmdGVyd2FyZC4KCgkqIGFyLmMgKGFyX21lbWJlcl9kYXRlKTogRG9uJ3QgY2FsbCBlbnRlcl9maWxlIG9uIHRoZSBhcmNoaXZlIGZpbGUKCWlmIGl0IGRvZXNuJ3QgZXhpc3QgKGJ5IGZpbGVfZXhpc3RzX3ApLgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvbWFrZS5pbmZvKTogUmVwbGFjZSBgJCRkL2Zvby5pbmZvJwoJd2l0aCBgJCRkaXIvbWFrZS5pbmZvJyBpbiBpbnN0YWxsLWluZm8gaW52b2NhdGlvbiAob29wcykuCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IE9ubHkgc2V0IExBU1RQQVRIIHNldCBQQVRIIHdoZW4KCXdlIGRvIG5vdCB1bmxpbmsgYW5kIGZyZWUgUEFUSC4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZV9kYXRhX2Jhc2UpOiBGaXggaW52ZXJ0ZWQgY2FsY3VsYXRpb24gZm9yCglhdmVyYWdlIGZpbGVzIHBlciBoYXNoIGJ1Y2tldC4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBXaGVuIHdlIHNlZSBhIE5VTCwgZ2l2ZSBvbmx5IGEgd2FybmluZyBhbmQKCXN5bnRoZXNpemUgYSBuZXdsaW5lIHRvIHRlcm1pbmF0ZSB0aGUgYnVpbGRpbmcgbGluZSAodXNlZCB0bwoJZmF0YWwpLiAgTW92ZSBmZ2V0cyBjYWxsIGludG8gdGhlIGxvb3AgY29uZGl0aW9uLCBhbmQgYWZ0ZXIgdGhlCglsb29wIHRlc3QgZmVycm9yICh1c2VkIHRvIHRlc3QgIWZlb2YgaW4gdGhlIGxvb3ApLgoKRnJpIERlYyAgMyAxNjo0MDozMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3RyZXJyb3IgaW4gQUNfSEFWRV9GVU5DUy4KClRodSBEZWMgIDIgMTU6Mzc6NTAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCglEaWZmZXJlbnRpYXRlIGRpZmZlcmVudCBmbGF2b3JzIG9mIG1pc3NpbmcgbWFrZWZpbGUgZXJyb3IgbXNncywKCXJlbW92aW5nIGdyYXR1aXRvdXMgYGZvcGVuOiAnIGFuZCBnaXZpbmcgY2FsbGVyIGZvciBpbmNsdWRlZCBtYWtlZmlsZXMuCgkqIG1pc2MuYyBbISBIQVZFX1NUUkVSUk9SXTogRGVmaW5lIG91ciBvd24gc3RyZXJyb3IgaGVyZS4KCShwZXJyb3Jfd2l0aF9uYW1lLCBwZmF0YWxfd2l0aF9uYW1lKTogVXNlIHN0cmVycm9yIGluc3RlYWQgb2YKCXJlcGxpY2F0aW5nIGl0cyBmdW5jdGlvbmFsaXR5LgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZXR1cm4gaW50IGluc3RlYWQgb2Ygdm9pZC4KCShyZWFkX2FsbF9tYWtlZmlsZXMsIHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2UgY2FsbGVycyB0byBub3RpY2UgemVybwoJcmV0dXJuIGFuZCBnaXZlIGVycm9yIG1zZy4KClRodSBOb3YgMTEgMTE6NDc6MzYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4xLgoKCSogZGVmYXVsdC5jOiBQdXQgYC1HICRAJyBiZWZvcmUgJDwgaW4gU0NDUyBjbWRzLgoKV2VkIE5vdiAxMCAwNjowNjoxNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWZ0ZXIgdHJ5aW5nIGEgdmFyaWFibGUgZGVmbiwgbm90aWNlIGlmCgl0aGUgbGluZSBiZWdpbnMgd2l0aCBhIHRhYiwgYW5kIGRpYWdub3NlIGFuIGVycm9yLgoKU3VuIE5vdiAgNyAwODowNzozNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LgoKV2VkIE5vdiAgMyAwNjo1NDozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjEwLgoKCSogaW1wbGljaXQuYyAodHJ5X2ltcGxpY2l0X3J1bGUpOiBMb29rIGZvciBhIG5vcm1hbCBydWxlIGJlZm9yZSBhbgoJYXJjaGl2ZSBydWxlLgoKRnJpIE9jdCAyOSAxNjo0NToyOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc29ydCcpOiBEb3VibGUgTldPUkRTIHdoZW4gaXQKCW92ZXJmbG93cywgaW5zdGVhZCBvZiBhZGRpbmcgZml2ZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IFJlbW92ZSBsb2FkYXZnLgoKV2VkIE9jdCAyNyAxNzo1ODozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjkuCgoJKiBmaWxlLmggKE5FV19NVElNRSk6IERlZmluZSBuZXcgbWFjcm8uCgkqIG1haW4uYyAobWFpbik6IFNldCB0aW1lIG9mIE5FV19GSUxFUyB0byBORVdfTVRJTUUsIG5vdCB0bwoJY3VycmVudCB0aW1lIHJldHVybmVkIGZyb20gc3lzdGVtLiAgUmVtb3ZlZCB2YXJpYWJsZSBOT1cuCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFVzZSBORVdfTVRJTUUgaW4gcGxhY2Ugb2YKCWN1cnJlbnQgdGltZSBoZXJlIHRvby4KClR1ZSBPY3QgMjYgMTk6NDU6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC44LgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBEb24ndCBjbGVhciBNVVNUX01BS0Ugd2hlbiBGSUxFIGhhcyBubwoJY21kcyBhbmQgIURFUFNfQ0hBTkdFRCB1bmxlc3MgYWxzbyAhTk9FWElTVC4KCk1vbiBPY3QgMjUgMTU6MjU6MjEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBXaGVuIGNvbnZlcnRpbmcgbXVsdGktd29yZCBhcmNoaXZlCglyZWZzLCBpZ25vcmUgYSB3b3JkIGJlZ2lubmluZyB3aXRoIGEgJygnLgoKRnJpIE9jdCAyMiAwMjo1MzozOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3lzL3RpbWViLmguCgkqIG1ha2UuaCBbSEFWRV9TWVNfVElNRUJfSF06IFRlc3QgdGhpcyBiZWZvcmUgaW5jbHVkaW5nIGl0LgoKVGh1IE9jdCAyMSAxNjo0ODoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjcuCgoJKiBydWxlLmMgKGNvbnZlcnRfc3VmZml4X3J1bGUpOiBOZXcgbG9jYWwgVEFSR1BFUkNFTlQuICBTZXQgaXQgdG8KCVRBUkdOQU1FKzEgZm9yICIoJS5vKSIsIHRvIFRBUkdOQU1FIGZvciAiJS4/Ii4gIFVzZSBpdCBpbiBwbGFjZSBvZgoJVEFSR05BTUUgdG8gaW5pdGlhbGl6ZSBQRVJDRU5UU1swXS4KCk1vbiBPY3QgMTggMDY6NDk6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogVXNlIEFDX0hBVkVfSEVBREVSUyh1bmlzdGQuaCkgaW5zdGVhZCBvZiBBQ19VTklTVERfSC4KCVJlbW92ZSBBQ19VU0c7IGl0IGlzIG5vIGxvbmdlciB1c2VkLgoKCSogZmlsZS5jIChwcmludF9maWxlKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwcmludF9maWxlX2RhdGFfYmFzZS4KCShwcmludF9maWxlX2RhdGFfYmFzZSk6IENhbGwgaXQuCgkqIHJ1bGUuYyAocHJpbnRfcnVsZSk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJcHJpbnRfcnVsZV9kYXRhX2Jhc2UuCgkocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBDYWxsIGl0LgoKVGh1IE9jdCAxNCAxNDo1NDowMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4KCW91dCBvZiBpbnN0YWxsX2RlZmF1bHRfaW1wbGljaXRfcnVsZXMuCgkoaW5zdGFsbF9kZWZhdWx0X2ltcGxpY2l0X3J1bGVzKTogTW92ZSBzdWZmaXggcnVsZSBjb2RlIHRoZXJlLgoJKiBtYWtlLmg6IERlY2xhcmUgaW5zdGFsbF9kZWZhdWx0X3N1ZmZpeF9ydWxlcy4KCSogbWFpbi5jIChtYWluKTogQ2FsbCBpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzIGJlZm9yZSByZWFkaW5nCgltYWtlZmlsZXMuICBNb3ZlIGNvbnZlcnRfdG9fcGF0dGVybiBjYWxsIGJlZm9yZQoJaW5zdGFsbF9kZWZhdWx0X2ltcGxpY2l0X3J1bGVzLgoKCSogam9iLmggKHN0cnVjdCBjaGlsZCk6IE1ha2UgYHBpZCcgbWVtYmVyIHR5cGUgYHBpZF90JyBpbnN0ZWFkIG9mCglgaW50Jy4KCgkqIGNvbXBhdE1ha2VmaWxlIChSQU5MSUIpOiBOZXcgdmFyaWFibGUsIHNldCBieSBjb25maWd1cmUuCgkoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIFJBTkxJQiB2YWx1ZSBkb3duIHRvIHN1Ym1ha2UuCgoJRml4ZXMgZm9yIFNDTyAzLjIgImRldnN5cyA0LjIiIGZyb20gcHNzQHRmbi5jb20gKFBldGVyIFNhbHZpdHRpKS4KCSogbWFrZS5oOiBJbmNsdWRlIDxzeXMvdGltZWIuaD4gYmVmb3JlIDx0aW1lLmg+IGZvciBTQ08gbG9zc2FnZS4KCSogam9iLmMgWyEgZ2V0ZHRhYmxlc2l6ZV0gWyEgSEFWRV9HRVREVEFCTEVTSVpFXTogSWYgTk9GSUxFIGlzIG5vdAoJZGVmaW5lZCBidXQgTk9GSUxFU19NQVggaXMsIGRlZmluZSBpdCB0byBiZSB0aGF0LgoKTW9uIE9jdCAxMSAxOTo0NzozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKG1ha2UtJCh2ZXJzaW9uKS50YXIpOiBEZXBlbmQgb24gYWNjb25maWcuaCwgc28gaXQKCWlzIGRpc3RyaWJ1dGVkLgoKU3VuIE9jdCAgMyAxNToxNTozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogQWRkIGAtRyAkQCcgdG8gU0NDUyBnZXQgY21kcy4KClR1ZSBTZXAgMjggMTQ6MTg6MjAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWRkIF4gdG8gU0hfQ0hBUlM7IGl0CglpcyBhbm90aGVyIHN5bWJvbCBmb3IgfCBpbiBzb21lIHNoZWxscy4KCSogbWFpbi5jIChtYWluKTogQWRkIGl0IHRvIENNRF9ERUZTIHF1b3RpbmcgbGlzdCBhcyB3ZWxsLgoKTW9uIFNlcCAyMCAxODowNToyNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBSZW1vdmUgJz0nIGZyb20KCVNIX0NIQVJTLiAgT25seSBwdW50IG9uICc9JyBpZiBpdCBpcyB1bnF1b3RlZCBpbiBhIHdvcmQgYmVmb3JlIHRoZQoJZmlyc3Qgd29yZCB3aXRob3V0IGFuIHVucXVvdGVkICc9Jy4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFNldCB2X2V4cG9ydCBmb3IgTUFLRUZMQUdTLgoKRnJpIFNlcCAxNyAwMDozNzoxOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBVc2UgLkRFRkFVTFQgY21kcyBmb3IgcGhvbnkgdGFyZ2V0cy4KCgkqIG1ha2UuaCBbX0FJWCAmJiBfUE9TSVhfU09VUkNFXTogRGVmaW5lIFBPU0lYLgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX2NoaWxkX3RhcmdldHMpOiBEb24ndCBkZWxldGUgcGhvbnkgZmlsZXMuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBTZXQgQ09NTUFORFNfUkVDVVJTRSBpbiBGTEFHUyBpZiB3ZQoJc2VlIGEgYCsnIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbW1hbmQgbGluZS4KClRodSBTZXAgIDkgMTc6NTc6MTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC42LgoKV2VkIFNlcCAgOCAyMDoxNDoyMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogRGVmaW5lIE1BS0VGTEFHUyB3aXRoIG9fZmlsZSwgbm90IG9fZW52LgoKTW9uIEF1ZyAzMCAxMjozMTo1OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IEZhdGFsIG9uIGFuIHVudGVybWluYXRlZCByZWZlcmVuY2UuCgpUaHUgQXVnIDE5IDE2OjI3OjUzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRGVmaW5lIG5ldyBvX2RlZmF1bHQKCXZhcmlhYmxlIGBNQUtFX1ZFUlNJT04nIGZyb20gdmVyc2lvbl9zdHJpbmcgYW5kIHJlbW90ZV9kZXNjcmlwdGlvbi4KCgkqIG1ha2UuaCAodmVyc2lvbl9zdHJpbmcsIHJlbW90ZV9kZXNjcmlwdGlvbik6IERlY2xhcmUgdGhlc2UgaGVyZS4KCSogbWFpbi5jOiBEb24ndCBkZWNsYXJlIHZlcnNpb25fc3RyaW5nLgoJKHByaW50X3ZlcnNpb24pOiBEb24ndCBkZWNsYXJlIHJlbW90ZV9kZXNjcmlwdGlvbi4KCldlZCBBdWcgMTggMTU6MDE6MjQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZyZWUgc3BhY2UgcG9pbnRlZCB0byBieSBDT05ESVRJT05BTFMKCWJlZm9yZSByZXN0b3JpbmcgdGhlIG9sZCBwb2ludGVyLgoKTW9uIEF1ZyAxNiAxNzozMzozNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQob2JqcykpOiBEZXBlbmQgb24gY29uZmlnLmguCgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBEZXBlbmQgb24gY29tcGF0TWFrZWZpbGUuCgoJKiBjb25maWd1cmUuaW46IFRvdWNoIHN0YW1wLWNvbmZpZyBhZnRlciBBQ19PVVRQVVQuCgpGcmkgQXVnIDEzIDE2OjA0OjIyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNC4KClRodSBBdWcgMTIgMTc6MTg6NTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaDogSW5jbHVkZSA8Y29uZmlnLmg+IGluc3RlYWQgb2YgImNvbmZpZy5oIi4KCldlZCBBdWcgMTEgMDI6MzU6MjUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IE1ha2UgYWxsIHZhcmlhYmxlcyBpbnRlcm5lZCBmcm9tIEVOVlAgYmUgdl9leHBvcnQuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogSW4gdl9kZWZhdWx0IGNhc2UsIGRvbid0CgljaGVjayBmb3IgYW4gb19maWxlIHZhcmlhYmxlIHRoYXQgYGdldGVudicgZmluZHMuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IE5ldyBsb2NhbCB2YXJpYWJsZSBBTllfTE9DQUw7IHNldCBpdAoJd2hpbGUgc2V0dGluZyBBTllfUkVNT1RFLiAgSWYgIUFOWV9MT0NBTCwgZG9uJ3Qgd2FpdCBmb3IgbG9jYWwga2lkcy4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgZGVjb2RlX2Vudl9zd2l0Y2hlcyBvbiBNRkxBR1MuICBET0MgVEhJUy4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6ICNpZiAwIG91dCBmcmVlaW5nIG9mIEVOVlAgc2luY2UgaXQKCWlzIGVudmlyb24uCgpNb24gQXVnICA5IDE3OjM3OjIwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMy4KCgkqIHJlbW90ZS1zdHViLmMgKHJlbW90ZV9zdGF0dXMpOiBTZXQgZXJybm8gdG8gRUNISUxEIGJlZm9yZSByZXR1cm4uCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogU2NhbiB0aGUgY2hhaW4gZm9yIHJlbW90ZSBjaGlsZHJlbiBhbmQKCW5ldmVyIGNhbGwgcmVtb3RlX3N0YXR1cyBpZiB0aGVyZSBhcmUgbm9uZS4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6ICNpZiAwIG91dCBjYWxsaW5nCgl0YXJnZXRfZW52aXJvbm1lbnQ7IGp1c3Qgc2V0IEVOVlAgdG8gZW52aXJvbiBpbnN0ZWFkLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBDaGVjayBmb3IgbmVnYXRpdmUgcmV0dXJuIGZyb20KCXJlbW90ZV9zdGF0dXMgYW5kIGZhdGFsIGZvciBpdC4KCVdoZW4gYmxvY2tpbmcgbG9jYWwgY2hpbGQgd2FpdCByZXR1cm5zIDAsIHRoZW4gdHJ5IGEgYmxvY2tpbmcgY2FsbAoJdG8gcmVtb3RlX3N0YXR1cy4KClR1ZSBBdWcgIDMgMDA6MTk6MDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IERlbGV0ZSBtYWtlLmluZm8qIGFuZCBtYWtlLmR2aSBoZXJlLgoJKGRpc3RjbGVhbik6IE5vdCBoZXJlLgoKCSogZGVwLmggKFJNXyopOiBVc2UgI2RlZmluZXMgaW5zdGVhZCBvZiBlbnVtIHRvIGF2b2lkIGxvc3NhZ2UgZnJvbQoJY29tcGlsZXJzIHRoYXQgZG9uJ3QgbGlrZSBlbnVtIHZhbHVlcyB1c2VkIGFzIGludHMuCgpNb24gQXVnICAyIDE2OjQ2OjM0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobG9hZGF2Zyk6IEFkZCAkKExPQURMSUJFUykuCgpTdW4gQXVnICAxIDE2OjAxOjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMi4KCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnLCBjaGVjay1sb2FkYXZnKTogTmV3IHRhcmdldHMuCgkoY2hlY2spOiBEZXBlbmQgb24gY2hlY2stbG9hZGF2Zy4KCgkqIGNvbXBhdE1ha2VmaWxlIChnbG9iL2xpYmdsb2IuYSk6IERlcGVuZCBvbiBjb25maWcuaC4KCgkqIG1pc2MuYyAobG9nX2FjY2Vzcyk6IFdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dC4KCkZyaSBKdWwgMzAgMDA6MDc6MDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4xLgoKVGh1IEp1bCAyOSAyMzoyNjo0MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluIChTWVNfU0lHTElTVF9ERUNMQVJFRCk6IEluIHRlc3QgcHJvZ3JhbSBpbmNsdWRlCgk8dW5pc3RkLmg+ICNpZmRlZiBIQVZFX1VOSVNURF9ILgoKCSogY29tcGF0TWFrZWZpbGUgKC5QSE9OWSk6IFB1dCBhZnRlciBgYWxsJyBldCBhbC4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0lSSVhfU1VOLgoKV2VkIEp1bCAyOCAxNzo0MToxMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LgoKTW9uIEp1bCAyNiAxNDozNjo0OSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjguCgpTdW4gSnVsIDI1IDIyOjA5OjA4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuNy4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpL21ha2UuaW5mbyk6IERvbid0IHVzZSAkKGluc3RuYW1lKS4KCVJ1biBpbnN0YWxsLWluZm8gc2NyaXB0IGlmIHByZXNlbnQuCgpGcmkgSnVsIDIzIDE2OjAzOjUwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW1NUQVRfTUFDUk9TX0JST0tFTl06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFt1dHNdLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfU1RBVF9NQUNST1NfQlJPS0VOLgoKV2VkIEp1bCAxNCAxODo0ODoxMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjYuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZWNvZ25pemUgZGlyZWN0aXZlIGAtaW5jbHVkZScsIGxpa2UKCWBpbmNsdWRlJyBidXQgc2V0cyBSTV9ET05UQ0FSRSBmbGFnLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogSWYgRklMRSBpcyBuaWwsIHVzZQoJY3VycmVudF92YXJpYWJsZV9zZXRfbGlzdCBpbiBwbGFjZSBvZiBGSUxFLT52YXJpYWJsZXMuCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6IEdldCBhbiBlbnZpcm9ubWVudCBmb3IKCXRoZSBjaGlsZCBmcm9tIHRhcmdldF9lbnZpcm9ubWVudCBpbnN0ZWFkIG9mIHVzaW5nIGVudmlyb24uCgoJKiBkZXAuaDogRGVjbGFyZSByZWFkX2FsbF9tYWtlZmlsZXMgaGVyZS4KCShSTV8qKTogRGVmaW5lIG5ldyBlbnVtIGNvbnN0YW50cy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2Vjb25kIGFyZyBpcyBGTEFHUyBpbnN0ZWFkIG9mIFRZUEUuCglUcmVhdCBpdCBhcyBhIGJpdCBtYXNrIGNvbnRhaW5pbmcgUk1fKi4KCShyZWFkX2FsbF9tYWtlZmlsZXMpOiBGb3IgZGVmYXVsdCBtYWtlZmlsZXMsIHNldCBELT5jaGFuZ2VkIHRvCglSTV9ET05UQ0FSRSBpbnN0ZWFkIG9mIDEuCgkqIG1haW4uYzogRG9uJ3QgZGVjbGFyZSByZWFkX2FsbF9tYWtlZmlsZXMgaGVyZS4KCShtYWluKTogQ2hlY2sgYGNoYW5nZWQnIG1lbWJlciBvZiByZWFkX21ha2VmaWxlcyBlbHRzIGZvciBSTV8qCglmbGFncyBpbnN0ZWFkIG9mIHNwZWNpZmljIGludGVnZXIgdmFsdWVzLgoKTW9uIEp1bCAxMiAyMjo0MjoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtzZXF1ZW50ICYmIGkzODZdOiAjdW5kZWYgUE9TSVguICBGcm9tIHRyb3N0QGNzZS5vZ2kuZWR1LgoKVGh1IEp1bCAgOCAxOTo1MToyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJZiBFTEVNIGlzIHplcm8gMCwgZnJlZSBQQVRURVJOCglhcyB3ZWxsIGFzIFZQQVRILgoJKGJ1aWxkX3ZwYXRoX2xpc3RzKTogRW1wdHkgYHZwYXRocycgYXJvdW5kIGNvbnN0cnVjdF92cGF0aF9saXN0CgljYWxsIGZvciAkKFZQQVRIKS4gIEV4cGFuZCAkKHN0cmlwICQoVlBBVEgpKSwgbm90IGp1c3QgJChWUEFUSCkuCgoJKiBydWxlLmMgKGNvbnZlcnRfc3VmZml4X3J1bGUpOiBVc2UgYWxsb2NhIGluc3RlYWQgb2YgeG1hbGxvYyBmb3IKCVBFUkNFTlRTLCB3aG9zZSBzdG9yYWdlIGlzIG5vdCBjb25zdW1lZCBieSBjcmVhdGVfcGF0dGVybl9ydWxlLgoKCSogbWFrZS5oIFtfX21pcHMgJiYgX1NZU1RZUEVfU1ZSM106ICN1bmRlZiBQT1NJWC4KCldlZCBKdW4gMzAgMTg6MTE6NDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny41LgoKCSogcnVsZS5jIChtYXhfcGF0dGVybl90YXJnZXRzKTogTmV3IHZhcmlhYmxlLgoJKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogQ29tcHV0ZSBpdHMgdmFsdWUuCgkqIHJ1bGUuaDogRGVjbGFyZSBpdC4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBNYWtlIFRSWVJVTEVTIG1heF90YXJnZXRfcGF0dGVybnMKCXRpbWVzIGJpZ2dlci4gIE1vdmUgYWRkaW5nIG5ldyBUUllSVUxFUyBlbHQgaW5zaWRlIHRoZSBpbm5lcgoJdGFyZ2V0cyBsb29wLCBzbyBlYWNoIG1hdGNoaW5nIHRhcmdldCBnZXRzIGl0cyBvd24gZWx0IGluIE1BVENIRVMKCWFuZCBDSEVDS0VEX0xBU1RTTEFTSC4KCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBJZiBTSUchPTAgc2F5IGBpbnRlcm1lZGlhdGUgZmlsZScKCWluc3RlYWQgb2YganVzdCBgZmlsZScgaW4gZXJyb3IgbXNnLgoKRnJpIEp1biAyNSAxNDo1NToxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3YpOiBUdXJuIG9mZgoJLS13YXJuLXVuZGVmaW5lZC12YXJpYWJsZXMgYXJvdW5kIGV4cGFuc2lvbiBvZiBTSEVMTCBhbmQgSUZTLgoJKiByZWFkLmMgKHRpbGRlX2V4cGFuZCk6IExpa2V3aXNlIGZvciBIT01FLgoJKHJlYWRfYWxsX21ha2VmaWxlcyk6IExpa2V3aXNlIGZvciBNQUtFRklMRVMuCgkqIHZwYXRoLmMgKGJ1aWxkX3ZwYXRoX2xpc3RzKTogTGlrZXdpc2UgZm9yIFZQQVRILgoKCSogbWFpbi5jICh3YXJuX3VuZGVmaW5lZF92YXJpYWJsZXNfZmxhZyk6IE5ldyBmbGFnIHZhcmlhYmxlLgoJKHN3aXRjaGVzKTogQWRkIC0td2Fybi11bmRlZmluZWQtdmFyaWFibGVzLgoJKiBtYWtlLmggKHdhcm5fdW5kZWZpbmVkX3ZhcmlhYmxlc19mbGFnKTogRGVjbGFyZSBpdC4KCSogZXhwYW5kLmMgKHdhcm5fdW5kZWZpbmVkKTogTmV3IGZ1bmN0aW9uLgoJKHJlZmVyZW5jZV92YXJpYWJsZSk6IENhbGwgaXQgaWYgdGhlIHZhcmlhYmxlIGlzIHVuZGVmaW5lZC4KCSh2YXJpYWJsZV9leHBhbmQpOiBJbiBzdWJzdGl0dXRpb24gcmVmLCBjYWxsIHdhcm5fdW5kZWZpbmVkIGlmIHRoZQoJdmFyaWFibGUgaXMgdW5kZWZpbmVkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3BhdHRlcm5fcnVsZXMpOiBBZGQgYCUuYzogJS53ICUuY2gnIGFuZAoJYCUudGV4OiAlLncgJS5jaCcgcnVsZXMuCgkoZGVmYXVsdF9zdWZmaXhfcnVsZXM6IC53LmMsIC53LnRleCk6IFBhc3MgdGhyZWUgYXJnczogJDwgLSAkQC4KCShkZWZhdWx0X3N1ZmZpeGVzKTogQWRkIGAuY2gnLgoKTW9uIEp1biAyMSAxNzo1NTozOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeGVzKTogUmVwbGFjZSBgLmN3ZWInIHdpdGggYC53Jy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IFJlbmFtZSBgLmN3ZWIuYycgYW5kIGAuY3dlYi50ZXgnIHRvIGAudy5jJwoJYW5kIGAudy50ZXgnLgoKRnJpIEp1biAxMSAxNDo0MjowOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQoYmluZGlyKS8kKGluc3RuYW1lKSk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaC4KClRodSBKdW4gMTAgMTg6MTQ6MDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny40LgoKCSogcmVhZC5jIChtdWx0aV9nbG9iKTogRG9uJ3QgZnJlZSBPTEQgYW5kIE9MRC0+bmFtZSBpbiB0aGUKCUZPVU5EIT0wIGZvcmsuICBVc2UgbmV3IGJsb2NrLWxvY2FsIHZhcmlhYmxlIEYgaW5zdGVhZCBvZgoJY2xvYmJlcmluZyBPTEQuCgoJKiBhci5jIChnbG9iX3BhdHRlcm5fcCk6IE5ldyBmdW5jdGlvbiwgc25hcmZlZCBmcm9tIGdsb2IvZ2xvYi5jLgoJKGFyX2dsb2IpOiBDYWxsIGl0OyByZXR1cm4gbmlsIGltbWVkaWF0ZWx5IGlmIE1FTUJFUl9QQVRURVJOCgljb250YWlucyBubyBtZXRhY2hhcmFjdGVycy4KCldlZCBKdW4gIDkgMTY6MjU6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyLmMgKGFyX2dsb2J7X21hdGNoLF9hbHBoYWNvbXBhcmV9KTogTmV3IGZ1bmN0aW9uLgoKCSogZGVwLmggWyEgTk9fQVJDSElWRVNdOiBEZWNsYXJlIGl0LgoJKiByZWFkLmMgKG11bHRpX2dsb2IpIFshIE5PX0FSQ0hJVkVTXTogVXNlIGl0IG9uIGFyY2hpdmUgbWVtYmVyIGVsdHMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGZsYWcgKDEpIHRvIHBhcnNlX2ZpbGVfc2VxLCBub3QgdG8KCW11bHRpX2dsb2IgKHdoaWNoIGRvZXNuJ3QgdGFrZSBhIDNyZCBhcmcpLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogTGlrZXdpc2UuCgkqIGRlZmF1bHQuYyAoc2V0X2RlZmF1bHRfc3VmZml4ZXMpOiBIZXJlIHRvby4KCSogZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpOiBEb24ndCBwYXNzIGdyYXR1aXRvdXMgYXJnIHRvIG11bHRpX2dsb2IuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKSBbISBOT19BUkNISVZFU106IEFkZCBwb3N0LXByb2Nlc3NpbmcKCWxvb3AgdG8gdHJhbnNsYXRlIGFyY2hpdmUgcmVmcyAibGliKGEgYikiIGludG8gImxpYihhKSBsaWIoYikiLgoKTW9uIEp1biAgNyAxOToyNjo1MSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGxkaXJzKTogQWN0dWFsbHkgcGFzcyBkaXJlY3RvcnkgbmFtZXMuCgkoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogVGVzdCBjaGdycCYmY2htb2QgZXhpdCBzdGF0dXMgd2l0aCBgaWYnOwoJaWYgaXQgZmFpbHMsIGVjaG8gYSB3YXJuaW5nIG1zZywgYnV0IGRvbid0IG1ha2UgdGhlIHJ1bGUgZmFpbC4KCgkqIHJlYWQuYyAodGlsZGVfZXhwYW5kKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHRpbGRlX2V4cGFuZC4KCShtdWx0aV9nbG9iKTogQ2FsbCBpdC4KCShjb25zdHJ1Y3RfaW5jbHVkZV9wYXRoKTogRXhwYW5kIH4gaW4gZGlyZWN0b3J5IG5hbWVzLgoJKiBkZXAuaDogRGVjbGFyZSB0aWxkZV9leHBhbmQuCgkqIG1haW4uYyAoZW50ZXJfY29tbWFuZF9saW5lX2ZpbGUpOiBFeHBhbmQgfiBhdCB0aGUgc3RhcnQgb2YgTkFNRS4KCShtYWluKTogRXhwYW5kIH4gaW4gLUMgYXJncy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRXhwYW5kIH4gaW4gRklMRU5BTUUgdW5sZXNzIFRZUEU9PTIuCgpGcmkgSnVuICA0IDEzOjM0OjQ3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBVc2UgeG1hbGxvYyBpbnN0ZWFkIG9mIGFsbG9jYSBmb3IgQVJHUy4KCgkqIG1haW4uYyAobWFpbik6IFB1dCByZXN1bHQgb2YgYWxsb2NhIGluIHRlbXBvcmFyeSB2YXJpYWJsZSB3aXRoCglzaW1wbGUgYXNzaWdubWVudCwgdG8gbWFrZSBTR0kgY29tcGlsZXIgaGFwcHkuCgpUaHUgSnVuICAzIDIwOjE1OjQ2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuMy4KCgkqIG1haW4uYyAobWFpbik6IEJlZm9yZSByZS1leGVjaW5nLCByZW1vdmUgaW50ZXJtZWRpYXRlIGZpbGVzLCBhbmQKCXByaW50IHRoZSBkYXRhIGJhc2UgdW5kZXIgLXAuICBTZXhpZXIgZGVidWdnaW5nIG1lc3NhZ2UuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsbG9jYXRlIGFuIGV4dHJhIGNvcHkgb2YgdGhlIG5hbWUKCW9mIGEgd2lubmluZyBpbnRlcm1lZGlhdGUgZmlsZSB3aGVuIHB1dHRpbmcgaXQgaW4gRk9VTkRfRklMRVMuCgpXZWQgSnVuICAyIDE2OjM4OjA4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGZsYWcgKDEpIHRvIHBhcnNlX2ZpbGVfc2VxLCBub3QgdG8KCW11bHRpX2dsb2IgKHdoaWNoIGRvZXNuJ3QgdGFrZSBhIDNyZCBhcmcpLgoKCSogZGlyLmMgKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogV2hlbiByZWFkaW5nIGRpcmVudHMsIGlnbm9yZQoJY2hhcnMgd2l0aGluIERfTkFNTEVOIHRoYXQgYXJlIE5VTHMuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IERvbid0IHNhdmVzdHJpbmcgQVJHVlswXSB0byBwdXQgaXQKCWludG8gYG90aGVyX2FyZ3MnLgoJRm9yIHN0cmluZyBzd2l0Y2gsIGRvbid0IHNhdmVzdHJpbmcgYG9wdGFyZycuCgkobWFpbik6IERvbid0IGZyZWUgZWx0cyBvZiBtYWtlZmlsZXMtPmxpc3QgdGhhdCBhcmUgIi0iLgoJVXNlIGFsbG9jYSdkIHJhdGhlciB0aGFuIHNhdmVzdHJpbmcnZCBzdG9yYWdlIGZvciBlbHRzIG9mCgltYWtlZmlsZXMtPmxpc3QgdGhhdCBhcmUgdGVtcG9yYXJ5IGZpbGUgbmFtZXMuCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogRG9uJ3QgZnJlZSAqTUFLRUZJTEVTLgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBEb24ndCBzdHJpcCBgLi8ncy4KCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IE5ldyBmdW5jdGlvbi4KCShtYWluKTogVXNlIGl0IGluIHBsYWNlIG9mIGVudGVyX2ZpbGUgZm9yIGNvbW1hbmQtbGluZSBnb2FscyBmcm9tCglvdGhlcl9maWxlcywgYW5kIGZvciBvbGRfZmlsZXMgYW5kIG5ld19maWxlcy4KCk1vbiBNYXkgMzEgMTg6NDE6NDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny4yLgoKCSogY29tcGF0TWFrZWZpbGUgKC5TVUZGSVhFUyk6IEFkZCAuaW5mby4KCSgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBGaW5kIG1ha2UuaW5mbyogaW4gY3dkIGlmIHRoZXJlLAoJZWxzZSBpbiAkc3JjZGlyLiAgVXNlIGJhc2VuYW1lIHRvIHJlbW92ZSBkaXIgbmFtZSBmcm9tIGluc3RhbGxlZCBuYW1lLgoKVGh1IE1heSAyNyAxNzozNTowMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBXaGVuIGludGVybmluZyBGT1VORF9GSUxFUywgdHJ5Cglsb29rdXBfZmlsZSBmaXJzdDsgaWYgZm91bmQsIGZyZWUgdGhlIHN0b3JhZ2UgZm9yIG91ciBjb3B5IG9mIHRoZSBuYW1lLgoKV2VkIE1heSAyNiAxNDozMToyMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjEuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEluIHVzYWdlIG1zZywgd3JpdGUgYC0tc3dpdGNoPUFSRycgb3IKCWAtLXN3aXRjaFs9T1BUQVJHXScgcmF0aGVyIHRoYW4gYC0tc3dpdGNoIEFSRycgb3IgYC0tc3dpdGNoIFtBUkddJy4KCk1vbiBNYXkgMjQgMTY6MTc6MzEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAoY29udmVydF9zdWZmaXhfcnVsZSk6IE5ldyBmdW5jdGlvbi4KCShjb252ZXJ0X3RvX3BhdHRlcm4pOiBVc2UgaXQgaW5zdGVhZCBvZiBkb2luZyBhbGwgdGhlIHdvcmsgaGVyZQoJc2V2ZXJhbCB0aW1lcy4KCUZvciB0YXJnZXQgc3VmZml4IGAuYScsIGdlbmVyYXRlIGJvdGggdGhlIGFyY2hpdmUgbWFnaWMgcnVsZSBhbmQKCXRoZSBub3JtYWwgcnVsZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBSZW1vdmUgc3RhbXAtY29uZmlnLgoKU2F0IE1heSAyMiAxNjoxNToxOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LgoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IERvbid0IHdyaXRlIGV4dHJhIHNwYWNlIGFmdGVyIGBybScuCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaC50eXBlKTogUmVtb3ZlIGB1c2FnZV9hbmRfZXhpdCcuCgkocHJpbnRfdXNhZ2VfZmxhZyk6IE5ldyB2YXJpYWJsZS4KCShzd2l0Y2hlczogLS1oZWxwKTogTWFrZSB0eXBlIGBmbGFnJywgdG8gc2V0IHByaW50X3VzYWdlX2ZsYWcuCgkoaW5pdF9zd2l0Y2hlcyk6IFJlbW92ZSBgdXNhZ2VfYW5kX2V4aXQnIGNhc2UuCgkoZGVjb2RlX3N3aXRjaGVzKTogTGlrZXdpc2UuCgkoZGVjb2RlX3N3aXRjaGVzKTogUHJpbnQgdXNhZ2UgaWYgcHJpbnRfdXNhZ2VfZmxhZyBpcyBzZXQuCglXaGVuIHByaW50aW5nIHVzYWdlLCBkaWUgd2l0aCBzdGF0dXMgb2YgQkFELgoJKG1haW4pOiBEaWUgd2l0aCAwIGlmIHByaW50X3ZlcnNpb25fZmxhZy4KCkZyaSBNYXkgMjEgMTY6MDk6MjggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ni4KCldlZCBNYXkgMTkgMjE6MzA6NDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsZGlycyk6IE5ldyB0YXJnZXQuCgkoaW5zdGFsbCk6IERlcGVuZCBvbiBpdC4KClN1biBNYXkgMTYgMjA6MTU6MDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NS4yLgoKRnJpIE1heSAxNCAxNjo0MDowOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJbiByZW1vdmFsIGxvb3AgZm9yIERJUlBBVEg9PTAsCglzZXQgTEFTVFBBVEggdG8gUEFUSCwgbm90IE5FWFQuCgoJKiBkaXIuYyAocmVhZF9kaXJzdHJlYW0pOiBCcmVhayBvdXQgb2YgbG9vcCBhZnRlciBpbmNyZW1lbnRpbmcKCURTLT5idWNrZXRzIHN1Y2ggdGhhdCBpdCByZWFjaGVzIERJUkZJTEVfQlVDS0VUUzsgYXZvaWQgdHJ5aW5nIHRvCglkZXJlZmVyZW5jZSBEUy0+Y29udGVudHMtPmZpbGVzW0RJUkZJTEVfQlVDS0VUU10uCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDbGVhciBub190YXJnZXRzIGFmdGVyIHJlYWRpbmcgYQoJdGFyZ2V0ZnVsIHJ1bGUgbGluZS4KCgkqIG1haW4uYyAobWFpbik6IElmIHByaW50X3ZlcnNpb25fZmxhZyBpcyBzZXQsIGV4aXQgYWZ0ZXIgcHJpbnRpbmcKCXRoZSB2ZXJzaW9uLgoJKHN3aXRjaGVzKTogQ2hhbmdlIC0tdmVyc2lvbiBkb2NzdHJpbmcgdG8gc2F5IGl0IGV4aXRzLgoKCSogbWFrZS5oIFtidXR0ZXJmbHldOiAjdW5kZWYgUE9TSVguCgpXZWQgTWF5IDEyIDE1OjIwOjIxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY1LjEuCgoJKiBhcnNjYW4uYyAoYXJfc2NhbikgWyEgQUlBTUFHXTogRG9uJ3QgZGVjbGFyZSBMT05HX05BTUUuCglbQUlBTUFHXTogUGFzcyBUUlVOQ0FURSBmbGFnIGFyZyB0byAoKkZVTkNUSU9OKSwgYWx3YXlzIHplcm8uCgoJKiBmdW5jdGlvbi5jIChoYW5kbGVfZnVuY3Rpb24pOiBVc2UgZmF0YWwgaW5zdGVhZCBvZgoJbWFrZWZpbGVfZmF0YWwgd2hlbiByZWFkaW5nX2ZpbGVuYW1lIGlzIG5pbC4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0dFVEdST1VQU19ULgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBVc2UgR0VUR1JPVVBTX1QgaW4gcGxhY2Ugb2YgZ2lkX3QuCgpTdW4gTWF5ICA5IDE1OjQxOjI1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjUuCgpGcmkgTWF5ICA3IDE4OjM0OjU2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChoYW5kbGVfZnVuY3Rpb24pOiBGYXRhbCBmb3IgdW5tYXRjaGVkIHBhcmVuLgoKVGh1IE1heSAgNiAxNjoxMzo0MSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LjMuCgoJKiBjb21tYW5kcy5jIChoYW5kbGluZ19mYXRhbF9zaWduYWwpOiBOZXcgdmFyaWFibGUuCgkoZmF0YWxfZXJyb3Jfc2lnbmFsKTogU2V0IGl0LgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IEF2b2lkIG5vbnJlZW50cmFudCBvcGVyYXRpb25zIGlmIHRoYXQgaXMgc2V0LgoJKiBtYWtlLmg6IERlY2xhcmUgaGFuZGxpbmdfZmF0YWxfc2lnbmFsLgoKCSogZXhwYW5kLmMgKHJlZmVyZW5jZV92YXJpYWJsZSk6IE5ldyBmdW5jdGlvbiwgc25pcHBldCBvZiBjb2RlCglicm9rZW4gb3V0IG9mIHNpbXBsZS1yZWZlcmVuY2UgY2FzZSBvZiB2YXJpYWJsZV9leHBhbmQuCgkodmFyaWFibGVfZXhwYW5kKTogVXNlIGl0IGZvciBzaW1wbGUgcmVmcy4KCSh2YXJpYWJsZV9leHBhbmQpOiBXaGVuIGNoZWNraW5nIGZvciBhIGNvbXB1dGVkIHZhcmlhYmxlIG5hbWUsCglub3RpY2UgYSBjb2xvbiB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgZmluYWwgQ0xPU0VQQVJFTi4gIEV4cGFuZAoJb25seSB1cCB0byB0aGUgY29sb24sIGFuZCB0aGVuIHJlcGxhY2UgdGhlIHBlbmRpbmcgdGV4dCB3aXRoIGEKCWNvcHkgY29udGFpbmluZyB0aGUgZXhwYW5kZWQgbmFtZSBhbmQgZmFsbCB0aHJvdWdoIHRvIHN1YnN0IHJlZgoJaGFuZGxpbmcuCgkodmFyaWFibGVfZXhwYW5kKTogRG9uJ3QgYm90aGVyIGV4cGFuZGluZyB0aGUgbmFtZSBpZiBhIGNvbG9uCglhcHBlYXJzIGJlZm9yZSB0aGUgZmlyc3QgJC4KCShleHBhbmRfYXJndW1lbnQpOiBVc2UgYWxsb2NhIGluc3RlYWQgb2Ygc2F2ZXN0cmluZy4KCSh2YXJpYWJsZV9leHBhbmQpOiBGb3Igc3Vic3QgcmVmLCBleHBhbmQgYm90aCBzaWRlcyBvZiA9IGJlZm9yZQoJcGFzc2luZyB0byBbcGF0XXN1YnN0X2V4cGFuZC4gIFVzZSBmaW5kX3BlcmNlbnQgaW5zdGVhZCBvZiBsaW5kZXgKCXRvIGNoZWNrIHRoZSBsaHMgZm9yIGEgJS4KCldlZCBNYXkgIDUgMTQ6NDU6NTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4yLgoKTW9uIE1heSAgMyAxNzowMDozMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtBSUFNQUddOiBBYm9ydCBpZiBUUlVOQ0FURUQgaXMgbm9uemVyby4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFBhc3MgZXh0cmEgYXJnIG9mIDEgdG8gcGFyc2VfZmlsZV9zZXEsCglub3QgdG8gbXVsdGlfZ2xvYi4KClRodSBBcHIgMjkgMTk6NDc6MzMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4xLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pOiBOZXcgbG9jYWwgZmxhZyB2YXIgTE9OR19OQU1FLiAgU2V0IGl0IHdoZW4KCXdlIHJlYWQgdGhlIG1lbWJlciBuYW1lIGluIGFueSBvZiB0aGUgZmFzaGlvbnMgdGhhdCBhbGxvdyBpdCB0byBiZQoJYXJiaXRyYXJpbHkgbG9uZy4gIFBhc3MgaXRzIG5lZ2F0aW9uIHRvIEZVTkNUSU9OLgoJKGRlc2NyaWJlX21lbWJlcik6IFRha2UgVFJVTkNBVEVEIGZyb20gYXJfc2NhbiBhbmQgcHJpbnQgaXQuCgkoYXJfbmFtZV9lcXVhbCk6IFRha2UgbmV3IGFyZyBUUlVOQ0FURUQ7IGlmIG5vbnplcm8sIGNvbXBhcmUgb25seQoJdGhlIGZpcnN0IHNpemVvZiAoc3RydWN0IGFyX2hkci5hcl9uYW1lKSBjaGFycy4KCShhcl9tZW1iZXJfcG9zKTogVGFrZSBUUlVOQ0FURUQgZnJvbSBhcl9zY2FuLCBwYXNzIHRvIGFyX25hbWVfZXF1YWwuCgkqIGFyLmMgKGFyX21lbWJlcl9kYXRlXzEpOiBMaWtld2lzZS4KCldlZCBBcHIgMjggMjE6MTg6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQmVmb3JlIGNhbGxpbmcgc3RhcnRfam9iX2NvbW1hbmQgdG8gc3RhcnQKCXRoZSBuZXh0IGNvbW1hbmQgbGluZSwgcmVzZXQgQy0+cmVtb3RlIGJ5IGNhbGxpbmcgc3RhcnRfcmVtb3RlX2pvYl9wLgoKTW9uIEFwciAyNiAxNTo1NjoxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIChhcl9zY2FuKTogTmV3IGxvY2FsIHZhciBOQU1FTUFQLgoJSW4gbG9vcCwgcmVuYW1lIE5BTUUgdG8gTkFNRUJVRjsgbmV3IHZhciBOQU1FIGlzIGEgcG9pbnRlcjsgbmV3CglmbGFnIElTX05BTUVNQVAuICBXaGVuIGV4dHJhY3RpbmcgdGhlIG1lbWJlciBuYW1lLCBhbHdheXMgcHV0IGEKCW51bGwgYXQgaXRzIGVuZCBmaXJzdC4gIElmIHRoZSBuYW1lIGlzICIvLyIgb3IgIi9BUkZJTEVOQU1FUyIsIHNldAoJSVNfTkFNRU1BUC4gIElmIHdlIGhhdmUgYWxyZWFkeSByZWFkIGluIE5BTUVNQVAsIGFuZCBOQU1FIGxvb2tzCglsaWtlICIgL04iLCBnZXQgZnVsbCBuYW1lIGZyb20gTkFNRU1BUCtOLgoJRWxzZSBpZiBOQU1FIGxvb2tzIGxpa2UgIiMxL04iLCByZWFkIE4gY2hhcnMgZnJvbSB0aGUKCWVsdCBkYXRhIHRvIGJlIHRoZSBmdWxsIG5hbWUuICBBdCBlbmQgb2YgbG9vcCwgaWYgSVNfTkFNRU1BUCwgcmVhZAoJdGhlIGVsdCdzIGRhdGEgaW50byBhbGxvY2EnZCBOQU1FTUFQLgoJKGFyX25hbWVfZXF1YWwpOiAjaWYgMCB0cnVuY2F0aW5nIGNvZGUuCgoJKiBtYWtlLmg6IERvbid0IGRlY2xhcmUgdmZvcmsgYXQgYWxsLiAgSXQgcmV0dXJucyBpbnQgYW55d2F5LAoJdW5sZXNzIDx1bmlzdGQuaD4gZGVjbGFyZWQgaXQ7IGFuZCB3ZSBjb25mbGljdGVkIHdpdGggc29tZSBzeXN0ZW1zLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogSWYgRkxBR1NUUklOR1sxXSBpcyAnLScsIGRlZmluZQoJTUFLRUZMQUdTIHRvIGFsbCBvZiBGTEFHU1RSSU5HLCBub3QgJkZMQUdTVFJJTkdbMV0uICBEb24ndCB3YW50IHRvCglkZWZpbmUgaXQgdG8gc29tZXRoaW5nIGxpa2UgIi1uby1wcmludC1kaXJlY3RvcnkiLgoJVXNlICVnIGZvcm1hdCBpbnN0ZWFkIG9mICVmIGZvciBmbG9hdGluZy12YWx1ZWQgdGhpbmdzLgoKVGh1IEFwciAyMiAxODo0MDo1OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKE1ha2VmaWxlLmluKTogVXNlIGEgc3Vic3RpdHV0aW9uIHJlZiBvbiBub2xpYi1kZXBzCgl0byBjaGFuZ2UgcmVtb3RlLSUuZGVwIHRvIHJlbW90ZS1zdHViLmRlcC4KCldlZCBBcHIgMjEgMTU6MTc6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4KCkZyaSBBcHIgMTYgMTQ6MjI6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsKTogUmVtb3ZlIC0gcHJlZml4IGZyb20gY2hncnArY2htb2QuCgoJKiBWZXJzaW9uIDMuNjMuOC4KClRodSBBcHIgMTUgMTg6MjQ6MDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFjY29uZmlnLmg6IE5ldyBmaWxlOyBjb250YWlucyAiI3VuZGVmIFNDQ1NfR0VUIiBmb3IgYXV0b2hlYWRlci4KCSogY29uZmlndXJlLmluOiBJZiAvdXNyL3NjY3MvZ2V0IGV4aXN0cywgZGVmaW5lIFNDQ1NfR0VUIHRvIHRoYXQsCgllbHNlIHRvICJnZXQiLgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKTogU2V0IEdFVCB0byBtYWNybyBTQ0NTX0dFVC4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBUYWtlIGV4dHJhIGFyZyBTVFJJUDsgc3RyaXAgYC4vJyBvbmx5CglpZiBub256ZXJvLiAgSSBob3BlIHRoaXMgaXMgdGhlIGxhc3QgdGltZSB0aGlzIGFyZ3VtZW50IGlzIGFkZGVkCglvciByZW1vdmVkLgoJKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIGluY2x1ZGUgZmlsZSBuYW1lcy4KCVBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgdGFyZ2V0IGZpbGUgbmFtZXMuCglQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIHN0YXRpYyBwYXR0ZXJuIHRhcmdldCBwYXR0ZXJuIG5hbWVzLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogUGFzcyBpdCAxIHdoZW4gcGFyc2luZyBydWxlIGRlcHMuCgkqIGRlZmF1bHQuYyAoc2V0X2RlZmF1bHRfc3VmZml4ZXMpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nCglkZWZhdWx0X3N1ZmZpeGVzLgoJKiBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYik6IFBhc3MgaXQgMCBoZXJlLgoKV2VkIEFwciAxNCAxMTozMjowNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChsb2dfYWNjZXNzKTogTmV3IGZ1bmN0aW9uLgoJKHtpbml0LHVzZXIsbWFrZSxjaGlsZH1fYWNjZXNzKTogQ2FsbCBpdC4KCShjaGlsZF9hY2Nlc3MpOiBBYm9ydCBpZiAhYWNjZXNzX2luaXRlZC4KCgkqIG1haW4uYyAoc3dpdGNoZXM6IC0tbm8tcHJpbnQtZGlyZWN0b3J5KTogVXNlIDEgaW5zdGVhZCBvZiAtMSBmb3IKCXNpbmdsZS1sZXR0ZXIgb3B0aW9uLgoJKGluaXRfc3dpdGNoZXMsIGRlY29kZV9zd2l0Y2hlcywgZGVmaW5lX21ha2VmbGFncyk6IEFuIG9wdGlvbiB3aXRoCglubyBzaW5nbGUtbGV0dGVyIHZlcnNpb24gaXMgbm8gbG9uZ2VyIGluZGljYXRlZCBieSBhIHZhbHVlIG9mIC0xOwoJaW5zdGVhZCBhIHZhbHVlIHRoYXQgaXMgIWlzYWxudW0uCgkoaW5pdF9zd2l0Y2hlcyk6IERvbid0IHB1dCBzdWNoIHN3aXRjaGVzIGludG8gdGhlIHN0cmluZywgb25seQoJaW50byB0aGUgbG9uZ19vcHRpb24gdGFibGUuCgoJKiBtYWtlLmggWyFOU0lHXSBbIV9OU0lHXTogI2RlZmluZSBOU0lHIDMyLgoKCSogam9iLmMgW0hBVkVfV0FJVFBJRF06IFJlbW92ZSAjdW5kZWYgSEFWRV9VTklPTl9XQUlULiAgQUlYJ3MKCWJzZGNjIGRlZmluZWQgV0lGKiB0byB1c2UgdW5pb24gd2FpdC4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogQ2hhbmdlIG1lbWJlciBgYycgdG8gdHlwZSBpbnQuCgkoc3dpdGNoZXMpOiBNYWtlIGNvbnN0LgoJKGRlY29kZV9zd2l0Y2hlcyk6IFVzZSBgY29uc3Qgc3RydWN0IGNvbW1hbmRfc3dpdGNoIConLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBMaWtld2lzZS4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBBZGQgYC1vICRAJyB0byBtYWtlaW5mbyBydWxlcy4KCk1vbiBBcHIgMTIgMTI6MzA6MDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My43LgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0hFQURFUlMpOiBDaGVjayBmb3Igc3RyaW5nLmggYW5kIG1lbW9yeS5oLgoJUmVtb3ZlZCBBQ19NRU1PUllfSC4KCSogbWFrZS5oIFtVU0csIE5lWFRdOiBEb24ndCB0ZXN0IHRoZXNlLgoJW0hBVkVfU1RSSU5HX0hdOiBUZXN0IHRoaXMgdG8gaW5jbHVkZSBzdHJpbmcuaCBhbmQgZGVmaW5lIEFOU0lfU1RSSU5HLgoJW0hBVkVfTUVNT1JZX0hdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBORUVEX01FTU9SWV9ILgoJWyEgQU5TSV9TVFJJTkddOiBQdXQgZGVjbHMgb2YgYmNvcHkgZXQgYWwgaGVyZS4KCVtzcGFyY106IERvbid0IHRlc3QgdGhpcyBmb3IgYWxsb2NhLmg7IEhBVkVfQUxMT0NBX0ggaXMgc3VmZmljaWVudC4KCVtIQVZFX1NJR1NFVE1BU0tdOiBUZXN0IHRoaXMgcmF0aGVyIHRoYW4gVVNHLgoJW19fR05VX0xJQlJBUllfXyB8fCBQT1NJWF06IERvbid0ICNpbmNsdWRlIDx1bmlzdGQuaD4gYWdhaW4uCgkqIG1haW4uYyAobWFpbik6IEhhbmRsZSBTSUdDSExEIGlmIGRlZmluZWQsIGFuZCBTSUdDTEQgaWYgZGVmaW5lZC4KCUl0IGRvZXNuJ3QgaHVydCB0byBkbyBib3RoIGlmIHRoZXkgYXJlIGJvdGggZGVmaW5lZCwgYW5kIHRlc3RpbmcKCVVTRyBpcyB1c2VsZXNzLgoJKiBkaXIuYzogUmF0aW9uYWxpemUgZGlyZWN0b3J5IGhlYWRlciBjb25kaXRpb25hbHMuCgkqIGFyc2Nhbi5jIFtIQVZFX0ZDTlRMX0hdOiBUZXN0IHRoaXMgcmF0aGVyIHRoYW4gVVNHIHx8IFBPU0lYLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeGVzKTogQWRkIGAudHhpbmZvJy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IEFkZCBgLnR4aW5mby5pbmZvJyBhbmQgYC50eGluZm8uZHZpJyBydWxlcy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmVwbGFjZSBSRUNVUlNJVkUgZmxhZwoJd2l0aCBlbnVtIEZMQVZPUiwgd2hpY2ggY2FuIGJlIHNpbXBsZSwgcmVjdXJzaXZlLCBvciBhcHBlbmQuCglSZWNvZ25pemUgKz0gYXMgYXBwZW5kIGZsYXZvci4gIFNldCBuZXcgdmFyaWFibGUgVkFMVUUgaW4gYSBzd2l0Y2gKCW9uIEZMQVZPUi4gIEZvciBhcHBlbmQgZmxhdm9yLCBwcmVwZW5kIHRoZSB2YXJpYWJsZSdzIG9sZCB2YWx1ZS4KCUlmIHRoZSB2YXJpYWJsZSB3YXMgcHJldmlvdXNseSBkZWZpbmVkIHJlY3Vyc2l2ZSwgc2V0IEZMQVZPUiB0bwoJcmVjdXJzaXZlOyBpZiBpdCB3YXMgZGVmaW5lZCBzaW1wbGUsIGV4cGFuZCB0aGUgbmV3IHZhbHVlIGJlZm9yZQoJYXBwZW5kaW5nIGl0IHRvIHRoZSBvbGQgdmFsdWUuICBQYXNzIFJFQ1VSU0lWRSBmbGFnIHRvCglkZWZpbmVfdmFyaWFibGUgaWZmIEZMQVZPUiA9PSByZWN1cnNpdmUuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFVzZSBhbGxvY2EgYW5kIGJjb3B5IGZvcgoJTkFNRSwgaW5zdGVhZCBvZiBzYXZlc3RyaW5nLiAgTWlnaHQgYXMgd2VsbCB1c2Ugc3RhY2sgc3RvcmFnZQoJc2luY2Ugd2UgZnJlZSBpdCBpbW1lZGlhdGVseSBhbnl3YXkuCgpUaHUgQXByICA4IDE4OjA0OjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2JzKTogTW92ZSBkZWNsIG9mIEpPQiBvdXRzaWRlIG9mIGxvb3AuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBSZW5hbWUgYHN0cnVjdCBmbGFnJyBtZW1iZXIgYHN3aXRjaCcKCXRvIGBjcycsIHdoaWNoIGlzIG5vdCBhIHJlc2VydmVkIHdvcmQuCgpXZWQgQXByICA3IDE1OjMwOjUxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobmV3X2pvYik6IENhbGwgc3RhcnRfd2FpdGluZ19qb2JzIGZpcnN0IHRoaW5nLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogQ2hhbmdlZCByZXR1cm4gdHlwZSBmcm9tIHZvaWQgdG8gaW50LgoJUmV0dXJuIDAgd2hlbiBwdXR0aW5nIHRoZSBjaGlsZCBvbiB0aGUgd2FpdGluZ19qb2JzIGNoYWluLgoJKHN0YXJ0X3dhaXRpbmdfam9icyk6IERvbid0IGNoZWNrIGxvYWQgYW5kIGpvYl9zbG90cyBoZXJlLgoJQWx3YXlzIHRha2UgYSBqb2Igb2ZmIHRoZSBjaGFpbiBhbmQgY2FsbCBzdGFydF93YWl0aW5nX2pvYiBvbiBpdDsKCWdpdmUgdXAgYW5kIHJldHVybiB3aGVuIHN0YXJ0X3dhaXRpbmdfam9iIHJldHVybnMgemVyby4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFnczogc3RydWN0IGZsYWcpOiBDaGFuZ2UgbWVtYmVyIGBjaGFyIGMnIHRvCglgc3RydWN0IGNvbW1hbmRfc3dpdGNoICpzd2l0Y2gnLgoJKEFERF9GTEFHKTogU2V0IHRoYXQgdG8gQ1MgaW5zdGVhZCBvZiBDUy0+Yy4KCUlmIENTLT5jIGlzIC0xLCBpbmNyZW1lbnQgRkxBR1NMRU4gZm9yIHRoZSBsb25nIG5hbWUuCglXaGVuIHdyaXRpbmcgb3V0IEZMQUdTLCBoYW5kbGUgRkxBR1MtPnN3aXRjaC0+YyA9PSAtMSBhbmQgd3JpdGUKCXRoZSBsb25nIG5hbWUgaW5zdGVhZC4KCgkqIGNvbXBhdE1ha2VmaWxlIChzdGFtcC1jb25maWcpOiBOZXcgdGFyZ2V0IG9mIG9sZCBjb25maWcuaCBydWxlLgoJVG91Y2ggc3RhbXAtY29uZmlnIGFmdGVyIHJ1bm5pbmcgY29uZmlnLnN0YXR1cy4KCShjb25maWcuaCk6IEp1c3QgZGVwZW5kIG9uIHN0YW1wLWNvbmZpZywgYW5kIGhhdmUgZW1wdHkgY29tbWFuZHMuCgpNb24gQXByICA1IDIwOjE0OjAyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyBbSEFWRV9XQUlUUElEXTogI3VuZGVmIEhBVkVfVU5JT05fV0FJVC4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfSEFWRV9GVU5DUyk6IENoZWNrIGZvciBwc2lnbmFsLgoKRnJpIEFwciAgMiAxNzoxNTo0NiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb25nX29wdGlvbl9hbGlhc2VzKTogUmVtb3ZlICJuZXciOyBpdCBpcyBhbHJlYWR5IGFuCgl1bmFtYmlndW91cyBwcmVmaXggb2YgIm5ldy1maWxlIi4KClN1biBNYXIgMjggMTY6NTc6MTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNi4KCldlZCBNYXIgMjQgMTQ6MjY6MTkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBXaGVuIGFkZGluZyB0aGUKCW5hbWUtd2l0aGluLWRpcmVjdG9yeSBhdCB0aGUgZW5kIG9mIE5BTUUsIGFuZCB3ZSBkb24ndCBhZGQgYQoJc2xhc2gsIGRvbid0IGNvcHkgRklMRU5BTUUgaW4gb25lIGNoYXIgdG9vIGZhciBpbnRvIE5BTUUuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEZpbmQgZGVmYXVsdF9zaGVsbCdzCglsZW5ndGggd2l0aCBzdHJsZW4sIG5vdCBudW1lcm9sb2d5LgoKV2VkIE1hciAxNyAyMDowMjoyNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQWRkIHRoZSBlbHRzIG9mIGEgc3RyaW5nIG9wdGlvbiBpbgoJcmV2ZXJzZSBvcmRlciwgc28gdGhleSBjb21lIG91dCByaWdodCB3aGVuIHJldmVyc2VkIGFnYWluLgoKRnJpIE1hciAxMiAxNTozODo0NSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlLmluZm8pOiBVc2UgYC1vIG1ha2UuaW5mbycuCgpUaHUgTWFyIDExIDE0OjEzOjAwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKFJFTU9URSk6IFNldCB0byBAUkVNT1RFQDsgY2hhbmdlIGNvbW1lbnRzIHRvCglyZWZsZWN0IG5ldyB1c2UuCgkob2Jqcyk6IFJlcGxhY2UgcmVtb3RlLm8gd2l0aCByZW1vdGUtJChSRU1PVEUpLm8uCgkoc3Jjcyk6IFJlcGxhY2UgcmVtb3RlLmMgd2l0aCByZW1vdGUtJChSRU1PVEUpLmMuCgkocmVtb3RlLm8pOiBSdWxlIHJlbW92ZWQuCgoJKiBjb25maWd1cmUuaW4gKFJFTU9URSk6IFN1YnN0IHRoaXMgaW4gTWFrZWZpbGUgZXQgYWw7IGRlZmF1bHQgInN0dWIiLgoJVXNlIEFDX1dJVEggdG8gZ3JvayAtLXdpdGgtY3VzdG9tcyBhcmcgdG8gc2V0IFJFTU9URT1jc3Rtcy4KCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogRmlsdGVyIG91dCByZW1vdGUtJSBmcm9tIG9ianMgbGlzdC4KCSogYnVpbGQudGVtcGxhdGUgKFJFTU9URSk6IE5ldyB2YXI7IHNldCB0byBAUkVNT1RFQC4KCShvYmpzKTogQWRkIHJlbW90ZS0ke1JFTU9URX0uby4KCldlZCBNYXIgMTAgMTU6MTI6MjQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogRml4ICJkZXBlbmRlbnQiLT4iZGVwZW5kZW5jeSIgaW4KCSJSZWplY3RpbmcgaW1wb3NzaWJsZSIgLWQgbXNnLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBOZXcgbG9jYWwgdmFycyB7T0xELE5FV31CVUNLRVQuICBTdG9yZQoJbW9kJ2QgdmFsdWVzIHRoZXJlOyBuZXZlciBtb2Qge09MRCxORVd9SEFTSC4KCk1vbiBNYXIgIDggMTM6MzI6NDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyBbZXRhMTBdOiBJbmNsdWRlIDxmY250bC5oPiBpbnN0ZWFkIG9mIDxzeXMvZmlsZS5oPi4KCgkqIGNvbXBhdE1ha2VmaWxlIChWUEFUSCk6IFNldCB0aGlzIHRvIEBzcmNkaXJALgoJKHNyY2Rpcik6IFNldCB0aGlzIHRvICQoVlBBVEgpLgoKCSogbWFpbi5jIChtYWluKTogTmV3IGxvY2FsIHZhciBESVJFQ1RPUllfQkVGT1JFX0NIRElSLiAgU2F2ZSBpbiBpdAoJYSBjb3B5IG9mIENVUlJFTlRfRElSRUNUT1JZIGFmdGVyIHRoZSBmaXJzdCBnZXRjd2QuICBVc2UgaXQKCWluc3RlYWQgb2YgQ1VSUkVOVF9ESVJFQ1RPUlkgd2hlbiBjaGRpcidpbmcgYmFjayBiZWZvcmUgcmUtZXhlY2luZy4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFBhc3MgbWlzc2luZyBTRUFSQ0ggYXJnIHRvIGZfbXRpbWUuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZW1vdmUgZXh0cmFuZW91cyBhcmcgdG8gcGFyc2VfZmlsZV9zZXEuCgpNb24gRmViIDIyIDE0OjE5OjM4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogVXNlICwgaW5zdGVhZCBvZiAvCglhcyB0aGUgc2VkIGRlbGltaXRlciBjaGFyLgoKU3VuIEZlYiAyMSAxNDoxMTowNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjQuCgoJKiBydWxlLmggKHN0cnVjdCBydWxlKTogUmVtb3ZlZCBgc3ViZGlyJyBtZW1iZXIuCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IE5vIG5lZWQgdG8gY2xlYXIgaXQuCgkoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBTZXQgdGhlIGBjaGFuZ2VkJyBmbGFnIGluIGVhY2ggZGVwCgl0aGF0IHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGRpcmVjdG9yeS4gIE5vIGxvbmdlciBzZXQgcnVsZS1nbG9iYWwKCWBzdWJkaXInIGZsYWcgd2l0aCB0aGF0IGluZm9ybWF0aW9uLgoJKHByaW50X3J1bGVfZGF0YV9iYXNlKTogRG9uJ3QgcmVjb3JkIGluZm8gb24gYHN1YmRpcicgZmxhZ3MuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IENoZWNrIHRoZSBERVAtPmNoYW5nZWQgZmxhZyByYXRoZXIKCXRoYW4gdGhlIChub3cgZ29uZSkgUlVMRS0+c3ViZGlyIGZsYWcuICBBbHNvIHRlc3QgQ0hFQ0tfTEFTVFNMQVNIOwoJaWYgaXQgaXMgc2V0LCB0aGUgZmlsZSBtaWdodCBleGlzdCBldmVuIHRob3VnaCB0aGUgREVQLT5jaGFuZ2VkCglmbGFnIGlzIHNldC4KCgkqIHJ1bGUuYyAoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBQYXNzICIiLCBub3QgIi4iLCBhcyBmaWxlCgluYW1lIGFyZyB0byBkaXJfZmlsZV9leGlzdHNfcCB0byBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIGRpcmVjdG9yeS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogSW5zaWRlIGRlcC1maW5kaW5nIGxvb3AsIHNldAoJQ0hFQ0tfTEFTVFNMQVNIIGZyb20gdGhlIHZhbHVlIHJlY29yZGVkIGluIENIRUNLRURfTEFTVFNMQVNIW0ldLAoJcmF0aGVyIHRoYW4gY29tcHV0aW5nIGl0IGFuZXcuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBNdXN0IGFsbG9jYSBzcGFjZSBmb3IgUEVSQ0VOVAoJYW5kIGNvcHkgaXQsIHRvIGF2b2lkIGxlYXZpbmcgdGhlIHRyYWlsaW5nIGApJyBpbiB0aGUgdmFsdWUuCgoJKiBtaXNjLmMgKHJlbW92ZV9jb21tZW50cyk6IEZpeGVkIGJhY2tzbGFzaC1jaGVja2luZyBsb29wCgljb25kaXRpb24gdG8gYWxsb3cgaXQgdG8gbG9vayBhdCB0aGUgZmlyc3QgY2hhciBvbiB0aGUgbGluZS4KCVAyID49IExJTkUsIG5vdCBQMiA+IExJTkUuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogQmVmb3JlIG1vdmluZyAkQC5uZXcgdG8KCSRALCBybSAkQC5vbGQgYW5kIG12ICRAIHRvICRALm9sZC4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVGFrZSBuZXcgYXJncyBGSUxFTkFNRSBhbmQKCUxJTkVOTy4gIEZhdGFsIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGlzIGVtcHR5LgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2UgY2FsbGVycy4KCSogbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBjb21wYXRNYWtlZmlsZSAoZ3JvdXApOiBEZWZpbmUgdG8gQEtNRU1fR1JPVVBALCBhdXRvY29uZiBtYWdpYwoJdGhhdCBjb25maWd1cmUgd2lsbCByZXBsYWNlIHdpdGggdGhlIGdyb3VwIG93bmluZyAvZGV2L2ttZW0uCgpNb24gRmViICA4IDE0OjI2OjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAodnBhdGhfc2VhcmNoKTogVGFrZSBzZWNvbmQgYXJnIE1USU1FX1BUUiwgcGFzcyB0aHJ1IHRvCglzZWxlY3RpdmVfdnBhdGhfc2VhcmNoLgoJKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBUYWtlIHNlY29uZCBhcmcgTVRJTUVfUFRSLgoJSWYgdGhlIGRpciBjYWNoZSB0aGlua3MgYSBmaWxlIGV4aXN0cywgc3RhdCBpdCB0byBtYWtlIHN1cmUsIGFuZAoJcHV0IHRoZSBtb2R0aW1lIGluICpNVElNRV9QVFIuCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFRha2Ugc2Vjb25kIGFyZyBNVElNRV9QVFIuCglXaGVuIHdlIGZpbmQgYSBtYXRjaCwgcmVjb3JkIGl0cyBtdGltZSB0aGVyZS4KCVBhc3MgTVRJTUVfUFRSIHRocm91Z2ggdG8gdnBhdGhfc2VhcmNoIHRvIGRvIHNhbWUuCgkoZl9tdGltZSk6IFBhc3MgJk1USU1FIGFzIG5ldyAybmQgYXJnIHRvIHt2cGF0aCxsaWJyYXJ5fV9zZWFyY2g7CglzdG9yZSBpdCBpbiBGSUxFLT5sYXN0X210aW1lIGlmIHNldCBub256ZXJvLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFBhc3MgbmlsIDJuZCBhcmcgdG8gdnBhdGhfc2VhcmNoLgoKCSogY29tcGF0TWFrZWZpbGUgKHJlbW90ZS5vKTogUHJlcGVuZCBgJChzcmNkaXIpLycgdG8gYHJlbW90ZS0qLmMnLAoJc28gZ2xvYmJpbmcgbG9va3Mgc29tZXdoZXJlIGl0IHdpbGwgZmluZCB0aGluZ3MuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogSW5zdGFsbCBgbWFrZS5pbmZvKicKCW5vdCBgJChzcmNkaXIpL21ha2UuaW5mbyonOyBubyBuZWVkIHRvIHVzZSBiYXNlbmFtZS4KCkZyaSBGZWIgIDUgMTI6NTI6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuMy4KCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsKTogQWRkIG1pc3NpbmcgO1xzLgoKCU1ha2UgLSwgQCwgYW5kICsgcHJlZml4ZXMgb24gYSBwcmUtZXhwYW5kZWQgY29tbWFuZCBsaW5lIGFmZmVjdAoJYWxsIGxpbmVzIGluIHRoZSBleHBhbnNpb24sIG5vdCBqdXN0IHRoZSBmaXJzdC4KCSogY29tbWFuZHMuaCAoc3RydWN0IGNvbW1hbmRzKTogUmVwbGFjZSBgbGluZXNfcmVjdXJzZScgbWVtYmVyCgl3aXRoIGBsaW5lc19mbGFncycuCgkoQ09NTUFORFNfe1JFQ1VSU0UsU0lMRU5ULE5PRVJST1J9KTogTmV3IG1hY3JvcywgYml0cyB0byBzZXQgaW4KCXRoYXQgZmxhZyBieXRlLgoJKiBjb21tYW5kcy5jIChjaG9wX2NvbW1hbmRzKTogU2V0IGBsaW5lc19mbGFncycgaW5zdGVhZCBvZgoJYGxpbmVzX3JlY3Vyc2UnLiAgUmVjb3JkIG5vdCBvbmx5ICsgYnV0IGFsc28gQCBhbmQgLSBwcmVmaXhlcy4KCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogQ2hlY2sgdGhlIENPTU1BTkRTX1JFQ1VSU0UgYml0CglpbiBGSUxFLT5jbWRzLT5saW5lc19mbGFncywgcmF0aGVyIHRoYW4gRklMRS0+Y21kcy0+bGluZXNfcmVjdXJzZS4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVwbGFjZWQgUkVDVVJTSVZFIGFuZCBOT1BSSU5UIGxvY2FsCgl2YXIgd2l0aCBGTEFHUzsgaW5pdGlhbGl6ZSBpdCB0byB0aGUgYXBwcm9wcmlhdGUgYGxpbmVzX2ZsYWdzJyBieXRlLgoJU2V0IENISUxELT5ub2Vycm9yIGlmIHRoZSBDT01NQU5EU19OT0VSUk9SIGJpdCBpcyBzZXQgaW4gRkxBR1MuCglTZXQgdGhlIENPTU1BTkRTX1NJTEVOVCBiaXQgaW4gRkxBR1MgZm9yIGEgQCBwcmVmaXguCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBTZXQgRy0+ZmlsZSB0byBpdHMgcHJldiBhZnRlcgoJY2hlY2tpbmcgZm9yIEcgYmVpbmcgZmluaXNoZWQsIHNpbmNlIHRoYXQgY2hlY2sgbmVlZHMgdG8gZXhhbWluZQoJRy0+ZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjaykgW0hBVkVfV0FJVFBJRF06IFRyeSB1c2luZwoJd2FpdHBpZCB3aXRoIGEgYHVuaW9uIHdhaXQnIFNUQVRVUyBhcmcuICBJZiB3YWl0cGlkIGFuZCB1bmlvbiB3YWl0Cglkb24ndCB3b3JrIHRvZ2V0aGVyLCB3ZSBzaG91bGQgbm90IHVzZSB1bmlvbiB3YWl0LgoKCSogVmVyc2lvbiAzLjYzLjIuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBXaGVuIEctPmZpbGUtPnVwZGF0ZWQsIG1vdmUKCUctPmZpbGUgdG8gaXRzIHByZXYuICBXZSBhcmVuJ3QgZmluaXNoZWQgdW50aWwgRy0+ZmlsZSBpcyBuaWwuCgpUaHUgRmViICA0IDEyOjUzOjA0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKHN0YXJ0aW5nX2RpcmVjdG9yeSk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkobWFpbik6IFNldCBpdCB0byBjd2QgYWZ0ZXIgZG9pbmcgLUNzLgoJKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IFVzZSBpdCwgcmF0aGVyIHRoYW4gY29tcHV0aW5nIGVhY2ggdGltZS4KCSogbWFrZS5oOiBEZWNsYXJlIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKFNIRUxMKTogRGVmaW5lIHRvIC9iaW4vc2ggZm9yIGxvc2luZyBVbml4IG1ha2VzLgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogQWxsb2NhdGUgKDEgKyBMRU4gKyAxKSB3b3JkcyBmb3IKCUFSR1YsIHJhdGhlciB0aGFuIExFTiB3b3JkcyBwbHVzIG9uZSBieXRlLgoKV2VkIEZlYiAgMyAxODoxMzo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBQdXQgLSBiZWZvcmUKCWluc3RhbGxfc2V0Z2lkIGNvbW1hbmQgbGluZSwgc28gaXRzIGZhaWx1cmUgd29uJ3QgYmUgYW4gZXJyb3IuCgkoaW5mb2Rpcik6IE5ldyB2YXJpYWJsZS4KCShpbnN0YWxsKTogRGVwZW5kIG9uICQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mby4KCSgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBOZXcgdGFyZ2V0LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgRklMRU5BTUVTIGlzIG5pbCB3aGVuIHdlIHNlZSBhIGxpbmUKCXN0YXJ0aW5nIHdpdGggYSB0YWIsIGRvbid0IHRyZWF0IGl0IGFzIGEgY29tbWFuZC4gIEp1c3QgZmFsbAoJdGhyb3VnaCwgcmF0aGVyIHRoYW4gZ2l2aW5nIGFuIGVycm9yLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgdGhlIE5PX1RBUkdFVFMgZmxhZyBpcyBzZXQgd2hlbiB3ZSBzZWUgYQoJY29tbWFuZCBsaW5lLCBkb24ndCBjbGVhciBpdCBiZWZvcmUgY29udGludWluZy4gIFdlIHdhbnQKCXN1YnNlcXVlbnQgY29tbWFuZCBsaW5lcyB0byBiZSBpZ25vcmVkIGFzIHdlbGwuCgoJKiBqb2IuYyAobmV3X2pvYik6IEJlZm9yZSBleHBhbmRpbmcgZWFjaCBjb21tYW5kIGxpbmUsIGNvbGxhcHNlCgliYWNrc2xhc2gtbmV3bGluZSBjb21iaW5hdGlvbnMgdGhhdCBhcmUgaW5zaWRlIHZhciBvciBmbiByZWZlcmVuY2VzLgoKTW9uIEZlYiAgMSAxNjowMDoxMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChleGVjX3ByZWZpeCk6IERlZmF1bHQgdG8gJChwcmVmaXgpLCBub3QgL3Vzci9sb2NhbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlLmluZm8pOiBQYXNzIC1JJChzcmNkaXIpIHRvIG1ha2VpbmZvLgoKCSogam9iLmMgW1BPU0lYXSAodW5ibG9ja19zaWdzKTogTWFkZSBnbG9iYWwuCglbIVBPU0lYXSAodW5ibG9ja19zaWdzKTogTW92ZSBkZWZucyB0byBqb2IuaC4KCSogam9iLmggW1BPU0lYXSAodW5ibG9ja19zaWdzKTogRGVjbGFyZS4KClN1biBKYW4gMzEgMTk6MTE6MDUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJbiB2cGF0aCBwYXJzaW5nLCBhZnRlciBmaW5kaW5nIHRoZQoJcGF0dGVybiB0b2tlbiwgdGFrZSBlbnRpcmUgcmVzdCBvZiBsaW5lIGFzIHRoZSBzZWFyY2ggcGF0aCwgbm90CglqdXN0IHRoZSBuZXh0IHRva2VuLgoKCSogY29tcGF0TWFrZWZpbGUgKHJlbW90ZS5vKTogRGVwZW5kIG9uIHJlbW90ZS0qLmMuCgpUaHUgSmFuIDI4IDE2OjQwOjI5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBEb24ndCBkZWZpbmUgYW55IEYgb3IgRCB2ZXJzaW9ucy4KCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgdGhlbSBoZXJlIGFzCglyZWN1cnNpdmVseS1leHBhbmRlZCB2YXJpYWJsZXMgdGhhdCB1c2UgdGhlIGRpciBhbmQgbm90ZGlyIGZ1bmNzLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogSW4gdl9kZWZhdWx0IGNhc2UsIGRvbid0IGV4cG9ydAoJb19kZWZhdWx0IG9yIG9fYXV0b21hdGljIHZhcmlhYmxlcy4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjayk6IFJlbW92ZSBgIGFuZCAnIGluc2lkZSBDIGNvZGU7Cgl0aGV5IGNvbmZ1c2UgdGhlIHNoZWxsIHNjcmlwdC4KCk1vbiBKYW4gMjUgMTM6MTA6NDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My4xLgoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBXaGVuIHNraXBwaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZwoJb2YgYW4gZWx0IHRoYXQgaXMgIi4iLCBkb24ndCBhbHNvIHNraXAgdGhlIGNvZGUgdGhhdCBwdXNoZXMgUCBwYXN0Cgl0aGUgbmV4dCBzZXBhcmF0b3IuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGlzdGNsZWFuKTogRG9uJ3QgcmVtb3ZlIG1ha2UtKi4KCgkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9VTklPTl9XQUlUKTogVHJ5IHRvIHVzZSBXRVhJVFNUQVRVUyBpZiBpdCdzCglkZWZpbmVkLiAgSWYgb25lIGNhbm5vdCB1c2UgV0VYSVRTVEFUVVMgd2l0aCBhIGB1bmlvbiB3YWl0JwoJYXJndW1lbnQsIHdlIGRvbid0IHdhbnQgdG8gYmVsaWV2ZSB0aGUgc3lzdGVtIGhhcyBgdW5pb24gd2FpdCcgYXQgYWxsLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogRG8gbm90aGluZyB0byBwcmludCAidXAgdG8gZGF0ZSIgbXNncy4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IERvIGl0IGhlcmUgaW5zdGVhZC4KCVVzZSB0aGUgYGNoYW5nZWQnIGZsYWcgb2YgZWFjaCBnb2FsJ3MgYHN0cnVjdCBkZXAnIHRvIGtlZXAgdHJhY2sKCW9mIHdoZXRoZXIgZmlsZXNfcmVtYWRlIChub3cgY29tbWFuZHNfc3RhcnRlZCkgY2hhbmdlZCBhcm91bmQgYQoJY2FsbCB0byB1cGRhdGVfZmlsZSBmb3IgdGhhdCBnb2FsLgoJV2hlbiBhIGdvYWwgaXMgZmluaXNoZWQsIGFuZCBpdHMgZmlsZSdzIHVwZGF0ZV9zdGF0dXMgaXMgemVybyAoaS5lLiwKCXN1Y2Nlc3Mgb3Igbm90aGluZyBkb25lKSwgdGVzdCB0aGUgYGNoYW5nZWQnIGZsYWcgYW5kIGdpdmUgYW4gInVwCgl0byBkYXRlIiBtc2cgaWZmIGl0IGlzIGNsZWFyLgoJKiBtYWtlLmggKGZpbGVzX3JlbWFkZSk6IFJlbmFtZWQgdG8gY29tbWFuZHNfc3RhcnRlZC4KCSogcmVtYWtlLmM6IENoYW5nZWQgZGVmbi4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IENoYW5nZWQgdXNlcy4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSW5jcmVtZW50IGNvbW1hbmRzX3N0YXJ0ZWQgaGVyZS4KCShyZWFwX2NoaWxkcmVuKTogTm90IGhlcmUuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBEb24ndCBkbyBhbnl0aGluZyB3aXRoIGZpbGVzJwoJYHByZXYnIG1lbWJlcnMuICB1cGRhdGVfZmlsZSBub3cgY29tcGxldGVseSBoYW5kbGVzIHRoaXMuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBEb24ndCBleHBhbmQgcmVjdXJzaXZlCgl2YXJpYWJsZXMgaWYgdGhleSBjYW1lIGZyb20gdGhlIGVudmlyb25tZW50LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogRm9yIGZsYWdzIHdpdGggb21pdHRlZCBvcHRpb25hbCBhcmdzLAoJc3RvcmUgeyIiLCAwfSB3aXRoIEFERF9GTEFHLiAgV2hlbiBjb25zdHJ1Y3RpbmcgRkxBR1NUUklORywgYSBmbGFnCglzbyBzdG9yZWQgY2Fubm90IGhhdmUgbW9yZSBmbGFncyBhcHBlbmRlZCB0byB0aGUgc2FtZSB3b3JkLgoKRnJpIEphbiAyMiAxNDo0NjoxNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGVfc2V0KTogSW4gdmFycy9idWNrZXQgY2FsY3VsYXRpb24sCglkb24ndCBzcHVyaW91c2x5IG11bHRpcGx5IGJ5IDEwMC4KCgkqIFZlcnNpb24gMy42My4KCgkqIGpvYi5jIFshSEFWRV9VTklPTl9XQUlUXSAoV1RFUk1TSUcsIFdDT1JFRFVNUCwgV0VYSVRTVEFUVVMpOgoJRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IERvbid0IGtlZXAgdHJhY2sgb2YgdGhlIGNvbW1hbmRfc3RhdGUgYmVmb3JlCgljYWxsaW5nIHVwZGF0ZV9maWxlXzEuICBSZW1vdmUgbG9jYWwgdmFyaWFibGUgQ09NTUFORFNfRklOSVNIRUQsCglhbmQgZG9uJ3QgdGVzdCBpdCB0byBkZWNpZGUgdG8gcHJpbnQgdGhlICJpcyB1cCB0byBkYXRlIiBtc2cuCglUZXN0aW5nIGZvciBmaWxlc19yZW1hZGUgaGF2aW5nIGNoYW5nZWQgc2hvdWxkIGFsd2F5cyBiZSBzdWZmaWNpZW50LgoJVGhlIG9sZCBtZXRob2QgbG9zdCB3aGVuIHdlIGFyZSBjYWxsZWQgaW4gdGhlIGdvYWwgY2hhaW4gcnVuIG9uIGEKCW1ha2VmaWxlLCBiZWNhdXNlIHRoZSBtYWtlZmlsZSdzIGNvbW1hbmRfc3RhdGUgaXMgYWxyZWFkeQoJYGNzX2ZpbmlzaGVkJyBmcm9tIHRoZSBtYWtlZmlsZSBjaGFpbiBydW4uCgoJKiBtaXNjLmMgW0hBVkVfU0VUUkVbR1VdSURdOiBUZXN0IHRoZXNlIHRvIGRlY2wgc2V0cmVbZ3VdaWQuCgoJKiBjb25maWd1cmUuaW46IFJld3JvdGUgd2FpdCBjaGVja2luZy4KCVVzZSBBQ19IQVZFX0hFQURFUlMgdG8gY2hlY2sgZm9yIDxzeXMvd2FpdC5oPi4KCVVzZSBBQ19IQVZFX0ZVTkNTIHRvIGNoZWNrIGZvciB3YWl0cGlkIGFuZCB3YWl0My4KCVVzZSBhIGNvbXBpbGUgY2hlY2sgdG8gdGVzdCBqdXN0IGZvciBgdW5pb24gd2FpdCcuCgkqIGpvYi5jOiBSZXdyb3RlIGNvbmRpdGlvbmFscyBhY2NvcmRpbmdseS4KCVtIQVZFX1dBSVRQSURdOiBUZXN0IHRoaXMgb25seSB0byBkZWZpbmUgV0FJVF9OT0hBTkcuCglbSEFWRV9XQUlUM106IExpa2V3aXNlLgoJW0hBVkVfVU5JT05fV0FJVF06IFRlc3QgdGhpcyB0byBkZWZpbmUgV0FJVF9UIGFuZCBXKi4KCgkqIGNvbmZpZ3VyZS5pbjogU2V0IENGTEFHUyBhbmQgTERGTEFHUyBiZWZvcmUgYWxsIGNoZWNrcy4KCgkqIGRpci5jOiBBZGQgc3RhdGljIGZvcndhcmQgZGVjbHMgb2Yge29wZW4scmVhZH1fZGlyc3RyZWFtLgoKVGh1IEphbiAyMSAxNzoxODowMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4zMS4KCgkqIGpvYi5jIFtOR1JPVVBTX01BWCAmJiBOR1JPVVBTX01BWD09MF06ICN1bmRlZiBOR1JPVVBTX01BWC4KCgkqIGNvbXBhdE1ha2VmaWxlIChDRkxBR1MsIExERkxBR1MpOiBTZXQgdG8gQENGTEFHU0AvQExERkxBR1NALgoJKiBidWlsZC50ZW1wbGF0ZSAoQ0ZMQUdTLCBMREZMQUdTKTogU2FtZSBoZXJlLgoJKiBjb25maWd1cmUuaW46IEFDX1NVQlNUKENGTEFHUykgYW5kIExERkxBR1MuCglTZXQgdGhlbSB0byAtZyBpZiBub3QgZGVmaW5lZCBpbiB0aGUgZW52aXJvbm1lbnQuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBVc2UgTElCTkFNRSBjb25zaXN0ZW50bHksIHNldHRpbmcgaXQKCW9ubHkgb25jZSwgdG8gYmUgdGhlIHBhc3NlZCBuYW1lIHNhbnMgYC1sJy4KCVBhc3MgbmV3IHZhciBGSUxFIHRvIGJlIG1vZGlmaWVkIGJ5IHZwYXRoX3NlYXJjaC4KCk1vbiBKYW4gMTggMTQ6NTM6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4zMC4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYnMpOiBSZXR1cm4gd2hlbiBqb2Jfc2xvdHNfdXNlZCBpcyBlcXVhbCB0bwoJam9iX3Nsb3RzLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfQ09OU1QgZm9yIHRoZSBzYWtlIG9mIGdldG9wdC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENvbnRpbnVlIGFmdGVyIHBhcnNpbmcgYG92ZXJyaWRlJwoJZGlyZWN0aXZlLCByYXRoZXIgdGhhbiBmYWxsaW5nIHRocm91Z2ggdG8gbG9zc2FnZS4KCUNoZWNrIGZvciBFT0wgb3IgYmxhbmsgYWZ0ZXIgIm92ZXJyaWRlIGRlZmluZSIuCgoJKiBjb21wYXRNYWtlZmlsZSAoLmMubywgcmVtb3RlLm8pOiBQdXQgJChDRkxBR1MpIGFmdGVyIG90aGVyIHN3aXRjaGVzLgoKRnJpIEphbiAxNSAxMjo1Mjo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI5LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQWZ0ZXIgd3JpdGluZyBldmVyeXRoaW5nIGludG8KCUZMQUdTVFJJTkcsIG9ubHkgYmFjayB1cCB0d28gY2hhcnMgaWYgWy0xXSBpcyBhIGRhc2gsIG1lYW5pbmcgd2UKCWp1c3Qgd3JvdGUgIiAtIi4gIEFsd2F5cyB0ZXJtaW5hdGUgdGhlIHN0cmluZyBhdCAqUC4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFdoZW4gY29uc3RydWN0aW5nIG5hbWVzIGluIHN0ZCBkaXJzLAoJdXNlICYoKkxJQilbMl0gZm9yIHRoZSBzdGVtLCBub3QgTElCTkFNRSAod2hpY2ggcG9pbnRzIGF0IHRoZQoJYnVmZmVyIHdlIGFyZSB3cml0aW5nIGludG8hKS4KClRodSBKYW4gMTQgMTM6NTA6MDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNldCBJTl9JR05PUkVEX0RFRklORSBmb3IgIm92ZXJyaWRlCglkZWZpbmUiIHdoZW4gSUdOT1JJTkcgaXMgdHJ1ZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBSZW1vdmUgY29uZmlnLnN0YXR1cyBhbmQgYnVpbGQuc2guCgpXZWQgSmFuIDEzIDE2OjAxOjEyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjguCgoJKiBtaXNjLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogQ2FzdCByZXN1bHQgb2YgbWFsbG9jL3JlYWxsb2MgdG8KCShjaGFyICopLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFtBSUFNQUddOiBDYXN0IHJlYWQgYXJnIHRvIChjaGFyICopLgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBPdmVycmlkZSBTSEVMTCB2YWx1ZSBmb3IKCW9yaWdpbiBvX2Vudl9vdmVycmlkZSBhcyB3ZWxsIGFzIG9fZW52LgoKCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogRG9uJ3QgcmVwbGFjZSAlZ2xvYm9ianMlLiAgSW5zdGVhZCwKCWFkZCB0aGUgbmFtZXMgb2YgdGhlIGdsb2Igb2JqZWN0cyAody9zdWJkaXIpIHRvICVvYmpzJS4KCSogYnVpbGQudGVtcGxhdGUgKGdsb2JvYmpzKTogUmVtb3ZlZC4KCVRha2UgYmFzZW5hbWUgb2YgJG9ianMgYmVmb3JlIGxpbmtpbmcuCgpUdWUgSmFuIDEyIDEyOjMxOjA2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI3LgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBBbHNvIGVkaXQgYnVpbGQuc2guCgkqIGJ1aWxkLnRlbXBsYXRlOiBOZXcgZmlsZS4KCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogTmV3IHJ1bGUgdG8gY3JlYXRlIGl0IGZyb20gYnVpbGQudGVtcGxhdGUuCgkobWFrZS0kKHZlcnNpb24pLnRhci5aKTogRGVwZW5kIG9uIGJ1aWxkLnNoLmluLgoKCSogbWFpbi5jIChkaWUpOiBDYWxsIHByaW50X2RhdGFfYmFzZSBpZiAtcC4KCShtYWluKTogRG9uJ3QgY2FsbCBpdCBoZXJlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBBZGQgQERFRlNALiAgY29uZmlndXJlIHNob3VsZCB0dXJuIHRoaXMKCWludG8gLURIQVZFX0NPTkZJR19ILgoKTW9uIEphbiAxMSAxNDozOToyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNi4KCgkqIG1pc2MuYyAoaW5pdF9hY2Nlc3MpOiBTdXJyb3VuZCB3aXRoICNpZmRlZiBHRVRMT0FEQVZHX1BSSVZJTEVHRUQuCgkoe21ha2UsdXNlcixjaGlsZH1fYWNjZXNzKSBbISBHRVRMT0FEQVZHX1BSSVZJTEVHRURdOiBNYWtlIG5vLW9wLgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbF9zZXRnaWQpOiBOZXcgdmFyLCBzZXQgYnkgY29uZmlndXJlLgoJKGluc3RhbGwpOiBJbnN0YWxsIHNldGdpZCAkKGdyb3VwKSBvbmx5IGlmICQoaW5zdGFsbF9zZXRnaWQpIGlzIHRydWUuCgpGcmkgSmFuICA4IDE1OjMxOjU1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IElmIGdldGxvYWRhdmcgZmFpbHMgd2l0aCBlcnJubz09MCwgZ2l2ZSBhCgltZXNzYWdlIHNheWluZyB0aGF0IGxvYWQgbGltaXRzIGFyZSBub3Qgc3VwcG9ydGVkLgoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBSZXdyb3RlIHBhdGggZGVsZXRpb24gY29kZSB0bwoJbm90IHRyeSB0byB1c2UgUEFUSCdzIG5leHQgbGluayBhZnRlciBmcmVlaW5nIFBBVEguCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBSZXdyaXR0ZW47IG5vdyBoYW5kbGVzIHN0cmluZy12YWx1ZWQKCW9wdGlvbiwgYW5kIGhhcyBubyBhcmJpdHJhcnkgbGltaXRzLgoJKHN3aXRjaGVzKTogU2V0IGB0b2VudicgZmxhZyBmb3IgLUkgYW5kIC12LgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogQ2FzdCByZXR1cm4gdmFsdWUgb2YgYWxsb2NhIHRvIGNoYXIgKi4KCgkqIG1pc2MuYyAoY2hpbGRfYWNjZXNzKSBbSEFWRV9TRVRSRVVJRCwgSEFWRV9TRVRSRUdJRF06IFVzZQoJc2V0cmVbZ3VdaWQgaW4gcGxhY2Ugb2Ygc2V0W2d1XWlkLgoKV2VkIEphbiAgNiAxNTowNjoxMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIE1BS0VPVkVSUklERVMsIE1BS0UsIGFuZCBNQUtFX0NPTU1BTkQgd2l0aAoJb3JpZ2luIG9fZGVmYXVsdC4KCgkqIG1ha2UuaCBbUE9TSVhdOiBEb24ndCB0ZXN0IHRoaXMgdG8gdXNlIEFOU0lfU1RSSU5HLgoJVGVzdGluZyBTVERDX0hFQURFUlMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgoJKiBqb2IuaDogRGVjbGFyZSBzdGFydF93YWl0aW5nX2pvYnMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBZGQgbWlzc2luZyBwYXJlbnMgaW4gaWYgc3RtdCB0aGF0IGZpbmQKCWNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMuCgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIGluaXRfZGlyLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsd2F5cyB1c2UgdHdvICUgc3BlY3MgaW4gYQoJREVCVUdQMiwgYW5kIGFsd2F5cyBwYXNzIHR3byBub24tbmlsIGFyZ3MuCglDYXN0IGZpZWxkIHdpZHRoIGFyZ3MgdG8gaW50LgoJQWRkIG1pc3NpbmcgcGFyZW5zIGluICFSVUxFLT5zdWJkaXIgaWYgc3RtdC4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uLCBwYXRzdWJzdF9leHBhbmQpOiBBZGQgcGFyZW5zIGFyb3VuZAoJYXNzaWdubWVudHMgaW5zaWRlIGB3aGlsZScgc3RtdHMuCgkqIGNvbW1hbmRzLmMgKHByaW50X2NvbW1hbmRzKTogQ2FzdCBmaWVsZCB3aWR0aCBhcmdzIHRvIGludC4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogQ2FzdCByZXR1cm4gdmFsdWUgb2YgYWxsb2NhIHRvIChjaGFyICopLgoKCSogbWFpbi5jIChpbml0X3N3aXRjaGVzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIGRlY29kZV9zd2l0Y2hlcy4KCShkZWNvZGVfc3dpdGNoZXMpOiBUYWtlIG5ldyBhcmcgRU5WLiAgSWYgc2V0LCBpZ25vcmUgbm9uLW9wdGlvbgoJYXJnczsgcHJpbnQgbm8gZXJyb3IgbXNnczsgaWdub3JlIG9wdGlvbnMgd2l0aCBjbGVhciBgZW52JyBmbGFncy4KCShkZWNvZGVfZW52X3N3aXRjaGVzKTogUmV3cml0dGVuIHRvIGNob3AgZW52YXIgdmFsdWUgaW50byB3b3JkcwoJYW5kIHBhc3MgdGhlbSB0byBkZWNvZGVfc3dpdGNoZXMuCgkoc3dpdGNoZXMpOiBTZXQgYGVudicgZmxhZyBmb3IgLUkgYW5kIC12LgoKCSogZGlyLmMgKGluaXRfZGlyKTogQ2FzdCBmcmVlIHRvIF9fZ2xvYl9jbG9zZWRpcl9ob29rJ3MgdHlwZS4KClR1ZSBKYW4gIDUgMTQ6NTI6MTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNS4KCgkqIGpvYi5jIFtIQVZFX1NZU19XQUlUIHx8ICFVU0ddOiBEb24ndCAjaW5jbHVkZSA8c3lzL3RpbWUuaD4gYW5kCgk8c3lzL3Jlc291cmNlLmg+LiAgPHN5cy90aW1lLmg+IGludGVyYWN0cyBiYWRseSB3aXRoIDx0aW1lLmg+LCBhbmQKCXdlIGRvbid0IG5lZWQgdGhlc2UgYW55d2F5LgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0ZVTkNTKTogQ2hlY2sgZm9yIHNldHJlW2d1XWlkLgoJKiBtaXNjLmMgKHt1c2VyLG1ha2V9X2FjY2Vzcyk6IFRlc3QgI2lmbmRlZiBIQVZFX1NFVFJFW0dVXUlELCBub3QKCSNpZmRlZiBQT1NJWCB8fCBVU0cuICBTdW5PUyA0LjEgaXMgc3VwcG9zZWRseSBQT1NJWC4xIGNvbXBsaWFudCwKCWJ1dCBpdHMgc2V0W2d1XWlkIGZ1bmN0aW9ucyBhcmVuJ3Q7IGl0cyBzZXRyZVtndV1pZCBmdW5jdGlvbnMgd29yay4KCgkqIG1pc2MuYyAoe3VzZXIsbWFrZSxjaGlsZH1fYWNjZXNzKTogR2l2ZSBuYW1lIG9mIGNhbGxlciBpbiBlcnJvciBtc2dzLgoKCSogam9iLmMgKGxvYWRfdG9vX2hpZ2gpOiBTYXkgImNhbm5vdCBlbmZvcmNlIGxvYWQgbGltaXQiIGluIGVycm9yIG1zZy4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19QUk9HX0NDLgoJKiBjb21wYXRNYWtlZmlsZSAoQ0MpOiBEZWZpbmUgdG8gQENDQCAoYXV0b2NvbmYgbWFnaWMpLgoKCSogY29tcGF0TWFrZWZpbGU6IEFkZCAuTk9FWFBPUlQgbWFnaWMgdGFyZ2V0LgoKTW9uIEphbiAgNCAxNzowMDowMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IFVwZGF0ZWQgY29weXJpZ2h0IHRvIGluY2x1ZGUgOTMuCgpUaHUgRGVjIDMxIDEyOjI2OjE1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtfQUlYXTogRG9uJ3QgZGVjbGFyZSBhbGxvY2EuCgpUdWUgRGVjIDI5IDEzOjQ1OjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI0LgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBBZGQgc2lnbmFtZS5vLgoJKHNyY3MpOiBBZGQgc2lnbmFtZS5bY2hdLgoKCSogY29tcGF0TWFrZWZpbGUgKHNyY3MpOiBBZGQgY29uZmlnLmguaW4uCgkocmVtb3RlLm8pOiBBZGQgLUkuIGJlZm9yZSAtSSQoc3JjZGlyKS4KCk1vbiBEZWMgMjggMTU6NTE6MjYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yMy4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBGYXRhbCB3aGVuIExFTj09MCwgaW5kaWNhdGluZyBhIGxpbmUgc3RhcnRpbmcKCXdpdGggYSBOVUwuCgkocmVhZGxpbmUpOiBUYWtlIG5ldyBhcmcgTElORU5PLCBmb3IgdXNlIGluIGVycm9yIG1zZy4KCShyZWFkX21ha2VmaWxlLCBkb19kZWZpbmUpOiBQYXNzIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKGdsb2IvbGliZ2xvYi5hKTogUGFzcyAtREhBVkVfQ09ORklHX0ggaW4gQ1BQRkxBR1MuCgkoLmMubyk6IEFkZCAtSS4gYmVmb3JlIC1JJChzcmNkaXIpLgoKV2VkIERlYyAyMyAxMjoxMjowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWNjZXB0IGFuZCBpZ25vcmUgYSBydWxlIHdpdGggbm8gdGFyZ2V0cy4KCgkqIGNvbXBhdE1ha2VmaWxlIChBTExPQ0FfU1JDKTogTmV3IHZhcmlhYmxlLgoJKHNyY3MpOiBJbmNsdWRlIGl0cyB2YWx1ZS4KCgkqIHJlYWQuYyAoc3RydWN0IGNvbmRpdGlvbmFsKTogUmVuYW1lZCBtZW1iZXIgYG1heF9pZ25vcmluZycgdG8KCWBhbGxvY2F0ZWQnOyBhZGRlZCBuZXcgbWVtYmVyIGBzZWVuX2Vsc2UnLgoJKGNvbmRpdGlvbmFsX2xpbmUpOiBJbml0aWFsaXplIHNlZW5fZWxzZSBmbGFnIHdoZW4gc3RhcnRpbmcgYW4gYGlmLi4uJzsKCXNldCBpdCB3aGVuIHdlIHNlZSBhbiBgZWxzZSc7IGZhdGFsIGlmIHNldCB3aGVuIHdlIHNlZSBgZWxzZScuCgkocmVhZF9tYWtlZmlsZSk6IEZhdGFsICJtaXNzaW5nIGBlbmRpZiciIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZwoJY29uZGl0aW9uYWxzLCBub3QganVzdCBpZiB3ZSBhcmUgc3RpbGwgaWdub3JpbmcuCgpUdWUgRGVjIDIyIDE1OjM2OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobWFuZXh0KTogU2V0IHRvIDEsIG5vdCBsLgoJKCQobWFuZGlyKS8kKGluc3RuYW1lKS4kKG1hbmV4dCkpOiBVc2UgJChzcmNkaXIpIGZvciBtYWtlLm1hbiBpbiBjbWRzLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBEb24ndCBjYWxsIHVuaXF1aXplX2RlcHMgaGVyZS4KCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBMaWtld2lzZS4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBMaWtld2lzZS4KCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogQ2FsbCBpdCBvbmx5IGhlcmUuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19jb252ZXhfX106IEZDPWZjLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogRXhwYW5kIHRoZSB2YWx1ZXMgb2YgcmVjdXJzaXZlbHkKCWV4cGFuZGVkIHZhcmlhYmxlcyB3aGVuIHB1dHRpbmcgdGhlbSBpbnRvIHRoZSBlbnZpcm9ubWVudC4KCSogZXhwYW5kLmMgKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IE1hZGUgZ2xvYmFsLgoJKiBtYWtlLmggKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IERlY2xhcmUgaXQuCgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogU2V0IEZJTEUtPmNvbW1hbmRfc3RhdGUgdG8gY3NfZGVwc19ydW5uaW5nCgl3aGVuIGEgZGVwJ3MgY29tbWFuZF9zdGF0ZSBpcyBjc19ydW5uaW5nIG9yIGNzX2RlcHNfcnVubmluZy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoYW5nZWQgZXJyb3IgbXNnIGZvciBzcHVyaW91cyBjbWRzIHRvCglub3Qgc2F5ICJmaXJzdCB0YXJnZXQiLgoKU3VuIERlYyAyMCAxNzo1NjowOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IERvIEFDX0NPTkZJR19IRUFERVIgcmlnaHQgYWZ0ZXIgQUNfSU5JVC4KCSogbWFrZS5oIChIQVZFX0NPTkZJR19IKTogI2luY2x1ZGUgImNvbmZpZy5oIiwgdGhlbiAjZGVmaW5lIHRoaXMuCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWcuaCwgY29uZmlndXJlLCBjb25maWcuaC5pbik6IE5ldyBydWxlcy4KCShkZWZpbmVzKTogUmVtb3ZlZCBAREVGU0AuCgpUaHUgRGVjIDE3IDE2OjExOjQwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogSnVzdCBkZXBlbmQgb24gZGlzdGNsZWFuOyBubyBjbWRzLgoJKGRpc3RjbGVhbik6IERvIHdoYXQgcmVhbGNsZWFuIGRpZCBiZWZvcmU7IGFsc28gcmVtb3ZlIE1ha2VmaWxlIGFuZAoJY29uZmlnLmg7IGRvbid0IHJlbW92ZSBjb25maWd1cmUuCgkoaW5mbywgZHZpKTogTmV3IHRhcmdldHM7IGRlcGVuZCBvbiBtYWtlLntpbmZvLGR2aX0uCgkoZG9jKTogUmVtb3ZlZCB0YXJnZXQuCgkoTUFLRUlORk8sIFRFWEkyRFZJKTogTmV3IHZhcnMuCgkobWFrZS5pbmZvLCBtYWtlLmR2aSk6IFVzZSB0aGVtIGluc3RlYWQgb2YgZXhwbGljaXQgY21kcy4KCldlZCBEZWMgMTYgMTY6MjU6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZmNudGwuaCB0byBBQ19IQVZFX0hFQURFUlMuICBnZXRsb2FkYXZnIGNhcmVzLgoKV2VkIERlYyAgOSAxNToyMTowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9uZ19vcHRpb25fYWxpYXNlcyk6IEFkZCAtLW5ldy1maWxlIGFsaWFzIGZvciAtVy4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpOiBDaGFuZ2UgYWxsIEMrKyB0byBDWFggYW5kIEMrK0ZMQUdTCgl0byBDWFhGTEFHUy4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogRXhwYW5kIHRoZSB2YXJpYWJsZSBuYW1lIGJlZm9yZSB1c2luZyBpdC4KCgkqIG1haW4uYyAobWFpbik6IERlZmluZSB2YXJpYWJsZSAiTUFLRV9DT01NQU5EIiB0byBhcmd2WzBdOwoJZGVmaW5lICJNQUtFPSQoTUFLRV9DT01NQU5EKSAkKE1BS0VPVkVSUklERVMpIiBhbHdheXMuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBTZWFyY2ggZm9yIGxpYk5BTUUuYSBpbiBjd2Q7IGxvb2sgaW4KCXZwYXRoIGJlZm9yZSBsb29raW5nIGluIHN0YW5kYXJkIGRpcnMsIG5vdCBhZnRlci4KCUNoYW5nZWQgb3JkZXIgb2Ygc3RkIGRpcnMgdG86IC9saWIsIC91c3IvbGliLCAke3ByZWZpeH0vbGliLgoKTW9uIE5vdiAyMyAxNDo1NzozNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3BhdHRlcm5fcnVsZXMsIGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBBZGRlZAoJYnJhY2tldHMgYXJvdW5kIGluaXRpYWxpemVycy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogRG9uJ3QgY2hlY2sgZm9yIExJTkVbMF09PSdcdCcuCgkodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBFeHBhbmQgdGhlIG5hbWUgYmVmb3JlIGRlZmluaW5nIHRoZSB2YXIuCgoJKiBqb2IuYyAoaW5pdF9zaWdsaXN0KTogUmVtb3ZlZCBmdW5jdGlvbi4KCVJlbW92ZWQgZGVjbCBvZiBgc3lzX3NpZ2xpc3QnLgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVF06ICNpbmNsdWRlICJzaWduYW1lLmgiLgoJW0hBVkVfU1lTX1NJR0xJU1QgJiYgIVNZU19TSUdMSVNUX0RFQ0xBUkVEXTogRGVjbGFyZSBzeXNfc2lnbGlzdAoJb25seSB1bmRlciB0aGVzZSBjb25kaXRpb25zLgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBkZWNsYXJlIGluaXRfc2lnbGlzdC4KCShtYWluKSBbISBIQVZFX1NZU19TSUdMSVNUXTogQ2FsbCBzaWduYW1lX2luaXQgaW5zdGVhZCBvZiBpbml0X3NpZ2xpc3QuCgpXZWQgTm92IDE4IDE0OjUyOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IERvbid0IHRyeSB0byBhcHBlbmQgdG8gRklSU1RERVBTIGlmIGl0J3MKCW5pbDsgaW5zdGVhZCBqdXN0IHNldCBpdCB0byBNT1JFREVQUy4KCk1vbiBOb3YgMTYgMTc6NDk6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogSW5pdGlhbGl6ZSBQIHRvIERJUlBBVEggYmVmb3JlCglsb29wIHRoYXQgc2V0cyBNQVhFTEVNLgoKRnJpIE5vdiAxMyAxODoyMzoxOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIyLgoKVGh1IE5vdiAxMiAxNTo0NTozMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogVW5kZXIgLW4sIGluY3JlbWVudCBmaWxlc19yZW1hZGUgYWZ0ZXIKCXByb2Nlc3NpbmcgKGkuZS4sIHByaW50aW5nKSBhbGwgY29tbWFuZCBsaW5lcy4KClR1ZSBOb3YgMTAgMTU6MzM6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IEFwcGVuZCBuZXcgZGVwcyBpZiB0aGlzIHJ1bGUgaGFzIG5vCgljb21tYW5kczsgcHJlcGVuZCB0aGVtIHRvIGV4aXN0aW5nIGRlcHMgaWYgdGhpcyBydWxlIGhhcyBubyBjb21tYW5kcy4KCgkqIGRpci5jIChvcGVuX2RpcnN0cmVhbSk6IFJldHVybiBuaWwgaWYgRElSLT5jb250ZW50cy0+ZmlsZXMgaXMgbmlsLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFJlbW92ZWQgbGFzdCBhcmcgU1RSSVAuICBBbHdheXMgc3RyaXAgYC4vJ3MuCgkocmVhZF9tYWtlZmlsZSk6IENoYW5nZWQgY2FsbGVycy4KCSogZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpOiBMaWtld2lzZS4KCSogcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IExpa2V3aXNlLgoKTW9uIE5vdiAgOSAxNzo1MDoxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKGZpbGVzX3JlbWFkZSk6IE1hZGUgZ2xvYmFsLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogRG9uJ3QgaW5jcmVtZW50IGZpbGVzX3JlbWFkZSBoZXJlOyB0aGlzCglmdW5jdGlvbiBnZXRzIGNhbGxlZCBpbiBtYW55IHNpdHVhdGlvbnMgd2hlcmUgbm8gcmVtYWtpbmcgd2FzIGluCglmYWN0IGRvbmUuCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG8gaXQgaGVyZSBpbnN0ZWFkLCB3aGVuIHdlIGtub3cgdGhhdAoJYWN0dWFsIGNvbW1hbmRzIGhhdmUgYmVlbiBydW4gZm9yIHRoZSBmaWxlLgoJKiBtYWtlLmggKGZpbGVzX3JlbWFkZSk6IERlY2xhcmUgaXQuCgpUaHUgTm92ICA1IDE4OjI2OjEwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBBbGxvdyBibGFua3MgYXMgd2VsbCBhcyBjb2xvbnMgdG8KCXNlcGFyYXRlIGVsdHMgaW4gdGhlIHNlYXJjaCBwYXRoLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgZmF0YWwgb24gZXh0cmEgdG9rZW5zIGluIGB2cGF0aCcuCglUaGUgc2VhcmNoIHBhdGggY2FuIGNvbnRhaW4gc3BhY2VzIG5vdy4KClR1ZSBOb3YgIDMgMjA6NDQ6MzIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoY2hlY2spOiBOZXcgdGFyZ2V0OyBuby1vcC4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogTW9kIE9MREhBU0ggYnkgRklMRV9CVUNLRVRTIGFmdGVyCgl0ZXN0aW5nIGZvciBPTERIQVNIPT0wIGJ1dCBiZWZvcmUgdXNpbmcgdGhlIHZhbHVlLgoJKHJlbmFtZV9maWxlKTogRG9uJ3QgbW9kIE9MREhBU0ggYnkgRklMRV9CVUNLRVRTIGJlZm9yZSBwYXNzaW5nIGl0Cgl0byBmaWxlX2hhc2hfZW50ZXIuCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogTm90aWNlIHdoZW4gT0xERklMRS0+Y21kcyBjYW1lIGZyb20KCWRlZmF1bHQuYywgYW5kIGRvbid0IHRyeSB0byBwcmludCAtPmZpbGVuYW1lIGluIHRoYXQgY2FzZS4KClN1biBPY3QgMjUgMDE6NDg6MjMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IERvbid0IHByb2Nlc3MgRi0+YWxzb19tYWtlIGhlcmUuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBEb24ndCBwcm9jZXNzIEZJTEUtPmFsc29fbWFrZSBpZiBubyBhdHRlbXB0Cgl0byB1cGRhdGUgRklMRSB3YXMgYWN0dWFsbHkgbWFkZS4KCUZpeGVkIHRvIGNhbGwgZl9tdGltZSBkaXJlY3RseSB0byByZWZyZXNoIHRoZWlyIG1vZHRpbWVzLgoKU2F0IE9jdCAyNCAyMjowODo1OSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChmaW5kX3BlcmNlbnQpOiBEb24ndCBpbmNyZW1lbnQgUCBhZ2FpbiBhZnRlciBza2lwcGluZwoJYW4gZXNjYXBlZCAlLgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IEluIGNhbGwgdG8gcGF0c3Vic3RfZXhwYW5kLCBkb24ndAoJZmluZCBgJSdzIG91cnNlbHZlczsgbGV0IHRoYXQgZnVuY3Rpb24gZG8gaXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGU6IHJlY29yZF93YWl0aW5nX2ZpbGVzKTogRG9uJ3QgY2FsbAoJcmVjb3JkX2ZpbGVzIGlmIEZJTEVOQU1FUyBpcyBuaWwuCgkocmVhZF9tYWtlZmlsZSk6IEFsbCBhbHRlcm5hdGl2ZXMgaW4gdGhlIHBhcnNpbmcsIGV4Y2VwdCBmb3IgcnVsZQoJbGluZXMsIGZhbGwgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBsb29wLiAgQXQgdGhlIGVuZCBvZiB0aGUKCWxvb3AsIGRvIHJlY29yZF93YWl0aW5nX2ZpbGVzIHNvIHdlIG5vdGljZSBsYXRlciBzcHVyaW91cyBjbWRzLgoKRnJpIE9jdCAyMyAxNTo1NzozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBGcmVlIG9sZCB2YWx1ZSBvZiBTSEVMTAoJYmVmb3JlIHJlcGxhY2luZyBpdC4KClRodSBPY3QgMTUgMTg6NTc6NTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoLmMubyk6IEFkZCAtSSQoc3JjZGlyKS9nbG9iIHRvIGZsYWdzLgoKCSogZGlyLmMgKG9wZW5fZGlyc3RyZWFtKTogQ2FzdCByZXR1cm4gdmFsdWUgdG8gX19wdHJfdC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXM6ICJHRVQiKSBbX0lCTVIyXTogVXNlIFVTRyBkZWZuLgoKCSogbWFrZS5oIChNQVhQQVRITEVOKTogTW92ZWQgb3V0IG9mICNpZm5kZWYgUE9TSVguCgkoR0VUX1BBVEhfTUFYKTogTW92ZWQgZnJvbSAjaWZkZWYgUE9TSVggdG8gI2lmZGVmIFBBVEhfTUFYICNlbHNlLgoJRGVmaW5lIGFzIChnZXRfcGF0aF9tYXggKCkpLgoJWyEgUEFUSF9NQVhdIChORUVEX0dFVF9QQVRIX01BWCk6IERlZmluZS4KCVshIFBBVEhfTUFYXSAoZ2V0X3BhdGhfbWF4KTogRGVjbGFyZSBmbi4KCSogbWlzYy5jIFtORUVEX0dFVF9QQVRIX01BWF0gKGdldF9wYXRoX21heCk6IE5ldyBmdW5jdGlvbi4KCk1vbiBPY3QgMTIgMTM6MzQ6NDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjEuCgoJKiBqb2IuYyAoc3lzX3NpZ2xpc3QpOiBPbmx5IGRlY2xhcmUgI2lmbmRlZiBTWVNfU0lHTElTVF9ERUNMQVJFRC4KCSogbWFrZS5oIFshIEhBVkVfU1lTX1NJR0xJU1QgJiYgSEFWRV9fU1lTX1NJR0xJU1RdOiAjZGVmaW5lCglTWVNfU0lHTElTVF9ERUNMQVJFRC4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGUpOiBXaGVuIGluaXRpYWxpemluZyBESVItPmNvbnRlbnRzLCBzZXQKCURJUi0+Y29udGVudHMtPmRpcnN0cmVhbSB0byBuaWwuCgoJKiBjb21wYXRNYWtlZmlsZSAoR0xPQik6IERlZmluZSBuZXcgdmFyaWFibGUuCgkob2Jqcyk6IFVzZSBpdCwgcmF0aGVyIHRoYW4gZ2xvYi9saWJnbG9iLmEgZXhwbGljaXRseS4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBXaGVuIHN0cmlwcGluZyAiLi8iLCBoYW5kbGUgY2FzZXMgbGlrZQoJIi4vLy9mb28iIGFuZCAiLi8vLy8vIi4KCSogZmlsZS5jIChsb29rdXBfZmlsZSwgZW50ZXJfZmlsZSk6IExpa2V3aXNlLgoKU3VuIE9jdCAxMSAxNzowMDozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGlyLmMgKHN0cnVjdCBkaXJzdHJlYW0sIHtvcGVuLHJlYWR9X2RpcnN0cmVhbSk6IE5ldwoJZGF0YSB0eXBlIGFuZCBmdW5jdGlvbnMgdG8gcmVhZCBhIGRpcmVjdG9yeSBzZXF1ZW50aWFsbHkuCgkoaW5pdF9kaXIpOiBOZXcgZnVuY3Rpb24gdG8gaG9vayBpdCBpbnRvIGdsb2IuCgkqIG1haW4uYyAobWFpbik6IENhbGwgaW5pdF9kaXIuCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEFkZGVkIGdsb2IvbGliZ2xvYi5hLgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSBjb2RlIHRvIHRlc3QgZm9yIGdsb2IuCgpGcmkgT2N0ICA5IDEyOjA4OjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IEdlbmVyYWxpemVkIHRlc3QgZm9yIE5BTUUgcG9pbnRpbmcKCXNvbWV3aGVyZSBpbnRvIEYtPm5hbWUuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfdmFyaWFibGVfaW5fc2V0KTogRnJlZSBvbGQgdmFsdWUgd2hlbiByZXBsYWNpbmcuCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IEZyZWUgdGhlIGxpbmVidWZmZXIgYmVmb3JlIHJldHVybmluZy4KCShyZWNvcmRfZmlsZXMpOiBXaGVuIGNsZWFyaW5nIC5TVUZGSVhFUyBkZXBzLCBmcmVlIHRoZWlyIGRhdGEuCgkobXVsdGlfZ2xvYik6IEZyZWUgT0xEIGFuZCBpdHMgZGF0YSB3aGVuIHJlcGxhY2luZyBpdCB3aXRoIHJlc3VsdHMKCW9mIGdsb2IgcnVuLgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogVXNlIGFsbG9jYSBpbiBwbGFjZSBvZiB4bWFsbG9jCglmb3IgdGVtcCBzcGFjZSBmb3IgJF4sICQ/LCBldCBhbC4KCgkqIGRpci5jIChzdHJ1Y3QgZGlyZWN0b3J5KTogTmV3IG1lbWJlciBgY29udGVudHMnIHJlcGxhY2VzIGBmaWxlcycKCWFuZCBgZGlyc3RyZWFtJy4KCShzdHJ1Y3QgZGlyZWN0b3J5X2NvbnRlbnRzKTogTmV3IHR5cGUuCgkoZGlyZWN0b3JpZXNfY29udGVudHMpOiBOZXcgaGFzaCB0YWJsZS4KCShkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3ApOiBUYWtlIGEgc3RydWN0IGRpcmVjdG9yeV9jb250ZW50cy4KCShkaXJfZmlsZV9leGlzdHNfcCk6IFBhc3MgaXQgdGhlIGBjb250ZW50cycgbWVtYmVyIG9mIHRoZSBkaXIgZm91bmQuCgkoZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wKTogUmVuYW1lZCB0byBkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcDsKCW1hZGUgc3RhdGljLiAgUmV0dXJuIDAgaWYgRElSIGlzIG5pbCAobWVhbmluZyBpdCBjb3VsZG4ndCBiZSBzdGF0J2QpLgoJKGRpcl9maWxlX2V4aXN0c19wLCBmaW5kX2RpcmVjdG9yeSk6IENoYW5nZSBhbGwgY2FsbGVycy4KCShmaWxlX2ltcG9zc2libGUpOiBVc2UgRElSLT5jb250ZW50cywgaW5pdGlhbGl6aW5nIGl0IGlmIG5pbC4KCShwcmludF9kaXJfZGF0YV9iYXNlKTogVXNlIERJUi0+Y29udGVudHMsIGFuZCBwcmludCBvdXQgZGV2aWNlIGFuZAoJaW5vZGUgbnVtYmVycyB3aXRoIGVhY2ggZGlyZWN0b3J5LgoKCSogQ2hhbmdlcyBmb3IgcGVyZm9ybWFuY2Ugd2luIGZyb20gSm9obiBHaWxtb3JlIDxnbnVAY3lnbnVzLmNvbT46CgkqIGRpci5jIChESVJFQ1RPUllfQlVDS0VUUyk6IEluY3JlYXNlIHRvIDE5OS4KCShESVJGSUxFX0JVQ0tFVFMpOiBEZWNyZWFzZSB0byAxMDcuCgkoZmluZF9kaXJlY3RvcnkpOiBBbGxvY2F0ZSBhbmQgemVybyBhIG11bHRpcGxlIG9mCglzaXplb2YgKHN0cnVjdCBkaXJmaWxlICopLCBub3Qgb2Ygc2l6ZW9mIChzdHJ1Y3QgZGlyZmlsZSkuCgkoZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wKTogTmV3IGZ1bmN0aW9uLCBuZWFybHkgYWxsIGNvZGUgZnJvbQoJZGlyX2ZpbGVfZXhpc3RzX3AuCgkoZGlyX2ZpbGVfZXhpc3RzX3ApOiBKdXN0IGNhbGwgZmluZF9kaXJlY3RvcnkrZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wLgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogUmVtb3ZlIHJlZHVuZGFudAoJZGlyX2ZpbGVfZXhpc3RzX3AgY2FsbC4KCgkqIGNvbmZpZ3VyZS5pbjogQ29tbWVudCBvdXQgZ2xvYiBjaGVjazsgYWx3YXlzIHVzZSBvdXIgY29kZS4KCkZyaSBPY3QgIDIgMTk6NDE6MjAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVCAmJiBIQVZFX19TWVNfU0lHTElTVF06ICNkZWZpbmUKCUhBVkVfU1lTX1NJR0xJU1Q7IGFmdGVyIGRvaW5nICNkZWZpbmUgc3lzX3NpZ2xpc3QgX3N5c19zaWdsaXN0LCB3ZQoJZG8gaGF2ZSBpdC4KCldlZCBTZXAgMzAgMTk6MjE6MDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBkbyAtdyBhdXRvbWF0aWNhbGx5IGlmIC1zLgoKVHVlIFNlcCAyOSAyMTowNzo1NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAocHJpbnRlZF92ZXJzaW9uKTogTW92ZSB2YXJpYWJsZSBpbnNpZGUgcHJpbnRfdmVyc2lvbi4KCShwcmludF92ZXJzaW9uKTogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIHByaW50ZWRfdmVyc2lvbiBpcyBzZXQuCgkoZGllKTogRG9uJ3QgdGVzdCBwcmludGVkX3ZlcnNpb24gaGVyZS4KCShkZWNvZGVfc3dpdGNoZXMpOiBVbmRlciAtdiwgZG8gcHJpbnRfdmVyc2lvbiBiZWZvcmUgZ2l2aW5nIHVzYWdlLgoJKERFU0NSSVBUSU9OX0NPTFVNTik6IE5ldyBtYWNyby4KCShkZWNvZGVfc3dpdGNoZXMpOiBVc2UgaXQgd2hlbiBwcmludGluZyB0aGUgdXNhZ2UgbWVzc2FnZS4KCUxlYXZlIGF0IGxlYXN0IHR3byBzcGFjZXMgYmV0d2VlbiBvcHRpb25zIGFuZCB0aGVpciBkZXNjcmlwdGlvbnMuCgpGcmkgU2VwIDI1IDEzOjEyOjQyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIwLgoKV2VkIFNlcCAxNiAxNjoxNToyMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNhdmUgZXJybm8gdmFsdWUgZnJvbSB0cnlpbmcgdG8gb3BlbgoJRklMRU5BTUUsIGFuZCByZXN0b3JlIGl0IGJlZm9yZSBlcnJpbmc7IG90aGVyd2lzZSB3ZSBnZXQgdGhlIGVycm5vCgl2YWx1ZSBmcm9tIHRoZSBsYXN0IGVsdCBvZiB0aGUgc2VhcmNoIHBhdGguCgpUdWUgU2VwIDE1IDE1OjEyOjQ3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBBZGQgLS1zdG9wIGZvciAtUy4KCgkqIHJlYWQuYyAod29yZDFlcSk6IERvIHN0cm5jbXAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgc29tZXBsYWNlIHRoYXQKCW1heSBiZSBvdXQgaW4gc3BhY2UuCgpXZWQgU2VwICA5IDE1OjUwOjQxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBJZiBhbGwgdGhlIGNvbW1hbmQgbGluZXMgd2VyZQoJcmVjdXJzaXZlLCBkb24ndCBkbyB0aGUgdG91Y2hpbmcuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBEb24ndCBjaGVjayBmb3IgKyBoZXJlLgoJKiBjb21tYW5kcy5jIChjaG9wX2NvbW1hbmRzKTogRG8gaXQgaGVyZSBpbnN0ZWFkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogUHJlcGVuZCArIHRvIGNtZHMgZm9yIFJDUy4KCldlZCBTZXAgIDIgMTc6NTM6MDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEluY2x1ZGUgJChBTExPQ0EpLgoKCSogbWFrZS5oIFtDUkFZXTogTW92ZSAjZGVmaW5lIHNpZ25hbCBic2RzaWduYWwgdG8gYmVmb3JlICNpbmNsdWRlcy4KClRodSBBdWcgMjcgMTc6NDU6NDMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAoZGVmYXVsdF9pbmNsdWRlX2RpcmVjdG9yaWVzKTogQWRkIElOQ0xVREVESVIgZmlyc3QuCgkqIGNvbXBhdE1ha2VmaWxlIChpbmNsdWRlZGlyKTogRGVmaW5lLgoJKGRlZmluZXMpOiBBZGQgLUQgZm9yIElOQ0xVREVESVI9IiQoaW5jbHVkZWRpcikiLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogR3JvayBtdWx0aXBsZSBmaWxlcyBpbiBgaW5jbHVkZSc7CglnbG9iYmluZyB0b28uCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBOZXcgZnVuY3Rpb24uCgkobGlicmFyeV9maWxlX210aW1lKTogUmVtb3ZlIGZ1bmN0aW9uLgoJKGZfbXRpbWUpOiBVc2UgbGlicmFyeV9zZWFyY2ggaW5zdGVhZCBvZiBsaWJyYXJ5X2ZpbGVfbXRpbWUuCgkqIGNvbXBhdE1ha2VmaWxlIChsaWJkaXIpOiBEZWZpbmUuCgkoZGVmaW5lcyk6IEFkZCAtRCBmb3IgTElCRElSPSIkKGxpYmRpcikiLgoJKiBtYWtlLnRleGluZm8gKExpYnJhcmllcy9TZWFyY2gpOiBEb2N1bWVudCBjaGFuZ2UuCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogRml4IGZpbGVfaGFzaF9lbnRlciBjYWxsIHdpdGggbWlzc2luZyBhcmcuCgpXZWQgQXVnIDI2IDE3OjEwOjQ2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE5LgoKCSogbWFpbi5jIChtYWluKTogU2V0IGNvbW1hbmRfc3RhdGUgdG8gY3NfZmluaXNoZWQgZm9yIHRlbXAgZmlsZXMKCW1hZGUgZm9yIHN0ZGluIG1ha2VmaWxlcy4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRG9uJ3QgdGVsbCBnZXRvcHQgdG8gcmV0dXJuIG5vbi1vcHRpb24KCWFyZ3MgaW4gb3JkZXIuCglJZ25vcmUgYW4gYXJndW1lbnQgb2YgYC0nLgoKVGh1IEF1ZyAyMCAxMzozNjowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IElmICh0b3VjaF9mbGFnICYmICFSRUNVUlNJVkUpLCBpZ25vcmUKCXRoZSBjb21tYW5kIGxpbmUgYW5kIGdvIHRvIHRoZSBuZXh0LgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogVW5kZXIgLXQsIHRvdWNoIEZJTEUuCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IERvbid0IHRvdWNoIGl0IGhlcmUuCgpXZWQgQXVnIDE5IDE2OjA2OjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChwYXR0ZXJuX21hdGNoZXMpOiBVc2UgdGVtcG9yYXJ5IGZvciBzdHJsZW4gKFdPUkQpCglpbnN0ZWFkIG9mIHR3byBmdW5jdGlvbiBjYWxscy4KCgkqIGNvbXBhdE1ha2VmaWxlIChMT0FEX0FWRyk6IFJlbW92ZSB2YXJpYWJsZSBhbmQgY29tbWVudHMuCgpUdWUgQXVnIDE4IDE0OjU4OjU4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChSdW5uaW5nKTogTm9kZSByZW5hbWVkIHRvIGBtYWtlIEludm9jYXRpb24nLgoKRnJpIEF1ZyAxNCAxMjoyNzoxMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpOiBEb24ndCBjb21wYXJlIFtNQVgtMy4uTUFYXSBpZgoJTkFNRUxFTiAhPSBNRU1MRU4uCgpUaHUgQXVnIDEzIDE3OjUwOjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTguCgoJKiBtYWluLmM6IERvbid0ICNpbmNsdWRlIDx0aW1lLmg+OyBtYWtlLmggYWxyZWFkeSBkb2VzLgoKTW9uIEF1ZyAxMCAxNzowMzowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBGaXhlZCBjb3B5aW5nIG9mIHN1ZmZpeCB3aGVuIGJ1aWxkaW5nCglhbHNvX21ha2UgZWx0cy4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6IE1ha2Ugc3VyZSBCVUZGRVIgaXMKCW51bGwtdGVybWluYXRlZCBiZWZvcmUgcmVwbGFjaW5nIG5ld2xpbmVzLgoKCSogY29tcGF0TWFrZWZpbGUgKG1hbmRpcik6IFVzZSBtYW4kKG1hbmV4dCksIG5vdCBhbHdheXMgbWFubC4KClN1biBBdWcgIDIgMDE6NDI6NTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IE5vdCBzdGF0aWMuCgkqIHJ1bGUuaDogRGVjbGFyZSBpdC4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogTmV3IGZ1bmN0aW9uLCBtb3N0IGNvZGUgZnJvbSByZW5hbWVfZmlsZS4KCShyZW5hbWVfZmlsZSk6IENhbGwgaXQuCgkqIGZpbGUuaCAoZmlsZV9oYXNoX2VudGVyKTogRGVjbGFyZSBpdC4KCgkqIGRlcC5oOiBEb2MgZml4LgoKVGh1IEp1bCAzMCAxNTo0MDo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSGFuZGxlIHVzYWdlX2FuZF9leGl0IHdoZW4gYnVpbGRpbmcKCWxvbmcgb3B0aW9ucyB2ZWN0b3IuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBNYWtlIFJDUyBydWxlcyB1c2UgJChDSEVDS09VVCx2KS4KCShkZWZhdWx0X3ZhcmlhYmxlcyk6IERlZmluZSBDSEVDS09VVCx2IChoYWlyeSkuCgoJKiBtYWtlLmggWyFIQVZFX1NZU19TSUdMSVNUICYmIEhBVkVfX1NZU19TSUdMSVNUXTogI2RlZmluZQoJc3lzX3NpZ2xpc3QgdG8gX3N5c19zaWdsaXN0LgoKU3VuIEp1bCAyNiAxNjo1NjozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogTkVXUzogQWRkIGhlYWRlciBhbmQgdGFpbCBjb3B5cmlnaHQgaW5mbyBsaWtlIEVtYWNzIE5FV1MuCgoJKiBtYWtlLmggW0FOU0lfU1RSSU5HXTogRG9uJ3QgI2RlZmluZSBpbmRleCwgcmluZGV4LCBiY21wLCBiemVybywKCWJjb3B5IGlmIGFscmVhZHkgI2RlZmluZSdkLgoJW1NURENfSEVBREVSU10gKHFzb3J0LCBhYm9ydCwgZXhpdCk6IERlY2xhcmUgaGVyZS4KCVshIF9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVhdOiBOb3QgaGVyZS4KCgkqIG1ha2UuaCBbX0FJWF06ICNwcmFnbWEgYWxsb2NhIGZpcnN0IHRoaW5nLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogU2V0IHRoZSBjb21tYW5kX3N0YXRlIHRvIGNzX3J1bm5pbmcKCXdoZW4gd2UgcXVldWUgYSBqb2Igb24gd2FpdGluZ19qb2JzLgoKRnJpIEp1bCAyNCAwMjoxNjoyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBVc2UgIiIgaW5zdGVhZCBvZiBuaWwKCWZvciBlbXB0eSB2YWx1ZS4KClRodSBKdWwgMjMgMjI6MzE6MTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNy4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoLnR5cGUpOiBBZGQgYWx0ZXJuYXRpdmUgdXNhZ2VfYW5kX2V4aXQuCgkoY29tbWFuZF9zd2l0Y2hlcyk6IEFkZCAtaC8tLWhlbHAuCgpUaHUgSnVsIDE2IDE0OjI3OjUwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhci5aKTogSW5jbHVkZSBORVdTLCBub3QgQ0hBTkdFUy4KCSogUkVBRE1FLnRlbXBsYXRlOiBNZW50aW9uIE5FV1MuCgkqIENIQU5HRVM6IFJlbmFtZWQgdG8gTkVXUy4KCgkqIG1haW4uYyBbISBTVERDX0hFQURFUlNdIFtzdW5dOiBEb24ndCBkZWNsYXJlIGV4aXQuCgpUdWUgSnVsIDE0IDE4OjQ4OjQxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBTZXQgLW8gZmlsZXMnIGNvbW1hbmRfc3RhdGVzIHRvIGNzX2ZpbmlzaGVkLgoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IERlY3JlbWVudCBudW1fcGF0dGVybl9ydWxlcwoJd2hlbiB0b3NzaW5nIGEgcnVsZS4KCgkqIG1haW4uYyAobWFpbik6IFVzZSBhbGxvY2Egb25seSBpbiBzaW1wbGUgbG9jYWwgdmFyIGFzc2lnbm1lbnQsCglmb3IgYnJhaW5kZWFkIFNHSSBjb21waWxlci4KCgkqIHJ1bGUuYyAocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBCYXJmIGlmIG51bV9wYXR0ZXJuX3J1bGVzIGlzCglpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbnVtYmVyIGNvbXB1dGVkIHdoZW4gbGlzdGluZyB0aGVtLgoKTW9uIEp1bCAxMyAxNzo1MTo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IEZvciAkPyBhbmQgJF4gZWx0cyB0aGF0IGFyZSBhcmNoaXZlCgltZW1iZXIgcmVmcywgdXNlIG1lbWJlciBuYW1lIG9ubHkuCgpGcmkgSnVsIDEwIDAwOjA1OjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5oIChzdHJ1Y3QgdmFyaWFibGUuZXhwb3J0KTogQWRkIG5ldyBhbHRlcm5hdGl2ZSB2X2lmc2V0LgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBDaGVjayBmb3IgaXQuCgkoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBTZXQgaXQgZm9yIE1BS0VGSUxFUy4KClRodSBKdWwgIDkgMjE6MjQ6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogUmVtb3ZlIGdldGxvYWRhdmcubzsgJChleHRyYXMpIGdldHMgaXQuCgkocmVtb3RlLm8pOiBVc2UgJChzcmNkaXIpL3JlbW90ZS5jLCBub3QgJHJlbW90ZS5jPC4KCShkaXN0Y2xlYW4sIG1vc3RseWNsZWFuKTogTmV3IHRhcmdldHMuCgpUdWUgSnVsICA3IDE5OjEyOjQ5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTYuCgoJKiBjb21wYXRNYWtlZmlsZSAoY29uZmlnLnN0YXR1cyk6IFJlbW92ZSBydWxlLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogRnJlZSBDIGFmdGVyIHVzaW5nIEMtPmZpbGUsIG5vdCBiZWZvcmUuCgpTYXQgSnVsICA0IDIwOjUxOjQ5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jLCBqb2IuYywgbWFpbi5jLCBtYWtlLmgsIHJlbW90ZS1jc3Rtcy5jOiBVc2UgI2lmZGVmCglIQVZFXyogaW5zdGVhZCBvZiAjaWZuZGVmICpfTUlTU0lORy4KCSogY29uZmlndXJlLmluOiBVc2UgQUNfSEFWRV9GVU5DUyBpbnN0ZWFkIG9mIEFDX01JU1NJTkdfRlVOQ1MgKGdvbmUpLgoKVGh1IEp1bCAgMiAxODo0Nzo1MiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogbWFrZWxldmVsPjAgb3IgLUMgaW1wbGllcyAtdy4KClR1ZSBKdW4gMzAgMjA6NTA6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYywgam9iLmMsIGZ1bmN0aW9uLmM6IERvbid0ICNpbmNsdWRlIDxlcnJuby5oPi4KCW1ha2UuaDogRG8gaXQgaGVyZSBpbnN0ZWFkLgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKTogRG9uJ3QgZGVjbGFyZSBlcnJuby4KClRodSBKdW4gMjUgMTc6MDY6NTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhci5aKTogRGVwZW5kIG9uIElOU1RBTEwsIGNvbmZpZ3VyZS5pbi4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IElmIGNvbW1hbmRzIG9yIGRlcHMgYXJlIHJ1bm5pbmcgYWZ0ZXIKCXVwZGF0ZV9maWxlXzEgcmV0dXJucywgYnJlYWsgb3V0IG9mIHRoZSA6OiBydWxlICgtPnByZXYpIGxvb3AgYW5kCglqdXN0IHJldHVybi4KCgkqIGpvYi5jCShqb2JfbmV4dF9jb21tYW5kKTogTmV3IGZ1bmN0aW9uOyBjb2RlIGZyb20gc3RhcnRfam9iLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVuYW1lZCBmcm9tIHN0YXJ0X2pvYi4gIENhbGwgam9iX25leHRfY29tbWFuZAoJYW5kIHJlY3Vyc2UgZm9yIGVtcHR5IGNvbW1hbmQgbGluZXMgYW5kIC1uLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogQ2FsbCBzdGFydF9qb2JfY29tbWFuZCwgbm90IHN0YXJ0X2pvYi4KCShuZXdfam9iKTogQ2FsbCBqb2JfbmV4dF9jb21tYW5kIHRvIHByaW1lIHRoZSBjaGlsZCBzdHJ1Y3R1cmUsIGFuZAoJdGhlbiBjYWxsIHN0YXJ0X3dhaXRpbmdfam9iLgoJKHJlYXBfY2hpbGRyZW4pOiBVc2Ugam9iX25leHRfY29tbWFuZCBhbmQgc3RhcnRfam9iX2NvbW1hbmQuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBDYWxsIHN0YXJ0X3JlbW90ZV9qb2JfcCBoZXJlLCBhbmQgc3RvcmUgaXRzCglyZXN1bHQgaW4gQy0+cmVtb3RlLiAgSWYgemVybywgY2hlY2sgdGhlIGxvYWQgYXZlcmFnZSBhbmQKCW1heWJlIHB1dCBDIG9uIHdhaXRpbmdfam9icy4KCShzdGFydF9qb2JfY29tbWFuZCk6IFRlc3QgQ0hJTEQtPnJlbW90ZSByYXRoZXIgdGhhbiBjYWxsaW5nCglzdGFydF9yZW1vdGVfam9iX3AuICBEb24ndCBkbyBsb2FkIGF2ZyBjaGVja2luZyBhdCBhbGwgaGVyZS4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IGhhbmRsZSBTSUdJTEwsIFNJR0lPVCwgU0lHRU1ULCBTSUdCVVMsCglTSUdTRUdWLCBTSUdGUEUgb3IgU0lHVFJBUC4KCgkqIGNvbXBhdE1ha2VmaWxlIChnbG9iL2xpYmdsb2IuYSk6IERvbid0IHBhc3Mgc3JjZGlyIHRvIHN1Yi1tYWtlLgoJY29uZmlndXJlIHdpbGwgc2V0IGl0IGluIGdsb2IvTWFrZWZpbGUuCgpXZWQgSnVuIDI0IDE5OjQwOjM0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkaXIuYyBbRElSRU5UXSAoZGlyZWN0KTogRG9uJ3QgZGVmaW5lIHRvIGRpcmVudC4KCVshIERJUkVOVF0gKGRpcmVjdCk6IERlZmluZSB0byBkaXJlbnQuCgkoZGlyX2ZpbGVfZXhpc3RzX3ApOiBVc2Ugc3RydWN0IGRpcmVudCBpbnN0ZWFkIG9mIHN0cnVjdCBkaXJlY3QuCgoJKiBtYWtlLmggKGdldGN3ZCk6IE5vIHNwYWNlIGJldHdlZW4gbWFjcm8gYW5kICggZm9yIGFyZ3MhCgoJKiBqb2IuYyAoc3RhcnRfam9iKTogRG9uJ3QgcHV0IHRoZSBqb2Igb24gd2FpdGluZ19qb2JzIGlmCglqb2Jfc2xvdHNfdXNlZD09MC4KCgkqIG1ha2UudGV4aW5mbyAoTWlzc2luZyk6IFNob3J0ZW5lZCB0aXRsZS4KClR1ZSBKdW4gMjMgMTg6NDI6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBQcmludCAicm0iIGNvbW1hbmRzIHVuZGVyIC1uLgoKTW9uIEp1biAyMiAxNjoyMDowMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNS4KCkZyaSBKdW4gMTkgMTY6MjA6MjYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIFtNX1VOSVhdOiAjdW5kZWYgTV9YRU5JWC4KCldlZCBKdW4gMTcgMTc6NTk6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBQdXQgQCBwcmVmaXggb24gUkNTIGNtZHMuCgpUdWUgSnVuIDE2IDE5OjI0OjE3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoZ2V0bG9hZGF2Zy5vKTogUmVtb3ZlZCBzcGVjaWFsIHJ1bGUuCgkoQ0ZMQUdTKTogRG9uJ3QgaW5jbHVkZSAkKGRlZmluZXMpLgoJKC5jLm8pOiBEZWZpbmUgc3VmZml4IHJ1bGUuCgkoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIENQUEZMQUdTPSQoZGVmaW5lcykgdG8gc3VibWFrZS4KCShHRVRPUFRfU1JDLCBzcmNzLCB0YWdzcmNzKTogUHJlZml4IGZpbGVzIHdpdGggJChzcmNkaXIpLy4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKTogTW92ZWQgbG9jYWwgdmFycyBpbnNpZGUgI2lmJ2QgYmxvY2suCgoJKiBtYWtlLmggKG1heCk6IFJlbW92ZWQuCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9idWZmZXJfb3V0cHV0KTogRG9uJ3QgdXNlIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKElOU1RBTEwpOiBEZWZpbmUuCgkoTWFrZWZpbGUpOiBOZXcgcnVsZSB0byBtYWtlIGZyb20gTWFrZWZpbGUuaW4uCgkoc3JjZGlyKTogRGVmaW5lLgoJKFZQQVRIKTogRGVmaW5lLgoJKGdldGxvYWRhdmcubywgcmVtb3RlLm8pOiBVc2UgYXV0b2NvbmYgJGZvbzwgaGFjay4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCk6IFJlbW92ZWQgcmV0dXJuLgoKTW9uIEp1biAxNSAxNzo0Mjo1MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE0LgoKCSogbWFrZS50ZXhpbmZvIChTdW1tYXJ5KTogTmV3IG5vZGUuCgkoU3BlY2lhbCBUYXJnZXRzKTogTWVudGlvbiAuRVhQT1JUX0FMTF9WQVJJQUJMRVMgaGVyZS4KCgkqIHZhcmlhYmxlLmMgKG1heCk6IE1vdmVkIHRvIG1ha2UuaC4KCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzLCBzcmNzKTogQWRkZWQgYXIgJiBhcnNjYW4uCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBOZXcgZnVuY3Rpb24sIDJuZCBoYWxmIG9mIG5ld19qb2IuCgkobmV3X2pvYik6IENhbGwgaXQuCgkoc3RhcnRfd2FpdGluZ19qb2JzKTogTmV3IGZ1bmN0aW9uLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBDYWxsIHN0YXJ0X3dhaXRpbmdfam9icyBhdCB0aGUgdG9wCglvZiB0aGUgbWFpbiBsb29wLgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcywgc3Jjcyk6IFJlbW92ZWQgbG9hZCwgYWRkZWQgZ2V0bG9hZGF2Zy4KCkZyaSBKdW4gMTIgMTk6MzM6MTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IE5ldyBmdW5jdGlvbi4gIFVzZXMgZ2V0bG9hZGF2Zy4KCSh3YWl0aW5nX2pvYnMpOiBOZXcgdmFyaWFibGUuCgkoc3RhcnRfam9iKTogRG9uJ3QgY2FsbCB3YWl0X3RvX3N0YXJ0X2pvYi4gIEluc3RlYWQsIGlmCglsb2FkX3Rvb19oaWdoIHJldHVybnMgbm9uemVybywgYWRkIHRoZSBjaGlsZCB0byB0aGUKCWB3YWl0aW5nX2pvYnMnIGNoYWluIGFuZCByZXR1cm4gd2l0aG91dCBzdGFydGluZyB0aGUgam9iLgoKVGh1IEp1biAxMSAwMDowNToyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9idWZmZXJfb3V0cHV0KTogTWFkZSBnbG9iYWwgYWdhaW4uCgkqIHZhcmlhYmxlLmg6IEFuZCBkZWNsYXJlIGl0LgoKCSogYXJzY2FuLmMgKFBPUlRBUik6IERlZmluZSBmb3IgYWxsIHN5c3RlbXMgaWYgUE9SVDVBUiBpcyBub3QgZGVmaW5lZC4KCShBUl9OQU1FTEVOLCBBUl9UUkFJTElOR19TTEFTSCk6IFJlbW92ZWQuCgkoYXJfc2Nhbik6IERvbid0IHVzZSBpdC4gIERvbid0ICNpZmRlZiBBUl9UUkFJTElOR19TTEFTSDsganVzdCBsb29rCglmb3IgYSBzbGFzaCBpbiB0aGUgYXJjaGl2ZSBhdCBydW4gdGltZS4KCShhcl9uYW1lX2VxdWFsKTogUmV3cm90ZSAubyBoYWNraW5nIHRvIG5vdCB1c2UgQVJfTkFNRUxFTiwgYW5kIHRvCgljb3BlIHdpdGggdHJhaWxpbmctc2xhc2ggYW5kIG5vbi10cmFpbGluZy1zbGFzaCBhcmNoaXZlcy4KCgkqIG1haW4uYyAobWFpbikgWyEgU0VUVkJVRl9SRVZFUlNFRF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTR3IzIGV0IGFsLgoJW1NFVFZCVUZfUkVWRVJTRURdOiBBbHdheXMgYWxsb2NhdGUgYSBidWZmZXIgb3Vyc2VsdmVzLgoKCSogbG9hZC5jIChsb2FkX2F2ZXJhZ2UpIFtzZ2ldOiBVc2Ugc3lzbXAgY2FsbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChJTlNUQUxMX0RBVEEsIElOU1RBTExfUFJPR1JBTSk6IERlZmluZS4KCSgkKGJpbmRpcikvJChpbnN0bmFtZSksICQobWFuZGlyKS9tYWtlLiQobWFuZXh0KSk6IFVzZSB0aGVtLgoKCSogbWFrZS5oIFtIQVZFX1ZGT1JLX0hdOiAjaW5jbHVkZSA8dmZvcmsuaD4uCgkodmZvcmssIFZGT1JLX05BTUUpOiBEb24ndCBkZWZpbmUuCgkqIGpvYi5jIChzdGFydF9qb2IpOiBVc2UgInZmb3JrIiBpbiBwbGFjZSBvZiBWRk9SS19OQU1FLgoKCSogbWFrZS5oIFtIQVZFX0xJTUlUU19ILCBIQVZFX1NZU19QQVJBTV9IXTogSWYgI2RlZmluZSdkLCAjaW5jbHVkZQoJdGhlIGVhY2ggZmlsZS4gIFJlYXJyYW5nZWQgUEFUSF9NQVggaGFja2luZy4KCSogam9iLmM6IFJlYXJyYW5nZWQgTkdST1VQU19NQVggaGFja2luZy4KCgkqIHJlbWFrZS5jIChmc3RhdCwgdGltZSk6IERvbid0IGRlY2xhcmUuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IFZhbHVlIGlzIEBERUZTQC4KCShMT0FETElCRVMpOiBWYWx1ZSBpcyBATElCU0AuCgkoZXh0cmFzKTogVmFsdWUgaXMgQExJQk9CSlNALgoJKEFSQ0hJVkVTLCBBUkNISVZFU19TUkMsIEFMTE9DQVNSQyk6IFJlbW92ZWQuCgkqIGFyc2Nhbi5jLCBhci5jOiBTdXJyb3VuZCBib2R5IHdpdGggI2lmbmRlZiBOT19BUkNISVZFUy4KCgkqIG1pc2MuYyBbISBIQVZFX1VOSVNURF9IXTogVGVzdCBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsIGdldCppZC4KCgkqIG1ha2UuaCBbR0VUQ1dEX01JU1NJTkddOiBUZXN0IGluc3RlYWQgb2YgIVVTRyAmJiAhUE9TSVggZXQgYWwuCgkoZ2V0Y3dkKTogSnVzdCBkZWNsYXJlIGlmIHByZXNlbnQuICBJZiBub3QsIGRlY2xhcmUgYXMgYSBtYWNybwoJdXNpbmcgZ2V0d2QsIGFuZCBkZWNsYXJlIGdldHdkLgoJW1BBVEhfTUFYXSAoR0VUX1BBVEhfTUFYKTogI2RlZmluZSB0byBQQVRIX01BWC4KCSogbWFpbi5jIChtYWluLAlsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBVc2UgZ2V0Y3dkIGluc3RlYWQgb2YgZ2V0d2QuCgoJKiBtYWluLmMgKG1haW4pIFtTRVRMSU5FQlVGX01JU1NJTkddOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0cuCgoJKiBtYWtlLmggKFNJR0hBTkRMRVIsIFNJR05BTCk6IFJlbW92ZWQuCgkoUkVUU0lHVFlQRSk6IERlZmluZSBpZiBub3QgI2RlZmluZSdkLgoJKiBtYWluLmMgKG1haW4pOiBVc2Ugc2lnbmFsIGluIHBsYWNlIG9mIFNJR05BTC4KCgkqIG1haW4uYyBbU1lTX1NJR0xJU1RfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiBVU0cuCgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpIFtHRVRHUk9VUFNfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiBVU0cuCglbSEFWRV9VTklTVERfSF06IFRlc3QgaW5zdGVhZCBvZiBQT1NJWCB0byBub3QgZGVjbCBnZXRncm91cHMuCgoJKiBtYWluLmMgWyEgSEFWRV9VTklTVERfSF06IFRlc3QgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbCBjaGRpci4KCVshIFNURENfSEVBREVSU106IFRlc3QgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbCBleGl0ICYgYXRvZi4KCgkqIGpvYi5jIChjaGlsZF9oYW5kbGVyKSwgY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogUmV0dXJuCglSRVRTSUdUWVBFIGluc3RlYWQgb2YgaW50LgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIGZhdGFsX2Vycm9yX3NpZ25hbCBhbmQgY2hpbGRfaGFuZGxlciBoZXJlCgl0byByZXR1cm4gUkVUU0lHVFlQRTsgcmVtb3ZlZCB0b3AtbGV2ZWwgZGVjbCBvZiBmb3JtZXIuCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpLCBqb2IuYyAodW5ibG9ja19zaWdzLCBzdGFydF9qb2IpLAoJbWFpbi5jIFtTSUdTRVRNQVNLX01JU1NJTkddOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0cuCgpXZWQgSnVuIDEwIDIyOjA2OjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgW0hBVkVfV0FJVFBJRF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTRy4KCVshIEhBVkVfVU5JU1REX0hdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbGFyZSBtaXNjIGZucy4KCShHSURfVCk6IERvbid0ICNkZWZpbmUuCgkoc2VhcmNoX3BhdGgpOiBVc2UgZ2lkX3QgaW5zdGVhZCBvZiBHSURfVC4KCVtHRVREVEFCTEVTSVpFX01JU1NJTkcsIFNZU19TSUdMSVNUX01JU1NJTkcsIERVUDJfTUlTU0lOR106IFRlc3QKCXRoZXNlIGluZGl2aWR1YWxseSBpbnN0ZWFkIG9mIFVTRyBmb3IgYWxsLgoJKiBtYWtlLmggKGN0aW1lKTogRG9uJ3QgZGVjbGFyZS4gICNpbmNsdWRlIHRpbWUuaCBpbnN0ZWFkLgoJW0hBVkVfVU5JU1REX0hdOiAjaW5jbHVkZSA8dW5pc3RkLmg+IGFuZCAjZGVmaW5lIFBPU0lYICNpZmRlZgoJX1BPU0lYX1ZFUlNJT04uCgkqIGRpci5jIFtfX0dOVV9MSUJSQVJZX19dIChEX05BTUxFTik6IERlZmluZSB0byB1c2UgZF9uYW1sZW4gbWVtYmVyLgoJKiBtYWtlLmggW05FRURfTUVNT1JZX0hdOiBPbmx5IGluY2x1ZGUgbWVtb3J5LmggI2lmZGVmIHRoaXMuCgoJKiBhcnNjYW4uYzogUmVtb3ZlZCAjaWZkZWYgbWVzcyBhYm91dCBzdHJpbmcuaCBldCBhbC4KCUp1c3QgI2luY2x1ZGUgbWFrZS5oIGluc3RlYWQuCgkqIG1ha2UuaCAoZnN0YXQsIGF0b2wpOiBEZWNsYXJlLgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogRG9uJ3QgdXNlIHNpZ21hc2sgdG8gY2hlY2sgZm9yCglwcm9wYWdhdGVkIHNpZ25hbHM7IHVzZSB8fHMgaW5zdGVhZC4KCShQUk9QQUdBVEVEX1NJR05BTF9NQVNLKTogUmVtb3ZlZC4KCShmYXRhbF9lcnJvcl9zaWduYWwpIFtQT1NJWF06IFVzZSBzaWdwcm9jbWFzayBpbiBwbGFjZSBvZiBzaWdzZXRtYXNrLgoKCSogdmFyaWFibGUuYyAodmFyaWFibGVfYnVmZmVyLCB2YXJpYWJsZV9idWZmZXJfbGVuZ3RoLAoJaW5pdGlhbGl6ZV92YXJpYWJsZV9vdXRwdXQsIHZhcmlhYmxlX291dHB1dCk6IE1vdmVkIHRvIGV4cGFuZC5jOwoJbWFkZSBhbGwgc3RhdGljLgoJKHN0cnVjdCBvdXRwdXRfc3RhdGUsIHNhdmVfdmFyaWFibGVfb3V0cHV0LAoJcmVzdG9yZV92YXJpYWJsZV9vdXRwdXQpOiBSZW1vdmVkLgoJKiBleHBhbmQuYyAoaW5pdGlhbGl6ZV92YXJpYWJsZV9vdXRwdXQpOiBQdXQgYSBOVUwgYXQgdGhlIGJlZ2lubmluZwoJb2YgdGhlIG5ldyBidWZmZXIgYWZ0ZXIgYWxsb2NhdGluZyBpdC4KCShhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kX2Zvcl9maWxlKTogRG9uJ3QgdXNlCgl7c2F2ZSxyZXN0b3JlfV92YXJpYWJsZV9vdXRwdXQuICBEbyBpdCBieSBoYW5kIGluc3RlYWQsIGtlZXBpbmcKCXN0YXRlIG9uIHRoZSBzdGFjayBpbnN0ZWFkIG9mIG1hbGxvYydpbmcgaXQuCgkoYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCk6IFJlbW92ZWQuCgkqIHZhcmlhYmxlLmggKGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQpOiBEZWZpbmUgaGVyZSBhcyBtYWNyby4KCSh2YXJpYWJsZV9idWZmZXJfb3V0cHV0LCBpbml0aWFsaXplX3ZhcmlhYmxlX291dHB1dCwKCXNhdmVfdmFyaWFibGVfb3V0cHV0LCByZXN0b3JlX3ZhcmlhYmxlX291dHB1dCk6IFJlbW92ZWQgZGVjbHMuCgoJKiByZWFkLmMgKGNvbmRpdGlvbmFsX2xpbmUpOiBGb3IgYW4gaWYgY21kLCBpZiBhbnkgZWx0IG9mIHRoZQoJY29uZGl0aW9uYWxzIHN0YWNrIGlzIGlnbm9yaW5nLCBqdXN0IHB1c2ggYSBuZXcgbGV2ZWwgdGhhdCBpZ25vcmVzCglhbmQgcmV0dXJuIDE7IGRvbid0IGV2YWx1YXRlIHRoZSBjb25kaXRpb24uCgpUaHUgSnVuICA0IDIxOjAxOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogUHV0ICNpZmRlZidzIGFyb3VuZCBmcm9iYmluZyBTSUdTWVMgYW5kIFNJR0JVUy4KCgkqIGpvYi5jIChnZXRkdGFibGVzaXplKTogRG9uJ3QgZGVjbGFyZSBvciAjZGVmaW5lIGlmIGFscmVhZHkgI2RlZmluZSdkLgoKV2VkIEp1biAgMyAyMzo0MjozNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogSWYgYC5FWFBPUlRfQUxMX1ZBUklBQkxFUycgaXMgYSB0YXJnZXQsIHNldAoJZXhwb3J0X2FsbF92YXJpYWJsZXMuCgkqIG1ha2UudGV4aW5mbyAoVmFyaWFibGVzL1JlY3Vyc2lvbik6IERvY3VtZW50IC5FWFBPUlRfQUxMX1ZBUklBQkxFUy4KClR1ZSBKdW4gIDIgMjE6MDg6MzUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTMuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBDYWxjdWxhdGUgbGVuZ3RoIGZvciBeRCBhbmQgP0QKCWluZGl2aWR1YWxseSwgbWFraW5nIHN1cmUgdG8gZ2l2ZSB0aGVtIGF0IGxlYXN0IGVub3VnaCBzcGFjZSBmb3IgIi4vIi4KCgkqIG1ha2UuaCBbQ1JBWV06ICNkZWZpbmUgc2lnbmFsIHRvIGJzZHNpZ25hbC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtDUkFZXTogRGVmaW5lIFBDLCBTRUdMRFIsCglDRjc3UFBGTEFHUywgQ0Y3N1BQLCBDRlQsIENGLCBhbmQgRkMuCgoJKiBhcnNjYW4uYyAoQVJfSERSX1NJWkUpOiBEZWZpbmUgdG8gc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyKSwgaWYgaXQKCXdhc24ndCBkZWZpbmVkIGJ5IDxhci5oPi4KClRodSBNYXkgMjggMDA6NTY6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTIuCgpUdWUgTWF5IDI2IDAxOjI2OjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogSW5pdGlhbGl6ZSBMQVNUUlVMRSB0byBuaWwsIG5vdAoJcGF0dGVybl9ydWxlcy4KCk1vbiBNYXkgMjUgMTk6MDI6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEluaXRpYWxpemUgYWxsIHRoZSBsb25nX29wdGlvbiBlbHQgbWVtYmVycy4KClRodSBNYXkgMjEgMTY6MzQ6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoVGV4dCBGdW5jdGlvbnMpOiBDb3JyZWN0IGZpbHRlci1vdXQgZGVzY3JpcHRpb24uCgpUdWUgTWF5IDE5IDIwOjUwOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKHJlYWxjbGVhbik6IERvbid0IHJlbW92ZSBiYWNrdXAgZmlsZXMuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEFsbG9jYXRlIEFSR0MrMSBlbHRzIGluIGBvdGhlcl9hcmdzJy4KClN1biBNYXkgMTcgMTY6Mzg6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjExLgoKVGh1IE1heSAxNCAxNjo0MjozMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERvbid0IGRpZSBpZiB3YWl0IHJldHVybnMgRUlOVFIuCgpXZWQgTWF5IDEzIDE4OjI4OjI1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBBbHdheXMgcnVuIHRoZSBuZXh0IGNvbW1hbmQgZm9yIGEKCXN1Y2Nlc3NmdWwgdGFyZ2V0LiAgSWYgd2UgYXJlIGdvaW5nIHRvIGRpZSwgd2UgZG9uJ3Qgd2FudCB0byBsZWF2ZQoJdGhlIHRhcmdldCBwYXJ0aWFsbHkgbWFkZS4KClR1ZSBNYXkgMTIgMDA6Mzk6MTkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBBZnRlciBsb29wLCBpZiB3ZSBvbmx5CgloYXZlIG9uZSB3b3JkLCBjaGVjayBpdCBmb3IgYmVpbmcgYSBzaGVsbCBjb21tYW5kLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBBbGxvY2F0ZSBBUkdDIHNsb3RzIGluIG90aGVyX2FyZ3MgdG8KCWJlZ2luIHdpdGgsIHNvIHdlIG5ldmVyIG5lZWQgdG8gd29ycnkgYWJvdXQgZ3Jvd2luZyBpdC4KCUlmIHdlIGdldCBhIG5vbi1vcHRpb24gYXJnIGFuZCBQT1NJWExZX0NPUlJFQ1QgaXMgaW4gdGhlCgllbnZpcm9ubWVudCwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLiAgQWZ0ZXIgdGhlIGxvb3AsIGFkZCBhbGwgcmVtYWluaW5nCglhcmdzIHRvIG90aGVyX2FyZ3MgbGlzdC4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRm9yIHBvc2l0aXZlX2ludCBhbmQgZmxvYXRpbmcgc3dpdGNoZXMKCXdoZW4gb3B0YXJnIGlzIG5pbCwgdXNlIG5leHQgYXJnIGlmIGl0IGxvb2tzIHJpZ2h0IChzdGFydCB3aXRoIGEKCWRpZ2l0LCBvciBtYXliZSBkZWNpbWFsIHBvaW50IGZvciBmbG9hdGluZykuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEFsd2F5cyBzZXQgU0hFTEwgdG8KCWRlZmF1bHQgaWYgaXQgY29tZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBTZXQgaXRzIGV4cG9ydCBiaXQuCgkqIG1ha2UudGV4aW5mbyAoRW52aXJvbm1lbnQpOiBEb2N1bWVudCBjaGFuZ2UuCgpNb24gTWF5IDExIDAwOjMyOjQ2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMC4KCgkqIGNvbXBhdE1ha2VmaWxlICh0YWdzLCBUQUdTKTogVXNlIHZhcnMgZm9yIGNtZHMuCgkoRVRBR1MsIENUQUdTKTogRGVmaW5lLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBJZiBhIHN3aXRjaGVzIGVsdCBoYXMgYSBuaWwgbG9uZ19uYW1lLAoJbWFrZSB0aGUgbG9uZyBvcHRpb24gbmFtZSBlbHQgYmUgIiIuCglGaXhlZCBsb29wIHRvIG5vdCBpZ25vcmUgYWxsIHRoZSBvcHRpb25zLgoKCSogbWFrZS50ZXhpbmZvIChPcHRpb24gU3VtbWFyeSk6IEFkZGVkIGxvbmcgb3B0aW9ucy4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBDaGFuZ2VkIC1tJ3MgZGVzY3JpcHRpb24gdG8gIi1iIi4KCShkZWNvZGVfc3dpdGNoZXMpOiBXaGVuIHByaW50aW5nIHRoZSB1c2FnZSBtZXNzYWdlLCBkb24ndCBwcmludAoJc3dpdGNoZXMgd2hvc2UgZGVzY3JpcHRpb25zIHN0YXJ0IHdpdGggLS4KCVdoZW4gY29uc3RydWN0aW5nIHRoZSBsaXN0IG9mIG5hbWVzIGZvciBzd2l0Y2ggLUMsIHNlYXJjaCB0aGUKCXN3aXRjaGVzIHZlY3RvciBmb3Igc3dpdGNoZXMgd2hvc2UgZGVzY3JpcHRpb25zIGFyZSAiLUMiLgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IENhbGwgLVMgLS1uby1rZWVwLWdvaW5nLCBub3QgLS1kb250LWtlZXAtZ29pbmcuCglDYWxsIC1JIC0taW5jbHVkZS1kaXIsIG5vdCAtLWluY2x1ZGUtcGF0aC4KCShsb25nX29wdGlvbl9hbGlhc2VzKTogQWRkZWQgLS1uZXcgPT0gLVcsIC0tYXNzdW1lLW5ldyA9PSAtVywKCS0tYXNzdW1lLW9sZCA9PSAtbywgLS1tYXgtbG9hZCA9PSAtbCwgLS1kcnktcnVuID09IC1uLCAtLXJlY29uID09IC1uLAoJLS1tYWtlZmlsZSA9PSAtZi4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBSZW1vdmVkIGJvZ3VzICJzaWxlbnQiIGVsdC4KCShsb25nX29wdGlvbl9hbGlhc2VzKTogRGVmaW5lIG5ldyB2YXIuCgkoZGVjb2RlX3N3aXRjaGVzKTogQWRkIGxvbmdfb3B0aW9uX2FsaWFzZXMgb250byB0aGUgZW5kIG9mIHRoZSBsb25nCglvcHRpb25zIHZlY3RvciBjcmVhdGVkIGZvciBnZXRvcHRfbG9uZy4KCUxvb2sgdGhyb3VnaCBsb25nX29wdGlvbl9hbGlhc2VzIGZvciBleHRyYSBuYW1lcyB0byBsaXN0CglpbiB1c2FnZSBtZXNzYWdlLgoKU2F0IE1heSAgOSAwMDoyMTowNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogRml4ZWQgdG8gcHJvcGVybHkgbm90IHByaW50IHRoZQoJbGVhdmluZyBtZXNzYWdlIHdoZW4gd2UgaGF2ZW4ndCBwcmludGVkIHRoZSBlbnRlcmluZyBtZXNzYWdlLgoKRnJpIE1heSAgOCAyMTo1NTozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogQWRkZWQgZWx0cyBgbG9uZ19uYW1lJywKCWBkZXNjcmlwdGlvbicsIGFuZCBgYXJnZGVzYycuCgkoc3dpdGNoZXMpOiBBZGRlZCBpbml0aWFsaXplcnMgZm9yIG5ldyBtZW1iZXJzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFJld3JpdHRlbiB0byB1c2UgZ2V0b3B0X2xvbmcuCgkqIGNvbXBhdE1ha2VmaWxlIChHRVRPUFQsIEdFVE9QVF9TUkMpOiBEZWZpbmUuCgkob2Jqcywgc3Jjcyk6IEluY2x1ZGUgdGhlbS4KCgkqIGpvYi5jIChjaGlsZF9kaWVkKTogUmVuYW1lZCB0byBkZWFkX2NoaWxkcmVuOyBtYWRlIHN0YXRpYy4KCShjaGlsZF9oYW5kbGVyKTogSW5jcmVtZW50IGRlYWRfY2hpbGRyZW4gaW5zdGVhZCBvZiBzZXR0aW5nIGNoaWxkX2RpZWQuCgkocmVhcF9jaGlsZHJlbik6IERlY3JlbWVudCBkZWFkX2NoaWxkcmVuIGluc3RlYWQgb2YgY2xlYXJpbmcKCWNoaWxkX2RpZWQuICBUaGUgcG9pbnQgb2YgYWxsIHRoaXMgaXMgdG8gYXZvaWQgcHJpbnRpbmcgIndhaXRpbmcKCWZvciB1bmZpbmlzaGVkIGpvYnMiIHdoZW4gd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBibG9jay4KCVRoaXMgaGFwcGVuZWQgd2hlbiBtdWx0aXBsZSBTSUdDSExEcyBiZWZvcmUgcmVhcF9jaGlsZHJlbiB3YXMgY2FsbGVkLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBJZiBFUlIgaXMgc2V0LCBzbyB3ZSBkb24ndCBjYWxsIHN0YXJ0X2pvYgoJb24gdGhlIGNoaWxkIGJlaW5nIHJlYXBlZCwgaW5zdGVhZCBzZXQgaXRzIGNvbW1hbmRfc3RhdGUgdG8KCWNzX2ZpbmlzaGVkLgoJKHJlYXBfY2hpbGRyZW4sIGNoaWxkX2hhbmRsZXIsIG5ld19qb2IpOiBJIGFkZGVkIHNldmVyYWwKCWRlYnVnZ2luZyBwcmludGYncyB3aGlsZSBmaXhpbmcgdGhpcy4gIEkgbGVmdCB0aGVtIGluIGlmIChkZWJ1Z19mbGFnKQoJYmVjYXVzZSB0aGV5IG1heSBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGlzIHN0dWZmIGFnYWluLgoKV2VkIE1heSAgNiAyMjowMjozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiB2X2V4cG9ydCBpcyBub3QgMS4KCk1vbiBNYXkgIDQgMTc6Mjc6MzcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi45LgoKCSogdmFyaWFibGUuYyAoZXhwb3J0X2FsbF92YXJpYWJsZXMpOiBOZXcgdmFyaWFibGUuCgkodGFyZ2V0X2Vudmlyb25tZW50KTogRXhwb3J0IHZhcmlhYmxlcyB3aG9zZSBgZXhwb3J0JyBtZW1iZXIgaXMKCXZfZGVmYXVsdCBpZiBleHBvcnRfYWxsX3ZhcmlhYmxlcyBpcyBzZXQgYW5kIHRoZWlyIG5hbWVzIGFyZSBiZW5pZ24uCgkqIHZhcmlhYmxlLmg6IERlY2xhcmUgZXhwb3J0X2FsbF92YXJpYWJsZXMuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmIGV4cG9ydCBvciB1bmV4cG9ydCBpcyBnaXZlbiB3aXRoIG5vCglhcmdzLCBzZXQgb3IgY2xlYXIgZXhwb3J0X2FsbF92YXJpYWJsZXMsIHJlc3BlY3RpdmVseS4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IEV4Y2x1ZGUgTUFLRUxFVkVMIGluIHRoZSBsb29wLAoJc28gaXQgaXNuJ3QgZHVwbGljYXRlZCB3aGVuIHdlIGFkZCBpdCBhdCB0aGUgZW5kLgoKU3VuIE1heSAgMyAxNzo0NDo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi44LgoKCSogdmFyaWFibGUuaCAoc3RydWN0IHZhcmlhYmxlKTogQWRkZWQgbmV3IG1lbWJlciBgZXhwb3J0Jy4KCSogdmFyaWFibGUuYyAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IEluaXRpYWxpemUgaXQgdG8gdl9kZWZhdWx0LgoJKHRhcmdldF9lbnZpcm9ubWVudCk6IERvbid0IGNoZWNrIGZvciAuTk9FWFBPUlQuCglFeHBvcnQgdmFyaWFibGVzIHdob3NlIGBleHBvcnQnIG1lbWJlciBpcyB2X2RlZmF1bHQgYW5kIHRoYXQgd291bGQKCWhhdmUgYmVlbiBleHBvcnRlZCB1bmRlciAuTk9FWFBPUlQsIGFuZCB2YXJpYWJsZXMgd2hvc2UgYGV4cG9ydCcKCW1lbWJlciBpcyB2X2V4cG9ydC4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFJldHVybiB0aGUgdmFyaWFibGUgZGVmaW5lZC4KCSogdmFyaWFibGUuaCAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBDaGFuZ2VkIGRlY2wuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlY29nbml6ZSBgZXhwb3J0JyBhbmQgYHVuZXhwb3J0JyBkaXJlY3RpdmVzLgoKRnJpIE1heSAgMSAxMTozOTozOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pIFtQT1NJWF06IFJldmVyc2VkIGFyZ3MgdG8gc2lnYWRkc2V0LgoKVGh1IEFwciAzMCAxNzozMzozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIFtQT1NJWCB8fCAhVVNHXSAodW5ibG9ja19zaWdzKTogTmV3IGZuLgoJKHN0YXJ0X2pvYik6IEJsb2NrIHNpZ25hbHMgYmVmb3JlIGZvcmtpbmcuCgkobmV3X2pvYik6IFVuYmxvY2sgc2lnbmFscyBhZnRlciBwdXR0aW5nIHRoZSBuZXcgY2hpbGQgb24gdGhlIGNoYWluLgoJKiBtYWluLmMgKG1haW4pIFtQT1NJWF06IFVzZSBzaWdzZXRfdCBmYXRhbF9zaWduYWxfc2V0IGluc3RlYWQgb2YKCWludCBmYXRhbF9zaWduYWxfbWFzay4KCgkqIGxvYWQuYyBbc2dpXSAoTERBVl9DVlQpOiBEZWZpbmUuCgpXZWQgQXByIDI5IDE3OjE1OjU5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi43LgoKCSogbG9hZC5jIChsb2FkX2F2ZXJhZ2UpIFtzZ2ldOiBDbGVhciB0aGUgaGlnaCBiaXQgb2YgdGhlIGFkZHJlc3MKCWZyb20gdGhlIHN5bWJvbCB0YWJsZSBiZWZvcmUgbG9va2luZyBpdCB1cCBpbiBrbWVtLgoKCSogbWlzYy5jIChmYXRhbCwgbWFrZWZpbGVfZmF0YWwpOiBQdXQgKioqIGluIGZhdGFsIGVycm9yIG1lc3NhZ2VzLgoJKHJlbWFrZV9maWxlKTogTm8gbG9uZ2VyIG5lZWRlZCBpbiBtZXNzYWdlIGhlcmUuCgoJKiBtYWluLmMgKGRpZSk6IENhbGwgcmVhcF9jaGlsZHJlbiB3aXRoIEJMT0NLPT0xLgoKVHVlIEFwciAyOCAyMDo0NDozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKGZyZWVydWxlKTogRG9uJ3Qgc2V0IExBU1RSVUxFLT5uZXh0IGlmIExBU1RSVUxFIGlzIG5pbC4KClN1biBBcHIgMjYgMTU6MDk6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IEluaXRpYWxpemUgTEFTVFJVTEUgdG8gbmlsLAoJbm90IHRvIGhlYWQgb2YgY2hhaW4uICBFeHRyYWN0IG5leHQgcHRyIGJlZm9yZSB3ZSBtaWdodCBkbwoJZnJlZXJ1bGUsIGFuZCB1c2UgdGhhdCBmb3IgbmV4dCBpdGVyYXRpb24uCgkoZnJlZXJ1bGUpOiBTdGlsbCBkbyBuZXh0IHB0ciBmcm9iYmluZyBpZiBMQVNUUlVMRSBpcyBuaWwuCgpUdWUgQXByIDIxIDAzOjE2OjI5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNoaWxkX2Vycm9yKTogUmVtb3ZlZCBleHRyYSAlcyBmcm9tIGVycm9yIG1zZyBmb3JtYXQuCgoJKiBWZXJzaW9uIDMuNjIuNi4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3Qgc3RhcnQgbGF0ZXIgY29tbWFuZHMgaW4gYSBzZXF1ZW5jZQoJaWYgRVJSIGlzIG5vbnplcm8uCgoJKiBqb2IuYyAobmV3X2pvYik6IEFsd2F5cyBjYWxsIHJlYXBfY2hpbGRyZW4gd2l0aCBCTE9DSz09MCBmaXJzdCB0aGluZy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogTmV3IGZ1bmN0aW9uOyB3b3JrIHRoYXQgdXNlZCB0byBiZSBkb25lIGluCgljaGlsZF9oYW5kbGVyLgoJKGNoaWxkX2RpZWQpOiBOZXcgZ2xvYmFsIHZhci4KCShjaGlsZF9oYW5kbGVyKTogTm93IGp1c3Qgc2V0cyBjaGlsZF9kaWVkLgoJKHdhaXRfZm9yX2NoaWxkcmVuKTogUmVtb3ZlZC4KCSh1bmtub3duX2NoaWxkcmVuX3Bvc3NpYmxlLCBibG9ja19zaWduYWxzLCB1bmJsb2NrX3NpZ25hbHMsCglwdXNoX3NpZ25hbHNfYmxvY2tlZF9wLCBwb3Bfc2lnbmFsc19ibG9ja2VkX3ApOiBSZW1vdmVkLgoJKGNoaWxkX2V4ZWN1dGVfam9iKTogUmVtb3ZlZCBjYWxsIHRvIHVuYmxvY2tfc2lnbmFscy4KCShuZXdfam9iKTogUmVtb3ZlZCBjYWxscyB0byBwdXNoX3NpZ25hbHNfYmxvY2tlZF9wIGFuZAoJcG9wX3NpZ25hbHNfYmxvY2tlZF9wLgoJKiBqb2IuaDogRGVjbGFyZSByZWFwX2NoaWxkcmVuLCBub3Qgd2FpdF9mb3JfY2hpbGRyZW4uCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIGpvYi5jIChuZXdfam9iKSwKCWxvYWQuYyBbTERBVl9CQVNFRF0gKHdhaXRfdG9fc3RhcnRfam9iKSwgbWFpbi5jIChkaWUpLAoJcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKSwgZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKToKCUNoYW5nZWQgd2FpdF9mb3JfY2hpbGRyZW4gY2FsbHMgdG8gcmVhcF9jaGlsZHJlbi4KCVNvbWUgbmVlZGVkIHRvIGJlIGxvb3BzIHRvIHdhaXQgZm9yIGFsbCBjaGlsZHJlbiB0byBkaWUuCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIG1haW4uYyAobWFpbiwKCWxvZ193b3JraW5nX2RpcmVjdG9yeSksIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6IFJlbW92ZWQgY2FsbHMKCXRvIHB1c2hfc2lnbmFsc19ibG9ja2VkX3AgYW5kIHBvcF9zaWduYWxzX2Jsb2NrZWRfcC4KCSogam9iLmg6IFJlbW92ZWQgZGVjbHMuCgoJKiBqb2IuaDogQWRkZWQgY29weXJpZ2h0IG5vdGljZS4KCldlZCBBcHIgMTUgMDI6MDI6NDAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IE5vICoqKiBmb3IgaWdub3JlZCBlcnJvci4KClR1ZSBBcHIgMTQgMTg6MzE6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGltcGxpY2l0LmMgKERFQlVHUDIpOiBVc2UgZG8gLi4uIHdoaWxlICgwKSBpbnN0ZWFkIG9mIGlmIC4uLiBlbHNlIHRvCglhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBEb24ndCByZW1vdmUgLi8gd2hlbiBpdCBpcyBmb2xsb3dlZCBieSBhCglibGFuay4KCk1vbiBBcHIgMTMgMjE6NTY6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCAoREVCVUdQUik6IFVzZSBkbyAuLi4gd2hpbGUgKDApIGluc3RlYWQgb2YgaWYgLi4uIGVsc2UgdG8KCWF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogUnVuIGZpbGVfbXRpbWUgb24gdGhlIGFsc29fbWFrZQoJZmlsZXMsIHNvIHZwYXRoX3NlYXJjaCBjYW4gaGFwcGVuLgoKCSogR05VbWFrZWZpbGUgKHRlc3RzKTogVXNlIHBlcmwgdGVzdCBzdWl0ZSBmcm9tIGNzYUBzdy5zdHJhdHVzLmNvbS4KCShhbHBoYS1maWxlcyk6IEluY2x1ZGUgdGVzdCBzdWl0ZSB0YXIgZmlsZS4KCkZyaSBBcHIgIDMgMDA6NTA6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuNS4KCldlZCBBcHIgIDEgMDU6MzE6MTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSwgdXBkYXRlX2ZpbGVfMSk6IERvIGNoZWNrX3JlbmFtZWQgb24gZWx0cwoJb2YgZGVwIGNoYWlucyB3aGVuIHRyYXZlcnNpbmcgdGhlbS4gIFNvbWV0aGluZyB1bnJlbGF0ZWQgbWlnaHQgaGF2ZQoJcmVuYW1lZCBvbmUgb2YgdGhlIGZpbGVzIHRoZSBkZXAgY2hhaW4gcG9pbnRzIHRvLgoKCSogZmlsZS5jIChyZW5hbWVfZmlsZSk6IElmIEZJTEUgaGFzIGJlZW4gcmVuYW1lZCwgZm9sbG93IGl0cwoJYHJlbmFtZWQnIHB0ciwgc28gd2UgZ2V0IHRvIHRoZSBmaW5hbCByZWFsIEZJTEUuICBVc2luZyB0aGUgcmVuYW1lZAoJb25lcyBsb3NlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBpbiB0aGUgaGFzaCB0YWJsZSwgc28gdGhlIHJlbW92YWwKCWNvZGUgbG9vcHMgaW5maW5pdGVseS4KCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogQ2xvYmJlciBudWxsIHRlcm1pbmF0b3IgaW50bwoJTUFLRUZJTEVTIGV4cGFuc2lvbiwgc28gc3RyaW5nIHBhc3NlZCB0byByZWFkX21ha2VmaWxlIGlzIHByb3Blcmx5Cgl0ZXJtaW5hdGVkLgoKTW9uIE1hciAzMCAyMDoxODowMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6ICQqIGZvciBhcmNoaXZlIG1lbWJlciB3aXRoCglleHBsaWNpdCBjbWRzIGlzIHN0ZW0gb2YgbWVtYmVyLCBub3Qgb2Ygd2hvbGUgYGxpYihtZW1iZXIpJy4KClRodSBNYXIgMjYgMTU6MjQ6MzggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjQuCgpUdWUgTWFyIDI0IDA1OjIwOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKG5ld19wYXR0ZXJuX3J1bGUpOiBSdWxlcyBhcmUgaWRlbnRpY2FsIG9ubHkgaWYgYWxsIHRoZWlyCgl0YXJnZXRzIG1hdGNoIChyZWdhcmRsZXNzIG9mIG9yZGVyKS4KCldlZCBNYXIgMTEgMTM6NDk6NTQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAocmVtYWtlX2ZpbGUpOiBDaGFuZ2VkIGVycm9yICJubyB3YXkgdG8gbWFrZSIgdG8gIm5vCglydWxlIHRvIG1ha2UiLiAgRmlhdCBIdWdoLgoKCSogbWFrZS50ZXhpbmZvIChMYXN0IFJlc29ydCk6IERlc2NyaWJlICU6OiBydWxlcyBhbmQgbmV3IC5ERUZBVUxUCgliZWhhdmlvci4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogT25seSB1c2UgLkRFRkFVTFQgY21kcyBpZiBGSUxFIGlzIG5vdCBhCgl0YXJnZXQuCgpUdWUgTWFyIDEwIDE4OjEzOjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiByZW1vdGUtc3R1Yi5jLCByZW1vdGUtY3N0bXMuYyAoc3RhcnRfcmVtb3RlX2pvYik6IFRha2UgbmV3IGFyZywKCWVudmlyb25tZW50IHRvIHBhc3MgdG8gY2hpbGQuCgkqIGpvYi5jIChzdGFydF9qb2IpOiBQYXNzIGl0LgoKTW9uIE1hciAgOSAxOTowMDoxMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChlbnRlcl9maWxlKTogQWxzbyBzdHJpcCAuL3MgaGVyZSwgdG8gZ2V0IGNvbW1hbmQtbGluZQoJdGFyZ2V0IG5hbWVzLgoKCSogcmVtb3RlLWNzdG1zLmM6IEFkZCBjb21tZW50IHRlbGxpbmcgcGVvcGxlIHRvIGxlYXZlIG1lIGFsb25lLgoKCSogY29tcGF0TWFrZWZpbGUgKG1hbnBhZ2UgaW5zdGFsbCk6IFJlbW92ZSB0YXJnZXQgYmVmb3JlIGNvcHlpbmcuCgpUdWUgTWFyICAzIDE4OjQzOjIxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKE1pc3NpbmcpOiBSZW5hbWVkIHRvICJJbmNvbXBhdGliaWxpdGllcyBhbmQgLi4uIi4KCUFkZGVkIHBhcmFncmFwaCBkZXNjcmliaW5nICQ/IGluY29tcGF0aWJpbGl0eSB3aXRoIFVuaXggYW5kIFBPU0lYLjIuCgpTdW4gTWFyICAxIDE1OjUwOjU0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogRG9uJ3QgZGVjbGFyZSBmb3JrIG9yIHBpcGUuCglVc2UgdmZvcmsgaW5zdGVhZCBvZiBmb3JrLgoKVHVlIEZlYiAyNSAyMjowNTozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChDaGFpbmVkIFJ1bGVzKTogQ2xhcmlmeSAuUFJFQ0lPVVMgdG8gc2F2ZQoJaW50ZXJtZWRpYXRlIGZpbGVzLgoKCSogbG9hZC5jIFtzdW5dIChMREFWX0NWVCk6IERlZmluZSB0byBkaXZpZGUgYnkgRlNDQUxFLgoKU3VuIEZlYiAxNiAwMjowNToxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjMuCgpTYXQgRmViIDE1IDE3OjEyOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobWFrZWluZm8pOiBVc2UgZW1hY3MgYmF0Y2gtdGV4aW5mby1mb3JtYXQgZm4uCgpGcmkgRmViIDE0IDAwOjExOjU1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDb3JyZWN0bHkgaGFuZGxlIGRlZmluZSAmIGVuZGVmIGluIGlmZGVmcy4KCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogUGFzcyBhcmcgZm9yICVzIGluIGVycm9yIG1zZy4KCgkqIG1haW4uYyAobWFpbikgW19fSUJNUjIsIFBPU0lYXTogVXNlIGNvcnJlY3QgKGEgbGEgVVNHcjMpIHNldHZidWYKCWNhbGwuCgpXZWQgRmViIDEyIDEyOjA3OjM5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKExpYnJhcmllcy9TZWFyY2gpOiBTYXkgaXQgZG9lcyAvdXNyL2xvY2FsL2xpYiB0b28uCgpTdW4gRmViICA5IDIzOjA2OjI0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGVjayBmb3IgZXh0cmFuZW91cyBgZW5kZWYnIHdoZW4gaWdub3JpbmcuCgpUaHUgRmViICA2IDE2OjE1OjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMi4KClR1ZSBGZWIgIDQgMjA6MDQ6NDYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQ29ycmVjdGx5IGlnbm9yZQoJd2hpdGVzcGFjZSBhZnRlciBiYWNrc2xhc2gtTkwuCgpGcmkgSmFuIDMxIDE4OjMwOjA1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZTogSWdub3JlIGVycm9ycyBmcm9tIGNoZ3JwIGFuZCBjaG1vZCB3aGVuIGluc3RhbGxpbmcuCgpXZWQgSmFuIDI5IDE4OjEzOjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IFdoZW4gc2V0dGluZyBNQUtFTEVWRUwgaW4gdGhlIGVudiB0byByZS1leGVjLAoJYWxsb2NhdGUgc3BhY2Ugc28gYXMgbm90IHRvIGNsb2JiZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBvbGQgc3RyaW5nLgoKCSogbWFrZS5oIFtIQVZFX0FMTE9DQV9IXTogSW5jbHVkZSA8YWxsb2NhLmg+CgkqIGNvbXBhdE1ha2VmaWxlIChkZWZpbmVzKTogRG9jdW1lbnQgSEFWRV9BTExPQ0FfSC4KCk1vbiBKYW4gMjAgMTM6NDA6MDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtWRk9SS19NSVNTSU5HXTogVXNlIGZvcmsgaW5zdGVhZC4KCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBEb2N1bWVudCBzYW1lLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBEb24ndCBjcmVhdGUgYW4gZW1wdHkKCWFyZyBpZiBiYWNrc2xhc2gtTkwgaXMgYXQgYmVnaW5uaW5nIG9mIHdvcmQuCgpTdW4gSmFuIDE5IDE2OjI2OjUzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyBbREdVWF06IENhbGwgc2V0dmJ1ZiBhcyBmb3IgVVNHcjMuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE5vdGljZSBjb3JyZWN0bHkgdGhhdAoJYmFja3NsYXNoLU5MIGlzIHRoZSBlbmQgb2YgdGhlIGFyZyAoYmVjYXVzZSBpdCBpcyByZXBsYWNlZCB3aXRoIGEKCXNwYWNlKS4KClRodSBKYW4gMTYgMTg6NDI6MzggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBJZiBTSEVMTCBpcyBuaWwsIHNldCBpdAoJdG8gZGVmYXVsdF9zaGVsbCBiZWZvcmUgcHJvY2VlZGluZy4KCgkqIG1ha2UuaCBbc2dpXTogTm8gYWxsb2NhLmgsIGFmdGVyIGFsbC4KCldlZCBKYW4gMTUgMTI6MzA6MDQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChtdWx0aV9nbG9iKTogQ29ucyB1cCB0aGUgY2hhaW4gb2YgdGhlIHJlc3VsdHMgb2YgZ2xvYgoJZnJvbSBiYWNrIHRvIGZyb250LCBzbyBpdCBjb21lcyBvdXQgaW4gZm9yd2FyZCBvcmRlci4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRG9uJ3QgZWF0IGNoYXIgZm9sbG93aW5nCgliYWNrc2xhc2gtTkwuCgpNb24gSmFuIDEzIDE5OjE2OjU2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW3VsdHJpeF06IEdFVD1nZXQsIGxpa2UgVVNHLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBSZW1vdmUgdGFicyBmb2xsb3dpbmcKCWJhY2tzbGFzaC1OTCBjb21ib3MgaW4gdGhlIGlucHV0IGxpbmUsIHNvIHRoZXkgZG9uJ3Qgc2hvdyB1cCB3aGVuCgl0aGF0IGxpbmUgaXMgcHJpbnRlZC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERvbid0IGNvbGxhcHNlX2NvbnRpbnVhdGlvbnMgdGhlIGxpbmUgb24KCWlucHV0OyBkbyBpdCBvbiB0aGUgY29weSB3ZSBkbyByZW1vdmVfY29tbWVudHMgb24uCglGb3IgcnVsZSBsaW5lcywgY29sbGFwc2VfY29udGludWF0aW9ucyB0aGUgbGluZSBhZnRlciBjaG9wcGluZwoJIjtjbWRzIiBvZmYgdGhlIGVuZCwgc28gd2UgZG9uJ3QgZWF0IGNvbnRzIGluIHRoZSBjbWRzLgoJR2l2ZSBlcnJvciBmb3IgIjtjbWRzIiB3aXRoIG5vIHJ1bGUuCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRWF0IGJhY2tzbGFzaC1OTCBjb21ib3MKCXdoZW4gY29uc3RydWN0aW5nIHRoZSBsaW5lIHRvIHJlY3Vyc2Ugb24gZm9yIHNsb3csIHRvby4KClNhdCBKYW4gMTEgMDI6MjA6MjcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChlbnRlcl9maWxlKTogRG9uJ3Qgc3RyaXAgbGVhZGluZyBgLi8ncy4KCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFRha2UgbmV3IGFyZyBTVFJJUDsgaWYgbm9uemVybywgZG8gaXQgaGVyZS4KCSogZGVmYXVsdC5jIChzZXRfZGVmYXVsdF9zdWZmaXhlcyksIGZ1bmN0aW9uLmMgKHN0cmluZ19nbG9iKSwKCXJlYWQuYyAocmVhZF9tYWtlZmlsZSksIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBDaGFuZ2UgY2FsbGVycy4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfSUJNUjJdOiBGQz14bGYKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVHVybiBiYWNrc2xhc2gtTkwgYW5kCglmb2xsb3dpbmcgd2hpdGVzcGFjZSBpbnRvIGEgc2luZ2xlIHNwYWNlLCByYXRoZXIgdGhhbiBqdXN0IGVhdGluZwoJdGhlIGJhY2tzbGFzaC4KCgkqIG1ha2UudGV4aW5mbyAoQ29weWluZyk6IEBpbmNsdWRlIGdwbC50ZXhpbmZvLCByYXRoZXIgdGhhbgoJZHVwbGljYXRpbmcgaXRzIGNvbnRlbnRzLgoKRnJpIE5vdiAgOCAyMDowNjowMyAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBNYWtlIHN1cmUgbm90IHRvIGJvdGhlcgoJcHJvY2Vzc2luZyBhbiBlbXB0eSBsaW5lLgoKCSogVmVyc2lvbiAzLjYyLjAuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFsd2F5cyByZWN1cnNlIGZvciBzbG93OwoJc2ltcGxlIGNhc2UgZGlkbid0IGhhbmRsZSBmaW5kaW5nIG5ld2xpbmVzLgoKVHVlIE5vdiAgNSAxODo1MToxMCAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBTZXQgUkVTVFAgcHJvcGVybHkgd2hlbgoJc2xvdzsgZG9uJ3QgXGlmeSBwYXN0IGEgbmV3bGluZS4KCkZyaSBOb3YgIDEgMTk6MzQ6MjggMTk5MSAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbc2dpXTogI2luY2x1ZGUgPGFsbG9jYS5oPi4KCgwKClNlZSBDaGFuZ2VMb2cuMSwgYXZhaWxhYmxlIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDoKCglodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9tYWtlLmdpdC90cmVlLwoKZm9yIGVhcmxpZXIgY2hhbmdlcy4KCgpDb3B5cmlnaHQgKEMpIDE5OTEtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIE1ha2UuCgpHTlUgTWFrZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQp0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCnZlcnNpb24uCgpHTlUgTWFrZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCnRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K