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+CgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKSBbV0lORE9XUzMyXTogVGhlIGFyX2RhdGUgZmllbGQgaXMgYQoJc3RyaW5nIG9uIFdpbmRvd3MsIG5vdCBhIHRpbWVzdGFtcC4KCjE5OTktMDctMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45MCByZWxlYXNlZC4KCgkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogUmVxdWlyZSBhdXRvbWFrZSAxLjQuCgoJKiBmdW5jdGlvbi5jOiBSZWFycmFuZ2Ugc28gd2UgZG9uJ3QgbmVlZCB0byBwcmVkZWNsYXJlIHRoZQoJZnVuY3Rpb25fdGFibGUgYXJyYXk7IEsmUiBDIGNvbXBpbGVycyBkb24ndCBsaWtlIHRoYXQuCgoJKiBhY2luY2x1ZGUubTQgKEFDX0ZVTkNfU0VMRUNUKTogT3VjaDsgdGhpcyByZXF1aXJlcyBhbiBBTlNJIEMKCWNvbXBpbGVyISAgQ2hhbmdlIHRvIHdvcmsgd2l0aCBLJlIgY29tcGlsZXJzIGFzIHdlbGwuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IFB1dCBidWlsZC5zaCBiYWNrLiAgSSBkb24ndCBrbm93IGhvdyBJCgl0aG91Z2h0IGl0IHdvdWxkIHdvcmsgdGhpcyB3YXkgOi0vLiAgV2UnbGwgaGF2ZSB0byB0aGluayBvZgoJc29tZXRoaW5nIGVsc2UuCgkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgcnVsZSB0byBjcmVhdGUgYnVpbGQuc2guCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogUmVhcnJhbmdlIHRoZSBkZWZhdWx0IGNvbW1hbmQKCWxpbmVzIHRvIGNvbmZvcm0gdG8gUE9TSVggcnVsZXMgKHB1dCB0aGUgZmlsZW5hbWUgYXJndW1lbnQgJDwKCV9hZnRlcl8gdGhlIE9VVFBVVF9PUFRJT04sIG5vdCBiZWZvcmUgaXQpLgoKCSogdmFyaW91czogQ2hhbmdlZCAhc3RybmNtcCgpIGNhbGxzIHRvIHN0cm5lcSgpIG1hY3Jvcy4KCgkqIG1pc2MuYyAoc2luZGV4KTogTWFrZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudC4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGUpOiBDaGFuZ2Ugc2F2ZXN0cmluZyhYLHN0cmxlbihYKSkgdG8geHN0cmR1cCgpLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IERpdHRvLgoJKiBtYWluLmMgKGVudGVyX2NvbW1hbmRfbGluZV9maWxlKTogRGl0dG8uCgkobWFpbik6IERpdHRvLgoJKiBtaXNjLmMgKGNvcHlfZGVwX2NoYWluKTogRGl0dG8uCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERpdHRvLgoJKHBhcnNlX2ZpbGVfc2VxKTogRGl0dG8uCgkodGlsZGVfZXhwYW5kKTogRGl0dG8uCgkobXVsdGlfZ2xvYik6IERpdHRvLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogRGl0dG8uCgkqIHZhcmlhYmxlLmMgKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBEaXR0by4KCShkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IERpdHRvLgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IERpdHRvLgoKCSogbWlzYy5jICh4cmVhbGxvYyk6IFNvbWUgcmVhbGxvY3MgYXJlIG5vbi1zdGFuZGFyZDogd29yayBhcm91bmQKCXRoZW0gaW4geHJlYWxsb2MgYnkgY2FsbGluZyBtYWxsb2MgaWYgUFRSIGlzIE5VTEwuCgkqIG1haW4uYyAobWFpbik6IENhbGwgeHJlYWxsb2MoKSBkaXJlY3RseSBpbnN0ZWFkIG9mIHRlc3RpbmcgZm9yCglOVUxMLgoKCSogZnVuY3Rpb24uYyAoZnVuY19zb3J0KTogRG9uJ3QgdHJ5IHRvIGZyZWUgTlVMTDsgc29tZSBvbGRlciwKCW5vbi1zdGFuZGFyZCB2ZXJzaW9ucyBvZiBmcmVlKCkgZG9uJ3QgbGlrZSBpdC4KCgkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtZG1hbGxvYyk6IEluc3RhbGwgc29tZSBzdXBwb3J0IGZvciB1c2luZwoJZG1hbGxvYyAoaHR0cHM6Ly93d3cuZG1hbGxvYy5jb20vKSB3aXRoIG1ha2UuICBVc2UgLS1lbmFibGUtZG1hbGxvYwoJd2l0aCBjb25maWd1cmUgdG8gZW5hYmxlIGl0LgoKCSogZnVuY3Rpb24uYyAoZnVuY3Rpb25fdGFibGVfZW50cnkpOiBXaG9vcHMhICBUaGUgZnVuY3Rpb24uYwoJcmV3cml0ZSBicmVha3MgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogYWxsIHRleHQgdG8gYSBmdW5jdGlvbiBpcwoJYnJva2VuIGludG8gYXJndW1lbnRzLCBhbmQgZXh0cmFzIGFyZSBpZ25vcmVkLiAgU28gJChzb3J0IGEsYixjKQoJcmV0dXJucyAiYSIhICBFdGMuICBPdWNoLiAgRml4IGl0IGJ5IG1ha2luZyBhIHBvc2l0aXZlIHZhbHVlIGluCgl0aGUgUkVRVUlSRURfQVJHUyBmaWVsZCBtZWFuIGV4YWN0bHkgdGhhdCBtYW55IGFyZ3VtZW50cyB0byB0aGUKCWZ1bmN0aW9uOyBhbnkgImV4dHJhcyIgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgbGFzdCBhcmd1bWVudCBhcwoJYmVmb3JlLiAgQSBuZWdhdGl2ZSB2YWx1ZSBtZWFucyBhdCBsZWFzdCB0aGF0IG1hbnksIGJ1dCBtYXkgYmUKCW1vcmU6IGluIHRoaXMgY2FzZSBhbGwgdGV4dCBpcyBicm9rZW4gb24gY29tbWFzLgoJKGhhbmRsZV9mdW5jdGlvbik6IFN0b3Agd2hlbiB3ZSd2ZSBzZWVuIFJFUVVJUkVEX0FSR1MgYXJncywgaWYgPjAuCgkoZXhwYW5kX2J1aWx0aW5fZnVuY3Rpb24pOiBDb21wYXJlIG51bWJlciBvZiBhcmdzIHRvIHRoZSBhYnNvbHV0ZQoJdmFsdWUgb2YgUkVRVUlSRURfQVJHUy4KCjE5OTktMDctMjAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEVuc3VyZSB0aGF0IHRoZSBzdGF0ZSBvZiB0aGUgdGFyZ2V0CglpcyBjc19ydW5uaW5nLiAgSXQgbWlnaHQgbm90IGJlIGlmIHdlIHNraXBwZWQgYWxsIHRoZSBsaW5lcyBkdWUgdG8KCS1uIChmb3IgZXhhbXBsZSkuCgoJKiBjb21tYW5kcy5jIChleGVjdXRlX2ZpbGVfY29tbWFuZHMpOiBJZiB3ZSBkaXNjb3ZlciB0aGF0IHRoZQoJY29tbWFuZCBzY3JpcHQgaXMgZW1wdHkgYW5kIHN1Y2NlZWQgZWFybHksIHNldCBjc19ydW5uaW5nIHNvIHRoZQoJbW9kdGltZSBvZiB0aGUgdGFyZ2V0IGlzIHN0aWxsIHJlY2hlY2tlZC4KCgkqIHJ1bGUuYyAoZnJlZXJ1bGUpOiBGcmVlIHRoZSBkZXBlbmRlbmN5IGxpc3QgZm9yIHRoZSBydWxlLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBXaGVuIHR1cm5pbmcgYW4gaW50ZXJtZWRpYXRlIGZpbGUKCWludG8gYSByZWFsIHRhcmdldCwga2VlcCB0aGUgYWxzb19tYWtlIGxpc3QuCglGcmVlIHRoZSBkZXAtPm5hbWUgaWYgd2UgZGlkbid0IHVzZSBpdCBkdXJpbmcgZW50ZXJfZmlsZSgpLgoKMTk5OS0wNy0xNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgYWxsb2NhdGUgdGhlIGNvbW1hbmRzIGJ1ZmZlciB1bnRpbAoJd2UncmUgc3VyZSB3ZSBmb3VuZCBhIG1ha2VmaWxlIGFuZCB3b24ndCByZXR1cm4gZWFybHkgKG1lbSBsZWFrKS4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEJyb2tlbiAjaWZkZWYgdGVzdDogbG9vayBmb3IgRl9TRVRGRCwKCW5vdCBGRF9TRVRGRC4gIENsb3NlLW9uLWV4ZWMgaXNuJ3QgZ2V0dGluZyBzZXQgb24gdGhlIGJhZF9zdGRpbgoJZmlsZSBkZXNjcmlwdG9yIGFuZCBpdCdzIGxlYWtpbmcgOi0vLgoJKiBnZXRsb2FkYXZnLmMgKGdldGxvYWRhdmcpOiBEaXR0by4KCjE5OTktMDctMTUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZpeCBzb21lIHBvdGVudGlhbCBtZW1vcnkgc3RvbXBzIHBhcnNpbmcKCWBkZWZpbmUnIGRpcmVjdGl2ZXMgd2hlcmUgbm8gdmFyaWFibGUgbmFtZSBpcyBnaXZlbi4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfY2FsbCk6IFJlbmFtZSBmcm9tIGZ1bmNfYXBwbHkuICBWYXJpb3VzIGNvZGUKCWNsZWFudXAgYW5kIHRpZ2h0ZW5pbmcuCgkoZnVuY3Rpb25fdGFibGUpOiBBZGQgImNhbGwiIGFzIGEgdmFsaWQgYnVpbHRpbiBmdW5jdGlvbi4KCgkqIG1ha2UudGV4aW5mbyAoQ2FsbCBGdW5jdGlvbik6IERvY3VtZW50IGl0LgoKCSogTkVXUzogQW5ub3VuY2UgaXQuCgoxOTk5LTA3LTA5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pIFtfX01TRE9TX18sIFdJTkRPV1MzMl06CglUcmVhdCAib3ZlcnJpZGUgU0hFTEw9IiB0aGUgc2FtZSBhcyBqdXN0ICJTSEVMTD0iLgoKMTk5OS0wNy0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogRG9uJ3QgZ2V0IGEgc2Vjb25kIGpvYiB0b2tlbiBpZiB3ZQoJYWxyZWFkeSBoYXZlIG9uZTsgaWYgd2UncmUgd2FpdGluZyBvbiB0aGUgbG9hZCB0byBnbyBkb3duCglzdGFydF93YWl0aW5nX2pvYigpIG1pZ2h0IGdldCBjYWxsZWQgdHdpY2Ugb24gdGhlIHNhbWUgZmlsZS4KCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBBZGQgbmV3IGZpZWxkLCBtdGltZV9iZWZvcmVfdXBkYXRlLgoJV2hlbiBub3RpY2VfZmluaXNoZWRfZmlsZSBydW5zIGl0IGFzc2lnbnMgdGhlIGNhY2hlZCBsYXN0X210aW1lIHRvCgl0aGlzIGZpZWxkLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBOb3RpY2UgdGhhdCBhIGZpbGUgd2Fzbid0IHVwZGF0ZWQKCWJ5IGFza2luZyBpZiBpdCBjaGFuZ2VkIChnLT5jaGFuZ2VkKSBhbmQgY29tcGFyaW5nIHRoZSBjdXJyZW50CgljYWNoZWQgdGltZSAobGFzdF9tdGltZSkgd2l0aCB0aGUgcHJldmlvdXMgb25lLCBzdG9yZWQgaW4KCW10aW1lX2JlZm9yZV91cGRhdGUuICBUaGUgcHJldmlvdXMgY2hlY2sgKCJkaWQgbGFzdF9tdGltZSBjaGFuZ2VkCglkdXJpbmcgdGhlIHJ1biBvZiB1cGRhdGVfZmlsZT8iKSBmYWlscyBmb3IgcGFyYWxsZWwgYnVpbGRzIGJlY2F1c2UKCWxhc3RfbXRpbWUgaXMgc2V0IGR1cmluZyByZWFwX2NoaWxkcmVuLCBiZWZvcmUgdXBkYXRlX2ZpbGUgaXMgcnVuLgoJVGhpcyBjYXVzZXMgdXBkYXRlX2dvYWxfY2hhaW4gdG8gYWx3YXlzIHJldHVybiAtMSAobm90aGluZwoJcmVidWlsdCkgd2hlbiBydW5uaW5nIHBhcmFsbGVsICgtak4pLiAgVGhpcyBpcyBPSyBkdXJpbmcgIm5vcm1hbCIKCWJ1aWxkcyBzaW5jZSBvdXIgY2FsbGVyIChtYWluKSB0cmVhdHMgdGhlc2UgY2FzZXMgaWRlbnRpY2FsbHkgaW4KCXRoYXQgY2FzZSwgYnV0IGlmIHdoZW4gcmVidWlsZGluZyBtYWtlZmlsZXMgdGhlIGRpZmZlcmVuY2UgaXMgdmVyeQoJaW1wb3J0YW50LCBhcyBpdCBjb250cm9scyB3aGV0aGVyIHdlIHJlLWV4ZWMgb3Igbm90LgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IENvcHkgdGhlIG10aW1lX2JlZm9yZV91cGRhdGUgZmllbGQuCgkoc25hcF9kZXBzKTogSW5pdGlhbGl6ZSBtdGltZV9iZWZvcmVfdXBkYXRlIHRvIC0xLgoJKiBtYWluLmMgKG1haW4pOiBJbml0aWFsaXplIG10aW1lX2JlZm9yZV91cGRhdGUgb24gb2xkICgtbykgYW5kCgluZXcgKC1XKSBmaWxlcy4KCjE5OTktMDctMDggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBEZWZpbmUgYSBuZXcgc3dpdGNoIC1SIChvcgoJLS1uby1idWlsdGluLXZhcmlhYmxlcykuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGUgZGVmaW5pbmcgb2YgYWxsCgl0aGUgR05VIG1ha2UgYnVpbHRpbiB2YXJpYWJsZXMuCgkobWFpbik6IElmIC1SIHdhcyBnaXZlbiwgZm9yY2UgLXIgYXMgd2VsbC4KCSogZGVmYXVsdC5jIChkZWZpbmVfZGVmYXVsdF92YXJpYWJsZXMpOiBUZXN0IHRoZSBuZXcgZmxhZy4KCSogbWFrZS5oOiBEZWNsYXJlIGdsb2JhbCBmbGFnLgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbnMgU3VtbWFyeSk6IERvY3VtZW50IHRoZSBuZXcgb3B0aW9uLgoJKEltcGxpY2l0IFZhcmlhYmxlcyk6IERpdHRvLgoKMTk5OS0wNy0wNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChPcHRpb25zIFN1bW1hcnkpOiBDb3JyZWN0IGV4YW1wbGVzIGluCgktLXByaW50LWRhdGEtYmFzZSBvcHRpb24gc3VtbWFyeSAocHJvYmxlbSByZXBvcnRlZCBieSBEYXZpZCBNb3JzZQoJPG1vcnNlQG5pY2hpbWVuLmNvbT4pLgoKCSogYXJzY2FuLmM6IEFkZCBzdXBwb3J0IGZvciBhcmNoaXZlcyBpbiBXaW5kb3dzIChWQysrKS4gIEZyYW5rCglMaWJicmVjaHQgPGZyYW5rbEBhYnp4LmJlbGdpdW0uaHAuY29tPiBwcm92aWRlZCBpbmZvIG9uIGhvdyB0byBkbwoJdGhpcy4KCSogTk1ha2VmaWxlLnRlbXBsYXRlIChDRkxBR1NfYW55KTogUmVtb3ZlIE5PX0FSQ0hJVkVTIGZyb20gdGhlCgljb21waWxlIGxpbmUuCgkqIGJ1aWxkX3czMi5iYXQ6IERpdHRvLgoKCSogcmVtYWtlLmMgKG5vX3J1bGVfZXJyb3IpOiBGaXggLWluY2x1ZGUvc2luY2x1ZGUgc28gaXQgZG9lc24ndAoJZ2l2ZSBlcnJvcnMgaWYgeW91IHRyeSB0byAtaW5jbHVkZSB0aGUgc2FtZSBmaWxlIHR3aWNlLgoJKHVwZGF0aW5nX21ha2VmaWxlcyk6IE5ldyB2YXJpYWJsZTogd2UgbmVlZCB0byBrbm93IHRoaXMgaW5mbyBpbgoJbm9fcnVsZV9lcnJvcigpIHNvIHdlIGtub3cgd2hldGhlciB0byBwcmludCBhbiBlcnJvciBvciBub3QuCgkodXBkYXRlX2ZpbGVfMSk6IFVuY29uZGl0aW9uYWxseSBjYWxsIG5vX3J1bGVfZXJyb3IoKSwgZG9uJ3QgdHJ5Cgl0byBwbGF5IGdhbWVzIHdpdGggdGhlIGRvbnRjYXJlIGZsYWcuCgoxOTk5LTA2LTE0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKFJlbWFraW5nIE1ha2VmaWxlcyk6IEFkZCBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0bwoJcHJldmVudCBpbXBsaWNpdCBydWxlIHNlYXJjaGVzIGZvciBtYWtlZmlsZXMuCgoJKiBtYWtlLjE6IFJlbW92ZSBzdGF0ZW1lbnQgdGhhdCBtYWtlIGNvbnRpbnVlcyBwcm9jZXNzaW5nIHdoZW4gLXYKCWlzIGdpdmVuLgoKMTk5OS0wNi0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2FzdCAtMSBhcmd1bWVudHMgdG8KCXZhcmlhYmxlX2V4cGFuZF9zdHJpbmcoKSB0byBsb25nLiAgQWxleGFuZHJlIFNhdXZlCgk8QWxleGFuZHJlLlNBVVZFQGlmcC5mcj4gcmVwb3J0cyB0aGF0IHdpdGhvdXQgY2FzdHMsIHRoaXMgYnJlYWtzCglvbiBhIE5FQyBTVVBFUi1VWCBTWC00IHN5c3RlbSAoYW5kIGl0J3Mgd3Jvbmcgd2l0aG91dCBhIGNhc3QKCWFueXdheSkuICBPZiBjb3Vyc2UsIChhKSBJJ2QgcmVhbGx5IGxvdmUgdG8gc3RhcnQgdXNpbmcgZnVuY3Rpb24KCXByb3RvdHlwZXMsIGFuZCAoYikgdGhlcmUncyBhIHdob2xlIHNsZXcgb2YgaXNzdWVzIHJlbGF0ZWQgdG8gaW50Cgl2cy4gbG9uZyBhbmQgc2lnbmVkIHZzLiB1bnNpZ25lZCBpbiB0aGUgbGVuZ3RoIGhhbmRsaW5nIG9mCgl2YXJpYWJsZSBidWZmZXJzLCBldGMuICBHcm9zcy4gIE5lZWRzIGEgY29tcGxldGUgbXVja2luZy1vdXQuCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmQpOiBEaXR0by4KCgkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19TRUxFQ1QpOiBTbGlnaHQgZW5oYW5jZW1lbnQgZm9yIEFJWCAzLjIgYnkKCUxhcnMgSGVja2luZyA8bGhlY2tpbmdAbm1yYy51Y2MuaWU+LgoKCSogcmVhZC5jIChnZXRfbmV4dF9td29yZCk6IEFsbG93IGNvbG9ucyB0byBiZSBlc2NhcGVkIGluIHRhcmdldAoJbmFtZXM6IGZpeCBmb3IgcmVncmVzc2lvbiBmYWlsdXJlLgoKMTk5OS0wNC0yNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogUmVzZXQgcmVhZF9tYWtlZmlsZXMgdG8gZW1wdHkgYWZ0ZXIgcHJvY2Vzc2luZyBzbwoJd2UgZ2V0IHRoZSByaWdodCBlcnJvciBtZXNzYWdlLgoKMTk5OS0wNC0yNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBVcGRhdGVzIHRvIEBkaXJjYXRlZ29yeSBhbmQgQGRpcmVudHJ5IHN1Z2dlc3RlZCBieQoJS2FybCBCZXJyeSA8a2FybEBjcy51bWIuZWR1Pi4KCjE5OTktMDQtMjMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpIFtfX01TRE9TX19dOiBDYWxsIHVuYmxvY2tfc2lncyBiZWZvcmUKCXR1cm5pbmcgb2ZmIGRvc19jb21tYW5kX3J1bm5pbmcsIHNvIGNoaWxkJ3Mgc2lnbmFscyBwcm9kdWNlIHRoZQoJcmlnaHQgZWZmZWN0LgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbX19NU0RPU19fXTogVXNlIEVYSVRfRkFJTFVSRQoJaW5zdGVhZCBvZiAxLgoKMTk5OS0wNC0xOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGNvbmZpZ2guZG9zLnRlbXBsYXRlOiBVcGRhdGUgdG8gcmVjb2duaXplIHRoYXQgdmVyc2lvbiAyLjAyIG9mCglESkdQUCBjb250YWlucyBzeXNfc2lnbGlzdCBzdHVmZi4KCjE5OTktMDQtMTQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoT3B0aW9ucy9SZWN1cnNpb24pOiBEb2N1bWVudCB0aGUgam9iIHNlcnZlci4KCShQYXJhbGxlbCk6IFR3ZWFrcy4KCjE5OTktMDQtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglJbXBsZW1lbnQgYSBuZXcgImpvYiBzZXJ2ZXIiIGZlYXR1cmU7IHRoZSBpbXBsZW1lbnRhdGlvbiB3YXMKCXN1Z2dlc3RlZCBieSBIb3dhcmQgQ2h1IDxoeWNAaGlnaGxhbmRzdW4uY29tPi4KCgkqIGNvbmZpZ3VyZS5pbiAoam9iLXNlcnZlcik6IE5ldyBkaXNhYmxlIG9wdGlvbiBmb3Igam9iIHNlcnZlcgoJc3VwcG9ydC0taXQncyBlbmFibGVkIGJ5IGRlZmF1bHQuICBJZiBpdCB3b3JrcyB3ZWxsIHRoaXMgd2lsbCBnbwoJYXdheS4KCgkqIE5FV1M6IFN1bW1hcml6ZSB0aGUgbmV3IGZlYXR1cmUuCgoJKiBhY2NvbmZpZy5oOiBOZXcgZGVmaW5pdGlvbiBNQUtFX0pPQlNFUlZFUiBpZiBqb2Igc2VydmVyIHN1cHBvcnQKCWlzIGVuYWJsZWQuCgkqIGNvbmZpZy5oLXZtcy50ZW1wbGF0ZTogVW5kZWYgTUFLRV9KT0JTRVJWRVIgZm9yIHRoaXMgcG9ydC4KCSogY29uZmlnLmguVzMyLnRlbXBsYXRlOiBEaXR0by4KCSogY29uZmlnLmFtaS50ZW1wbGF0ZTogRGl0dG8uCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaCk6IEFkZCBhIG5ldyB0eXBlOiBpbnRfc3RyaW5nLgoJKHN3aXRjaGVzW10pIFVzZSBpbnRfc3RyaW5nIGZvciAtaiBpZiBNQUtFX0pPQlNFUlZFUi4KCShpbml0X3N3aXRjaGVzKTogSW5pdGlhbGl6ZSB0aGUgbmV3IGludF9zdHJpbmcgc3dpdGNoIHR5cGUuCgkocHJpbnRfdXNhZ2UpOiBOZXcgZnVuY3Rpb24sIGV4dHJhY3RlZCBmcm9tIGRlY29kZV9zd2l0Y2hlcygpLgoJKGRlY29kZV9zd2l0Y2hlcyk6IENhbGwgaXQuICBEZWNvZGUgdGhlIG5ldyBpbnRfc3RyaW5nIHN3aXRjaCB0eXBlLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBBZGQgbmV3IGludF9zdHJpbmcgc3dpdGNoIGRhdGEgdG8gTUFLRUZMQUdTLgoJKGpvYl9mZHNbXSkgQXJyYXkgdG8gY29udGFpbiB0aGUgcGlwZSBmaWxlIGRlc2NyaXB0b3JzLgoJKG1haW4pOiBQYXJzZSB0aGUgam9iX3Nsb3RzX3N0ciBvcHRpb24gcmVzdWx0cy4gIElmIG5lY2Vzc2FyeSwKCWNyZWF0ZSB0aGUgcGlwZSBhbmQgc2VlZCBpdCB3aXRoIHRva2Vucy4gIFNldCB0aGUgbm9uLWJsb2NraW5nIGJpdAoJZm9yIHRoZSByZWFkIGZkLiAgRW5hYmxlIHRoZSBzaWduYWwgaGFuZGxlciBmb3IgU0lHQ0hMRCBldmVuIGlmIHdlCgloYXZlIGEgbm9uLWhhbmdpbmcgd2FpdDsgaXQncyBuZWVkZWQgdG8gaW50ZXJydXB0IHRoZSBzZWxlY3QoKSBpbgoJam9iLmM6c3RhcnRfd2FpdGluZ19qb2IoKS4KCgkqIG1ha2UuaDogRGVjbGFyZSBqb2JfZmRzW10uCgoJKiBqb2IuaCAoc3RydWN0IGNoaWxkKTogQWRkIGpvYl90b2tlbiBmaWVsZCB0byBzdG9yZSB0aGUgdG9rZW4gZm9yCgl0aGlzIGpvYiAoaWYgYW55KS4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogV2hlbiBhIGNoaWxkIGlzIGZ1bGx5IHJlYXBlZCwgcmVsZWFzZSB0aGUKCXRva2VuIGJhY2sgaW50byB0aGUgcGlwZS4KCShmcmVlX2NoaWxkKTogSWYgdGhlIGNoaWxkIHRvIGJlIGZyZWVkIHN0aWxsIGhhcyBhIHRva2VuLCBwdXQgaXQKCWJhY2suCgkobmV3X2pvYik6IEluaXRpYWxpemUgdGhlIGpvYl90b2tlbiBtZW1iZXIuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBGb3IgbG9jYWwgam9icywgaWYgd2UncmUgdXNpbmcgdGhlIHBpcGUsIGdldAoJYSB0b2tlbiBiZWZvcmUgd2UgY2hlY2sgdGhlIGxvYWQsIGV0Yy4gIFdlIGRvIHRoaXMgYnkgcGVyZm9ybWluZyBhCglub24tYmxvY2tpbmcgcmVhZCBpbiBhIGxvb3AuICBJZiB0aGUgcmVhZCBmYWlscywgbm8gdG9rZW4gaXMKCWF2YWlsYWJsZS4gIERvIGEgc2VsZWN0IG9uIHRoZSBmZCB0byB3YWl0IGZvciBhIHRva2VuLiAgV2UgbmVlZCB0bwoJcmUtZW5hYmxlIHRoZSBzaWduYWwgaGFuZGxlciBmb3IgU0lHQ0hMRCBldmVuIGlmIHdlIGhhdmUgYQoJbm9uLWhhbmdpbmcgd2FpdHBpZCgpIG9yIHdhaXQzKCksIHNvIHRoYXQgdGhlIHNpZ25hbCB3aWxsCglpbnRlcnJ1cHQgdGhlIHNlbGVjdCgpIGFuZCB3ZSBjYW4gd2FrZSB1cCB0byByZWFwIGNoaWxkcmVuLgoJKGNoaWxkX2hhbmRsZXIpOiBSZS1lbmFibGUgdGhlIHNpZ25hbCBoYW5kbGVyLiAgVGhlIGNvdW50IGlzIHN0aWxsCglrZXB0IGFsdGhvdWdoIGl0J3Mgbm90IG5lZWRlZCBvciB1c2VkIHVubGVzcyB5b3UgZG9uJ3QgaGF2ZQoJd2FpdHBpZCgpIG9yIHdhaXQzKCkuCgoxOTk5LTA0LTEwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBSZXNldCB0aGUgY29uc2lkZXJlZCBiaXQgb24gYWxsIHRoZSBtYWtlZmlsZXMgaWYKCXNvbWV0aGluZyBmYWlsZWQgdG8gdXBkYXRlOyB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlbSBhZ2FpbiBpZiB0aGV5CglhcHBlYXIgYXMgbm9ybWFsIHRhcmdldHMgaW4gb3JkZXIgdG8gZ2V0IHRoZSBwcm9wZXIgZXJyb3IgbWVzc2FnZS4KCjE5OTktMDQtMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglQZXJmb3JtYW5jZSBlbmhhbmNlbWVudCBmcm9tIFRpbSBNYWdpbGwgPHRpbS5tYWdpbGxAdGVsb3BzLmd0ZS5jb20+LgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogSWYgeW91IGhhdmUgbGFyZ2UgbnVtYmVycyBvZgoJZGVwZW5kZW5jaWVzIGFuZCB5b3UgcnVuIGluIHBhcmFsbGVsLCBtYWtlIGNhbiBzcGVuZCBjb25zaWRlcmFibGUKCXRpbWUgZWFjaCBwYXNzIHRocm91Z2ggdGhlIGdyYXBoIGxvb2tpbmcgYXQgYnJhbmNoZXMgaXQgaGFzCglhbHJlYWR5IHNlZW4uICBTaW5jZSB3ZSBvbmx5IHJlYXBfY2hpbGRyZW4oKSB3aGVuIHN0YXJ0aW5nIGEgcGFzcywKCW5vdCBpbiB0aGUgbWlkZGxlLCBpZiBhIGJyYW5jaCBoYXMgYmVlbiBzZWVuIGFscmVhZHkgaW4gdGhhdCBwYXNzCglub3RoaW5nIGludGVyZXN0aW5nIGNhbiBoYXBwZW4gdW50aWwgdGhlIG5leHQgcGFzcy4gIFNvLCB3ZSB0b2dnbGUKCWEgYml0IHNheWluZyB3aGV0aGVyIHdlJ3ZlIHNlZW4gdGhpcyB0YXJnZXQgaW4gdGhpcyBwYXNzIG9yIG5vdC4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IEluaXRpYWxseSBzZXQgdGhlIGdsb2JhbCBjb25zaWRlcmVkIHRvZ2dsZSB0bwoJMSwgc2luY2UgYWxsIHRhcmdldHMgaW5pdGlhbGl6ZSB0aGVpciBib29sZWFuIHRvIDAuICBBdCB0aGUgZW5kIG9mCgllYWNoIHBhc3MsIHRvZ2dsZSB0aGUgZ2xvYmFsIGNvbnNpZGVyZWQgdmFyaWFibGUuCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBQZXItZmlsZSBjb25zaWRlcmVkIHRvZ2dsZSBiaXQuCgkqIGZpbGUuYzogTmV3IGdsb2JhbCB0b2dnbGUgdmFyaWFibGUgY29uc2lkZXJlZC4KCjE5OTktMDQtMDUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKTogQWRkZWQgc3VwcG9ydCBmb3IgQVJGWk1BRyAoY29tcHJlc3NlZAoJYXJjaGl2ZXM/KSBmb3IgRGlnaXRhbCBVTklYIEMrKy4gIEluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5CglQYXRyaWNrCUUuIEtyb2dlbCA8cGVrcm9nZWxAbXR1LmVkdT4uCgkoYXJfbWVtYmVyX3RvdWNoKTogRGl0dG8uCgoxOTk5LTA0LTAzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IElmOiBhKSB3ZSBmb3VuZCBhIGZpbGUgYW5kIGIpIHdlIGRpZG4ndAoJY3JlYXRlIGl0IGFuZCBjKSBpdCdzIG5vdCBtYXJrZWQgYXMgYW4gaW1wbGljaXQgdGFyZ2V0IGFuZCBkKSBpdAoJaXMgbWFya2VkIGFzIGFuIGludGVybWVkaWF0ZSB0YXJnZXQsIHRoZW4gaXQgd2FzIHNvIG1hcmtlZCBkdWUgdG8KCWFuIC5JTlRFUk1FRElBVEUgc3BlY2lhbCB0YXJnZXQsIGJ1dCBpdCBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlCglkaXJlY3RvcnkuICBJbiB0aGlzIGNhc2UsIHVuc2V0IHRoZSBpbnRlcm1lZGlhdGUgZmxhZyBzbyB3ZSB3b24ndAoJZGVsZXRlIGl0IHdoZW4gbWFrZSBpcyBkb25lLiAgSXQgZmVlbHMgbGlrZSBpdCB3b3VsZCBiZSBjbGVhbmVyIHRvCglwdXQgdGhpcyBjaGVjayBpbiB1cGRhdGVfZmlsZV8xKCkgYnV0IEkgd29ycnkgaXQnbGwgZ2V0IG1pc3NlZC4uLgoKMTk5OS0wNC0wMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBVc2UgYmNvcHkoKSB0byBjb3B5CglvdmVybGFwcGluZyBzdHJpbmdzLCByYXRoZXIgdGhhbiBzdHJjcHkoKS4gIElTTyBDIHNheXMgdGhlIGxhdHRlcgoJaXMgdW5kZWZpbmVkLiAgRm91bmQgdGhpcyBpbiBhIGJ1ZyByZXBvcnQgZnJvbSAxOTk2ISAgT3VjaCEKCjE5OTktMDMtMzEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBJZ25vcmUgY2FycmlhZ2UgcmV0dXJucyBhdCB0aGUgZW5kIG9mIHRoZQoJbGluZSwgdG8gYWxsb3cgV2luZG93cy15IENSTEYgbGluZSB0ZXJtaW5hdG9ycy4KCjE5OTktMDMtMzAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgcHV0IGJ1aWxkLnNoIGhlcmUsIHNpbmNlIGJ1aWxkLnNoLmluIGRvZXNuJ3QKCWV4aXN0IGluaXRpYWxseS4gIFRoaXMgY2F1c2UgYXV0b3JlY29uZiBhbmQgYXV0b21ha2UgdG8gZmFpbCB3aGVuCglydW4gb24gYSBjbGVhbiBDVlMgY2hlY2tvdXQuICBJbnN0ZWFkLCB3ZSBjcmVhdGUgYnVpbGQuc2ggaW4gdGhlCglNYWtlZmlsZSAoc2VlIGJlbG93KS4KCgkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgQlVJTFRfU09VUkNFUzsgdGhpcyBpcyBubyBsb25nZXIgcmVsZXZhbnQuCglQdXQgdGhvc2UgZmlsZXMgZGlyZWN0bHkgaW50byBFWFRSQV9ESVNUIHNvIHRoZXkncmUgZGlzdHJpYnV0ZWQuCglDcmVhdGUgYSBsb2NhbCBidWlsZCBydWxlIHRvIGNyZWF0ZSBidWlsZC5zaC4KCUNyZWF0ZSBhIGxvY2FsIG1haW50YWluZXItY2xlYW4gcnVsZSB0byBkZWxldGUgYWxsIHRoZSBmdW5reQoJbWFpbnRhaW5lcnMgZmlsZXMuCgoJKiBtYWludE1ha2VmaWxlOiBNYWtlZmlsZS5pbiBkZXBlbmRzIG9uIFJFQURNRSwgc2luY2UgYXV0b21ha2UKCWZhaWxzIGlmIGl0IGRvZXNuJ3QgZXhpc3QuICBBbHNvIGRvbid0IHJlbW92ZSBnbG9iL01ha2VmaWxlLmluCgloZXJlLCBhcyBpdCBjYXVzZXMgcHJvYmxlbXMuCgoxOTk5LTAzLTI2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IFN1YnN0aXR1dGUgR0xPQkxJQiBpZiB3ZSBuZWVkIHRoZSBsaW5rIHRoZQoJZ2xvYi9saWJnbG9iLmEgbGlicmFyeS4KCSogTWFrZWZpbGUuYW0gKG1ha2VfTERBREQpOiBVc2UgdGhlIHN1YnN0IHZhcmlhYmxlIEdMT0JMSUIgc28gd2UKCWRvbid0IGxpbmsgdGhlIGxvY2FsIGxpYmdsb2IuYSBhdCBhbGwgaWYgd2UgZG9uJ3QgbmVlZCBpdC4KCSogYnVpbGQudGVtcGxhdGU6IERvbid0IGNvbXBpbGUgZ2xvYi8qLm8gdW5sZXNzIHdlIHdhbnQgZ2xvYmxpYi4KCSogbWFpbnRNYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBTdWJzdGl0dXRlIHRoZSBnbG9iLyoubyBmaWxlcwoJc2VwYXJhdGVseS4KCjE5OTktMDMtMjUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbzogVmFyaW91cyB0eXBvcyBhbmQgYWRkaXRpb25zLCBwb2ludGVkIG91dCBieSBKYW1lcwoJRy4gU2FjayA8anNhY2tAZG9ybmZlbGQuY29tPi4KCjE5OTktMDMtMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoRnVuY3Rpb25zKTogQWRkIGEgbmV3IHNlY3Rpb24gZG9jdW1lbnRpbmcgdGhlIG5ldwoJJChlcnJvciAuLi4pIGFuZCAkKHdhcm5pbmcgLi4uKSBmdW5jdGlvbnMuICBBbHNvIHVwZGF0ZWQgY29weXJpZ2h0CglkYXRlcy4KCSogTkVXUzogVXBkYXRlZCBmb3IgdGhlIG5ldyBmdW5jdGlvbnMuCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfZXJyb3IpOiBJbXBsZW1lbnQgdGhlIG5ldyAkKGVycm9yIC4uLikgYW5kCgkkKHdhcm5pbmcgLi4uKSBmdW5jdGlvbnMuCgkoZnVuY3Rpb25fdGFibGUpOiBJbnNlcnQgbmV3IGZ1bmN0aW9ucyBpbnRvIHRoZSB0YWJsZS4KCShmdW5jX2ZpcnN0d29yZCk6IERvbid0IGNhbGwgZmluZF9uZXh0X3Rva2VuKCkgd2l0aCBhcmd2WzBdCglpdHNlbGYsIHNpbmNlIHRoYXQgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHBvaW50ZXIuCgkqIGZ1bmN0aW9uLmM6IENsZWFudXBzIGFuZCBzbGlnaHQgY2hhbmdlcyB0byB0aGUgbmV3IG1ldGhvZCBvZgoJY2FsbGluZyBmdW5jdGlvbnMuCgoxOTk5LTAzLTIwICBIYW4tV2VuIE5pZW5odXlzICA8aGFud2VuQGNzLnV1Lm5sPgoKCSogZnVuY3Rpb24uYzogUmV3cml0ZSB0byB1c2Ugb25lIEMgZnVuY3Rpb24gcGVyIG1ha2UgZnVuY3Rpb24sCglpbnN0ZWFkIG9mIGEgaHVnZSBzd2l0Y2ggc3RhdGVtZW50LiAgQWxzbyBhbGxvd3Mgc29tZSBjbGVhbnVwIG9mCgltdWx0aS1hcmNoaXRlY3R1cmUgaXNzdWVzLCBhbmQgYSBjbGVhbmVyIEFQSSB3aGljaCBtYWtlcyB0aGluZ3MKCWxpa2UgZnVuY19hcHBseSgpIHNpbXBsZS4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfYXBwbHkpOiBJbml0aWFsIGltcGxlbWVudGF0aW9uLiAgRXhwYW5kIGVpdGhlcgoJYSBidWlsdGluIGZ1bmN0aW9uIG9yIGEgbWFrZSB2YXJpYWJsZSBpbiB0aGUgY29udGV4dCBvZiBzb21lCglhcmd1bWVudHMsIHByb3ZpZGVkIGFzICQxLCAkMiwgLi4uICROLgoKMTk5OS0wMy0xOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KMTk5OS0wMy0xOSAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAZGV2LnRpdm9saS5jb20+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IERvbid0IHRyZWF0IF9hbGxfCgliYWNrc2xhc2hlcyBhcyBlc2NhcGVzLCBvbmx5IHRob3NlIHdoaWNoIHJlYWxseSBlc2NhcGUgYSBzcGVjaWFsCgljaGFyYWN0ZXIuICBUaGlzIGFsbG93cyBtb3N0IG5vcm1hbCAiXCIgZGlyZWN0b3J5IHNlcGFyYXRvcnMgdG8gYmUKCXRyZWF0ZWQgbm9ybWFsbHkuCgoxOTk5LTAzLTA1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBhIHN5c3RlbSBzdHJkdXAoKS4KCSogbWlzYy5jICh4c3RyZHVwKTogQ3JlYXRlZC4gIFN1Z2dlc3Rpb24gYnkgSGFuLVdlbiBOaWVuaHV5cwoJPGhhbndlbkBjcy51dS5ubD4uCgkqIG1ha2UuaDogUHJvdG90eXBlIHhzdHJkdXAoKS4KCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogVXNlIGl0LgoJKiBtYWluLmMgKG1haW4pOiBVc2UgaXQuCgkoZmluZF9hbmRfc2V0X2RlZmF1bHRfc2hlbGwpOiBVc2UgaXQuCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVXNlIGl0LgoJKiBkaXIuYyAoZmluZF9kaXJlY3RvcnkpOiBVc2UgaXQuCgoJKiBNYWtlZmlsZS5hbSwgY29uZmlndXJlLmluOiBVc2UgQUNfU1VCU1RfRklMRSB0byBpbnNlcnQgdGhlCgltYWludE1ha2VmaWxlIGluc3RlYWQgb2YgImluY2x1ZGUiLCB0byBhdm9pZCBhdXRvbWFrZSAxLjQKCWluY29tcGF0aWJpbGl0eS4KCjE5OTktMDMtMDQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGFtaWdhLmMsIGFtaWdhLmgsIGFyLmMsIGFyc2Nhbi5jLCBjb21tYW5kcy5jLCBjb21tYW5kcy5oLAoJKiBkZWZhdWx0LmMsIGRlcC5oLCBkaXIuYywgZXhwYW5kLmMsIGZpbGUuYywgZmlsZWRlZi5oLCBmdW5jdGlvbi5jLAoJKiBpbXBsaWNpdC5jLCBqb2IuYywgam9iLmgsIG1haW4uYywgbWFrZS5oLCBtaXNjLmMsIHJlYWQuYywgcmVtYWtlLmMKCSogcmVtb3RlLWNzdG1zLmMsIHJlbW90ZS1zdHViLmMsIHJ1bGUuaCwgdmFyaWFibGUuYywgdmFyaWFibGUuaCwKCSogdnBhdGguYywgTWFrZWZpbGUuYW1pLCBOTWFrZWZpbGUudGVtcGxhdGUsIGJ1aWxkLnRlbXBsYXRlLAoJKiBtYWtlZmlsZS52bXM6IFVwZGF0ZWQgRlNGIGFkZHJlc3MgaW4gdGhlIGNvcHlyaWdodCBub3RpY2UuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IElmIHdlIHNlZSBhIGNvbmRpdGlvbmFsCgl2YXJpYWJsZSBhbmQgd2UgZGVjaWRlIHRvIHNldCBpdCwgcmUtdHlwZSBpdCBhcyByZWN1cnNpdmUgc28gaXQKCXdpbGwgYmUgZXhwYW5kZWQgcHJvcGVybHkgbGF0ZXIuCgoxOTk5LTAyLTIyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBORVdTOiBNZW50aW9uIG5ldyAuTElCUEFUVEVSTlMgZmVhdHVyZS4KCgkqIG1ha2UudGV4aW5mbyAoTGlicmFyaWVzL1NlYXJjaCk6IERlc2NyaWJlIHRoZSB1c2UgYW5kCglyYW1pZmljYXRpb25zIG9mIHRoZSBuZXcgLkxJQlBBVFRFUk5TIHZhcmlhYmxlLgoKCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogSW5zdGVhZCBvZiBzZWFyY2hpbmcgb25seSBmb3IgdGhlCgloYXJkY29kZWQgZXhwYW5zaW9uICJsaWJYLmEiIGZvciBhIGxpYnJhcnkgcmVmZXJlbmNlICItbFgiLCB3ZQoJb2J0YWluIGEgbGlzdCBvZiBwYXR0ZXJucyBmcm9tIHRoZSAuTElCUEFUVEVSTlMgdmFyaWFibGUgYW5kCglzZWFyY2ggdGhvc2UgaW4gb3JkZXIuCgoJKiBkZWZhdWx0LmM6IEFkZGVkIGEgbmV3IGRlZmF1bHQgdmFyaWFibGUgLkxJQlBBVFRFUk5TLiAgVGhlCglkZWZhdWx0IGZvciBVTklYIGlzICJsaWIlLnNvIGxpYiUuYSIuICBBbWlnYSBhbmQgRE9TIHZhbHVlcyBhcmUKCWFsc28gcHJvdmlkZWQuCgoJKiByZWFkLmM6IFJlbW92ZSBib2d1cyBIQVZFX0dMT0JfSCByZWZlcmVuY2VzOyBhbHdheXMgaW5jbHVkZQoJdmFuaWxsYSBnbG9iLmguCgoxOTk5LTAyLTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBTZXQgdmFsdWUgdG8gMCB0byBhdm9pZCBmcmVlaW5nIGl0LgoJKiB2YXJpYWJsZS5jIChwb3BfdmFyaWFibGVfc2NvcGUpOiBGcmVlIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuCgkodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBGb3Igc2ltcGxlIHZhcmlhYmxlcywgdXNlCglhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kKCkgdG8gYXZvaWQgc3RvbXBpbmcgb24gdGhlIHZhcmlhYmxlCglidWZmZXIgd2hlbiB3ZSBzdGlsbCBuZWVkIGl0IGZvciBvdGhlciB0aGluZ3MuCgoJKiBhcnNjYW4uYzogTW9kaWZpZWQgdG8gc3VwcG9ydCBBSVggNC4zIGJpZyBhcmNoaXZlcy4gIFRoZSBjaGFuZ2VzCglhcmUgYmFzZWQgb24gaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgUGhpbCBBZGFtcwoJPHBhZGFtc0BhdXN0aW4uaWJtLmNvbT4uCgoxOTk5LTAyLTE5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIHRvIHNlZSBpZiB0aGUgR05VIGdsb2IgbGlicmFyeSBpcyBhbHJlYWR5CglpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4gIElmIHNvLCBfZG9uJ3RfIGFkZCAtSS4vZ2xvYiB0byB0aGUKCWNvbXBpbGUgbGluZS4gIFVzaW5nIHRoZSBzeXN0ZW0gZ2xvYiBjb2RlIHdpdGggdGhlIGxvY2FsIGhlYWRlcnMKCWlzIHZlcnkgYmFkIG1vam8hCglSZXdyaXRlIFNDQ1MgbWFjcm9zIHRvIHVzZSBtb3JlIGF1dG9jb25mIGZhY2lsaXRpZXMuCgoJKiBNYWtlZmlsZS5hbTogTW92ZSAtSWdsb2Igb3V0IG9mIElOQ0xVREVTOyBpdCdsbCBnZXQgYWRkZWQgdG8KCUNQUEZMQUdTIGJ5IGNvbmZpZ3VyZSBub3cuCglBdXRvbWFrZSAxLjQgaW50cm9kdWNlZCBpdHMgb3duICJpbmNsdWRlIiBmZWF0dXJlIHdoaWNoIGNvbmZsaWN0cwoJd2l0aCB0aGUgbWFpbnRNYWtlZmlsZSBzdHVmZi4gIEEgaGFjayB0aGF0IHNlZW1zIHRvIHdvcmsgaXMgYWRkIGEKCXNwYWNlIGJlZm9yZSB0aGUgaW5jbHVkZSA6LS8uCgoJKiBidWlsZC50ZW1wbGF0ZTogTW92ZSAtSWdsb2Igb3V0IG9mIHRoZSBjb21waWxlIGxpbmU7IGl0J2xsIGdldAoJYWRkZWQgdG8gQ1BQRkxBR1MgYnkgY29uZmlndXJlIG5vdy4KCjE5OTktMDItMTYgIEdsZW5uIEQuIFdvbGYgIDxHbGVubl9Xb2xmQGVtYWlsLnNwcy5tb3QuY29tPgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFtWTVNdOiBJbml0aWFsaXplZCBWTVNfbWVtYmVyX2RhdGUgYmVmb3JlCgljYWxsaW5nIGxiciRnZXRfaW5kZXggc2luY2UgaWYgdGhlIGFyY2hpdmUgaXMgZW1wdHksCglWTVNfZ2V0X21lbWJlcl9pbmZvIHdvbid0IGdldCBjYWxsZWQgYXQgYWxsLCBhbmQgYW55IGxlZnRvdmVyIGRhdGUKCXdpbGwgYmUgdXNlZC4gIFRoaXMgYnVnIHNob3dzIHVwIGlmIGFueSBtZW1iZXIgb2YgYW55IGFyY2hpdmUgaXMKCW1hZGUsIGZvbGxvd2VkIGJ5IGEgZGVwZW5kZW5jeSBjaGVjayBvbiBhIGRpZmZlcmVudCwgZW1wdHkKCWFyY2hpdmUuCgoxOTk4LTEyLTEzICBNYXJ0aW4gWmluc2VyICA8emluc2VyQGRlY3VzLmRlY3VzLmRlPgoKCSogY29uZmlnLmgtdm1zIFtWTVNdOiBTZXQgX1BPU0lYX0NfU09VUkNFLiAgUmVkZWZpbmUgdGhlIGdldG9wdAoJZnVuY3Rpb25zIHNvIHdlIGRvbid0IHVzZSB0aGUgYnJva2VuIFZNUyB2ZXJzaW9ucy4KCSogbWFrZWZpbGUuY29tIFtWTVNdOiBBbGxvdyBkZWJ1Z2dpbmcuCgkqIGRpci5jIChkaXJfc2V0dXBfZ2xvYikgW1ZNU106IERvbid0IGV4dGVybiBzdGF0KCkgb24gVk1TLgoKMTk5OC0xMS0zMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogc2lnbmFtZS5jIChpbml0X3NpZyk6IENoZWNrIHRoZSBzaXplcyBvZiBzaWduYWxzIGJlaW5nIHNldCB1cCB0bwoJYXZvaWQgYXJyYXkgb3ZlcndyaXRlcyAoaWYgdGhlIHN5c3RlbSBoZWFkZXJzIGhhdmUgcHJvYmxlbXMpLgoKMTk5OC0xMS0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBDbGVhbiB1cCBzb21lIGluZGVudGF0aW9uLgoKMTk5OC0xMS0wOCAgSGFuLVdlbiBOaWVuaHV5cyAgPGhhbndlbkBjcy51dS5ubD4KCgkqIHJ1bGUuYyAocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBGaXggYXJndW1lbnRzIHRvIGZhdGFsKCkgY2FsbC4KCjE5OTgtMTAtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IElmIHRoZSBjb21tYW5kIGxpc3QgcmVzb2x2ZXMgdG8gbm8KCWNoYXJzIGF0IGFsbCAoZS5nLjogImZvbzo7JChlbXB0eSkiKSB0aGVuIGNvbW1hbmRfcHRyIGlzIE5VTEw7CglxdWl0IGVhcmx5LgoKMTk5OC0xMC0xMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogcnVsZS5jIChwcmludF9ydWxlX2RhdGFfYmFzZSk6IElnbm9yZSBudW1fcGF0dGVybl9ydWxlcyBpZiBpdCBpcwoJemVyby4KCjE5OTgtMTAtMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEFsbG93IG5vbi1lbXB0eSBsaW5lcyB0byBleHBhbmQgdG8gdGhlCgllbXB0eSBzdHJpbmcgYWZ0ZXIgdmFyaWFibGUsIGV0Yy4sIGV4cGFuc2lvbiwgYW5kIGJlIGlnbm9yZWQuCgoxOTk4LTA5LTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE9ubHkgYWRkIENPTU1BTkQuQ09NCgkiQGVjaG8gb2ZmIiBsaW5lIGZvciBub24tVU5JWHkgc2hlbGxzLgoKMTk5OC0wOS0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogQWRkIGluIG1pc3NpbmcgSEFWRV9NS1NfU0hFTEwgdGVzdHMuCgoxOTk4LTA5LTA0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiB3ZSBoaXQgdGhlICJtaXNzaW5nIHNlcGFyYXRvciIgZXJyb3IsCgljaGVjayBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDggc3BhY2VzIGluc3RlYWQgb2YgYSBUQUIgYW5kIGdpdmUgYW4KCWV4dHJhIGNvbW1lbnQgdG8gaGVscCBwZW9wbGUgb3V0LgoKMTk5OC0wOC0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBjb25maWd1cmUuaW4gKEFDX1NUUlVDVF9TVF9NVElNX05TRUMpOgoJUmVuYW1lZCBmcm9tIEFDX1NUUlVDVF9TVF9NVElNLgoKCSogYWNpbmNsdWRlLm00IChBQ19TVFJVQ1RfU1RfTVRJTV9OU0VDKTogIExpa2V3aXNlLgoJUG9ydCB0byBVbml4V2FyZSAyLjEuMiBhbmQgcGVkYW50aWMgU29sYXJpcyAyLjYuCgoJKiBhY2NvbmZpZy5oIChTVF9NVElNX05TRUMpOgoJUmVuYW1lZCBmcm9tIEhBVkVfU1RfTVRJTSwgd2l0aCBhIG5ldyBtZWFuaW5nLgoKCSogZmlsZWRlZi5oIChGSUxFX1RJTUVTVEFNUF9GUk9NX1NfQU5EX05TKToKCVVzZSBuZXcgU1RfTVRJTV9OU0VDIG1hY3JvLgoKMTk5OC0wOC0yNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKGNoZWNrX2RlcCk6IEZvciBhbnkgaW50ZXJtZWRpYXRlIGZpbGUsIG5vdCBqdXN0CglzZWNvbmRhcnkgb25lcywgdHJ5IGltcGxpY2l0IGFuZCBkZWZhdWx0IHJ1bGVzIGlmIG5vIGV4cGxpY2l0CglydWxlcyBhcmUgZ2l2ZW4uICBJJ20gbm90IHN1cmUgd2h5IHRoaXMgd2FzIHJlc3RyaWN0ZWQgdG8KCXNlY29uZGFyeSBydWxlcyBpbiB0aGUgZmlyc3QgcGxhY2UuCgoxOTk4LTA4LTI0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKFNwZWNpYWwgVGFyZ2V0cyk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGZvcgoJLklOVEVSTUVESUFURTogaWYgdXNlZCB3aXRoIG5vIGRlcGVuZGVuY2llcywgdGhlbiBpdCBkb2VzIG5vdGhpbmc7CglvbGQgZG9jcyBzYWlkIGl0IG1hcmtlZCBhbGwgdGFyZ2V0cyBhcyBpbnRlcm1lZGlhdGUsIHdoaWNoIGl0CglkaWRuJ3QuLi4gYW5kIHdoaWNoIHdvdWxkIGJlIHNpbGx5IDopLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBJZiB3ZSBmaW5kIGEgZGVwZW5kZW5jeSBpbiBvdXIKCWludGVybmFsIHRhYmxlcywgbWFrZSBzdXJlIGl0J3Mgbm90IG1hcmtlZCBpbnRlcm1lZGlhdGUgYmVmb3JlCglhY2NlcHRpbmcgaXQgYXMgYSBmb3VuZF9maWxlW10uCgoxOTk4LTA4LTIwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBhci5jIChhcl9nbG9iKTogVXNlIGV4aXN0aW5nIGFscGhhX2NvbXBhcmUoKSB3aXRoIHFzb3J0LgoJKGFyX2dsb2JfYWxwaGFjb21wYXJlKTogUmVtb3ZlIGl0LgoKCU1vZGlmeSBQYXVsIEVnZ2VydCdzIHBhdGNoIHNvIHdlIGRvbid0IGFiYW5kb24gb2xkZXIgc3lzdGVtczoKCgkqIGNvbmZpZ3VyZS5pbjogV2FybiB0aGUgdXNlciBpZiBuZWl0aGVyIHdhaXRwaWQoKSBub3Igd2FpdDMoKSBpcwoJYXZhaWxhYmxlLgoKCSogam9iLmMgKFdBSVRfTk9IQU5HKTogRG9uJ3Qgc3ludGF4IGVycm9yIG9uIGFuY2llbnQgaG9zdHMuCgkoY2hpbGRfaGFuZGxlciwgZGVhZF9jaGlsZHJlbik6IERlZmluZSB0aGVzZSBpZiBXQUlUX05PSEFORyBpcyBub3QKCWF2YWlsYWJsZS4KCShyZWFwX2NoaWxkcmVuKTogT25seSB0cmFjayB0aGUgZGVhZF9jaGlsZHJlbiBjb3VudCBpZiBubwoJV0FJVF9OT0hBTkcuICBPdGhlcndpc2UsIGl0J3MgYSBib29sZWFuLgoKCSogbWFpbi5jIChtYWluKTogQWRkIGJhY2sgc2lnbmFsIGhhbmRsZXIgaWYgbm8gV0FJVF9OT0hBTkcgaXMKCWF2YWlsYWJsZTsgb25seSB1c2UgZGVmYXVsdCBzaWduYWwgaGFuZGxlciBpZiBpdCBpcy4KCjE5OTgtMDgtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCUluc3RhbGwgYSBtb3JlIHJvYnVzdCBzaWduYWwgaGFuZGxpbmcgbWVjaGFuaXNtIGZvciBzeXN0ZW1zIHdoaWNoCglzdXBwb3J0IGl0LgoKCSogam9iLmMgKFdBSVRfTk9IQU5HKTogRGVmaW5lIHRvIGEgc3ludGF4IGVycm9yIGlmIG91ciBob3N0CglpcyB0cnVseSBhbmNpZW50OyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCgkoY2hpbGRfaGFuZGxlciwgZGVhZF9jaGlsZHJlbik6IFJlbW92ZS4KCShyZWFwX2NoaWxkcmVuKTogRG9uJ3QgdHJ5IHRvIGtlZXAgc2VwYXJhdGUgdHJhY2sgb2YgaG93IG1hbnkKCWRlYWQgY2hpbGRyZW4gd2UgaGF2ZSwgYXMgdGhpcyBpcyB0b28gYnVnLXByb25lLgoJSnVzdCBhc2sgdGhlIE9TIGluc3RlYWQuCgkodm1zSGFuZGxlQ2hpbGRUZXJtKTogRml4IHR5cG8gaW4gZXJyb3IgbWVzc2FnZTsgZG9uJ3QgbWVudGlvbgoJY2hpbGRfaGFuZGxlci4KCgkqIG1haW4uYyAobWFpbik6IE1ha2Ugc3VyZSB3ZSdyZSBub3QgaWdub3JpbmcgU0lHQ0hMRC9TSUdDTEQ7CglkbyB0aGlzIGVhcmx5LCBiZWZvcmUgd2UgY291bGQgcG9zc2libHkgY3JlYXRlIGEgc3VicHJvY2Vzcy4KCUp1c3QgdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yOyBkb24ndCBoYXZlIG91ciBvd24gaGFuZGxlci4KCjE5OTgtMDgtMTggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpIFtfX01TRE9TX18sIFdJTkRPV1MzMl06IEFkZCBjb2RlIHRvCglyZWNvZ25pemUgbGlicmFyeSBhcmNoaXZlIG1lbWJlcnMgd2hlbiBkZWFsaW5nIHdpdGggZHJpdmUgc3BlYwoJbWVzcy4gIERpc2NvdmVyeSBhbmQgaW5pdGlhbCBmaXggYnkgR2VvcmdlIFJhY3ogPGdyYWN6QG1pbmNvbS5jb20+LgoKMTk5OC0wOC0xOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3RkbGliLmggZXhwbGljaXRseSAoc29tZSBob3N0cyBoYXZlIGl0CglidXQgZG9uJ3QgaGF2ZSBTVERDX0hFQURFUlMpLgoJKiBtYWtlLmg6IFVzZSBIQVZFX1NURExJQl9ILiAgQ2xlYW4gdXAgc29tZSAjZGVmaW5lcy4KCSogY29uZmlnLmFtaTogUmUtY29tcHV0ZSBiYXNlZCBvbiBuZXcgY29uZmlnLmguaW4gY29udGVudHMuCgkqIGNvbmZpZy5oLXZtczogRGl0dG8uCgkqIGNvbmZpZy5oLlczMjogRGl0dG8uCgkqIGNvbmZpZ2guZG9zOiBEaXR0by4KCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSkgW1dJTkRPV1MzMl06IFdpbmRvd3Mgc3RhdCgpIGZhaWxzIGlmCglkaXJlY3RvcnkgbmFtZXMgZW5kIHdpdGggYFwnIHNvIHN0cmlwIGl0LgoKMTk5OC0wOC0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBBZGRlZCBjb3B5cmlnaHQgeWVhciB0byB0aGUgcHJpbnRlZCBjb3B5LiAgUmVtb3ZlZAoJdGhlIHByaWNlIGZyb20gdGhlIG1hbnVhbC4gIENoYW5nZSB0aGUgdG9wLWxldmVsIHJlZmVyZW5jZSB0bwoJcnVubmluZyBtYWtlIHRvIGJlICJJbnZva2luZyBtYWtlIiBpbnN0ZWFkIG9mICJtYWtlIEludm9jYXRpb24iLAoJdG8gY29tcGx5IHdpdGggR05VIGRvYyBzdGFuZGFyZHMuCgoJKiBtYWtlLmggKF9fZm9ybWF0X18sIF9fcHJpbnRmX18pOiBBZGRlZCBzdXBwb3J0IGZvciB0aGVzZSBpbgoJX19hdHRyaWJ1dGVfXyBtYWNyby4KCShtZXNzYWdlLCBlcnJvciwgZmF0YWwpOiBVc2UgLi4uIHByb3RvdHlwZSBmb3JtIHVuZGVyIF9fU1REQ19fLgoJQWRkIF9fZm9ybWF0X18gYXR0cmlidXRlcyBmb3IgcHJpbnRmLXN0eWxlIGZ1bmN0aW9ucy4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfRlVOQ19WUFJJTlRGKTogQ2hlY2sgZm9yIHZwcmludGYoKS9fZG9wcm50KCkuCgoJKiBtaXNjLmMgKG1lc3NhZ2UsIGVycm9yLCBmYXRhbCk6IEFkZCBwcmVwcm9jZXNzb3Igc3R1ZmYgdG8gZW5hYmxlCgljcmVhdGlvbiBvZiB2YXJpYWJsZS1hcmd1bWVudCBmdW5jdGlvbnMgd2l0aCBhcHByb3ByaWF0ZQoJcHJvdG90eXBlcywgdGhhdCB3b3JrcyB3aXRoIEFOU0ksIHByZS1BTlNJLCB2YXJhcmdzLmgsIHN0ZGFyZy5oLAoJdipwcmludGYoKSwgX2RvcHJudCgpLCBvciBub25lIG9mIHRoZSBhYm92ZS4gIEN1bGxlZCBmcm9tIEdOVQoJZmlsZXV0aWxzIGFuZCBzbGlnaHRseSBtb2RpZmllZC4KCShtYWtlZmlsZV9lcnJvciwgbWFrZWZpbGVfZXJyb3IpOiBSZW1vdmVkIChtZXJnZWQgaW50byBlcnJvcigpIGFuZAoJZmF0YWwoKSwgcmVzcGVjdGl2ZWx5KS4KCSogYW1pZ2EuYzogVXNlIHRoZW0uCgkqIGFyLmM6IFVzZSB0aGVtLgoJKiBhcnNjYW4uYzogVXNlIHRoZW0uCgkqIGNvbW1hbmRzLmM6IFVzZSB0aGVtLgoJKiBleHBhbmQuYzogVXNlIHRoZW0uCgkqIGZpbGUuYzogVXNlIHRoZW0uCgkqIGZ1bmN0aW9uLmM6IFVzZSB0aGVtLgoJKiBqb2IuYzogVXNlIHRoZW0uCgkqIG1haW4uYzogVXNlIHRoZW0uCgkqIG1pc2MuYzogVXNlIHRoZW0uCgkqIHJlYWQuYzogVXNlIHRoZW0uCgkqIHJlbWFrZS5jOiBVc2UgdGhlbS4KCSogcmVtb3RlLWNzdG1zLmM6IFVzZSB0aGVtLgoJKiBydWxlLmM6IFVzZSB0aGVtLgoJKiB2YXJpYWJsZS5jOiBVc2UgdGhlbS4KCgkqIG1ha2UuaCAoc3RydWN0IGZsb2MpOiBOZXcgc3RydWN0dXJlIHRvIHN0b3JlIGZpbGUgbG9jYXRpb24KCWluZm9ybWF0aW9uLgoJKiBjb21tYW5kcy5oIChzdHJ1Y3QgY29tbWFuZHMpOiBVc2UgaXQuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVXNlIGl0LgoJKiBjb21tYW5kcy5jOiBVc2UgaXQuCgkqIGRlZmF1bHQuYzogVXNlIGl0LgoJKiBmaWxlLmM6IFVzZSBpdC4KCSogZnVuY3Rpb24uYzogVXNlIGl0LgoJKiBtaXNjLmM6IFVzZSBpdC4KCSogcmVhZC5jOiBVc2UgaXQuCgkqIHJ1bGUuYzogVXNlIGl0LgoKMTk5OC0wOC0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBmaWxlZGVmLmggKEZJTEVfVElNRVNUQU1QX1BSSU5UX0xFTl9CT1VORCk6IEFkZCAxMCwgZm9yIG5hbm9zZWNvbmRzLgoKMTk5OC0wOC0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBmaWxlZGVmLmggKEZMT09SX0xPRzJfU0VDT05EU19QRVJfWUVBUik6IE5ldyBtYWNyby4KCShGSUxFX1RJTUVTVEFNUF9QUklOVF9MRU5fQk9VTkQpOiBUaWdodGVuIGJvdW5kLCBhbmQgdHJ5IHRvCgltYWtlIGl0IGVhc2llciB0byB1bmRlcnN0YW5kLgoKMTk5OC0wOC0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogV2UndmUgYWxyZWFkeSB1bnF1b3RlZCBhbnkgY29sb24gY2hhcnMKCWJ5IHRoZSB0aW1lIHdlJ3JlIGRvbmUgcmVhZGluZyB0aGUgdGFyZ2V0cywgc28gYXJyYW5nZSBmb3IKCXBhcnNlX2ZpbGVfc2VxKCkgb24gdGhlIHRhcmdldCBsaXN0IHRvIG5vdCBkbyBzbyBhZ2Fpbi4KCjE5OTgtMDgtMDUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZ2xvYi9jb25maWd1cmUuaW4gZGF0YS4gIFdlJ2xsIGhhdmUgdGhlIGdsb2IKCWNvZGUgaW5jbHVkZSB0aGUgcmVndWxhciBtYWtlIGNvbmZpZy5oLCByYXRoZXIgdGhhbiBjcmVhdGluZyBpdHMKCW93bi4KCgkqIGdldGxvYWRhdmcuYyAobWFpbik6IENoYW5nZSByZXR1cm4gdHlwZSB0byBpbnQuCgoxOTk4LTA4LTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogSWdub3JlIHVua25vd24gY2hpbGRyZW4uCgoxOTk4LTA3LTMxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLmgsIGZpbGVkZWYuaCwgZGVwLmgsIHJ1bGUuaCwgY29tbWFuZHMuaCwgcmVtYWtlLmM6CglBZGQgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zLiAgU29tZSBwcm90b3R5cGVzIG5lZWRlZCB0byBiZSBtb3ZlZAoJaW4gb3JkZXIgdG8gZ2V0ICNpbmNsdWRlIG9yZGVyIHJlYXNvbmFibGUuCgoxOTk4LTA3LTMwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLmg6IEFkZGVkIE1JTi9NQVguCgkqIGZpbGVkZWYuaDogVXNlIHRoZW07IHJlbW92ZSBGSUxFX1RJTUVTVEFNUF9NSU4uCgoxOTk4LTA3LTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHN1Yi1zZWNvbmQgdGltZXN0YW1wIHJlc29sdXRpb24gb24gaG9zdHMgdGhhdAogICAgICAgIHN1cHBvcnQgaXQgKGp1c3QgU29sYXJpcyAyLjYsIHNvIGZhcikuCgoJKiBhY2NvbmZpZy5oIChIQVZFX1NUX01USU0sIHVpbnRtYXhfdCk6IE5ldyB1bmRlZnMuCgkqIGFjaW5jbHVkZS5tNCAoam1fQUNfSEVBREVSX0lOVFRZUEVTX0gsIEFDX1NUUlVDVF9TVF9NVElNLAogICAgICAgIGptX0FDX1RZUEVfVUlOVE1BWF9UKTogTmV3IGRlZnVucy4KCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IENvbnZlcnQgZmlsZSB0aW1lc3RhbXAgdG8KICAgICAgICBzZWNvbmRzIGJlZm9yZSBjb21wYXJpbmcgdG8gYXJjaGl2ZSB0aW1lc3RhbXAuICBFeHRyYWN0IG1vZAogICAgICAgIHRpbWUgZnJvbSBzdHJ1Y3Qgc3RhdCB1c2luZyBGSUxFX1RJTUVTVEFNUF9TVEFUX01PRFRJTUUuCgkqIGNvbmZpZ3VyZS5pbiAoQ19TVFJVQ1RfU1RfTVRJTSwgam1fQUNfVFlQRV9VSU5UTUFYX1QpOiBBZGQuCiAgICAgICAgKEFDX0NIRUNLX0xJQiwgQUNfQ0hFQ0tfRlVOQ1MpOiBBZGQgY2xvY2tfZ2V0dGltZS4KCSogZmlsZS5jIChzbmFwX2RlcHMpOiBVc2UgRklMRV9USU1FU1RBTVAsIG5vdCB0aW1lX3QuCiAgICAgICAgKGZpbGVfdGltZXN0YW1wX25vdywgZmlsZV90aW1lc3RhbXBfc3ByaW50Zik6IE5ldyBmdW5jdGlvbnMuCiAgICAgICAgKHByaW50X2ZpbGUpOiBQcmludCBmaWxlIHRpbWVzdGFtcHMgYXMgRklMRV9USU1FU1RBTVAsIG5vdAogICAgICAgIHRpbWVfdC4KCSogZmlsZWRlZi5oOiBJbmNsdWRlIDxpbnR0eXBlcy5oPiBpZiBhdmFpbGFibGUgYW5kIGlmIEhBVkVfU1RfTVRJTS4KICAgICAgICAoRklMRV9USU1FU1RBTVAsIEZJTEVfVElNRVNUQU1QX1NUQVRfTU9EVElNRSwgRklMRV9USU1FU1RBTVBfTUlOLAogICAgICAgIEZJTEVfVElNRVNUQU1QU19QRVJfUywgRklMRV9USU1FU1RBTVBfRlJPTV9TX0FORF9OUywKICAgICAgICBGSUxFX1RJTUVTVEFNUF9ESVYsIEZJTEVfVElNRVNUQU1QX01PRCwgRklMRV9USU1FU1RBTVBfUywKICAgICAgICBGSUxFX1RJTUVTVEFNUF9OUywgRklMRV9USU1FU1RBTVBfUFJJTlRfTEVOX0JPVU5EKTogTmV3IG1hY3Jvcy4KICAgICAgICAoZmlsZV90aW1lc3RhbXBfbm93LCBmaWxlX3RpbWVzdGFtcF9zcHJpbnRmKTogTmV3IGRlY2xzLgogICAgICAgIChzdHJ1Y3QgZmlsZS5sYXN0X210aW1lLCBmX210aW1lLCBmaWxlX210aW1lXzEsIE5FV19NVElNRSk6CiAgICAgICAgdGltZV90IC0+IEZJTEVfVElNRVNUQU1QLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IExpa2V3aXNlLgoJKiB2cGF0aC5jICh2cGF0aF9zZWFyY2gsIHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBMaWtld2lzZS4KCSogbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgkqIHJlbWFrZS5jIChjaGVja19kZXAsIG5hbWVfbXRpbWUsIGxpYnJhcnlfc2VhcmNoLCBmX210aW1lKTogTGlrZXdpc2UuCiAgICAgICAgKGZfbXRpbWUpOiBVc2UgZmlsZV90aW1lc3RhbXBfbm93IGluc3RlYWQgb2YgYHRpbWUnLgogICAgICAgIFByaW50IGZpbGUgdGltZXN0YW1wIHdpdGggZmlsZV90aW1lc3RhbXBfc3ByaW50Zi4KCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IEV4dHJhY3QgZmlsZSB0aW1lIHN0YW1wIGZyb20KICAgICAgICBzdHJ1Y3Qgc3RhdCB3aXRoIEZJTEVfVElNRVNUQU1QX1NUQVRfTU9EVElNRS4KCjE5OTgtMDctMjggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43NyByZWxlYXNlZC4KCgkqIGRvc2J1aWxkLmJhdDogQ2hhbmdlIHRvIERPUyBDUkxGIGxpbmUgdGVybWluYXRvcnMuCgoJKiBtYWtlLXN0ZHMudGV4aTogVXBkYXRlIGZyb20gbGF0ZXN0IHZlcnNpb24uCgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbnMgU3VtbWFyeSk6IENsYXJpZnkgdGhhdCB0aGUgLXIgb3B0aW9uCglhZmZlY3RzIG9ubHkgcnVsZXMsIG5vdCBidWlsdGluIHZhcmlhYmxlcy4KCjE5OTgtMDctMjcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UuaDogTWFrZSBfX2F0dHJpYnV0ZV9fIHJlc29sdmUgdG8gZW1wdHkgZm9yIG5vbi1HQ0MgX2FuZF8KCWZvciBHQ0MgcHJlLTIuNS54LgoKCSogbWlzYy5jIChsb2dfYWNjZXNzKTogUHJpbnQgVUlEL0dJRCdzIGFzIHVuc2lnbmVkIGxvbmcgaW50IGZvcgoJbWF4aW11bSBwb3J0YWJpbGl0eS4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogUHJpbnQgUElEcyBhcyBsb25nIGludCBmb3IgbWF4aW11bQoJcG9ydGFiaWxpdHkuCgoxOTk4LTA3LTI0ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogTWFrZWZpbGUuRE9TICgqX0lOU1RBTEwsICpfVU5JTlNUQUxMKTogUmVwbGFjZSBgdHJ1ZScgd2l0aCBgOicuCgoxOTk4LTA3LTI1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzYuOTQgcmVsZWFzZWQuCgoxOTk4LTA3LTIzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWcuaC5XMzIudGVtcGxhdGU6IE1ha2Ugc3VyZSBhbGwgdGhlICNkZWZpbmVzIG9mIG1hY3JvcyBoZXJlCgloYXZlIGEgdmFsdWUgKGUuZy4sIHVzZSBgYCNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxJycgaW5zdGVhZCBvZgoJanVzdCBgYCNkZWZpbmUgSEFWRV9TVFJJTkdfSCcnLiAgS2VlcHMgdGhlIHByZXByb2Nlc3NvciBoYXBweSBpbgoJc29tZSBjb250ZXh0cy4KCgkqIG1ha2UuaDogUmVtb3ZlIF9fYXR0cmlidXRlX18oKGZvcm1hdC4uLikpIHN0dWZmOyB1c2luZyBpdCB3aXRoCgl1bi1wcm90b3R5cGVkIGZ1bmN0aW9ucyBjYXVzZXMgb2xkZXIgR0NDJ3MgdG8gZmFpbC4KCgkqIFZlcnNpb24gMy43Ni45MyByZWxlYXNlZC4KCjE5OTgtMDctMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZV9kYXRhX2Jhc2UpOiBGaXggYXZlcmFnZSBjYWxjdWxhdGlvbi4KCjE5OTgtMDctMjAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAoZGllKTogUG9zdHBvbmUgdGhlIGNoZGlyKCkgdW50aWwgYWZ0ZXIKCXJlbW92ZV9pbnRlcm1lZGlhdGVzKCkgc28gdGhhdCBpbnRlcm1lZGlhdGUgdGFyZ2V0cyB3aXRoIHJlbGF0aXZlCglwYXRobmFtZXMgYXJlIHJlbW92ZWQgcHJvcGVybHkuCgoxOTk4LTA3LTE3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogTmV3IGZsYWc6IGRpZCB3ZSBwcmludCBhbiBlcnJvciBvciBub3Q/CgoJKiByZW1ha2UuYyAobm9fcnVsZV9lcnJvcik6IE5ldyBmdW5jdGlvbiB0byBwcmludCBlcnJvciBtZXNzYWdlcywKCWV4dHJhY2VkIGZyb20gcmVtYWtlX2ZpbGUoKS4KCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IEludm9rZSB0aGUgbmV3IGVycm9yIHByaW50IGZ1bmN0aW9uLgoJKHVwZGF0ZV9maWxlXzEpOiBJbnZva2UgdGhlIGVycm9yIHByaW50IGZ1bmN0aW9uIGlmIHdlIHNlZSB0aGF0IHdlCglhbHJlYWR5IHRyaWVkIHRoaXMgdGFyZ2V0IGFuZCBpdCBmYWlsZWQsIGJ1dCB0aGF0IGFuIGVycm9yIHdhc24ndAoJcHJpbnRlZCBmb3IgaXQuICBUaGlzIGNhbiBoYXBwZW4gaWYgYSBmaWxlIGlzIGluY2x1ZGVkIHdpdGgKCS1pbmNsdWRlIG9yIHNpbmNsdWRlIGFuZCBjb3VsZG4ndCBiZSBidWlsdCwgdGhlbiBsYXRlciBpcyBhbHNvCgl0aGUgZGVwZW5kZW5jeSBvZiBhbm90aGVyIHRhcmdldC4gIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIG1ha2UganVzdAoJc2lsZW50bHkgc3RvcHMgOi0vLgoKMTk5OC0wNy0xNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBSZW1vdmVkICJiZXRhIiB2ZXJzaW9uIGRlc2lnbmF0b3IuCglVcGRhdGVkIElTQk4gZm9yIHRoZSBuZXh0IHByaW50aW5nLgoKMTk5OC0wNy0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBhY2luY2x1ZGUubTQ6IE5ldyBBQ19MRlMgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIHNwZWNpYWwgY29tcGlsZXIKCWZsYWdzIGFyZSBuZWVkZWQgdG8gYWxsb3cgYWNjZXNzIHRvIGxhcmdlIGZpbGVzIChlLmcuLCBTb2xhcmlzIDIuNikuCgkqIGNvbmZpZ3VyZS5pbjogSW52b2tlIGl0LgoKMTk5OC0wNy0wOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIE1ha2VmaWxlLkRPUzogdHJhY2sgY2hhbmdlcyBpbiBNYWtlZmlsZS5pbi4KCjE5OTgtMDctMDcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbW90ZS1jc3Rtcy5jIChzdGFydF9yZW1vdGVfam9iKTogTW92ZSBnZXRob3N0YnlhZGRyKCkgdG8gdGhlCgl0b3Agc28gaG9zdCBpcyBpbml0aWFsaXplZCBlYXJseSBlbm91Z2guCgoJKiBhY2luY2x1ZGUubTQ6IE5ldyBmaWxlLiAgTmVlZCBzb21lIHNwZWNpYWwgYXV0b2NvbmYgbWFjcm9zIHRvCgljaGVjayBmb3IgbmV0d29yayBsaWJyYXJpZXMgKC1sc29ja2V0LCAtbG5zbCwgZXRjLikgd2hlbgoJY29uZmlndXJpbmcgQ3VzdG9tcy4KCgkqIGNvbmZpZ3VyZS5pbiAobWFrZV90cnlfY3VzdG9tcyk6IEludm9rZSBuZXcgbmV0d29yayBsaWJzIG1hY3JvLgoKMTk5OC0wNy0wNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc2LjkyIHJlbGVhc2VkLgoKCSogUkVBRE1FLmN1c3RvbXM6IEFkZGVkIHRvIHRoZSBkaXN0cmlidXRpb24uCgoJKiBjb25maWd1cmUuaW4gKG1ha2VfdHJ5X2N1c3RvbXMpOiBSZXdyaXRlIHRvIHJlcXVpcmUgYW4gaW5zdGFsbGVkCglDdXN0b21zIGxpYnJhcnksIHJhdGhlciB0aGFuIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KCgkqIE1ha2VmaWxlLmFtIChtYW5fTUFOUyk6IEluc3RhbGwgbWFrZS4xLgoJKiBtYWtlLjE6IFJlbmFtZWQgZnJvbSBtYWtlLm1hbi4KCgkqIG1ha2UudGV4aW5mbyAoQnVncyk6IE5ldyBtYWlsaW5nIGxpc3QgYWRkcmVzcyBmb3IgR05VIG1ha2UgYnVnCglyZXBvcnRzLgoKMTk5OC0wNy0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc2LjkxIHJlbGVhc2VkLgoKCSogZGVmYXVsdC5jOiBBZGRlZCBkZWZhdWx0IHJ1bGUgZm9yIG5ldy1zdHlsZSBSQ1MgbWFzdGVyIGZpbGUKCXN0b3JhZ2U7IGBgJSA6OiBSQ1MvJScnLgoJQWRkZWQgZGVmYXVsdCBydWxlcyBmb3IgRE9TLXN0eWxlIEMrKyBmaWxlcyB3aXRoIHN1ZmZpeCAiLmNwcCIuCglUaGV5IHVzZSB0aGUgbmV3IExJTksuY3BwIGFuZCBDT01QSUxFLmNwcCBtYWNyb3MsIHdoaWNoIGFyZSBzZXQgYnkKCWRlZmF1bHQgdG8gYmUgZXF1YWwgdG8gTElOSy5jYyBhbmQgQ09NUElMRS5jYy4KCjE5OTgtMDYtMTkgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZXNldCBleGVjdXRlX2J5X3NoZWxsIGFmdGVyIGFuIGVtcHR5CiAgICAgICAgY29tbWFuZCB3YXMgc2tpcHBlZC4KCjE5OTgtMDYtMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAobWFpbik6IEtlZXAgdHJhY2sgb2YgdGhlIHRlbXBvcmFyeSBmaWxlbmFtZSBjcmVhdGVkIHdoZW4KCXJlYWRpbmcgYSBtYWtlZmlsZSBmcm9tIHN0ZGluICgtZi0pIGFuZCBhdHRlbXB0IHRvIHJlbW92ZSBpdAoJYXMgc29vbiBhcyB3ZSBrbm93IHdlJ3JlIG5vdCBnb2luZyB0byByZS1leGVjLiAgSWYgd2UgYXJlLCBhZGQgaXQKCXRvIHRoZSBleGVjJ2QgbWFrZSdzIGNtZCBsaW5lIHdpdGggIi1vIiBzbyB0aGUgZXhlYydkIG1ha2UgZG9lc24ndAoJdHJ5IHRvIHJlYnVpbGQgaXQuICBXZSBzdGlsbCBoYXZlIGEgaG9sZTogaWYgbWFrZSByZS1leGVjcyB0aGVuCgl0aGUgdGVtcG9yYXJ5IGZpbGUgd2lsbCBuZXZlciBiZSByZW1vdmVkLiAgVG8gZml4IHRoaXMgd2UnZCBuZWVkCglhIGJyYW5kIG5ldyBvcHRpb24gdGhhdCBtZWFudCAicmVhbGx5IGRlbGV0ZSB0aGlzIi4KCSogQVVUSE9SUywgZ2V0b3B0LmMsIGdldG9wdDEuYywgZ2V0b3B0LmgsIG1haW4uYyAocHJpbnRfdmVyc2lvbik6CglVcGRhdGVkIG1haWxpbmcgYWRkcmVzc2VzLgoKMTk5OC0wNi0wOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogQW5kcmVhcyBMdWlrIDxsdWlrQGlzYS5kZT4gcG9pbnRzIG91dCB0aGF0IHRoZQoJY2hlY2sgZm9yIG1ha2VmaWxlIDo6IHJ1bGVzIHdpdGggY29tbWFuZHMgYnV0IG5vIGRlcGVuZGVuY2llcwoJY2F1c2luZyBhIGxvb3AgdGVybWluYXRlcyBpbmNvcnJlY3RseS4KCgkqIG1haW50TWFrZWZpbGU6IE1ha2UgYSB0ZW1wbGF0ZSBmb3IgUkVBRE1FLkRPUyB0byB1cGRhdGUgdmVyc2lvbgoJbnVtYmVycy4KCjE5OTgtMDUtMzAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBEb24ndCBmcmVlIHRoZSBtZW1vcnkgZm9yIHRoZQoJZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgd2hlbiBkcm9wcGluZyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuCgoxOTk4LTA1LTMwICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogZGlyLmMgKGZpbGVfZXhpc3RzX3AsIGZpbGVfaW1wb3NzaWJsZV9wLCBmaWxlX2ltcG9zc2libGUpCglbX19NU0RPU19fLCBXSU5ET1dTMzJdOiBSZXRhaW4gdHJhaWxpbmcgc2xhc2ggaW4gImQ6LyIsIGFuZCBtYWtlCglkaXJuYW1lIG9mICJkOmZvbyIgYmUgImQ6Ii4KCjE5OTgtMDUtMjYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQXZvaWQgcnVubmluZyBwYXN0IEVPUyB3aGVuIHNjYW5uaW5nCglmaWxlIG5hbWUgYWZ0ZXIgYGluY2x1ZGUnLgoKMTk5OC0wNS0yNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBtYWtlLnRleGluZm8gKEZsYXZvcnMpOiBDb3JyZWN0IGRlc2NyaXB0aW9uIG9mIGNvbmRpdGlvbmFsCglhc3NpZ25tZW50LCB3aGljaCBpcyBub3QgZXF1aXZhbGVudCB0byBpZm5kZWYuCgkoU2V0dGluZyk6IExpa2V3aXNlLgoKMTk5OC0wNS0yNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpOiBzdHJuY21wKCkgbWlnaHQgYmUgaW1wbGVtZW50ZWQgYXMgYQoJbWFjcm8sIHNvIGRvbid0IHB1dCBwcmVwcm9jZXNzb3IgY29uZGl0aW9ucyBpbnNpZGUgdGhlIGFyZ3VtZW50cwoJbGlzdC4KCjE5OTgtMDUtMjMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpIFtfX01TRE9TX18sIFdJTkRPV1MzMl06IFNraXAgY29sb25zIGluCglkcml2ZSBzcGVjcyB3aGVuIHBhcnNpbmcgdGFyZ2V0cywgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlcyBhbmQKCXN0YXRpYyBwYXR0ZXJuIHJ1bGVzLiAgQSBjb2xvbiBjYW4gb25seSBiZSBwYXJ0IG9mIGRyaXZlIHNwZWMgaWYKCWl0IGlzIGFmdGVyIHRoZSBmaXJzdCBsZXR0ZXIgaW4gYSB0b2tlbi4KCjE5OTgtMDUtMjIgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiByZW1ha2UuYyAoZl9tdGltZSkgW19fTVNET1NfX106IEFsbG93IHVwIHRvIDMgc2VjIG9mIHNrZXcgYmVmb3JlCgl5ZWxsaW5nIGJsb29keSBtdXJkZXIuCgoJKiBkb3NidWlsZC5iYXQ6IFVzZSAtRElOQ0xVREVESVI9IGFuZCAtRExJQkRJUj0gd2hlcmUgYXBwcm9wcmlhdGUuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogQ29tYmluZSB0aGUgc3BlY2lhbCBmaWxlLWhhbmRsaW5nIGNvZGUKCWZvciBXSU5ET1dTMzIgYW5kIF9fTVNET1NfXyBpbnRvIGEgc2luZ2xlIHNuaXBwZXQuCgkoZ2V0X25leHRfbXdvcmQpIFtfX01TRE9TX18sIFdJTkRPV1MzMl06IEFsbG93IGEgd29yZCB0byBpbmNsdWRlIGEKCWNvbG9uIGFzIHBhcnQgb2YgYSBkcml2ZSBzcGVjLgoKCSogam9iLmMgKGJhdGNoX21vZGVfc2hlbGwpIFtfX01TRE9TX19dOiBEZWNsYXJlLgoKMTk5OC0wNS0yMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc2LjkwIHJlbGVhc2VkLgoKMTk5OC0wNS0xOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChNYWtlIEVycm9ycyk6IEFkZGVkIGEgbmV3IGFwcGVuZGl4IGRlc2NyaWJpbmcKCWNvbW1vbiBlcnJvcnMgbWFrZSBtaWdodCBnZW5lcmF0ZSBhbmQgaG93IHRvIHJlc29sdmUgdGhlbSAob3IgYXQKCWxlYXN0IG1vcmUgaW5mb3JtYXRpb24gb24gd2hhdCB0aGV5IG1lYW4pLgoKCSogbWFpbnRNYWtlZmlsZSAoTk1BS0VGSUxFUyk6IFVzZSB0aGUgbmV3IGF1dG9tYWtlIDEuMyBmZWF0dXJlCgl0byBjcmVhdGUgYSBkZXBlbmRlbmN5IGZpbGUgdG8gY29uc3RydWN0IE1ha2VmaWxlLkRPUywgU01ha2VmaWxlLAoJYW5kIE5NYWtlZmlsZS4KCSguZGVwX3NlZ21lbnQpOiBHZW5lcmF0ZSB0aGUgZGVwZW5kZW5jeSBmcmFnbWVudCBmaWxlLgoKMTk5OC0wNS0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS5tYW46IE1pbm9yIGNoYW5nZXMuCgoxOTk4LTA1LTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmdW5jdGlvbi5jIChwYXR0ZXJuX21hdGNoZXMsZXhwYW5kX2Z1bmN0aW9uKTogQ2hhbmdlIHZhcmlhYmxlcwoJYW5kIHR5cGVzIG5hbWVkICJ3b3JkIiB0byBzb21ldGhpbmcgZWxzZSwgdG8gYXZvaWQgY29tcGlsYXRpb24KCXByb2JsZW1zIG9uIENyYXkgQzkwIFVuaWNvcy4KCSogdmFyaWFibGUuaDogTW9kaWZ5IHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCgoxOTk4LTA1LTExICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtXSU5ET1dTMzJdOiBUdXJuIG9mZgoJZWNobyB3aGVuIHVzaW5nIGEgYmF0Y2ggZmlsZSwgYW5kIG1ha2Ugc3VyZSB0aGUgY29tbWFuZCBlbmRzIGluIGEKCW5ld2xpbmUuCgoxOTk4LTA1LTAzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4gKG1ha2VfdHJ5X2N1c3RvbXMpOiBBZGQgc29tZSBjdXN0b21zIGZsYWdzIGlmIHRoZQoJdXNlciBjb25maWd1cmVzIGN1c3RvbSBzdXBwb3J0LgoKCSogam9iLmMsIHJlbW90ZS1jc3Rtcy5jOiBNZXJnZSBpbiBjaGFuZ2VzIGZvciBjdXN0b20gbGlicmFyeS4KCgkqIHJlbW90ZS1zdHViLmM6IEFkZCBvcHRpb24gdG8gc3R1YiBzdGFydF9yZW1vdGVfam9iX3AoKS4KCjE5OTgtMDUtMDEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogSW5zdGFsbCBWUEFUSCsgaGFuZGxpbmcgZm9yIGFyY2hpdmVzOyB1c2UKCXRoZSBobmFtZSBmaWVsZCBpbnN0ZWFkIG9mIHRoZSBuYW1lIGZpZWxkLCBhbmQgcmVoYXNoIHdoZW4KCWFwcHJvcHJpYXRlLgoKMTk5OC0wNC0zMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcnVsZS5jIChwcmludF9ydWxlX2RhdGFfYmFzZSk6IFByaW50IG91dCBhbnkgcGF0dGVybi1zcGVjaWZpYwoJdmFyaWFibGUgdmFsdWVzIGludG8gdGhlIHJ1bGVzIGRhdGFiYXNlLgoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGVfc2V0KTogTWFrZSB0aGlzIHZhcmlhYmxlIGV4dGVybiwgdG8KCWJlIGNhbGxlZCBieSBwcmludF9ydWxlX2RhdGFfYmFzZSgpIGZvciBwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlcy4KCgkqIG1ha2UudGV4aW5mbyAoUGF0dGVybi1zcGVjaWZpYyk6IERvY3VtZW50IHBhdHRlcm4tc3BlY2lmaWMKCXZhcmlhYmxlcy4KCjE5OTgtMDQtMjkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGUpOiBNYWtlIHN0YXRpYzsgaXRzIG9ubHkKCWNhbGxlZCBpbnRlcm5hbGx5LiAgTG9vayB1cCB0aGlzIHRhcmdldCBpbiB0aGUgbGlzdCBvZgoJcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZXMgYW5kIGluc2VydCB0aGUgdmFyaWFibGUgc2V0IGludG8gdGhlCglxdWV1ZSB0byBiZSBzZWFyY2hlZC4KCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBBZGQgYSBuZXcgZmllbGQgdG8gaG9sZCB0aGUKCXByZXZpb3VzbHktZm91bmQgcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZSByZWZlcmVuY2UuICBBZGQgYSBuZXcKCWZsYWcgdG8gcmVtZW1iZXIgd2hldGhlciB3ZSBhbHJlYWR5IHNlYXJjaGVkIGZvciB0aGlzIGZpbGUuCgoJKiBydWxlLmggKHN0cnVjdCBwYXR0ZXJuX3Zhcik6IE5ldyBzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcKCXBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgdmFsdWVzLiAgRGVmaW5lIG5ldyBmdW5jdGlvbiBwcm90b3R5cGVzLgoKCSogcnVsZS5jOiBOZXcgdmFyaWFibGVzIHBhdHRlcm5fdmFycyBhbmQgbGFzdF9wYXR0ZXJuX3ZhciBmb3IKCXN0b3JhZ2UgYW5kIGhhbmRsaW5nIG9mIHBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgdmFsdWVzLgoJKGNyZWF0ZV9wYXR0ZXJuX3Zhcik6IENyZWF0ZSBhIG5ldyBwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlIHZhbHVlCglzdHJ1Y3R1cmUuCgkobG9va3VwX3BhdHRlcm5fdmFyKTogVHJ5IHRvIG1hdGNoIGEgdGFyZ2V0IHRvIG9uZSBvZiB0aGUKCXBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgdmFsdWVzLgoKMTk5OC0wNC0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChUYXJnZXQtc3BlY2lmaWMpOiBEb2N1bWVudCB0YXJnZXQtc3BlY2lmaWMKCXZhcmlhYmxlcy4KCjE5OTgtMDQtMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBNYWRlIGdsb2JhbGx5IHZpc2libGUuCgkobG9va3VwX3ZhcmlhYmxlX2luX3NldCk6IE5ldyBmdW5jdGlvbjogbGlrZSBsb29rdXBfdmFyaWFibGUgYnV0Cglsb29rIG9ubHkgaW4gYSBzcGVjaWZpYyB2YXJpYWJsZSBzZXQuCgkodGFyZ2V0X2Vudmlyb25tZW50KTogVXNlIGxvb2t1cF92YXJpYWJsZV9pbl9zZXQoKSB0byBnZXQgdGhlCgljb3JyZWN0IGV4cG9ydCBydWxlcyBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUuCgkoY3JlYXRlX25ld192YXJpYWJsZV9zZXQpOiBDcmVhdGUgYSBuZXcgdmFyaWFibGUgc2V0LCBhbmQganVzdAoJcmV0dXJuIGl0IHdpdGhvdXQgaW5zdGFsbGluZyBpdCBhbnl3aGVyZS4KCShwdXNoX25ld192YXJpYWJsZV9zY29wZSk6IFJlaW1wbGVtZW50IGluIHRlcm1zIG9mCgljcmVhdGVfbmV3X3ZhcmlhYmxlX3NldC4KCgkqIHJlYWQuYyAocmVjb3JkX3RhcmdldF92YXIpOiBMaWtlIHJlY29yZF9maWxlcywgYnV0IGluc3RlYWQgb2YKCWZpbGVzIGNyZWF0ZSBhIHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUKCWxpc3RlZCB0YXJnZXRzLiAgSW52b2tlZCBmcm9tIHJlYWRfbWFrZWZpbGUoKSB3aGVuIHRoZSB0YXJnZXQgbGluZQoJdHVybnMgb3V0IHRvIGJlIGEgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIGFzc2lnbm1lbnQuCgoxOTk4LTA0LTE5ICBQYXVsIEQuIFNtaXRoIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJld3JpdGUgdGhlIGVudGlyZSB0YXJnZXQgcGFyc2luZwoJc2VjdGlvbiB0byBpbXBsZW1lbnQgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlcy4gIEluIHBhcnRpY3VsYXIsIHdlCgljYW5ub3QgZXhwYW5kIHRoZSBlbnRpcmUgbGluZSBhcyBzb29uIGFzIGl0J3MgcmVhZCBpbiwgc2luY2Ugd2UKCW1heSB3YW50IHRvIGV2YWx1YXRlIHBhcnRzIG9mIGl0IHdpdGggZGlmZmVyZW50IHZhcmlhYmxlIGNvbnRleHRzCglhY3RpdmUuICBJbnN0ZWFkLCBzdGFydCBleHBhbmRpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIHVudGlsIHdlIGZpbmQKCXRoZSBgOicgKG9yIGA6OicpLCB0aGVuIGRldGVybWluZSB3aGF0IGtpbmQgb2YgbGluZSB0aGlzIGlzIGFuZAoJY29udGludWUgYXBwcm9wcmlhdGVseS4KCgkqIHJlYWQuYyAoZ2V0X25leHRfbXdvcmQpOiBOZXcgZnVuY3Rpb24gdG8gcGFyc2UgYSBtYWtlZmlsZSBsaW5lCglieSAid29yZHMiLCBjb25zaWRlcmluZyBhbiBlbnRpcmUgdmFyaWFibGUgb3IgZnVuY3Rpb24gYXMgb25lCgl3b3JkLiAgUmV0dXJuIHRoZSB0eXBlIHJlYWQgaW4sIGFsb25nIHdpdGggaXRzIHN0YXJ0aW5nIHBvc2l0aW9uCglhbmQgbGVuZ3RoLgoJKGVudW0gbWFrZV93b3JkX3R5cGUpOiBUaGUgdHlwZXMgb2Ygd29yZHMgdGhhdCBhcmUgcmVjb2duaXplZCBieQoJZ2V0X25leHRfbXdvcmQoKS4KCgkqIHZhcmlhYmxlLmggKHN0cnVjdCB2YXJpYWJsZSk6IEFkZCBhIGZsYWcgdG8gc3BlY2lmeSBhIHBlci10YXJnZXQKCXZhcmlhYmxlLgoKCSogZXhwYW5kLmM6IE1ha2UgdmFyaWFibGVfYnVmZmVyIGdsb2JhbC4gIFdlIG5lZWQgdGhpcyBkdXJpbmcgdGhlCgluZXcgcGFyc2luZyBvZiB0aGUgbWFrZWZpbGUuCgkodmFyaWFibGVfZXhwYW5kX3N0cmluZyk6IE5ldyBmdW5jdGlvbi4gIExpa2UgdmFyaWFibGVfZXhwYW5kKCksCglidXQgc3RhcnQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgYnVmZmVyLCBub3QgdGhlIGJlZ2lubmluZy4KCSh2YXJpYWJsZV9leHBhbmQpOiBSZXdyaXRlIHRvIHNpbXBseSBjYWxsIHZhcmlhYmxlX2V4cGFuZF9zdHJpbmcoKS4KCjE5OTgtMDQtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IEFsbG93IHRoZSByZWJ1aWxkaW5nIG1ha2VmaWxlcwoJc3RlcCB0byB1c2UgcGFyYWxsZWwgam9icy4gIE5vdCBzdXJlIHdoeSB0aGlzIHdhcyBkaXNhYmxlZDoKCWhvcGVmdWxseSB3ZSB3b24ndCBmaW5kIG91dCA6LS8uCgoxOTk4LTA0LTExICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBTZXQgdGhlIENVUkRJUiBtYWtlZmlsZSB2YXJpYWJsZS4KCSogbWFrZS50ZXhpbmZvIChSZWN1cnNpb24pOiBEb2N1bWVudCBpdC4KCjE5OTgtMDMtMTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1pc2MuYyAobWFrZWZpbGVfZmF0YWwpOiBJZiBGSUxFIGlzIG5pbCwgaW52b2tlIHBsYWluIGZhdGFsKCkuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVXNlIG5ldyBmZWF0dXJlLgoKMTk5OC0wMy0xMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgcGFzcyBpbmNsdWRlZCwgcmVidWlsdCBtYWtlZmlsZXMgdG8KCXJlLWV4ZWMnZCBtYWtlcyB3aXRoIC1vLiAgUmVvcGVucyBhIHBvc3NpYmxlIGxvb3AsIGJ1dCBpdCBjYXVzZWQKCXRvbyBtYW55IHByb2JsZW1zLgoKMTk5OC0wMy0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBJbXBsZW1lbnQgPz0uCgkqIG1ha2UudGV4aW5mbyAoU2V0dGluZyk6IERvY3VtZW50IGl0LgoKMTk5OC0wMi0yOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFJlc2V0IGV4ZWN1dGVfYnlfc2hlbGwgYWZ0ZXIgYW4gZW1wdHkKICAgICAgICBjb21tYW5kLCBsaWtlICI6IiwgaGFzIGJlZW4gc2Vlbi4KClR1ZSBPY3QgMDcgMTU6MDA6MDAgMTk5NyAgUGhpbCBCcm9va3MgPHBoaWxsaXBfYnJvb2tzQGhwLmNvbT4KCgkqIG1ha2UuaCBbV0lORE9XUzMyXTogbWFrZSBjYXNlIHNlbnNpdGl2aXR5IGNvbmZpZ3VyYWJsZQoJKiBkaXIuYyBbV0lORE9XUzMyXTogbWFrZSBjYXNlIHNlbnNpdGl2aXR5IGNvbmZpZ3VyYWJsZQoJKiBSRUFETUUuVzMyOiBEb2N1bWVudCBjYXNlIHNlbnNpdGl2aXR5CgkqIGNvbmZpZy5hbWk6IFNoYXJlIGNhc2Ugd2FycGluZyBjb2RlIHdpdGggV2luZG93cwoKTW9uIE9jdCAgNiAxODo0ODo0NSBDRFQgMTk5NyBSb2IgVHVsbG9oIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogQWRkZWQgc3VwcG9ydCBmb3IgTUtTIHRvb2xraXQgc2hlbGwKCSh0dXJuIG9uIEhBVkVfTUtTX1NIRUxMKS4KCSogcmVhZC5jIFtXSU5ET1dTMzJdOiBGaXhlZCBhIHByb2JsZW0gd2l0aCBtdWx0aXBsZSB0YXJnZXQgcnVsZXMKIAlyZXBvcnRlZCBieSBHaWxiZXJ0IENhdGlwb24gKGdjYXRpcG9uQHRpYmNvLmNvbSkuICBJZiBtdWx0aXBsZQogCXBhdGggdG9rZW5zIGluIGEgcnVsZSBkaWQgbm90IGhhdmUgZHJpdmUgbGV0dGVycywgbWFrZSB3b3VsZAogCWluY29ycmVjdGx5IGNvbmNhdGVuYXRlIHRoZSAyIHRva2VucyB0b2dldGhlci4KCSogbWFpbi5jL3ZhcmlhYmxlLmMgW1dJTkRPV1MzMl06IGNoYW5nZWQgU0hFTEwgZGV0ZWN0aW9uIGNvZGUgdG8KIAlmb2xsb3cgd2hhdCBNU0RPUyBkaWQuIEluIGFkZGl0aW9uIHRvIHdhdGNoaW5nIGZvciBTSEVMTCB2YXJpYWJsZQogCXVwZGF0ZXMsIG1ha2UncyBtYWluIHdpbGwgYXR0ZW1wdCB0byBkZWZhdWx0IHRoZSB2YWx1ZSBvZiBTSEVMTAogCWJlZm9yZSBhbmQgYWZ0ZXIgbWFrZWZpbGVzIGFyZSBwYXJzZWQuCgkqIGpvYi5jL2pvYi5oIFtXSU5ET1dTMzJdOiBUaGUgbGF0ZXN0IGNoYW5nZXMgbWFkZSB0byBlbmFibGUgdXNlCiAJb2YgdGhlIEdOVVdJTjMyIHNoZWxsIGZyb20gbWFrZSBjb3VsZCBjYXVzZSBtYWtlIHRvIGZhaWwgZHVlIHRvIGEKIAljb25jdXJyZW5jeSBjb25kaXRpb24gYmV0d2VlbiBwYXJlbnQgYW5kIGNoaWxkIHByb2Nlc3Nlcy4gIE1ha2UKIAlub3cgY3JlYXRlcyBhIGJhdGNoIGZpbGUgcGVyIGpvYiBpbnN0ZWFkIG9mIHRyeWluZyB0byByZXVzZSB0aGUKIAlzYW1lIHNpbmdsZXRvbiBiYXRjaCBmaWxlLgoJKiBqb2IuYy9qb2IuaC9mdW5jdGlvbi5jL2NvbmZpZy5oLlczMiBbV0lORE9XUzMyXTogUmVuYW1lZCBtYWNybwogCWZyb20gSEFWRV9DWUdOVVNfR05VV0lOMzJfVE9PTFMgdG8gQkFUQ0hfTU9ERV9PTkxZX1NIRUxMLiBSZXdvcmtlZAogCWxvZ2ljIHRvIHJlZHVjZSBjb21wbGV4aXR5LiBXSU5ET1dTMzIgbm93IHVzZXMgdGhlIHVuaXh5X3NoZWxsCiAJdmFyaWFibGUgdG8gZGV0ZWN0IEJvdXJuZS1zaGVsbCBjb21wYXRpYmxlIGVudmlyb25tZW50cy4gVGhlcmUgaXMKIAlhbHNvIGEgYmF0Y2hfbW9kZV9zaGVsbCB2YXJpYWJsZSB0aGF0IGRldGVybWluZXMgd2hldGhlciBub3QKIAljb21tYW5kIGxpbmVzIHNob3VsZCBiZSBleGVjdXRlZCB2aWEgc2NyaXB0IGZpbGVzLiBBIFdJTkRPV1MzMgogCXN5c3RlbSB3aXRoIG5vIHNoLmV4ZSBpbnN0YWxsZWQgd291bGQgaGF2ZSB1bml4eV9zaGVsbCBzZXQgdG8KIAlGQUxTRSBhbmQgYmF0Y2hfbW9kZV9zaGVsbCBzZXQgdG8gVFJVRS4gSWYgeW91IGhhdmUgYSB1bml4eSBzaGVsbAogCXRoYXQgZG9lcyBub3QgYmVoYXZlIHdlbGwgd2hlbiBpbnZva2luZyB0aGluZ3MgdmlhICdzaCAtYyB4eHgnLAogCXlvdSBtYXkgd2FudCB0byB0dXJuIG9uIEJBVENIX01PREVfT05MWV9TSEVMTCBhbmQgc2VlIGlmIHRoaW5ncwogCWltcHJvdmUuCgkqIE5NYWtlZmlsZTogQWRkZWQgL0QgREVCVUcgdG8gZGVidWcgYnVpbGQgZmxhZ3Mgc28gdGhhdCB1bmhhbmRsZWQKIAlleGNlcHRpb25zIGNvdWxkIGJlIGRlYnVnZ2VkLgoKTW9uIE9jdCAgNiAwMDowNDoyNSAxOTk3ICBSb2IgVHVsbG9oIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogbWFpbi5jIFtXSU5ET1dTMzJdOiBUaGUgZnVuY3Rpb24gZGVmaW5lX3ZhcmlhYmxlKCkgZG9lcyBub3QKIAloYW5kbGUgTlVMTC4gVGVzdCBiZWZvcmUgY2FsbGluZyBpdCB0byBzZXQgUGF0aC4KCSogbWFpbi5jIFtXSU5ET1dTMzJdOiBTZWFyY2ggUGF0aCBhZ2FpbiBhZnRlciBtYWtlZmlsZXMgaGF2ZSBiZWVuCglwYXJzZWQgdG8gZGV0ZWN0IHNoLmV4ZS4KCSogam9iLmMgW1dJTkRPV1MzMl06IEFkZGVkIHN1cHBvcnQgZm9yIEN5Z251cyBHTlUgV0lOMzIgdG9vbHMuCglUbyB1c2UsIHR1cm4gb24gSEFWRV9DWUdOVVNfR05VV0lOMzJfVE9PTFMgaW4gY29uZmlnLmguVzMyLgoJKiBjb25maWcuaC5XMzI6IEFkZGVkIEhBVkVfQ1lHTlVTX0dOVVdJTjMyX1RPT0xTIG1hY3JvLgoKU3VuIE9jdCAgNSAyMjo0Mzo1OSAxOTk3ICBKb2huIFcuIEVhdG9uIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiBnbG9iL2dsb2IuYyAoZ2xvYl9pbl9kaXIpIFtWTVNdOiBHbG9iYmluZyBzaG91bGRuJ3QgYmUKCWNhc2Utc2Vuc2l0aXZlLgoJKiBqb2IuYyAoY2hpbGRfZXhlY3V0ZV9qb2IpIFtWTVNdOiBVc2UgYSBWTVMgLmNvbSBmaWxlIGlmIHRoZQoJY29tbWFuZCBjb250YWlucyBhIG5ld2xpbmUgKGUuZy4gZnJvbSBhIGRlZmluZS9lbmRkZWYgYmxvY2spLgoJKiB2bXNpZnkuYyAodm1zaWZ5KTogUmV0dXJuIHJlbGF0aXZlIHBhdGhuYW1lcyB3aGVyZXZlciBwb3NzaWJsZS4KCSogdm1zaWZ5LmMgKHZtc2lmeSk6IEFuIGlucHV0IHN0cmluZyBsaWtlICIuLi8uLiIgcmV0dXJucyAiWy0tXSIuCgpXZWQgT2N0ICAxIDE1OjQ1OjA5IDE5OTcgIFJvYiBUdWxsb2ggPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIE5NYWtlZmlsZTogQ2hhbmdlZCBubWFrZSB0byAkKE1BS0UpLgoJKiBzdWJwcm9jLmJhdDogVGFrZSB0aGUgbWFrZSBjb21tYW5kIG5hbWUgZnJvbSB0aGUgY29tbWFuZAoJbGluZS4gSWYgbm8gY29tbWFuZCBuYW1lIHdhcyBnaXZlbiwgZGVmYXVsdCB0byBubWFrZS4KCSogam9iLmMgW01TRE9TLCBXSU5ET1dTMzJdOiBGaXggbWVtb3J5IHN0b21wOiB0ZW1wb3JhcnkgZmlsZSBuYW1lcwoJYXJlIG5vdyBhbHdheXMgY3JlYXRlZCBpbiBoZWFwIG1lbW9yeS4KCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogTmV3IGltcGxlbWVudGF0aW9uIG9mIG1ha2VfY29tbWFuZF9saW5lKCkKCXdoaWNoIGlzIG1vcmUgY29tcGF0aWJsZSB3aXRoIGRpZmZlcmVudCBCb3VybmUgc2hlbGwgaW1wbGVtZW50YXRpb25zLgoJRGVsZXRlZCB0aGUgbm93IG9ic29sZXRlIGZpeF9jb21tYW5kX2xpbmUoKSBmdW5jdGlvbi4KCSogbWFpbi5jIFtXSU5ET1dTMzJdOiBBbnkgYXJiaXRyYXJ5IHNwZWxsaW5nIG9mIFBhdGggY2FuIGJlCglkZXRlY3RlZC4gTWFrZSB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVjaWFsIHNwZWxsaW5nIGBQYXRoJyBpcwoJaW5zZXJ0ZWQgaW50byB0aGUgZW52aXJvbm1lbnQgd2hlbiB0aGUgcGF0aCB2YXJpYWJsZSBpcyBwcm9wYWdhdGVkCgl3aXRoaW4gaXRzZWxmIGFuZCB0byBtYWtlJ3MgY2hpbGRyZW4uCgkqIG1haW4uYyBbV0lORE9XUzMyXTogRGV0ZWN0aW9uIG9mIHNoLmV4ZSB3YXMgb2NjdXJyaW5nIHRvbwoJc29vbi4gVGhlIDJuZCBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBzaC5leGUgbXVzdCBjb21lIGFmdGVyCgl0aGUgY2FsbCB0byByZWFkX2FsbF9tYWtlZmlsZXMoKS4KCkZyaSBTZXAgMjYgMDE6MTQ6MTggMTk5NyAgPHppbnNlckBheHA2MDIuZ3NpLmRlPgoKCSogbWFrZWZpbGUuY29tIFtWTVNdOiBGaXhlZCBkZWZpbml0aW9uIG9mIHN5cy4KCSogcmVhZG1lLnZtczogQ29tbWVudHMgb24gd2hhdCdzIGNoYW5nZWQgbGF0ZWx5LgoKRnJpIFNlcCAyNiAwMToxNDoxOCAxOTk3ICBKb2huIFcuIEVhdG9uIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IEFsbG93IG1ha2UgdG8gZmluZCBmaWxlcyBuYW1lZAoJIk1BS0VGSUxFIiB3aXRoIG5vIGV4dGVuc2lvbiBvbiBWTVMuCgkqIGZpbGUuYyAobG9va3VwX2ZpbGUpOiBMb3dlcmNhc2UgZmlsZW5hbWVzIG9uIFZNUy4KCjE5OTctMDktMjkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmV3b3JrZWQgdGFyZ2V0IGRldGVjdGlvbiBhZ2FpbjsgdGhlIG9sZAoJdmVyc2lvbiBoYWQgYW4gb2JzY3VyZSBxdWlyay4KCkZyaSBTZXAgMTkgMDk6MjA6NDkgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzYuMSByZWxlYXNlZC4KCgkqIE1ha2VmaWxlLmFtOiBBZGQgbG9hZGF2ZyBmaWxlcyB0byBjbGVhbiBydWxlcy4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogUmVtb3ZlIHN0YW1wLWNvbmZpZzsgbm8gbG9uZ2VyIG5lZWRlZC4KCSogTWFrZWZpbGUuYW1pIChkaXN0Y2xlYW4pOiBEaXR0by4KCSogU01ha2VmaWxlIChkaXN0Y2xlYW4pOiBEaXR0by4KCgkqIG1haW4uYyAobWFpbik6IEFyZyBjb3VudCBzaG91bGQgYmUgaW50LCBub3QgY2hhciEgIE1ham9yIGJyYWluby4KClR1ZSBTZXAgMTYgMTA6MTg6MjIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzYgcmVsZWFzZWQuCgpUdWUgU2VwICAyIDEwOjA3OjM5IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogV2hlbiBwcm9jZXNzaW5nICQoc2hlbGwuLi4pCiAgCXRyYW5zbGF0ZSBhIENSTEYgKFxyXG4pIHNlcXVlbmNlIGFzIHdlbGwgYXMgYSBuZXdsaW5lIChcbikgdG8gYQogCXNwYWNlLiAgQWxzbyByZW1vdmUgYW4gZW5kaW5nIFxyXG4gc2VxdWVuY2UuCgkqIG1ha2UudGV4aW5mbyAoU2hlbGwgRnVuY3Rpb24pOiBEb2N1bWVudCBpdC4KCkZyaSBBdWcgMjkgMTI6NTk6MDYgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIHczMi9wYXRoc3R1ZmYuYyAoY29udmVydF9QYXRoX3RvX3dpbmRvd3MzMik6IEZpeCBwcm9ibGVtIHdoZXJlCiAJcGF0aHMgd2hpY2ggY29udGFpbiBzaW5nbGUgY2hhcmFjdGVyIGVudHJpZXMgbGlrZSBgLicgYXJlIG5vdAogCWhhbmRsZWQgY29ycmVjdGx5LgoKCSogUkVBRE1FLlczMjogRG9jdW1lbnQgcGF0aCBoYW5kbGluZyBpc3N1ZXMgb24gV2luZG93cyBzeXN0ZW1zLgoKRnJpIEF1ZyAyOSAwMjowMToyNyAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS45My4KClRodSBBdWcgMjggMTk6Mzk6MDYgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIGpvYi5jIChleGVjX2NvbW1hbmQpIFtXSU5ET1dTMzJdOiBJZiBleGVjX2NvbW1hbmQoKSBpcyBpbnZva2VkCiAJZnJvbSBtYWluKCkgdG8gcmUtZXhlYyBtYWtlLCB0aGUgY2FsbCB0byBleGVjdnAoKSB3b3VsZAogCWluY29ycmVjdGx5IHJldHVybiBjb250cm9sIHRvIHBhcmVudCBzaGVsbCBiZWZvcmUgdGhlIGV4ZWMnZWQKIAljb21tYW5kIGNvdWxkIHJ1biB0byBjb21wbGV0aW9uLiBJIGJlbGlldmUgdGhpcyBpcyBhIGZlYXR1cmUgb2YKIAl0aGUgd2F5IHRoYXQgZXhlY3ZwKCkgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mIFdJTkRPV1MzMiBBUElzLiBUbwogCWFsbGV2aWF0ZSB0aGUgcHJvYmxlbSwgdXNlIHRoZSBzdXBwbGllZCBwcm9jZXNzIGxhdW5jaCBmdW5jdGlvbiBpbgogCXRoZSBzdWJfcHJvYyBsaWJyYXJ5IGFuZCBzdXNwZW5kIHRoZSBwYXJlbnQgcHJvY2VzcyB1bnRpbCB0aGUKIAljaGlsZCBwcm9jZXNzIGhhcyBydW4uICBXaGVuIHRoZSBjaGlsZCBleGl0cywgZXhpdCB0aGUgcGFyZW50IG1ha2UKIAl3aXRoIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNoaWxkIG1ha2UuCgpUaHUgQXVnIDI4IDE3OjA0OjQ3IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlIChkaXN0ZGlyKTogRml4IGEgbGluZSB0aGF0IGdvdCB3cmFwcGVkIGluCgllbWFpbC4KCgkqIE1ha2VmaWxlLmFtIChsb2FkYXZnKTogR2l2ZSB0aGUgbmVjZXNzYXJ5IGNtZGxpbmUgb3B0aW9ucyB3aGVuCglsaW5raW5nIGxvYWRhdmcuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBwc3RhdF9nZXRkeW5hbWljIGZvciBnZXRsb2Fkdmcgb24gSFAuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpIFtWTVMsIF9BTUlHQV06IERvbid0IHBlcmZvcm0gZW1wdHkKCWNvbW1hbmQgb3B0aW1pemF0aW9uIG9uIHRoZXNlIHN5c3RlbXM7IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZS4KCldlZCBBdWcgMjcgMTc6MDk6MzIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzUuOTIKClR1ZSBBdWcgMjYgMTE6NTk6MTUgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgJzk3IHRvIGNvcHlyaWdodCB5ZWFycy4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogQ2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgYmVmb3JlIGxvb2tpbmcKCWF0IGEgcGFydGljdWxhciBvZmZzZXQuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEV4YW1pbmUgdGhlIGxhc3QgYnl0ZQoJb2YgdGhlIHByZXZpb3VzIGFyZywgbm90IHRoZSBieXRlIGFmdGVyIHRoYXQuCgpTYXQgQXVnIDIzIDE5OTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBNYWtlZmlsZS5ET1MudGVtcGxhdGU6IE5ldyBmaWxlIChjb252ZXJ0ZWQgdG8gTWFrZWZpbGUuRE9TIGluCgl0aGUgZGlzdHJpYnV0aW9uKS4KCgkqIGNvbmZpZ3VyZS5iYXQ6IFJld3JpdGUgdG8gdXNlIE1ha2VmaWxlLkRPUyBpbnN0ZWFkIG9mIGVkaXRpbmcKICAgICAgICBNYWtlZmlsZS5pbi4gIEFkZCBzdXBwb3J0IGZvciBidWlsZGluZyBmcm9tIG91dHNpZGUgb2YgdGhlIHNvdXJjZQogICAgICAgIGRpcmVjdG9yeS4gIEZhaWwgaWYgdGhlIGVudmlyb25tZW50IGJsb2NrIGlzIHRvbyBzbWFsbC4KCgkqIGNvbmZpZ2guZG9zOiBVc2UgPHN5cy9jb25maWcuaD4uCgoJKiBSRUFETUUuRE9TOiBVcGRhdGUgaW5zdHJ1Y3Rpb25zLgoKRnJpIEF1ZyAyMiAxOTk3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKSBbX19NU0RPU19fXTogRG9uJ3QgdGVzdCBmb3IgIi9iaW4vc2giCiAgICAgICAgbGl0ZXJhbGx5LCB1c2UgdmFsdWUgb2YgdW5peHlfc2hlbGwgaW5zdGVhZC4KCgkqIGZpbGVkZWYuaCAoTkVXX01USU1FKTogVXNlIDEgbGVzcyB0aGFuIG1heGltdW0gcG9zc2libGUgdmFsdWUgaWYKICAgICAgICB0aW1lX3QgaXMgdW5zaWduZWQuCgpTYXQgQXVnIDE2IDAwOjU2OjE1IDE5OTcgIEpvaG4gVy4gRWF0b24gIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiB2bXNpZnkuYyAodm1zaWZ5LCBjYXNlIDExKTogQWZ0ZXIgdHJhbnNsYXRpbmcgYC4uJyBlbGVtZW50cywgc2V0CiAgICAgICAgbnN0YXRlIHRvIE5fT1BFTiBpZiB0aGVyZSBhcmUgc3RpbGwgbW9yZSBlbGVtZW50cyB0byBwcm9jZXNzLgogICAgICAgICh2bXNpZnksIGNhc2UgMik6IEFmdGVyIHRyYW5zbGF0aW5nIGBmb28vYmFyJyB1cCB0byB0aGUgc2xhc2gsCiAgICAgICAgc2V0IG5zdGF0ZSB0byBOX09QRU4sIG5vdCBOX0RPVC4KCkZyaSBBdWcgIDggMTU6MTg6MDkgMTk5NyAgSm9obiBXLiBFYXRvbiAgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIGRpci5jICh2bXNzdGF0X2Rpcik6IExlYXZlIG5hbWUgdW5tb2RpZmllZCBvbiBleGl0LgoJKiBtYWtlLmggKFBBVEhfU0VQQVJBVE9SX0NIQVIpOiBTZXQgdG8gY29tbWEgZm9yIFZNUy4KCSogdnBhdGguYzogRml4IGNvbW1lbnRzIHRvIHJlZmVyIHRvIHBhdGggc2VwYXJhdG9yLCBub3QgY29sb24uCiAgICAgICAgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBBdm9pZCBVbml4eSBzbGFzaCBoYW5kbGluZyBmb3IgVk1TLgoKVGh1IEF1ZyAgNyAyMjoyNDowMyAxOTk3ICBKb2huIFcuIEVhdG9uICA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKCSogYXIuYyBbVk1TXTogRG9uJ3QgZGVjbGFyZSBhcl9tZW1iZXJfdG91Y2guCglEZWxldGUgVk1TIHZlcnNpb24gb2YgYXJfbWVtYmVyX2RhdGUuCglFbmFibGUgbm9uLVZNUyB2ZXJzaW9ucyBvZiBhcl9tZW1iZXJfZGF0ZSBhbmQgYXJfbWVtYmVyX2RhdGVfMSBmb3IKCVZNUyB0b28uCgkqIGFyc2Nhbi5jIChWTVNfZ2V0X21lbWJlcl9pbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGFyX3NjYW4pOiBQcm92aWRlIHZlcnNpb24gZm9yIFZNUyBzeXN0ZW1zLgoJKGFyX25hbWVfZXF1YWwpOiBTaW1wbHkgY29tcGFyZSBuYW1lIGFuZCBtZW0gb24gVk1TIHN5c3RlbXMuCglEb24ndCBkZWZpbmUgYXJfbWVtYmVyX3BvcyBvciBhcl9tZW1iZXJfdG91Y2ggb24gVk1TIHN5c3RlbXMuCgoJKiBjb25maWcuaC12bXMgKHBpZF90LCB1aWRfdCk6IERvbid0IGRlZmluZS4KCgkqIHJlbWFrZS5jOiBEZWxldGUgZGVjbGFyYXRpb24gb2Ygdm1zX3N0YXQuCgkobmFtZV9tdGltZSk6IERvbid0IGNhbGwgdm1zX3N0YXQuCgkoZl9tdGltZSkgW1ZNU106IEZ1bmt5IHRpbWUgdmFsdWUgbWFuaXB1bGF0aW9uIG5vIGxvbmdlciBuZWNlc3NhcnkuCgoJKiBmaWxlLmMgKHByaW50X2ZpbGUpOiBbVk1TXSBVc2UgY3RpbWUsIG5vdCBjdnRfdGltZS4KCgkqIG1ha2UuaCBbVk1TXTogRG9uJ3QgZGVmaW5lIFBPU0lYLgoKCSogbWFrZWZpbGUuY29tIChmaWxlbGlzdCk6IEluY2x1ZGUgYXIgYW5kIGFyc2Nhbi4KCUFsc28gaW5jbHVkZSB0aGVtIGluIHRoZSBsaW5rIGNvbW1hbmRzLgoJRG9uJ3QgZGVmaW5lIE5PX0FSQ0hJVkVTIGluIGNjIGNvbW1hbmQuCgoJKiBtYWtlZmlsZS52bXMgKEFSQ0hJVkVTLCBBUkNISVZFU19TUkMpOiBVbmNvbW1lbnQuCgkoZGVmaW5lcyk6IERlbGV0ZSBOT19BUkNISVZFUyBmcm9tIGxpc3QuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IE9ubHkgY2hlY2sgdG8gc2VlIGlmIGludGVybWVkaWF0ZSBmaWxlIGlzCglvdXQgb2YgZGF0ZSBpZiBpdCBhbHNvIGV4aXN0cyAoaS5lLiwgbXRpbWUgIT0gKHRpbWVfdCkgLTEpLgoKCSogdm1zZGlyLmggKHVfbG9uZywgdV9zaG9ydCk6IFNraXAgdHlwZWRlZnMgaWYgdXNpbmcgREVDIEMuCgpGcmkgSnVuIDIwIDIzOjAyOjA3IDE5OTcgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBHZXQgVzMyIHN1Yl9wcm9jIHRvIGhhbmRsZSBzaGViYW5nCgkoIyEvYmluL3NoKSBpbiBzY3JpcHQgZmlsZXMgY29ycmVjdGx5LgoJRml4ZWQgYSBjb3VwbGUgb2YgbWVtb3J5IGxlYWtzLgoJRml4ZWQgc2VhcmNoIG9yZGVyIGluIGZpbmRfZmlsZSgpICh3MzIvc3VicHJvYy9zdWJfcHJvYy5jKSBzbyB0aGF0CglmaWxlcyB3aXRoIGV4dGVuc2lvbnMgYXJlIHByZWZlcnJlZCBvdmVyIGZpbGVzIHdpdGhvdXQgZXh0ZW5zaW9ucy4KCUFkZGVkIHNlYXJjaCBmb3IgZmlsZXMgd2l0aCAuY21kIGV4dGVuc2lvbiB0b28uCgkqIHczMi9zdWJwcm9jL21pc2MuYyAoYXJyMmVudmJsayk6IEZpeGVkIG1lbW9yeSBsZWFrLgoKTW9uIEF1ZyAxOCAwOTo0MTowOCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS45MQoKRnJpIEF1ZyAxNSAxMzo1MDo1NCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogUmVtZW1iZXIgdG8gY291bnQgdGhlIG5ld2xpbmUgYWZ0ZXIgdGhlIGVuZGVmLgoKVGh1IEF1ZyAxNCAyMzoxNDozNyAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1hbnk6IFJld3JvdGUgYnVpbGRzIHRvIHVzZSBBdXRvbWFrZSAxLjIuCgoJKiBBVVRIT1JTOiBOZXcgZmlsZS4KCSogbWFpbnRNYWtlZmlsZTogQ29udGFpbnMgbWFpbnRhaW5lci1vbmx5IG1ha2Ugc25pcHBldHMuCgkqIEdOVW1ha2VmaWxlOiBUaGlzIG5vdyBvbmx5IHJ1bnMgdGhlIGluaXRpYWwgYXV0byogdG9vbHMuCgkqIENPUFlJTkcsdGV4aW5mby50ZXgsbWtpbnN0YWxsZGlycyxpbnN0YWxsLXNoOiBSZW1vdmVkIChvYnRhaW5lZAoJYXV0b21hdGljYWxseSBieSBhdXRvbWFrZSkuCgkqIGNvbXBhdE1ha2VmaWxlOiBSZW1vdmVkIChub3QgbmVlZGVkIGFueW1vcmUpLgoJKiBSRUFETUUsYnVpbGQuc2guaW46IFJlbW92ZWQgKGJ1aWx0IGZyb20gdGVtcGxhdGVzKS4KCSogY29uZmlnLmguaW4sTWFrZWZpbGUuaW46IFJlbW92ZWQgKGJ1aWx0IGJ5IHRvb2xzKS4KCldlZCBBdWcgMTMgMDI6MjI6MDggMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWtlLnRleGluZm86IFVwZGF0ZXMgZm9yIERPUy9XaW5kb3dzIGluZm9ybWF0aW9uIChFbGkgWmFyZXRza2lpKQoJKiBSRUFETUUsUkVBRE1FLkRPUzogRGl0dG8uCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSxmX210aW1lKTogRml4IEdQQVRIIGhhbmRsaW5nLgoJKiB2cGF0aC5jIChncGF0aF9zZWFyY2gpOiBEaXR0by4KCgkqIGZpbGUuYyAocmVuYW1lX2ZpbGUpOiBOZXcgZnVuY3Rpb246IHJlaGFzaCwgYnV0IGFsc28gcmVuYW1lIHRvCgl0aGUgaGFzaG5hbWUuCgkqIGZpbGVkZWYuaDogRGVjbGFyZSBpdC4KCgkqIHZhcmlhYmxlLmMgKG1lcmdlX3ZhcmlhYmxlX3NldF9saXN0cyk6IFJlbW92ZSBmcmVlKCkgb2YgdmFyaWFibGUKCXNldDsgc2luY2UgdmFyaW91cyBmaWxlcyBjYW4gc2hhcmUgdmFyaWFibGUgc2V0cyB3ZSBkb24ndCB3YW50IHRvCglmcmVlIHRoZW0gaGVyZS4KClR1ZSBBdWcgMTIgMTA6NTE6NTQgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBjb25maWd1cmUuaW46IFJlcXVpcmUgYXV0b2NvbmYgMi4xMgoKCSogbWFrZS50ZXhpbmZvOiBSZXBsYWNlIGFsbCAiY2Qgc3ViZGlyOyAkKE1BS0UpIiBleGFtcGxlcyB3aXRoIGEKCW1vcmUgc3R5bGlzdGljYWxseSBjb3JyZWN0ICJjZCBzdWJkaXIgJiYgJChNQUtFKSIuCgoJKiBtYWluLmM6IEdsb2JhbCB2YXJpYWJsZSBgY2xvY2tfc2tld19kZXRlY3RlZCcgZGVmaW5lZC4KCShtYWluKTogUHJpbnQgZmluYWwgd2FybmluZyBpZiBpdCdzIHNldC4KCSogbWFrZS5oOiBEZWNsYXJlIGl0LgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IFRlc3QgYW5kIHNldCBpdC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEFkZCBzcGVjaWFsIG9wdGltaXphdGlvbnMgZm9yCiAJImRvLW5vdGhpbmciIHJ1bGVzLCBjb250YWluaW5nIGp1c3QgdGhlIHNoZWxsIG5vLW9wICI6Ii4gIFRoaXMgaXMKIAl1c2VmdWwgZm9yIHRpbWVzdGFtcCBmaWxlcyBhbmQgY2FuIG1ha2UgYSByZWFsIGRpZmZlcmVuY2UgaWYgeW91CiAJaGF2ZSBhIGxvdCBvZiB0aGVtIChyZXF1ZXN0ZWQgYnkgRmVyZ3VzIEhlbmRlcnNvbiA8ZmpoQGNzLm11Lm96LmF1PikuCgoJKiBjb25maWd1cmUuaW4sTWFrZWZpbGUuaW46IFJld3JvdGUgdG8gdXNlIHRoZSBuZXcgYXV0b2NvbmYKCXByb2dyYW1fdHJhbnNmb3JtX25hbWUgbWFjcm8uCgoJKiBmdW5jdGlvbi5jIChmdW5jdGlvbl9zdHJpcCk6IFN0cmlwIG5ld2xpbmVzIGFzIHdlbGwgYXMgc3BhY2VzCglhbmQgVEFCcy4KCkZyaSBKdW4gIDYgMjM6NDE6MDQgMTk5NyAgUm9iIFR1bGxvaCA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBEYXRlc3RhbXBzIG9uIEZBVC1iYXNlZCBmaWxlcyBhcmUgcm91bmRlZCB0bwoJZXZlbiBzZWNvbmRzIHdoZW4gc3RvcmVkLCBzbyBpZiB0aGUgZGF0ZSBjaGVjayBmYWlscyBvbiBXSU5ET1dTMzIKCSBzeXN0ZW1zLCBzZWUgaWYgdGhpcyAib2ZmLWJ5LW9uZSIgZXJyb3IgaXMgdGhlIHByb2JsZW0uCgoJKiBHZW5lcmFsOiBJZiB5b3VyIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQgY29ycmVjdGx5Cgl0aGVuIGFsbCB5b3VyIHRpbWVzdGFtcHMgd2lsbCBiZSBvZmYgYnkgaG91cnMuICBTbywgc2V0IGl0IQoKTW9uIEFwciAgNyAwMjowNjoyMiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS4xCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IERlZmluZSAmIHVzZSB0aGUgJChHTE9CKSB2YXJpYWJsZSBzbwoJdGhhdCBpdCdzIHJlbW92ZWQgY29ycmVjdGx5IGZyb20gYnVpbGQuc2guaW4gd2hlbiBpdCdzIGJ1aWx0LgoKCSogY29uZmlndXJlLmluOiBPbiBTb2xhcmlzIHdlIGNhbiB1c2UgdGhlIGtzdGF0XyooKSBmdW5jdGlvbnMgdG8KCWdldCBsb2FkIGF2ZXJhZ2VzIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIHBlcm1pc3Npb25zLiAgQWRkIGEKCWNoZWNrIGZvciAtbGtzdGF0IHRvIHNlZSBpZiB3ZSBoYXZlIGl0LgoKCSogZ2V0bG9hZGF2Zy5jIChnZXRsb2FkYXZnKTogVXNlIEhBVkVfTElCS1NUQVQgaW5zdGVhZCBvZiBTVU41IGFzCgl0aGUgdGVzdCB0byBlbmFibGUga3N0YXRfb3BlbigpLCBldGMuIHByb2Nlc3NpbmcuCgpGcmkgQXByICA0IDIwOjIxOjE4IDE5OTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiA8bG90cz46IEZpeGVzIHRvIHdvcmsgaW4gdGhlIERKR1BQIERPUyBlbnZpcm9ubWVudC4KCk1vbiBNYXIgMzEgMDI6NDI6NTIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBBZGRlZCBuZXcgZnVuY3Rpb24gJCh3b3JkbGlzdCkuCgoJKiBtYWtlLnRleGluZm8gKEZpbGVuYW1lIEZ1bmN0aW9ucyk6IERvY3VtZW50ICQod29yZGxpc3QpIGZ1bmN0aW9uLgoKCSogdnBhdGguYyAoYnVpbGRfdnBhdGhfbGlzdHMpOiBDb25zdHJ1Y3QgdGhlIEdQQVRIIHZhcmlhYmxlCglpbmZvcm1hdGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIgd2UgdXNlZCB0byBjb25zdHJ1Y3QgVlBBVEguCgkoZ3BhdGhfc2VhcmNoKTogTmV3IGZ1bmN0aW9uIHRvIHNlYXJjaCBHUEFUSC4KCgkqIG1ha2UuaDogRGVjbGFyZSB0aGUgbmV3IGZ1bmN0aW9uLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBDYWxsIGl0LCBhbmQga2VlcCBWUEFUSCBpZiBpdCdzIGZvdW5kLgoKCSogbWFrZS50ZXhpbmZvIChTZWFyY2ggQWxnb3JpdGhtKTogRG9jdW1lbnQgR1BBVEggdmFyaWFibGUuCgpTdW4gTWFyIDMwIDIwOjU3OjE2IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFpbi5jIChoYW5kbGVfbm9uX3N3aXRjaF9hcmd1bWVudCk6IERlZmluZWQgdGhlIE1BS0VDTURHT0FMUwoJdmFyaWFibGUgdG8gY29udGFpbiB0aGUgdXNlciBvcHRpb25zIHBhc3NlZCBpbiBvbiB0aGUgY21kIGxpbmUuCgoJKiBtYWtlLnRleGluZm8gKEdvYWxzKTogRG9jdW1lbnQgTUFLRUNNREdPQUxTIHZhcmlhYmxlLgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBQcmludCBhIHdhcm5pbmcgaWYgd2UgZGV0ZWN0IGEgY2xvY2sgc2tldwoJZXJyb3IsIHJhdGhlciB0aGFuIGZhaWxpbmcuCgoJKiBtYWluLmMgKG1haW4pOiBJZiB3ZSByZWJ1aWxkIGFueSBtYWtlZmlsZXMgYW5kIG5lZWQgdG8gcmUtZXhlYywKCWFkZCAiLW88bWtmaWxlPiIgb3B0aW9ucyBmb3IgZWFjaCBtYWtlZmlsZSByZWJ1aWx0IHRvIGF2b2lkCglpbmZpbml0ZSBsb29waW5nLgoKRnJpIE1hciAyOCAxNToyNjowNSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVHJhY2sgd2hldGhlciB0aGUgbGFzdAoJYXJnIGluIHRoZSBjbWQgc3RyaW5nIHdhcyBlbXB0eSBvciBub3QgKFJvbGFuZCkuCgkoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IElmIHRoZSBzaGVsbCBsaW5lIGlzIGVtcHR5LAoJZG9uJ3QgZG8gYW55dGhpbmcgKFJvbGFuZCkuCgoJKiBnbG9iL2dsb2IuaCxnbG9iL2dsb2IuYyxnbG9iL2ZubWF0Y2guYyxnbG9iL2ZubWF0Y2guaDogSW5zdGFsbAoJdGhlIGxhdGVzdCBjaGFuZ2VzIGZyb20gdGhlIEdMSUJDIHZlcnNpb24gb2YgZ2xvYiAoVWxyaWNoIERyZXBwZXIpLgoKCSogZ2V0bG9hZGF2Zy5jLG1ha2Utc3Rkcy50ZXhpOiBOZXcgdmVyc2lvbiAoUm9sYW5kKS4KCgkqIChBTEwpOiBDaGFuZ2VkIFdJTjMyIHRvIFczMiBvciBXSU5ET1dTMzIgKFJNUykuCgpNb24gTWFyIDI0IDE1OjMzOjM0IDE5OTcgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiBSRUFETUUuVzMyOiBEZXNjcmliZSBwcmVsaW1pbmFyeSBGQVQgc3VwcG9ydC4KCgkqIGJ1aWxkX3czMi5iYXQ6IFVzZSBhIHZhcmlhYmxlIGZvciB0aGUgZmluYWwgZXhlIG5hbWUuCgoJKiBkaXIuYyAoZmluZF9kaXJlY3RvcnkpOiBXMzI6IEZpbmQgdGhlIGZpbGVzeXN0ZW0gdHlwZS4KCShkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcCk6IFczMjogZm9yIEZBVCBmaWxlc3lzdGVtcywgYWx3YXlzCglyZWhhc2ggc2luY2UgRkFUIGRvZXNuJ3QgY2hhbmdlIGRpcmVjdG9yeSBtdGltZSBvbiBjaGFuZ2UuCgoJKiBtYWluLmMgKGhhbmRsZV9ydW50aW1lX2V4Y2VwdGlvbnMpOiBXMzI6IEFkZCBhbgogCVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlciBzbyB0aGF0IHdoZW4gbWFrZSBib21icyBkdWUgdG8gXkMgb3IgYQogCWJ1ZywgaXQgd29uJ3QgY2F1c2UgYSBHVUkgcmVxdWVzdG9yIHRvIHBvcCB1cCB1bmxlc3MgZGVidWcgaXMKIAl0dXJuZWQgb24uCgkobWFpbik6IENhbGwgaXQuCgpNb24gTWFyIDI0IDAwOjU3OjM0IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogY29uZmlndXJlLmluLCBjb25maWcuaC5pbiwgY29uZmlnLmFtaSwgY29uZmlnLmgtdm1zLCBjb25maWcuaC53MzI6CiAJQ2hlY2sgZm9yIG1lbW1vdmUoKSBmdW5jdGlvbi4KCgkqIG1ha2UuaCAoYmNvcHkpOiBJZiBtZW1tb3ZlKCkgYXZhaWxhYmxlLCBkZWZpbmUgYmNvcHkoKSB0byB1c2UgaXQuCglPdGhlcndpc2UganVzdCB1c2UgYmNvcHkoKS4gIERvbid0IHVzZSBtZW1jcHkoKTsgaXQncyBub3QgZ3VhcmFudGVlZAoJdG8gaGFuZGxlIG92ZXJsYXBwaW5nIG1vdmVzLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRml4IHNvbWUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMKCShyZXBvcnRlZCBieSBQdXJpZnkpLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBVc2UgYmNvcHkoKSBub3QKCXN0cmNweSgpOyBzdHJjcHkoKSBpc24ndCBndWFyYW50ZWVkIHRvIGhhbmRsZSBvdmVybGFwcGluZyBtb3Zlcy4KCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgaW5zdGFsbC1pbmZvIG9wdGlvbiBgYC0taW5mb2RpcicnIHRvCglgYC0taW5mby1kaXInJyBmb3IgdXNlIHdpdGggbmV3IHRleGluZm8uCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiAkKGJhc2VuYW1lKSBhbmQgJChzdWZmaXgpIHNob3VsZAoJb25seSBzZWFyY2ggZm9yIHN1ZmZpeGVzIGFzIGZhciBiYWNrIGFzIHRoZSBsYXN0IGRpcmVjdG9yeSAoZS5nLiwKCW9ubHkgdGhlIGZpbmFsIGZpbGVuYW1lIGluIHRoZSBwYXRoKS4KClN1biBNYXIgMjMgMDA6MTM6MDUgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWtlLnRleGluZm86IEFkZCBAZGlyY2F0ZWdvcnkvQGRpcmVudHJ5IGluZm9ybWF0aW9uLgoJKFRvcCk6IFJlbW92ZSBwcmV2aW91cyByZWZlcmVuY2UgdG8gKGRpcikgKGZyb20gUk1TKS4KCShTdGF0aWMgVXNhZ2UpOiBBZGQgImFsbDoiIHJ1bGUgdG8gZXhhbXBsZS4KCShBdXRvbWF0aWMgRGVwZW5kZW5jaWVzKTogZml4IC5kIGZpbGUgY3JlYXRpb24gZXhhbXBsZS4KCgkqIEluc3RhbGwgVlBBVEgrIHBhdGNoOgoKCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IEFkZCBpbiBobmFtZSBmaWVsZCB0byBzdG9yZSB0aGUgaGFzaGVkCiAgICAgICAgZmlsZW5hbWUsIGFuZCBhIGZsYWcgdG8gcmVtZW1iZXIgaWYgd2UncmUgdXNpbmcgdGhlIHZwYXRoIGZpbGVuYW1lCglvciBub3QuICBSZW5hbWVkIGEgZmV3IGZ1bmN0aW9ucyBmb3IgbW9yZSBjbGFyaXR5LgoKCSogZmlsZS5jIChsb29rdXBfZmlsZSxlbnRlcl9maWxlLGZpbGVfaGFzaF9lbnRlcik6IFN0b3JlIGZpbGVuYW1lcwoJaW4gdGhlIGhhc2ggdGFibGUgYmFzZWQgb24gdGhlaXIgImhhc2ggbmFtZSIuICBXZSBjYW4gY2hhbmdlIHRoaXMKCXdoaWxlIGtlZXBpbmcgdGhlIG9yaWdpbmFsIHRhcmdldCBpbiAibmFtZSIuCgkocmVoYXNoX2ZpbGUpOiBSZW5hbWVkIGZyb20gInJlbmFtZV9maWxlIiB0byBiZSBtb3JlIGFjY3VyYXRlLgoJQ2hhbmdlcyB0aGUgaGFzaCBuYW1lLCBidXQgbm90IHRoZSB0YXJnZXQgbmFtZS4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogTW9kaWZ5IC1kIG91dHB1dCBmb3IgbW9yZSBkZXRhaWxlZAogCVZQQVRIIGluZm8uICBJZiB3ZSBkb24ndCBuZWVkIHRvIHJlYnVpbGQsIHVzZSB0aGUgVlBBVEggbmFtZS4KCShmX210aW1lKTogRG9uJ3Qgc2VhcmNoIGZvciB2cGF0aCBpZiB3ZSdyZSBpZ25vcmluZyBpdC4gIENhbGwKIAlyZW5hbWVkIGZ1bmN0aW9uIHJlaGFzaF9maWxlLiAgQ2FsbCBuYW1lX210aW1lIGluc3RlYWQgb2YKIAlmaWxlX210aW1lLCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gc2luY2UgdGhlIGZpbGUgd2Fzbid0CiAJYWN0dWFsbHkgcmVuYW1lZC4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogaWYgd2UgZmluZCBhbiBpbXBsaWNpdCBmaWxlIGluCglWUEFUSCwgc2F2ZSB0aGUgb3JpZ2luYWwgbmFtZSBub3QgdGhlIFZQQVRIIG5hbWUuCgoJKiBtYWtlLnRleGluZm8gKERpcmVjdG9yeSBTZWFyY2gpOiBBZGQgYSBzZWN0aW9uIG9uIHRoZSBuZXcgVlBBVEgKCWZ1bmN0aW9uYWxpdHkuCgpTdW4gRGVjICAxIDE4OjM2OjA0IDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogZGlyLmMgKGZpbGVfZXhpc3RzX3AsIGZpbGVfaW1wb3NzaWJsZSwgZmlsZV9pbXBvc3NpYmxlX3ApOiBJZgoJZGlybmFtZSBpcyBlbXB0eSByZXBsYWNlIGl0IGJ5IHRoZSBuYW1lIG9mIHRoZSByb290IGRpcmVjdG9yeS4KCU5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayAoeWV0KSBmb3IgVzMyLCBBbWlnYSwgb3IgVk1TLgoKVHVlIE9jdCAwOCAxMzo1NzowMyAxOTk2ICBSb2IgVHVsbG9oICA8dHVsbG9oQHRpdm9saS5jb20+CgoJKiBtYWluLmMgKG1haW4pOiBXMzIgYnVnIGZpeCBmb3IgUEFUSCB2YXJzLgoKVHVlIFNlcCAxNyAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGZpbGVkZWYuaCAoTkVXX01USU1FKTogRG9uJ3QgYXNzdW1lIHRoYXQgdGltZV90IGlzIGEgc2lnbmVkCiAJMzItYml0IHF1YW50aXR5LgoKCSogbWFrZS5oOiAoQ0hBUl9CSVQsIElOVEVHRVJfVFlQRV9TSUdORUQsIElOVEVHRVJfVFlQRV9NQVhJTVVNLAogCUlOVEVHRVJfVFlQRV9NSU5JTVVNKTogTmV3IG1hY3Jvcy4KClR1ZSBBdWcgMjcgMDE6MDY6MzQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAYmFhbHBlcmF6aW0uZnJvYi5jb20+CgoJKiBWZXJzaW9uIDMuNzUgcmVsZWFzZWQuCgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBQcmludCBvdXQgYnVnLXJlcG9ydGluZyBhZGRyZXNzLgoKTW9uIEF1ZyAyNiAxOTo1NTo0NyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBiYWFscGVyYXppbS5mcm9iLmNvbT4KCgkqIG1haW4uYyAocHJpbnRfZGF0YV9iYXNlKTogRG9uJ3QgZGVjbGFyZSBjdGltZTsgaGVhZGVycyBkbyBpdCBmb3IgdXMKIAlhbHJlYWR5LgoKU3VuIEp1bCAyOCAxNTozNzowOSAxOTk2ICBSb2IgVHVsbG9oICh0dWxsb2hAdGl2b2xpLmNvbSkKCgkqIHczMi9wYXRoc3R1ZmYuYzogVHVybmVkIGNvbnZlcnRfdnBhdGhfdG9fdzMyKCkgaW50byBhCglyZWFsIGZ1bmN0aW9uLiBUaGlzIHdhcyBkb25lIHNvIHRoYXQgVlBBVEggY291bGQgY29udGFpbgoJd2hpdGUgc3BhY2Ugc2VwYXJhdGVkIHBhdGhuYW1lcy4gUGxlYXNlIG5vdGUgdGhhdCBkaXJlY3RvcnkKCXBhdGhzIChpbiBWUEFUSC92cGF0aCBjb250ZXh0KSBjb250YWluaW5nIHdoaXRlIHNwYWNlIGFyZSBub3QKCXN1cHBvcnRlZCAoanVzdCBhcyB0aGV5IGFyZSBub3QgdW5kZXIgVW5peCkuIFNlZSBSRUFETUUuVzMyCglmb3Igc3VnZ2VzdGlvbnMuCgoJKiB3MzIvaW5jbHVkZS9wYXRoc3R1ZmYuaDogQWRkZWQgcHJvdG90eXBlIGZvciB0aGUgbmV3CglmdW5jdGlvbiBjb252ZXJ0X3ZwYXRoX3RvX3czMi4gRGVsZXRlZCBtYWNybyBmb3Igc2FtZS4KCgkqIFJFQURNRS5XMzI6IEFkZGVkIHNvbWUgbm90ZXMgYWJvdXQgd2h5IEkgY2hvc2Ugbm90IHRvIHRyeQoJYW5kIHN1cHBvcnQgcGF0aG5hbWVzIHdoaWNoIGNvbnRhaW4gd2hpdGUgc3BhY2UgYW5kIHNvbWUKCXdvcmthcm91bmQgc3VnZ2VzdGlvbnMuCgpUaHUgSnVsIDI1IDE5OjUzOjMxIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBHTlVtYWtlZmlsZSAobWtkZXAtbm9saWIpOiBVc2UgLU1NIG9wdGlvbiB1bmNvbmRpdGlvbmFsbHkuCgoJKiBWZXJzaW9uIDMuNzQuNy4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IEJhY2sgdXAgUCB0byBwb2ludCBhdCBudWxsIHRlcm1pbmF0b3IKCXdoZW4ga2lsbGluZyBmaW5hbCBzcGFjZSBhbmQgZGFzaCBiZWZvcmUgc2V0dGluZyBNRkxBR1MuCgoJRnJvbSBSb2JlcnQgSG9laG5lIDxyb2JlcnQuaG9laG5lQE1hdGhlbWF0aWsuVFUtQ2hlbW5pdHouREU+OgoJKiBkaXIuYyBbX19NU0RPU19fICYmIERKR1BQID4gMV06IEluY2x1ZGUgPGxpYmMvZG9zaW8uaD4gYW5kIGRlZmluCglgX19vcGVuZGlyX2ZsYWdzJyBpbml0aWFsaXplZCB0byAwLgoJKGRvc2lmeSkgW19fTVNET1NfXyAmJiBESkdQUCA+IDFdOiBSZXR1cm4gbmFtZSB1bmNoYW5nZWQgaWYgX1VTRV9MRk4uCgkoZmluZF9kaXJlY3RvcnkpIFtfX01TRE9TX18gJiYgREpHUFAgPiAxXTogSWYgX1VTRV9MR04sIHNldAoJX19vcGVuZGlyX2ZsYWdzIHRvIF9fT1BFTkRJUl9QUkVTRVJWRV9DQVNFLgoKCSogdm1zZnVuY3Rpb25zLmMgKHZtc19zdGF0KTogYHN5cyRkYXNzZ24gKERldkNoYW4pOycgYWRkZWQgYnkga2thZW1wZi4KCgkqIEdOVW1ha2VmaWxlICh3MzJmaWxlcyk6IEFkZCBOTWFrZWZpbGUuCgoJKiBOTWFrZWZpbGUgKExERkxBR1NfZGVidWcpOiBWYWx1ZSBmaXhlZCBieSB0dWxsb2guCgpTYXQgSnVsIDIwIDEyOjMyOjEwIDE5OTYgIEtsYXVzIEvkbXBmIChra2FlbXBmQHByb2dpcy5kZSkKCgkqIHJlbWFrZS5jIChmX210aW1lKSBbVk1TXTogQWRkIG1pc3NpbmcgYGlmJyBjb25kaXRpb25hbCBmb3IgZnV0dXJlCgltb2R0aW1lIGNoZWNrLgoJKiBjb25maWcuaC12bXMsIG1ha2VmaWxlLnZtcywgcmVhZG1lLnZtcywgdm1zaWZ5LmM6IFVwZGF0ZSBhZGRyZXNzLgoKU2F0IEp1bCAyMCAwNToyOTo0MyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBSZXF1aXJlIGF1dG9jb25mIDIuMTAgb3IgbGF0ZXIuCgpGcmkgSnVsIDE5IDE2OjU3OjI3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuNi4KCgkqIEdOVW1ha2VmaWxlICh3MzJmaWxlcyk6IE5ldyB2YXJpYWJsZS4KCShkaXN0ZmlsZXMpOiBBZGQgaXQuCgkqIHczMjogVXBkYXRlZCBieSBSb2IgVHVsbG9oLgoKCSogbWFrZWZpbGUudm1zIChMT0FETElCRVMpOiBGaXggdHlwby4KClN1biBKdWwgMTQgMTI6NTk6MjcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRml4IHVwICNlbHNlLCAjZW5kaWZzLgoKCSogY29uZmlnaC5kb3M6IERlZmluZSBIQVZFX0RJUkVOVF9IIGluc3RlYWQgb2YgRElSRU5ULgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBEb24ndCBjb21wYXJlIE1USU1FIHRvIE5PVyBpZiBNVElNRSA9PSAtMS4KCgkqIFZlcnNpb24gMy43NC41LgoKCSogbWFpbi5jIChtYWluKTogRXhpdCB3aXRoIHN0YXR1cyAyIHdoZW4gdXBkYXRlX2dvYWxfY2hhaW4gcmV0dXJucyAyLgoKU2F0IEp1biAyMiAxNDo1NjowNSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3IgX3N5c19zaWdsaXN0LgoJKiBtYWtlLmggW0hBVkVfX1NZU19TSUdMSVNUXTogRG9uJ3QgdGVzdCB0aGlzOyBqdXN0IHB1bnQgaWYgdGhlcmUgaXMKCW5vIHN0cnNpZ25hbCBvciBzeXNfc2lnbGlzdC4KCgkqIHJlYWQuYyAoY29uZGl0aW9uYWxfbGluZSk6IFN0cmlwIHdzIGluIGBpZmVxIChhICwgYiknIHNvIGl0IGlzIHRoZQoJc2FtZSBhcyBgaWZlcSAoYSwgYiknLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBjYWxsIGRpZSBpZiBoYW5kbGluZ19mYXRhbF9zaWduYWwuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IEFsbG93IHJlbmFtaW5nIDo6IHRvIDogd2hlbiBsYXR0ZXIgaXMKCW5vbi10YXJnZXQsIG9yIDogdG8gOjogd2hlbiBmb3JtZXIgaXMgbm9uLXRhcmdldC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IENhbGwgYmxvY2tfc2lncy4KCShibG9ja19zaWdzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHN0YXJ0X2pvYl9jb21tYW5kLgoJKHJlYXBfY2hpbGRyZW4pOiBCbG9jayBmYXRhbCBzaWduYWxzIGFyb3VuZCByZW1vdmluZyBkZWFkIGNoaWxkIGZyb20KCWNoYWluIGFuZCBhZGp1c3Rpbmcgam9iX3Nsb3RzX3VzZWQuCgkqIGpvYi5oOiBEZWNsYXJlIGJsb2NrX3NpZ3MuCgoJKiByZW1vdGUtc3R1Yi5jIChyZW1vdGVfc2V0dXAsIHJlbW90ZV9jbGVhbnVwKTogTmV3IChlbXB0eSkgZnVuY3Rpb25zLgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIHJlbW90ZV9zZXR1cC4KCShkaWUpOiBDYWxsIHJlbW90ZV9jbGVhbnVwLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBRdWllc2NlbnQgdmFsdWUgb2Ygc2hlbGxfZnVuY3Rpb25fcGlkIGlzCgl6ZXJvLCBub3QgLTEuCgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgOTYgdG8gY29weXJpZ2h0IHllYXJzLgoKU2F0IEp1biAxNSAyMDozMDowMSAxOTk2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBBdm9pZCBjYWxsaW5nIHN0cmxlbiBvbiBldmVyeSBjYWxsCglqdXN0IHRvIHRocm93IGF3YXkgdGhlIHZhbHVlIG1vc3Qgb2YgdGhlIHRpbWUuCgpTdW4gSnVuICAyIDEyOjI0OjAxIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBQcmVwZW5kICctJyB0byBBUkdWWzFdIGlmIGl0IGNvbnRhaW5zCglubyAnPScsIHJlZ2FyZGxlc3Mgb2YgQVJHQy4KCShkZWZpbmVfbWFrZWZsYWdzKTogRWxpZGUgbGVhZGluZyAnLScgZnJvbSBNQUtFRkxBR1MgdmFsdWUgaWYgZmlyc3QKCXdvcmQgaXMgc2hvcnQgb3B0aW9uLCByZWdhcmRsZXNzIG9mIFdPUkRTLgoKV2VkIE1heSAyMiAxNzoyNDo1MSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogbWFrZWZpbGUudm1zOiBTZXQgTE9BRExJQkVTLgoJKiBtYWtlZmlsZS5jb20gKGxpbmtfdXNpbmdfbGlicmFyeSk6IEZpeCB0eXBvLgoKV2VkIE1heSAxNSAxNzozNzoyNiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogZGlyLmMgKHByaW50X2Rpcl9kYXRhX2Jhc2UpOiBVc2UgJWxkIGRldiBhbmQgaW5vIGFuZCBjYXN0IHRoZW0gdG8KCWxvbmcuCgpXZWQgTWF5IDE1IDEwOjE0OjE0IENEVCAxOTk2ICBSb2IgVHVsbG9oICA8dHVsbG9oQHRpdm9saS5jb20+CgoJKiBkaXIuYzogVzMyIGRvZXMgbm90IHN1cHBvcnQgaW5vZGUuIEZvciBub3csIGZ1bGx5IHF1YWxpZmllZAoJcGF0aG5hbWUgYWxvbmcgd2l0aCBzdF9tdGltZSB3aWxsIGJlIGtleXMgZm9yIGZpbGVzLgoJRml4ZWQgcHJvYmxlbSB3aGVyZSB2cGF0aCBjYW4gYmUgY29uZnVzZWQgd2hlbiBmaWxlcwoJYXJlIGFkZGVkIHRvIGEgZGlyZWN0b3J5IGFmdGVyIHRoZSBkaXJlY3RvcnkgaGFzIGFscmVhZHkgYmVlbgoJcmVhZCBpbi4gVGhlIGNvZGUgbm93IGF0dGVtcHRzIHRvIHJlcmVhZCB0aGUgZGlyZWN0b3J5IGlmIGl0CglkaXNjb3ZlcnMgdGhhdCB0aGUgZGF0ZXN0YW1wIG9uIHRoZSBkaXJlY3RvcnkgaGFzIGNoYW5nZWQgc2luY2UKCWl0IHdhcyBjYWNoZWQgYnkgbWFrZS4gVGhpcyBwcm9ibGVtIG9ubHkgc2VlbXMgdG8gb2NjdXIgb24gVzMyCglyaWdodCBub3cgc28gaXQgaXMgbHVtcGVkIHVuZGVyIHBvcnQgI2lmZGVmIFdJTkRPV1MzMi4KCgkqIGZ1bmN0aW9uLmM6IFczMjogY2FsbCBzdWJwcm9jIGxpYnJhcnkgKENyZWF0ZVByb2Nlc3MoKSkgaW5zdGVhZCBvZgoJZm9yay9leGVjLgoKCSogam9iLmM6IFczMjogQWRkZWQgdGhlIGNvZGUgdG8gZG8gZm9yay9leGVjL3dhaXRwaWQgc3R5bGUgcHJvY2Vzc2luZwoJb24gVzMyIHN5c3RlbXMgdmlhIGNhbGxzIHRvIHN1YnByb2MgbGlicmFyeS4KCgkqIG1haW4uYzogVzMyOiBTZXZlcmFsIHRoaW5ncyBhZGRlZCBoZXJlLiBGaXJzdCwgdGhlcmUgaXMgY29kZQoJZm9yIGRlYWxpbmcgd2l0aCBQQVRIIGFuZCBTSEVMTCBkZWZhdWx0cy4gTWFrZSB0cmllcyB0byBmaWd1cmUKCW91dCBpZiB0aGUgdXNlciBoYXMgJVBBVEglIHNldCBpbiB0aGUgZW52aXJvbm1lbnQgYW5kIHNldHMgaXQgdG8KCSVQYXRoJSBpZiBpdCBpcyBub3Qgc2V0IGFscmVhZHkuIE1ha2UgYWxzbyBsb29rcyB0byBzZWUgaWYgc2guZXhlCglpcyBhbnl3aGVyZSB0byBiZSBmb3VuZC4gQ29kZSBwYXRoIHRocm91Z2ggam9iLmMgd2lsbCBjaGFuZ2UKCWJhc2VkIG9uIGV4aXN0ZW5jZSBvZiBhIHdvcmtpbmcgQm91cm5lIHNoZWxsLiBUaGUgY2hlY2tpbmcgZm9yCglkZWZhdWx0IHNoZWxsIGlzIGRvbmUgdHdpY2U6IG9uY2UgYmVmb3JlIG1ha2VmaWxlcyBhcmUgcmVhZCBpbgoJYW5kIGFnYWluIGFmdGVyLiBGYWxsIGJhY2sgdG8gTVNET1Mgc3R5bGUgZXhlY3V0aW9uIG1vZGUgaWYgbm8gc2guZXhlCglpcyBmb3VuZC4gQWxzbyBhZGRlZCBzb21lIGRlYnVnIHN1cHBvcnQgdGhhdCBhbGxvd3MgdXNlciB0byBwYXVzZSBtYWtlCgl3aXRoIC1EIHN3aXRjaCBhbmQgYXR0YWNoIGEgZGVidWdnZXIuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yCglkZWJ1Z2dpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIG1ha2Ugd2hlcmUgcHJvYmxlbXMgYXBwZWFyIG9ubHkgaW4gdGhlCglzdWItbWFrZS4KCgkqIG1ha2UuaDogVzMyOiBBIGZldyBtYWNyb3MgYW5kIGhlYWRlciBmaWxlcyBmb3IgVzMyIHN1cHBvcnQuCgoJKiBtaXNjLmM6IFczMjogQWRkZWQgYSBmdW5jdGlvbiBlbmRfb2ZfdG9rZW5fdzMyKCkgdG8gYXNzaXN0CglpbiBwYXJzaW5nIGNvZGUgaW4gcmVhZC5jLgoKCSogcmVhZC5jOiBXMzI6IEZpeGVzIHNpbWlsYXIgdG8gTVNET1Mgd2hpY2ggYWxsb3cgY29sb24gdG8KCWFwcGVhciBpbiBmaWxlbmFtZXMuIFVzZSBvZiBjb2xvbiBpbiBmaWxlbmFtZXMgd291bGQgb3RoZXJ3aXNlCgljb25mdXNlIG1ha2UuCgoJKiByZW1ha2UuYzogVzMyOiBBZGRlZCBpbmNsdWRlIG9mIGlvLmggdG8gZWxpbWluYXRlIGNvbXBpbGVyCgl3YXJuaW5ncy4gQWRkZWQgc29tZSBjb2RlIHRvIGRlZmF1bHQgTElCRElSIGlmIGl0IGlzIG5vdCBzZXQKCW9uIFczMi4KCgkqIHZhcmlhYmxlLmM6IFczMjogQWRkZWQgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIFBhdGgvUEFUSAoJYW5kIGNvbnZlcnRpbmcgdGhlbSB0byBzZW1pY29sb24gc2VwYXJhdGVkIGxpc3RzIGZvciBtYWtlJ3MKCWludGVybmFsIHVzZS4gTmV3IGZ1bmN0aW9uIHN5bmNfUGF0aF9lbnZpcm9ubWVudCgpCgl3aGljaCBpcyBjYWxsZWQgaW4gam9iLmMgYW5kIGZ1bmN0aW9uLmMgYmVmb3JlIGNyZWF0aW5nIGEgbmV3Cglwcm9jZXNzLiBDYWxsZXIgbXVzdCBzZXQgUGF0aCBpbiBlbnZpcm9ubWVudCBzaW5jZSB3ZSBkb24ndAoJaGF2ZSBmb3JrKCkgdG8gZG8gdGhpcyBmb3IgdXMuCgoJKiB2cGF0aC5jOiBXMzI6IEFkZGVkIGRldGVjdGlvbiBmb3IgZmlsZW5hbWVzIGNvbnRhaW5pbmcKCWZvcndhcmQgb3IgYmFja3dhcmQgc2xhc2hlcy4KCgkqIE5NYWtlZmlsZTogVzMyOiBWaXN1YWwgQyBjb21wYXRpYmxlIG1ha2VmaWxlIGZvciB1c2Ugd2l0aCBubWFrZS4KCVVzZSB0aGlzIHRvIGJ1aWxkIEdOVSBtYWtlIHRoZSBmaXJzdCB0aW1lIG9uIFdpbmRvd3MgTlQgb3IgV2luZG93cyA5NS4KCgkqIFJFQURNRS5XMzI6IFczMjogQ29udGFpbnMgc29tZSBoZWxwZnVsIG5vdGVzLgoKCSogYnVpbGRfdzMyLmJhdDogVzMyOiBJZiB5b3UgZG9uJ3QgbGlrZSBubWFrZSwgdXNlIHRoaXMgdGhlIGZpcnN0Cgl0aW1lIHlvdSBidWlsZCBHTlUgbWFrZSBvbiBXaW5kb3dzIE5UIG9yIFdpbmRvd3MgOTUuCgoJKiBjb25maWcuaC5XMzI6IFczMiB2ZXJzaW9uIG9mIGNvbmZpZy5oCgoJKiBzdWJwcm9jLmJhdDogVzMyOiBBIGJhdCBmaWxlIHVzZWQgdG8gYnVpbGQgdGhlCglzdWJwcm9jIGxpYnJhcnkgZnJvbSB0aGUgdG9wLWxldmVsIE5NYWtlZmlsZS4gTmVlZGVkIGJlY2F1c2UKCVdJbmRvd3MgOTUgKG5tYWtlKSBkb2Vzbid0IGFsbG93IHlvdSB0byBjZCBpbiBhIG1ha2UgcnVsZS4KCgkqIHczMi9pbmNsdWRlL2RpcmVudC5oCgkqIHczMi9jb21wYXQvZGlyZW50LmM6IFczMjogb3BlbmRpciwgcmVhZGRpciwgY2xvc2VkaXIsIGV0Yy4KCgkqIHczMi9pbmNsdWRlL3BhdGhzdHVmZi5oOiBXMzI6IHVzZWQgYnkgZmlsZXMgbmVlZGVkIGZ1bmN0aW9ucwoJZGVmaW5lZCBpbiBwYXRoc3R1ZmYuYyAocHJvdG90eXBlcykuCgoJKiB3MzIvaW5jbHVkZS9zdWJfcHJvYy5oOiBXMzI6IHByb3RvdHlwZXMgZm9yIHN1YnByb2MubGliIGZ1bmN0aW9ucy4KCgkqIHczMi9pbmNsdWRlL3czMmVyci5oOiBXMzI6IHByb3RvdHlwZXMgZm9yIHczMmVyci5jLgoKCSogdzMyL3BhdGhzdHVmZi5jOiBXMzI6IEZpbGUgYW5kIFBhdGgvUGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KCgkqIHczMi9zdWJwcm9jL2J1aWxkLmJhdDogVzMyOiBidWlsZCBzY3JpcHQgZm9yIHN1YnByb2MgbGlicmFyeQoJaWYgeW91IGRvbid0IHdpc2ggdG8gdXNlIG5tYWtlLgoKCSogdzMyL3N1YnByb2MvTk1ha2VmaWxlOiBXMzI6IFZpc3VhbCBDIGNvbXBhdGlibGUgbWFrZWZpbGUgZm9yIHVzZQoJd2l0aCBubWFrZS4gVXNlZCB0byBidWlsZCBzdWJwcm9jIGxpYnJhcnkuCgoJKiB3MzIvc3VicHJvYy9taXNjLmM6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoJKiB3MzIvc3VicHJvYy9wcm9jLmg6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzb3VyY2UgY29kZQoJKiB3MzIvc3VicHJvYy93MzJlcnIuYzogVzMyOiBzdWJwcm9jIGxpYnJhcnkgc3VwcG9ydCBjb2RlCgpNb24gTWF5IDEzIDE0OjM3OjQyIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuNC4KCgkqIEdOVW1ha2VmaWxlICh2bXNmaWxlcyk6IEZpeCB0eXBvLgoKCSogR05VbWFrZWZpbGUgKGFtaWdhZmlsZXMpOiBBZGQgYW1pZ2EuaC4KClN1biBNYXkgMTIgMTk6MTk6NDMgMTk5NiAgQWFyb24gRGlndWxsYSAgIDxkaWd1bGxhQGZoLWtvbnN0YW56LmRlPgoKCSogZGlyLmM6IE5ldyBmdW5jdGlvbjogYW1pZ2FmeSgpIHRvIGZvbGQgZmlsZW5hbWVzCglDaGFuZ2VzIEhBU0goKSB0byBIQVNISSgpIHRvIGZvbGQgZmlsZW5hbWVzIG9uIEFtaWdhLgoJU3RyaW5nY29tcGFyZXMgdXNlIHN0cmllcSgpIGluc3RlYWQgb2Ygc3RyZXEoKQoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIEFtaWdhIGlzICIiIGluc3RlYWQgb2YgIi4iCgkqIGZpbGUuYzogTGlrZXdpc2UuCgoJKiBhbWlnYS5jOiBOZXcgZnVuY3Rpb24gd2lsZGNhcmRfZXhwYW5zaW9uKCkuIEFsbG93cyB0byB1c2UKCUFtaWdhIHdpbGRjYXJkcyB3aXRoICQod2lsZGNhcmQgKQoKCSogYW1pZ2EuaDogTmV3IGZpbGUuIFByb3RvdHlwZXMgZm9yIGFtaWdhLmMKCgkqIGZ1bmN0aW9uLmM6IFVzZSBzcGVjaWFsIGZ1bmN0aW9uIHdpbGRjYXJkX2V4cGFuc2lvbigpIGZvcgoJJCh3aWxkY2FyZCApIHRvIGFsbG93IEFtaWdhIHdpbGRjYXJkcwoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIEFtaWdhIGlzICIiIGluc3RlYWQgb2YgIi4iCgoJKiBqb2IuYzogTm8gUGlwZXMgb24gQW1pZ2EsIHRvbwoJKGxvYWRfdG9vX2hpZ2gpIE5laXRoZXIgb24gQW1pZ2EKCUVOViB2YXJpYWJsZSBvbiBBbWlnYSBhcmUgaW4gYSBzcGVjaWFsIGRpcmVjdG9yeSBhbmQgYXJlIG5vdAoJcGFzc2VkIGFzIHRoaXJkIGFyZ3VtZW50IHRvIG1haW4oKS4KCgkqIGpvYi5oOiBObyBlbnZwIG9uIEFtaWdhCgoJKiBtYWtlLmg6IEFkZGVkIEhBU0hJKCkuIFRoaXMgaXMgdGhlIHNhbWUgYXMgSEFTSCgpIGJ1dCBjb252ZXJ0cwoJaXQncyBzZWNvbmQgcGFyYW1ldGVyIHRvIGxvd2VyY2FzZSBvbiBBbWlnYSB0byBmb2xkIGZpbGVuYW1lcy4KCgkqIG1haW4uYzogKG1haW4pLCB2YXJpYWJsZS5jIENoYW5nZWQgaGFuZGxpbmcgb2YgRU5WLXZhcnMuIE1ha2UKCXN0b3JlcyBub3cgdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgb25seSBhbmQgcmVhZHMgdGhlaXIgY29udGVudHMKCXdoZW4gdGhleSBhcmUgYWNjZXNzZWQgdG8gcmVmbGVjdCB0aGF0IHRoZXNlIHZhcmlhYmxlcyBhcmUgcmVhbGx5CglnbG9iYWwgKGkuZS4sIHRoZXkgQ0FOIGNoYW5nZSBXSElMRSBtYWtlIHJ1bnMgISkgVGhpcyBoYW5kbGluZyBpcwoJbWFkZSBpbiBsb29rdXBfdmFyaWFibGUoKQoKCSogTWFrZWZpbGUuYW1pOiByZW5hbWVkIGZpbGUuaCB0byBmaWxlZGVwLmgKCVVwZGF0ZWQgZGVwZW5kZW5jaWVzCgoJKiByZWFkLmM6ICJmaW5kX3NlbWljb2xvbiIgaXMgZGVjbGFyZWQgYXMgc3RhdGljIGJ1dCBuZXZlciBkZWZpbmVkLgoJTm8gZGlmZmVyZW5jZSBiZXR3ZWVuIE1ha2VmaWxlIGFuZCBtYWtlZmlsZSBvbiBBbWlnYTsgYWRkZWQKCVNNYWtlZmlsZSB0byAqZGVmYXVsdF9tYWtlZmlsZXNbXS4KCShyZWFkX21ha2VmaWxlKSBTQVMvQyB3YW50J3MgdHdvX2NvbG9uIGFuZCBwYXR0ZXJuX3BlcmNlbnQgYmUgc2V0CgliZWZvcmUgdXNlLgoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIEFtaWdhIGlzICIiIGluc3RlYWQgb2YgIi4iCglTdHJhbmdlICNlbmRpZiBtb3ZlZC4KCgkqIFJFQURNRS5BbWlnYTogdXBkYXRlZCBmZWF0dXJlIGxpc3QKCgkqIFNNYWtlZmlsZTogVXBkYXRlZCBkZXBlbmRlbmNpZXMKCgkqIHZhcmlhYmxlLmM6IEhhbmRsaW5nIG9mIEVOViB2YXJpYWJsZSBoYXBwZW5zIGluc2lkZSBsb29rdXBfdmFyaWFibGUoKQoKU2F0IE1heSAxMSAxNzo1ODozMiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBDb3VudCBwYXJlbnMgaW4gbGhzIHZhcmlhYmxlCglyZWZzIHRvIGF2b2lkIHNlZWluZyA9Lzo9Lys9IGluc2lkZSBhIHJlZi4KClRodSBNYXkgIDkgMTM6NTQ6NDkgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCkgW1NJR1FVSVRdOiBNYWtlIFNJR1FVSVQgY2hlY2sKCWNvbmRpdGlvbmFsLgoKCSogbWFpbi5jIChtYWluKTogVXNlIHVuc2lnbmVkIGZvciBmcmVhZCByZXR1cm4uCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogVXNlIGBpbnQnIGZvciBjaGFyIGFyZyB0byBhdm9pZCB3aWRlbmluZwoJY29uZmxpY3QgaXNzdWVzLgoJKiBkZXAuaDogRml4IHByb3RvdHlwZS4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbikgW19BTUlHQV06IEZpeCBzb21lIHR5cG9zLgoJKHBhdHN1YnN0X2V4cGFuZCk6IE1ha2UgbGVuIHZhcnMgdW5zaWduZWQuCgoJKiBHTlVtYWtlZmlsZSAoZ2xvYmZpbGVzKTogQWRkIEFtaWdhRE9TIHN1cHBvcnQgZmlsZXMuCgkoZGlzdGZpbGVzKTogQWRkICQoYW1pZ2FmaWxlcykuCgkoYW1pZ2FmaWxlcyk6IE5ldyB2YXJpYWJsZS4KClRodSBOb3YgIDcgMTA6MTg6MTYgMTk5NSAgQWFyb24gRGlndWxsYSAgIDxkaWd1bGxhQGZoLWtvbnN0YW56LmRlPgoKCSogQWRkZWQgQW1pZ2Egc3VwcG9ydCBpbiBjb21tYW5kcy5jLCBkaXIuYywgZnVuY3Rpb24uYywKCWpvYi5jLCBtYWluLmMsIG1ha2UuaCwgcmVhZC5jLCByZW1ha2UuYwoJKiBjb21tYW5kcy5jOiBBbWlnYSBoYXMgbmVpdGhlciBTSUdIVVAgbm9yIFNJR1FVSVQKCSogZGlyLmM6IEFtaWdhIGhhcyBmaWxlbmFtZXMgd2l0aCBVcHBlci0gYW5kIExvd2VyY2FzZSwKCWJ1dCAiRmlsZU5hbWUiIGlzIHRoZSBzYW1lIGFzICJmaWxlbmFtZSIuIEFkZGVkIHN0cmllcSgpCgl3aGljaCBpcyB1c2UgdG8gY29tcGFyZSBmaWxlbmFtZXMuIFRoaXMgaXMgbGlrZSBzdHJlcSgpCglvbiBhbGwgb3RoZXIgc3lzdGVtcy4gQWxzbyB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzCgkiLiIgdW5kZXIgQW1pZ2FET1MuCgkqIGZ1bmN0aW9uLmM6IE9uIEFtaWdhLCB0aGUgZW52aXJvbm1lbnQgaXMgbm90IHBhc3NlZCBhcyBlbnZwLAoJdGhlcmUgYXJlIG5vIHBpcGVzIGFuZCBBbWlnYSBjYW4ndCBmb3JrLiBVc2UgbXkgb3duIGZ1bmN0aW9uCgl0byBjcmVhdGUgYSBuZXcgY2hpbGQuCgkqIGpvYi5jOiBkZWZhdWx0X3NoZWxsIGlzICIiIChUaGUgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY2hvb3NlcwoJYSBzaGVsbCBmb3IgbWUpLiBIYXZlIHRvIHVzZSB0aGUgc2FtZSB3b3JrYXJvdW5kIGFzIE1TRE9TIGZvcgoJcnVubmluZyBiYXRjaCBjb21tYW5kcy4gQWRkZWQgSEFWRV9TWVNfUEFSQU1fSC4gTk9GSUxFIGlzbid0Cglrbm93biBvbiBBbWlnYS4gQ2xvbmVkIGNvZGUgdG8gcnVuIGNoaWxkcmVuIGZyb20gTVNET1MuIE93bgoJdmVyc2lvbiBvZiBzaF9jaGFyc1tdIGFuZCBzaF9jbWRzW10uIE5vIGR1cDIoKSBvciBkdXAoKSBvbiBBbWlnYS4KCSogbWFpbi5jOiBGb3JjZSBzdGFjayB0byAyMDAwMCBieXRlcy4gUmVhZCBlbnZpcm9ubWVudCBmcm9tIEVOVjoKCWRldmljZS4gT24gQW1pZ2EsIGV4ZWNfY29tbWFuZCgpIGRvZXMgcmV0dXJuLCBzbyBJIGV4aXQoKQoJYWZ0ZXJ3YXJkcy4KCSogbWFrZS5oOiBBZGRlZCBzdHJpZXEoKSB0byBjb21wYXJlIGZpbGVuYW1lcy4KCSogcmVhZC5jOiBBbWlnYSBuZWVkcyBzcGVjaWFsIGV4dGVuc2lvbiB0byBoYXZlIHBhc3N3ZC4gT25seQoJb25lIGluY2x1ZGUtZGlyLiAiTWFrZWZpbGUiIGFuZCAibWFrZWZpbGUiIGFyZSB0aGUgc2FtZS4KCUFkZGVkICJTTWFrZWZpbGUiLiAgQWRkZWQgc3BlY2lhbCBjb2RlIHRvIGhhbmRsZSBkZXZpY2UgbmFtZXMgKHh4eDopCglhbmQgIi4vIiBpbiBydWxlcy4KCSogcmVtYWtlLmM6IE9ubHkgb25lIGxpYi1kaXIuIEFtaWdhIGxpbmstbGlicyBhcmUgbmFtZWQgIiVzLmxpYiIKCWluc3RlYWQgb2YgImxpYiVzLmEiLgoJKiBtYWluLmMsIHJ1bGUuYywgdmFyaWFibGUuYzogQXZvaWQgZmxvYXRzIGF0IGFsbCBjb3N0cy4KCSogdnBhdGguYzogR2V0IHJpZCBvZiBhcyBtYW55IGFsbG9jYSgpcyBhcyBwb3NzaWJsZS4KClRodSBNYXkgIDkgMTM6MjA6NDMgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEdyb2sgYHNpbmNsdWRlJyBhcyBhbGlhcyBmb3IgYC1pbmNsdWRlJy4KCldlZCBNYXIgMjAgMDk6NTI6MjcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIEdOVW1ha2VmaWxlICh2bXNmaWxlcyk6IE5ldyB2YXJpYWJsZS4KCShkaXN0ZmlsZXMpOiBJbmNsdWRlICQodm1zZmlsZXMpLgoKVHVlIE1hciAxOSAyMDoyMTozNCAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCU1lcmdlZCBWTVMgcG9ydCBmcm9tIEtsYXVzIEthZW1wZiA8a2thZW1wZkBkaWR5bXVzLnJtaS5kZT4uCgkqIG1ha2UuaCAoUEFSQU1TKTogTmV3IG1hY3JvLgoJKiBjb25maWcuaC12bXM6IE5ldyBmaWxlLgoJKiBtYWtlZmlsZS5jb206IE5ldyBmaWxlLgoJKiBtYWtlZmlsZS52bXM6IE5ldyBmaWxlLgoJKiByZWFkbWUudm1zOiBOZXcgZmlsZS4KCSogdm1zZGlyLmg6IE5ldyBmaWxlLgoJKiB2bXNmdW5jdGlvbnMuYzogTmV3IGZpbGUuCgkqIHZtc2lmeS5jOiBOZXcgZmlsZS4KCSogZmlsZS5oOiBSZW5hbWVkIHRvIGZpbGVkZWYuaCB0byBhdm9pZCBjb25mbGljdCB3aXRoIFZNUyBzeXN0ZW0gaGRyLgoJKiBhci5jOiBBZGRlZCBwcm90b3R5cGVzIGFuZCBjaGFuZ2VzIGZvciBWTVMuCgkqIGNvbW1hbmRzLmM6IExpa2V3aXNlLgoJKiBjb21tYW5kcy5oOiBMaWtld2lzZS4KCSogZGVmYXVsdC5jOiBMaWtld2lzZS4KCSogZGVwLmg6IExpa2V3aXNlLgoJKiBkaXIuYzogTGlrZXdpc2UuCgkqIGV4cGFuZC5jOiBMaWtld2lzZS4KCSogZmlsZS5jOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYzogTGlrZXdpc2UuCgkqIGltcGxpY2l0LmM6IExpa2V3aXNlLgoJKiBqb2IuYzogTGlrZXdpc2UuCgkqIGpvYi5oOiBMaWtld2lzZS4KCSogbWFpbi5jOiBMaWtld2lzZS4KCSogbWFrZS5oOiBMaWtld2lzZS4KCSogbWlzYy5jOiBMaWtld2lzZS4KCSogcmVhZC5jOiBMaWtld2lzZS4KCSogcmVtYWtlLmM6IExpa2V3aXNlLgoJKiByZW1vdGUtc3R1Yi5jOiBMaWtld2lzZS4KCSogcnVsZS5jOiBMaWtld2lzZS4KCSogcnVsZS5oOiBMaWtld2lzZS4KCSogdmFyaWFibGUuYzogTGlrZXdpc2UuCgkqIHZhcmlhYmxlLmg6IExpa2V3aXNlLgoJKiB2cGF0aC5jOiBMaWtld2lzZS4KCSogY29tcGF0TWFrZWZpbGUgKHNyY3MpOiBSZW5hbWUgZmlsZS5oIHRvIGZpbGVkZWYuaC4KClNhdCBBdWcgMTkgMjM6MTE6MDAgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKGNoZWNrX2RlcCk6IEZvciBhIHNlY29uZGFyeSBmaWxlLCB0cnkgaW1wbGljaXQgYW5kCglkZWZhdWx0IHJ1bGVzIGlmIGFwcHJvcHJpYXRlLgoKV2VkIEF1ZyAgMiAwNDoyOTo0MiAxOTk1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogSWYgYW4gaW50ZXJtZWRpYXRlIGZpbGUgZXhpc3RzLAoJZG8gY29uc2lkZXIgaXRzIGFjdHVhbCBkYXRlLgoKU3VuIEp1bCAzMCAwMDo0OTo1MyAxOTk1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmggKHN0cnVjdCBmaWxlKTogTmV3IGZpZWxkIGBzZWNvbmRhcnknLgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IENoZWNrIGZvciAuSU5URVJNRURJQVRFIGFuZCAuU0VDT05EQVJZLgoJKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogRG9uJ3QgZGVsZXRlIC5TRUNPTkRBUlkgZmlsZXMuCgpTYXQgTWFyICAyIDE2OjI2OjUyIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAoc3Jjcyk6IEFkZCBnZXRvcHQuaDsgcHJlcGVuZCAkKHNyY2RpcikvIHRvIGdldG9wdCouCgpGcmkgTWFyICAxIDEyOjA0OjQ3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuMy4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogTW92ZSBmdXR1cmUgbW9kdGltZSBjaGVjayBiZWZvcmUgRklMRSBpcwoJY2xvYmJlcmVkIGJ5IDo6IGxvb3AuCgoJKiBkaXIuYzogVXNlIGNhbm9uaWNhbCBjb2RlIGZyb20gYXV0b2NvbmYgbWFudWFsIGZvciBkaXJlbnQgaW5jbHVkZS4KCVtfRF9OQU1MRU5dOiBSZWRlZmluZSBOQU1MRU4gdXNpbmcgdGhpcy4KCShkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcCk6IFVzZSBOQU1MRU4gbWFjcm8uCgkocmVhZF9kaXJzdHJlYW0pIFtfRElSRU5UX0hBVkVfRF9OQU1MRU5dOiBPbmx5IHNldCBkX25hbWxlbiAjaWYgdGhpcy4KCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogQWRkIG1pc3NpbmcgYmFja3NsYXNoLgoKV2VkIEZlYiAyOCAwMzo1NjoyMCAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogUmVtb3ZlICsgcHJlZml4IGZyb20gUkNTIGNtZHMuCgkoZGVmYXVsdF92YXJpYWJsZXMpOiBQdXQgKyBwcmVmaXggaW4gJChDSEVDS09VVCx2KSB2YWx1ZSBpbnN0ZWFkLgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBDaGVjayBmb3IgZnV0dXJlIHRpbWVzdGFtcHM7IGdpdmUgZXJyb3IgYW5kIG1hcmsKCWZpbGUgYXMgImZhaWxlZCB0byB1cGRhdGUiLgoKRnJpIEphbiAxMiAxODowOTozNiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmM6IERvbid0IGRlY2xhcmUgdW5ibG9ja19zaWdzOyBqb2IuaCBhbHJlYWR5IGRvZXMuCgpTYXQgSmFuICA2IDE2OjI0OjQ0IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBhY2NvbmZpZy5oIChIQVZFX1NZU0NPTkZfT1BFTl9NQVgpOiAjdW5kZWYgcmVtb3ZlZC4KCgkqIGpvYi5jIChOR1JPVVBTX01BWCk6IERvbid0IHRyeSB0byBkZWZpbmUgdGhpcyBtYWNyby4KCkZyaSBEZWMgMjIgMTg6NDQ6NDQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChHRVRPUFQsIEdFVE9QVF9TUkMsIEdMT0IpOiBWYXJpYWJsZXMgcmVtb3ZlZC4KCShvYmpzLCBzcmNzKTogSW5jbHVkZSB0aGVpciB2YWx1ZXMgaGVyZSBpbnN0ZWFkIG9mIHJlZmVyZW5jZXMuCgpUaHUgRGVjIDE0IDA2OjIxOjI5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuMi4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQ2FsbCB1bmJsb2NrX3NpZ3MgYWZ0ZXIgc3RhcnRfam9iX2NvbW1hbmQuCgpUaHUgRGVjIDE0IDA3OjIyOjAzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGR1YWxpdHkuZ251LmFpLm1pdC5lZHU+CgoJKiBkaXIuYyAoZGlyX3NldHVwX2dsb2IpOiBEb24ndCB1c2UgbHN0YXQ7IGdsb2IgbmV2ZXIgY2FsbHMgaXQgYW55d2F5LgoJQXZvaWQgJiBiZWZvcmUgZnVuY3Rpb24gbmFtZXMgdG8gc2lsZW5jZSBib2d1cyBzdW5vczQgY29tcGlsZXIuCgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSBjaGVjayBmb3IgYHN5c2NvbmYgKF9TQ19PUEVOX01BWCknLgoKVHVlIERlYyAxMiAwMDo0ODo0MiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjEuCgoJKiBkaXIuYyAocmVhZF9kaXJzdHJlYW0pOiBGaXggYnJhaW5vOiBmaWxsIGluIHRoZSBidWZmZXIgd2hlbiBub3QKCXJlYWxsb2NhdGluZyBpdCEKCk1vbiBEZWMgMTEgMjI6MjY6MTUgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1pc2MuYyAoY29sbGFwc2VfY29udGludWF0aW9ucyk6IEZpeCBza2lwcGluZyBvZiB0cmFpbGluZyBccyBzbwoJaXQgY2FuIG5ldmVyIGRlcmVmZXJlbmNlIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS4KCgkqIHJlYWQuYyAoZmluZF9zZW1pY29sb24pOiBGdW5jdGlvbiByZW1vdmVkLgoJKHJlYWRfbWFrZWZpbGUpOiBEb24ndCB1c2UgZmluZF9zZW1pY29sb24gb3IgcmVtb3ZlX2NvbW1lbnRzIGZvcgoJcnVsZSBsaW5lcy4gIFVzZSBmaW5kX2NoYXJfdW5xdW90ZSBkaXJlY3RseSBhbmQgaGFuZGxlIHF1b3RlZCBjb21tZW50cwoJcHJvcGVybHkuCgoJKiBkZWZhdWx0LmM6IFJlbW92ZSBhbGwgW01fWEVOSVhdIGNvZGUuCgoJKiBkaXIuYyBbSEFWRV9EX05BTUxFTl06IERlZmluZSB0aGlzIGZvciBfX0dOVV9MSUJSQVJZX18gPiAxLgoJKERfTkFNTEVOKTogTWFjcm8gcmVtb3ZlZC4KCShGQUtFX0RJUl9FTlRSWSk6IE5ldyBtYWNyby4KCShkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcCk6IFRlc3QgSEFWRV9EX05BTUxFTiBpbnN0ZWFkIG9mIHVzaW5nCglEX05BTUxFTi4KCShyZWFkX2RpcnN0cmVhbSk6IFJldHVybiBhIHN0cnVjdCBkaXJlbnQgKiBmb3IgbmV3IGdsb2IgaW50ZXJmYWNlLgoJKGluaXRfZGlyKTogRnVuY3Rpb24gcmVtb3ZlZC4KCShkaXJfc2V0dXBfZ2xvYik6IE5ldyBmdW5jdGlvbi4KCSogbWFpbi5jIChtYWluKTogRG9uJ3QgY2FsbCBpbml0X2Rpci4KCSogcmVhZC5jIChtdWx0aV9nbG9iKTogQ2FsbCBkaXJfc2V0dXBfZ2xvYiBvbiBvdXIgZ2xvYl90IGFuZCB1c2UKCUdMT0JfQUxURElSRlVOQyBmbGFnLgoKCSogbWlzYy5jIChzYWZlX3N0YXQpOiBGdW5jdGlvbiByZW1vdmVkLgoJKiByZWFkLmMsIGNvbW1hbmRzLmMsIHJlbWFrZS5jLCB2cGF0aC5jOiBVc2UgcGxhaW4gc3RhdCBpbnN0ZWFkIG9mCglzYWZlX3N0YXQuCgpTYXQgTm92IDI1IDIwOjM1OjE4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyBbSEFWRV9VTklPTl9XQUlUXTogSW5jbHVkZSBzeXMvd2FpdC5oLgoKCSogbWFpbi5jIChsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBNYWRlIGdsb2JhbC4KCVByaW50IGVudGVyaW5nIG1zZyBvbmx5IG9uY2UuCgkqIG1ha2UuaCAobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogRGVjbGFyZSBpdC4KCSogbWlzYy5jIChtZXNzYWdlKTogVGFrZSBuZXcgYXJnIFBSRUZJWC4gIFByaW50ICJtYWtlOiAiIG9ubHkgaWYKCW5vbnplcm8uICBDYWxsIGxvZ193b3JraW5nX2RpcmVjdG9yeS4KCSogcmVtYWtlLmM6IFBhc3MgbmV3IGFyZyBpbiBgbWVzc2FnZScgY2FsbHMuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFBhc3MgbmV3IGFyZyB0byBgbWVzc2FnZSc7IGZpeAoJaW52ZXJ0ZWQgdGVzdCBpbiB0aGF0IGNhbGwuCgpUdWUgTm92IDIxIDE5OjAxOjEyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBVc2UgYG1lc3NhZ2UnIHRvIHByaW50IHRoZSBjb21tYW5kLAoJYW5kIGNhbGwgaXQgd2l0aCBudWxsIGlmIHRoZSBjb21tYW5kIGlzIHNpbGVudC4KCSogcmVtYWtlLmMgKHRvdWNoX2ZpbGUpOiBVc2UgbWVzc2FnZSBpbnN0ZWFkIG9mIHByaW50Zi4KClR1ZSBPY3QgMTAgMTQ6NTk6MzAgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoZW50ZXJfY29tbWFuZF9saW5lX2ZpbGUpOiBCYXJmIGlmIE5BTUUgaXMgIiIuCgpTYXQgU2VwICA5IDA2OjMzOjIwIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHdoaXotYmFuZy5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV90YXJnZXQpOiBJZ25vcmUgdW5saW5rIGZhaWx1cmUgaWYgaXQgaXMgRU5PRU5ULgoKVGh1IEF1ZyAxNyAxNTowODo1NyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3IgZ2V0ZHRhYmxlc2l6ZS4KCSogam9iLmMgKGdldGR0YWJsZXNpemUpOiBSZW1vdmUgZGVjbHMgYW5kIG1hY3Jvcy4KClRodSBBdWcgMTAgMTk6MTA6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IE9taXQgY29tbWFuZCBsaW5lIHZhcmlhYmxlCiAJZGVmaW5pdGlvbnMgZnJvbSBNRkxBR1MgdmFsdWUuCgoJKiBhcnNjYW4uYyAoYXJfc2NhbikgW0FJQU1BR106IENoZWNrIGZvciB6ZXJvIE1FTUJFUl9PRkZTRVQsCiAJaW5kaWNhdGluZyBhIHZhbGlkLCBidXQgZW1wdHksIGFyY2hpdmUuCgpNb24gQXVnICA3IDE1OjQwOjAzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBkaXIuYyAoZmlsZV9pbXBvc3NpYmxlX3ApOiBDb3JyZWN0bHkgcmVzZXQgRklMRU5BTUUgdG8gbmFtZQogCXdpdGhpbiBkaXJlY3RvcnkgYmVmb3JlIGhhc2ggc2VhcmNoLgoKCSogam9iLmMgKGNoaWxkX2Vycm9yKTogRG8gbm90aGluZyBpZiBJR05PUkVEIHVuZGVyIC1zLgoKCSogam9iLmMgKGV4ZWNfY29tbWFuZCk6IENvcnJlY3RseSB1c2UgQVJHVlswXSBmb3Igc2NyaXB0IG5hbWUgd2hlbgogCXJ1bm5pbmcgc2hlbGwgZGlyZWN0bHkuCgpUdWUgQXVnICAxIDE0OjM5OjE0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoY2hpbGRfZXhlY3V0ZV9qb2IpOiBDbG9zZSBTVERJTl9GRCBhbmQgU1RET1VUX0ZEIGFmdGVyCiAJZHVwJ2luZyBmcm9tIHRoZW0uICBEb24ndCB0cnkgdG8gY2xvc2UgYWxsIGV4Y2VzcyBkZXNjcmlwdG9yczsKIAlnZXRkdGFibGVzaXplIG1pZ2h0IHJldHVybiBhIGh1Z2UgdmFsdWUuICBBbnkgb3BlbiBkZXNjcmlwdG9ycyBpbgogCXRoZSBwYXJlbnQgc2hvdWxkIGhhdmUgRkRfQ0xPRVhFQyBzZXQuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBTZXQgRkRfQ0xPRVhFQyBmbGFnIG9uIEJBRF9TVERJTiBkZXNjcmlwdG9yLgoKVHVlIEp1biAyMCAwMzo0NzoxNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVhZC5jIChyZWFkX2FsbF9tYWtlZmlsZXMpOiBQcm9wZXJseSBhcHBlbmQgZGVmYXVsdCBtYWtlZmlsZXMKIAl0byB0aGUgZW5kIG9mIHRoZSBgcmVhZF9tYWtlZmlsZXMnIGNoYWluLgoKRnJpIE1heSAxOSAxNjozNjozMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0IHJlbGVhc2VkLgoKV2VkIE1heSAxMCAxNzo0MzozNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjczLjMuCgpUdWUgTWF5ICA5IDE3OjE1OjIzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS9tYWtlLmluZm8pOiBNYWtlIHN1cmUgJCRkaXIgaXMgc2V0IGluCiAJaW5zdGFsbC1pbmZvIGNtZC4KCldlZCBNYXkgIDMgMTU6NTY6MDYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZSk6IEdyb2sgdXBkYXRlX3N0YXR1cyBvZiAxIGZvciAtcS4KClRodSBBcHIgMjcgMTI6Mzk6MzUgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43My4yLgoKV2VkIEFwciAyNiAxNzoxNTo1NyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IEZpeCBpbnZlcnRlZCB0ZXN0IHRvIGJhaWwgdW5kZXIKIAktbiBmb3Igc2lnbmFsIGNhc2UuICBCYWlsIHVuZGVyIC1xIG9yIC10LgoJU2tpcCBmaWxlcyB3aXRoIHVwZGF0ZV9zdGF0dXM9PS0xLgoKCSogam9iLmMgKGpvYl9uZXh0X2NvbW1hbmQpOiBTa2lwIGVtcHR5IGxpbmVzLgoJKG5ld19qb2IpOiBEb24ndCB0ZXN0IHRoZSByZXR1cm4gb2Ygam9iX25leHRfY29tbWFuZC4KCUp1c3QgbGV0IHN0YXJ0X3dhaXRpbmdfam9iIGhhbmRsZSB0aGUgY2FzZSBvZiBlbXB0eSBjb21tYW5kcy4KCldlZCBBcHIgMTkgMDM6MjU6NTQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZ1bmN0aW9uLmMgW19fTVNET1NfX106IEluY2x1ZGUgPGZjbnRsLmg+LiAgRnJvbSBESiBEZWxvcmllLgoKCSogVmVyc2lvbiAzLjczLjEuCgpTYXQgQXByICA4IDE0OjUzOjI0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBTZXQgRklMRS0+dXBkYXRlX3N0YXR1cyB0byB6ZXJvCiAJaWYgaXQncyAtMS4KCldlZCBBcHIgIDUgMDA6MjA6MjQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MyByZWxlYXNlZC4KClR1ZSBNYXIgMjggMTM6MjU6NDYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IEZpeGVkIGJyYWlubyBpbiBhc3NlcnQuCgoJKiBWZXJzaW9uIDMuNzIuMTMuCgpNb24gTWFyIDI3IDA1OjI5OjEyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmM6IEF2b2lkIHN0cmluZyBpbiBhc3NlcnQgZXhwcmVzc2lvbi4gIFNvbWUgc3lzdGVtcyBhcmUgYnJva2VuLgoKRnJpIE1hciAyNCAwMDozMjozMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogSGFuZGxlIDEgYW5kIDIgcmV0dXJucyBmcm9tIHVwZGF0ZV9nb2FsX2NoYWluCiAJbWFrZWZpbGUgcnVuIHByb3Blcmx5LgoKCSogVmVyc2lvbiAzLjcyLjEyLgoKCSogbWFpbi5jIChoYW5kbGVfbm9uX3N3aXRjaF9hcmd1bWVudCk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgogCWRlY29kZV9zd2l0Y2hlcy4KCShkZWNvZGVfc3dpdGNoZXMpOiBTZXQgb3B0aW5kIHRvIDAgdG8gcmVpbml0aWFsaXplIGdldG9wdCwgbm90IHRvIDEuCglXaGVuIGdldG9wdF9sb25nIHJldHVybnMgRU9GLCBicmVhayB0aGUgbG9vcCBhbmQgaGFuZGxlIHJlbWFpbmluZyBhcmdzCiAJd2l0aCBhIHNpbXBsZSBzZWNvbmQgbG9vcC4KCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IFNldCB1cGRhdGVfc3RhdHVzIHRvIDIgaW5zdGVhZCBvZiAxIGZvcgogCW5vIHJ1bGUgdG8gbWFrZS4gIE1lbnRpb24gcGFyZW50IChkZXBlbmRlbnQpIGluIGVycm9yIG1lc3NhZ2UuCgkodXBkYXRlX2ZpbGVfMSk6IEhhbmRsZSBGSUxFLT51cGRhdGVfc3RhdHVzID09IDIgaW4gLWQgcHJpbnRvdXQuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCwgcmVhcF9jaGlsZHJlbik6IFNldCB1cGRhdGVfc3RhdHVzIHRvIDIKIAlpbnN0ZWFkIG9mIDEgZm9yIGZhaWxlZCBjb21tYW5kcy4KClR1ZSBNYXIgMjEgMTY6MjM6MzggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChzZWFyY2hfcGF0aCk6IEZ1bmN0aW9uIHJlbW92ZWQgKHdhcyBhbHJlYWR5ICNpZiAwJ2Qgb3V0KS4KCSogY29uZmlndXJlLmluOiBSZW1vdmUgQUNfVFlQRV9HRVRHUk9VUFM7IG5vdGhpbmcgbmVlZHMgaXQgYW55IG1vcmUuCgpGcmkgTWFyIDE3IDE1OjU3OjQwIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuYmF0OiBXcml0ZSBAQ1BQRkxBR1NAIHRyYW5zbGF0aW9uLgoKTW9uIE1hciAxMyAwMDo0NTo1OSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFJlYXJyYW5nZWQgYGwoYSBiKScgLT4gYGwoYSkgbChiKScgbG9vcAogCXRvIG5vdCBza2lwIHRoZSBlbHQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGBsKC4uLicuCgpGcmkgTWFyIDEwIDEzOjU2OjQ5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuMTEuCgoJKiByZWFkLmMgKGZpbmRfY2hhcl91bnF1b3RlKTogTWFrZSBzZWNvbmQgYXJnIGEgc3RyaW5nIG9mIHN0b3AKIAljaGFycyBpbnN0ZWFkIG9mIGEgc2luZ2xlIHN0b3AgY2hhci4gIFN0b3Agd2hlbiBhbnkgY2hhciBpbiB0aGUKIAlzdHJpbmcgaXMgaGl0LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShmaW5kX3NlbWljb2xvbik6IFBhc3Mgc3RvcCBjaGFycyAiIzsiIHRvIG9uZSBmaW5kX2NoYXJfdW5xdW90ZSBjYWxsLAoJaW5zdGVhZCBvZiB1c2luZyB0d28gY2FsbHMuICBJZiB0aGUgbWF0Y2ggaXMgbm90IGEgOyBidXQgYSAjLAogCXJldHVybiB6ZXJvLgoJKiBtaXNjLmM6IENoYW5nZWQgZmluZF9jaGFyX3VucXVvdGUgY2FsbGVycyBoZXJlIHRvby4KCgkqIFZlcnNpb24gMy43Mi4xMC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSwgcGFyc2VfZmlsZV9zZXEpOiBGaXggdHlwbyBfX01TX0RPU19fIC0+CiAJX19NU0RPU19fLgoKCSogR05VbWFrZWZpbGUgKGdsb2JmaWxlcyk6IEFkZCBnbG9iL2NvbmZpZ3VyZS5iYXQuCgkoZGlzdGZpbGVzKTogQWRkIGNvbmZpZ2guZG9zLCBjb25maWd1cmUuYmF0LgoKV2VkIE1hciAgOCAxMzoxMDo1NyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCUZpeGVzIGZvciBNUy1ET1MgZnJvbSBESiBEZWxvcmllLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUsIHBhcnNlX2ZpbGVfc2VxKSBbX19NU19ET1NfX106IERvbid0IHNlZSA6CiAJYXMgc2VwYXJhdG9yIGluICJDOlwuLi4iLgoJKiBjb25maWdoLmRvcyAoU1REQ19IRUFERVJTKTogRGVmaW5lIG9ubHkgaWYgdW5kZWZpbmVkLgoJKEhBVkVfU1lTX1BBUkFNX0gpOiBEb24ndCBkZWZpbmUgdGhpcy4KCShIQVZFX1NUUkVSUk9SKTogRGVmaW5lIHRoaXMuCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKSBbX19NU0RPU19fXTogRml4IHR5cG9zLgoKCSogVmVyc2lvbiAzLjcyLjkuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IFJlc2V0IG9wdGluZCB0byAxIGluc3RlYWQgb2YgMC4KClR1ZSBNYXIgIDcgMTc6MzE6MDYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IElmIG5vbi1vcHRpb24gYXJnIGlzICItIiwgaWdub3JlIGl0LgoKTW9uIE1hciAgNiAyMzo1NzozOCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjguCgpXZWQgRmViIDIyIDIxOjI2OjM2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuNy4KClR1ZSBGZWIgMjEgMjI6MTA6NDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IFBhc3MgbWlzc2luZyBhcmcgdG8gdG1wbmFtLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3Ryc2lnbmFsLgoJKiBqb2IuYyAoY2hpbGRfZXJyb3IpOiBVc2Ugc3Ryc2lnbmFsLgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBjYWxsIHNpZ25hbWVfaW5pdCAjaWZkZWYgSEFWRV9TVFJTSUdOQUwuCgoJKiBtaXNjLmMgKHN0cmVycm9yKTogRml4IHN3YXBwZWQgYXJncyBpbiBzcHJpbnRmLgoKTW9uIEZlYiAxMyAxMTo1MDowOCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluIChDRkxBR1MsIExERkxBR1MpOiBEb24ndCBzZXQgdGhlc2UgdmFyaWFibGVzLgoKRnJpIEZlYiAxMCAxODo0NDoxMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogQWRkIDk1IHRvIGNvcHlyaWdodCB5ZWFycy4KCgkqIFZlcnNpb24gMy43Mi42LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVtZW1iZXIgdG8gY2FsbCBub3RpY2VfZmluaXNoZWRfZmlsZQogCXVuZGVyIC1uIHdoZW4gbm90IHJlY3Vyc2luZy4gIFRvIGRvIHRoaXMsIGNvbnNvbGlkYXRlIHRoYXQgY29kZQogCXVuZGVyIHRoZSBlbXB0eSBjb21tYW5kIGNhc2UgYW5kIGdvdG8gdGhlcmUgZm9yIHRoZSAtbiBjYXNlLgoKVHVlIEZlYiAgNyAxMzozNjowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFrZS5oIFshIFNURENfSEVBREVSU106IERvbid0IGRlY2xhcmUgcXNvcnQuICBTdW4gaGVhZGVycwogCWRlY2xhcmUgaXQgaW50LgoKTW9uIEZlYiAgNiAxNzozNzowMSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRm9yIGJvZ3VzIGxpbmUgc3RhcnRpbmcgd2l0aCB0YWIsIGlnbm9yZQogCWl0IGlmIGJsYW5rIGFmdGVyIHJlbW92aW5nIGNvbW1lbnRzLgoKCSogbWFpbi5jOiBDYXN0IHJlc3VsdHMgb2YgYGFsbG9jYScgdG8gYGNoYXIgKicuCgkqIGV4cGFuZC5jOiBMaWtld2lzZS4KClN1biBGZWIgIDUgMTg6MzU6NDYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi41LgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgbWt0ZW1wLgoJKiBtYWluLmMgKG1haW4pIFshIEhBVkVfTUtURU1QXTogVXNlIHRtcG5hbSBpbnN0ZWFkIG9mIG1rdGVtcC4KCgkqIGNvbmZpZ3VyZS5pbiAobWFrZV9jdl9zeXNjb25mX29wZW5fbWF4KTogTmV3IGNoZWNrIGZvciBgc3lzY29uZgogCShfU0NfT1BFTl9NQVgpJy4KCSogYWNjb25maWcuaDogQWRkZWQgI3VuZGVmIEhBVkVfU1lTQ09ORl9PUEVOX01BWC4KCSogam9iLmMgW0hBVkVfU1lTQ09ORl9PUEVOX01BWF0gKGdldGR0YWJsZXNpemUpOiBEZWZpbmUgYXMgbWFjcm8KIAl1c2luZyBzeXNjb25mLgoKRnJpIEphbiAyNyAwNDo0MjowOSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBXaGVuICFNVVNUX01BS0UsIGRvbid0IHNldAogCUZJTEUtPnVwZGF0ZV9zdGF0dXMgdG8gemVybyBiZWZvcmUgY2FsbGluZyBub3RpY2VfZmluaXNoZWRfZmlsZS4KCShub3RpY2VfZmluaXNoZWRfZmlsZSk6IFRvdWNoIG9ubHkgd2hlbiBGSUxFLT51cGRhdGVfc3RhdHVzIGlzIHplcm8uCgkocmVtYWtlX2ZpbGUpOiBTZXQgRklMRS0+dXBkYXRlX3N0YXR1cyB0byB6ZXJvIGFmdGVyIG5vdCBjYWxsaW5nCglleGVjdXRlX2ZpbGVfY29tbWFuZCBhbmQgZGVjaWRpbmcgdG8gdG91Y2ggaW5zdGVhZC4KClRodSBKYW4gMjYgMDE6Mjk6MzIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoZGVidWdfc2lnbmFsX2hhbmRsZXIpOiBOZXcgZnVuY3Rpb247IHRvZ2dsZXMgZGVidWdfZmxhZy4KCShtYWluKTogSGFuZGxlIFNJR1VTUjEgd2l0aCB0aGF0LgoKTW9uIEphbiAxNiAxNTo0Njo1NiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKHJlYWxjbGVhbik6IFJlbW92ZSBJbmZvIGZpbGVzLgoKU3VuIEphbiAxNSAwODoyMzowOSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjQuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBTYXZlIGFuZCByZXN0b3JlIGVudmlyb24gYXJvdW5kIHZmb3JrCiAgICAgICAgY2FsbC4KCShzZWFyY2hfcGF0aCk6IEZ1bmN0aW9uICNpZiAwJ2Qgb3V0LgoJKGV4ZWNfY29tbWFuZCk6IFVzZSBleGVjdnAgaW5zdGVhZCBvZiBzZWFyY2hfcGF0aC4KCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmQpOiBSZXdyb3RlIGNvbXB1dGVkIHZhcmlhYmxlIG5hbWUgYW5kCglzdWJzdGl0dXRpb24gcmVmZXJlbmNlIGhhbmRsaW5nIHRvIGJlIHNpbXBsZXIuICBGaXJzdCBleHBhbmQgdGhlCgllbnRpcmUgdGV4dCBiZXR3ZWVuIHRoZSBwYXJlbnMgaWYgaXQgY29udGFpbnMgYW55ICRzLCB0aGVuIGV4YW1pbmUKCXRoZSByZXN1bHQgb2YgdGhhdCBmb3Igc3VidGl0dXRpb24gcmVmZXJlbmNlcyBhbmQgZG8gbm8gZnVydGhlcgoJZXhwYW5zaW9uIHdoaWxlIHBhcnNpbmcgdGhlbS4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogSGFuZGxlICIgcXVvdGluZyB0b28sCgl3aGVuIG5vIGJhY2tzbGFzaCwgJCBvciBgIGNoYXJhY3RlcnMgYXBwZWFyIGluc2lkZSB0aGUgcXVvdGVzLgoKCSogY29uZmlndXJlLmluICh1bmlvbiB3YWl0IGNoZWNrKTogSWYgV0VYSVRTVEFUVVMgYW5kIFdURVJNU0lHIGFyZQogICAgICAgIGRlZmluZWQsIGp1c3QgdXNlIGludC4KClR1ZSBKYW4gMTAgMDY6Mjc6MjcgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfX2hwdXhdOiBSZW1vdmUgc3BlY2lhbAoJZGVmaW5pdGlvbiBvZiBBUkZMQUdTLiAgRXhpc3RlbmNlIG9mIHRoZSBgZicgZmxhZyBpcyBub3QKCWNvbnNpc3RlbnQgYWNyb3NzIEhQVVggdmVyc2lvbnM7IGFuZCBvbmUgbWlnaHQgYmUgdXNpbmcgR05VIGFyCglhbnl3YXkuCgoJKiBjb21wYXRNYWtlZmlsZSAoY2xlYW4pOiBEb24ndCByZW1vdmUgSW5mbyBmaWxlcy4KCgkqIGNvbXBhdE1ha2VmaWxlIChjaGVjayk6IFJlbW92ZSBncmF0dWl0b3VzIHRhcmdldCBkZWNsYXJhdGlvbi4KClNhdCBKYW4gIDcgMTE6Mzg6MjMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChFVEFHUywgQ1RBR1MpOiBEb24ndCB1c2UgLXQuCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCkgW2NyYXldOiBTdWJ0cmFjdCAxIGxpa2UgW19faHB1eF0uCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEZvciAtLWhlbHAsIHByaW50IHVzYWdlIHRvIHN0ZG91dC4KCk1vbiBEZWMgIDUgMTI6NDI6MTggMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4zLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBEbyBzZXRfY29tbWFuZF9zdGF0ZSAoRklMRSwKCWNzX25vdF9zdGFydGVkKSBvbmx5IGlmIG9sZCBzdGF0ZSB3YXMgZGVwc19ydW5uaW5nLgoKTW9uIE5vdiAyOCAxNDoyNDowMyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogVXNlIHNldF9jb21tYW5kX3N0YXRlLgoKCSogYnVpbGQudGVtcGxhdGUgKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLgoJKHByZWZpeCwgZXhlY19wcmVmaXgpOiBTZXQgZnJvbSBALi4uQC4KCShjb21waWxhdGlvbiBsb29wKTogUGFzcyAkQ1BQRkxBR1MgdG8gY29tcGlsZXIuCgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBNYWtlIGl0IGV4ZWN1dGFibGUuCgoJKiBHTlVtYWtlZmlsZSAoZ2xvYmZpbGVzKTogQWRkIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlLgoKCSogVmVyc2lvbiAzLjcyLjIuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IERvbid0IHdyaXRlIGdsb2IvTWFrZWZpbGUuCgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX1NZTUJPTCk6IFVzZSBBQ19ERUZJTkVfVU5RVU9URUQuCgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciByYW5saWIuCgpUdWUgTm92IDIyIDIyOjQyOjQwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBPbmx5IG1hcmsgYWxzb19tYWtlJ3MgYXMKCXVwZGF0ZWQgaWYgcmVhbGx5IHJhbiBjbWRzLgoKVHVlIE5vdiAxNSAwNjozMjo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBQdXQgZG5scyBiZWZvcmUgcmFuZG9tIHdoaXRlc3BhY2UuCgpTdW4gTm92IDEzIDA1OjAyOjI1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAoQ1BQRkxBR1MpOiBOZXcgdmFyaWFibGUsIHNldCBmcm9tIEBDUFBGTEFHU0AuCgkoUkFOTElCKTogVmFyaWFibGUgcmVtb3ZlZC4KCShwcmVmaXgsIGV4ZWNfcHJlZml4KTogU2V0IHRoZXNlIGZyb20gQC4uLkAuCgkoLmMubyk6IFVzZSAkKENQUEZMQUdTKS4KCShnbG9iL2xpYmdsb2IuYSk6IERvbid0IHBhc3MgZG93biB2YXJpYWJsZXMgdG8gc3ViLW1ha2UuCglnbG9iL01ha2VmaWxlIHNob3VsZCBiZSBjb25maWd1cmVkIHByb3Blcmx5IGJ5IGNvbmZpZ3VyZS4KCShkaXN0Y2xlYW4pOiBSZW1vdmUgY29uZmlnLmxvZyBhbmQgY29uZmlnLmNhY2hlIChhdXRvY29uZiBzdHVmZikuCgpNb24gTm92ICA3IDEzOjU4OjA2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBhY2NvbmZpZy5oOiBBZGQgI3VuZGVmIEhBVkVfVU5JT05fV0FJVC4KCSogY29uZmlndXJlLmluOiBDb252ZXJ0ZWQgdG8gQXV0b2NvbmYgdjIuCgkqIGRpci5jOiBUZXN0IEhBVkVfRElSRU5UX0gsIEhBVkVfU1lTX0RJUl9ILCBIQVZFX05ESVJfSCBpbnN0ZWFkCglvZiBESVJFTlQsIFNZU0RJUiwgTkRJUi4KCSogYnVpbGQuc2guaW4gKHByZWZpeCwgZXhlY19wcmVmaXgpOiBTZXQgdGhlc2UgZnJvbSBALi4uQC4KCShDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZSwgc2V0IGZyb20gQENQUEZMQUdTQC4KCShjb21waWxpbmcgbG9vcCk6IFBhc3MgJENQUEZMQUdTIGJlZm9yZSAkQ0ZMQUdTLgoJKiBpbnN0YWxsLnNoOiBGaWxlIHJlbmFtZWQgdG8gaW5zdGFsbC1zaC4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFdoZW4gbm8gZmxhZ3MsIHNldCBXT1JEUyB0byB6ZXJvLgoKU3VuIE5vdiAgNiAxODozNDowMSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjEuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBUZXJtaW5hdGUgcHJvcGVybHkgd2hlbiBGTEFHU1RSSU5HIGlzCiAgICAgICAgZW1wdHkuCgpGcmkgTm92ICA0IDE2OjAyOjUxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuCgpUdWUgTm92ICAxIDAxOjE4OjEwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzEuNS4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFdoZW4gQVJHViBpcyBuaWwsIG9ubHkgc2V0Cgl1cGRhdGVfc3RhdGUgYW5kIGNhbGwgbm90aWNlX2ZpbmlzaGVkX2ZpbGUgaWYgam9iX25leHRfY29tbWFuZAoJcmV0dXJucyB6ZXJvLgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogQ2FsbCBub3RpY2VfZmluaXNoZWRfZmlsZSBmb3IgZW1wdHkKICAgICAgICBjb21tYW5kIGxpbmUuCgpUaHUgT2N0IDI3IDAyOjAyOjQ1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IFNldCBDT01NQU5EU19TSUxFTlQgZm9yIC5TSUxFTlQsIG5vdAogICAgICAgIENPTU1BTkRTX05PRVJST1IuCgpXZWQgT2N0IDI2IDAyOjE0OjEwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzEuNC4KClR1ZSBPY3QgMjUgMjI6NDk6MjQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogU2V0IGNvbW1hbmRfZmxhZ3MgYml0cyBpbiBhbGwgOjogZW50cmllcy4KCk1vbiBPY3QgMjQgMTg6NDc6NTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1ha2UuaCAocG9zaXhfcGVkYW50aWMpOiBEZWNsYXJlIGl0LgoJKiBtYWluLmMgKG1haW4pOiBNb3ZlIGNoZWNrcyAuSUdOT1JFLCAuU0lMRU5ULCAuUE9TSVggdG8KICAgICAgICBzbmFwX2RlcHMuCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogQ2hlY2sgLklHTk9SRSwgLlNJTEVOVCwgLlBPU0lYIGhlcmUgaW5zdGVhZAoJb2YgaW4gbWFpbi4gIElmIC5JR05PUkUgaGFzIGRlcHMsIE9SIENPTU1BTkRTX05PRVJST1IgaW50byB0aGVpcgoJY29tbWFuZF9mbGFncyBhbmQgZG9uJ3Qgc2V0IC1pLiAgTGlrZXdpc2UgLlNJTEVOVC4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSW4gRkxBR1MgaW5pdGlhbGl6YXRpb24sIE9SIGluCglDSElMRC0+ZmlsZS0+Y29tbWFuZF9mbGFncy4KCSogZmlsZS5oIChzdHJ1Y3QgZmlsZSk6IE5ldyBtZW1iZXIgYGNvbW1hbmRfZmxhZ3MnLgoKU3VuIE9jdCAxNiAwMTowMTo1MSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IEJ1bXAgZmxhZyB2YWx1ZXMgZm9yIC0tbm8tcHJpbnQtZGlyZWN0b3J5IGFuZAoJLS13YXJuLXVuZGVmaW5lZC12YXJpYWJsZXMsIHNvIG5laXRoZXIgaXMgMSAod2hpY2ggaW5kaWNhdGVzIGEKCW5vbm9wdGlvbiBhcmd1bWVudCkuCgpTYXQgT2N0IDE1IDIzOjM5OjQ4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBBZGQgbWlzc2luZyBjb2RlIGluIC5JR05PUkUgdGVzdC4KCk1vbiBPY3QgMTAgMDQ6MDk6MDMgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRGVmaW5lICtEIGFuZCArRi4KClNhdCBPY3QgIDEgMDQ6MDc6NDggMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IERlZmluZSBoaWRkZW4gYXV0b21hdGljIHZhcmlhYmxlIHdpdGggY29tbWFuZAoJdmFycywgYW5kIE1BS0VPVkVSUklERVMgdG8gYSByZWZlcmVuY2UgdG8gdGhhdC4KCShkZWZpbmVfbWFrZWZsYWdzKTogSWYgcG9zaXhfcGVkYW50aWMsIHdyaXRlIGEgcmVmZXJlbmNlIHRvIHRoYXQKCWluc3RlYWQuCgpUaHUgU2VwIDI5IDAwOjE0OjI2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKHBvc2l4X3BlZGFudGljKTogTmV3IHZhcmlhYmxlLgoJKG1haW4pOiBTZXQgcG9zaXhfcGVkYW50aWMgaWYgLlBPU0lYIGlzIGEgdGFyZ2V0LgoJRml4IC5JR05PUkUgYW5kIC5TSUxFTlQgY2hlY2tzIHRvIHJlcXVpcmUgaXNfdGFyZ2V0LgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogRGVmaW5lIG5ldyBhdXRvbWF0aWMgdmFyaWFibGUKCSQrLCBsaWtlICReIGJ1dCBiZWZvcmUgY2FsbGluZyB1bmlxdWl6ZV9kZXBzLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBDYWxsIGRlbGV0ZV9jaGlsZF90YXJnZXRzIGZvciBub24tc2lnbmFsCgllcnJvciBpZiAuREVMRVRFX09OX0VSUk9SIGlzIGEgdGFyZ2V0LgoKVHVlIFNlcCAyNyAwMTo1NzoxNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcxLjMuCgpNb24gU2VwIDI2IDE4OjE2OjU1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERvbid0IGNoYW5nZSBDLT5maWxlLT5jb21tYW5kX3N0YXRlIHdoZW4KCWR5aW5nLiAgVGVzdCBpdCBvbmx5IGFmdGVyIGNhbGxpbmcgc3RhcnRfam9iX2NvbW1hbmQgZm9yIGEgbmV3Cgljb21tYW5kIGxpbmUuICBXaGVuIG5vIG1vcmUgY21kcywganVzdCBzZXQgQy0+ZmlsZS0+dXBkYXRlX3N0YXR1cy4KCShzdGFydF9qb2JfY29tbWFuZCk6IFdoZW4gdGhlIGxhc3QgbGluZSBpcyBlbXB0eSBvciB1bmRlciAtbiwgc2V0CglDLT5maWxlLT51cGRhdGVfc3RhdHVzLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogR3JvayBjc19ub3Rfc3RhcnRlZCBhZnRlciBzdGFydF9qb2JfY29tbWFuZAoJYXMgc3VjY2Vzcy4KCShuZXdfam9iKTogU2V0IEMtPmZpbGUtPnVwZGF0ZV9zdGF0dXMgd2hlbiB0aGVyZSBhcmUgbm8gY21kcy4KCShqb2JfbmV4dF9jb21tYW5kKTogV2hlbiBvdXQgb2YgbGluZXMsIGRvbid0IHNldAoJQ0hJTEQtPmZpbGUtPnVwZGF0ZV9zdGF0dXMgb3IgQ0hJTEQtPmZpbGUtPmNvbW1hbmRfc3RhdGUuCgoJKiBtYWluLmMgKHF1b3RlX2FzX3dvcmQpOiBSZW5hbWVkIGZyb20gc2hlbGxfcXVvdGUuICBUYWtlIG5ldyBhcmc7CglpZiBub256ZXJvLCBhbHNvIGRvdWJsZSAkcy4KCShtYWluKTogRGVmaW5lIE1BS0VPVkVSUklERVMgZnJvbSBjb21tYW5kX3ZhcmlhYmxlcyBoZXJlLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBEb24ndCB1c2UgY29tbWFuZF92YXJpYWJsZXMgaGVyZTsgaW5zdGVhZCB3cml0ZSBhCglyZWZlcmVuY2UgJChNQUtFT1ZFUlJJREVTKSBpbiBNQUtFRkxBR1MuICBNYWtlIHZhcnMgcmVjdXJzaXZlLgoKCSogZGlyLmMgW19fTVNET1NfX106IEZpeGVkIHR5cG8uCgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogUmVzZXQgRVhJU1RTIHdoZW4gc3RhdCBmYWlscy4KClNhdCBTZXAgMTAgMDM6MDE6MzUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jOiBJbmNsdWRlIDxhc3NlcnQuaD4gYW5kIHVzZSBhc3NlcnQgaW5zdGVhZCBvZiBwcmludGZzCiAgICAgICAgYW5kIGFib3J0LgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBMb29wIHVudGlsIG9wdGluZCBoaXRzIEFSR0MsIG5vdCBqdXN0Cgl1bnRpbCBnZXRvcHRfbG9uZyByZXR1cm5zIEVPRi4gIEluaXRpYWxpemUgQyB0byB6ZXJvIGJlZm9yZSBsb29wOwoJaW4gbG9vcCBpZiBDIGlzIEVPRiwgc2V0IG9wdGFyZyBmcm9tIEFSR1Zbb3B0aW5kKytdLCBlbHNlIGNhbGwKCWdldG9wdF9sb25nLgoJKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBVc2UgdmFyaWFibGVfZXhwYW5kIGluc3RlYWQgb2YKCWFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQuICBBbGxvY2F0ZSBhIGZyZXNoIGJ1ZmZlciB0byBjb3B5IHNwbGl0Cgl3b3JkcyBpbnRvOyBzY2FuIGNoYXJhY3RlcnMgYnkgaGFuZCB0byBicmVhayB3b3JkcyBhbmQKCWRlYmFja3NsYXNoaWZ5LgoJKHNoZWxsX3F1b3RlKTogTmV3IGZ1bmN0aW9uLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBBbGxvY2F0ZSBkb3VibGVkIHNwYWNlIGZvciBzd2l0Y2ggYXJncywgYW5kIGNvbW1hbmQKCXZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXM7IHVzZSBzaGVsbF9xdW90ZSB0byBxdW90ZSB0aG9zZSB0aGluZ3MuCgpGcmkgU2VwICA5IDAxOjM3OjQ3IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzEuMi4KCgkqIGFjY29uZmlnLmg6IEFkZCBIQVZFX1NZU19TSUdMSVNUIGFuZCBIQVZFX19TWVNfU0lHTElTVC4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogVGhlIG5vbi1vcHRpb24gcmV0dXJuIGZyb20gZ2V0b3B0IGlzCgkxLCBub3QgMC4KCShjb21tYW5kX3ZhcmlhYmxlcyk6IE5ldyB0eXBlIGFuZCB2YXJpYWJsZS4KCShkZWNvZGVfc3dpdGNoZXMsIGRlY29kZV9lbnZfc3dpdGNoZXMpOiBBZnRlciBtYWtpbmcgYSB2YXJpYWJsZQoJZGVmaW5pdGlvbiwgcmVjb3JkIHRoZSBzdHJ1Y3QgdmFyaWFibGUgcG9pbnRlciBpbiB0aGUKCWNvbW1hbmRfdmFyaWFibGVzIGNoYWluLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBJZiBBTEwsIHdyaXRlIHZhcmlhYmxlIGRlZmluaXRpb25zIGZvcgoJY29tbWFuZF92YXJpYWJsZXMuCgoJKiBtYWluLmMgKG90aGVyX2FyZ3MpOiBWYXJpYWJsZSByZW1vdmVkLgoJKGdvYWxzLCBsYXN0Z29hbCk6IE5ldyBzdGF0aWMgdmFyaWFibGVzIChtb3ZlZCBmcm9tIGF1dG8gaW4gbWFpbikuCgkobWFpbik6IERvbid0IHByb2Nlc3MgT1RIRVJfQVJHUyBhdCBhbGwuCglEb24ndCBzZXQgdmFyaWFibGUgTUFLRU9WRVJSSURFUyBhdCBhbGw7IGRlZmluZSBNQUtFIHRvIGp1c3QKICAgICAgICAkKE1BS0VfQ09NTUFORCkuCgkoaW5pdF9zd2l0Y2hlcyk6IFByZXBlbmQgYSAtIHtyZXR1cm4gaW4gb3JkZXJ9IGluc3RlYWQgb2YgYSArCgl7cmVxdWlyZSBvcmRlcn0uCgkoZGVjb2RlX3N3aXRjaGVzKTogRG9uJ3Qgc2V0IE9USEVSX0FSR1MgYXQgYWxsLgoJR3JvayAnXDAnIHJldHVybiBmcm9tIGdldG9wdF9sb25nIGFzIG5vbi1vcHRpb24gYXJndW1lbnQ7IHRyeQoJdmFyaWFibGUgZGVmaW5pdGlvbiBhbmQgKGlmICFFTlYpIGVudGVyIGdvYWwgdGFyZ2V0cyBoZXJlLgoJKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBVc2UgYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCB0byBzdG9yZSB2YWx1ZS4KCVVzZSBmaW5kX25leHRfdG9rZW4gdG8gc2ltcGxpZnkgd29yZC1zcGxpdHRpbmcgbG9vcC4gIERvbid0CglwcmVwZW5kIGEgZGFzaCB0byB1bmludGVycHJldGVkIHZhbHVlLiAgSW5zdGVhZCwgaWYgc3BsaXQgaW50bwoJb25seSBvbmUgd29yZCwgdHJ5IHZhcmlhYmxlIGRlZmluaXRpb24gYW5kIGZhaWxpbmcgdGhhdCBwcmVwZW5kIGEKCWRhc2ggdG8gdGhlIHdvcmQgYW5kIHBhc3MgaXQgdG8gZGVjb2RlX3N3aXRjaGVzIGFzIGEgc2luZ2xlIGFyZy4KCldlZCBTZXAgIDcgMDM6MDI6NDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IE9ubHkgcmVjaGVjayBtb2R0aW1lcyBpZgoJRklMRS0+Y29tbWFuZF9zdGF0ZSB3YXMgY3NfcnVubmluZyBvbiBlbnRyeSAobWVhbmluZyB0aGUgY29tbWFuZHMKCWFjdHVhbGx5IGp1c3QgcmFuKS4KCSh1cGRhdGVfZmlsZV8xKTogV2hlbmV2ZXIgd2Ugc2V0IEZJTEUtPnVwZGF0ZV9zdGF0dXMsIGNhbGwKCW5vdGljZV9maW5pc2hlZF9maWxlIGluc3RlYWQgb2YganVzdCBzZXRfY29tbWFuZF9zdGF0ZS4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogV2hlbmV2ZXIgd2Ugc2V0CglDSElMRC0+ZmlsZS0+dXBkYXRlX3N0YXR1cywgY2FsbCBub3RpY2VfZmluaXNoZWRfZmlsZSBpbnN0ZWFkIG9mCglqdXN0IHNldF9jb21tYW5kX3N0YXRlLgoKVHVlIFNlcCAgNiAxOToxMzo1NCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdT4KCgkqIGRlZmF1bHQuYzogQWRkIG1pc3NpbmcgIi4KCgkqIGpvYi5jOiBDaGFuZ2VkIGFsbCBhc3NpZ25tZW50cyBvZiBjb21tYW5kX3N0YXRlIG1lbWJlcnMgdG8gY2FsbHMKCXRvIHNldF9jb21tYW5kX3N0YXRlLgoJKiByZW1ha2UuYzogTGlrZXdpc2UuCgkqIGZpbGUuYyAoc2V0X2NvbW1hbmRfc3RhdGUpOiBOZXcgZnVuY3Rpb24uCgkqIGZpbGUuaDogRGVjbGFyZSBzZXRfY29tbWFuZF9zdGF0ZS4KCgkqIG1haW4uYyAoaW5pdF9zd2l0Y2hlcyk6IFB1dCBhICsgZmlyc3QgaW4gb3B0aW9ucy4KCk1vbiBKdWwgMjUgMTg6MDc6NDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCglNZXJnZSBNU0RPUy9HTzMyIHBvcnQgZnJvbSBESiBEZWxvcmllIDxkakBjdHJvbi5jb20+LgoJKiB2cGF0aC5jOiBDaGFuZ2VkIGFsbCB1c2VzIG9mICc6JyB0byBQQVRIX1NFUEFSQVRPUl9DSEFSLgoJKiBtYWluLmMgKGRpcmVjdG9yeV9iZWZvcmVfY2hkaXIpOiBOZXcgdmFyaWFibGUsIG1vdmVkIG91dCBvZiBtYWluCiAgICAgICAgKHdhcyBsb2NhbCkuCgkobWFpbikgW19fTVNET1NfX106IExvb2sgZm9yIFwgb3IgOiB0byBkZWxpbWl0IGxhc3QgY29tcG9uZW50IG9mCglQUk9HUkFNLiAgRG9uJ3QgZnJvYiBBUkdWWzBdIGJlZm9yZSBzZXR0aW5nIE1BS0VfQ09NTUFORCB2YXJpYWJsZS4KCShkaWUpOiBDaGFuZ2UgYmFjayB0byBgZGlyZWN0b3J5X2JlZm9yZV9jaGRpcicgYmVmb3JlIGR5aW5nLgoJKiBtYWtlLmggKFBBVEhfU0VQQVJBVE9SX0NIQVIpOiBOZXcgbWFjcm87IGRpZmZlcmluZyBkZWZucyBmb3IKICAgICAgICBbX19NU0RPU19fXSBhbmQgbm90LgoJKiBqb2IuYyBbX19NU0RPU19fXTogSW5jbHVkZSA8cHJvY2Vzcy5oPi4KCVtfX01TRE9TX19dIChkb3NfcGlkLCBkb3Nfc3RhdHVzLCBkb3NfYm5hbWUsIGRvc19iZW5hbWUsCglkb3NfYmF0Y2hfZmlsZSk6IE5ldyB2YXJpYWJsZXMuCgkocmVhcF9jaGlsZHJlbikgW19fTVNET1NfX106IERvbid0IGNhbGwgd2FpdDsganVzdCBleGFtaW5lIHRob3NlIHZhcnMuCgkodW5ibG9ja19zaWdzKSBbX19NU0RPU19fXTogRG8gbm90aGluZy4KCShzdGFydF9qb2JfY29tbWFuZCkgW19fTVNET1NfX106IFVzZSBzcGF3bnZwZSBpbnN0ZWFkIG9mIHZmb3JrICYgZXhlYy4KCShsb2FkX3Rvb19oaWdoKSBbX19NU0RPU19fXTogQWx3YXlzIHJldHVybiB0cnVlLgoJKHNlYXJjaF9wYXRoKSBbX19NU0RPU19fXTogQ2hlY2sgZm9yIDogb3IgLyBpbiBGSUxFIHRvIHB1bnQuCglVc2UgUEFUSF9TRVBBUkFUT1JfQ0hBUiBpbnN0ZWFkIG9mICc6Jy4KCShjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKSBbX19NU0RPU19fXTogV2hvbGx5IGRpZmZlcmVudAoJdmFsdWVzIGZvciBzaF9jaGFycyBhbmQgc2hfY21kcy4gIFdob2xseSBuZXcgY29kZSB0byBoYW5kbGUgc2hlbGwKCXNjcmlwdHMuCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJykgW19fTVNET1NfX106IFdob2xseSBuZXcKICAgICAgICBpbXBsZW1lbnRhdGlvbi4KCSogZGlyLmMgW19fTVNET1NfX10gKGRvc2lmeSk6IE5ldyBmdW5jdGlvbi4KCShkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcCkgW19fTVNET1NfX106IENhbGwgaXQgb24gRklMRU5BTUUgYW5kCglwcm9jZXNzIHRoZSByZXN1bHQgaW5zdGVhZCBvZiBGSUxFTkFNRSBpdHNlbGYuCgkoZmlsZV9pbXBvc3NpYmxlX3ApIFtfX01TRE9TX19dOiBMaWtld2lzZS4KCSogZGVmYXVsdC5jIFtfX01TRE9TX19dOiBEZWZpbmUgR0NDX0lTX05BVElWRS4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlcykgW19fTVNET1NfX106IFVzZSBgeV90YWIuYycgaW5zdGVhZCBvZiBgeS50YWIuYycuCgkoZGVmYXVsdF92YXJpYWJsZXMpIFtHQ0NfSVNfTkFUSVZFXTogU2V0IENDIGFuZCBDWFggdG8gYGdjYycsIFlBQ0MgdG8KCWBiaXNvbiAteScsIGFuZCBMRVggdG8gYGZsZXgnLgoJKiBjb25maWd1cmUuYmF0LCBjb25maWdoLmRvczogTmV3IGZpbGVzLgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpIFtfX01TRE9TX19dOiBKdXN0IHJlbW92ZQoJaW50ZXJtZWRpYXRlcyBhbmQgZXhpdC4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IEFkZCBwYXJlbnMgaW4gbGVuZ3RoCgljb21wdXRhdGlvbiBpbiAuU1VGRklYRVMgZGVwIGxvb3AgdG8gcXVpZXQgY29tcGlsZXIgd2FybmluZy4gIEZyb20KCUppbSBNZXllcmluZy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZyZWUgRklMRU5BTUUgaWYgd2UgYWxsb2NhdGVkIGl0LiAgRnJvbQogICAgICAgIEppbSBNZXllcmluZy4KCk1vbiBKdWwgIDQgMTc6NDc6MDggMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1pc2MuYyAoc2FmZV9zdGF0KTogTmV3IGZ1bmN0aW9uLCBFSU5UUi1zYWZlIHdyYXBwZXIgYXJvdW5kIHN0YXQuCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIHJlYWQuYyAoY29uc3RydWN0X2luY2x1ZGVfcGF0aCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogam9iLmMgKHNlYXJjaF9wYXRoKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBkaXIuYyAoZmluZF9kaXJlY3RvcnkpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV90YXJnZXQpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIGFyc2Nhbi5jIChhcl9tZW1iZXJfdG91Y2gpIFtFSU5UUl06IERvIEVJTlRSIGxvb3BpbmcgYXJvdW5kIGZzdGF0LgoJKiByZW1ha2UuYyAobmFtZV9tdGltZSk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSh0b3VjaF9maWxlKSBbRUlOVFJdOiBEbyBFSU5UUiBsb29waW5nIGFyb3VuZCBmc3RhdC4KCkZyaSBKdW4gMjQgMDU6NDA6MjQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoZWNrIGZvciBhIHNoZWxsIGNvbW1hbmQgZmlyc3QsIGFuZAoJdGhlbiBzdHJpcCBsZWFkaW5nIHRhYnMgYmVmb3JlIGZ1cnRoZXIgY2hlY2tpbmcgaWYgaXQncyBub3QgYQoJc2hlbGwgY29tbWFuZCBsaW5lLgoKCSogbWFrZS5oIFtfX2FybV06IFVuZGVmaW5lIFBPU0lYLgoJWyFfX0dOVV9MSUJSQVJZX18gJiYgIVBPU0lYICYmICFfUE9TSVhfVkVSU0lPTl06IERvbid0IGRlY2xhcmUgc3lzdGVtCglmdW5jdGlvbnMgdGhhdCByZXR1cm4gaW50LgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBBZnRlciBzd2FsbG93aW5nIGEKCWJhY2tzbGFzaC1uZXdsaW5lIGNvbWJpbmF0aW9uLCBpZiBJTlNUUklORyBpcyBzZXQgZ290byBzdHJpbmdfY2hhcgoJKG5ldyBsYWJlbCkgZm9yIG5vcm1hbCBJTlNUUklORyBoYW5kbGluZyBjb2RlLgoKU2F0IEp1biAgNCAwMToxMToyMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIHN5c19zaWdsaXN0IGFuZCBfc3lzX3NpZ2xpc3Qgd2l0aAoJQUNfSEFWRV9GVU5DUy4gIEluc3RlYWQgdXNlIHR3byBBQ19DT01QSUxFX0NIRUNLcy4KCk1vbiBNYXkgMjMgMTg6MjA6MzggMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MS4xIHJlbGVhc2VkLgoKCSogbWFrZS5oIFshX19HTlVfTElCUkFSWV9fICYmICFQT1NJWF06IEFsc28gdGVzdCAjaWZuZGVmCglfUE9TSVhfVkVSU0lPTiBmb3IgdGhlc2UgZGVjbGFyYXRpb25zLgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFtQT1NJWF06IFJlbW92ZSBib2d1cyAjaWZuZGVmcwoJYXJvdW5kICN1bmRlZnMgb2YgSEFWRV9TRVRSRVVJRCBhbmQgSEFWRV9TRVRSRUdJRC4KClNhdCBNYXkgMjEgMTY6MjY6MzggMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MSByZWxlYXNlZC4KCgkqIG1pc2MuYyBbR0VUTE9BREFWR19QUklWSUxFR0VEXSBbUE9TSVhdOiBEb24ndCB0ZXN0IFtIQVZFX1NFVFVJRF0KCWFuZCBbSEFWRV9TRVRHSURdLiAgRXZlcnkgc3lzdGVtIGhhcyB0aG9zZSwgYW5kIGNvbmZpZ3VyZSBkb2Vzbid0CgljaGVjayBmb3IgdGhlbS4KCgkqIG1ha2UuaCBbX1BPU0lYX1ZFUlNJT05dOiBEb24ndCAjZGVmaW5lIFBPU0lYICNpZmRlZiB1bHRyaXguCgoJKiBjb21wYXRNYWtlZmlsZSAobG9hZGF2Zyk6IERlcGVuZCBvbiBhbmQgdXNlIGxvYWRhdmcuYyBpbnN0ZWFkIG9mCglnZXRsb2FkYXZnLmMuCgkobG9hZGF2Zy5jKTogTGluayBvciBjb3B5IGl0IGZyb20gZ2V0bG9hZGF2Zy5jLgoJKGRpc3RjbGVhbik6IFJlbW92ZSBsb2FkYXZnLmMuCgpNb24gTWF5IDE2IDIyOjU5OjA0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAuNC4KCgkqIG1pc2MuYyBbR0VUTE9BREFWR19QUklWSUxFR0VEXSBbISBQT1NJWF06IFVuZGVmaW5lIEhBVkVfU0VURVVJRAoJYW5kIEhBVkVfU0VURUdJRC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IEluIFNDQ1MgcnVsZXMsIHB1dAoJJChTQ0NTX09VVFBVVF9PUFRJT04pIGJlZm9yZSAkPC4gIE9uIHNvbWUgc3lzdGVtcyAtRyBpcyBncm9ra2VkCglvbmx5IGJlZm9yZSB0aGUgZmlsZSBuYW1lLgoJKiBjb25maWd1cmUuaW4gKFNDQ1NfR0VUX01JTlVTX0cgY2hlY2spOiBQdXQgLUcgZmxhZyBiZWZvcmUgZmlsZSBuYW1lLgoKVHVlIE1heSAxMCAxNjoyNzozOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBTd2FsbG93CgliYWNrc2xhc2gtbmV3bGluZSBjb21iaW5hdGlvbnMgaW5zaWRlICcnIHN0cmluZ3MgdG9vLgoKVGh1IE1heSAgNSAwNDoxNToxMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBDYWxsIGNvbGxhcHNlX2NvbnRpbnVhdGlvbnMgb24gZWFjaCBsaW5lCgliZWZvcmUgYWxsIGVsc2UuCgpNb24gQXByIDI1IDE5OjMyOjAyIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE5vdGljZSBuZXdsaW5lIGluc2lkZQoJJycgc3RyaW5nIHdoZW4gUkVTVFAgaXMgbm9uLW51bGwuCgpGcmkgQXByIDIyIDE3OjMzOjMwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjMuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBSZXNldCBGSUxFIHRvIEctPmZpbGUgYWZ0ZXIgdGhlCglkb3VibGUtY29sb24gbG9vcCBzbyBpdCBpcyBuZXZlciBudWxsIGZvciBmb2xsb3dpbmcgY29kZS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZpeCBgb3ZlcnJpZGUgZGVmaW5lJyBwYXJzaW5nIHRvIHNraXAKCXdoaXRlc3BhY2UgYWZ0ZXIgYGRlZmluZScgcHJvcGVybHkuCgoJKiBjb21wYXRNYWtlZmlsZSAoc3JjZGlyKTogRGVmaW5lIGFzIEBzcmNkaXJAOyBkb24ndCByZWZlcmVuY2UKCSQoVlBBVEgpLgoJKGdsb2IvTWFrZWZpbGUpOiBOZXcgdGFyZ2V0LgoKVGh1IEFwciAyMSAxNjoxNjo1NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC4yLgoKCSogbWlzYy5jIChyZW1vdmVfY29tbWVudHMpOiBVc2UgZmluZF9jaGFyX3VucXVvdGUuCgkqIG1ha2UuaCAoZmluZF9jaGFyX3VucXVvdGUpOiBEZWNsYXJlIGl0LgoJKiByZWFkLmMgKGZpbmRfY2hhcl91bnF1b3RlKTogTmV3IGZ1bmN0aW9uLCBnZW5lcmFsaXplZCBmcm9tCglmaW5kX3BlcmNlbnQuCgkoZmluZF9wZXJjZW50LCBmaW5kX3NlbWljb2xvbiwgcGFyc2VfZmlsZV9zZXEpOiBVc2UgdGhhdC4KCldlZCBBcHIgMjAgMTg6NDI6MzkgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogQWx3YXlzIGFsbG9jYXRlIG5ldyBzdG9yYWdlIGZvcgoJRklMRS0+c3RlbS4gIEl0IGlzIG5vdCBzYWZlIHRvIHN0b3JlIFNURU0ncyBhZGRyZXNzIGJlY2F1c2UgaXQKCW1pZ2h0IGJlIGF1dG8gc3RvcmFnZS4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHNldGV1aWQgYW5kIHNldGVnaWQuCgkqIG1pc2MuYyBbSEFWRV9TRVRFVUlEXTogRGVjbGFyZSBzZXRldWlkLgoJW0hBVkVfU0VURUdJRF06IERlY2xhcmUgc2V0ZWdpZC4KCShtYWtlX2FjY2VzcywgdXNlcl9hY2Nlc3MpIFtIQVZFX1NFVEVVSURdOiBVc2Ugc2V0ZXVpZC4KCVtIQVZFX1NFVEVHSURdOiBVc2Ugc2V0ZWdpZC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFNldCBTVEFUVVMgdG8gRklMRS0+dXBkYXRlX3N0YXR1cywKCXRvIHByZXNlcnZlIHdoZXRoZXIgaXQncyAyIGZvciBlcnJvciBvciAxIGZvciAtcSB0cmlnZ2VyLiAgV2hlbgoJU1RBVFVTIGdldHMgbm9uemVybyBhbmQgLXEgaXMgc2V0LCBhbHdheXMgc3RvcCBpbW1lZGlhdGVseS4KCSogbWFpbi5jIChtYWluLCBkZWNvZGVfc3dpdGNoZXMpOiBEaWUgd2l0aCAyIGZvciBlcnJvcnMuCgkobWFpbik6IEFjY2VwdCAyIHJldHVybiBmcm9tIHVwZGF0ZV9nb2FsX2NoYWluIGFuZCBkaWUgd2l0aCB0aGF0LgoJKiBtaXNjLmMgKGZhdGFsLCBtYWtlZmlsZV9mYXRhbCk6IERpZSB3aXRoIDI7IDEgaXMgcmVzZXJ2ZWQgZm9yIC1xCglhbnN3ZXIuCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRGllIHdpdGggMiBmb3IgZXJyb3IuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBTZXQgdXBkYXRlX3N0YXR1cyB0byAyIGZvciBlcnJvci4gIFNldCBpdCB0bwoJMSB3aGVuIHdlIHdvdWxkIHJ1biBhIGNvbW1hbmQgYW5kIHF1ZXN0aW9uX2ZsYWcgaXMgc2V0LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgbWFyayBtYWtlZmlsZXMgYXMgcHJlY2lvdXMuICBKdXN0CglsaWtlIG90aGVyIHRhcmdldHMsIHRoZXkgY2FuIGJlIGxlZnQgaW5jb25zaXN0ZW50IGFuZCBpbiBuZWVkIG9mCglyZW1ha2luZyBieSBhYm9ydGVkIGNvbW1hbmRzLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogV3JpdGUgbm8gZXJyb3IgbXNnIGZvciAtaW5jbHVkZSBmaWxlLgoKVHVlIEFwciAgNSAwNToyMjoxOSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogRG9uJ3QgdW5ibG9jayBzaWduYWxzLgoKCSogZmlsZS5oIChzdHJ1Y3QgZmlsZSk6IENoYW5nZSBtZW1iZXIgYGRvdWJsZV9jb2xvbicgZnJvbSBmbGFnIHRvCglgc3RydWN0IGZpbGUgKicuCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogU2V0IGRvdWJsZV9jb2xvbiBwb2ludGVyIGluc3RlYWQgb2YgZmxhZy4KCSogbWFpbi5jIChtYWluKTogV2hlbiBkaXNxdWFsaWZ5aW5nIG1ha2VmaWxlcyBmb3IgdXBkYXRpbmcsIHVzZQoJZG91YmxlX2NvbG9uIHBvaW50ZXIgdG8gZmluZCBhbGwgZW50cmllcyBmb3IgYSBmaWxlLgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgZG91YmxlLWNvbG9uIGVudHJ5Cglmb3IgdGhlIGZpbGUsIHNldCBORVctPmRvdWJsZV9jb2xvbiB0byB0aGF0IHBvaW50ZXIuCgkoZmlsZV9oYXNoX2VudGVyKTogVXNlIEZJTEUtPmRvdWJsZV9jb2xvbiB0byBmaW5kIGFsbCBlbnRyaWVzIHRvCglzZXQgbmFtZS4KCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogRG8gaW5uZXIgbG9vcCBvbiBkb3VibGUtY29sb24gZW50cmllcy4KCSh1cGRhdGVfZmlsZSk6IFVzZSBGSUxFLT5kb3VibGVfY29sb24gcG9pbnRlciB0byBmaW5kIGFsbCBlbnRyaWVzLgoJKGZfbXRpbWUpOiBMaWtld2lzZS4KCShub3RpY2VfZmluaXNoZWRfZmlsZSk6IFByb3BhZ2F0ZSBtdGltZSBjaGFuZ2UgdG8gYWxsIGVudHJpZXMuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFJldHVybiBhZnRlciBhYm9ydC4KCkZyaSBBcHIgIDEgMTg6NDQ6MTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgkocGFyc2VfZmlsZV9zZXEpOiBXaGVuIHJlbW92aW5nIGFuIGVsdCB0aGF0IGlzIGp1c3QgYCknLCBwcm9wZXJseQoJZml4IHVwIHRoZSBwcmV2aW91cyBlbHQncyBuZXh0IHBvaW50ZXIuCgpNb24gTWFyIDI4IDE4OjMxOjQ5IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IERvIEFDX1NFVF9NQUtFLgoJKiBHTlVtYWtlZmlsZSAoTWFrZWZpbGUuaW4pOiBFZGl0IE1BS0UgYXNzaWdubWVudCBpbnRvIEBTRVRfTUFLRUAuCgpGcmkgTWFyICA0IDAwOjAyOjMyIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChzdWJzdF9leHBhbmQpOiBJZiBCWV9XT1JEIG9yIFNVRkZJWF9PTkxZIGlzIHNldCBhbmQKCXRoZSBzZWFyY2ggc3RyaW5nIGlzIHRoZSBlbXB0eSBzdHJpbmcsIGZpbmQgYSBtYXRjaCBhdCB0aGUgZW5kIG9mCgllYWNoIHdvcmQgKHVzaW5nIGVuZF9vZl90b2tlbiBpbiBwbGFjZSBvZiBzaW5kZXgpLgoKCSogbWlzYy5jIChlbmRfb2ZfdG9rZW4pOiBEb24ndCB0cmVhdCBiYWNrc2xhc2hlcyBzcGVjaWFsbHk7IHlvdQoJY2FuIG5vIGxvbmdlciBlc2NhcGUgYmxhbmtzIHdpdGggYmFja3NsYXNoZXMgaW4gZXhwb3J0LCB1bmV4cG9ydCwKCWFuZCB2cGF0aC4gIFRoaXMgd2FzIG5ldmVyIGRvY3VtZW50ZWQgYW55d2F5LgoKVGh1IE1hciAgMyAyMzo1Mzo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogVmFyaWFibGUgbmFtZSBmb3IgYGRlZmluZScgaXMgbm90IGp1c3QKCWZpcnN0IHRva2VuOyB1c2Ugd2hvbGUgcmVzdCBvZiBsaW5lIGFuZCBzdHJpcCB0cmFpbGluZyBibGFua3MuCgpXZWQgRmViIDE2IDE2OjAzOjQ1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAuMS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEFkZCAtZCBtc2cgc3RhdGluZyBhcmdzLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogVXNlIGlzc3BhY2UgdG8gc2tpcCBvdmVyIGxlYWRpbmcKCXdoaXRlc3BhY2UsIGFuZCBleHBsaWNpdGx5IGF2b2lkIHNraXBwaW5nIG92ZXIgdGFicy4gIERvbid0IHdhbnQKCXRvIHNraXAganVzdCBzcGFjZXMgdGhvdWdoOyBmb3JtZmVlZHMgZXQgYWwgc2hvdWxkIGJlIHNraXBwZWQuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19ocHV4XTogQWRkIGYgaW4gQVJGTEFHUy4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKSBbX19ocHV4XTogU3VidHJhY3QgMiBpbnN0ZWFkIG9mIDEgZnJvbQoJc2l6ZW9mIGFyX25hbWUgZm9yIG1heCBsZW5ndGggdG8gY29tcGFyZS4KCgkqIG1pc2MuYyBbR0VUTE9BREFWR19QUklWSUxFR0VEXSBbUE9TSVhdOiBVbmRlZmluZSBIQVZFX1NFVFJFVUlECgkjaWZkZWYgSEFWRV9TRVRVSUQ7IGxpa2V3aXNlIEhBVkVfU0VUUkVHSUQgYW5kIEhBVkVfU0VUR0lELgoKCSogbWFpbi5jIChtYWluKTogQ2FsbCB1c2VyX2FjY2VzcyBhZnRlciBzZXR0aW5nIGBwcm9ncmFtJywgaW4gY2FzZQoJaXQgbmVlZHMgdG8gdXNlIGl0IGluIGFuIGVycm9yIG1lc3NhZ2UuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZ25vcmUgYW4gZW1wdHkgbGluZSBzdGFydGluZyB3aXRoIGEgdGFiLgoKVGh1IEZlYiAxMCAyMTo0NTozMSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluIChBQ19TWVNfU0lHTElTVF9ERUNMQVJFRCk6IFVzZSB0aGlzIGluc3RlYWQgb2YKCUFDX0NPTVBJTEVfQ0hFQ0sgdGhhdCBpcyBub3cgaXRzIGNvbnRlbnRzLgoKRnJpIEZlYiAgNCAxNjoyODo1NCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oOiAjdW5kZWYgc3RyZXJyb3IgYWZ0ZXIgI2luY2x1ZGUgPHN0cmluZy5oPi4KCVshIEFOU0lfU1RSSU5HXTogRGVjbGFyZSBzdHJlcnJvci4KClRodSBGZWIgIDMgMDI6MjE6MjIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1pc2MuYyAoc3RyZXJyb3IpOiAjdW5kZWYgYW55IG1hY3JvIGJlZm9yZSBmdW5jdGlvbiBkZWZpbml0aW9uLgoKTW9uIEphbiAzMSAxOTowNzoyMyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBDYWxjdWxhdGUgQkVHIGJlZm9yZSBsb29wCgl0byBzdHJpcCBibGFua3MgYnkgZGVjcmVtZW50aW5nIEVORC4gIERvbid0IGRlY3IgRU5EIHRvIGJlZm9yZSBCRUcuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBTa2lwIG92ZXIgbGVhZGluZyBzcGFjZSBjaGFyYWN0ZXJzLCBidXQKCW5vdCB0YWJzLCBhZnRlciByZW1vdmluZyBjb250aW51YXRpb25zIGFuZCBjb21tZW50cyAoaXQgdXNlZCB0bwoJdXNlIGlzc3BhY2UpLgoKVHVlIEphbiAyNSAxNjo0NTowNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBJbiAkKEBEKSBldCBhbCwgdXNlCglwYXRzdWJzdCB0byByZW1vdmUgdHJhaWxpbmcgc2xhc2guCgoJKiBjb21tYW5kcy5jIChkZWxldGVfdGFyZ2V0KTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglkZWxldGVfY2hpbGRfdGFyZ2V0cy4gIENoZWNrIGZvciBhcmNoaXZlIG1lbWJlcnMgYW5kIGdpdmUgc3BlY2lhbCBtc2cuCgkoZGVsZXRlX2NoaWxkX3RhcmdldHMpOiBVc2UgZGVsZXRlX3RhcmdldC4KCk1vbiBKYW4gMTcgMTc6MDM6MjIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBVc2UgJChURVhJMkRWSV9GTEFHUykgaW4KCXRleGkyZHZpIHJ1bGVzLglVc2UgJChNQUtFSU5GT19GTEFHUykgaW4gbWFrZWluZm8gcnVsZXMuCgpUdWUgSmFuIDExIDE5OjI5OjU1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAodGFyZmlsZXMpOiBPbWl0IG1ha2UtZG9jLgoJKG1ha2UtJCh2ZXJzaW9uKS50YXIpOiBJbmNsdWRlIG1ha2UuaW5mbyouCgpGcmkgSmFuICA3IDE2OjI3OjAwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoY29uZmlndXJlLCBjb25maWcuaC5pbik6IENvbW1lbnQgb3V0IHJ1bGVzLgoKVGh1IEphbiAgNiAxODowODowOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGJpbnByZWZpeCwgbWFucHJlZml4KTogTmV3IHZhcmlhYmxlcy4KCShpbnN0bmFtZSk6IFZhcmlhYmxlIHJlbW92ZWQuCgkoaW5zdGFsbCk6IFVzZSAkKHtiaW4sbWFufXByZWZpeCltYWtlIGluIHBsYWNlIG9mICQoaW5zdG5hbWUpLgoJRmlsZSB0YXJnZXRzIGxpa2V3aXNlZCByZW5hbWVkLgoKTW9uIEphbiAgMyAxNzo1MDoyNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwIHJlbGVhc2VkLgoKVGh1IERlYyAyMyAxNDo0Njo1NCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LjMuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogSW5zaWRlIG11bHRpLXdvcmQgYXJjaGl2ZSByZWYKCXRyYW5zbGF0aW9uIGxvb3AsIGNoZWNrIE5FVzE9PTAgYXQgZW5kIGFuZCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhcik6IERpc3RyaWJ1dGUgaW5zdGFsbC5zaC4KCSogaW5zdGFsbC5zaDogTmV3IGZpbGUuCgoJKiBjb25maWd1cmUuaW4gKFNDQ1NfR0VUX01JTlVTX0cgY2hlY2spOiBQdXQgcmVkaXJlY3Rpb24gZm9yIGFkbWluCgljbWRzIG91dHNpZGUgc3Vic2hlbGwgcGFyZW5zLCB0byBhdm9pZCAiY29tbWFuZCBub3QgZm91bmQiIG1zZ3MKCWZyb20gdGhlIHNoZWxsLgoKV2VkIERlYyAyMiAxNzowMDo0MyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluIChTQ0NTX0dFVF9NSU5VU19HIGNoZWNrKTogUHV0IC1HIGZsYWcgbGFzdCBpbiBnZXQgY21kLgoJUmVkaXJlY3Qgb3V0cHV0ICYgZXJyb3IgZnJvbSBnZXQgdG8gL2Rldi9udWxsLgoJRml4IHJldmVyc2VkIHNlbnNlIG9mIHRlc3QuCgpGcmkgRGVjIDE3IDE1OjMxOjM2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKFNDQ1NfR0VUX01JTlVTX0cgY2hlY2spOiBVc2UgcGFyZW5zIGluc3RlYWQgb2YKCWJyYWNlcyBpbnNpZGUgaWYgY29uZGl0aW9uIGNvbW1hbmQ7IHNvbWUgc2hlbGxzIGxvc2UuCgpUaHUgRGVjIDE2IDE1OjEwOjIzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjkuMi4KCgkqIGFyc2Nhbi5jIFtNX1VOSVhdOiBNb3ZlICN1bmRlZiBNX1hFTklYIGZvciBQT1JUQVIgc3R1ZmYuCgkoUE9SVEFSKSBbTV9YRU5JWF06IERlZmluZSB0byAwIGluc3RlYWQgb2YgMS4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IE9ubHkgZXhwb3J0IE1BS0VGTEFHUyBpZiAhQUxMLgoKV2VkIERlYyAxNSAxNzo0Nzo0OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogQ2FzdCByZXN1bHQgb2YgcG9pbnRlciBhcml0aCB0byB1bnNpZ25lZCBpbnQKCWJlZm9yZSBwYXNzaW5nIHRvIGRlZmluZV92YXJpYWJsZSBmb3IgZW52YXJzLiAgTWF0dGVycyB3aGVuCglzaXplb2YodW5zaWduZWQpIT1zaXplb2YocHRyZGlmZl90KS4KClR1ZSBEZWMgMTQgMTQ6MjE6MTYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogQWRkIG5ldyBjaGVjayBmb3IgU0NDU19HRVRfTUlOVVNfRy4KCSogY29uZmlnLmguaW46IEFkZCAjdW5kZWYgU0NDU19HRVRfTUlOVVNfRy4KCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogVXNlIGAkKFNDQ1NfT1VUUFVUX09QVElPTiknIGluCglwbGFjZSBvZiBgLUcgJEAnIGluIFNDQ1MgY29tbWFuZHMuCgkoZGVmYXVsdF92YXJpYWJsZXMpIFtTQ0NTX0dFVF9NSU5VU19HXTogRGVmaW5lIFNDQ1NfT1VUUFVUX09QVElPTgoJdG8gIi1HJEAiLgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBQdXQgdG91Y2ggc3RhbXAtY29uZmlnIGluIHNlY29uZCBhcmcKCShzbyBpdCBnb2VzIGluIGNvbmZpZy5zdGF0dXMpLCByYXRoZXIgdGhhbiBhZnRlcndhcmQuCgoJKiBhci5jIChhcl9tZW1iZXJfZGF0ZSk6IERvbid0IGNhbGwgZW50ZXJfZmlsZSBvbiB0aGUgYXJjaGl2ZSBmaWxlCglpZiBpdCBkb2Vzbid0IGV4aXN0IChieSBmaWxlX2V4aXN0c19wKS4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpL21ha2UuaW5mbyk6IFJlcGxhY2UgYCQkZC9mb28uaW5mbycKCXdpdGggYCQkZGlyL21ha2UuaW5mbycgaW4gaW5zdGFsbC1pbmZvIGludm9jYXRpb24gKG9vcHMpLgoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBPbmx5IHNldCBMQVNUUEFUSCBzZXQgUEFUSCB3aGVuCgl3ZSBkbyBub3QgdW5saW5rIGFuZCBmcmVlIFBBVEguCgoJKiBmaWxlLmMgKHByaW50X2ZpbGVfZGF0YV9iYXNlKTogRml4IGludmVydGVkIGNhbGN1bGF0aW9uIGZvcgoJYXZlcmFnZSBmaWxlcyBwZXIgaGFzaCBidWNrZXQuCgoJKiByZWFkLmMgKHJlYWRsaW5lKTogV2hlbiB3ZSBzZWUgYSBOVUwsIGdpdmUgb25seSBhIHdhcm5pbmcgYW5kCglzeW50aGVzaXplIGEgbmV3bGluZSB0byB0ZXJtaW5hdGUgdGhlIGJ1aWxkaW5nIGxpbmUgKHVzZWQgdG8KCWZhdGFsKS4gIE1vdmUgZmdldHMgY2FsbCBpbnRvIHRoZSBsb29wIGNvbmRpdGlvbiwgYW5kIGFmdGVyIHRoZQoJbG9vcCB0ZXN0IGZlcnJvciAodXNlZCB0byB0ZXN0ICFmZW9mIGluIHRoZSBsb29wKS4KCkZyaSBEZWMgIDMgMTY6NDA6MzEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHN0cmVycm9yIGluIEFDX0hBVkVfRlVOQ1MuCgpUaHUgRGVjICAyIDE1OjM3OjUwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJRGlmZmVyZW50aWF0ZSBkaWZmZXJlbnQgZmxhdm9ycyBvZiBtaXNzaW5nIG1ha2VmaWxlIGVycm9yIG1zZ3MsCglyZW1vdmluZyBncmF0dWl0b3VzIGBmb3BlbjogJyBhbmQgZ2l2aW5nIGNhbGxlciBmb3IgaW5jbHVkZWQgbWFrZWZpbGVzLgoJKiBtaXNjLmMgWyEgSEFWRV9TVFJFUlJPUl06IERlZmluZSBvdXIgb3duIHN0cmVycm9yIGhlcmUuCgkocGVycm9yX3dpdGhfbmFtZSwgcGZhdGFsX3dpdGhfbmFtZSk6IFVzZSBzdHJlcnJvciBpbnN0ZWFkIG9mCglyZXBsaWNhdGluZyBpdHMgZnVuY3Rpb25hbGl0eS4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmV0dXJuIGludCBpbnN0ZWFkIG9mIHZvaWQuCgkocmVhZF9hbGxfbWFrZWZpbGVzLCByZWFkX21ha2VmaWxlKTogQ2hhbmdlIGNhbGxlcnMgdG8gbm90aWNlIHplcm8KCXJldHVybiBhbmQgZ2l2ZSBlcnJvciBtc2cuCgpUaHUgTm92IDExIDExOjQ3OjM2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjkuMS4KCgkqIGRlZmF1bHQuYzogUHV0IGAtRyAkQCcgYmVmb3JlICQ8IGluIFNDQ1MgY21kcy4KCldlZCBOb3YgMTAgMDY6MDY6MTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEFmdGVyIHRyeWluZyBhIHZhcmlhYmxlIGRlZm4sIG5vdGljZSBpZgoJdGhlIGxpbmUgYmVnaW5zIHdpdGggYSB0YWIsIGFuZCBkaWFnbm9zZSBhbiBlcnJvci4KClN1biBOb3YgIDcgMDg6MDc6MzcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4KCldlZCBOb3YgIDMgMDY6NTQ6MzMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4xMC4KCgkqIGltcGxpY2l0LmMgKHRyeV9pbXBsaWNpdF9ydWxlKTogTG9vayBmb3IgYSBub3JtYWwgcnVsZSBiZWZvcmUgYW4KCWFyY2hpdmUgcnVsZS4KCkZyaSBPY3QgMjkgMTY6NDU6MjggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNvcnQnKTogRG91YmxlIE5XT1JEUyB3aGVuIGl0CglvdmVyZmxvd3MsIGluc3RlYWQgb2YgYWRkaW5nIGZpdmUuCgoJKiBjb21wYXRNYWtlZmlsZSAoY2xlYW4pOiBSZW1vdmUgbG9hZGF2Zy4KCldlZCBPY3QgMjcgMTc6NTg6MzMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC45LgoKCSogZmlsZS5oIChORVdfTVRJTUUpOiBEZWZpbmUgbmV3IG1hY3JvLgoJKiBtYWluLmMgKG1haW4pOiBTZXQgdGltZSBvZiBORVdfRklMRVMgdG8gTkVXX01USU1FLCBub3QgdG8KCWN1cnJlbnQgdGltZSByZXR1cm5lZCBmcm9tIHN5c3RlbS4gIFJlbW92ZWQgdmFyaWFibGUgTk9XLgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBVc2UgTkVXX01USU1FIGluIHBsYWNlIG9mCgljdXJyZW50IHRpbWUgaGVyZSB0b28uCgpUdWUgT2N0IDI2IDE5OjQ1OjM1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguOC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogRG9uJ3QgY2xlYXIgTVVTVF9NQUtFIHdoZW4gRklMRSBoYXMgbm8KCWNtZHMgYW5kICFERVBTX0NIQU5HRUQgdW5sZXNzIGFsc28gIU5PRVhJU1QuCgpNb24gT2N0IDI1IDE1OjI1OjIxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogV2hlbiBjb252ZXJ0aW5nIG11bHRpLXdvcmQgYXJjaGl2ZQoJcmVmcywgaWdub3JlIGEgd29yZCBiZWdpbm5pbmcgd2l0aCBhICcoJy4KCkZyaSBPY3QgMjIgMDI6NTM6MzggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHN5cy90aW1lYi5oLgoJKiBtYWtlLmggW0hBVkVfU1lTX1RJTUVCX0hdOiBUZXN0IHRoaXMgYmVmb3JlIGluY2x1ZGluZyBpdC4KClRodSBPY3QgMjEgMTY6NDg6MTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC43LgoKCSogcnVsZS5jIChjb252ZXJ0X3N1ZmZpeF9ydWxlKTogTmV3IGxvY2FsIFRBUkdQRVJDRU5ULiAgU2V0IGl0IHRvCglUQVJHTkFNRSsxIGZvciAiKCUubykiLCB0byBUQVJHTkFNRSBmb3IgIiUuPyIuICBVc2UgaXQgaW4gcGxhY2Ugb2YKCVRBUkdOQU1FIHRvIGluaXRpYWxpemUgUEVSQ0VOVFNbMF0uCgpNb24gT2N0IDE4IDA2OjQ5OjM1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IFVzZSBBQ19IQVZFX0hFQURFUlModW5pc3RkLmgpIGluc3RlYWQgb2YgQUNfVU5JU1REX0guCglSZW1vdmUgQUNfVVNHOyBpdCBpcyBubyBsb25nZXIgdXNlZC4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZSk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJcHJpbnRfZmlsZV9kYXRhX2Jhc2UuCgkocHJpbnRfZmlsZV9kYXRhX2Jhc2UpOiBDYWxsIGl0LgoJKiBydWxlLmMgKHByaW50X3J1bGUpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXByaW50X3J1bGVfZGF0YV9iYXNlLgoJKHByaW50X3J1bGVfZGF0YV9iYXNlKTogQ2FsbCBpdC4KClRodSBPY3QgMTQgMTQ6NTQ6MDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRlZmF1bHQuYyAoaW5zdGFsbF9kZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuCglvdXQgb2YgaW5zdGFsbF9kZWZhdWx0X2ltcGxpY2l0X3J1bGVzLgoJKGluc3RhbGxfZGVmYXVsdF9pbXBsaWNpdF9ydWxlcyk6IE1vdmUgc3VmZml4IHJ1bGUgY29kZSB0aGVyZS4KCSogbWFrZS5oOiBEZWNsYXJlIGluc3RhbGxfZGVmYXVsdF9zdWZmaXhfcnVsZXMuCgkqIG1haW4uYyAobWFpbik6IENhbGwgaW5zdGFsbF9kZWZhdWx0X3N1ZmZpeF9ydWxlcyBiZWZvcmUgcmVhZGluZwoJbWFrZWZpbGVzLiAgTW92ZSBjb252ZXJ0X3RvX3BhdHRlcm4gY2FsbCBiZWZvcmUKCWluc3RhbGxfZGVmYXVsdF9pbXBsaWNpdF9ydWxlcy4KCgkqIGpvYi5oIChzdHJ1Y3QgY2hpbGQpOiBNYWtlIGBwaWQnIG1lbWJlciB0eXBlIGBwaWRfdCcgaW5zdGVhZCBvZgoJYGludCcuCgoJKiBjb21wYXRNYWtlZmlsZSAoUkFOTElCKTogTmV3IHZhcmlhYmxlLCBzZXQgYnkgY29uZmlndXJlLgoJKGdsb2IvbGliZ2xvYi5hKTogUGFzcyBSQU5MSUIgdmFsdWUgZG93biB0byBzdWJtYWtlLgoKCUZpeGVzIGZvciBTQ08gMy4yICJkZXZzeXMgNC4yIiBmcm9tIHBzc0B0Zm4uY29tIChQZXRlciBTYWx2aXR0aSkuCgkqIG1ha2UuaDogSW5jbHVkZSA8c3lzL3RpbWViLmg+IGJlZm9yZSA8dGltZS5oPiBmb3IgU0NPIGxvc3NhZ2UuCgkqIGpvYi5jIFshIGdldGR0YWJsZXNpemVdIFshIEhBVkVfR0VURFRBQkxFU0laRV06IElmIE5PRklMRSBpcyBub3QKCWRlZmluZWQgYnV0IE5PRklMRVNfTUFYIGlzLCBkZWZpbmUgaXQgdG8gYmUgdGhhdC4KCk1vbiBPY3QgMTEgMTk6NDc6MzMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyKTogRGVwZW5kIG9uIGFjY29uZmlnLmgsIHNvIGl0CglpcyBkaXN0cmlidXRlZC4KClN1biBPY3QgIDMgMTU6MTU6MzMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IEFkZCBgLUcgJEAnIHRvIFNDQ1MgZ2V0IGNtZHMuCgpUdWUgU2VwIDI4IDE0OjE4OjIwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFkZCBeIHRvIFNIX0NIQVJTOyBpdAoJaXMgYW5vdGhlciBzeW1ib2wgZm9yIHwgaW4gc29tZSBzaGVsbHMuCgkqIG1haW4uYyAobWFpbik6IEFkZCBpdCB0byBDTURfREVGUyBxdW90aW5nIGxpc3QgYXMgd2VsbC4KCk1vbiBTZXAgMjAgMTg6MDU6MjQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogUmVtb3ZlICc9JyBmcm9tCglTSF9DSEFSUy4gIE9ubHkgcHVudCBvbiAnPScgaWYgaXQgaXMgdW5xdW90ZWQgaW4gYSB3b3JkIGJlZm9yZSB0aGUKCWZpcnN0IHdvcmQgd2l0aG91dCBhbiB1bnF1b3RlZCAnPScuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBTZXQgdl9leHBvcnQgZm9yIE1BS0VGTEFHUy4KCkZyaSBTZXAgMTcgMDA6Mzc6MTggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogVXNlIC5ERUZBVUxUIGNtZHMgZm9yIHBob255IHRhcmdldHMuCgoJKiBtYWtlLmggW19BSVggJiYgX1BPU0lYX1NPVVJDRV06IERlZmluZSBQT1NJWC4KCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV9jaGlsZF90YXJnZXRzKTogRG9uJ3QgZGVsZXRlIHBob255IGZpbGVzLgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogU2V0IENPTU1BTkRTX1JFQ1VSU0UgaW4gRkxBR1MgaWYgd2UKCXNlZSBhIGArJyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUuCgpUaHUgU2VwICA5IDE3OjU3OjE0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNi4KCldlZCBTZXAgIDggMjA6MTQ6MjEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IERlZmluZSBNQUtFRkxBR1Mgd2l0aCBvX2ZpbGUsIG5vdCBvX2Vudi4KCk1vbiBBdWcgMzAgMTI6MzE6NTggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmQpOiBGYXRhbCBvbiBhbiB1bnRlcm1pbmF0ZWQgcmVmZXJlbmNlLgoKVGh1IEF1ZyAxOSAxNjoyNzo1MyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjUuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IERlZmluZSBuZXcgb19kZWZhdWx0Cgl2YXJpYWJsZSBgTUFLRV9WRVJTSU9OJyBmcm9tIHZlcnNpb25fc3RyaW5nIGFuZCByZW1vdGVfZGVzY3JpcHRpb24uCgoJKiBtYWtlLmggKHZlcnNpb25fc3RyaW5nLCByZW1vdGVfZGVzY3JpcHRpb24pOiBEZWNsYXJlIHRoZXNlIGhlcmUuCgkqIG1haW4uYzogRG9uJ3QgZGVjbGFyZSB2ZXJzaW9uX3N0cmluZy4KCShwcmludF92ZXJzaW9uKTogRG9uJ3QgZGVjbGFyZSByZW1vdGVfZGVzY3JpcHRpb24uCgpXZWQgQXVnIDE4IDE1OjAxOjI0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGcmVlIHNwYWNlIHBvaW50ZWQgdG8gYnkgQ09ORElUSU9OQUxTCgliZWZvcmUgcmVzdG9yaW5nIHRoZSBvbGQgcG9pbnRlci4KCk1vbiBBdWcgMTYgMTc6MzM6MzYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICgkKG9ianMpKTogRGVwZW5kIG9uIGNvbmZpZy5oLgoKCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogRGVwZW5kIG9uIGNvbXBhdE1ha2VmaWxlLgoKCSogY29uZmlndXJlLmluOiBUb3VjaCBzdGFtcC1jb25maWcgYWZ0ZXIgQUNfT1VUUFVULgoKRnJpIEF1ZyAxMyAxNjowNDoyMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjQuCgpUaHUgQXVnIDEyIDE3OjE4OjU3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmg6IEluY2x1ZGUgPGNvbmZpZy5oPiBpbnN0ZWFkIG9mICJjb25maWcuaCIuCgpXZWQgQXVnIDExIDAyOjM1OjI1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBNYWtlIGFsbCB2YXJpYWJsZXMgaW50ZXJuZWQgZnJvbSBFTlZQIGJlIHZfZXhwb3J0LgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IEluIHZfZGVmYXVsdCBjYXNlLCBkb24ndAoJY2hlY2sgZm9yIGFuIG9fZmlsZSB2YXJpYWJsZSB0aGF0IGBnZXRlbnYnIGZpbmRzLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBOZXcgbG9jYWwgdmFyaWFibGUgQU5ZX0xPQ0FMOyBzZXQgaXQKCXdoaWxlIHNldHRpbmcgQU5ZX1JFTU9URS4gIElmICFBTllfTE9DQUwsIGRvbid0IHdhaXQgZm9yIGxvY2FsIGtpZHMuCgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBjYWxsIGRlY29kZV9lbnZfc3dpdGNoZXMgb24gTUZMQUdTLiAgRE9DIFRISVMuCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiAjaWYgMCBvdXQgZnJlZWluZyBvZiBFTlZQIHNpbmNlIGl0CglpcyBlbnZpcm9uLgoKTW9uIEF1ZyAgOSAxNzozNzoyMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjMuCgoJKiByZW1vdGUtc3R1Yi5jIChyZW1vdGVfc3RhdHVzKTogU2V0IGVycm5vIHRvIEVDSElMRCBiZWZvcmUgcmV0dXJuLgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IFNjYW4gdGhlIGNoYWluIGZvciByZW1vdGUgY2hpbGRyZW4gYW5kCgluZXZlciBjYWxsIHJlbW90ZV9zdGF0dXMgaWYgdGhlcmUgYXJlIG5vbmUuCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpOiAjaWYgMCBvdXQgY2FsbGluZwoJdGFyZ2V0X2Vudmlyb25tZW50OyBqdXN0IHNldCBFTlZQIHRvIGVudmlyb24gaW5zdGVhZC4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQ2hlY2sgZm9yIG5lZ2F0aXZlIHJldHVybiBmcm9tCglyZW1vdGVfc3RhdHVzIGFuZCBmYXRhbCBmb3IgaXQuCglXaGVuIGJsb2NraW5nIGxvY2FsIGNoaWxkIHdhaXQgcmV0dXJucyAwLCB0aGVuIHRyeSBhIGJsb2NraW5nIGNhbGwKCXRvIHJlbW90ZV9zdGF0dXMuCgpUdWUgQXVnICAzIDAwOjE5OjAwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoY2xlYW4pOiBEZWxldGUgbWFrZS5pbmZvKiBhbmQgbWFrZS5kdmkgaGVyZS4KCShkaXN0Y2xlYW4pOiBOb3QgaGVyZS4KCgkqIGRlcC5oIChSTV8qKTogVXNlICNkZWZpbmVzIGluc3RlYWQgb2YgZW51bSB0byBhdm9pZCBsb3NzYWdlIGZyb20KCWNvbXBpbGVycyB0aGF0IGRvbid0IGxpa2UgZW51bSB2YWx1ZXMgdXNlZCBhcyBpbnRzLgoKTW9uIEF1ZyAgMiAxNjo0NjozNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGxvYWRhdmcpOiBBZGQgJChMT0FETElCRVMpLgoKU3VuIEF1ZyAgMSAxNjowMToxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjIuCgoJKiBjb21wYXRNYWtlZmlsZSAobG9hZGF2ZywgY2hlY2stbG9hZGF2Zyk6IE5ldyB0YXJnZXRzLgoJKGNoZWNrKTogRGVwZW5kIG9uIGNoZWNrLWxvYWRhdmcuCgoJKiBjb21wYXRNYWtlZmlsZSAoZ2xvYi9saWJnbG9iLmEpOiBEZXBlbmQgb24gY29uZmlnLmguCgoJKiBtaXNjLmMgKGxvZ19hY2Nlc3MpOiBXcml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXQuCgpGcmkgSnVsIDMwIDAwOjA3OjAyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMS4KClRodSBKdWwgMjkgMjM6MjY6NDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoU1lTX1NJR0xJU1RfREVDTEFSRUQpOiBJbiB0ZXN0IHByb2dyYW0gaW5jbHVkZQoJPHVuaXN0ZC5oPiAjaWZkZWYgSEFWRV9VTklTVERfSC4KCgkqIGNvbXBhdE1ha2VmaWxlICguUEhPTlkpOiBQdXQgYWZ0ZXIgYGFsbCcgZXQgYWwuCgoJKiBjb25maWd1cmUuaW46IEFkZCBBQ19JUklYX1NVTi4KCldlZCBKdWwgMjggMTc6NDE6MTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4KCk1vbiBKdWwgMjYgMTQ6MzY6NDkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny44LgoKU3VuIEp1bCAyNSAyMjowOTowOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjcuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS9tYWtlLmluZm8pOiBEb24ndCB1c2UgJChpbnN0bmFtZSkuCglSdW4gaW5zdGFsbC1pbmZvIHNjcmlwdCBpZiBwcmVzZW50LgoKRnJpIEp1bCAyMyAxNjowMzo1MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtTVEFUX01BQ1JPU19CUk9LRU5dOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBbdXRzXS4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX1NUQVRfTUFDUk9TX0JST0tFTi4KCldlZCBKdWwgMTQgMTg6NDg6MTEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny42LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVjb2duaXplIGRpcmVjdGl2ZSBgLWluY2x1ZGUnLCBsaWtlCglgaW5jbHVkZScgYnV0IHNldHMgUk1fRE9OVENBUkUgZmxhZy4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IElmIEZJTEUgaXMgbmlsLCB1c2UKCWN1cnJlbnRfdmFyaWFibGVfc2V0X2xpc3QgaW4gcGxhY2Ugb2YgRklMRS0+dmFyaWFibGVzLgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpOiBHZXQgYW4gZW52aXJvbm1lbnQgZm9yCgl0aGUgY2hpbGQgZnJvbSB0YXJnZXRfZW52aXJvbm1lbnQgaW5zdGVhZCBvZiB1c2luZyBlbnZpcm9uLgoKCSogZGVwLmg6IERlY2xhcmUgcmVhZF9hbGxfbWFrZWZpbGVzIGhlcmUuCgkoUk1fKik6IERlZmluZSBuZXcgZW51bSBjb25zdGFudHMuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNlY29uZCBhcmcgaXMgRkxBR1MgaW5zdGVhZCBvZiBUWVBFLgoJVHJlYXQgaXQgYXMgYSBiaXQgbWFzayBjb250YWluaW5nIFJNXyouCgkocmVhZF9hbGxfbWFrZWZpbGVzKTogRm9yIGRlZmF1bHQgbWFrZWZpbGVzLCBzZXQgRC0+Y2hhbmdlZCB0bwoJUk1fRE9OVENBUkUgaW5zdGVhZCBvZiAxLgoJKiBtYWluLmM6IERvbid0IGRlY2xhcmUgcmVhZF9hbGxfbWFrZWZpbGVzIGhlcmUuCgkobWFpbik6IENoZWNrIGBjaGFuZ2VkJyBtZW1iZXIgb2YgcmVhZF9tYWtlZmlsZXMgZWx0cyBmb3IgUk1fKgoJZmxhZ3MgaW5zdGVhZCBvZiBzcGVjaWZpYyBpbnRlZ2VyIHZhbHVlcy4KCk1vbiBKdWwgMTIgMjI6NDI6MTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbc2VxdWVudCAmJiBpMzg2XTogI3VuZGVmIFBPU0lYLiAgRnJvbSB0cm9zdEBjc2Uub2dpLmVkdS4KClRodSBKdWwgIDggMTk6NTE6MjMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogSWYgRUxFTSBpcyB6ZXJvIDAsIGZyZWUgUEFUVEVSTgoJYXMgd2VsbCBhcyBWUEFUSC4KCShidWlsZF92cGF0aF9saXN0cyk6IEVtcHR5IGB2cGF0aHMnIGFyb3VuZCBjb25zdHJ1Y3RfdnBhdGhfbGlzdAoJY2FsbCBmb3IgJChWUEFUSCkuICBFeHBhbmQgJChzdHJpcCAkKFZQQVRIKSksIG5vdCBqdXN0ICQoVlBBVEgpLgoKCSogcnVsZS5jIChjb252ZXJ0X3N1ZmZpeF9ydWxlKTogVXNlIGFsbG9jYSBpbnN0ZWFkIG9mIHhtYWxsb2MgZm9yCglQRVJDRU5UUywgd2hvc2Ugc3RvcmFnZSBpcyBub3QgY29uc3VtZWQgYnkgY3JlYXRlX3BhdHRlcm5fcnVsZS4KCgkqIG1ha2UuaCBbX19taXBzICYmIF9TWVNUWVBFX1NWUjNdOiAjdW5kZWYgUE9TSVguCgpXZWQgSnVuIDMwIDE4OjExOjQwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuNS4KCgkqIHJ1bGUuYyAobWF4X3BhdHRlcm5fdGFyZ2V0cyk6IE5ldyB2YXJpYWJsZS4KCShjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IENvbXB1dGUgaXRzIHZhbHVlLgoJKiBydWxlLmg6IERlY2xhcmUgaXQuCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogTWFrZSBUUllSVUxFUyBtYXhfdGFyZ2V0X3BhdHRlcm5zCgl0aW1lcyBiaWdnZXIuICBNb3ZlIGFkZGluZyBuZXcgVFJZUlVMRVMgZWx0IGluc2lkZSB0aGUgaW5uZXIKCXRhcmdldHMgbG9vcCwgc28gZWFjaCBtYXRjaGluZyB0YXJnZXQgZ2V0cyBpdHMgb3duIGVsdCBpbiBNQVRDSEVTCglhbmQgQ0hFQ0tFRF9MQVNUU0xBU0guCgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogSWYgU0lHIT0wIHNheSBgaW50ZXJtZWRpYXRlIGZpbGUnCglpbnN0ZWFkIG9mIGp1c3QgYGZpbGUnIGluIGVycm9yIG1zZy4KCkZyaSBKdW4gMjUgMTQ6NTU6MTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2KTogVHVybiBvZmYKCS0td2Fybi11bmRlZmluZWQtdmFyaWFibGVzIGFyb3VuZCBleHBhbnNpb24gb2YgU0hFTEwgYW5kIElGUy4KCSogcmVhZC5jICh0aWxkZV9leHBhbmQpOiBMaWtld2lzZSBmb3IgSE9NRS4KCShyZWFkX2FsbF9tYWtlZmlsZXMpOiBMaWtld2lzZSBmb3IgTUFLRUZJTEVTLgoJKiB2cGF0aC5jIChidWlsZF92cGF0aF9saXN0cyk6IExpa2V3aXNlIGZvciBWUEFUSC4KCgkqIG1haW4uYyAod2Fybl91bmRlZmluZWRfdmFyaWFibGVzX2ZsYWcpOiBOZXcgZmxhZyB2YXJpYWJsZS4KCShzd2l0Y2hlcyk6IEFkZCAtLXdhcm4tdW5kZWZpbmVkLXZhcmlhYmxlcy4KCSogbWFrZS5oICh3YXJuX3VuZGVmaW5lZF92YXJpYWJsZXNfZmxhZyk6IERlY2xhcmUgaXQuCgkqIGV4cGFuZC5jICh3YXJuX3VuZGVmaW5lZCk6IE5ldyBmdW5jdGlvbi4KCShyZWZlcmVuY2VfdmFyaWFibGUpOiBDYWxsIGl0IGlmIHRoZSB2YXJpYWJsZSBpcyB1bmRlZmluZWQuCgkodmFyaWFibGVfZXhwYW5kKTogSW4gc3Vic3RpdHV0aW9uIHJlZiwgY2FsbCB3YXJuX3VuZGVmaW5lZCBpZiB0aGUKCXZhcmlhYmxlIGlzIHVuZGVmaW5lZC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9wYXR0ZXJuX3J1bGVzKTogQWRkIGAlLmM6ICUudyAlLmNoJyBhbmQKCWAlLnRleDogJS53ICUuY2gnIHJ1bGVzLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzOiAudy5jLCAudy50ZXgpOiBQYXNzIHRocmVlIGFyZ3M6ICQ8IC0gJEAuCgkoZGVmYXVsdF9zdWZmaXhlcyk6IEFkZCBgLmNoJy4KCk1vbiBKdW4gMjEgMTc6NTU6MzkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9zdWZmaXhlcyk6IFJlcGxhY2UgYC5jd2ViJyB3aXRoIGAudycuCgkoZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBSZW5hbWUgYC5jd2ViLmMnIGFuZCBgLmN3ZWIudGV4JyB0byBgLncuYycKCWFuZCBgLncudGV4Jy4KCkZyaSBKdW4gMTEgMTQ6NDI6MDkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2guCgpUaHUgSnVuIDEwIDE4OjE0OjA4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuNC4KCgkqIHJlYWQuYyAobXVsdGlfZ2xvYik6IERvbid0IGZyZWUgT0xEIGFuZCBPTEQtPm5hbWUgaW4gdGhlCglGT1VORCE9MCBmb3JrLiAgVXNlIG5ldyBibG9jay1sb2NhbCB2YXJpYWJsZSBGIGluc3RlYWQgb2YKCWNsb2JiZXJpbmcgT0xELgoKCSogYXIuYyAoZ2xvYl9wYXR0ZXJuX3ApOiBOZXcgZnVuY3Rpb24sIHNuYXJmZWQgZnJvbSBnbG9iL2dsb2IuYy4KCShhcl9nbG9iKTogQ2FsbCBpdDsgcmV0dXJuIG5pbCBpbW1lZGlhdGVseSBpZiBNRU1CRVJfUEFUVEVSTgoJY29udGFpbnMgbm8gbWV0YWNoYXJhY3RlcnMuCgpXZWQgSnVuICA5IDE2OjI1OjM1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBhci5jIChhcl9nbG9ie19tYXRjaCxfYWxwaGFjb21wYXJlfSk6IE5ldyBmdW5jdGlvbi4KCgkqIGRlcC5oIFshIE5PX0FSQ0hJVkVTXTogRGVjbGFyZSBpdC4KCSogcmVhZC5jIChtdWx0aV9nbG9iKSBbISBOT19BUkNISVZFU106IFVzZSBpdCBvbiBhcmNoaXZlIG1lbWJlciBlbHRzLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUGFzcyBmbGFnICgxKSB0byBwYXJzZV9maWxlX3NlcSwgbm90IHRvCgltdWx0aV9nbG9iICh3aGljaCBkb2Vzbid0IHRha2UgYSAzcmQgYXJnKS4KCSogcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IExpa2V3aXNlLgoJKiBkZWZhdWx0LmMgKHNldF9kZWZhdWx0X3N1ZmZpeGVzKTogSGVyZSB0b28uCgkqIGZ1bmN0aW9uLmMgKHN0cmluZ19nbG9iKTogRG9uJ3QgcGFzcyBncmF0dWl0b3VzIGFyZyB0byBtdWx0aV9nbG9iLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSkgWyEgTk9fQVJDSElWRVNdOiBBZGQgcG9zdC1wcm9jZXNzaW5nCglsb29wIHRvIHRyYW5zbGF0ZSBhcmNoaXZlIHJlZnMgImxpYihhIGIpIiBpbnRvICJsaWIoYSkgbGliKGIpIi4KCk1vbiBKdW4gIDcgMTk6MjY6NTEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsZGlycyk6IEFjdHVhbGx5IHBhc3MgZGlyZWN0b3J5IG5hbWVzLgoJKCQoYmluZGlyKS8kKGluc3RuYW1lKSk6IFRlc3QgY2hncnAmJmNobW9kIGV4aXQgc3RhdHVzIHdpdGggYGlmJzsKCWlmIGl0IGZhaWxzLCBlY2hvIGEgd2FybmluZyBtc2csIGJ1dCBkb24ndCBtYWtlIHRoZSBydWxlIGZhaWwuCgoJKiByZWFkLmMgKHRpbGRlX2V4cGFuZCk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiB0aWxkZV9leHBhbmQuCgkobXVsdGlfZ2xvYik6IENhbGwgaXQuCgkoY29uc3RydWN0X2luY2x1ZGVfcGF0aCk6IEV4cGFuZCB+IGluIGRpcmVjdG9yeSBuYW1lcy4KCSogZGVwLmg6IERlY2xhcmUgdGlsZGVfZXhwYW5kLgoJKiBtYWluLmMgKGVudGVyX2NvbW1hbmRfbGluZV9maWxlKTogRXhwYW5kIH4gYXQgdGhlIHN0YXJ0IG9mIE5BTUUuCgkobWFpbik6IEV4cGFuZCB+IGluIC1DIGFyZ3MuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEV4cGFuZCB+IGluIEZJTEVOQU1FIHVubGVzcyBUWVBFPT0yLgoKRnJpIEp1biAgNCAxMzozNDo0NyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogVXNlIHhtYWxsb2MgaW5zdGVhZCBvZiBhbGxvY2EgZm9yIEFSR1MuCgoJKiBtYWluLmMgKG1haW4pOiBQdXQgcmVzdWx0IG9mIGFsbG9jYSBpbiB0ZW1wb3JhcnkgdmFyaWFibGUgd2l0aAoJc2ltcGxlIGFzc2lnbm1lbnQsIHRvIG1ha2UgU0dJIGNvbXBpbGVyIGhhcHB5LgoKVGh1IEp1biAgMyAyMDoxNTo0NiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjMuCgoJKiBtYWluLmMgKG1haW4pOiBCZWZvcmUgcmUtZXhlY2luZywgcmVtb3ZlIGludGVybWVkaWF0ZSBmaWxlcywgYW5kCglwcmludCB0aGUgZGF0YSBiYXNlIHVuZGVyIC1wLiAgU2V4aWVyIGRlYnVnZ2luZyBtZXNzYWdlLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBBbGxvY2F0ZSBhbiBleHRyYSBjb3B5IG9mIHRoZSBuYW1lCglvZiBhIHdpbm5pbmcgaW50ZXJtZWRpYXRlIGZpbGUgd2hlbiBwdXR0aW5nIGl0IGluIEZPVU5EX0ZJTEVTLgoKV2VkIEp1biAgMiAxNjozODowOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUGFzcyBmbGFnICgxKSB0byBwYXJzZV9maWxlX3NlcSwgbm90IHRvCgltdWx0aV9nbG9iICh3aGljaCBkb2Vzbid0IHRha2UgYSAzcmQgYXJnKS4KCgkqIGRpci5jIChkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcCk6IFdoZW4gcmVhZGluZyBkaXJlbnRzLCBpZ25vcmUKCWNoYXJzIHdpdGhpbiBEX05BTUxFTiB0aGF0IGFyZSBOVUxzLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBEb24ndCBzYXZlc3RyaW5nIEFSR1ZbMF0gdG8gcHV0IGl0CglpbnRvIGBvdGhlcl9hcmdzJy4KCUZvciBzdHJpbmcgc3dpdGNoLCBkb24ndCBzYXZlc3RyaW5nIGBvcHRhcmcnLgoJKG1haW4pOiBEb24ndCBmcmVlIGVsdHMgb2YgbWFrZWZpbGVzLT5saXN0IHRoYXQgYXJlICItIi4KCVVzZSBhbGxvY2EnZCByYXRoZXIgdGhhbiBzYXZlc3RyaW5nJ2Qgc3RvcmFnZSBmb3IgZWx0cyBvZgoJbWFrZWZpbGVzLT5saXN0IHRoYXQgYXJlIHRlbXBvcmFyeSBmaWxlIG5hbWVzLgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IERvbid0IGZyZWUgKk1BS0VGSUxFUy4KCSogZmlsZS5jIChlbnRlcl9maWxlKTogRG9uJ3Qgc3RyaXAgYC4vJ3MuCgkqIG1haW4uYyAoZW50ZXJfY29tbWFuZF9saW5lX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCgkobWFpbik6IFVzZSBpdCBpbiBwbGFjZSBvZiBlbnRlcl9maWxlIGZvciBjb21tYW5kLWxpbmUgZ29hbHMgZnJvbQoJb3RoZXJfZmlsZXMsIGFuZCBmb3Igb2xkX2ZpbGVzIGFuZCBuZXdfZmlsZXMuCgpNb24gTWF5IDMxIDE4OjQxOjQwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuMi4KCgkqIGNvbXBhdE1ha2VmaWxlICguU1VGRklYRVMpOiBBZGQgLmluZm8uCgkoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogRmluZCBtYWtlLmluZm8qIGluIGN3ZCBpZiB0aGVyZSwKCWVsc2UgaW4gJHNyY2Rpci4gIFVzZSBiYXNlbmFtZSB0byByZW1vdmUgZGlyIG5hbWUgZnJvbSBpbnN0YWxsZWQgbmFtZS4KClRodSBNYXkgMjcgMTc6MzU6MDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogV2hlbiBpbnRlcm5pbmcgRk9VTkRfRklMRVMsIHRyeQoJbG9va3VwX2ZpbGUgZmlyc3Q7IGlmIGZvdW5kLCBmcmVlIHRoZSBzdG9yYWdlIGZvciBvdXIgY29weSBvZiB0aGUgbmFtZS4KCldlZCBNYXkgMjYgMTQ6MzE6MjAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny4xLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBJbiB1c2FnZSBtc2csIHdyaXRlIGAtLXN3aXRjaD1BUkcnIG9yCglgLS1zd2l0Y2hbPU9QVEFSR10nIHJhdGhlciB0aGFuIGAtLXN3aXRjaCBBUkcnIG9yIGAtLXN3aXRjaCBbQVJHXScuCgpNb24gTWF5IDI0IDE2OjE3OjMxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKGNvbnZlcnRfc3VmZml4X3J1bGUpOiBOZXcgZnVuY3Rpb24uCgkoY29udmVydF90b19wYXR0ZXJuKTogVXNlIGl0IGluc3RlYWQgb2YgZG9pbmcgYWxsIHRoZSB3b3JrIGhlcmUKCXNldmVyYWwgdGltZXMuCglGb3IgdGFyZ2V0IHN1ZmZpeCBgLmEnLCBnZW5lcmF0ZSBib3RoIHRoZSBhcmNoaXZlIG1hZ2ljIHJ1bGUgYW5kCgl0aGUgbm9ybWFsIHJ1bGUuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGlzdGNsZWFuKTogUmVtb3ZlIHN0YW1wLWNvbmZpZy4KClNhdCBNYXkgMjIgMTY6MTU6MTggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny4KCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBEb24ndCB3cml0ZSBleHRyYSBzcGFjZSBhZnRlciBgcm0nLgoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gudHlwZSk6IFJlbW92ZSBgdXNhZ2VfYW5kX2V4aXQnLgoJKHByaW50X3VzYWdlX2ZsYWcpOiBOZXcgdmFyaWFibGUuCgkoc3dpdGNoZXM6IC0taGVscCk6IE1ha2UgdHlwZSBgZmxhZycsIHRvIHNldCBwcmludF91c2FnZV9mbGFnLgoJKGluaXRfc3dpdGNoZXMpOiBSZW1vdmUgYHVzYWdlX2FuZF9leGl0JyBjYXNlLgoJKGRlY29kZV9zd2l0Y2hlcyk6IExpa2V3aXNlLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFByaW50IHVzYWdlIGlmIHByaW50X3VzYWdlX2ZsYWcgaXMgc2V0LgoJV2hlbiBwcmludGluZyB1c2FnZSwgZGllIHdpdGggc3RhdHVzIG9mIEJBRC4KCShtYWluKTogRGllIHdpdGggMCBpZiBwcmludF92ZXJzaW9uX2ZsYWcuCgpGcmkgTWF5IDIxIDE2OjA5OjI4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjYuCgpXZWQgTWF5IDE5IDIxOjMwOjQ0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbGRpcnMpOiBOZXcgdGFyZ2V0LgoJKGluc3RhbGwpOiBEZXBlbmQgb24gaXQuCgpTdW4gTWF5IDE2IDIwOjE1OjA3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjUuMi4KCkZyaSBNYXkgMTQgMTY6NDA6MDkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogSW4gcmVtb3ZhbCBsb29wIGZvciBESVJQQVRIPT0wLAoJc2V0IExBU1RQQVRIIHRvIFBBVEgsIG5vdCBORVhULgoKCSogZGlyLmMgKHJlYWRfZGlyc3RyZWFtKTogQnJlYWsgb3V0IG9mIGxvb3AgYWZ0ZXIgaW5jcmVtZW50aW5nCglEUy0+YnVja2V0cyBzdWNoIHRoYXQgaXQgcmVhY2hlcyBESVJGSUxFX0JVQ0tFVFM7IGF2b2lkIHRyeWluZyB0bwoJZGVyZWZlcmVuY2UgRFMtPmNvbnRlbnRzLT5maWxlc1tESVJGSUxFX0JVQ0tFVFNdLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2xlYXIgbm9fdGFyZ2V0cyBhZnRlciByZWFkaW5nIGEKCXRhcmdldGZ1bCBydWxlIGxpbmUuCgoJKiBtYWluLmMgKG1haW4pOiBJZiBwcmludF92ZXJzaW9uX2ZsYWcgaXMgc2V0LCBleGl0IGFmdGVyIHByaW50aW5nCgl0aGUgdmVyc2lvbi4KCShzd2l0Y2hlcyk6IENoYW5nZSAtLXZlcnNpb24gZG9jc3RyaW5nIHRvIHNheSBpdCBleGl0cy4KCgkqIG1ha2UuaCBbYnV0dGVyZmx5XTogI3VuZGVmIFBPU0lYLgoKV2VkIE1heSAxMiAxNToyMDoyMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NS4xLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFshIEFJQU1BR106IERvbid0IGRlY2xhcmUgTE9OR19OQU1FLgoJW0FJQU1BR106IFBhc3MgVFJVTkNBVEUgZmxhZyBhcmcgdG8gKCpGVU5DVElPTiksIGFsd2F5cyB6ZXJvLgoKCSogZnVuY3Rpb24uYyAoaGFuZGxlX2Z1bmN0aW9uKTogVXNlIGZhdGFsIGluc3RlYWQgb2YKCW1ha2VmaWxlX2ZhdGFsIHdoZW4gcmVhZGluZ19maWxlbmFtZSBpcyBuaWwuCgoJKiBjb25maWd1cmUuaW46IEFkZCBBQ19HRVRHUk9VUFNfVC4KCSogam9iLmMgKHNlYXJjaF9wYXRoKTogVXNlIEdFVEdST1VQU19UIGluIHBsYWNlIG9mIGdpZF90LgoKU3VuIE1heSAgOSAxNTo0MToyNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY1LgoKRnJpIE1heSAgNyAxODozNDo1NiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoaGFuZGxlX2Z1bmN0aW9uKTogRmF0YWwgZm9yIHVubWF0Y2hlZCBwYXJlbi4KClRodSBNYXkgIDYgMTY6MTM6NDEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4zLgoKCSogY29tbWFuZHMuYyAoaGFuZGxpbmdfZmF0YWxfc2lnbmFsKTogTmV3IHZhcmlhYmxlLgoJKGZhdGFsX2Vycm9yX3NpZ25hbCk6IFNldCBpdC4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBBdm9pZCBub25yZWVudHJhbnQgb3BlcmF0aW9ucyBpZiB0aGF0IGlzIHNldC4KCSogbWFrZS5oOiBEZWNsYXJlIGhhbmRsaW5nX2ZhdGFsX3NpZ25hbC4KCgkqIGV4cGFuZC5jIChyZWZlcmVuY2VfdmFyaWFibGUpOiBOZXcgZnVuY3Rpb24sIHNuaXBwZXQgb2YgY29kZQoJYnJva2VuIG91dCBvZiBzaW1wbGUtcmVmZXJlbmNlIGNhc2Ugb2YgdmFyaWFibGVfZXhwYW5kLgoJKHZhcmlhYmxlX2V4cGFuZCk6IFVzZSBpdCBmb3Igc2ltcGxlIHJlZnMuCgkodmFyaWFibGVfZXhwYW5kKTogV2hlbiBjaGVja2luZyBmb3IgYSBjb21wdXRlZCB2YXJpYWJsZSBuYW1lLAoJbm90aWNlIGEgY29sb24gdGhhdCBjb21lcyBiZWZvcmUgdGhlIGZpbmFsIENMT1NFUEFSRU4uICBFeHBhbmQKCW9ubHkgdXAgdG8gdGhlIGNvbG9uLCBhbmQgdGhlbiByZXBsYWNlIHRoZSBwZW5kaW5nIHRleHQgd2l0aCBhCgljb3B5IGNvbnRhaW5pbmcgdGhlIGV4cGFuZGVkIG5hbWUgYW5kIGZhbGwgdGhyb3VnaCB0byBzdWJzdCByZWYKCWhhbmRsaW5nLgoJKHZhcmlhYmxlX2V4cGFuZCk6IERvbid0IGJvdGhlciBleHBhbmRpbmcgdGhlIG5hbWUgaWYgYSBjb2xvbgoJYXBwZWFycyBiZWZvcmUgdGhlIGZpcnN0ICQuCgkoZXhwYW5kX2FyZ3VtZW50KTogVXNlIGFsbG9jYSBpbnN0ZWFkIG9mIHNhdmVzdHJpbmcuCgkodmFyaWFibGVfZXhwYW5kKTogRm9yIHN1YnN0IHJlZiwgZXhwYW5kIGJvdGggc2lkZXMgb2YgPSBiZWZvcmUKCXBhc3NpbmcgdG8gW3BhdF1zdWJzdF9leHBhbmQuICBVc2UgZmluZF9wZXJjZW50IGluc3RlYWQgb2YgbGluZGV4Cgl0byBjaGVjayB0aGUgbGhzIGZvciBhICUuCgpXZWQgTWF5ICA1IDE0OjQ1OjUyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjQuMi4KCk1vbiBNYXkgIDMgMTc6MDA6MzIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKSBbQUlBTUFHXTogQWJvcnQgaWYgVFJVTkNBVEVEIGlzIG5vbnplcm8uCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGV4dHJhIGFyZyBvZiAxIHRvIHBhcnNlX2ZpbGVfc2VxLAoJbm90IHRvIG11bHRpX2dsb2IuCgpUaHUgQXByIDI5IDE5OjQ3OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjQuMS4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKTogTmV3IGxvY2FsIGZsYWcgdmFyIExPTkdfTkFNRS4gIFNldCBpdCB3aGVuCgl3ZSByZWFkIHRoZSBtZW1iZXIgbmFtZSBpbiBhbnkgb2YgdGhlIGZhc2hpb25zIHRoYXQgYWxsb3cgaXQgdG8gYmUKCWFyYml0cmFyaWx5IGxvbmcuICBQYXNzIGl0cyBuZWdhdGlvbiB0byBGVU5DVElPTi4KCShkZXNjcmliZV9tZW1iZXIpOiBUYWtlIFRSVU5DQVRFRCBmcm9tIGFyX3NjYW4gYW5kIHByaW50IGl0LgoJKGFyX25hbWVfZXF1YWwpOiBUYWtlIG5ldyBhcmcgVFJVTkNBVEVEOyBpZiBub256ZXJvLCBjb21wYXJlIG9ubHkKCXRoZSBmaXJzdCBzaXplb2YgKHN0cnVjdCBhcl9oZHIuYXJfbmFtZSkgY2hhcnMuCgkoYXJfbWVtYmVyX3Bvcyk6IFRha2UgVFJVTkNBVEVEIGZyb20gYXJfc2NhbiwgcGFzcyB0byBhcl9uYW1lX2VxdWFsLgoJKiBhci5jIChhcl9tZW1iZXJfZGF0ZV8xKTogTGlrZXdpc2UuCgpXZWQgQXByIDI4IDIxOjE4OjIyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IEJlZm9yZSBjYWxsaW5nIHN0YXJ0X2pvYl9jb21tYW5kIHRvIHN0YXJ0Cgl0aGUgbmV4dCBjb21tYW5kIGxpbmUsIHJlc2V0IEMtPnJlbW90ZSBieSBjYWxsaW5nIHN0YXJ0X3JlbW90ZV9qb2JfcC4KCk1vbiBBcHIgMjYgMTU6NTY6MTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBhcnNjYW4uYyAoYXJfc2Nhbik6IE5ldyBsb2NhbCB2YXIgTkFNRU1BUC4KCUluIGxvb3AsIHJlbmFtZSBOQU1FIHRvIE5BTUVCVUY7IG5ldyB2YXIgTkFNRSBpcyBhIHBvaW50ZXI7IG5ldwoJZmxhZyBJU19OQU1FTUFQLiAgV2hlbiBleHRyYWN0aW5nIHRoZSBtZW1iZXIgbmFtZSwgYWx3YXlzIHB1dCBhCgludWxsIGF0IGl0cyBlbmQgZmlyc3QuICBJZiB0aGUgbmFtZSBpcyAiLy8iIG9yICIvQVJGSUxFTkFNRVMiLCBzZXQKCUlTX05BTUVNQVAuICBJZiB3ZSBoYXZlIGFscmVhZHkgcmVhZCBpbiBOQU1FTUFQLCBhbmQgTkFNRSBsb29rcwoJbGlrZSAiIC9OIiwgZ2V0IGZ1bGwgbmFtZSBmcm9tIE5BTUVNQVArTi4KCUVsc2UgaWYgTkFNRSBsb29rcyBsaWtlICIjMS9OIiwgcmVhZCBOIGNoYXJzIGZyb20gdGhlCgllbHQgZGF0YSB0byBiZSB0aGUgZnVsbCBuYW1lLiAgQXQgZW5kIG9mIGxvb3AsIGlmIElTX05BTUVNQVAsIHJlYWQKCXRoZSBlbHQncyBkYXRhIGludG8gYWxsb2NhJ2QgTkFNRU1BUC4KCShhcl9uYW1lX2VxdWFsKTogI2lmIDAgdHJ1bmNhdGluZyBjb2RlLgoKCSogbWFrZS5oOiBEb24ndCBkZWNsYXJlIHZmb3JrIGF0IGFsbC4gIEl0IHJldHVybnMgaW50IGFueXdheSwKCXVubGVzcyA8dW5pc3RkLmg+IGRlY2xhcmVkIGl0OyBhbmQgd2UgY29uZmxpY3RlZCB3aXRoIHNvbWUgc3lzdGVtcy4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IElmIEZMQUdTVFJJTkdbMV0gaXMgJy0nLCBkZWZpbmUKCU1BS0VGTEFHUyB0byBhbGwgb2YgRkxBR1NUUklORywgbm90ICZGTEFHU1RSSU5HWzFdLiAgRG9uJ3Qgd2FudCB0bwoJZGVmaW5lIGl0IHRvIHNvbWV0aGluZyBsaWtlICItbm8tcHJpbnQtZGlyZWN0b3J5Ii4KCVVzZSAlZyBmb3JtYXQgaW5zdGVhZCBvZiAlZiBmb3IgZmxvYXRpbmctdmFsdWVkIHRoaW5ncy4KClRodSBBcHIgMjIgMTg6NDA6NTggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlIChNYWtlZmlsZS5pbik6IFVzZSBhIHN1YnN0aXR1dGlvbiByZWYgb24gbm9saWItZGVwcwoJdG8gY2hhbmdlIHJlbW90ZS0lLmRlcCB0byByZW1vdGUtc3R1Yi5kZXAuCgpXZWQgQXByIDIxIDE1OjE3OjU0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjQuCgpGcmkgQXByIDE2IDE0OjIyOjIyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbCk6IFJlbW92ZSAtIHByZWZpeCBmcm9tIGNoZ3JwK2NobW9kLgoKCSogVmVyc2lvbiAzLjYzLjguCgpUaHUgQXByIDE1IDE4OjI0OjA3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBhY2NvbmZpZy5oOiBOZXcgZmlsZTsgY29udGFpbnMgIiN1bmRlZiBTQ0NTX0dFVCIgZm9yIGF1dG9oZWFkZXIuCgkqIGNvbmZpZ3VyZS5pbjogSWYgL3Vzci9zY2NzL2dldCBleGlzdHMsIGRlZmluZSBTQ0NTX0dFVCB0byB0aGF0LAoJZWxzZSB0byAiZ2V0Ii4KCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcyk6IFNldCBHRVQgdG8gbWFjcm8gU0NDU19HRVQuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogVGFrZSBleHRyYSBhcmcgU1RSSVA7IHN0cmlwIGAuLycgb25seQoJaWYgbm9uemVyby4gIEkgaG9wZSB0aGlzIGlzIHRoZSBsYXN0IHRpbWUgdGhpcyBhcmd1bWVudCBpcyBhZGRlZAoJb3IgcmVtb3ZlZC4KCShyZWFkX21ha2VmaWxlKTogUGFzcyBpdCAxIHdoZW4gcGFyc2luZyBpbmNsdWRlIGZpbGUgbmFtZXMuCglQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIHRhcmdldCBmaWxlIG5hbWVzLgoJUGFzcyBpdCAxIHdoZW4gcGFyc2luZyBzdGF0aWMgcGF0dGVybiB0YXJnZXQgcGF0dGVybiBuYW1lcy4KCSogcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IFBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgcnVsZSBkZXBzLgoJKiBkZWZhdWx0LmMgKHNldF9kZWZhdWx0X3N1ZmZpeGVzKTogUGFzcyBpdCAxIHdoZW4gcGFyc2luZwoJZGVmYXVsdF9zdWZmaXhlcy4KCSogZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpOiBQYXNzIGl0IDAgaGVyZS4KCldlZCBBcHIgMTQgMTE6MzI6MDUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1pc2MuYyAobG9nX2FjY2Vzcyk6IE5ldyBmdW5jdGlvbi4KCSh7aW5pdCx1c2VyLG1ha2UsY2hpbGR9X2FjY2Vzcyk6IENhbGwgaXQuCgkoY2hpbGRfYWNjZXNzKTogQWJvcnQgaWYgIWFjY2Vzc19pbml0ZWQuCgoJKiBtYWluLmMgKHN3aXRjaGVzOiAtLW5vLXByaW50LWRpcmVjdG9yeSk6IFVzZSAxIGluc3RlYWQgb2YgLTEgZm9yCglzaW5nbGUtbGV0dGVyIG9wdGlvbi4KCShpbml0X3N3aXRjaGVzLCBkZWNvZGVfc3dpdGNoZXMsIGRlZmluZV9tYWtlZmxhZ3MpOiBBbiBvcHRpb24gd2l0aAoJbm8gc2luZ2xlLWxldHRlciB2ZXJzaW9uIGlzIG5vIGxvbmdlciBpbmRpY2F0ZWQgYnkgYSB2YWx1ZSBvZiAtMTsKCWluc3RlYWQgYSB2YWx1ZSB0aGF0IGlzICFpc2FsbnVtLgoJKGluaXRfc3dpdGNoZXMpOiBEb24ndCBwdXQgc3VjaCBzd2l0Y2hlcyBpbnRvIHRoZSBzdHJpbmcsIG9ubHkKCWludG8gdGhlIGxvbmdfb3B0aW9uIHRhYmxlLgoKCSogbWFrZS5oIFshTlNJR10gWyFfTlNJR106ICNkZWZpbmUgTlNJRyAzMi4KCgkqIGpvYi5jIFtIQVZFX1dBSVRQSURdOiBSZW1vdmUgI3VuZGVmIEhBVkVfVU5JT05fV0FJVC4gIEFJWCdzCglic2RjYyBkZWZpbmVkIFdJRiogdG8gdXNlIHVuaW9uIHdhaXQuCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaCk6IENoYW5nZSBtZW1iZXIgYGMnIHRvIHR5cGUgaW50LgoJKHN3aXRjaGVzKTogTWFrZSBjb25zdC4KCShkZWNvZGVfc3dpdGNoZXMpOiBVc2UgYGNvbnN0IHN0cnVjdCBjb21tYW5kX3N3aXRjaCAqJy4KCShkZWZpbmVfbWFrZWZsYWdzKTogTGlrZXdpc2UuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogQWRkIGAtbyAkQCcgdG8gbWFrZWluZm8gcnVsZXMuCgpNb24gQXByIDEyIDEyOjMwOjA0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNy4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfSEFWRV9IRUFERVJTKTogQ2hlY2sgZm9yIHN0cmluZy5oIGFuZCBtZW1vcnkuaC4KCVJlbW92ZWQgQUNfTUVNT1JZX0guCgkqIG1ha2UuaCBbVVNHLCBOZVhUXTogRG9uJ3QgdGVzdCB0aGVzZS4KCVtIQVZFX1NUUklOR19IXTogVGVzdCB0aGlzIHRvIGluY2x1ZGUgc3RyaW5nLmggYW5kIGRlZmluZSBBTlNJX1NUUklORy4KCVtIQVZFX01FTU9SWV9IXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgTkVFRF9NRU1PUllfSC4KCVshIEFOU0lfU1RSSU5HXTogUHV0IGRlY2xzIG9mIGJjb3B5IGV0IGFsIGhlcmUuCglbc3BhcmNdOiBEb24ndCB0ZXN0IHRoaXMgZm9yIGFsbG9jYS5oOyBIQVZFX0FMTE9DQV9IIGlzIHN1ZmZpY2llbnQuCglbSEFWRV9TSUdTRVRNQVNLXTogVGVzdCB0aGlzIHJhdGhlciB0aGFuIFVTRy4KCVtfX0dOVV9MSUJSQVJZX18gfHwgUE9TSVhdOiBEb24ndCAjaW5jbHVkZSA8dW5pc3RkLmg+IGFnYWluLgoJKiBtYWluLmMgKG1haW4pOiBIYW5kbGUgU0lHQ0hMRCBpZiBkZWZpbmVkLCBhbmQgU0lHQ0xEIGlmIGRlZmluZWQuCglJdCBkb2Vzbid0IGh1cnQgdG8gZG8gYm90aCBpZiB0aGV5IGFyZSBib3RoIGRlZmluZWQsIGFuZCB0ZXN0aW5nCglVU0cgaXMgdXNlbGVzcy4KCSogZGlyLmM6IFJhdGlvbmFsaXplIGRpcmVjdG9yeSBoZWFkZXIgY29uZGl0aW9uYWxzLgoJKiBhcnNjYW4uYyBbSEFWRV9GQ05UTF9IXTogVGVzdCB0aGlzIHJhdGhlciB0aGFuIFVTRyB8fCBQT1NJWC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9zdWZmaXhlcyk6IEFkZCBgLnR4aW5mbycuCgkoZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBBZGQgYC50eGluZm8uaW5mbycgYW5kIGAudHhpbmZvLmR2aScgcnVsZXMuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFJlcGxhY2UgUkVDVVJTSVZFIGZsYWcKCXdpdGggZW51bSBGTEFWT1IsIHdoaWNoIGNhbiBiZSBzaW1wbGUsIHJlY3Vyc2l2ZSwgb3IgYXBwZW5kLgoJUmVjb2duaXplICs9IGFzIGFwcGVuZCBmbGF2b3IuICBTZXQgbmV3IHZhcmlhYmxlIFZBTFVFIGluIGEgc3dpdGNoCglvbiBGTEFWT1IuICBGb3IgYXBwZW5kIGZsYXZvciwgcHJlcGVuZCB0aGUgdmFyaWFibGUncyBvbGQgdmFsdWUuCglJZiB0aGUgdmFyaWFibGUgd2FzIHByZXZpb3VzbHkgZGVmaW5lZCByZWN1cnNpdmUsIHNldCBGTEFWT1IgdG8KCXJlY3Vyc2l2ZTsgaWYgaXQgd2FzIGRlZmluZWQgc2ltcGxlLCBleHBhbmQgdGhlIG5ldyB2YWx1ZSBiZWZvcmUKCWFwcGVuZGluZyBpdCB0byB0aGUgb2xkIHZhbHVlLiAgUGFzcyBSRUNVUlNJVkUgZmxhZyB0bwoJZGVmaW5lX3ZhcmlhYmxlIGlmZiBGTEFWT1IgPT0gcmVjdXJzaXZlLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBVc2UgYWxsb2NhIGFuZCBiY29weSBmb3IKCU5BTUUsIGluc3RlYWQgb2Ygc2F2ZXN0cmluZy4gIE1pZ2h0IGFzIHdlbGwgdXNlIHN0YWNrIHN0b3JhZ2UKCXNpbmNlIHdlIGZyZWUgaXQgaW1tZWRpYXRlbHkgYW55d2F5LgoKVGh1IEFwciAgOCAxODowNDo0MyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9icyk6IE1vdmUgZGVjbCBvZiBKT0Igb3V0c2lkZSBvZiBsb29wLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogUmVuYW1lIGBzdHJ1Y3QgZmxhZycgbWVtYmVyIGBzd2l0Y2gnCgl0byBgY3MnLCB3aGljaCBpcyBub3QgYSByZXNlcnZlZCB3b3JkLgoKV2VkIEFwciAgNyAxNTozMDo1MSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKG5ld19qb2IpOiBDYWxsIHN0YXJ0X3dhaXRpbmdfam9icyBmaXJzdCB0aGluZy4KCShzdGFydF93YWl0aW5nX2pvYik6IENoYW5nZWQgcmV0dXJuIHR5cGUgZnJvbSB2b2lkIHRvIGludC4KCVJldHVybiAwIHdoZW4gcHV0dGluZyB0aGUgY2hpbGQgb24gdGhlIHdhaXRpbmdfam9icyBjaGFpbi4KCShzdGFydF93YWl0aW5nX2pvYnMpOiBEb24ndCBjaGVjayBsb2FkIGFuZCBqb2Jfc2xvdHMgaGVyZS4KCUFsd2F5cyB0YWtlIGEgam9iIG9mZiB0aGUgY2hhaW4gYW5kIGNhbGwgc3RhcnRfd2FpdGluZ19qb2Igb24gaXQ7CglnaXZlIHVwIGFuZCByZXR1cm4gd2hlbiBzdGFydF93YWl0aW5nX2pvYiByZXR1cm5zIHplcm8uCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3M6IHN0cnVjdCBmbGFnKTogQ2hhbmdlIG1lbWJlciBgY2hhciBjJyB0bwoJYHN0cnVjdCBjb21tYW5kX3N3aXRjaCAqc3dpdGNoJy4KCShBRERfRkxBRyk6IFNldCB0aGF0IHRvIENTIGluc3RlYWQgb2YgQ1MtPmMuCglJZiBDUy0+YyBpcyAtMSwgaW5jcmVtZW50IEZMQUdTTEVOIGZvciB0aGUgbG9uZyBuYW1lLgoJV2hlbiB3cml0aW5nIG91dCBGTEFHUywgaGFuZGxlIEZMQUdTLT5zd2l0Y2gtPmMgPT0gLTEgYW5kIHdyaXRlCgl0aGUgbG9uZyBuYW1lIGluc3RlYWQuCgoJKiBjb21wYXRNYWtlZmlsZSAoc3RhbXAtY29uZmlnKTogTmV3IHRhcmdldCBvZiBvbGQgY29uZmlnLmggcnVsZS4KCVRvdWNoIHN0YW1wLWNvbmZpZyBhZnRlciBydW5uaW5nIGNvbmZpZy5zdGF0dXMuCgkoY29uZmlnLmgpOiBKdXN0IGRlcGVuZCBvbiBzdGFtcC1jb25maWcsIGFuZCBoYXZlIGVtcHR5IGNvbW1hbmRzLgoKTW9uIEFwciAgNSAyMDoxNDowMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgW0hBVkVfV0FJVFBJRF06ICN1bmRlZiBIQVZFX1VOSU9OX1dBSVQuCgoJKiBjb25maWd1cmUuaW4gKEFDX0hBVkVfRlVOQ1MpOiBDaGVjayBmb3IgcHNpZ25hbC4KCkZyaSBBcHIgIDIgMTc6MTU6NDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9uZ19vcHRpb25fYWxpYXNlcyk6IFJlbW92ZSAibmV3IjsgaXQgaXMgYWxyZWFkeSBhbgoJdW5hbWJpZ3VvdXMgcHJlZml4IG9mICJuZXctZmlsZSIuCgpTdW4gTWFyIDI4IDE2OjU3OjE3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjYuCgpXZWQgTWFyIDI0IDE0OjI2OjE5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogV2hlbiBhZGRpbmcgdGhlCgluYW1lLXdpdGhpbi1kaXJlY3RvcnkgYXQgdGhlIGVuZCBvZiBOQU1FLCBhbmQgd2UgZG9uJ3QgYWRkIGEKCXNsYXNoLCBkb24ndCBjb3B5IEZJTEVOQU1FIGluIG9uZSBjaGFyIHRvbyBmYXIgaW50byBOQU1FLgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBGaW5kIGRlZmF1bHRfc2hlbGwncwoJbGVuZ3RoIHdpdGggc3RybGVuLCBub3QgbnVtZXJvbG9neS4KCldlZCBNYXIgMTcgMjA6MDI6MjcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IEFkZCB0aGUgZWx0cyBvZiBhIHN0cmluZyBvcHRpb24gaW4KCXJldmVyc2Ugb3JkZXIsIHNvIHRoZXkgY29tZSBvdXQgcmlnaHQgd2hlbiByZXZlcnNlZCBhZ2Fpbi4KCkZyaSBNYXIgMTIgMTU6Mzg6NDUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobWFrZS5pbmZvKTogVXNlIGAtbyBtYWtlLmluZm8nLgoKVGh1IE1hciAxMSAxNDoxMzowMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChSRU1PVEUpOiBTZXQgdG8gQFJFTU9URUA7IGNoYW5nZSBjb21tZW50cyB0bwoJcmVmbGVjdCBuZXcgdXNlLgoJKG9ianMpOiBSZXBsYWNlIHJlbW90ZS5vIHdpdGggcmVtb3RlLSQoUkVNT1RFKS5vLgoJKHNyY3MpOiBSZXBsYWNlIHJlbW90ZS5jIHdpdGggcmVtb3RlLSQoUkVNT1RFKS5jLgoJKHJlbW90ZS5vKTogUnVsZSByZW1vdmVkLgoKCSogY29uZmlndXJlLmluIChSRU1PVEUpOiBTdWJzdCB0aGlzIGluIE1ha2VmaWxlIGV0IGFsOyBkZWZhdWx0ICJzdHViIi4KCVVzZSBBQ19XSVRIIHRvIGdyb2sgLS13aXRoLWN1c3RvbXMgYXJnIHRvIHNldCBSRU1PVEU9Y3N0bXMuCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IEZpbHRlciBvdXQgcmVtb3RlLSUgZnJvbSBvYmpzIGxpc3QuCgkqIGJ1aWxkLnRlbXBsYXRlIChSRU1PVEUpOiBOZXcgdmFyOyBzZXQgdG8gQFJFTU9URUAuCgkob2Jqcyk6IEFkZCByZW1vdGUtJHtSRU1PVEV9Lm8uCgpXZWQgTWFyIDEwIDE1OjEyOjI0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjUuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEZpeCAiZGVwZW5kZW50Ii0+ImRlcGVuZGVuY3kiIGluCgkiUmVqZWN0aW5nIGltcG9zc2libGUiIC1kIG1zZy4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogTmV3IGxvY2FsIHZhcnMge09MRCxORVd9QlVDS0VULiAgU3RvcmUKCW1vZCdkIHZhbHVlcyB0aGVyZTsgbmV2ZXIgbW9kIHtPTEQsTkVXfUhBU0guCgpNb24gTWFyICA4IDEzOjMyOjQ4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgW2V0YTEwXTogSW5jbHVkZSA8ZmNudGwuaD4gaW5zdGVhZCBvZiA8c3lzL2ZpbGUuaD4uCgoJKiBjb21wYXRNYWtlZmlsZSAoVlBBVEgpOiBTZXQgdGhpcyB0byBAc3JjZGlyQC4KCShzcmNkaXIpOiBTZXQgdGhpcyB0byAkKFZQQVRIKS4KCgkqIG1haW4uYyAobWFpbik6IE5ldyBsb2NhbCB2YXIgRElSRUNUT1JZX0JFRk9SRV9DSERJUi4gIFNhdmUgaW4gaXQKCWEgY29weSBvZiBDVVJSRU5UX0RJUkVDVE9SWSBhZnRlciB0aGUgZmlyc3QgZ2V0Y3dkLiAgVXNlIGl0CglpbnN0ZWFkIG9mIENVUlJFTlRfRElSRUNUT1JZIHdoZW4gY2hkaXInaW5nIGJhY2sgYmVmb3JlIHJlLWV4ZWNpbmcuCgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBQYXNzIG1pc3NpbmcgU0VBUkNIIGFyZyB0byBmX210aW1lLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVtb3ZlIGV4dHJhbmVvdXMgYXJnIHRvIHBhcnNlX2ZpbGVfc2VxLgoKTW9uIEZlYiAyMiAxNDoxOTozOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mbyk6IFVzZSAsIGluc3RlYWQgb2YgLwoJYXMgdGhlIHNlZCBkZWxpbWl0ZXIgY2hhci4KClN1biBGZWIgMjEgMTQ6MTE6MDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My40LgoKCSogcnVsZS5oIChzdHJ1Y3QgcnVsZSk6IFJlbW92ZWQgYHN1YmRpcicgbWVtYmVyLgoJKiBydWxlLmMgKG5ld19wYXR0ZXJuX3J1bGUpOiBObyBuZWVkIHRvIGNsZWFyIGl0LgoJKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogU2V0IHRoZSBgY2hhbmdlZCcgZmxhZyBpbiBlYWNoIGRlcAoJdGhhdCByZWZlcnMgdG8gYSBub25leGlzdGVudCBkaXJlY3RvcnkuICBObyBsb25nZXIgc2V0IHJ1bGUtZ2xvYmFsCglgc3ViZGlyJyBmbGFnIHdpdGggdGhhdCBpbmZvcm1hdGlvbi4KCShwcmludF9ydWxlX2RhdGFfYmFzZSk6IERvbid0IHJlY29yZCBpbmZvIG9uIGBzdWJkaXInIGZsYWdzLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBDaGVjayB0aGUgREVQLT5jaGFuZ2VkIGZsYWcgcmF0aGVyCgl0aGFuIHRoZSAobm93IGdvbmUpIFJVTEUtPnN1YmRpciBmbGFnLiAgQWxzbyB0ZXN0IENIRUNLX0xBU1RTTEFTSDsKCWlmIGl0IGlzIHNldCwgdGhlIGZpbGUgbWlnaHQgZXhpc3QgZXZlbiB0aG91Z2ggdGhlIERFUC0+Y2hhbmdlZAoJZmxhZyBpcyBzZXQuCgoJKiBydWxlLmMgKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogUGFzcyAiIiwgbm90ICIuIiwgYXMgZmlsZQoJbmFtZSBhcmcgdG8gZGlyX2ZpbGVfZXhpc3RzX3AgdG8gY2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBkaXJlY3RvcnkuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEluc2lkZSBkZXAtZmluZGluZyBsb29wLCBzZXQKCUNIRUNLX0xBU1RTTEFTSCBmcm9tIHRoZSB2YWx1ZSByZWNvcmRlZCBpbiBDSEVDS0VEX0xBU1RTTEFTSFtJXSwKCXJhdGhlciB0aGFuIGNvbXB1dGluZyBpdCBhbmV3LgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogTXVzdCBhbGxvY2Egc3BhY2UgZm9yIFBFUkNFTlQKCWFuZCBjb3B5IGl0LCB0byBhdm9pZCBsZWF2aW5nIHRoZSB0cmFpbGluZyBgKScgaW4gdGhlIHZhbHVlLgoKCSogbWlzYy5jIChyZW1vdmVfY29tbWVudHMpOiBGaXhlZCBiYWNrc2xhc2gtY2hlY2tpbmcgbG9vcAoJY29uZGl0aW9uIHRvIGFsbG93IGl0IHRvIGxvb2sgYXQgdGhlIGZpcnN0IGNoYXIgb24gdGhlIGxpbmUuCglQMiA+PSBMSU5FLCBub3QgUDIgPiBMSU5FLgoKCSogY29tcGF0TWFrZWZpbGUgKCQoYmluZGlyKS8kKGluc3RuYW1lKSk6IEJlZm9yZSBtb3ZpbmcgJEAubmV3IHRvCgkkQCwgcm0gJEAub2xkIGFuZCBtdiAkQCB0byAkQC5vbGQuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFRha2UgbmV3IGFyZ3MgRklMRU5BTUUgYW5kCglMSU5FTk8uICBGYXRhbCBpZiB0aGUgdmFyaWFibGUgbmFtZSBpcyBlbXB0eS4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2hhbmdlIGNhbGxlcnMuCgkqIG1haW4uYyAobWFpbik6IExpa2V3aXNlLgoKCSogY29tcGF0TWFrZWZpbGUgKGdyb3VwKTogRGVmaW5lIHRvIEBLTUVNX0dST1VQQCwgYXV0b2NvbmYgbWFnaWMKCXRoYXQgY29uZmlndXJlIHdpbGwgcmVwbGFjZSB3aXRoIHRoZSBncm91cCBvd25pbmcgL2Rldi9rbWVtLgoKTW9uIEZlYiAgOCAxNDoyNjo0MyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKHZwYXRoX3NlYXJjaCk6IFRha2Ugc2Vjb25kIGFyZyBNVElNRV9QVFIsIHBhc3MgdGhydSB0bwoJc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaC4KCShzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogVGFrZSBzZWNvbmQgYXJnIE1USU1FX1BUUi4KCUlmIHRoZSBkaXIgY2FjaGUgdGhpbmtzIGEgZmlsZSBleGlzdHMsIHN0YXQgaXQgdG8gbWFrZSBzdXJlLCBhbmQKCXB1dCB0aGUgbW9kdGltZSBpbiAqTVRJTUVfUFRSLgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBUYWtlIHNlY29uZCBhcmcgTVRJTUVfUFRSLgoJV2hlbiB3ZSBmaW5kIGEgbWF0Y2gsIHJlY29yZCBpdHMgbXRpbWUgdGhlcmUuCglQYXNzIE1USU1FX1BUUiB0aHJvdWdoIHRvIHZwYXRoX3NlYXJjaCB0byBkbyBzYW1lLgoJKGZfbXRpbWUpOiBQYXNzICZNVElNRSBhcyBuZXcgMm5kIGFyZyB0byB7dnBhdGgsbGlicmFyeX1fc2VhcmNoOwoJc3RvcmUgaXQgaW4gRklMRS0+bGFzdF9tdGltZSBpZiBzZXQgbm9uemVyby4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBQYXNzIG5pbCAybmQgYXJnIHRvIHZwYXRoX3NlYXJjaC4KCgkqIGNvbXBhdE1ha2VmaWxlIChyZW1vdGUubyk6IFByZXBlbmQgYCQoc3JjZGlyKS8nIHRvIGByZW1vdGUtKi5jJywKCXNvIGdsb2JiaW5nIGxvb2tzIHNvbWV3aGVyZSBpdCB3aWxsIGZpbmQgdGhpbmdzLgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mbyk6IEluc3RhbGwgYG1ha2UuaW5mbyonCglub3QgYCQoc3JjZGlyKS9tYWtlLmluZm8qJzsgbm8gbmVlZCB0byB1c2UgYmFzZW5hbWUuCgpGcmkgRmViICA1IDEyOjUyOjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjMuCgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbCk6IEFkZCBtaXNzaW5nIDtccy4KCglNYWtlIC0sIEAsIGFuZCArIHByZWZpeGVzIG9uIGEgcHJlLWV4cGFuZGVkIGNvbW1hbmQgbGluZSBhZmZlY3QKCWFsbCBsaW5lcyBpbiB0aGUgZXhwYW5zaW9uLCBub3QganVzdCB0aGUgZmlyc3QuCgkqIGNvbW1hbmRzLmggKHN0cnVjdCBjb21tYW5kcyk6IFJlcGxhY2UgYGxpbmVzX3JlY3Vyc2UnIG1lbWJlcgoJd2l0aCBgbGluZXNfZmxhZ3MnLgoJKENPTU1BTkRTX3tSRUNVUlNFLFNJTEVOVCxOT0VSUk9SfSk6IE5ldyBtYWNyb3MsIGJpdHMgdG8gc2V0IGluCgl0aGF0IGZsYWcgYnl0ZS4KCSogY29tbWFuZHMuYyAoY2hvcF9jb21tYW5kcyk6IFNldCBgbGluZXNfZmxhZ3MnIGluc3RlYWQgb2YKCWBsaW5lc19yZWN1cnNlJy4gIFJlY29yZCBub3Qgb25seSArIGJ1dCBhbHNvIEAgYW5kIC0gcHJlZml4ZXMuCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IENoZWNrIHRoZSBDT01NQU5EU19SRUNVUlNFIGJpdAoJaW4gRklMRS0+Y21kcy0+bGluZXNfZmxhZ3MsIHJhdGhlciB0aGFuIEZJTEUtPmNtZHMtPmxpbmVzX3JlY3Vyc2UuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFJlcGxhY2VkIFJFQ1VSU0lWRSBhbmQgTk9QUklOVCBsb2NhbAoJdmFyIHdpdGggRkxBR1M7IGluaXRpYWxpemUgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGBsaW5lc19mbGFncycgYnl0ZS4KCVNldCBDSElMRC0+bm9lcnJvciBpZiB0aGUgQ09NTUFORFNfTk9FUlJPUiBiaXQgaXMgc2V0IGluIEZMQUdTLgoJU2V0IHRoZSBDT01NQU5EU19TSUxFTlQgYml0IGluIEZMQUdTIGZvciBhIEAgcHJlZml4LgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogU2V0IEctPmZpbGUgdG8gaXRzIHByZXYgYWZ0ZXIKCWNoZWNraW5nIGZvciBHIGJlaW5nIGZpbmlzaGVkLCBzaW5jZSB0aGF0IGNoZWNrIG5lZWRzIHRvIGV4YW1pbmUKCUctPmZpbGUuCgoJKiBjb25maWd1cmUuaW4gKHVuaW9uIHdhaXQgY2hlY2spIFtIQVZFX1dBSVRQSURdOiBUcnkgdXNpbmcKCXdhaXRwaWQgd2l0aCBhIGB1bmlvbiB3YWl0JyBTVEFUVVMgYXJnLiAgSWYgd2FpdHBpZCBhbmQgdW5pb24gd2FpdAoJZG9uJ3Qgd29yayB0b2dldGhlciwgd2Ugc2hvdWxkIG5vdCB1c2UgdW5pb24gd2FpdC4KCgkqIFZlcnNpb24gMy42My4yLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogV2hlbiBHLT5maWxlLT51cGRhdGVkLCBtb3ZlCglHLT5maWxlIHRvIGl0cyBwcmV2LiAgV2UgYXJlbid0IGZpbmlzaGVkIHVudGlsIEctPmZpbGUgaXMgbmlsLgoKVGh1IEZlYiAgNCAxMjo1MzowNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChzdGFydGluZ19kaXJlY3RvcnkpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKG1haW4pOiBTZXQgaXQgdG8gY3dkIGFmdGVyIGRvaW5nIC1Dcy4KCShsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBVc2UgaXQsIHJhdGhlciB0aGFuIGNvbXB1dGluZyBlYWNoIHRpbWUuCgkqIG1ha2UuaDogRGVjbGFyZSBpdC4KCgkqIGNvbXBhdE1ha2VmaWxlIChTSEVMTCk6IERlZmluZSB0byAvYmluL3NoIGZvciBsb3NpbmcgVW5peCBtYWtlcy4KCgkqIG1haW4uYyAoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IEFsbG9jYXRlICgxICsgTEVOICsgMSkgd29yZHMgZm9yCglBUkdWLCByYXRoZXIgdGhhbiBMRU4gd29yZHMgcGx1cyBvbmUgYnl0ZS4KCldlZCBGZWIgIDMgMTg6MTM6NTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogUHV0IC0gYmVmb3JlCglpbnN0YWxsX3NldGdpZCBjb21tYW5kIGxpbmUsIHNvIGl0cyBmYWlsdXJlIHdvbid0IGJlIGFuIGVycm9yLgoJKGluZm9kaXIpOiBOZXcgdmFyaWFibGUuCgkoaW5zdGFsbCk6IERlcGVuZCBvbiAkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8uCgkoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogTmV3IHRhcmdldC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmIEZJTEVOQU1FUyBpcyBuaWwgd2hlbiB3ZSBzZWUgYSBsaW5lCglzdGFydGluZyB3aXRoIGEgdGFiLCBkb24ndCB0cmVhdCBpdCBhcyBhIGNvbW1hbmQuICBKdXN0IGZhbGwKCXRocm91Z2gsIHJhdGhlciB0aGFuIGdpdmluZyBhbiBlcnJvci4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmIHRoZSBOT19UQVJHRVRTIGZsYWcgaXMgc2V0IHdoZW4gd2Ugc2VlIGEKCWNvbW1hbmQgbGluZSwgZG9uJ3QgY2xlYXIgaXQgYmVmb3JlIGNvbnRpbnVpbmcuICBXZSB3YW50CglzdWJzZXF1ZW50IGNvbW1hbmQgbGluZXMgdG8gYmUgaWdub3JlZCBhcyB3ZWxsLgoKCSogam9iLmMgKG5ld19qb2IpOiBCZWZvcmUgZXhwYW5kaW5nIGVhY2ggY29tbWFuZCBsaW5lLCBjb2xsYXBzZQoJYmFja3NsYXNoLW5ld2xpbmUgY29tYmluYXRpb25zIHRoYXQgYXJlIGluc2lkZSB2YXIgb3IgZm4gcmVmZXJlbmNlcy4KCk1vbiBGZWIgIDEgMTY6MDA6MTMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoZXhlY19wcmVmaXgpOiBEZWZhdWx0IHRvICQocHJlZml4KSwgbm90IC91c3IvbG9jYWwuCgoJKiBjb21wYXRNYWtlZmlsZSAobWFrZS5pbmZvKTogUGFzcyAtSSQoc3JjZGlyKSB0byBtYWtlaW5mby4KCgkqIGpvYi5jIFtQT1NJWF0gKHVuYmxvY2tfc2lncyk6IE1hZGUgZ2xvYmFsLgoJWyFQT1NJWF0gKHVuYmxvY2tfc2lncyk6IE1vdmUgZGVmbnMgdG8gam9iLmguCgkqIGpvYi5oIFtQT1NJWF0gKHVuYmxvY2tfc2lncyk6IERlY2xhcmUuCgpTdW4gSmFuIDMxIDE5OjExOjA1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSW4gdnBhdGggcGFyc2luZywgYWZ0ZXIgZmluZGluZyB0aGUKCXBhdHRlcm4gdG9rZW4sIHRha2UgZW50aXJlIHJlc3Qgb2YgbGluZSBhcyB0aGUgc2VhcmNoIHBhdGgsIG5vdAoJanVzdCB0aGUgbmV4dCB0b2tlbi4KCgkqIGNvbXBhdE1ha2VmaWxlIChyZW1vdGUubyk6IERlcGVuZCBvbiByZW1vdGUtKi5jLgoKVGh1IEphbiAyOCAxNjo0MDoyOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogRG9uJ3QgZGVmaW5lIGFueSBGIG9yIEQgdmVyc2lvbnMuCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRGVmaW5lIHRoZW0gaGVyZSBhcwoJcmVjdXJzaXZlbHktZXhwYW5kZWQgdmFyaWFibGVzIHRoYXQgdXNlIHRoZSBkaXIgYW5kIG5vdGRpciBmdW5jcy4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IEluIHZfZGVmYXVsdCBjYXNlLCBkb24ndCBleHBvcnQKCW9fZGVmYXVsdCBvciBvX2F1dG9tYXRpYyB2YXJpYWJsZXMuCgoJKiBjb25maWd1cmUuaW4gKHVuaW9uIHdhaXQgY2hlY2spOiBSZW1vdmUgYCBhbmQgJyBpbnNpZGUgQyBjb2RlOwoJdGhleSBjb25mdXNlIHRoZSBzaGVsbCBzY3JpcHQuCgpNb24gSmFuIDI1IDEzOjEwOjQyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuMS4KCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogV2hlbiBza2lwcGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcKCW9mIGFuIGVsdCB0aGF0IGlzICIuIiwgZG9uJ3QgYWxzbyBza2lwIHRoZSBjb2RlIHRoYXQgcHVzaGVzIFAgcGFzdAoJdGhlIG5leHQgc2VwYXJhdG9yLgoKCSogY29tcGF0TWFrZWZpbGUgKGRpc3RjbGVhbik6IERvbid0IHJlbW92ZSBtYWtlLSouCgoJKiBjb25maWd1cmUuaW4gKEhBVkVfVU5JT05fV0FJVCk6IFRyeSB0byB1c2UgV0VYSVRTVEFUVVMgaWYgaXQncwoJZGVmaW5lZC4gIElmIG9uZSBjYW5ub3QgdXNlIFdFWElUU1RBVFVTIHdpdGggYSBgdW5pb24gd2FpdCcKCWFyZ3VtZW50LCB3ZSBkb24ndCB3YW50IHRvIGJlbGlldmUgdGhlIHN5c3RlbSBoYXMgYHVuaW9uIHdhaXQnIGF0IGFsbC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IERvIG5vdGhpbmcgdG8gcHJpbnQgInVwIHRvIGRhdGUiIG1zZ3MuCgkodXBkYXRlX2dvYWxfY2hhaW4pOiBEbyBpdCBoZXJlIGluc3RlYWQuCglVc2UgdGhlIGBjaGFuZ2VkJyBmbGFnIG9mIGVhY2ggZ29hbCdzIGBzdHJ1Y3QgZGVwJyB0byBrZWVwIHRyYWNrCglvZiB3aGV0aGVyIGZpbGVzX3JlbWFkZSAobm93IGNvbW1hbmRzX3N0YXJ0ZWQpIGNoYW5nZWQgYXJvdW5kIGEKCWNhbGwgdG8gdXBkYXRlX2ZpbGUgZm9yIHRoYXQgZ29hbC4KCVdoZW4gYSBnb2FsIGlzIGZpbmlzaGVkLCBhbmQgaXRzIGZpbGUncyB1cGRhdGVfc3RhdHVzIGlzIHplcm8gKGkuZS4sCglzdWNjZXNzIG9yIG5vdGhpbmcgZG9uZSksIHRlc3QgdGhlIGBjaGFuZ2VkJyBmbGFnIGFuZCBnaXZlIGFuICJ1cAoJdG8gZGF0ZSIgbXNnIGlmZiBpdCBpcyBjbGVhci4KCSogbWFrZS5oIChmaWxlc19yZW1hZGUpOiBSZW5hbWVkIHRvIGNvbW1hbmRzX3N0YXJ0ZWQuCgkqIHJlbWFrZS5jOiBDaGFuZ2VkIGRlZm4uCgkodXBkYXRlX2dvYWxfY2hhaW4pOiBDaGFuZ2VkIHVzZXMuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEluY3JlbWVudCBjb21tYW5kc19zdGFydGVkIGhlcmUuCgkocmVhcF9jaGlsZHJlbik6IE5vdCBoZXJlLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogRG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBmaWxlcycKCWBwcmV2JyBtZW1iZXJzLiAgdXBkYXRlX2ZpbGUgbm93IGNvbXBsZXRlbHkgaGFuZGxlcyB0aGlzLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogRG9uJ3QgZXhwYW5kIHJlY3Vyc2l2ZQoJdmFyaWFibGVzIGlmIHRoZXkgY2FtZSBmcm9tIHRoZSBlbnZpcm9ubWVudC4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IEZvciBmbGFncyB3aXRoIG9taXR0ZWQgb3B0aW9uYWwgYXJncywKCXN0b3JlIHsiIiwgMH0gd2l0aCBBRERfRkxBRy4gIFdoZW4gY29uc3RydWN0aW5nIEZMQUdTVFJJTkcsIGEgZmxhZwoJc28gc3RvcmVkIGNhbm5vdCBoYXZlIG1vcmUgZmxhZ3MgYXBwZW5kZWQgdG8gdGhlIHNhbWUgd29yZC4KCkZyaSBKYW4gMjIgMTQ6NDY6MTYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmMgKHByaW50X3ZhcmlhYmxlX3NldCk6IEluIHZhcnMvYnVja2V0IGNhbGN1bGF0aW9uLAoJZG9uJ3Qgc3B1cmlvdXNseSBtdWx0aXBseSBieSAxMDAuCgoJKiBWZXJzaW9uIDMuNjMuCgoJKiBqb2IuYyBbIUhBVkVfVU5JT05fV0FJVF0gKFdURVJNU0lHLCBXQ09SRURVTVAsIFdFWElUU1RBVFVTKToKCURvbid0IGRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBEb24ndCBrZWVwIHRyYWNrIG9mIHRoZSBjb21tYW5kX3N0YXRlIGJlZm9yZQoJY2FsbGluZyB1cGRhdGVfZmlsZV8xLiAgUmVtb3ZlIGxvY2FsIHZhcmlhYmxlIENPTU1BTkRTX0ZJTklTSEVELAoJYW5kIGRvbid0IHRlc3QgaXQgdG8gZGVjaWRlIHRvIHByaW50IHRoZSAiaXMgdXAgdG8gZGF0ZSIgbXNnLgoJVGVzdGluZyBmb3IgZmlsZXNfcmVtYWRlIGhhdmluZyBjaGFuZ2VkIHNob3VsZCBhbHdheXMgYmUgc3VmZmljaWVudC4KCVRoZSBvbGQgbWV0aG9kIGxvc3Qgd2hlbiB3ZSBhcmUgY2FsbGVkIGluIHRoZSBnb2FsIGNoYWluIHJ1biBvbiBhCgltYWtlZmlsZSwgYmVjYXVzZSB0aGUgbWFrZWZpbGUncyBjb21tYW5kX3N0YXRlIGlzIGFscmVhZHkKCWBjc19maW5pc2hlZCcgZnJvbSB0aGUgbWFrZWZpbGUgY2hhaW4gcnVuLgoKCSogbWlzYy5jIFtIQVZFX1NFVFJFW0dVXUlEXTogVGVzdCB0aGVzZSB0byBkZWNsIHNldHJlW2d1XWlkLgoKCSogY29uZmlndXJlLmluOiBSZXdyb3RlIHdhaXQgY2hlY2tpbmcuCglVc2UgQUNfSEFWRV9IRUFERVJTIHRvIGNoZWNrIGZvciA8c3lzL3dhaXQuaD4uCglVc2UgQUNfSEFWRV9GVU5DUyB0byBjaGVjayBmb3Igd2FpdHBpZCBhbmQgd2FpdDMuCglVc2UgYSBjb21waWxlIGNoZWNrIHRvIHRlc3QganVzdCBmb3IgYHVuaW9uIHdhaXQnLgoJKiBqb2IuYzogUmV3cm90ZSBjb25kaXRpb25hbHMgYWNjb3JkaW5nbHkuCglbSEFWRV9XQUlUUElEXTogVGVzdCB0aGlzIG9ubHkgdG8gZGVmaW5lIFdBSVRfTk9IQU5HLgoJW0hBVkVfV0FJVDNdOiBMaWtld2lzZS4KCVtIQVZFX1VOSU9OX1dBSVRdOiBUZXN0IHRoaXMgdG8gZGVmaW5lIFdBSVRfVCBhbmQgVyouCgoJKiBjb25maWd1cmUuaW46IFNldCBDRkxBR1MgYW5kIExERkxBR1MgYmVmb3JlIGFsbCBjaGVja3MuCgoJKiBkaXIuYzogQWRkIHN0YXRpYyBmb3J3YXJkIGRlY2xzIG9mIHtvcGVuLHJlYWR9X2RpcnN0cmVhbS4KClRodSBKYW4gMjEgMTc6MTg6MDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMzEuCgoJKiBqb2IuYyBbTkdST1VQU19NQVggJiYgTkdST1VQU19NQVg9PTBdOiAjdW5kZWYgTkdST1VQU19NQVguCgoJKiBjb21wYXRNYWtlZmlsZSAoQ0ZMQUdTLCBMREZMQUdTKTogU2V0IHRvIEBDRkxBR1NAL0BMREZMQUdTQC4KCSogYnVpbGQudGVtcGxhdGUgKENGTEFHUywgTERGTEFHUyk6IFNhbWUgaGVyZS4KCSogY29uZmlndXJlLmluOiBBQ19TVUJTVChDRkxBR1MpIGFuZCBMREZMQUdTLgoJU2V0IHRoZW0gdG8gLWcgaWYgbm90IGRlZmluZWQgaW4gdGhlIGVudmlyb25tZW50LgoKCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogVXNlIExJQk5BTUUgY29uc2lzdGVudGx5LCBzZXR0aW5nIGl0Cglvbmx5IG9uY2UsIHRvIGJlIHRoZSBwYXNzZWQgbmFtZSBzYW5zIGAtbCcuCglQYXNzIG5ldyB2YXIgRklMRSB0byBiZSBtb2RpZmllZCBieSB2cGF0aF9zZWFyY2guCgpNb24gSmFuIDE4IDE0OjUzOjU0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMzAuCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2JzKTogUmV0dXJuIHdoZW4gam9iX3Nsb3RzX3VzZWQgaXMgZXF1YWwgdG8KCWpvYl9zbG90cy4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0NPTlNUIGZvciB0aGUgc2FrZSBvZiBnZXRvcHQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDb250aW51ZSBhZnRlciBwYXJzaW5nIGBvdmVycmlkZScKCWRpcmVjdGl2ZSwgcmF0aGVyIHRoYW4gZmFsbGluZyB0aHJvdWdoIHRvIGxvc3NhZ2UuCglDaGVjayBmb3IgRU9MIG9yIGJsYW5rIGFmdGVyICJvdmVycmlkZSBkZWZpbmUiLgoKCSogY29tcGF0TWFrZWZpbGUgKC5jLm8sIHJlbW90ZS5vKTogUHV0ICQoQ0ZMQUdTKSBhZnRlciBvdGhlciBzd2l0Y2hlcy4KCkZyaSBKYW4gMTUgMTI6NTI6NTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yOS4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IEFmdGVyIHdyaXRpbmcgZXZlcnl0aGluZyBpbnRvCglGTEFHU1RSSU5HLCBvbmx5IGJhY2sgdXAgdHdvIGNoYXJzIGlmIFstMV0gaXMgYSBkYXNoLCBtZWFuaW5nIHdlCglqdXN0IHdyb3RlICIgLSIuICBBbHdheXMgdGVybWluYXRlIHRoZSBzdHJpbmcgYXQgKlAuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBXaGVuIGNvbnN0cnVjdGluZyBuYW1lcyBpbiBzdGQgZGlycywKCXVzZSAmKCpMSUIpWzJdIGZvciB0aGUgc3RlbSwgbm90IExJQk5BTUUgKHdoaWNoIHBvaW50cyBhdCB0aGUKCWJ1ZmZlciB3ZSBhcmUgd3JpdGluZyBpbnRvISkuCgpUaHUgSmFuIDE0IDEzOjUwOjA2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBTZXQgSU5fSUdOT1JFRF9ERUZJTkUgZm9yICJvdmVycmlkZQoJZGVmaW5lIiB3aGVuIElHTk9SSU5HIGlzIHRydWUuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGlzdGNsZWFuKTogUmVtb3ZlIGNvbmZpZy5zdGF0dXMgYW5kIGJ1aWxkLnNoLgoKV2VkIEphbiAxMyAxNjowMToxMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI4LgoKCSogbWlzYy5jICh4bWFsbG9jLCB4cmVhbGxvYyk6IENhc3QgcmVzdWx0IG9mIG1hbGxvYy9yZWFsbG9jIHRvCgkoY2hhciAqKS4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKSBbQUlBTUFHXTogQ2FzdCByZWFkIGFyZyB0byAoY2hhciAqKS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogT3ZlcnJpZGUgU0hFTEwgdmFsdWUgZm9yCglvcmlnaW4gb19lbnZfb3ZlcnJpZGUgYXMgd2VsbCBhcyBvX2Vudi4KCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IERvbid0IHJlcGxhY2UgJWdsb2JvYmpzJS4gIEluc3RlYWQsCglhZGQgdGhlIG5hbWVzIG9mIHRoZSBnbG9iIG9iamVjdHMgKHcvc3ViZGlyKSB0byAlb2JqcyUuCgkqIGJ1aWxkLnRlbXBsYXRlIChnbG9ib2Jqcyk6IFJlbW92ZWQuCglUYWtlIGJhc2VuYW1lIG9mICRvYmpzIGJlZm9yZSBsaW5raW5nLgoKVHVlIEphbiAxMiAxMjozMTowNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNy4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogQWxzbyBlZGl0IGJ1aWxkLnNoLgoJKiBidWlsZC50ZW1wbGF0ZTogTmV3IGZpbGUuCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IE5ldyBydWxlIHRvIGNyZWF0ZSBpdCBmcm9tIGJ1aWxkLnRlbXBsYXRlLgoJKG1ha2UtJCh2ZXJzaW9uKS50YXIuWik6IERlcGVuZCBvbiBidWlsZC5zaC5pbi4KCgkqIG1haW4uYyAoZGllKTogQ2FsbCBwcmludF9kYXRhX2Jhc2UgaWYgLXAuCgkobWFpbik6IERvbid0IGNhbGwgaXQgaGVyZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkZWZpbmVzKTogQWRkIEBERUZTQC4gIGNvbmZpZ3VyZSBzaG91bGQgdHVybiB0aGlzCglpbnRvIC1ESEFWRV9DT05GSUdfSC4KCk1vbiBKYW4gMTEgMTQ6Mzk6MjMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjYuCgoJKiBtaXNjLmMgKGluaXRfYWNjZXNzKTogU3Vycm91bmQgd2l0aCAjaWZkZWYgR0VUTE9BREFWR19QUklWSUxFR0VELgoJKHttYWtlLHVzZXIsY2hpbGR9X2FjY2VzcykgWyEgR0VUTE9BREFWR19QUklWSUxFR0VEXTogTWFrZSBuby1vcC4KCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGxfc2V0Z2lkKTogTmV3IHZhciwgc2V0IGJ5IGNvbmZpZ3VyZS4KCShpbnN0YWxsKTogSW5zdGFsbCBzZXRnaWQgJChncm91cCkgb25seSBpZiAkKGluc3RhbGxfc2V0Z2lkKSBpcyB0cnVlLgoKRnJpIEphbiAgOCAxNTozMTo1NSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGxvYWRfdG9vX2hpZ2gpOiBJZiBnZXRsb2FkYXZnIGZhaWxzIHdpdGggZXJybm89PTAsIGdpdmUgYQoJbWVzc2FnZSBzYXlpbmcgdGhhdCBsb2FkIGxpbWl0cyBhcmUgbm90IHN1cHBvcnRlZC4KCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogUmV3cm90ZSBwYXRoIGRlbGV0aW9uIGNvZGUgdG8KCW5vdCB0cnkgdG8gdXNlIFBBVEgncyBuZXh0IGxpbmsgYWZ0ZXIgZnJlZWluZyBQQVRILgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogUmV3cml0dGVuOyBub3cgaGFuZGxlcyBzdHJpbmctdmFsdWVkCglvcHRpb24sIGFuZCBoYXMgbm8gYXJiaXRyYXJ5IGxpbWl0cy4KCShzd2l0Y2hlcyk6IFNldCBgdG9lbnYnIGZsYWcgZm9yIC1JIGFuZCAtdi4KCgkqIG1haW4uYyAoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IENhc3QgcmV0dXJuIHZhbHVlIG9mIGFsbG9jYSB0byBjaGFyICouCgoJKiBtaXNjLmMgKGNoaWxkX2FjY2VzcykgW0hBVkVfU0VUUkVVSUQsIEhBVkVfU0VUUkVHSURdOiBVc2UKCXNldHJlW2d1XWlkIGluIHBsYWNlIG9mIHNldFtndV1pZC4KCldlZCBKYW4gIDYgMTU6MDY6MTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IERlZmluZSBNQUtFT1ZFUlJJREVTLCBNQUtFLCBhbmQgTUFLRV9DT01NQU5EIHdpdGgKCW9yaWdpbiBvX2RlZmF1bHQuCgoJKiBtYWtlLmggW1BPU0lYXTogRG9uJ3QgdGVzdCB0aGlzIHRvIHVzZSBBTlNJX1NUUklORy4KCVRlc3RpbmcgU1REQ19IRUFERVJTIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKCSogam9iLmg6IERlY2xhcmUgc3RhcnRfd2FpdGluZ19qb2JzLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWRkIG1pc3NpbmcgcGFyZW5zIGluIGlmIHN0bXQgdGhhdCBmaW5kCgljb25kaXRpb25hbCBkaXJlY3RpdmVzLgoKCSogbWFpbi5jIChtYWluKTogRGVjbGFyZSBpbml0X2Rpci4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBBbHdheXMgdXNlIHR3byAlIHNwZWNzIGluIGEKCURFQlVHUDIsIGFuZCBhbHdheXMgcGFzcyB0d28gbm9uLW5pbCBhcmdzLgoJQ2FzdCBmaWVsZCB3aWR0aCBhcmdzIHRvIGludC4KCUFkZCBtaXNzaW5nIHBhcmVucyBpbiAhUlVMRS0+c3ViZGlyIGlmIHN0bXQuCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbiwgcGF0c3Vic3RfZXhwYW5kKTogQWRkIHBhcmVucyBhcm91bmQKCWFzc2lnbm1lbnRzIGluc2lkZSBgd2hpbGUnIHN0bXRzLgoJKiBjb21tYW5kcy5jIChwcmludF9jb21tYW5kcyk6IENhc3QgZmllbGQgd2lkdGggYXJncyB0byBpbnQuCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IENhc3QgcmV0dXJuIHZhbHVlIG9mIGFsbG9jYSB0byAoY2hhciAqKS4KCgkqIG1haW4uYyAoaW5pdF9zd2l0Y2hlcyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiBkZWNvZGVfc3dpdGNoZXMuCgkoZGVjb2RlX3N3aXRjaGVzKTogVGFrZSBuZXcgYXJnIEVOVi4gIElmIHNldCwgaWdub3JlIG5vbi1vcHRpb24KCWFyZ3M7IHByaW50IG5vIGVycm9yIG1zZ3M7IGlnbm9yZSBvcHRpb25zIHdpdGggY2xlYXIgYGVudicgZmxhZ3MuCgkoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFJld3JpdHRlbiB0byBjaG9wIGVudmFyIHZhbHVlIGludG8gd29yZHMKCWFuZCBwYXNzIHRoZW0gdG8gZGVjb2RlX3N3aXRjaGVzLgoJKHN3aXRjaGVzKTogU2V0IGBlbnYnIGZsYWcgZm9yIC1JIGFuZCAtdi4KCgkqIGRpci5jIChpbml0X2Rpcik6IENhc3QgZnJlZSB0byBfX2dsb2JfY2xvc2VkaXJfaG9vaydzIHR5cGUuCgpUdWUgSmFuICA1IDE0OjUyOjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjUuCgoJKiBqb2IuYyBbSEFWRV9TWVNfV0FJVCB8fCAhVVNHXTogRG9uJ3QgI2luY2x1ZGUgPHN5cy90aW1lLmg+IGFuZAoJPHN5cy9yZXNvdXJjZS5oPi4gIDxzeXMvdGltZS5oPiBpbnRlcmFjdHMgYmFkbHkgd2l0aCA8dGltZS5oPiwgYW5kCgl3ZSBkb24ndCBuZWVkIHRoZXNlIGFueXdheS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfSEFWRV9GVU5DUyk6IENoZWNrIGZvciBzZXRyZVtndV1pZC4KCSogbWlzYy5jICh7dXNlcixtYWtlfV9hY2Nlc3MpOiBUZXN0ICNpZm5kZWYgSEFWRV9TRVRSRVtHVV1JRCwgbm90CgkjaWZkZWYgUE9TSVggfHwgVVNHLiAgU3VuT1MgNC4xIGlzIHN1cHBvc2VkbHkgUE9TSVguMSBjb21wbGlhbnQsCglidXQgaXRzIHNldFtndV1pZCBmdW5jdGlvbnMgYXJlbid0OyBpdHMgc2V0cmVbZ3VdaWQgZnVuY3Rpb25zIHdvcmsuCgoJKiBtaXNjLmMgKHt1c2VyLG1ha2UsY2hpbGR9X2FjY2Vzcyk6IEdpdmUgbmFtZSBvZiBjYWxsZXIgaW4gZXJyb3IgbXNncy4KCgkqIGpvYi5jIChsb2FkX3Rvb19oaWdoKTogU2F5ICJjYW5ub3QgZW5mb3JjZSBsb2FkIGxpbWl0IiBpbiBlcnJvciBtc2cuCgoJKiBjb25maWd1cmUuaW46IENhbGwgQUNfUFJPR19DQy4KCSogY29tcGF0TWFrZWZpbGUgKENDKTogRGVmaW5lIHRvIEBDQ0AgKGF1dG9jb25mIG1hZ2ljKS4KCgkqIGNvbXBhdE1ha2VmaWxlOiBBZGQgLk5PRVhQT1JUIG1hZ2ljIHRhcmdldC4KCk1vbiBKYW4gIDQgMTc6MDA6MDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBVcGRhdGVkIGNvcHlyaWdodCB0byBpbmNsdWRlIDkzLgoKVGh1IERlYyAzMSAxMjoyNjoxNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbX0FJWF06IERvbid0IGRlY2xhcmUgYWxsb2NhLgoKVHVlIERlYyAyOSAxMzo0NToxMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNC4KCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogQWRkIHNpZ25hbWUuby4KCShzcmNzKTogQWRkIHNpZ25hbWUuW2NoXS4KCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNzKTogQWRkIGNvbmZpZy5oLmluLgoJKHJlbW90ZS5vKTogQWRkIC1JLiBiZWZvcmUgLUkkKHNyY2RpcikuCgpNb24gRGVjIDI4IDE1OjUxOjI2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjMuCgoJKiByZWFkLmMgKHJlYWRsaW5lKTogRmF0YWwgd2hlbiBMRU49PTAsIGluZGljYXRpbmcgYSBsaW5lIHN0YXJ0aW5nCgl3aXRoIGEgTlVMLgoJKHJlYWRsaW5lKTogVGFrZSBuZXcgYXJnIExJTkVOTywgZm9yIHVzZSBpbiBlcnJvciBtc2cuCgkocmVhZF9tYWtlZmlsZSwgZG9fZGVmaW5lKTogUGFzcyBpdC4KCgkqIGNvbXBhdE1ha2VmaWxlIChnbG9iL2xpYmdsb2IuYSk6IFBhc3MgLURIQVZFX0NPTkZJR19IIGluIENQUEZMQUdTLgoJKC5jLm8pOiBBZGQgLUkuIGJlZm9yZSAtSSQoc3JjZGlyKS4KCldlZCBEZWMgMjMgMTI6MTI6MDQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEFjY2VwdCBhbmQgaWdub3JlIGEgcnVsZSB3aXRoIG5vIHRhcmdldHMuCgoJKiBjb21wYXRNYWtlZmlsZSAoQUxMT0NBX1NSQyk6IE5ldyB2YXJpYWJsZS4KCShzcmNzKTogSW5jbHVkZSBpdHMgdmFsdWUuCgoJKiByZWFkLmMgKHN0cnVjdCBjb25kaXRpb25hbCk6IFJlbmFtZWQgbWVtYmVyIGBtYXhfaWdub3JpbmcnIHRvCglgYWxsb2NhdGVkJzsgYWRkZWQgbmV3IG1lbWJlciBgc2Vlbl9lbHNlJy4KCShjb25kaXRpb25hbF9saW5lKTogSW5pdGlhbGl6ZSBzZWVuX2Vsc2UgZmxhZyB3aGVuIHN0YXJ0aW5nIGFuIGBpZi4uLic7CglzZXQgaXQgd2hlbiB3ZSBzZWUgYW4gYGVsc2UnOyBmYXRhbCBpZiBzZXQgd2hlbiB3ZSBzZWUgYGVsc2UnLgoJKHJlYWRfbWFrZWZpbGUpOiBGYXRhbCAibWlzc2luZyBgZW5kaWYnIiBpZiB0aGVyZSBhcmUgYW55IHBlbmRpbmcKCWNvbmRpdGlvbmFscywgbm90IGp1c3QgaWYgd2UgYXJlIHN0aWxsIGlnbm9yaW5nLgoKVHVlIERlYyAyMiAxNTozNjoyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKG1hbmV4dCk6IFNldCB0byAxLCBub3QgbC4KCSgkKG1hbmRpcikvJChpbnN0bmFtZSkuJChtYW5leHQpKTogVXNlICQoc3JjZGlyKSBmb3IgbWFrZS5tYW4gaW4gY21kcy4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogRG9uJ3QgY2FsbCB1bmlxdWl6ZV9kZXBzIGhlcmUuCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogTGlrZXdpc2UuCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogTGlrZXdpc2UuCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IENhbGwgaXQgb25seSBoZXJlLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19fY29udmV4X19dOiBGQz1mYy4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IEV4cGFuZCB0aGUgdmFsdWVzIG9mIHJlY3Vyc2l2ZWx5CglleHBhbmRlZCB2YXJpYWJsZXMgd2hlbiBwdXR0aW5nIHRoZW0gaW50byB0aGUgZW52aXJvbm1lbnQuCgkqIGV4cGFuZC5jIChyZWN1cnNpdmVseV9leHBhbmQpOiBNYWRlIGdsb2JhbC4KCSogbWFrZS5oIChyZWN1cnNpdmVseV9leHBhbmQpOiBEZWNsYXJlIGl0LgoKCSogcmVtYWtlLmMgKGNoZWNrX2RlcCk6IFNldCBGSUxFLT5jb21tYW5kX3N0YXRlIHRvIGNzX2RlcHNfcnVubmluZwoJd2hlbiBhIGRlcCdzIGNvbW1hbmRfc3RhdGUgaXMgY3NfcnVubmluZyBvciBjc19kZXBzX3J1bm5pbmcuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2VkIGVycm9yIG1zZyBmb3Igc3B1cmlvdXMgY21kcyB0bwoJbm90IHNheSAiZmlyc3QgdGFyZ2V0Ii4KClN1biBEZWMgMjAgMTc6NTY6MDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBEbyBBQ19DT05GSUdfSEVBREVSIHJpZ2h0IGFmdGVyIEFDX0lOSVQuCgkqIG1ha2UuaCAoSEFWRV9DT05GSUdfSCk6ICNpbmNsdWRlICJjb25maWcuaCIsIHRoZW4gI2RlZmluZSB0aGlzLgoJKiBjb21wYXRNYWtlZmlsZSAoY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlnLmguaW4pOiBOZXcgcnVsZXMuCgkoZGVmaW5lcyk6IFJlbW92ZWQgQERFRlNALgoKVGh1IERlYyAxNyAxNjoxMTo0MCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKHJlYWxjbGVhbik6IEp1c3QgZGVwZW5kIG9uIGRpc3RjbGVhbjsgbm8gY21kcy4KCShkaXN0Y2xlYW4pOiBEbyB3aGF0IHJlYWxjbGVhbiBkaWQgYmVmb3JlOyBhbHNvIHJlbW92ZSBNYWtlZmlsZSBhbmQKCWNvbmZpZy5oOyBkb24ndCByZW1vdmUgY29uZmlndXJlLgoJKGluZm8sIGR2aSk6IE5ldyB0YXJnZXRzOyBkZXBlbmQgb24gbWFrZS57aW5mbyxkdml9LgoJKGRvYyk6IFJlbW92ZWQgdGFyZ2V0LgoJKE1BS0VJTkZPLCBURVhJMkRWSSk6IE5ldyB2YXJzLgoJKG1ha2UuaW5mbywgbWFrZS5kdmkpOiBVc2UgdGhlbSBpbnN0ZWFkIG9mIGV4cGxpY2l0IGNtZHMuCgpXZWQgRGVjIDE2IDE2OjI1OjI0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGZjbnRsLmggdG8gQUNfSEFWRV9IRUFERVJTLiAgZ2V0bG9hZGF2ZyBjYXJlcy4KCldlZCBEZWMgIDkgMTU6MjE6MDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBBZGQgLS1uZXctZmlsZSBhbGlhcyBmb3IgLVcuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKTogQ2hhbmdlIGFsbCBDKysgdG8gQ1hYIGFuZCBDKytGTEFHUwoJdG8gQ1hYRkxBR1MuCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IEV4cGFuZCB0aGUgdmFyaWFibGUgbmFtZSBiZWZvcmUgdXNpbmcgaXQuCgoJKiBtYWluLmMgKG1haW4pOiBEZWZpbmUgdmFyaWFibGUgIk1BS0VfQ09NTUFORCIgdG8gYXJndlswXTsKCWRlZmluZSAiTUFLRT0kKE1BS0VfQ09NTUFORCkgJChNQUtFT1ZFUlJJREVTKSIgYWx3YXlzLgoKCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogU2VhcmNoIGZvciBsaWJOQU1FLmEgaW4gY3dkOyBsb29rIGluCgl2cGF0aCBiZWZvcmUgbG9va2luZyBpbiBzdGFuZGFyZCBkaXJzLCBub3QgYWZ0ZXIuCglDaGFuZ2VkIG9yZGVyIG9mIHN0ZCBkaXJzIHRvOiAvbGliLCAvdXNyL2xpYiwgJHtwcmVmaXh9L2xpYi4KCk1vbiBOb3YgMjMgMTQ6NTc6MzQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9wYXR0ZXJuX3J1bGVzLCBkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogQWRkZWQKCWJyYWNrZXRzIGFyb3VuZCBpbml0aWFsaXplcnMuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IERvbid0IGNoZWNrIGZvciBMSU5FWzBdPT0nXHQnLgoJKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogRXhwYW5kIHRoZSBuYW1lIGJlZm9yZSBkZWZpbmluZyB0aGUgdmFyLgoKCSogam9iLmMgKGluaXRfc2lnbGlzdCk6IFJlbW92ZWQgZnVuY3Rpb24uCglSZW1vdmVkIGRlY2wgb2YgYHN5c19zaWdsaXN0Jy4KCSogbWFrZS5oIFshIEhBVkVfU1lTX1NJR0xJU1RdOiAjaW5jbHVkZSAic2lnbmFtZS5oIi4KCVtIQVZFX1NZU19TSUdMSVNUICYmICFTWVNfU0lHTElTVF9ERUNMQVJFRF06IERlY2xhcmUgc3lzX3NpZ2xpc3QKCW9ubHkgdW5kZXIgdGhlc2UgY29uZGl0aW9ucy4KCSogbWFpbi5jIChtYWluKTogRG9uJ3QgZGVjbGFyZSBpbml0X3NpZ2xpc3QuCgkobWFpbikgWyEgSEFWRV9TWVNfU0lHTElTVF06IENhbGwgc2lnbmFtZV9pbml0IGluc3RlYWQgb2YgaW5pdF9zaWdsaXN0LgoKV2VkIE5vdiAxOCAxNDo1Mjo1MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBEb24ndCB0cnkgdG8gYXBwZW5kIHRvIEZJUlNUREVQUyBpZiBpdCdzCgluaWw7IGluc3RlYWQganVzdCBzZXQgaXQgdG8gTU9SRURFUFMuCgpNb24gTm92IDE2IDE3OjQ5OjE3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IEluaXRpYWxpemUgUCB0byBESVJQQVRIIGJlZm9yZQoJbG9vcCB0aGF0IHNldHMgTUFYRUxFTS4KCkZyaSBOb3YgMTMgMTg6MjM6MTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yMi4KClRodSBOb3YgMTIgMTU6NDU6MzEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFVuZGVyIC1uLCBpbmNyZW1lbnQgZmlsZXNfcmVtYWRlIGFmdGVyCglwcm9jZXNzaW5nIChpLmUuLCBwcmludGluZykgYWxsIGNvbW1hbmQgbGluZXMuCgpUdWUgTm92IDEwIDE1OjMzOjUzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBBcHBlbmQgbmV3IGRlcHMgaWYgdGhpcyBydWxlIGhhcyBubwoJY29tbWFuZHM7IHByZXBlbmQgdGhlbSB0byBleGlzdGluZyBkZXBzIGlmIHRoaXMgcnVsZSBoYXMgbm8gY29tbWFuZHMuCgoJKiBkaXIuYyAob3Blbl9kaXJzdHJlYW0pOiBSZXR1cm4gbmlsIGlmIERJUi0+Y29udGVudHMtPmZpbGVzIGlzIG5pbC4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBSZW1vdmVkIGxhc3QgYXJnIFNUUklQLiAgQWx3YXlzIHN0cmlwIGAuLydzLgoJKHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2VkIGNhbGxlcnMuCgkqIGZ1bmN0aW9uLmMgKHN0cmluZ19nbG9iKTogTGlrZXdpc2UuCgkqIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBMaWtld2lzZS4KCk1vbiBOb3YgIDkgMTc6NTA6MTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jIChmaWxlc19yZW1hZGUpOiBNYWRlIGdsb2JhbC4KCShub3RpY2VfZmluaXNoZWRfZmlsZSk6IERvbid0IGluY3JlbWVudCBmaWxlc19yZW1hZGUgaGVyZTsgdGhpcwoJZnVuY3Rpb24gZ2V0cyBjYWxsZWQgaW4gbWFueSBzaXR1YXRpb25zIHdoZXJlIG5vIHJlbWFraW5nIHdhcyBpbgoJZmFjdCBkb25lLgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERvIGl0IGhlcmUgaW5zdGVhZCwgd2hlbiB3ZSBrbm93IHRoYXQKCWFjdHVhbCBjb21tYW5kcyBoYXZlIGJlZW4gcnVuIGZvciB0aGUgZmlsZS4KCSogbWFrZS5oIChmaWxlc19yZW1hZGUpOiBEZWNsYXJlIGl0LgoKVGh1IE5vdiAgNSAxODoyNjoxMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogQWxsb3cgYmxhbmtzIGFzIHdlbGwgYXMgY29sb25zIHRvCglzZXBhcmF0ZSBlbHRzIGluIHRoZSBzZWFyY2ggcGF0aC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERvbid0IGZhdGFsIG9uIGV4dHJhIHRva2VucyBpbiBgdnBhdGgnLgoJVGhlIHNlYXJjaCBwYXRoIGNhbiBjb250YWluIHNwYWNlcyBub3cuCgpUdWUgTm92ICAzIDIwOjQ0OjMyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGNoZWNrKTogTmV3IHRhcmdldDsgbm8tb3AuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IE1vZCBPTERIQVNIIGJ5IEZJTEVfQlVDS0VUUyBhZnRlcgoJdGVzdGluZyBmb3IgT0xESEFTSD09MCBidXQgYmVmb3JlIHVzaW5nIHRoZSB2YWx1ZS4KCShyZW5hbWVfZmlsZSk6IERvbid0IG1vZCBPTERIQVNIIGJ5IEZJTEVfQlVDS0VUUyBiZWZvcmUgcGFzc2luZyBpdAoJdG8gZmlsZV9oYXNoX2VudGVyLgoKCSogZmlsZS5jIChyZW5hbWVfZmlsZSk6IE5vdGljZSB3aGVuIE9MREZJTEUtPmNtZHMgY2FtZSBmcm9tCglkZWZhdWx0LmMsIGFuZCBkb24ndCB0cnkgdG8gcHJpbnQgLT5maWxlbmFtZSBpbiB0aGF0IGNhc2UuCgpTdW4gT2N0IDI1IDAxOjQ4OjIzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBEb24ndCBwcm9jZXNzIEYtPmFsc29fbWFrZSBoZXJlLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogRG9uJ3QgcHJvY2VzcyBGSUxFLT5hbHNvX21ha2UgaWYgbm8gYXR0ZW1wdAoJdG8gdXBkYXRlIEZJTEUgd2FzIGFjdHVhbGx5IG1hZGUuCglGaXhlZCB0byBjYWxsIGZfbXRpbWUgZGlyZWN0bHkgdG8gcmVmcmVzaCB0aGVpciBtb2R0aW1lcy4KClNhdCBPY3QgMjQgMjI6MDg6NTkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAoZmluZF9wZXJjZW50KTogRG9uJ3QgaW5jcmVtZW50IFAgYWdhaW4gYWZ0ZXIgc2tpcHBpbmcKCWFuIGVzY2FwZWQgJS4KCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmQpOiBJbiBjYWxsIHRvIHBhdHN1YnN0X2V4cGFuZCwgZG9uJ3QKCWZpbmQgYCUncyBvdXJzZWx2ZXM7IGxldCB0aGF0IGZ1bmN0aW9uIGRvIGl0LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlOiByZWNvcmRfd2FpdGluZ19maWxlcyk6IERvbid0IGNhbGwKCXJlY29yZF9maWxlcyBpZiBGSUxFTkFNRVMgaXMgbmlsLgoJKHJlYWRfbWFrZWZpbGUpOiBBbGwgYWx0ZXJuYXRpdmVzIGluIHRoZSBwYXJzaW5nLCBleGNlcHQgZm9yIHJ1bGUKCWxpbmVzLCBmYWxsIHRocm91Z2ggdG8gdGhlIGVuZCBvZiB0aGUgbG9vcC4gIEF0IHRoZSBlbmQgb2YgdGhlCglsb29wLCBkbyByZWNvcmRfd2FpdGluZ19maWxlcyBzbyB3ZSBub3RpY2UgbGF0ZXIgc3B1cmlvdXMgY21kcy4KCkZyaSBPY3QgMjMgMTU6NTc6MzcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRnJlZSBvbGQgdmFsdWUgb2YgU0hFTEwKCWJlZm9yZSByZXBsYWNpbmcgaXQuCgpUaHUgT2N0IDE1IDE4OjU3OjU2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKC5jLm8pOiBBZGQgLUkkKHNyY2RpcikvZ2xvYiB0byBmbGFncy4KCgkqIGRpci5jIChvcGVuX2RpcnN0cmVhbSk6IENhc3QgcmV0dXJuIHZhbHVlIHRvIF9fcHRyX3QuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzOiAiR0VUIikgW19JQk1SMl06IFVzZSBVU0cgZGVmbi4KCgkqIG1ha2UuaCAoTUFYUEFUSExFTik6IE1vdmVkIG91dCBvZiAjaWZuZGVmIFBPU0lYLgoJKEdFVF9QQVRIX01BWCk6IE1vdmVkIGZyb20gI2lmZGVmIFBPU0lYIHRvICNpZmRlZiBQQVRIX01BWCAjZWxzZS4KCURlZmluZSBhcyAoZ2V0X3BhdGhfbWF4ICgpKS4KCVshIFBBVEhfTUFYXSAoTkVFRF9HRVRfUEFUSF9NQVgpOiBEZWZpbmUuCglbISBQQVRIX01BWF0gKGdldF9wYXRoX21heCk6IERlY2xhcmUgZm4uCgkqIG1pc2MuYyBbTkVFRF9HRVRfUEFUSF9NQVhdIChnZXRfcGF0aF9tYXgpOiBOZXcgZnVuY3Rpb24uCgpNb24gT2N0IDEyIDEzOjM0OjQ1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIxLgoKCSogam9iLmMgKHN5c19zaWdsaXN0KTogT25seSBkZWNsYXJlICNpZm5kZWYgU1lTX1NJR0xJU1RfREVDTEFSRUQuCgkqIG1ha2UuaCBbISBIQVZFX1NZU19TSUdMSVNUICYmIEhBVkVfX1NZU19TSUdMSVNUXTogI2RlZmluZQoJU1lTX1NJR0xJU1RfREVDTEFSRUQuCgoJKiBkaXIuYyAoZmlsZV9pbXBvc3NpYmxlKTogV2hlbiBpbml0aWFsaXppbmcgRElSLT5jb250ZW50cywgc2V0CglESVItPmNvbnRlbnRzLT5kaXJzdHJlYW0gdG8gbmlsLgoKCSogY29tcGF0TWFrZWZpbGUgKEdMT0IpOiBEZWZpbmUgbmV3IHZhcmlhYmxlLgoJKG9ianMpOiBVc2UgaXQsIHJhdGhlciB0aGFuIGdsb2IvbGliZ2xvYi5hIGV4cGxpY2l0bHkuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogV2hlbiBzdHJpcHBpbmcgIi4vIiwgaGFuZGxlIGNhc2VzIGxpa2UKCSIuLy8vZm9vIiBhbmQgIi4vLy8vLyIuCgkqIGZpbGUuYyAobG9va3VwX2ZpbGUsIGVudGVyX2ZpbGUpOiBMaWtld2lzZS4KClN1biBPY3QgMTEgMTc6MDA6MzUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRpci5jIChzdHJ1Y3QgZGlyc3RyZWFtLCB7b3BlbixyZWFkfV9kaXJzdHJlYW0pOiBOZXcKCWRhdGEgdHlwZSBhbmQgZnVuY3Rpb25zIHRvIHJlYWQgYSBkaXJlY3Rvcnkgc2VxdWVudGlhbGx5LgoJKGluaXRfZGlyKTogTmV3IGZ1bmN0aW9uIHRvIGhvb2sgaXQgaW50byBnbG9iLgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIGluaXRfZGlyLgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBBZGRlZCBnbG9iL2xpYmdsb2IuYS4KCSogY29uZmlndXJlLmluOiBSZW1vdmUgY29kZSB0byB0ZXN0IGZvciBnbG9iLgoKRnJpIE9jdCAgOSAxMjowODozMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBHZW5lcmFsaXplZCB0ZXN0IGZvciBOQU1FIHBvaW50aW5nCglzb21ld2hlcmUgaW50byBGLT5uYW1lLgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IEZyZWUgb2xkIHZhbHVlIHdoZW4gcmVwbGFjaW5nLgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBGcmVlIHRoZSBsaW5lYnVmZmVyIGJlZm9yZSByZXR1cm5pbmcuCgkocmVjb3JkX2ZpbGVzKTogV2hlbiBjbGVhcmluZyAuU1VGRklYRVMgZGVwcywgZnJlZSB0aGVpciBkYXRhLgoJKG11bHRpX2dsb2IpOiBGcmVlIE9MRCBhbmQgaXRzIGRhdGEgd2hlbiByZXBsYWNpbmcgaXQgd2l0aCByZXN1bHRzCglvZiBnbG9iIHJ1bi4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IFVzZSBhbGxvY2EgaW4gcGxhY2Ugb2YgeG1hbGxvYwoJZm9yIHRlbXAgc3BhY2UgZm9yICReLCAkPywgZXQgYWwuCgoJKiBkaXIuYyAoc3RydWN0IGRpcmVjdG9yeSk6IE5ldyBtZW1iZXIgYGNvbnRlbnRzJyByZXBsYWNlcyBgZmlsZXMnCglhbmQgYGRpcnN0cmVhbScuCgkoc3RydWN0IGRpcmVjdG9yeV9jb250ZW50cyk6IE5ldyB0eXBlLgoJKGRpcmVjdG9yaWVzX2NvbnRlbnRzKTogTmV3IGhhc2ggdGFibGUuCgkoZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wKTogVGFrZSBhIHN0cnVjdCBkaXJlY3RvcnlfY29udGVudHMuCgkoZGlyX2ZpbGVfZXhpc3RzX3ApOiBQYXNzIGl0IHRoZSBgY29udGVudHMnIG1lbWJlciBvZiB0aGUgZGlyIGZvdW5kLgoJKGRpcl9zdHJ1Y3RfZmlsZV9leGlzdHNfcCk6IFJlbmFtZWQgdG8gZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3A7CgltYWRlIHN0YXRpYy4gIFJldHVybiAwIGlmIERJUiBpcyBuaWwgKG1lYW5pbmcgaXQgY291bGRuJ3QgYmUgc3RhdCdkKS4KCShkaXJfZmlsZV9leGlzdHNfcCwgZmluZF9kaXJlY3RvcnkpOiBDaGFuZ2UgYWxsIGNhbGxlcnMuCgkoZmlsZV9pbXBvc3NpYmxlKTogVXNlIERJUi0+Y29udGVudHMsIGluaXRpYWxpemluZyBpdCBpZiBuaWwuCgkocHJpbnRfZGlyX2RhdGFfYmFzZSk6IFVzZSBESVItPmNvbnRlbnRzLCBhbmQgcHJpbnQgb3V0IGRldmljZSBhbmQKCWlub2RlIG51bWJlcnMgd2l0aCBlYWNoIGRpcmVjdG9yeS4KCgkqIENoYW5nZXMgZm9yIHBlcmZvcm1hbmNlIHdpbiBmcm9tIEpvaG4gR2lsbW9yZSA8Z251QGN5Z251cy5jb20+OgoJKiBkaXIuYyAoRElSRUNUT1JZX0JVQ0tFVFMpOiBJbmNyZWFzZSB0byAxOTkuCgkoRElSRklMRV9CVUNLRVRTKTogRGVjcmVhc2UgdG8gMTA3LgoJKGZpbmRfZGlyZWN0b3J5KTogQWxsb2NhdGUgYW5kIHplcm8gYSBtdWx0aXBsZSBvZgoJc2l6ZW9mIChzdHJ1Y3QgZGlyZmlsZSAqKSwgbm90IG9mIHNpemVvZiAoc3RydWN0IGRpcmZpbGUpLgoJKGRpcl9zdHJ1Y3RfZmlsZV9leGlzdHNfcCk6IE5ldyBmdW5jdGlvbiwgbmVhcmx5IGFsbCBjb2RlIGZyb20KCWRpcl9maWxlX2V4aXN0c19wLgoJKGRpcl9maWxlX2V4aXN0c19wKTogSnVzdCBjYWxsIGZpbmRfZGlyZWN0b3J5K2Rpcl9zdHJ1Y3RfZmlsZV9leGlzdHNfcC4KCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFJlbW92ZSByZWR1bmRhbnQKCWRpcl9maWxlX2V4aXN0c19wIGNhbGwuCgoJKiBjb25maWd1cmUuaW46IENvbW1lbnQgb3V0IGdsb2IgY2hlY2s7IGFsd2F5cyB1c2Ugb3VyIGNvZGUuCgpGcmkgT2N0ICAyIDE5OjQxOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFshIEhBVkVfU1lTX1NJR0xJU1QgJiYgSEFWRV9fU1lTX1NJR0xJU1RdOiAjZGVmaW5lCglIQVZFX1NZU19TSUdMSVNUOyBhZnRlciBkb2luZyAjZGVmaW5lIHN5c19zaWdsaXN0IF9zeXNfc2lnbGlzdCwgd2UKCWRvIGhhdmUgaXQuCgpXZWQgU2VwIDMwIDE5OjIxOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgZG8gLXcgYXV0b21hdGljYWxseSBpZiAtcy4KClR1ZSBTZXAgMjkgMjE6MDc6NTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKHByaW50ZWRfdmVyc2lvbik6IE1vdmUgdmFyaWFibGUgaW5zaWRlIHByaW50X3ZlcnNpb24uCgkocHJpbnRfdmVyc2lvbik6IFJldHVybiBpbW1lZGlhdGVseSBpZiBwcmludGVkX3ZlcnNpb24gaXMgc2V0LgoJKGRpZSk6IERvbid0IHRlc3QgcHJpbnRlZF92ZXJzaW9uIGhlcmUuCgkoZGVjb2RlX3N3aXRjaGVzKTogVW5kZXIgLXYsIGRvIHByaW50X3ZlcnNpb24gYmVmb3JlIGdpdmluZyB1c2FnZS4KCShERVNDUklQVElPTl9DT0xVTU4pOiBOZXcgbWFjcm8uCgkoZGVjb2RlX3N3aXRjaGVzKTogVXNlIGl0IHdoZW4gcHJpbnRpbmcgdGhlIHVzYWdlIG1lc3NhZ2UuCglMZWF2ZSBhdCBsZWFzdCB0d28gc3BhY2VzIGJldHdlZW4gb3B0aW9ucyBhbmQgdGhlaXIgZGVzY3JpcHRpb25zLgoKRnJpIFNlcCAyNSAxMzoxMjo0MiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yMC4KCldlZCBTZXAgMTYgMTY6MTU6MjIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBTYXZlIGVycm5vIHZhbHVlIGZyb20gdHJ5aW5nIHRvIG9wZW4KCUZJTEVOQU1FLCBhbmQgcmVzdG9yZSBpdCBiZWZvcmUgZXJyaW5nOyBvdGhlcndpc2Ugd2UgZ2V0IHRoZSBlcnJubwoJdmFsdWUgZnJvbSB0aGUgbGFzdCBlbHQgb2YgdGhlIHNlYXJjaCBwYXRoLgoKVHVlIFNlcCAxNSAxNToxMjo0NyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb25nX29wdGlvbl9hbGlhc2VzKTogQWRkIC0tc3RvcCBmb3IgLVMuCgoJKiByZWFkLmMgKHdvcmQxZXEpOiBEbyBzdHJuY21wIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHNvbWVwbGFjZSB0aGF0CgltYXkgYmUgb3V0IGluIHNwYWNlLgoKV2VkIFNlcCAgOSAxNTo1MDo0MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogSWYgYWxsIHRoZSBjb21tYW5kIGxpbmVzIHdlcmUKCXJlY3Vyc2l2ZSwgZG9uJ3QgZG8gdGhlIHRvdWNoaW5nLgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogRG9uJ3QgY2hlY2sgZm9yICsgaGVyZS4KCSogY29tbWFuZHMuYyAoY2hvcF9jb21tYW5kcyk6IERvIGl0IGhlcmUgaW5zdGVhZC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IFByZXBlbmQgKyB0byBjbWRzIGZvciBSQ1MuCgpXZWQgU2VwICAyIDE3OjUzOjA4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBJbmNsdWRlICQoQUxMT0NBKS4KCgkqIG1ha2UuaCBbQ1JBWV06IE1vdmUgI2RlZmluZSBzaWduYWwgYnNkc2lnbmFsIHRvIGJlZm9yZSAjaW5jbHVkZXMuCgpUaHUgQXVnIDI3IDE3OjQ1OjQzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKGRlZmF1bHRfaW5jbHVkZV9kaXJlY3Rvcmllcyk6IEFkZCBJTkNMVURFRElSIGZpcnN0LgoJKiBjb21wYXRNYWtlZmlsZSAoaW5jbHVkZWRpcik6IERlZmluZS4KCShkZWZpbmVzKTogQWRkIC1EIGZvciBJTkNMVURFRElSPSIkKGluY2x1ZGVkaXIpIi4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEdyb2sgbXVsdGlwbGUgZmlsZXMgaW4gYGluY2x1ZGUnOwoJZ2xvYmJpbmcgdG9vLgoKCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogTmV3IGZ1bmN0aW9uLgoJKGxpYnJhcnlfZmlsZV9tdGltZSk6IFJlbW92ZSBmdW5jdGlvbi4KCShmX210aW1lKTogVXNlIGxpYnJhcnlfc2VhcmNoIGluc3RlYWQgb2YgbGlicmFyeV9maWxlX210aW1lLgoJKiBjb21wYXRNYWtlZmlsZSAobGliZGlyKTogRGVmaW5lLgoJKGRlZmluZXMpOiBBZGQgLUQgZm9yIExJQkRJUj0iJChsaWJkaXIpIi4KCSogbWFrZS50ZXhpbmZvIChMaWJyYXJpZXMvU2VhcmNoKTogRG9jdW1lbnQgY2hhbmdlLgoKCSogZmlsZS5jIChyZW5hbWVfZmlsZSk6IEZpeCBmaWxlX2hhc2hfZW50ZXIgY2FsbCB3aXRoIG1pc3NpbmcgYXJnLgoKV2VkIEF1ZyAyNiAxNzoxMDo0NiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xOS4KCgkqIG1haW4uYyAobWFpbik6IFNldCBjb21tYW5kX3N0YXRlIHRvIGNzX2ZpbmlzaGVkIGZvciB0ZW1wIGZpbGVzCgltYWRlIGZvciBzdGRpbiBtYWtlZmlsZXMuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IERvbid0IHRlbGwgZ2V0b3B0IHRvIHJldHVybiBub24tb3B0aW9uCglhcmdzIGluIG9yZGVyLgoJSWdub3JlIGFuIGFyZ3VtZW50IG9mIGAtJy4KClRodSBBdWcgMjAgMTM6MzY6MDQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBJZiAodG91Y2hfZmxhZyAmJiAhUkVDVVJTSVZFKSwgaWdub3JlCgl0aGUgY29tbWFuZCBsaW5lIGFuZCBnbyB0byB0aGUgbmV4dC4KCShub3RpY2VfZmluaXNoZWRfZmlsZSk6IFVuZGVyIC10LCB0b3VjaCBGSUxFLgoJKiByZW1ha2UuYyAocmVtYWtlX2ZpbGUpOiBEb24ndCB0b3VjaCBpdCBoZXJlLgoKV2VkIEF1ZyAxOSAxNjowNjowOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAocGF0dGVybl9tYXRjaGVzKTogVXNlIHRlbXBvcmFyeSBmb3Igc3RybGVuIChXT1JEKQoJaW5zdGVhZCBvZiB0d28gZnVuY3Rpb24gY2FsbHMuCgoJKiBjb21wYXRNYWtlZmlsZSAoTE9BRF9BVkcpOiBSZW1vdmUgdmFyaWFibGUgYW5kIGNvbW1lbnRzLgoKVHVlIEF1ZyAxOCAxNDo1ODo1OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoUnVubmluZyk6IE5vZGUgcmVuYW1lZCB0byBgbWFrZSBJbnZvY2F0aW9uJy4KCkZyaSBBdWcgMTQgMTI6Mjc6MTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKTogRG9uJ3QgY29tcGFyZSBbTUFYLTMuLk1BWF0gaWYKCU5BTUVMRU4gIT0gTUVNTEVOLgoKVGh1IEF1ZyAxMyAxNzo1MDowOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE4LgoKCSogbWFpbi5jOiBEb24ndCAjaW5jbHVkZSA8dGltZS5oPjsgbWFrZS5oIGFscmVhZHkgZG9lcy4KCk1vbiBBdWcgMTAgMTc6MDM6MDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogRml4ZWQgY29weWluZyBvZiBzdWZmaXggd2hlbiBidWlsZGluZwoJYWxzb19tYWtlIGVsdHMuCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpOiBNYWtlIHN1cmUgQlVGRkVSIGlzCgludWxsLXRlcm1pbmF0ZWQgYmVmb3JlIHJlcGxhY2luZyBuZXdsaW5lcy4KCgkqIGNvbXBhdE1ha2VmaWxlIChtYW5kaXIpOiBVc2UgbWFuJChtYW5leHQpLCBub3QgYWx3YXlzIG1hbmwuCgpTdW4gQXVnICAyIDAxOjQyOjUwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKG5ld19wYXR0ZXJuX3J1bGUpOiBOb3Qgc3RhdGljLgoJKiBydWxlLmg6IERlY2xhcmUgaXQuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IE5ldyBmdW5jdGlvbiwgbW9zdCBjb2RlIGZyb20gcmVuYW1lX2ZpbGUuCgkocmVuYW1lX2ZpbGUpOiBDYWxsIGl0LgoJKiBmaWxlLmggKGZpbGVfaGFzaF9lbnRlcik6IERlY2xhcmUgaXQuCgoJKiBkZXAuaDogRG9jIGZpeC4KClRodSBKdWwgMzAgMTU6NDA6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEhhbmRsZSB1c2FnZV9hbmRfZXhpdCB3aGVuIGJ1aWxkaW5nCglsb25nIG9wdGlvbnMgdmVjdG9yLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogTWFrZSBSQ1MgcnVsZXMgdXNlICQoQ0hFQ0tPVVQsdikuCgkoZGVmYXVsdF92YXJpYWJsZXMpOiBEZWZpbmUgQ0hFQ0tPVVQsdiAoaGFpcnkpLgoKCSogbWFrZS5oIFshSEFWRV9TWVNfU0lHTElTVCAmJiBIQVZFX19TWVNfU0lHTElTVF06ICNkZWZpbmUKCXN5c19zaWdsaXN0IHRvIF9zeXNfc2lnbGlzdC4KClN1biBKdWwgMjYgMTY6NTY6MzIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIE5FV1M6IEFkZCBoZWFkZXIgYW5kIHRhaWwgY29weXJpZ2h0IGluZm8gbGlrZSBFbWFjcyBORVdTLgoKCSogbWFrZS5oIFtBTlNJX1NUUklOR106IERvbid0ICNkZWZpbmUgaW5kZXgsIHJpbmRleCwgYmNtcCwgYnplcm8sCgliY29weSBpZiBhbHJlYWR5ICNkZWZpbmUnZC4KCVtTVERDX0hFQURFUlNdIChxc29ydCwgYWJvcnQsIGV4aXQpOiBEZWNsYXJlIGhlcmUuCglbISBfX0dOVV9MSUJSQVJZX18gJiYgIVBPU0lYXTogTm90IGhlcmUuCgoJKiBtYWtlLmggW19BSVhdOiAjcHJhZ21hIGFsbG9jYSBmaXJzdCB0aGluZy4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYik6IFNldCB0aGUgY29tbWFuZF9zdGF0ZSB0byBjc19ydW5uaW5nCgl3aGVuIHdlIHF1ZXVlIGEgam9iIG9uIHdhaXRpbmdfam9icy4KCkZyaSBKdWwgMjQgMDI6MTY6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogVXNlICIiIGluc3RlYWQgb2YgbmlsCglmb3IgZW1wdHkgdmFsdWUuCgpUaHUgSnVsIDIzIDIyOjMxOjE4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTcuCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaC50eXBlKTogQWRkIGFsdGVybmF0aXZlIHVzYWdlX2FuZF9leGl0LgoJKGNvbW1hbmRfc3dpdGNoZXMpOiBBZGQgLWgvLS1oZWxwLgoKVGh1IEp1bCAxNiAxNDoyNzo1MCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKG1ha2UtJCh2ZXJzaW9uKS50YXIuWik6IEluY2x1ZGUgTkVXUywgbm90IENIQU5HRVMuCgkqIFJFQURNRS50ZW1wbGF0ZTogTWVudGlvbiBORVdTLgoJKiBDSEFOR0VTOiBSZW5hbWVkIHRvIE5FV1MuCgoJKiBtYWluLmMgWyEgU1REQ19IRUFERVJTXSBbc3VuXTogRG9uJ3QgZGVjbGFyZSBleGl0LgoKVHVlIEp1bCAxNCAxODo0ODo0MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogU2V0IC1vIGZpbGVzJyBjb21tYW5kX3N0YXRlcyB0byBjc19maW5pc2hlZC4KCgkqIHJ1bGUuYyAoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBEZWNyZW1lbnQgbnVtX3BhdHRlcm5fcnVsZXMKCXdoZW4gdG9zc2luZyBhIHJ1bGUuCgoJKiBtYWluLmMgKG1haW4pOiBVc2UgYWxsb2NhIG9ubHkgaW4gc2ltcGxlIGxvY2FsIHZhciBhc3NpZ25tZW50LAoJZm9yIGJyYWluZGVhZCBTR0kgY29tcGlsZXIuCgoJKiBydWxlLmMgKHByaW50X3J1bGVfZGF0YV9iYXNlKTogQmFyZiBpZiBudW1fcGF0dGVybl9ydWxlcyBpcwoJaW5jb25zaXN0ZW50IHdpdGggdGhlIG51bWJlciBjb21wdXRlZCB3aGVuIGxpc3RpbmcgdGhlbS4KCk1vbiBKdWwgMTMgMTc6NTE6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBGb3IgJD8gYW5kICReIGVsdHMgdGhhdCBhcmUgYXJjaGl2ZQoJbWVtYmVyIHJlZnMsIHVzZSBtZW1iZXIgbmFtZSBvbmx5LgoKRnJpIEp1bCAxMCAwMDowNTowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuaCAoc3RydWN0IHZhcmlhYmxlLmV4cG9ydCk6IEFkZCBuZXcgYWx0ZXJuYXRpdmUgdl9pZnNldC4KCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogQ2hlY2sgZm9yIGl0LgoJKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogU2V0IGl0IGZvciBNQUtFRklMRVMuCgpUaHUgSnVsICA5IDIxOjI0OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IFJlbW92ZSBnZXRsb2FkYXZnLm87ICQoZXh0cmFzKSBnZXRzIGl0LgoJKHJlbW90ZS5vKTogVXNlICQoc3JjZGlyKS9yZW1vdGUuYywgbm90ICRyZW1vdGUuYzwuCgkoZGlzdGNsZWFuLCBtb3N0bHljbGVhbik6IE5ldyB0YXJnZXRzLgoKVHVlIEp1bCAgNyAxOToxMjo0OSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE2LgoKCSogY29tcGF0TWFrZWZpbGUgKGNvbmZpZy5zdGF0dXMpOiBSZW1vdmUgcnVsZS4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYik6IEZyZWUgQyBhZnRlciB1c2luZyBDLT5maWxlLCBub3QgYmVmb3JlLgoKU2F0IEp1bCAgNCAyMDo1MTo0OSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tbWFuZHMuYywgam9iLmMsIG1haW4uYywgbWFrZS5oLCByZW1vdGUtY3N0bXMuYzogVXNlICNpZmRlZgoJSEFWRV8qIGluc3RlYWQgb2YgI2lmbmRlZiAqX01JU1NJTkcuCgkqIGNvbmZpZ3VyZS5pbjogVXNlIEFDX0hBVkVfRlVOQ1MgaW5zdGVhZCBvZiBBQ19NSVNTSU5HX0ZVTkNTIChnb25lKS4KClRodSBKdWwgIDIgMTg6NDc6NTIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IG1ha2VsZXZlbD4wIG9yIC1DIGltcGxpZXMgLXcuCgpUdWUgSnVuIDMwIDIwOjUwOjE3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmaWxlLmMsIGpvYi5jLCBmdW5jdGlvbi5jOiBEb24ndCAjaW5jbHVkZSA8ZXJybm8uaD4uCgltYWtlLmg6IERvIGl0IGhlcmUgaW5zdGVhZC4KCSogYXJzY2FuLmMgKGFyX21lbWJlcl90b3VjaCk6IERvbid0IGRlY2xhcmUgZXJybm8uCgpUaHUgSnVuIDI1IDE3OjA2OjU1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKG1ha2UtJCh2ZXJzaW9uKS50YXIuWik6IERlcGVuZCBvbiBJTlNUQUxMLCBjb25maWd1cmUuaW4uCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBJZiBjb21tYW5kcyBvciBkZXBzIGFyZSBydW5uaW5nIGFmdGVyCgl1cGRhdGVfZmlsZV8xIHJldHVybnMsIGJyZWFrIG91dCBvZiB0aGUgOjogcnVsZSAoLT5wcmV2KSBsb29wIGFuZAoJanVzdCByZXR1cm4uCgoJKiBqb2IuYwkoam9iX25leHRfY29tbWFuZCk6IE5ldyBmdW5jdGlvbjsgY29kZSBmcm9tIHN0YXJ0X2pvYi4KCShzdGFydF9qb2JfY29tbWFuZCk6IFJlbmFtZWQgZnJvbSBzdGFydF9qb2IuICBDYWxsIGpvYl9uZXh0X2NvbW1hbmQKCWFuZCByZWN1cnNlIGZvciBlbXB0eSBjb21tYW5kIGxpbmVzIGFuZCAtbi4KCShzdGFydF93YWl0aW5nX2pvYik6IENhbGwgc3RhcnRfam9iX2NvbW1hbmQsIG5vdCBzdGFydF9qb2IuCgkobmV3X2pvYik6IENhbGwgam9iX25leHRfY29tbWFuZCB0byBwcmltZSB0aGUgY2hpbGQgc3RydWN0dXJlLCBhbmQKCXRoZW4gY2FsbCBzdGFydF93YWl0aW5nX2pvYi4KCShyZWFwX2NoaWxkcmVuKTogVXNlIGpvYl9uZXh0X2NvbW1hbmQgYW5kIHN0YXJ0X2pvYl9jb21tYW5kLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogQ2FsbCBzdGFydF9yZW1vdGVfam9iX3AgaGVyZSwgYW5kIHN0b3JlIGl0cwoJcmVzdWx0IGluIEMtPnJlbW90ZS4gIElmIHplcm8sIGNoZWNrIHRoZSBsb2FkIGF2ZXJhZ2UgYW5kCgltYXliZSBwdXQgQyBvbiB3YWl0aW5nX2pvYnMuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBUZXN0IENISUxELT5yZW1vdGUgcmF0aGVyIHRoYW4gY2FsbGluZwoJc3RhcnRfcmVtb3RlX2pvYl9wLiAgRG9uJ3QgZG8gbG9hZCBhdmcgY2hlY2tpbmcgYXQgYWxsIGhlcmUuCgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBoYW5kbGUgU0lHSUxMLCBTSUdJT1QsIFNJR0VNVCwgU0lHQlVTLAoJU0lHU0VHViwgU0lHRlBFIG9yIFNJR1RSQVAuCgoJKiBjb21wYXRNYWtlZmlsZSAoZ2xvYi9saWJnbG9iLmEpOiBEb24ndCBwYXNzIHNyY2RpciB0byBzdWItbWFrZS4KCWNvbmZpZ3VyZSB3aWxsIHNldCBpdCBpbiBnbG9iL01ha2VmaWxlLgoKV2VkIEp1biAyNCAxOTo0MDozNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGlyLmMgW0RJUkVOVF0gKGRpcmVjdCk6IERvbid0IGRlZmluZSB0byBkaXJlbnQuCglbISBESVJFTlRdIChkaXJlY3QpOiBEZWZpbmUgdG8gZGlyZW50LgoJKGRpcl9maWxlX2V4aXN0c19wKTogVXNlIHN0cnVjdCBkaXJlbnQgaW5zdGVhZCBvZiBzdHJ1Y3QgZGlyZWN0LgoKCSogbWFrZS5oIChnZXRjd2QpOiBObyBzcGFjZSBiZXR3ZWVuIG1hY3JvIGFuZCAoIGZvciBhcmdzIQoKCSogam9iLmMgKHN0YXJ0X2pvYik6IERvbid0IHB1dCB0aGUgam9iIG9uIHdhaXRpbmdfam9icyBpZgoJam9iX3Nsb3RzX3VzZWQ9PTAuCgoJKiBtYWtlLnRleGluZm8gKE1pc3NpbmcpOiBTaG9ydGVuZWQgdGl0bGUuCgpUdWUgSnVuIDIzIDE4OjQyOjIxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogUHJpbnQgInJtIiBjb21tYW5kcyB1bmRlciAtbi4KCk1vbiBKdW4gMjIgMTY6MjA6MDIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTUuCgpGcmkgSnVuIDE5IDE2OjIwOjI2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBhcnNjYW4uYyBbTV9VTklYXTogI3VuZGVmIE1fWEVOSVguCgpXZWQgSnVuIDE3IDE3OjU5OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogUHV0IEAgcHJlZml4IG9uIFJDUyBjbWRzLgoKVHVlIEp1biAxNiAxOToyNDoxNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGdldGxvYWRhdmcubyk6IFJlbW92ZWQgc3BlY2lhbCBydWxlLgoJKENGTEFHUyk6IERvbid0IGluY2x1ZGUgJChkZWZpbmVzKS4KCSguYy5vKTogRGVmaW5lIHN1ZmZpeCBydWxlLgoJKGdsb2IvbGliZ2xvYi5hKTogUGFzcyBDUFBGTEFHUz0kKGRlZmluZXMpIHRvIHN1Ym1ha2UuCgkoR0VUT1BUX1NSQywgc3JjcywgdGFnc3Jjcyk6IFByZWZpeCBmaWxlcyB3aXRoICQoc3JjZGlyKS8uCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCk6IE1vdmVkIGxvY2FsIHZhcnMgaW5zaWRlICNpZidkIGJsb2NrLgoKCSogbWFrZS5oIChtYXgpOiBSZW1vdmVkLgoJKiBleHBhbmQuYyAodmFyaWFibGVfYnVmZmVyX291dHB1dCk6IERvbid0IHVzZSBpdC4KCgkqIGNvbXBhdE1ha2VmaWxlIChJTlNUQUxMKTogRGVmaW5lLgoJKE1ha2VmaWxlKTogTmV3IHJ1bGUgdG8gbWFrZSBmcm9tIE1ha2VmaWxlLmluLgoJKHNyY2Rpcik6IERlZmluZS4KCShWUEFUSCk6IERlZmluZS4KCShnZXRsb2FkYXZnLm8sIHJlbW90ZS5vKTogVXNlIGF1dG9jb25mICRmb288IGhhY2suCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBSZW1vdmVkIHJldHVybi4KCk1vbiBKdW4gMTUgMTc6NDI6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNC4KCgkqIG1ha2UudGV4aW5mbyAoU3VtbWFyeSk6IE5ldyBub2RlLgoJKFNwZWNpYWwgVGFyZ2V0cyk6IE1lbnRpb24gLkVYUE9SVF9BTExfVkFSSUFCTEVTIGhlcmUuCgoJKiB2YXJpYWJsZS5jIChtYXgpOiBNb3ZlZCB0byBtYWtlLmguCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcywgc3Jjcyk6IEFkZGVkIGFyICYgYXJzY2FuLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogTmV3IGZ1bmN0aW9uLCAybmQgaGFsZiBvZiBuZXdfam9iLgoJKG5ld19qb2IpOiBDYWxsIGl0LgoJKHN0YXJ0X3dhaXRpbmdfam9icyk6IE5ldyBmdW5jdGlvbi4KCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogQ2FsbCBzdGFydF93YWl0aW5nX2pvYnMgYXQgdGhlIHRvcAoJb2YgdGhlIG1haW4gbG9vcC4KCSogY29tcGF0TWFrZWZpbGUgKG9ianMsIHNyY3MpOiBSZW1vdmVkIGxvYWQsIGFkZGVkIGdldGxvYWRhdmcuCgpGcmkgSnVuIDEyIDE5OjMzOjE2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGxvYWRfdG9vX2hpZ2gpOiBOZXcgZnVuY3Rpb24uICBVc2VzIGdldGxvYWRhdmcuCgkod2FpdGluZ19qb2JzKTogTmV3IHZhcmlhYmxlLgoJKHN0YXJ0X2pvYik6IERvbid0IGNhbGwgd2FpdF90b19zdGFydF9qb2IuICBJbnN0ZWFkLCBpZgoJbG9hZF90b29faGlnaCByZXR1cm5zIG5vbnplcm8sIGFkZCB0aGUgY2hpbGQgdG8gdGhlCglgd2FpdGluZ19qb2JzJyBjaGFpbiBhbmQgcmV0dXJuIHdpdGhvdXQgc3RhcnRpbmcgdGhlIGpvYi4KClRodSBKdW4gMTEgMDA6MDU6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBleHBhbmQuYyAodmFyaWFibGVfYnVmZmVyX291dHB1dCk6IE1hZGUgZ2xvYmFsIGFnYWluLgoJKiB2YXJpYWJsZS5oOiBBbmQgZGVjbGFyZSBpdC4KCgkqIGFyc2Nhbi5jIChQT1JUQVIpOiBEZWZpbmUgZm9yIGFsbCBzeXN0ZW1zIGlmIFBPUlQ1QVIgaXMgbm90IGRlZmluZWQuCgkoQVJfTkFNRUxFTiwgQVJfVFJBSUxJTkdfU0xBU0gpOiBSZW1vdmVkLgoJKGFyX3NjYW4pOiBEb24ndCB1c2UgaXQuICBEb24ndCAjaWZkZWYgQVJfVFJBSUxJTkdfU0xBU0g7IGp1c3QgbG9vawoJZm9yIGEgc2xhc2ggaW4gdGhlIGFyY2hpdmUgYXQgcnVuIHRpbWUuCgkoYXJfbmFtZV9lcXVhbCk6IFJld3JvdGUgLm8gaGFja2luZyB0byBub3QgdXNlIEFSX05BTUVMRU4sIGFuZCB0bwoJY29wZSB3aXRoIHRyYWlsaW5nLXNsYXNoIGFuZCBub24tdHJhaWxpbmctc2xhc2ggYXJjaGl2ZXMuCgoJKiBtYWluLmMgKG1haW4pIFshIFNFVFZCVUZfUkVWRVJTRURdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0dyMyBldCBhbC4KCVtTRVRWQlVGX1JFVkVSU0VEXTogQWx3YXlzIGFsbG9jYXRlIGEgYnVmZmVyIG91cnNlbHZlcy4KCgkqIGxvYWQuYyAobG9hZF9hdmVyYWdlKSBbc2dpXTogVXNlIHN5c21wIGNhbGwuCgoJKiBjb21wYXRNYWtlZmlsZSAoSU5TVEFMTF9EQVRBLCBJTlNUQUxMX1BST0dSQU0pOiBEZWZpbmUuCgkoJChiaW5kaXIpLyQoaW5zdG5hbWUpLCAkKG1hbmRpcikvbWFrZS4kKG1hbmV4dCkpOiBVc2UgdGhlbS4KCgkqIG1ha2UuaCBbSEFWRV9WRk9SS19IXTogI2luY2x1ZGUgPHZmb3JrLmg+LgoJKHZmb3JrLCBWRk9SS19OQU1FKTogRG9uJ3QgZGVmaW5lLgoJKiBqb2IuYyAoc3RhcnRfam9iKTogVXNlICJ2Zm9yayIgaW4gcGxhY2Ugb2YgVkZPUktfTkFNRS4KCgkqIG1ha2UuaCBbSEFWRV9MSU1JVFNfSCwgSEFWRV9TWVNfUEFSQU1fSF06IElmICNkZWZpbmUnZCwgI2luY2x1ZGUKCXRoZSBlYWNoIGZpbGUuICBSZWFycmFuZ2VkIFBBVEhfTUFYIGhhY2tpbmcuCgkqIGpvYi5jOiBSZWFycmFuZ2VkIE5HUk9VUFNfTUFYIGhhY2tpbmcuCgoJKiByZW1ha2UuYyAoZnN0YXQsIHRpbWUpOiBEb24ndCBkZWNsYXJlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBWYWx1ZSBpcyBAREVGU0AuCgkoTE9BRExJQkVTKTogVmFsdWUgaXMgQExJQlNALgoJKGV4dHJhcyk6IFZhbHVlIGlzIEBMSUJPQkpTQC4KCShBUkNISVZFUywgQVJDSElWRVNfU1JDLCBBTExPQ0FTUkMpOiBSZW1vdmVkLgoJKiBhcnNjYW4uYywgYXIuYzogU3Vycm91bmQgYm9keSB3aXRoICNpZm5kZWYgTk9fQVJDSElWRVMuCgoJKiBtaXNjLmMgWyEgSEFWRV9VTklTVERfSF06IFRlc3QgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbCBnZXQqaWQuCgoJKiBtYWtlLmggW0dFVENXRF9NSVNTSU5HXTogVGVzdCBpbnN0ZWFkIG9mICFVU0cgJiYgIVBPU0lYIGV0IGFsLgoJKGdldGN3ZCk6IEp1c3QgZGVjbGFyZSBpZiBwcmVzZW50LiAgSWYgbm90LCBkZWNsYXJlIGFzIGEgbWFjcm8KCXVzaW5nIGdldHdkLCBhbmQgZGVjbGFyZSBnZXR3ZC4KCVtQQVRIX01BWF0gKEdFVF9QQVRIX01BWCk6ICNkZWZpbmUgdG8gUEFUSF9NQVguCgkqIG1haW4uYyAobWFpbiwJbG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogVXNlIGdldGN3ZCBpbnN0ZWFkIG9mIGdldHdkLgoKCSogbWFpbi5jIChtYWluKSBbU0VUTElORUJVRl9NSVNTSU5HXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgVVNHLgoKCSogbWFrZS5oIChTSUdIQU5ETEVSLCBTSUdOQUwpOiBSZW1vdmVkLgoJKFJFVFNJR1RZUEUpOiBEZWZpbmUgaWYgbm90ICNkZWZpbmUnZC4KCSogbWFpbi5jIChtYWluKTogVXNlIHNpZ25hbCBpbiBwbGFjZSBvZiBTSUdOQUwuCgoJKiBtYWluLmMgW1NZU19TSUdMSVNUX01JU1NJTkddOiBUZXN0IGluc3RlYWQgb2YgVVNHLgoKCSogam9iLmMgKHNlYXJjaF9wYXRoKSBbR0VUR1JPVVBTX01JU1NJTkddOiBUZXN0IGluc3RlYWQgb2YgVVNHLgoJW0hBVkVfVU5JU1REX0hdOiBUZXN0IGluc3RlYWQgb2YgUE9TSVggdG8gbm90IGRlY2wgZ2V0Z3JvdXBzLgoKCSogbWFpbi5jIFshIEhBVkVfVU5JU1REX0hdOiBUZXN0IGluc3RlYWQgb2YgIVBPU0lYIHRvIGRlY2wgY2hkaXIuCglbISBTVERDX0hFQURFUlNdOiBUZXN0IGluc3RlYWQgb2YgIVBPU0lYIHRvIGRlY2wgZXhpdCAmIGF0b2YuCgoJKiBqb2IuYyAoY2hpbGRfaGFuZGxlciksIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCk6IFJldHVybgoJUkVUU0lHVFlQRSBpbnN0ZWFkIG9mIGludC4KCSogbWFpbi5jIChtYWluKTogRGVjbGFyZSBmYXRhbF9lcnJvcl9zaWduYWwgYW5kIGNoaWxkX2hhbmRsZXIgaGVyZQoJdG8gcmV0dXJuIFJFVFNJR1RZUEU7IHJlbW92ZWQgdG9wLWxldmVsIGRlY2wgb2YgZm9ybWVyLgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSwgam9iLmMgKHVuYmxvY2tfc2lncywgc3RhcnRfam9iKSwKCW1haW4uYyBbU0lHU0VUTUFTS19NSVNTSU5HXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgVVNHLgoKV2VkIEp1biAxMCAyMjowNjoxMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIFtIQVZFX1dBSVRQSURdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0cuCglbISBIQVZFX1VOSVNURF9IXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgIVBPU0lYIHRvIGRlY2xhcmUgbWlzYyBmbnMuCgkoR0lEX1QpOiBEb24ndCAjZGVmaW5lLgoJKHNlYXJjaF9wYXRoKTogVXNlIGdpZF90IGluc3RlYWQgb2YgR0lEX1QuCglbR0VURFRBQkxFU0laRV9NSVNTSU5HLCBTWVNfU0lHTElTVF9NSVNTSU5HLCBEVVAyX01JU1NJTkddOiBUZXN0Cgl0aGVzZSBpbmRpdmlkdWFsbHkgaW5zdGVhZCBvZiBVU0cgZm9yIGFsbC4KCSogbWFrZS5oIChjdGltZSk6IERvbid0IGRlY2xhcmUuICAjaW5jbHVkZSB0aW1lLmggaW5zdGVhZC4KCVtIQVZFX1VOSVNURF9IXTogI2luY2x1ZGUgPHVuaXN0ZC5oPiBhbmQgI2RlZmluZSBQT1NJWCAjaWZkZWYKCV9QT1NJWF9WRVJTSU9OLgoJKiBkaXIuYyBbX19HTlVfTElCUkFSWV9fXSAoRF9OQU1MRU4pOiBEZWZpbmUgdG8gdXNlIGRfbmFtbGVuIG1lbWJlci4KCSogbWFrZS5oIFtORUVEX01FTU9SWV9IXTogT25seSBpbmNsdWRlIG1lbW9yeS5oICNpZmRlZiB0aGlzLgoKCSogYXJzY2FuLmM6IFJlbW92ZWQgI2lmZGVmIG1lc3MgYWJvdXQgc3RyaW5nLmggZXQgYWwuCglKdXN0ICNpbmNsdWRlIG1ha2UuaCBpbnN0ZWFkLgoJKiBtYWtlLmggKGZzdGF0LCBhdG9sKTogRGVjbGFyZS4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCk6IERvbid0IHVzZSBzaWdtYXNrIHRvIGNoZWNrIGZvcgoJcHJvcGFnYXRlZCBzaWduYWxzOyB1c2UgfHxzIGluc3RlYWQuCgkoUFJPUEFHQVRFRF9TSUdOQUxfTUFTSyk6IFJlbW92ZWQuCgkoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbUE9TSVhdOiBVc2Ugc2lncHJvY21hc2sgaW4gcGxhY2Ugb2Ygc2lnc2V0bWFzay4KCgkqIHZhcmlhYmxlLmMgKHZhcmlhYmxlX2J1ZmZlciwgdmFyaWFibGVfYnVmZmVyX2xlbmd0aCwKCWluaXRpYWxpemVfdmFyaWFibGVfb3V0cHV0LCB2YXJpYWJsZV9vdXRwdXQpOiBNb3ZlZCB0byBleHBhbmQuYzsKCW1hZGUgYWxsIHN0YXRpYy4KCShzdHJ1Y3Qgb3V0cHV0X3N0YXRlLCBzYXZlX3ZhcmlhYmxlX291dHB1dCwKCXJlc3RvcmVfdmFyaWFibGVfb3V0cHV0KTogUmVtb3ZlZC4KCSogZXhwYW5kLmMgKGluaXRpYWxpemVfdmFyaWFibGVfb3V0cHV0KTogUHV0IGEgTlVMIGF0IHRoZSBiZWdpbm5pbmcKCW9mIHRoZSBuZXcgYnVmZmVyIGFmdGVyIGFsbG9jYXRpbmcgaXQuCgkoYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZSk6IERvbid0IHVzZQoJe3NhdmUscmVzdG9yZX1fdmFyaWFibGVfb3V0cHV0LiAgRG8gaXQgYnkgaGFuZCBpbnN0ZWFkLCBrZWVwaW5nCglzdGF0ZSBvbiB0aGUgc3RhY2sgaW5zdGVhZCBvZiBtYWxsb2MnaW5nIGl0LgoJKGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQpOiBSZW1vdmVkLgoJKiB2YXJpYWJsZS5oIChhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kKTogRGVmaW5lIGhlcmUgYXMgbWFjcm8uCgkodmFyaWFibGVfYnVmZmVyX291dHB1dCwgaW5pdGlhbGl6ZV92YXJpYWJsZV9vdXRwdXQsCglzYXZlX3ZhcmlhYmxlX291dHB1dCwgcmVzdG9yZV92YXJpYWJsZV9vdXRwdXQpOiBSZW1vdmVkIGRlY2xzLgoKCSogcmVhZC5jIChjb25kaXRpb25hbF9saW5lKTogRm9yIGFuIGlmIGNtZCwgaWYgYW55IGVsdCBvZiB0aGUKCWNvbmRpdGlvbmFscyBzdGFjayBpcyBpZ25vcmluZywganVzdCBwdXNoIGEgbmV3IGxldmVsIHRoYXQgaWdub3JlcwoJYW5kIHJldHVybiAxOyBkb24ndCBldmFsdWF0ZSB0aGUgY29uZGl0aW9uLgoKVGh1IEp1biAgNCAyMTowMToyMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IFB1dCAjaWZkZWYncyBhcm91bmQgZnJvYmJpbmcgU0lHU1lTIGFuZCBTSUdCVVMuCgoJKiBqb2IuYyAoZ2V0ZHRhYmxlc2l6ZSk6IERvbid0IGRlY2xhcmUgb3IgI2RlZmluZSBpZiBhbHJlYWR5ICNkZWZpbmUnZC4KCldlZCBKdW4gIDMgMjM6NDI6MzYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IElmIGAuRVhQT1JUX0FMTF9WQVJJQUJMRVMnIGlzIGEgdGFyZ2V0LCBzZXQKCWV4cG9ydF9hbGxfdmFyaWFibGVzLgoJKiBtYWtlLnRleGluZm8gKFZhcmlhYmxlcy9SZWN1cnNpb24pOiBEb2N1bWVudCAuRVhQT1JUX0FMTF9WQVJJQUJMRVMuCgpUdWUgSnVuICAyIDIxOjA4OjM1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjEzLgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogQ2FsY3VsYXRlIGxlbmd0aCBmb3IgXkQgYW5kID9ECglpbmRpdmlkdWFsbHksIG1ha2luZyBzdXJlIHRvIGdpdmUgdGhlbSBhdCBsZWFzdCBlbm91Z2ggc3BhY2UgZm9yICIuLyIuCgoJKiBtYWtlLmggW0NSQVldOiAjZGVmaW5lIHNpZ25hbCB0byBic2RzaWduYWwuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbQ1JBWV06IERlZmluZSBQQywgU0VHTERSLAoJQ0Y3N1BQRkxBR1MsIENGNzdQUCwgQ0ZULCBDRiwgYW5kIEZDLgoKCSogYXJzY2FuLmMgKEFSX0hEUl9TSVpFKTogRGVmaW5lIHRvIHNpemVvZiAoc3RydWN0IGFyX2hkciksIGlmIGl0Cgl3YXNuJ3QgZGVmaW5lZCBieSA8YXIuaD4uCgpUaHUgTWF5IDI4IDAwOjU2OjUzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjEyLgoKVHVlIE1heSAyNiAwMToyNjozMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IEluaXRpYWxpemUgTEFTVFJVTEUgdG8gbmlsLCBub3QKCXBhdHRlcm5fcnVsZXMuCgpNb24gTWF5IDI1IDE5OjAyOjE1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBJbml0aWFsaXplIGFsbCB0aGUgbG9uZ19vcHRpb24gZWx0IG1lbWJlcnMuCgpUaHUgTWF5IDIxIDE2OjM0OjI0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKFRleHQgRnVuY3Rpb25zKTogQ29ycmVjdCBmaWx0ZXItb3V0IGRlc2NyaXB0aW9uLgoKVHVlIE1heSAxOSAyMDo1MDowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChyZWFsY2xlYW4pOiBEb24ndCByZW1vdmUgYmFja3VwIGZpbGVzLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBBbGxvY2F0ZSBBUkdDKzEgZWx0cyBpbiBgb3RoZXJfYXJncycuCgpTdW4gTWF5IDE3IDE2OjM4OjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMS4KClRodSBNYXkgMTQgMTY6NDI6MzMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBkaWUgaWYgd2FpdCByZXR1cm5zIEVJTlRSLgoKV2VkIE1heSAxMyAxODoyODoyNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQWx3YXlzIHJ1biB0aGUgbmV4dCBjb21tYW5kIGZvciBhCglzdWNjZXNzZnVsIHRhcmdldC4gIElmIHdlIGFyZSBnb2luZyB0byBkaWUsIHdlIGRvbid0IHdhbnQgdG8gbGVhdmUKCXRoZSB0YXJnZXQgcGFydGlhbGx5IG1hZGUuCgpUdWUgTWF5IDEyIDAwOjM5OjE5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWZ0ZXIgbG9vcCwgaWYgd2Ugb25seQoJaGF2ZSBvbmUgd29yZCwgY2hlY2sgaXQgZm9yIGJlaW5nIGEgc2hlbGwgY29tbWFuZC4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogQWxsb2NhdGUgQVJHQyBzbG90cyBpbiBvdGhlcl9hcmdzIHRvCgliZWdpbiB3aXRoLCBzbyB3ZSBuZXZlciBuZWVkIHRvIHdvcnJ5IGFib3V0IGdyb3dpbmcgaXQuCglJZiB3ZSBnZXQgYSBub24tb3B0aW9uIGFyZyBhbmQgUE9TSVhMWV9DT1JSRUNUIGlzIGluIHRoZQoJZW52aXJvbm1lbnQsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4gIEFmdGVyIHRoZSBsb29wLCBhZGQgYWxsIHJlbWFpbmluZwoJYXJncyB0byBvdGhlcl9hcmdzIGxpc3QuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEZvciBwb3NpdGl2ZV9pbnQgYW5kIGZsb2F0aW5nIHN3aXRjaGVzCgl3aGVuIG9wdGFyZyBpcyBuaWwsIHVzZSBuZXh0IGFyZyBpZiBpdCBsb29rcyByaWdodCAoc3RhcnQgd2l0aCBhCglkaWdpdCwgb3IgbWF5YmUgZGVjaW1hbCBwb2ludCBmb3IgZmxvYXRpbmcpLgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBBbHdheXMgc2V0IFNIRUxMIHRvCglkZWZhdWx0IGlmIGl0IGNvbWVzIGZyb20gdGhlIGVudmlyb25tZW50LiAgU2V0IGl0cyBleHBvcnQgYml0LgoJKiBtYWtlLnRleGluZm8gKEVudmlyb25tZW50KTogRG9jdW1lbnQgY2hhbmdlLgoKTW9uIE1heSAxMSAwMDozMjo0NiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTAuCgoJKiBjb21wYXRNYWtlZmlsZSAodGFncywgVEFHUyk6IFVzZSB2YXJzIGZvciBjbWRzLgoJKEVUQUdTLCBDVEFHUyk6IERlZmluZS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSWYgYSBzd2l0Y2hlcyBlbHQgaGFzIGEgbmlsIGxvbmdfbmFtZSwKCW1ha2UgdGhlIGxvbmcgb3B0aW9uIG5hbWUgZWx0IGJlICIiLgoJRml4ZWQgbG9vcCB0byBub3QgaWdub3JlIGFsbCB0aGUgb3B0aW9ucy4KCgkqIG1ha2UudGV4aW5mbyAoT3B0aW9uIFN1bW1hcnkpOiBBZGRlZCBsb25nIG9wdGlvbnMuCgoJKiBtYWluLmMgKHN3aXRjaGVzKTogQ2hhbmdlZCAtbSdzIGRlc2NyaXB0aW9uIHRvICItYiIuCgkoZGVjb2RlX3N3aXRjaGVzKTogV2hlbiBwcmludGluZyB0aGUgdXNhZ2UgbWVzc2FnZSwgZG9uJ3QgcHJpbnQKCXN3aXRjaGVzIHdob3NlIGRlc2NyaXB0aW9ucyBzdGFydCB3aXRoIC0uCglXaGVuIGNvbnN0cnVjdGluZyB0aGUgbGlzdCBvZiBuYW1lcyBmb3Igc3dpdGNoIC1DLCBzZWFyY2ggdGhlCglzd2l0Y2hlcyB2ZWN0b3IgZm9yIHN3aXRjaGVzIHdob3NlIGRlc2NyaXB0aW9ucyBhcmUgIi1DIi4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBDYWxsIC1TIC0tbm8ta2VlcC1nb2luZywgbm90IC0tZG9udC1rZWVwLWdvaW5nLgoJQ2FsbCAtSSAtLWluY2x1ZGUtZGlyLCBub3QgLS1pbmNsdWRlLXBhdGguCgkobG9uZ19vcHRpb25fYWxpYXNlcyk6IEFkZGVkIC0tbmV3ID09IC1XLCAtLWFzc3VtZS1uZXcgPT0gLVcsCgktLWFzc3VtZS1vbGQgPT0gLW8sIC0tbWF4LWxvYWQgPT0gLWwsIC0tZHJ5LXJ1biA9PSAtbiwgLS1yZWNvbiA9PSAtbiwKCS0tbWFrZWZpbGUgPT0gLWYuCgoJKiBtYWluLmMgKHN3aXRjaGVzKTogUmVtb3ZlZCBib2d1cyAic2lsZW50IiBlbHQuCgkobG9uZ19vcHRpb25fYWxpYXNlcyk6IERlZmluZSBuZXcgdmFyLgoJKGRlY29kZV9zd2l0Y2hlcyk6IEFkZCBsb25nX29wdGlvbl9hbGlhc2VzIG9udG8gdGhlIGVuZCBvZiB0aGUgbG9uZwoJb3B0aW9ucyB2ZWN0b3IgY3JlYXRlZCBmb3IgZ2V0b3B0X2xvbmcuCglMb29rIHRocm91Z2ggbG9uZ19vcHRpb25fYWxpYXNlcyBmb3IgZXh0cmEgbmFtZXMgdG8gbGlzdAoJaW4gdXNhZ2UgbWVzc2FnZS4KClNhdCBNYXkgIDkgMDA6MjE6MDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IEZpeGVkIHRvIHByb3Blcmx5IG5vdCBwcmludCB0aGUKCWxlYXZpbmcgbWVzc2FnZSB3aGVuIHdlIGhhdmVuJ3QgcHJpbnRlZCB0aGUgZW50ZXJpbmcgbWVzc2FnZS4KCkZyaSBNYXkgIDggMjE6NTU6MzUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaCk6IEFkZGVkIGVsdHMgYGxvbmdfbmFtZScsCglgZGVzY3JpcHRpb24nLCBhbmQgYGFyZ2Rlc2MnLgoJKHN3aXRjaGVzKTogQWRkZWQgaW5pdGlhbGl6ZXJzIGZvciBuZXcgbWVtYmVycy4KCShkZWNvZGVfc3dpdGNoZXMpOiBSZXdyaXR0ZW4gdG8gdXNlIGdldG9wdF9sb25nLgoJKiBjb21wYXRNYWtlZmlsZSAoR0VUT1BULCBHRVRPUFRfU1JDKTogRGVmaW5lLgoJKG9ianMsIHNyY3MpOiBJbmNsdWRlIHRoZW0uCgoJKiBqb2IuYyAoY2hpbGRfZGllZCk6IFJlbmFtZWQgdG8gZGVhZF9jaGlsZHJlbjsgbWFkZSBzdGF0aWMuCgkoY2hpbGRfaGFuZGxlcik6IEluY3JlbWVudCBkZWFkX2NoaWxkcmVuIGluc3RlYWQgb2Ygc2V0dGluZyBjaGlsZF9kaWVkLgoJKHJlYXBfY2hpbGRyZW4pOiBEZWNyZW1lbnQgZGVhZF9jaGlsZHJlbiBpbnN0ZWFkIG9mIGNsZWFyaW5nCgljaGlsZF9kaWVkLiAgVGhlIHBvaW50IG9mIGFsbCB0aGlzIGlzIHRvIGF2b2lkIHByaW50aW5nICJ3YWl0aW5nCglmb3IgdW5maW5pc2hlZCBqb2JzIiB3aGVuIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gYmxvY2suCglUaGlzIGhhcHBlbmVkIHdoZW4gbXVsdGlwbGUgU0lHQ0hMRHMgYmVmb3JlIHJlYXBfY2hpbGRyZW4gd2FzIGNhbGxlZC4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogSWYgRVJSIGlzIHNldCwgc28gd2UgZG9uJ3QgY2FsbCBzdGFydF9qb2IKCW9uIHRoZSBjaGlsZCBiZWluZyByZWFwZWQsIGluc3RlYWQgc2V0IGl0cyBjb21tYW5kX3N0YXRlIHRvCgljc19maW5pc2hlZC4KCShyZWFwX2NoaWxkcmVuLCBjaGlsZF9oYW5kbGVyLCBuZXdfam9iKTogSSBhZGRlZCBzZXZlcmFsCglkZWJ1Z2dpbmcgcHJpbnRmJ3Mgd2hpbGUgZml4aW5nIHRoaXMuICBJIGxlZnQgdGhlbSBpbiBpZiAoZGVidWdfZmxhZykKCWJlY2F1c2UgdGhleSBtYXkgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhpcyBzdHVmZiBhZ2Fpbi4KCldlZCBNYXkgIDYgMjI6MDI6MzcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogdl9leHBvcnQgaXMgbm90IDEuCgpNb24gTWF5ICA0IDE3OjI3OjM3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuOS4KCgkqIHZhcmlhYmxlLmMgKGV4cG9ydF9hbGxfdmFyaWFibGVzKTogTmV3IHZhcmlhYmxlLgoJKHRhcmdldF9lbnZpcm9ubWVudCk6IEV4cG9ydCB2YXJpYWJsZXMgd2hvc2UgYGV4cG9ydCcgbWVtYmVyIGlzCgl2X2RlZmF1bHQgaWYgZXhwb3J0X2FsbF92YXJpYWJsZXMgaXMgc2V0IGFuZCB0aGVpciBuYW1lcyBhcmUgYmVuaWduLgoJKiB2YXJpYWJsZS5oOiBEZWNsYXJlIGV4cG9ydF9hbGxfdmFyaWFibGVzLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiBleHBvcnQgb3IgdW5leHBvcnQgaXMgZ2l2ZW4gd2l0aCBubwoJYXJncywgc2V0IG9yIGNsZWFyIGV4cG9ydF9hbGxfdmFyaWFibGVzLCByZXNwZWN0aXZlbHkuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBFeGNsdWRlIE1BS0VMRVZFTCBpbiB0aGUgbG9vcCwKCXNvIGl0IGlzbid0IGR1cGxpY2F0ZWQgd2hlbiB3ZSBhZGQgaXQgYXQgdGhlIGVuZC4KClN1biBNYXkgIDMgMTc6NDQ6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuOC4KCgkqIHZhcmlhYmxlLmggKHN0cnVjdCB2YXJpYWJsZSk6IEFkZGVkIG5ldyBtZW1iZXIgYGV4cG9ydCcuCgkqIHZhcmlhYmxlLmMgKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBJbml0aWFsaXplIGl0IHRvIHZfZGVmYXVsdC4KCSh0YXJnZXRfZW52aXJvbm1lbnQpOiBEb24ndCBjaGVjayBmb3IgLk5PRVhQT1JULgoJRXhwb3J0IHZhcmlhYmxlcyB3aG9zZSBgZXhwb3J0JyBtZW1iZXIgaXMgdl9kZWZhdWx0IGFuZCB0aGF0IHdvdWxkCgloYXZlIGJlZW4gZXhwb3J0ZWQgdW5kZXIgLk5PRVhQT1JULCBhbmQgdmFyaWFibGVzIHdob3NlIGBleHBvcnQnCgltZW1iZXIgaXMgdl9leHBvcnQuCgkodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBSZXR1cm4gdGhlIHZhcmlhYmxlIGRlZmluZWQuCgkqIHZhcmlhYmxlLmggKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogQ2hhbmdlZCBkZWNsLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZWNvZ25pemUgYGV4cG9ydCcgYW5kIGB1bmV4cG9ydCcgZGlyZWN0aXZlcy4KCkZyaSBNYXkgIDEgMTE6Mzk6MzggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKSBbUE9TSVhdOiBSZXZlcnNlZCBhcmdzIHRvIHNpZ2FkZHNldC4KClRodSBBcHIgMzAgMTc6MzM6MzIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyBbUE9TSVggfHwgIVVTR10gKHVuYmxvY2tfc2lncyk6IE5ldyBmbi4KCShzdGFydF9qb2IpOiBCbG9jayBzaWduYWxzIGJlZm9yZSBmb3JraW5nLgoJKG5ld19qb2IpOiBVbmJsb2NrIHNpZ25hbHMgYWZ0ZXIgcHV0dGluZyB0aGUgbmV3IGNoaWxkIG9uIHRoZSBjaGFpbi4KCSogbWFpbi5jIChtYWluKSBbUE9TSVhdOiBVc2Ugc2lnc2V0X3QgZmF0YWxfc2lnbmFsX3NldCBpbnN0ZWFkIG9mCglpbnQgZmF0YWxfc2lnbmFsX21hc2suCgoJKiBsb2FkLmMgW3NnaV0gKExEQVZfQ1ZUKTogRGVmaW5lLgoKV2VkIEFwciAyOSAxNzoxNTo1OSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuNy4KCgkqIGxvYWQuYyAobG9hZF9hdmVyYWdlKSBbc2dpXTogQ2xlYXIgdGhlIGhpZ2ggYml0IG9mIHRoZSBhZGRyZXNzCglmcm9tIHRoZSBzeW1ib2wgdGFibGUgYmVmb3JlIGxvb2tpbmcgaXQgdXAgaW4ga21lbS4KCgkqIG1pc2MuYyAoZmF0YWwsIG1ha2VmaWxlX2ZhdGFsKTogUHV0ICoqKiBpbiBmYXRhbCBlcnJvciBtZXNzYWdlcy4KCShyZW1ha2VfZmlsZSk6IE5vIGxvbmdlciBuZWVkZWQgaW4gbWVzc2FnZSBoZXJlLgoKCSogbWFpbi5jIChkaWUpOiBDYWxsIHJlYXBfY2hpbGRyZW4gd2l0aCBCTE9DSz09MS4KClR1ZSBBcHIgMjggMjA6NDQ6MzUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChmcmVlcnVsZSk6IERvbid0IHNldCBMQVNUUlVMRS0+bmV4dCBpZiBMQVNUUlVMRSBpcyBuaWwuCgpTdW4gQXByIDI2IDE1OjA5OjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBJbml0aWFsaXplIExBU1RSVUxFIHRvIG5pbCwKCW5vdCB0byBoZWFkIG9mIGNoYWluLiAgRXh0cmFjdCBuZXh0IHB0ciBiZWZvcmUgd2UgbWlnaHQgZG8KCWZyZWVydWxlLCBhbmQgdXNlIHRoYXQgZm9yIG5leHQgaXRlcmF0aW9uLgoJKGZyZWVydWxlKTogU3RpbGwgZG8gbmV4dCBwdHIgZnJvYmJpbmcgaWYgTEFTVFJVTEUgaXMgbmlsLgoKVHVlIEFwciAyMSAwMzoxNjoyOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IFJlbW92ZWQgZXh0cmEgJXMgZnJvbSBlcnJvciBtc2cgZm9ybWF0LgoKCSogVmVyc2lvbiAzLjYyLjYuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERvbid0IHN0YXJ0IGxhdGVyIGNvbW1hbmRzIGluIGEgc2VxdWVuY2UKCWlmIEVSUiBpcyBub256ZXJvLgoKCSogam9iLmMgKG5ld19qb2IpOiBBbHdheXMgY2FsbCByZWFwX2NoaWxkcmVuIHdpdGggQkxPQ0s9PTAgZmlyc3QgdGhpbmcuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IE5ldyBmdW5jdGlvbjsgd29yayB0aGF0IHVzZWQgdG8gYmUgZG9uZSBpbgoJY2hpbGRfaGFuZGxlci4KCShjaGlsZF9kaWVkKTogTmV3IGdsb2JhbCB2YXIuCgkoY2hpbGRfaGFuZGxlcik6IE5vdyBqdXN0IHNldHMgY2hpbGRfZGllZC4KCSh3YWl0X2Zvcl9jaGlsZHJlbik6IFJlbW92ZWQuCgkodW5rbm93bl9jaGlsZHJlbl9wb3NzaWJsZSwgYmxvY2tfc2lnbmFscywgdW5ibG9ja19zaWduYWxzLAoJcHVzaF9zaWduYWxzX2Jsb2NrZWRfcCwgcG9wX3NpZ25hbHNfYmxvY2tlZF9wKTogUmVtb3ZlZC4KCShjaGlsZF9leGVjdXRlX2pvYik6IFJlbW92ZWQgY2FsbCB0byB1bmJsb2NrX3NpZ25hbHMuCgkobmV3X2pvYik6IFJlbW92ZWQgY2FsbHMgdG8gcHVzaF9zaWduYWxzX2Jsb2NrZWRfcCBhbmQKCXBvcF9zaWduYWxzX2Jsb2NrZWRfcC4KCSogam9iLmg6IERlY2xhcmUgcmVhcF9jaGlsZHJlbiwgbm90IHdhaXRfZm9yX2NoaWxkcmVuLgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpLCBqb2IuYyAobmV3X2pvYiksCglsb2FkLmMgW0xEQVZfQkFTRURdICh3YWl0X3RvX3N0YXJ0X2pvYiksIG1haW4uYyAoZGllKSwKCXJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbiksIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6CglDaGFuZ2VkIHdhaXRfZm9yX2NoaWxkcmVuIGNhbGxzIHRvIHJlYXBfY2hpbGRyZW4uCglTb21lIG5lZWRlZCB0byBiZSBsb29wcyB0byB3YWl0IGZvciBhbGwgY2hpbGRyZW4gdG8gZGllLgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpLCBtYWluLmMgKG1haW4sCglsb2dfd29ya2luZ19kaXJlY3RvcnkpLCBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBSZW1vdmVkIGNhbGxzCgl0byBwdXNoX3NpZ25hbHNfYmxvY2tlZF9wIGFuZCBwb3Bfc2lnbmFsc19ibG9ja2VkX3AuCgkqIGpvYi5oOiBSZW1vdmVkIGRlY2xzLgoKCSogam9iLmg6IEFkZGVkIGNvcHlyaWdodCBub3RpY2UuCgpXZWQgQXByIDE1IDAyOjAyOjQwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY2hpbGRfZXJyb3IpOiBObyAqKiogZm9yIGlnbm9yZWQgZXJyb3IuCgpUdWUgQXByIDE0IDE4OjMxOjIxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBpbXBsaWNpdC5jIChERUJVR1AyKTogVXNlIGRvIC4uLiB3aGlsZSAoMCkgaW5zdGVhZCBvZiBpZiAuLi4gZWxzZSB0bwoJYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogRG9uJ3QgcmVtb3ZlIC4vIHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgYQoJYmxhbmsuCgpNb24gQXByIDEzIDIxOjU2OjE1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggKERFQlVHUFIpOiBVc2UgZG8gLi4uIHdoaWxlICgwKSBpbnN0ZWFkIG9mIGlmIC4uLiBlbHNlIHRvCglhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFJ1biBmaWxlX210aW1lIG9uIHRoZSBhbHNvX21ha2UKCWZpbGVzLCBzbyB2cGF0aF9zZWFyY2ggY2FuIGhhcHBlbi4KCgkqIEdOVW1ha2VmaWxlICh0ZXN0cyk6IFVzZSBwZXJsIHRlc3Qgc3VpdGUgZnJvbSBjc2FAc3cuc3RyYXR1cy5jb20uCgkoYWxwaGEtZmlsZXMpOiBJbmNsdWRlIHRlc3Qgc3VpdGUgdGFyIGZpbGUuCgpGcmkgQXByICAzIDAwOjUwOjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjUuCgpXZWQgQXByICAxIDA1OjMxOjE4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUsIHVwZGF0ZV9maWxlXzEpOiBEbyBjaGVja19yZW5hbWVkIG9uIGVsdHMKCW9mIGRlcCBjaGFpbnMgd2hlbiB0cmF2ZXJzaW5nIHRoZW0uICBTb21ldGhpbmcgdW5yZWxhdGVkIG1pZ2h0IGhhdmUKCXJlbmFtZWQgb25lIG9mIHRoZSBmaWxlcyB0aGUgZGVwIGNoYWluIHBvaW50cyB0by4KCgkqIGZpbGUuYyAocmVuYW1lX2ZpbGUpOiBJZiBGSUxFIGhhcyBiZWVuIHJlbmFtZWQsIGZvbGxvdyBpdHMKCWByZW5hbWVkJyBwdHIsIHNvIHdlIGdldCB0byB0aGUgZmluYWwgcmVhbCBGSUxFLiAgVXNpbmcgdGhlIHJlbmFtZWQKCW9uZXMgbG9zZXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgaW4gdGhlIGhhc2ggdGFibGUsIHNvIHRoZSByZW1vdmFsCgljb2RlIGxvb3BzIGluZmluaXRlbHkuCgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IENsb2JiZXIgbnVsbCB0ZXJtaW5hdG9yIGludG8KCU1BS0VGSUxFUyBleHBhbnNpb24sIHNvIHN0cmluZyBwYXNzZWQgdG8gcmVhZF9tYWtlZmlsZSBpcyBwcm9wZXJseQoJdGVybWluYXRlZC4KCk1vbiBNYXIgMzAgMjA6MTg6MDIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiAkKiBmb3IgYXJjaGl2ZSBtZW1iZXIgd2l0aAoJZXhwbGljaXQgY21kcyBpcyBzdGVtIG9mIG1lbWJlciwgbm90IG9mIHdob2xlIGBsaWIobWVtYmVyKScuCgpUaHUgTWFyIDI2IDE1OjI0OjM4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi40LgoKVHVlIE1hciAyNCAwNToyMDo1MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogUnVsZXMgYXJlIGlkZW50aWNhbCBvbmx5IGlmIGFsbCB0aGVpcgoJdGFyZ2V0cyBtYXRjaCAocmVnYXJkbGVzcyBvZiBvcmRlcikuCgpXZWQgTWFyIDExIDEzOjQ5OjU0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHJlbWFrZV9maWxlKTogQ2hhbmdlZCBlcnJvciAibm8gd2F5IHRvIG1ha2UiIHRvICJubwoJcnVsZSB0byBtYWtlIi4gIEZpYXQgSHVnaC4KCgkqIG1ha2UudGV4aW5mbyAoTGFzdCBSZXNvcnQpOiBEZXNjcmliZSAlOjogcnVsZXMgYW5kIG5ldyAuREVGQVVMVAoJYmVoYXZpb3IuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IE9ubHkgdXNlIC5ERUZBVUxUIGNtZHMgaWYgRklMRSBpcyBub3QgYQoJdGFyZ2V0LgoKVHVlIE1hciAxMCAxODoxMzoxMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogcmVtb3RlLXN0dWIuYywgcmVtb3RlLWNzdG1zLmMgKHN0YXJ0X3JlbW90ZV9qb2IpOiBUYWtlIG5ldyBhcmcsCgllbnZpcm9ubWVudCB0byBwYXNzIHRvIGNoaWxkLgoJKiBqb2IuYyAoc3RhcnRfam9iKTogUGFzcyBpdC4KCk1vbiBNYXIgIDkgMTk6MDA6MTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAoZW50ZXJfZmlsZSk6IEFsc28gc3RyaXAgLi9zIGhlcmUsIHRvIGdldCBjb21tYW5kLWxpbmUKCXRhcmdldCBuYW1lcy4KCgkqIHJlbW90ZS1jc3Rtcy5jOiBBZGQgY29tbWVudCB0ZWxsaW5nIHBlb3BsZSB0byBsZWF2ZSBtZSBhbG9uZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChtYW5wYWdlIGluc3RhbGwpOiBSZW1vdmUgdGFyZ2V0IGJlZm9yZSBjb3B5aW5nLgoKVHVlIE1hciAgMyAxODo0MzoyMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChNaXNzaW5nKTogUmVuYW1lZCB0byAiSW5jb21wYXRpYmlsaXRpZXMgYW5kIC4uLiIuCglBZGRlZCBwYXJhZ3JhcGggZGVzY3JpYmluZyAkPyBpbmNvbXBhdGliaWxpdHkgd2l0aCBVbml4IGFuZCBQT1NJWC4yLgoKU3VuIE1hciAgMSAxNTo1MDo1NCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBudXRyaW1hdC5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6IERvbid0IGRlY2xhcmUgZm9yayBvciBwaXBlLgoJVXNlIHZmb3JrIGluc3RlYWQgb2YgZm9yay4KClR1ZSBGZWIgMjUgMjI6MDU6MzIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoQ2hhaW5lZCBSdWxlcyk6IENsYXJpZnkgLlBSRUNJT1VTIHRvIHNhdmUKCWludGVybWVkaWF0ZSBmaWxlcy4KCgkqIGxvYWQuYyBbc3VuXSAoTERBVl9DVlQpOiBEZWZpbmUgdG8gZGl2aWRlIGJ5IEZTQ0FMRS4KClN1biBGZWIgMTYgMDI6MDU6MTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4zLgoKU2F0IEZlYiAxNSAxNzoxMjoyMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKG1ha2VpbmZvKTogVXNlIGVtYWNzIGJhdGNoLXRleGluZm8tZm9ybWF0IGZuLgoKRnJpIEZlYiAxNCAwMDoxMTo1NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ29ycmVjdGx5IGhhbmRsZSBkZWZpbmUgJiBlbmRlZiBpbiBpZmRlZnMuCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IFBhc3MgYXJnIGZvciAlcyBpbiBlcnJvciBtc2cuCgoJKiBtYWluLmMgKG1haW4pIFtfX0lCTVIyLCBQT1NJWF06IFVzZSBjb3JyZWN0IChhIGxhIFVTR3IzKSBzZXR2YnVmCgljYWxsLgoKV2VkIEZlYiAxMiAxMjowNzozOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChMaWJyYXJpZXMvU2VhcmNoKTogU2F5IGl0IGRvZXMgL3Vzci9sb2NhbC9saWIgdG9vLgoKU3VuIEZlYiAgOSAyMzowNjoyNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2hlY2sgZm9yIGV4dHJhbmVvdXMgYGVuZGVmJyB3aGVuIGlnbm9yaW5nLgoKVGh1IEZlYiAgNiAxNjoxNTo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIuCgpUdWUgRmViICA0IDIwOjA0OjQ2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IENvcnJlY3RseSBpZ25vcmUKCXdoaXRlc3BhY2UgYWZ0ZXIgYmFja3NsYXNoLU5MLgoKRnJpIEphbiAzMSAxODozMDowNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGU6IElnbm9yZSBlcnJvcnMgZnJvbSBjaGdycCBhbmQgY2htb2Qgd2hlbiBpbnN0YWxsaW5nLgoKV2VkIEphbiAyOSAxODoxMzozMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBXaGVuIHNldHRpbmcgTUFLRUxFVkVMIGluIHRoZSBlbnYgdG8gcmUtZXhlYywKCWFsbG9jYXRlIHNwYWNlIHNvIGFzIG5vdCB0byBjbG9iYmVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgb2xkIHN0cmluZy4KCgkqIG1ha2UuaCBbSEFWRV9BTExPQ0FfSF06IEluY2x1ZGUgPGFsbG9jYS5oPgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IERvY3VtZW50IEhBVkVfQUxMT0NBX0guCgpNb24gSmFuIDIwIDEzOjQwOjA1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbVkZPUktfTUlTU0lOR106IFVzZSBmb3JrIGluc3RlYWQuCgkqIGNvbXBhdE1ha2VmaWxlIChkZWZpbmVzKTogRG9jdW1lbnQgc2FtZS4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRG9uJ3QgY3JlYXRlIGFuIGVtcHR5CglhcmcgaWYgYmFja3NsYXNoLU5MIGlzIGF0IGJlZ2lubmluZyBvZiB3b3JkLgoKU3VuIEphbiAxOSAxNjoyNjo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgW0RHVVhdOiBDYWxsIHNldHZidWYgYXMgZm9yIFVTR3IzLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBOb3RpY2UgY29ycmVjdGx5IHRoYXQKCWJhY2tzbGFzaC1OTCBpcyB0aGUgZW5kIG9mIHRoZSBhcmcgKGJlY2F1c2UgaXQgaXMgcmVwbGFjZWQgd2l0aCBhCglzcGFjZSkuCgpUaHUgSmFuIDE2IDE4OjQyOjM4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogSWYgU0hFTEwgaXMgbmlsLCBzZXQgaXQKCXRvIGRlZmF1bHRfc2hlbGwgYmVmb3JlIHByb2NlZWRpbmcuCgoJKiBtYWtlLmggW3NnaV06IE5vIGFsbG9jYS5oLCBhZnRlciBhbGwuCgpXZWQgSmFuIDE1IDEyOjMwOjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAobXVsdGlfZ2xvYik6IENvbnMgdXAgdGhlIGNoYWluIG9mIHRoZSByZXN1bHRzIG9mIGdsb2IKCWZyb20gYmFjayB0byBmcm9udCwgc28gaXQgY29tZXMgb3V0IGluIGZvcndhcmQgb3JkZXIuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IERvbid0IGVhdCBjaGFyIGZvbGxvd2luZwoJYmFja3NsYXNoLU5MLgoKTW9uIEphbiAxMyAxOToxNjo1NiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMS4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFt1bHRyaXhdOiBHRVQ9Z2V0LCBsaWtlIFVTRy4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogUmVtb3ZlIHRhYnMgZm9sbG93aW5nCgliYWNrc2xhc2gtTkwgY29tYm9zIGluIHRoZSBpbnB1dCBsaW5lLCBzbyB0aGV5IGRvbid0IHNob3cgdXAgd2hlbgoJdGhhdCBsaW5lIGlzIHByaW50ZWQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEb24ndCBjb2xsYXBzZV9jb250aW51YXRpb25zIHRoZSBsaW5lIG9uCglpbnB1dDsgZG8gaXQgb24gdGhlIGNvcHkgd2UgZG8gcmVtb3ZlX2NvbW1lbnRzIG9uLgoJRm9yIHJ1bGUgbGluZXMsIGNvbGxhcHNlX2NvbnRpbnVhdGlvbnMgdGhlIGxpbmUgYWZ0ZXIgY2hvcHBpbmcKCSI7Y21kcyIgb2ZmIHRoZSBlbmQsIHNvIHdlIGRvbid0IGVhdCBjb250cyBpbiB0aGUgY21kcy4KCUdpdmUgZXJyb3IgZm9yICI7Y21kcyIgd2l0aCBubyBydWxlLgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEVhdCBiYWNrc2xhc2gtTkwgY29tYm9zCgl3aGVuIGNvbnN0cnVjdGluZyB0aGUgbGluZSB0byByZWN1cnNlIG9uIGZvciBzbG93LCB0b28uCgpTYXQgSmFuIDExIDAyOjIwOjI3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAoZW50ZXJfZmlsZSk6IERvbid0IHN0cmlwIGxlYWRpbmcgYC4vJ3MuCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBUYWtlIG5ldyBhcmcgU1RSSVA7IGlmIG5vbnplcm8sIGRvIGl0IGhlcmUuCgkqIGRlZmF1bHQuYyAoc2V0X2RlZmF1bHRfc3VmZml4ZXMpLCBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYiksCglyZWFkLmMgKHJlYWRfbWFrZWZpbGUpLCBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogQ2hhbmdlIGNhbGxlcnMuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX0lCTVIyXTogRkM9eGxmCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFR1cm4gYmFja3NsYXNoLU5MIGFuZAoJZm9sbG93aW5nIHdoaXRlc3BhY2UgaW50byBhIHNpbmdsZSBzcGFjZSwgcmF0aGVyIHRoYW4ganVzdCBlYXRpbmcKCXRoZSBiYWNrc2xhc2guCgoJKiBtYWtlLnRleGluZm8gKENvcHlpbmcpOiBAaW5jbHVkZSBncGwudGV4aW5mbywgcmF0aGVyIHRoYW4KCWR1cGxpY2F0aW5nIGl0cyBjb250ZW50cy4KCkZyaSBOb3YgIDggMjA6MDY6MDMgMTk5MSAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogTWFrZSBzdXJlIG5vdCB0byBib3RoZXIKCXByb2Nlc3NpbmcgYW4gZW1wdHkgbGluZS4KCgkqIFZlcnNpb24gMy42Mi4wLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBBbHdheXMgcmVjdXJzZSBmb3Igc2xvdzsKCXNpbXBsZSBjYXNlIGRpZG4ndCBoYW5kbGUgZmluZGluZyBuZXdsaW5lcy4KClR1ZSBOb3YgIDUgMTg6NTE6MTAgMTk5MSAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogU2V0IFJFU1RQIHByb3Blcmx5IHdoZW4KCXNsb3c7IGRvbid0IFxpZnkgcGFzdCBhIG5ld2xpbmUuCgpGcmkgTm92ICAxIDE5OjM0OjI4IDE5OTEgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW3NnaV06ICNpbmNsdWRlIDxhbGxvY2EuaD4uCgoMCgpTZWUgQ2hhbmdlTG9nLjEsIGF2YWlsYWJsZSBpbiB0aGUgR2l0IHJlcG9zaXRvcnkgYXQ6CgoJaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L21ha2UuZ2l0L3RyZWUvCgpmb3IgZWFybGllciBjaGFuZ2VzLgoKCkNvcHlyaWdodCAoQykgMTk5MS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTWFrZS4KCkdOVSBNYWtlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCnRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKdmVyc2lvbi4KCkdOVSBNYWtlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQpXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K