VHVlIEFwciAgNiAxNzo0OTo0OSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGNvbmZpZy9hcm0vbGliMWZ1bmNzLmFzbTogVGVzdCBmb3IgX19FTEZfXyBub3QgX19lbGZfXy4KCldlZCBBcHIgIDcgMTQ6MDc6MzQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogQWx3YXlzIGVuc3VyZSBhdCBsZWFzdCB0d28gaW5zbnMKCWFyZSBpbiB0aGUgY29waWVkIGxvb3AuCgpXZWQgQXByICA3IDE0OjUyOjE4IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKICAgICAgICAqIGNvbmZpZy9taXBzL2VsZi5oIChNQUtFX0RFQ0xfT05FX09OTFkpOiBEZWZpbmUuCiAgICAgICAgKFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUuCgoxOTk5LTA0LTA3IDExOjUwIC0wODAwICBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL2luY2xoYWNrLnRwbCAmIGZpeGluY2wudHBsOgoJUmVtb3ZlIGR5bmFtaWMgY29udGVudCBmcm9tIGdlbmVyYXRlZCBmaWxlcwoKV2VkIEFwciAgNyAxMzoxNjoyMiBFRFQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChvdXRwdXRfbW92ZV9tZW1vcnkpOiBSZW1vdmUuCgkqIGkzODYuaDogTGlrZXdpc2UuCgoJKiBpMzg2Lm1kIChtb3ZzaSwgbW92aGksIG1vdnN0cmljdGhpLCBtb3ZxaSwgbW92c3RyaWN0cWksCgltb3ZzZiwgbW92ZGYsIG1vdnhmLCBtb3ZkaSk6IENoZWNrIG5vX25ld19wc2V1ZG9zIGluc3RlYWQKCW9mIChyZWxvYWRfaW5fcHJvZ3Jlc3MgfCByZWxvYWRfY29tcGxldGVkKS4KCldlZCBBcHIgIDcgMDM6MTY6NDUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKHJlZ19ub19zdWJyZWdfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGl0LgoJKiBhbHBoYS5tZCAoZmxvYXRkaT9mIHBhdHRlcm5zKTogVXNlIGl0IGZvciBvcDEuCgoJKiBhbHBoYS5jIChhbHBoYV9lbmRfZnVuY3Rpb24pOiBEb24ndCBmbGFnIHdlYWsgZnVuY3Rpb25zLgoKV2VkIEFwciAgNyAwMjoxMTo1NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfYnVpbHRpbikgW0JVSUxUX0lOX1JFVFVSTl9BRERSRVNTXTogVXNlCgljb3B5X3RvX21vZGVfcmVnOyBkb24ndCBmb3JjZSBjb25zdGFudHMgaW50byBhIHJlZ2lzdGVyLgoKVHVlIEFwciAgNiAyMjo1NToyNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFR5cG8gZmxvd19kdW1wIC0+IGZsb3cyX2R1bXAuCgoxOTk5LTA0LTA2ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBwZHAxMS5jIChzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBBZGQgZGVmYXVsdCBjYXNlIGluIHN3aXRjaC4KCSogcGRwMTEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGhlbHAgc3RyaW5ncy4KCShOT1RJQ0VfVVBEQVRFX0NDKTogRG9uJ3QgaW5jbHVkZSBleGNlc3MgYXJndW1lbnQgdG8gZm9ybWF0LgoJKEFTTV9PVVRQVVRfRE9VQkxFX0lOVCk6IFJlbW92ZS4KClR1ZSBBcHIgIDYgMjI6MDk6NDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW5fc2V0am1wKTogUHV0IHNldGptcCByZXR1cm4gbGFiZWwgb24KCW5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgZm9yIGZsb3cuCgpUdWUgQXByICA2IDIyOjA1OjIxIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBwYXJ1LmNhcy5jej4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jICh2ZXJpZnlfZmxvd19pbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogQ2FsbCBpdCBpZiBFTkFCTEVfQ0hFQ0tJTkcuCgkobWVyZ2VfYmxvY2tzKTogRG9uJ3QgbWVyZ2UgaWYgdGhlcmUgYXJlIG5vbi1kZWxldGFibGUgbGFiZWxzLgoJKiB0b3BsZXYuYyAoZmF0YWxfaW5zbik6IEFsbG93IGEgcHJpbnRmLXN0eWxlIGFyZyBsaXN0LgoJKiB0b3BsZXYuaCAoZmF0YWxfaW5zbik6IFVwZGF0ZSBwcm90b3R5cGUuCgpUdWUgQXByICA2IDE2OjE4OjU4IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBwYXJ1LmNhcy5jej4KCgkqIGZsb3cuYyAoc3BsaXRfZWRnZSkgdXBkYXRlIGNvcnJlY3RseSBmbG93IGdyYXBoLCBkaXNhYmxlCglFREdFX0NSSVRJQ0FMIGZsYWcgb24gdGhlIHNwbGl0IGVkZ2UsIHVwZGF0ZSBOVVNFUyBmb3IgbmV3IGxhYmVsLgoKVHVlIEFwciAgNiAxNTo0Nzo1MSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBVc2UgWFdJTlQgbm90IFhJTlQuCglDbGVhciB0aGlyZCBhbmQgZm9sbG93aW5nIHNsb3RzLCBpZiB0aGV5IGV4aXN0LgoKVHVlIEFwciAgNiAxNTo0NToyOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChjcmVhdGVfYmFzaWNfYmxvY2spOiBNYWtlIHN1cmUgdGhlIGJiIG5vdGUgaXMgaW4gdGhlIGJsb2NrLgoJKGNhbl9kZWxldGVfbm90ZV9wKTogUmVuYW1lIGZyb20gZGVsZXRlX25vdGVfcC4KCShkZWxldGVfaW5zbl9jaGFpbik6IFByZXNlcnZlIHVuZGVsZXRlYWJsZSBsYWJlbHMgdG9vLgoJKHRpZHlfZmFsbHRocnVfZWRnZSk6IFVzZSBuZXh0X3JlYWxfaW5zbiBpbnN0ZWFkIG9mIGNvbmZ1c2luZwoJaW5saW5lIGNvZGUuCgoxOTk5LTA0LTA2IDEyOjU2IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jIChwYXJzZV9jaGFyY29uc3QpOiBJbml0aWFsaXplIGMuCgkoY3BwX3BhcnNlX2V4cHIpOiBJbml0aWFsaXplIHJwcmlvLgoJKiBjcHBmaWxlcy5jIChtZXJnZV9pbmNsdWRlX2NoYWlucyk6IEluaXRpYWxpemUgcHJldi4KCShmaW5jbHVkZSkgU2V0IGZwLT5saW5lX2Jhc2UgdG8gZnAtPmJ1ZiBiZWZvcmUgcmV0dXJuaW5nLgoJKiBjcHBoYXNoLmMgKG1hY3JvZXhwYW5kKTogSW5pdGlhbGl6ZSB0b2tlbi4KCSogY3Bwc3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IENoYW5nZSBzdWZmIHRvIAoJY29uc3QgY2hhciAqY29uc3QgKi4KCjE5OTktMDQtMDYgMTI6NTEgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwaW5pdC5jIChpbnN0YWxsX3ByZWRlZnMpOiBEZWxldGUgZnVuY3Rpb24uCgkoY3BwX3N0YXJ0X3JlYWQpOiBEb24ndCBjYWxsIGluc3RhbGxfcHJlZGVmcy4KCShjcHBfaGFuZGxlX29wdGlvbik6IFJlbW92ZSBjYXNlICd1JyBhbmQgYWxsIHJlZnMgdG8KCW9wdHMtPmluaGliaXRfcHJlZGVmcy4KCShwcmludF9oZWxwKTogRG9uJ3QgbWVudGlvbiAtdW5kZWYuCgkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IERlZmluZSBfX0hBVkVfQlVJTFRJTl9TRVRKTVBfXywgdG8KCW1hdGNoIGNjY3AuCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX29wdGlvbnMpOiBSZW1vdmUgaW5oaWJpdF9wcmVkZWZzCgltZW1iZXIuCgoJKiBjY2NwLmMgKHByZWRlZnMpOiBEZWxldGUgdmFyaWFibGUuCgkobWFpbik6IFJlbW92ZSBjYXNlICd1JyBpbiBhcmd1bWVudCBwYXJzZSBsb29wLAoJJ2luaGliaXRfcHJlZGVmcycgdmFyaWFibGUsIGFuZCB0aGUgY29kZSBibG9jayB0aGF0IHdvdWxkCglwcm9jZXNzIENQUF9QUkVERUZJTkVTLgoJKGluaXRpYWxpemVfYnVpbHRpbnMpOiBEb24ndCBkZWZpbmUgX19PQkpDX18sIHRoZSBkcml2ZXIgd2lsbAoJZG8gdGhhdC4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFJlbW92ZSAtdW5kZWYgZnJvbSBhbGwgc3BlY3MgdGhhdAoJaW52b2tlIGEgQyBwcmVwcm9jZXNzb3IuCgkqIGNoL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgkqIGNwL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgkqIGYvbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKTW9uIEFwciAgNSAxMTo1NTozMSAxOTk5ICBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKQoKCSogTWFrZWZpbGUuaW4gKFNVQkRJUl9GTEFHU19UT19QQVNTKTogRml4IG1pc2FwcGxpZWQgcGF0Y2guCgpNb24gQXByICA1IDExOjUxOjM4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsubWQgKG1vdmRmKTogSGlkZSBHUFIgc291cmNlcyAmIGRlc3RpbmF0aW9ucyBmcm9tIHJlZ2NsYXNzLgoKTW9uIEFwciA1IDA5OjU0OjQyIFBEVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIEFwciA1IDA1OjU1OjE1IFBEVCAxOTk5IEJydWNlIEtvcmIgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmNsLnRwbDogU2VwYXJhdGUgIi1lIiBmcm9tIGl0cyBhcmd1bWVudCwgYSBsYQoJdGhlIFNhdCBBcHIgIDMgMTc6MDU6MTMgMTk5OSBmaXguCgkqIGdlbmZpeGVzOiBFbnN1cmUgdGhhdCB0aGUgc2VydmVyIHNoZWxsIGlzIF9OT1RfIGNzaC4KCk1vbiBBcHIgNSAwMzo1MjozMCBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBBcHIgIDUgMDQ6NDc6MTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5jICh4ODZfZG91YmxlX3dpdGhfYWRkKTogVHVybiBvZmYgZm9yIFBlbnRpdW0gYW5kIFBQcm8uCgkoc21hbGxfc2hpZnRfb3BlcmFuZCwgb3V0cHV0X2FzaGxzaTMpOiBOZXcgZnVuY3Rpb25zLgoJKiBpMzg2LmggKHNtYWxsX3NoaWZ0X29wZXJhbmQsIG91dHB1dF9hc2hsc2kzKTogRGVjbGFyZS4KCSogaTM4Ni5tZCAoYXNobHNpMyk6IFNpbXBsaWZ5IGFobHNpMyBwYXR0ZXJucy4gIFJlbW92ZSBzcGxpdHRlcnMKCXRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQuCgpTdW4gQXByICA0IDA0OjA1OjA0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN0bXQuYyAoZXhwYW5kX2xvb3BfZW5kKTogV2hlbiBjb3B5aW5nIHRoZSBsb29wIGV4aXQgdGVzdCwKCWRvIG5vdCB3YWxrIGludG8gYSBuZXN0ZWQgbG9vcC4KClN1biBBcHIgIDQgMDA6MTQ6NTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL2hhY2tzaGVsbC50cGw6IFNraXAgbGlua3MgdG8gZGlyZWN0b3JpZXMsIHRvIGF2b2lkCglyZW1vdmluZyB0aGVtLgoJKiBmaXhpbmMvaW5jbGhhY2sudHBsOiBMaWtld2lzZS4KCSogZml4aW5jL2ZpeGluYy5zaCwgZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoOiBSZWJ1aWx0LgoKU2F0IEFwciAgMyAyMzo0NjoxMyAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgkKCSogcnM2MDAwLm1kIChhZGRzaTMsIGlvcnNpMywgeG9yc2kzLCBhZGRkaTMsIGlvcmRpMywgeG9yZGkzLAoJbW92c2lfZ290LCBtb3ZzaSwgbW92c2YpOiBVc2Ugbm9fbmV3X3BzZXVkb3MuCgkqIHJzNjAwMC5jIChyczYwMDBfZ290X3JlZ2lzdGVyKTogTGlrZXdpc2UuCgkob2Zmc2V0dGFibGVfbWVtX29wZXJlYW5kKTogVXNlIHx8IG5vdCB8LgoKU2F0IEFwciAgMyAyMjowMjo1NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhY2NvbmZpZy5oIChFTkFCTEVfQ0hFQ0tJTkcpOiBSZW1vdmUgcmVkdW5kYW50ICN1bmRlZi4KCSogY29uZmlnLmluOiBSZWJ1aWx0LgoKU2F0IEFwciAgMyAxNjoyMjo1OSAxOTk5ICBUb3NoaXlhc3UgTW9yaXRhICAodG1AbmV0Y29tLmNvbSkKCgkqIGdjYy50ZXhpOiBBZGQgaW5mbyBvbiByZWdtb3ZlIHBhc3MKCgkqIHJlZ21vdmUuYyAoZml4dXBfbWF0Y2hfMSk6IENvbnNpc3RlbnRseSBldmFsdWF0ZQoJSEFWRV9QT1NUX0lOQ1JFTUVOVCBhbmQgSEFWRV9QT1NUX0RFQ1JFTUVOVC4KClNhdCBBcHIgIDMgMTk6MjE6MDUgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjb25maWd1cmUuaW4gKERFRkFVTFRfTElOS0VSLCBERUZBVUxUX0FTU0VNQkxFUik6IFVzZSBncmVwCglpbnN0ZWFkIG9mIHRlc3QgYW5kIHNlZCB0byBjaGVjayB3aGV0aGVyIHRoZXkncmUgR05VIHByb2dyYW1zLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTYXQgQXByICAzIDE3OjU3OjM1IDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtaGVhZGVycy10YXIsIGluc3RhbGwtaGVhZGVycy1jcGlvKTogYXZvaWQKCXByb2JsZW1zIHdpdGggQ0RQQVRICglSZXBvcnRlZCBieSBSYWxmIENhbmlzIDxjYW5pc0BiaWdmb290LmNvbT4KClNhdCBBcHIgIDMgMTM6NTA6MTYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jLng4Ni1saW51eC1nbnU6IERlbGV0ZWQuCgpTYXQgQXByICAzIDE3OjA1OjEzIDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogaW5jbGhhY2sudHBsOiBpbnNlcnQgc3BhY2VzIGJldHdlZW4gYHNlZCAtZScgYW5kICcuLi4nCglSZXBvcnRlZCBieSBLYXZlaCBSLiBHaGF6aSA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCSogZml4aW5jL2ZpeGluY2wuc2gsIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogcmVnZW4gCgkKU2F0IEFwciAgMyAxNDo1NDo0NiAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogdHJlZS5kZWYgKEJMT0NLKTogRml4IHR5cG8gaW4gY29tbWVudC4KClNhdCBBcHIgIDMgMDA6NTM6MjkgRVNUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGkzODYubWQgKGZsb2F0c2lzZjIsIGZsb2F0ZGlzZjIsIGZsb2F0c2lkZjIsIGZsb2F0ZGlkZjIsCglmbG9hdHNpeGYyLCBmbG9hdGRpeGYyKTogUmV3cml0ZSB1c2luZyBhIHNwbGl0dGVyLgoKRnJpIEFwciAgMiAxNzozNjoxMCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYyAoYXJtX3ByaW50X29wZXJhbmQpOiBQcmludCBsYXJnZSBjb25zdGFudHMgaW4KCWhleCByYXRoZXIgdGhhbiBkZWNpbWFsLgoKRnJpIEFwciAgMiAxNzoyMzo1OCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IFVzZSBib3RoIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDCglhbmQgSE9TVF9XSURFX0lOVF9QUklOVF9IRVggdG8gZGlzcGxheSBjb25zdGFudHMuCgoxOTk5LTA0LTAyIDIwOjE2IC0wNTAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNvbmZpZy9pMzg2L2kzODYuaDogRG9jdW1lbnQgYWxsIFRBUkdFVF9TV0lUQ0hFUyBvciBhZGQKCWV4cGxpY2l0IG51bGwgaW5pdGlhbGl6ZXIuCgoJKiBjb25maWcvaTM4Ni9jeWd3aW4uaDogRG9jdW1lbnQgYWxsIFNVQlRBUkdFVF9TV0lUQ0hFUy4KCSogY29uZmlnL2kzODYvZGd1eC5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvb3NmMWVsZi5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvd2luMzIuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L29zZnJvc2UuaDogTGlrZXdpc2UuICBEcm9wIG9ic29sZXRlIC1tbm8taWRlbnQgb3B0aW9uLgoKRnJpIEFwciAgMiAxNzo0OTo0NCAxOTk5ICBUb3NoaXlhc3UgTW9yaXRhIDx0bUBuZXRjb20uY29tPgoKCSogcmVnbW92ZS5jIChmaXh1cF9tYXRjaF8xKTogUmVtb3ZlIG5vdyB1c2VsZXNzIGlmICgwKS4KClNhdCBBcHIgIDMgMTE6Mzc6MjAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogdG0udGV4aSAoVVNFX0xPQURfUE9TVF9ERUNSRU1FTlQsIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRG9jdW1lbnQuCgkoVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKTogRml4IGRvY3VtZW50YXRpb24uCgoJKiBydGwuaAkoVVNFX0xPQURfUE9TVF9ERUNSRU1FTlQsIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5ULAoJVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKTogUHJvdmlkZSBkZWZhdWx0CglkZWZpbml0aW9uLgoKCSogZXhwci5jOiAoVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKTogRGVsZXRlIGRlZmF1bHQKCWRlZmluaXRpb24uCgpGcmkgQXByICAyIDE2OjAzOjA1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy5kZ3V4LCBmaXhpbmMuaW50ZXJpeCwgZml4aW5jLmlyaXgsIGZpeGluYy5wdHg6IERlbGV0ZWQuCgkqIGZpeGluYy5zY28sIGZpeGluYy5zdnI0LCBmaXhpbmMud2lubnQsIGZpeGluYy53cmFwOiBMaWtld2lzZS4KCkZyaSBBcHIgIDIgMTU6NDY6MjUgMTk5OSAgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSkKCiAgICAgICAgKiBjb25maWd1cmUuaW46IFNldCBhbmQgc3Vic3RpdHV0ZSBxdW90ZWRfY2Nfc2V0X2J5X2NvbmZpZ3VyZS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBNYWtlZmlsZS5pbiAoU1VCRElSX0ZMQUdTX1RPX1BBU1MpOiBGaXggcXVvdGluZyBwcm9ibGVtIHdpdGggYGAuCgpGcmkgQXByICAyIDE0OjM1OjQ1IDE5OTkgIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogY29uZmlnL2kzODYvY3lnd2luLmggKENQUF9TUEVDKTogVXNlIG1pbmd3X2luY2x1ZGVfcGF0aCBpbnN0ZWFkCglvZiBhIGhhcmRjb2RlZCBwYXRoIGZvciAtbW5vLWN5Z3dpbi4KCShtaW5nd19pbmNsdWRlX3BhdGgpOiBOZXcuCgoxOTk5LTA0LTAyICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBwZHAxMS5jOiBJbmNsdWRlICJyZWNvZy5oIi4KCShvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBgbnJlZ3MnLCBgaScsCglgb2Zmc2V0Jy4KCShvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYG1heV9jYWxsX2FsbG9jYScsIGBucmVncycsIGByZWdubycsIGBhZGp1c3RfZnAnLgoJKG91dHB1dF9hc2NpaSk6IE1hcmsgYXMgcmV0dXJuaW5nIHZvaWQuCgkocHJpbnRfb3BlcmFuZF9hZGRyZXNzOiBMaWtld2lzZS4KCShzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBgcGx1czAnLCBgcGx1czEnLAoJYG9mZnNldCcuCgkqIHBkcDExLmg6IERlY2xhcmUgZnVuY3Rpb25zIGBhcml0aF9vcGVyYW5kJywKCWBjb25zdF9pbW1lZGlhdGVfb3BlcmFuZCcsIGBleHBhbmRfc2hpZnRfb3BlcmFuZCcsCglgbGVnaXRpbWF0ZV9hZGRyZXNzX3AnLCBgbm90aWNlX3VwZGF0ZV9jY19vbl9zZXQnLCBgb3V0cHV0X2FzY2lpJywKCWBvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUnLCBgb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlJywKCWBwcmludF9vcGVyYW5kX2FkZHJlc3MnLCBgcmVnaXN0ZXJfbW92ZV9jb3N0JywKCWBzaW1wbGVfbWVtb3J5X29wZXJhbmQnLgoJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IFBhcmVudGhlc2lzZSBgUkVHTk8nIGFyZy4KCShSRUdOT19SRUdfQ0xBU1MpOiBMaWtld2lzZS4KCSogcGRwMTEubWQ6IEFkZCBleHBsaWNpdCBgaW50JyB0byBgc3RhdGljIGNvdW50JyAoaW4gdHdvIHBsYWNlcykuCgkoYWRkaGkzKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgZWxzZS4KCShhZGRxaTMpOiBMaWtld2lzZS4KCShhc2hsaGkzKTogTGlrZXdpc2UuCgpGcmkgQXByICAyIDE0OjE3OjEwIDE5OTkgIEplcnJ5IEphbWVzIDxqZXJyeUBjcy51Y3NiLmVkdT4KCgkqIGdjYy9pbnZva2UudGV4aTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgc3VwcG9ydGVkCglNSVBTIENQVSB0eXBlcywgb3B0aW9ucyAtbWlwczE2IGFuZCAtbWVudHJ5LCBhbmQgQUJJIGFuZCBJU0EKCWRlZmF1bHRzLgoKRnJpIEFwciAgMiAxNDoxMjowNiBFU1QgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZDogRGVsZXRlIGZsb2F0aW5nIHBvaW50IGNvbXBhcmUsIGFkZCwgc3VidHJhY3QsCgltdWx0aXBseSwgYW5kIGRpdmlkZSBwYXR0ZXJucyB3aGljaCBhbGxvd2VkIGludGVnZXIKCW9wZXJhbmRzLgoJKiBpMzg2LmMgKG91dHB1dF8zODZfYmluYXJ5X29wKTogRGVsZXRlIHVudXNlZCBjb2RlLgoJKG91dHB1dF9mbG9hdF9jb21wYXJlKTogTGlrZXdpc2UuCgpGcmkgQXByICAyIDExOjUzOjM3IDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGkzODYubWQgKG1vdnNmKzEsIG1vdmRmKzEsIG1vdnhmKzEpOiBVcGRhdGUgY29uc3RyYWludHMKCXNvIHRoYXQgU0VDT05EQVJZX01FTU9SWV9SRUxPQUQgaXMgdXNlZC4gIFJlbW92ZSBkZWFkIGNvZGUuCgoxOTk5LTA0LTAyICBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL21rZml4aW5jLnNoOiAgYWRkZWQgc3VwcG9ydCBmb3IgeDg2LWludGVyaXgKCSogZml4aW5jL2ZpeGluYy5pbnRlcml4OiAgZml4aW5jbHVkZXMgc2NyaXB0LCBzbGlnaHQgY2hhZ2VzCglmcm9tIC4vZml4aW5jLmludGVyaXguICBVbnRlc3RlZCAobmVlZHMgaW50ZXJpeCBib3gpLgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmOgoJQ29tcGxldGUgdGhlIGNoYW5nZSB0byB0aGUgJ2ZpeGluYy50bXAnIGZpbGUKCUZpeGVkIHJlZ2V4IGZvciBmaW5kaW5nIEMrKyBoZWFkZXJzCgkqIGZpeGluY2wueCwgZml4aW5jbC5zaCwgaW5jbGhhY2suc2g6IHJlZ2VuZXJhdGUKCkZyaSBBcHIgIDIgMTE6MzY6MTIgMTk5OSAgSmFuIEh1Ymlja2EgIChodWJpY2thQHBhcnUuY2FzLmN6KQoKCSogaTM4Ni5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MsIGNhc2UgUkVHKTogRG8gbm90IHVzZSBFU0kgYWRkcmVzc2luZwoJbW9kZSBmb3IgdGhlIEs2LgoKCSogaTM4Ni5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MsIGNhc2UgTVVMVCk6IFVzZSBtb3JlIGVmZmljaWVudAoJZW5jb2RpbmcgKG11bHQgKHJlZykgKGNvbnN0X2ludCAyKSkuCgpUaHUgQXByICAxIDE3OjAxOjUwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJTW92ZSBvdmVyIHBhdGNoIGZyb20gQmVybmQgU2NobWlkdCBmcm9tIEdDIGJyYW5jaDoKCSogZW1pdC1ydGwuYyAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBOZXcgZnVuY3Rpb24uCgkoZ2VuX3J0eCk6IENhbGwgaXQuICBUaWR5IGNhc2VzLgoJKiBydGwuaCAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBQcm90b3R5cGUgaXQuCgkqIGdlbmdlbnJ0bC5jOiBBZGQgY29tbWVudGFyeS4KCShzcGVjaWFsX3J0eCk6IEFsc28gbWF0Y2ggQ09OU1RfRE9VQkxFLgoJKGdlbmNvZGUpOiBFbWl0IGNhbGwgdG8gbWVtc2V0IGluc3RlYWQgb2YgYnplcm8uCgpGcmkgQXByICAyIDEyOjU4OjI2IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChhc2hsaGkzLCBsc2hyaGkzLCBhc2hyaGkzKTogRm9yY2Ugb3BlcmFuZCAxCglpbnRvIGEgcmVnaXN0ZXIgaWYgc2hpZnQgY291bnQgbm90IGNvbnN0YW50LgoJKGFzaGxoaTNfcmVnLCBsc2hyaGkzX3JlZywgYXNocmhpM19yZWcpOiBFbnN1cmUgdGhhdCBvcGVyYW5kIDEKCWlzIGEgcmVnaXN0ZXIuCgpGcmkgQXByICAyIDEyOjE5OjE3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqZGIpOiBFbmFibGUgcGF0dGVybiBpZiBUQVJHRVRfTE9PUF9VTlNJR05FRAoJaXMgbm9uLXplcm8uCgkobW92c3RycWlfc21hbGwsIG1vdnN0cnFpX2xhcmdlLCAqY21wc3RycWkpOiBBZGQgKyBtb2RpZmllciB0byBhZGRyZXNzCiAJcmVnaXN0ZXIgY29uc3RyYWludHMuCgkoKm1vdmhpX2Nsb2JiZXIrMSk6IE1vZGlmeSBzcGxpdHRlciBwYXR0ZXJuIHRvIGhhbmRsZSBkZXN0aW5hdGlvbgoJcmVnaXN0ZXIgdGhhdCBpcyB1c2VkIGluIHRoZSBzb3VyY2UgYWRkcmVzcy4KCSgqeG9yaGkzX2Nsb2JiZXIpOiBSZXBsYWNlIEFORCB3aXRoIFhPUiBpbiBjYWxsIHRvIGxlZ2l0aW1pemVfb3BlcmFuZHMuCgpGcmkgQXByICAyIDEyOjE2OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lmg6IEFkZGVkIG1vcmUgY29tbWVudHMuCgpGcmkgQXByICAyIDExOjU4OjIyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9lbWl0X21vdmVfc2VxdWVuY2UpOiBGb3JjZSBpbnZhbGlkIFFJbW9kZQoJY29uc3RhbnRzIGludG8gbWVtb3J5IGlmIHdlIGdldCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBnZW5fbW92ZV9pbnNuCglyYXRoZXIgdGhhbiBlbWl0X21vdmVfaW5zbi4KCShjNHhfbGVnaXRpbWl6ZV9hZGRyZXNzKTogRml4IHVwIExBQkVMX1JFRiBhZGRyZXNzZXMuCgpUaHUgQXByICAxIDEyOjA0OjA1IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBXaGVuIGNoZWNrIGRpcmVjdF9zdG9yZSwgYXNzdW1lIGFsbCBjb21wbGV4Cgltb2RlcyBjYW4gYmUgZGlyZWN0bHkgc3RvcmVkLgoKMTk5OS0wNC0wMSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9nZW5maXhlczogIG5ldyBzaGVsbCBzY3JpcHQgdGhhdCBydW5zIGF1dG9nZW4KCXRvIGNyZWF0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgoKMTk5OS0wNC0wMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKGNwcG1haW4kKGV4ZWV4dCkpOiBEZXBlbmQgb24gaW50bC5vLiAgTGluayBpbiBpbnRsLm8uCgpUaHUgQXByICAxIDAzOjQ4OjM0IDE5OTkgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGkzODYuYyAob3V0cHV0X2ZwX2NvbmRpdGlvbmFsX21vdmUpOiBBYm9ydCBmb3IgTFQsIExFLCBHRSwgYW5kIEdUCglzaWduZWQgaW50ZWdlciBjb21wYXJpc29ucy4KCgkqIGkzODYuYyAob3V0cHV0X2ludF9jb25kaXRpb25hbF9tb3ZlKTogVXNlICJlbnVtIHJ0eF9jb2RlIiBmb3IgY29kZQoJdHlwZS4KCgkqIGkzODYuYyAobm90aWNlX3VwZGF0ZV9jYyk6IE5vIG5lZWQgdG8gY2hlY2sgdGhlIElOVCBtb2RlIGZvcgoJY29uZGl0aW9uYWwgbW92ZXMgc2luY2UgRkxPQVQgY29uZGl0aW9uYWwgbW92ZXMgZG9uJ3QgYWZmZWN0IGNjMC4KClRodSBBcHIgIDEgMDI6MTc6MTggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoenp6X2tpX3N5c2NhbGxzLCB6enpfdGltZSk6IEZpeCB0cmlnZ2VyCglzdHJpbmcgdG8gb25seSBtYXRjaCBvbiBocHV4MTEuCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluYy5zaDogUmVidWlsdC4KClRodSBBcHIgIDEgMDE6MDk6MjcgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogQ29tcGxldGUgdHJhbnNpdGlvbiB0byBmaXhpbmMudG1wLgoJKiBmaXhpbmMvaW5jbGhhY2suc2g6IFJlYnVpbHQuCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmOiBGaXggdHlwb3MgaW4gY19hc20uaCBmaXguCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluYy5zaDogUmVidWlsdC4KCldlZCBNYXIgMzEgMTc6MjA6MTEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBBbGxvdyBkYnJfc2NoZWR1bGUgdG8gd3JpdGUgdG8KCXRoZSBkdW1wIGZpbGUgdG9vLgoKV2VkIE1hciAzMSAxMjozMjo0MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IE5ldyBhcmd1bWVudCBgZG9fY2xlYW51cCcuCglDb25kaXRpb25hbGx5IGNhbGwgZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcy4KCShmcmVlX2Jhc2ljX2Jsb2NrX3ZhcnMpOiBaZXJvIEVOVFJZL0VYSVQgZGF0YS4KCShhbGxvY2F0ZV9mb3JfbGlmZV9hbmFseXNpcyk6IEtpbGwuICBTcGxpdCBpbnRvLi4uCgkoYWxsb2NhdGVfYmJfbGlmZV9kYXRhLCBhbGxvY2F0ZV9yZWdfbGlmZV9kYXRhKTogLi4uIG5ldyBmdW5jdGlvbnMuCgkobGlmZV9hbmFseXNpc18xKTogVXBkYXRlLgoJKiBnY3NlLmMgKGdjc2VfbWFpbik6IFVwZGF0ZSBmaW5kX2Jhc2ljX2Jsb2NrcyBjYWxsLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IExpa2V3aXNlLgoJKiBzdHVwaWQuYyAoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBVcGRhdGUgbGlmZSBkYXRhIGNhbGxzLgoJKiBydGwuaCwgb3V0cHV0Lmg6IFVwZGF0ZSBwcm90b3R5cGVzLgoKV2VkIE1hciAzMSAxMjoxMDowMCAxOTk5ICBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogaW5jbGhhY2suZGVmIChzZXZlcmFsKTogYWRkZWQgc3BhY2VzIGluIHRlc3RzIHRvIGVuc3VyZQoJY29ycmVjdCBzaGVsbCBzeW50YXguICBBZGRlZCBjX2FzbS5oIGZpeCBmcm9tIGZpeGluY2x1ZGVzLgoJQWxzbyBjb3JyZWN0ZWQgdGhlIGNvcnJlY3RlZCBmaXggdG8gQysrIGNvbW1lbnRzIDotfQoKCSogaW5jbGhhY2sudHBsOiBjaGFuZ2VkIG1ldGhvZCBvZiB0cmF2ZXJzaW5nIHN5bWxpbmsgdHJlZXMKCXNvIHRoYXQgZmlsZSBuYW1lIG1hdGNoaW5nIHdpbGwgd29yayBjb3JyZWN0bHkuCgoJKiBmaXhpbmNsLmMsIGhhY2tzaGVsbC50cGw6ICBmYWxsb3V0IGZyb20gYWJvdmUKCSogZml4aW5jbC54LCBpbmNsaGFjay5zaCwgZml4aW5jbC5zaDogUmVidWlsdC4KClR1ZSBNYXIgMzAgMTA6NDM6NDkgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJKiBjb25maWcvYXJtL2FvdXQuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogQXZvaWQgcmVkZWZpbml0aW9uIGlmCglkYnhlbGYuaCB3YXMgcHJldmlvdXNseSBpbmNsdWRlZC4KCShDUFBfQVBDU19QQ19ERUZBVUxUX1NQRUMpOiBObyBuZWVkIHRvIHVuZGVmaW5lLgoJCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmLmggKEZQX0RFRkFVTFQpOiBDb3JyZWN0bHkgb3ZlcnJpZGUgdGhlCglkZWZpbml0aW9uIGZyb20gYXJtLmguCgpXZWQgTWFyIDMxIDEwOjMzOjM3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCiAgICAgICAgKiBNYWtlZmlsZS5pbiAoYy1ncGVyZi5oKTogR2VuZXJhdGUgdXNpbmcgZ3BlcmYgbGFuZ3VhZ2UgJ0MnLCBub3QKICAgICAgICAnS1ItQycsIHNvIGdwZXJmIHVzZXMgdGhlIGBjb25zdCcga2V5d29yZCBvbiBzdHJpbmdzLgoJIAogICAgICAgICogYy1wYXJzZS5ncGVyZiAocmVzd29yZCk6IENvbnN0LWlmeSBhIGNoYXIqLgoKV2VkIE1hciAzMSAwMTo0OTozMSAxOTk5ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHplbWJ1LmNvbT4KCgkqIHQtcnRlbXMgKExJTUlUU19IX1RFU1QsIExJQkdDQzJfSU5DTFVERVMpOiBEZWZpbmUuCgpXZWQgTWFyIDMxIDAwOjUwOjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN5c3RlbS5oIChTVERFUlJfRklMRU5PKTogRml4IHR5cG8uCgoJKiBpbmNsaGFjay5kZWYgKGJvb2wpOiBBbHNvIGZpeCBib2d1cyBib29sIGluIGN1cnNlc19jb2xyL2N1cnNlcy5oCgkqIGZpeGluY2wueCwgaW5jbGhhY2suc2gsIGZpeGluY2wuc2g6IFJlYnVpbHQuCgpUdWUgTWFyIDMwIDIwOjUxOjQwIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBhbGlhcy5jIChhbGlhc19zZXRfY29tcGFyZSk6IFJlbW92ZS4KCShyZWNvcmRfYWxpYXNfc3Vic2V0KTogVXNlIHNwbGF5X3RyZWVfY29tcGFyZV9pbnRzIGluc3RhZWQgb2YKCWFsaWFzX3NldF9jb21wYXJlLgoJKGluaXRfYWxpYXNfb25jZSk6IExpa2V3aXNlLgoJKiBjc2UuYzogSW5jbHVkZSBzcGxheS10cmVlLmguCgkocmVnX3F0eSk6IFJlbW92ZS4KCShyZWdfdGljayk6IExpa2V3aXNlLgoJKHJlZ190YWJsZSk6IExpa2V3aXNlLgoJKGNzZV9yZWdfaW5mbyk6IE5ldyBzdHJ1Y3R1cmUuCgkoY3NlX3JlZ19pbmZvX2ZyZWVfbGlzdCk6IE5ldyB2YXJpYWJsZS4KCShjc2VfcmVnX2luZm9fdHJlZSk6IExpa2V3aXNlLgoJKGNhY2hlZF9yZWdubyk6IExpa2V3aXNlLgoJKGNhY2hlZF9jc2VfcmVnX2luZm8pOiBMaWtld2lzZS4KCShhbGxfbWludXNfb25lKTogUmVtb3ZlLgoJKGNvbnNlY19pbnRzKTogTGlrZXdpc2UuCgkoR0VUX0NTRV9SRUdfSU5GTyk6IE5ldyBtYWNyby4KCShSRUdfVElDSyk6IExpa2V3aXNlLiAgVXNlIHRocm91Z2hvdXQgaW5zdGVhZCBvZiByZWdfdGljay4KCShSRUdfSU5fVEFCTEUpOiBMaWtld2lzZS4gIFVzZSB0aHJvdWdob3V0IGluc3RlYWQgb2YgcmVnX2luX3RhYmxlLgoJKFJFR19RVFkpOiBMaWtld2lzZS4gIFVzZSB0aHJvdWdob3V0IGluc3RlYWQgb2YgcmVnX3F0eS4KCShnZXRfY3NlX3JlZ19pbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGZyZWVfY3NlX3JlZ19pbmZvKTogTGlrZXdpc2UuCgkobmV3X2Jhc2ljX2Jsb2NrKTogUmVpbml0aWFsaXplIGNzZV9yZWdfaW5mb190cmVlIGluc3RlYWQgb2YKCXJlZ190aWNrLCBhbGxfbWludXNfb25lLCBhbmQgY29uc2VjX2ludHMuCgkqIE1ha2VmaWxlLmluIChjc2Uubyk6IERlcGVuZCBvbiBzcGxheS10cmVlLmgKClR1ZSBNYXIgMzAgMTM6MTk6MzYgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGliZ2NjMi5jICh0aHJvd19oZWxwZXIpOiBKdXN0IHJldHVybiB0aGUgU1Agb2Zmc2V0LCByYXRoZXIgdGhhbgoJYSB3aG9sZSB1ZGF0YS4gIEluY2x1ZGUgYXJnc19zaXplIGluIHRoZSBvZmZzZXQuCgkoX190aHJvdywgX19yZXRocm93KTogQWRqdXN0LgoKVHVlIE1hciAzMCAxMTozOToyNyAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogZXh0ZW5kLnRleGkgKEV4dGVuZGVkIEFzbSk6IERlbGV0ZSBzcHVyaW91cyBgYicgYmVmb3JlCglgQGVuZCBleGFtcGxlJywgd2hpY2ggd2FzIGNvbmZ1c2luZyB0ZXhpMmh0bWwuCgpUdWUgTWFyIDMwIDAwOjI2OjM0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfbGluZV9pbmZvKTogRG9uJ3QgZW1pdCByZWR1bmRhbnQgaW5mby4KCURvIHN0YXJ0IGEgbmV3IHJvdyBpZiB0aGUgZmlsZSBjaGFuZ2VzIGFuZCB0aGUgbGluZSAjIGRvZXNuJ3QuCgpNb24gTWFyIDI5IDE1OjQ4OjM5IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpIChJbnZva2luZyBHKyssIEMrKyBEaWFsZWN0IE9wdGlvbnMpOiBVcGRhdGUuCgpNb24gTWFyIDI5IDE1OjA1OjM5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoc3RhcnRfZHluYW1pY19oYW5kbGVyKTogRm9yY2Ugam1wX2J1ZiBhZGRyZXNzIHRvIAoJYW5kIG9wZXJhbmQgYmVmb3JlIG1vdmluZyB0byBtZW1vcnkuCgpNb24gTWFyIDI5IDE1OjExOjEwIDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBpbnZva2UudGV4aSAoQ29kZSBHZW4gT3B0aW9ucyk6IEF0dGVtcHQgdG8gY2xhcmlmeQoJLWZjaGVjay1tZW1vcnktdXNhZ2UuICBNaW5vciBlZGl0cyB0byAtZnByZWZpeC1mdW5jdGlvbi1uYW1lLgoKTW9uIE1hciAyOSAyMDo1Mjo0NyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKG1heWJlX2VsaW1pbmF0ZV9iaXYpOiBGb3IgbGliY2FsbHMgdGhhdCBzZXQgYSBnaXYsIHNraXAgdG8KCWVuZCBvZiBsaWJjYWxsLgoKTW9uIE1hciAyOSAyMDozNTo0OSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobXVsc2kzKTogVGFnIGFuIGV4dHJhIFJFR19FUVVBTCBub3RlIHRvIHRoZSBtaWRkbGUgaW5zbi4KCk1vbiBNYXIgMjkgMTE6NTA6MzQgMTk5OSAgSmVycnkgUXVpbm4gPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgoJKiBwYS5oIChIQVZFX1BSRV9JTkNSRU1FTlQpOiBEaXNhYmxlIHdoZW4gb3B0aW1pemluZyBmb3IgYSBQQTgwMDAKCWNsYXNzIG1hY2hpbmUuCgkoSEFWRV9QUkVfREVDUkVNRU5ULCBIQVZFX1BPU1RfSU5DUkVNRU5UKTogTGlrZXdpc2UuCgkoSEFWRV9QT1NUX0RFQ1JFTUVOVCk6IExpa2V3aXNlLgoKTW9uIE1hciAyOSAwODoyNDo0MyAxOTk5ICBCcnVjZSBLb3JiIDxrb3JiQGRhdGFkZXNpZ24uY29tPgoKCSogZml4aW5jL21rZml4aW5jLnNoOiAgRml4IHBvcnRhYmlsaXR5IHByb2JsZW1zIHdpdGggb2xkIHNoZWxscy4KCgkqIGZpeGluYy9SRUFETUU6ICBVcGRhdGVkIGZvciByZWxlYXNlIGFubm91bmNlbWVudAoKU3VuIE1hciAyOCAyMDoyNjo1NSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiByZWNvZy5oIChpbnNuX291dGZ1biwgaW5zbl9vcGVyYW5kX3ByZWRpY2F0ZSk6IEFkZCBwcm90b3R5cGUKCWFyZ3VtZW50cy4KCgkqIHJ0bC5oIChub3RlX3N0b3Jlcyk6IExpa2V3aXNlLgoKCSogcnRsYW5hbC5jIChub3RlX3N0b3Jlcyk6IExpa2V3aXNlLgoKU3VuIE1hciAyOCAxNTozNDoyOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9wb29sKTogQWx3YXlzIG1hcmsgdGhlIGNvbnN0YW50IHBvb2wuCgpTdW4gTWFyIDI4IDE2OjA5OjAxIDE5OTkgICJKZXJyeSBRdWlubiIgPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgoJKiBwYS5tZCAocGE3MTAwTENzaGlmdG1lbSwgcGE3MTAwTENhbHUpOiBDaGFuZ2Ugc2ltdWx0YW5laXR5LiAgVXNlCglzaGlmdC9tZW0gb3BzIGluIHBhNzEwMExDYWx1LgoKCSogcGEuYyAocGFfYWRqdXN0X2Nvc3QpOiBEb24ndCBkbyBjb3N0IGFkanVzdG1lbnRzIG9uIHBhODAwMC4KCShwYV9yZW9yZyk6IERvbid0IGNhbGwgcGFfY29tYmluZV9pbnN0cnVjdGlvbnMgb24gcGE4MDAwLgoKU3VuIE1hciAyOCAxNToyNzoyNiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFJlbW92ZSBhY2NpZGVudGFsIGNvZGUgZHVwbGljYXRpb24uCgpTdW4gTWFyIDI4IDEyOjIyOjEyIDE5OTkgIFJvYmVydCBMaXBlICAocm9iZXJ0bGlwZUB1c2EubmV0KQoKCSogaTM4Ni9zeXN2NS5oOiBOZXcgZmlsZSB0byBkZXNjcmliZSBVbml4V2FyZTcvU1ZSNS4KCSogY29uZmlndXJlLmluIChpPzg2LVVuaXhXYXJlNyotc3lzdik6IFVzZSBpdC4gICAgICAKCSogaTM4Ni91ZGsuaDogVXNlIHN5c3Y1LmguICAgTm93IHVzZXMgRHdhcmYtMi4KClN1biBNYXIgMjggMDE6MTU6MDQgUFNUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gTWFyIDI4IDAwOjQ0OjI3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogRG8gbm90IGNhbGwgYnVpbGRfcG9pbnRlcl90eXBlLCBidWlsZAoJb25lIG9uIHRoZSBmbHkgYW5kIGRvIG5vdCBjYWNoZSB0aGUgcmVzdWx0LgoKCSogZ2NjLmNwcywgY3BwLmNwczogRGVsZXRlIHVud2FudGVkIGZpbGVzLgoKU2F0IE1hciAyNyAyMzozNzo0MCBFU1QgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAobW92ZGljYyszLCBtb3ZkaWNjKzQpOiBSZXdyaXRlIHVzaW5nIHNwbGl0X2RpLgoJKiBpMzg2LmMgKG91dHB1dF9pbnRfY29uZGl0aW9uYWxfbW92ZSk6IERlbGV0ZSB1bnVzZWQgY29kZS4KClNhdCBNYXIgMjcgMjE6MTc6MzYgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL3thaXg0MS5oLGFpeDQzLmh9IChBU01fQ1BVX1NQRUMpOiBBZGQgNjA0ZS4KClNhdCBNYXIgMjcgMTY6MTM6NTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IEltcHJvdmUgaGFuZGxpbmcgb2YgQVNNcy4KCjE5OTktMDMtMjYgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoeGNwcCwgY3Bwc3BlYy5vKTogTmV3IHRhcmdldHMuCgkoQ1BQX0lOU1RBTExfTkFNRSk6IE5ldyBtYWNyby4KCShpbnN0YWxsLWNwcCk6IEluc3RhbGwgeGNwcC4gIFVzZSBDUFBfSU5TVEFMTF9OQU1FLgoJKGFsbC5idWlsZCwgc3RhcnQuZW5jYXApOiBCdWlsZCB4Y3BwLgoKCSogY3Bwc3BlYy5jOiBOZXcgZmlsZSwgaW1wbGVtZW50cyBhcmd1bWVudCBmaWx0ZXJpbmcgZm9yIGEKCXVzZXItdmlzaWJsZSBDIHByZXByb2Nlc3Nvci4KCSogY3BwLnNoOiBSZW1vdmVkLgoKRnJpIE1hciAyNiAyMDo0MTo0NiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhpbmMpOiBVc2UgdG9vbGRpciBpbnN0ZWFkIG9mIGdjY190b29sZGlyLgoKRnJpIE1hciAyNiAxNjowMjozNyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChhcm0tKi12eHdvcmtzKik6IEp1c3QgaW5jbHVkZSBhcm0vdnhhcm0uaAoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGNvbmZpZy9hcm0vdnhhcm0uaDogRGVmaW5lIFNVQlRBUkdFVF9DUFVfREVGQVVMVCBiZWZvcmUKCWluY2x1ZGluZyBhcm0vY29mZi5oCgoxOTk5LTAyLTE2ICBTY290dCBCYW1icm91Z2ggPHNjb3R0YkBjb3JlbGNvbXB1dGVyLmNvbT4KCiAgICAgICAgKiBjb25maWd1cmUuaW4gKGFybSotKi1saW51eC1nbnUqKTogU2V0IHRocmVhZF9maWxlIHRvICdwb3NpeCcgaWYKCS0tZW5hYmxlLXRocmVhZHNbPXt5ZXMscHRocmVhZHMscG9zaXh9XSBpcyBwYXNzZWQgYXMgYSBjb21tYW5kCglsaW5lIHBhcmFtZXRlciB0byBjb25maWd1cmUuIAoKICAgICAgICAqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCQogICAgICAgICogZ2NjL2NvbmZpZy9hcm0vdC1saW51eCAoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogSW5jbHVkZSAtZlBJQy4KCkZyaSBNYXIgMjYgMTk6NDI6MTkgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjb21iaW5lX2dpdnMpOiBGaXggaW5kZXggaW50byBjYW5fY29tYmluZSB3aGVuIGRvaW5nCgliZW5lZml0IGFkanVzdG1lbnQgZm9yIHJlbWFpbmluZyBnaXZzIHdoZW4gaGF2aW5nIGNvbWJpbmVkIGEgZ2l2LgoKRnJpIE1hciAyNiAxMTozODowMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90LWFybS1lbGYgKEVYVFJBX01VTFRJTElCX1BBUlRTKTogRGVmaW5lLgoKRnJpIE1hciAyNiAxMDo0ODoyNyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaDogSW5jbHVkZSBkYnhlbGYuaAoKRnJpIE1hciAyNiAxMDo0Mzo0NyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3N2cjQuaDogSW5jbHVkZSBuZXcgaGVhZGVyIGZpbGUgZGJ4ZWxmLmguCgkoREJYX0RFQlVHR0lOR19JTkZPKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoREJYX1VTRV9CSU5DTCk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9CTE9DS1NfRlVOQ1RJT05fUkVMQVRJVkUpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShBU01fSURFTlRJRllfR0NDKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX0lERU5USUZZX0dDQ19BRlRFUl9TT1VSQ0UpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoREJYX0ZVTkNUSU9OX0ZJUlNUKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCk6IFJlbW92ZSBkZWZpbml0aW9uLgoKCSogY29uZmlnL2VsZm9zLmg6IEluY2x1ZGUgbmV3IGhlYWRlciBmaWxlIGRieGVsZi5oLgoJKERCWF9ERUJVR0dJTkdfSU5GTyk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9CTE9DS1NfRlVOQ1RJT05fUkVMQVRJVkUpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShBU01fSURFTlRJRllfR0NDKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX0lERU5USUZZX0dDQ19BRlRFUl9TT1VSQ0UpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoREJYX0ZVTkNUSU9OX0ZJUlNUKTogUmVtb3ZlIGRlZmluaXRpb24uCgoJKiBjb25maWcvZGJ4ZWxmLmg6IE5ldyBoZWFkZXIgZmlsZS4KCShEQlhfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCgkoREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRSk6IERlZmluZS4KCShEQlhfRlVOQ1RJT05fRklSU1QpOiBEZWZpbmUuCgkoREJYX1VTRV9CSU5DTCk6IERlZmluZS4KCShEQlhfQ09OVElOX0xFTkdUSCk6IERlZmluZS4KCShBU01fSURFTlRJRllfR0NDKTogRGVmaW5lLgoJKEFTTV9JREVOVElGWV9HQ0NfQUZURVJfU09VUkNFKTogRGVmaW5lLgoJKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBEZWZpbmUuCgkoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCk6IERlZmluZS4KCkZyaSBNYXIgMjYgMDE6NTk6MTUgMTk5OSAgIkNoYXJsZXMgTS4gSGFubnVtIiA8cm9vdEBpaGFjay5uZXQ+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IE9wdGltaXplIGJpdGZpZWxkIHJlZmVyZW5jZXMgd2l0aAoJZGlmZmVyZW50IG1hc2tzIGFzIGxvbmcgYXMgdGhlaXIgc2l6ZSBhbmQgYml0IHBvc2l0aW9uIGFyZSB0aGUgc2FtZS4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogQnVpbGQgYSB0eXBlIGZvciBib3RoIHRoZSBsaHMgYW5kCglyaHMgYW5kIHVzZSBpdCBhcHByb3ByaWF0ZWx5LgoKCSogZm9sZC1jb25zdC5jIChmb2xkX3RydXRob3ApOiBNYXNrIHRoZSBsaHMgYW5kIHJocyBhZnRlciBtZXJnaW5nCglhZGphY2VudCBiaXRmaWVsZCByZWZlcmVuY2VzLiAKCgkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogVmVyaWZ5IHRoYXQgdGhlIGxocyBhbmQgcmhzIGFyZQoJaW4gdGhlIHNhbWUgYml0IHBvc2l0aW9uIHdoZW4gb3B0aW1pemluZyBiaXRmaWVsZCByZWZlcmVuY2VzCgl3aGljaCBoYXZlIHRoZSBzYW1lIG1hc2suCgpUaHUgTWFyIDI1IDIyOjUzOjI3IDE5OTkgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBnY2MudGV4aSAoQ29weSBBc3NpZ25tZW50KTogTmV3IG5vZGUuCgoxOTk5LTAzLTI1IFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZ2NjLmM6IENvbXBpbGUgdW5jb25kaXRpb25hbGx5IGFsbCBjb2RlIGZvcm1lcmx5IGRlcGVuZGVudAoJb24gI2lmZGVmIExBTkdfU1BFQ0lGSUNfRFJJVkVSLgoJKiBnY2NzcGVjLmM6IE5ldyBmaWxlIHdpdGggc3R1YiBsYW5nX3NwZWNpZmljX2RyaXZlciwKCWxhbmdfc3BlY2lmaWNfcHJlX2xpbmsuCgkqIE1ha2VmaWxlLmluOiBMaW5rIGdjY3NwZWMubyBpbnRvIHhnY2MuICBBZGQgcnVsZSB0byBjb21waWxlCgpUaHUgTWFyIDI1IDIxOjA4OjAyIDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGdjYy50ZXhpIChUZW1wb3Jhcmllcyk6IFVwZGF0ZS4KClRodSBNYXIgMjUgMTY6NTM6NTMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IFBsYWNlIFJFR19MQUJFTCBhbHNvIHdoZXJlCglSRUdfRVFVQUwgaW5kaWNhdGVzLgoKVGh1IE1hciAyNSAxMjo0NjozNyAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBhMjlrL2EyOWsuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmdzLgoJKiBpOTYwL2k5NjAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmdzLgoJKiBpbnZva2UudGV4aSAoYTI5ayk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciAtbW5vLW11bHRtIG9wdGlvbi4KClRodSBNYXIgMjUgMTQ6MDQ6NTQgRVNUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIHJ0bC50ZXhpIChSVFhfRlJBTUVfUkVMQVRFRF9QKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIHJ0bC5oIChzdHJ1Y3QgcnR4X2RlZik6IFVwZGF0ZSBjb21tZW50IGZvciBmcmFtZV9yZWxhdGVkIGZpZWxkLgoJKHNldF91bmlxdWVfcmVnX25vdGUpOiBEZWNsYXJlIHByb3RvdHlwZS4KCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9kZWJ1Z19leHByKTogU3BsaXQgb3V0IGZyb20KCSdkd2FyZjJvdXRfZnJhbWVfZGVidWcnIHRvIGhhbmRsZSBvbmx5IGV4cHJlc3Npb25zLCBhbmQgcHJvY2VzcwoJY29tcG9uZW50IHBhcnRzIG9mIGEgUEFSQUxMRUwgZXhwcmVzc2lvbi4KCShkd2FyZjJvdXRfZnJhbWVfZGVidWcpOiBQcm9jZXNzIGluc25zIG9ubHksIGFuZCBjYWxsCgluZXcgZnVuY3Rpb24gJ2R3YXJmMm91dF9mcmFtZV9kZWJ1Z19leHByJyBmb3IgcGF0dGVybnMuCgkqIGVtaXQtcnRsLmMgKHNldF91bmlxdWVfcmVnX25vdGUpOiBOZXcgZnVuY3Rpb24gdG8gYWRkIGEgcmVnIG5vdGUsCglidXQgaWYgdGhlcmUgaXMgYW4gZXhpc3RpbmdvbmUsIGRlbGV0ZXMgaXQgZmlyc3QuCgkqIGV4cG1lZC5jIChleHBhbmRfbXVsdCwgZXhwYW5kX2Rpdm1vZCk6IFVzZSBzZXRfdW5pcXVlX3JlZ19ub3RlLgoJKiBvcHRhYnMuYyAoYWRkX2VxdWFsX25vdGUsIGV4cGFuZF9iaW5vcCk6IFVzZSBzZXRfdW5pcXVlX3JlZ19ub3RlLgoJKGVtaXRfbm9fY29uZmxpY3RfYmxvY2ssIGVtaXRfbGliY2FsbF9ibG9jayk6IFVzZSBzZXRfdW5pcXVlX3JlZ19ub3RlLgoJKGV4cGFuZF9maXgpOiAgVXNlIHNldF91bmlxdWVfcmVnX25vdGUuCgpUaHUgTWFyIDI1IDExOjQ3OjQ5IDE5OTkgIEFydCBIYWFzIDxhaGFhc0BuZW9zb2Z0LmNvbT4KCgkqIHRsaW5rLmMgKHN5bWJvbF9oYXNoX25ld2Z1bmMpOiBSZW1vdmUgcmVkdW5kYW50IGNhbGwgdG8KCWhhc2hfbmV3ZnVuYy4KCShmaWxlX2hhc2hfbmV3ZnVuYywgZGVtYW5nbGVkX2hhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoKVGh1IE1hciAyNSAxMDowNTo1NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5oIChQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkpOiBTZXQgdG8gMTI4LgoKMTk5OS0wMy0yNSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJQmFzZWQgb24gcGF0Y2ggZnJvbSBKaW0gU3R1ZHQgPGppbUBmZWRlcmF0ZWQuY29tPjoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaCAoU1RBUlRGSUxFX1NQRUMsIEVOREZJTEVfU1BFQyk6IENvcHkKCWRlZmluaXRpb25zIGZyb20gY29uZmlnL2xpbnV4LmguCgkoREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRSk6IERlZmluZSB0byAxLgoKVGh1IE1hciAyNSAwMjoxMjo0MiAxOTk5ICBGaW5uIEhha2Fuc3NvbiAgPGZpbm5AYXhpcy5jb20+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENvcnJlY3QgYSBjb21tZW50LgoKICAgICAgICAqIHJ0bC5oIChNRU1fQ09QWV9BVFRSSUJVVEVTKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGVuZGluZyBiYWNrc2xhc2guCgpUaHUgTWFyIDI1IDAyOjAyOjEzIDE5OTkgIEF4ZWwgVGhpbW0gPEF4ZWwuVGhpbW1AcGh5c2lrLmZ1LWJlcmxpbi5kZT4KCgkqIE1ha2VmaWxlLmluIChSQU5MSUJfVEVTVCk6IEltcHJvdmUgdGVzdC4KClRodSBNYXIgMjUgMDE6MTU6MzMgMTk5OSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgUExVUyk6IFVzZSBzaWduIGV4dGVuZGVkIG1hc2sKCXdoZW4gbWFza2luZyB0aGUgbG93IGJpdHMgb3V0IG9mIGEgY29uc3RhbnQuCgpUdWUgTWFyIDIzIDE1OjQ1OjI1IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCgkJCSAgSmVmZiBMYXcgPGxhd0BjeWdudXMuY29tPgoKCSogZm9sZC1jb25zdC5jIChtYWtlX3JhbmdlKTogSWYgb3JpZ190eXBlIGlzIHVuc2V0LCBzZXQgaXQgYXMgc29vbgoJYXMgd2Uga25vdyB0aGUgdHlwZS4gIFJlbW92ZSBub3cgdW5uZWNlc3Nhcnkgc2V0IG9mIG9yaWdfdHlwZSBmb3IKCWNvbnZlcnNpb25zLgoKV2VkIE1hciAyNCAyMzoyNzoyNSAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgkJCSAgSmVmZiBMYXcgPGxhd0BjeWdudXMuY29tPgoKCSogc3lzdGVtLmggKFNURElOX0ZJTEVOTyk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uIGlmIG9uZSBpcyBub3QKCXByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGVzLgoJKFNURE9VVF9GSUxFTk8sIFNUREVSUl9GSUxFTk8pOiBMaWtld2lzZS4KCgkqIGkzODYveG0tZGpncHAuaCAoQ09MTEVDVDJfSE9TVF9JTklUSUFMSVpBVElPTik6IE5ldyBtYWNyby4KCSogY29sbGVjdDIuYyAobWFpbik6IFVzZSBpdC4KCShwZXhlY3V0ZV9waWQpOiBOZXcgdmFyaWFibGUuIEhvbGRzIHJldHVybiB2YWx1ZSBmcm9tIGNhbGwgdG8gcGV4ZWN1dGUuCgkoY29sbGVjdDJfZXhlY3V0ZSk6IFJld29yayB0byB1c2UgcGV4ZWN1dGUgaW5zdGVhZCBvZiBmb3JrLgoJKGNvbGxlY3QyX3dhaXQpOiBVc2UgcHdhaXQoKSBpbnN0ZWFkIG9mIHdhaXQoKS4KCgkqIGkzODYvZGpncHAuaDogRml4IHR5cG8uCgpXZWQgTWFyIDI0IDIzOjI0OjMwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogUmVjb2duaXplIGN5Z3dpbiogaW5zdGVhZCBvZiBvbmx5CgljeWd3aW4zMi4KCldlZCBNYXIgMjQgMTU6NDQ6MTIgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAoaW5pdF9pZGVudHMpOiBBY2NlcHQgYm90aCBOQU1FIGFuZCBfX05BTUVfXwoJdmVyc2lvbnMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuCgkobTMycl92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogRGl0dG8uCgkobTMycl9lbmNvZGVfc2VjdGlvbl9pbmZvKTogRGl0dG8uCgpXZWQgTWFyIDI0IDIxOjQyOjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogSWYgb3V0cHV0LXJlbG9hZGluZyBmb3IgYQoJc2ltcGxlIG1vdmUgaW5zbiwgdHJ5IHRvIGluaGVyaXQgYW4gZXF1aXZhbGVuY2UgZm9yIHRoZSBpbnB1dC4KCjE5OTktMDItMjQgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGFybS9hb3V0LmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUpOiBGaXggcXVvdGluZy4KCjE5OTktMDMtMjQgIEppbSBCbGFuZHkgIDxqaW1iQHp3aW5nbGkuY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzIuYyAoX19DVE9SX0xJU1RfXywgX19EVE9SX0xJU1RfXyk6IEluaXRpYWxpemUgb24gYWxsCglwbGF0Zm9ybXMuCgpXZWQgTWFyIDI0IDAxOjM1OjAxIDE5OTkgIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBSZWNvZ25pc2UgYSByb3RhdGUgYnkgYW4gdW5zaWduZWQgYW1vdW50LgoKVHVlIE1hciAyMyAyMzozMjoxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAocm90bHNpMyk6IE5ldyBleHBhbmRlci4gIFN5bnRoZXNpemUgYSB2YXJpYWJsZSByb3RhdGUKCWxlZnQgdXNpbmcgYSB2YXJpYWJsZSByb3RhdGUgcmlnaHQuICBQcm92aWRlIGFub255bW91cyBwYXR0ZXJuIGZvcgoJcm90YXRlIGxlZnQgYnkgYSBjb25zdGFudCB2YWx1ZS4KCgkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBEbyBub3QgdHJ5IHRvIG9wdGltaXplIGEgYWdncmVnYXRlCglhZGRyZXNzIHdoaWNoIGhhcyBWT0lEbW9kZS4KClR1ZSBNYXIgMjMgMjI6NTE6NDggMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgkJCSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBwcm90b2l6ZS5jIChhYnNwYXRoKTogUHJlc2VydmUgbXVsdGlwbGUgbGVhZGluZyBzbGFzaGVzIGZvcgoJX1dJTjMyIGFuZCBJbnRlcml4LgoKMTk5OS0wMS0yMyAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogYXJtL3Z4YXJtLmg6IFNwbGl0IG91dCB2eFdvcmtzIHN1cHBvcnQgaW50byBzZXBhcmF0ZSBoZWFkZXJmaWxlCglhbmQgdnhpZnkuCgkqIGFybS9hcm0uYyAoY3B1X2RlZmF1bHRzKTogQWxsb3cgYXJtNzEwIGFzIGRlZmF1bHQuCgkKCSogY29uZmlndXJlLmluOiBTcGxpdCBvdXQgdnhXb3JrcyBzdXBwb3J0IGZvciBBcm0uCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClR1ZSBNYXIgMjMgMTE6MjA6MDMgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGZpcnN0X3J0bF9vcCwgaGFzX2NsZWFudXBzKTogIEhhbmRsZSBHT1RPX1NVQlJPVVRJTkVfRVhQUi4KClR1ZSBNYXIgMjMgMDk6MDA6MzkgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vcmlzY2l4MS5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jIHN0cmluZy4KCSogY29uZmlnL2FybS9yaXNjaXgxLTEuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmcuCgpUdWUgTWFyIDIzIDA3OjUwOjIwIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBmdW5jdGlvbi5jOiBJbmNsdWRlIGhhc2guaC4KCShpbnNuc19mb3JfbWVtX2VudHJ5KTogTmV3IHN0cnVjdC4KCShwdXRfcmVnX2ludG9fc3RhY2spOiBUYWtlIGFuIG9wdGlvbmFsIGhhc2gtdGFibGUgbWFwcGluZyBNRU1zIHRvCgl0aGUgSU5TTnMgdGhhdCB1c2UgdGhlbS4KCShmaXh1cF92YXJfcmVmcyk6IExpa2V3aXNlLgoJKHB1dF9hZGRyZXNzb2ZfaW50b19zdGFjayk6IExpa2V3aXNlLgoJKHB1cmdlX2FkZHJlc3NvZl8xKTogTGlrZXdpc2UuICBLZWVwIHRoZSBoYXNoLXRhYmxlIHVwIHRvIGRhdGUgaWYKCXdlIGFkZCBuZXcgaW5zdHJ1Y3Rpb25zLgoJKGZpeHVwX3Zhcl9yZWZzX2luc25zKTogVXNlIGl0IHRvIGF2b2lkIHNlYXJjaGluZyB0aGUgZW50aXJlCglpbnN0cnVjdGlvbiBjaGFpbi4KCShpbnNuc19mb3JfbWVtX25ld2Z1bmMpOiBOZXcgZnVuY3Rpb24uCgkoaW5zbnNfZm9yX21lbV9jb21wKTogTGlrZXdpc2UuCgkoaW5zbnNfZm9yX21lbV93YWxrKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9pbnNuc19mb3JfbWVtKTogTGlrZXdpc2UuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFBhc3MgTlVMTCBmb3IgdGhlIGhhc2gtdGFibGUuCgkocHV0X3Zhcl9pbnRvX3N0YWNrKTogTGlrZXdpc2UuCgkoZ2VuX21lbV9hZGRyZXNzb2YpOiBMaWtld2lzZS4KCShmbHVzaF9hZGRyZXNzb2YpOiBMaWtld2lzZS4KCShwdXJnZV9hZGRyZXNzb2YpOiBDYWxsIGNvbXB1dGVfaW5zbnNfZm9yX21lbSB0byBwcmUtY29tcHV0ZSB0aGUKCWhhc2ggdGFibGUuCgkqIE1ha2VmaWxlLmluIChPQkpTKTogSW5jbHVkZSBoYXNoLm8uCgkoZnVuY3Rpb24ubyk6IERlcGVuZCBvbiBoYXNoLmguCgkKVHVlIE1hciAyMyAwMDozOToxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L29wZW5ic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2Ugc3ltYm9saWMgbmFtZXMgaW5zdGVhZCBvZgoJbnVtYmVycy4KCSogaTM4Ni9uZXRic2QuaCwgaTM4Ni9mcmVlYnNkLmg6IExpa2V3aXNlLgoKCSogY3J0c3R1ZmYuYzogVXNlIEFOU0kgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBGaXggbWlub3Igd2hpdGVzcGFjZQoJcHJvYmxlbXMuCgoJKiBpMzg2L29wZW5ic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZpbmUuCgkqIGNvbmZpZ3VyZS5pbjogRG8gbm90IHNldCBUQVJHRVRfQ1BVX0RFRkFVTFQgZm9yIHg4NiBPcGVuQlNECgljb25maWd1cmF0aW9ucy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIE1hciAyMyAwMDozOToxMCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2L2ZyZWVic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZpbmUgaW5zdGVhZAoJb2YgVEFSR0VUX0NQVV9ERUZBVUxULgoJKiBpMzg2L25ldGJzZC5oIChUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgoKTW9uIE1hciAyMiAyMzo1MjowMSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCQkJICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIHNkYm91dC5jIChzeW1zLmgpOiBEb24ndCBpbmNsdWRlIG9uIEludGVyaXguCgkqIHRvcGxldi5jIChtYWluKTogTm8gc2JyayBvbiBJbnRlcml4LgoKCSogY29uZmlndXJlLmluOiBBZGQgaTM4Ni1wYy1pbnRlcml4IHN1cHBvcnQuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCSogZml4aW5jLmludGVyaXg6IE5ldyBmaWxlLgoJKiBjb25maWcvaW50ZXJpeC5oOiBOZXcgZmlsZS4KCSogY29uZmlnL3gtaW50ZXJpeDogTmV3IGZpbGUuCgkqIGNvbmZpZy94bS1pbnRlcml4Lmg6IE5ldyBmaWxlLgoJKiBpMzg2L2ludGVyaXguaDogTmV3IGZpbGUuCgkqIGkzODYvaW50ZXJpeC5jOiBOZXcgZmlsZS4KCSogaTM4Ni90LWludGVyaXg6IE5ldyBmaWxlLgoKTW9uIE1hciAyMiAyMzo0MTo0OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2LmggKFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSk6IERlZmluZS4KCk1vbiBNYXIgMjIgMjM6NDE6MzEgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChpeDg2X2NvbXB1dGVfZnJhbWVfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KCShpeDg2X3Byb2xvZ3VlLCBpeDg2X2VwaWxvZ3VlKTogVXNlIGl0LgoJKiBpMzg2LmggKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogTGlrZXdpc2UuCgkqIHJlbG9hZDEuYzogUHJvdmlkZSBkZWZhdWx0IGZvciBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgpNb24gTWFyIDIyIDE4OjA2OjU5IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChUQVJHRVRfU1dJVENIRVMsIFRBUkdFVF9PUFRJT05TKTogQWRkIG9wdGlvbiBkb2MKCXN0cmluZ3MuCgkqIG1pcHMvYWJpNjQuaCAoU1VCVEFSR0VUX1RBUkdFVF9PUFRJT05TKTogTGlrZXdpc2UuCgpNb24gTWFyIDIyIDE2OjE4OjI3IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2VsZi5oIChWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFKTogRG8gbm90IGJvdGhlcgoJcGFzc2luZyBBVFRSSUJVVEVTIHRvIGFybV92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlLgoJCgkqIGNvbmZpZy9hcm0vY29mZi5oIChWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFKTogRG8gbm90IGJvdGhlciAKCXBhc3NpbmcgQVRUUklCVVRFUyB0byBhcm1fdmFsaWRfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZS4KCQoJKiBjb25maWcvYXJtL2FybS5oIChERUZBVUxUX1JUWF9DT1NUUyk6IERvIG5vdCBib3RoZXIgcGFzc2luZwoJT1VURVJfQ09ERSB0byBhcm1fcnR4X2Nvc3RzIC0gaXQgaXMgbm90IHVzZWQuCgkoYXJtX2NvbXBhcmVfZnApOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoRklOQUxfUFJFU0NBTl9JTlNOKTogRG8gbm90IGJvdGhlciBwYXNzaW5nIE9QVkVDIG9yIE5PUEVSQU5EUyB0bwoJYXJtX2ZpbmFsX3ByZXNjYW5faW5zbiAtIHRoZXkgYXJlIG5vdCB1c2VkLgoJKGNvbnN0X29rX2Zvcl9vcCk6IFJlbW92ZSBwcm90b3R5cGUuCgkoYXJtX3J0eF9jb3N0cyk6IEZpeCBwcm90b3R5cGUuCgkoYXJtX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBGaXggcHJvdG90eXBlLgoJKGZpbmFsX3ByZXNjYW5faW5zbik6IEZpeCBwcm90b3R5cGUuCgoJKiBjb25maWcvYXJtL2FybS5tZDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYXJtX2NvbXBhcmVfZnAuCgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fY29tcGFyZV9mcCk6IERlbGV0ZS4KCShjb25zdF9va19mb3Jfb3ApOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYy4gIEFkZCBwcm90b3R5cGUuICBSZW1vdmUKCW1vZGUgcGFyYW1ldGVyIC0gaXQgaXMgdW51c2VkLgoJKGFybV9ydHhfY29zdHMpOiBSZW1vdmUgb3V0ZXJfY29kZSBwYXJhbWV0ZXIuCgkocmVsb2FkX21lbW9yeV9vcGVyYW5kKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkocG93ZXJfb2ZfdHdvX29wZXJhbmQpOiBEZWNsYXJlIG1vZGUgcGFyYW1ldGVyIHVudXNlZC4KCShlcXVhbGl0eV9vcGVyYXRvcik6IERlY2xhcmUgbW9kZSBwYXJhbWV0ZXIgdW51c2VkLgoJKGxvYWRfbXVsdGlwbGVfb3BlcmF0aW9uKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkoc3RvcmVfbXVsdGlwbGVfb3BlcmF0aW9uKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkobXVsdGlfcmVnaXN0ZXJfcHVzaCk6IERlY2xhcmUgbW9kZSBwYXJhbWV0ZXIgdW51c2VkLgoJKGFybV92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogUmVtb3ZlIGF0dHJpYnV0ZXMgcGFyYW1ldGVyIC0KCWl0IGlzIHVudXNlZC4KCShzZWxlY3RfZG9taW5hbmNlX2NjX21vZGUpOiBSZW1vdmUgb3AgcGFyYW1ldGVyIC0gaXQgaXMgdW51c2VkLgoJKGdlbl9jb21wYXJlX3JlZyk6IFJlbW92ZSBmcCBwYXJhbWV0ZXIgLSBpdCBpcyB1bnVzZWQuCgkoZmluYWxfcHJlc2Nhbl9pbnNuKTogUmVtb3ZlIG9wdmVjIGFuZCBub3BlcmFuZHMgcGFyYW1ldGVycyAtIHRoZXkKCWFyZSB1bnVzZWQuCgkKTW9uIE1hciAyMiAxNDozNToyOCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG0udGV4aSAoTURfU0NIRURfSU5JVCk6IEFkZCBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMuCgpNb24gTWFyIDIyIDIyOjI0OjMwIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFNldCByZWxvYWRfaXNfb3V0cHV0X3JlbG9hZCAvCglyZWxvYWRfaGFzX291dHB1dF9yZWxvYWQgZm9yIGF1dG9faW5jIGV4cHJlc3Npb25zIHRoYXQgY291bGQgYmUKCXJlbG9hZGVkLiAgQ2FsbCBmb3JnZXRfb2xkX3JlbG9hZHMgZm9yIFJFR19JTkMgbm90ZXMuCgpNb24gTWFyIDIyIDIxOjUxOjU3IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IGNoYW5nZSB0aGUgcmVzdWx0IHJlZ2lzdGVyIG9mIGEgbGliY2FsbC4KCk1vbiBNYXIgMjIgMjE6MDg6NTkgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcnRsLmggKHNoYWxsb3dfY29weV9ydHgpOiBEZWNsYXJlLgoJKiBydGwuYyAoc2hhbGxvd19jb3B5X3J0eCk6IE5ldyBmdW5jdGlvbi4KCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBVc2Ugc2hhbGxvd19jb3B5X3J0eCBpbnN0ZWFkIG9mCgljb3B5X3J0eC4KCk1vbiBNYXIgMjIgMTA6NDQ6MzMgMTk5OSAgVmxhZGltaXIgTWFrYXJvdiAgPHZtYWthcm92QHRvZnUudG8uY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9oODMwMC9oODMwMC5tZCAoYWRqdXN0X2xlbmd0aCk6IE5ldyBhdHRyaWJ1dGUuCiAJKG1vZGhpMysxLCBhbmRzaTMrMSwgaW9yc2kzKzEsIGV4dHp2KzEsIGV4dHp2KzIpOiBDaGFuZ2UgaW5zbgogCWRlZmF1bHQgdmFsdWUgb2YgYXR0cmlidXRlICJhZGp1c3RfbGVuZ3RoIiBvbnRvICJubyIuCgoJKiBjb25maWcvaDgzMDAvaDgzMDAuYyAoaDgzMDBfYWRqdXN0X2luc25fbGVuZ3RoKTogQWR1c3QKICAgICAgICBsZW5ndGggb25seSBpZiB0aGUgYXR0cmlidXRlICJhZGp1c3RfbGVuZ3RoIiB2YWx1ZSBpcyAieWVzIi4KICAgICAgICBVc2UgMCBpZiB0aGUgc2hpZnQgaXMgbmVnYXRpdmUuCgoJKiBmaW5hbC5jIChzaG9ydGVuX2JyYW5jaGVzKTogQ2hlY2sgaW5zbiBsZW5ndGggYWZ0ZXIgaXRzCiAJYWRqdXN0aW5nLgoKU3VuIE1hciAyMSAxNzozMzo0OCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpODYwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGk4NjAvcGFyYWdvbi5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBpMzcwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGZ4ODAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KICAgICAgICAqIGVseHNpLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGNsaXBwZXIuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogMTc1MGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogcGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCShUQVJHRVRfT1BUSU9OUyk6IExpa2V3aXNlIGZvciBkZWZhdWx0IGNhc2UuCgkqIG1uMTAzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogaDgzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCgkqIGdjc2UuYyAoZHVtcF9oYXNoX3RhYmxlKTogRml4IHdoaXRlc3BhY2UgaW4gZGVjbGFyYXRpb24uCgkoY29tcHV0ZV90cmFuc3BvdXQpOiBSZW5hbWVkIGZyb20gcHJlX2NvbXB1dGVfdHJhbnNwb3V0LgoJKGNvbXB1dGVfcHJlXyopOiBEZWxldGVkCgkocHJlX2V4cHJfcmVhY2hlc19oZXJlX3ApOiBOZXcgYXJndW1lbnQsIENIRUNLX1BSRV9DT01QLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkoaW5zZXJ0X2luc25fZW5kX2JiKTogUmVuYW1lZCBmcm9tIHByZV9pbnNlcnRfaW5zbi4KCShwcmVfKik6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGVzLiAgT25seSBsZWF2ZSBsb2NhbCBwcm9wZXJ0aWVzIGFuZAoJZ2xvYmFsIHJlZHVuZGFudC9vcHRpbWFsIGNvbXB1dGF0aW9uIHBvaW50cy4KCShhbGxvY19wcmVfbWVtLCBmcmVlX3ByZV9tZW0pOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgkoY29tcHV0ZV9wcmVfZGF0YSk6IFNpbXBsaWZ5IGFuZCBjYWxsIHByZV9sY20gdG8gcnVuIHRoZSBsYXp5Cgljb2RlIG1vdGlvbiBkYXRhZmxvdyBhbmFseXNpcy4KCShwcmVfaW5zZXJ0LCBwcmVfaW5zZXJ0X2NvcGllcywgcHJlX2RlbGV0ZSk6IFJldmFtcCB0byB1c2UgTENNCgliYXNlZCByZWR1bmRhbnQgYW5kIG9wdGltYWwgY29tcHV0YXRpb24gcG9pbnRzLgoKCSogYmFzaWMtYmxvY2suaCAocHJlX2xjbSwgcHJlX3Jldl9sY20pOiBEZWNsYXJlLgoKCSogdG9wbGV2LmMgKG1haW4pOiBBIGRlYnVnIG9wdGlvbiB3aXRob3V0IGEgbGV2ZWwgZGVmYXVsdHMgdG8KCWxldmVsIDIuCgpTdW4gTWFyIDIxIDEyOjEzOjAxIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGNhbl9kZWxldGVfbGFiZWxfcCk6IERvIG5vdCBhbGxvdyB1c2VyIHNwZWNpZmllZAoJbGFiZWxzIHRvIGJlIGRlbGV0ZWQuCgkqIGR3YXJmMm91dC5jIChnZW5fbGFiZWxfZGllKTogR2VuZXJhdGUgYWRkcmVzc2VzIGZvciBkZWxldGVkCgkocHJvZ3JhbW1lciBzcGVjaWZpZWQpIGxhYmVscy4gCgkqIGR3YXJmb3V0LmMgKG91dHB1dF9sYWJlbF9kaWUpOiBHZW5lcmF0ZSBhZGRyZXNzZXMgZm9yIGRlbGV0ZWQKCShwcm9ncmFtbWVyIHNwZWNpZmllZCkgbGFiZWxzLgoKMTk5OS0wMy0yMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKHhnY2MkKGV4ZWV4dCkpOiBBZGQgaW50bC5vIHRvIGxpc3Qgb2YgZmlsZXMgdG8gYmUKCWxpbmtlZCB3aXRoLgoKU3VuIE1hciAyMSAwMToxNTowMyBQU1QgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBNYXIgMjAgMjI6MjY6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3BhcmMuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG51bGwgZGVzY3JpcHRpb24gdG8gZGVmYXVsdCBjYXNlLgoKU2F0IE1hciAyMCAyMTo0NjowNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWxleC5jICh5eWxleCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGJ5dGVzJy4KCgkqIGZsb3cuYyAocHJpbnRfcnRsX3dpdGhfYmIpOiBDYXN0IHRoZSByZXR1cm4gdmFsdWUgb2YgYWxsb2NhLgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogV3JhcCB2YXJpYWJsZSBgdmFyYXJnc19zZXR1cCcgaW4KCW1hY3JvIFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MuCgkodGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyk6IE1hcmsgcGFyYW1ldGVyIGBmJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogbG9jYWwtYWxsb2MuYyAobm9fZXF1aXYpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBzdG9yZScuCgoJKiBzY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBpbnNuJyBhbmQgYG5leHQnLgoKCSogdGxpbmsuYyAoc3ltYm9sX2hhc2hfbmV3ZnVuYywgc3ltYm9sX2hhc2hfbG9va3VwLAogCWZpbGVfaGFzaF9uZXdmdW5jLCBmaWxlX2hhc2hfbG9va3VwLCBkZW1hbmdsZWRfaGFzaF9uZXdmdW5jLAogCWRlbWFuZ2xlZF9oYXNoX2xvb2t1cCwgc3ltYm9sX3B1c2gsIHN5bWJvbF9wb3AsIGZpbGVfcHVzaCwKIAlmaWxlX3BvcCwgdGxpbmtfaW5pdCwgdGxpbmtfZXhlY3V0ZSwgZnJvYl9leHRlbnNpb24sCiAJb2JzdGFja19mZ2V0cywgdGZnZXRzLCBwZmdldHMsIGZyZWFkc3ltLCByZWFkX3JlcG9fZmlsZSwKIAltYXliZV90d2VhaywgcmVjb21waWxlX2ZpbGVzLCByZWFkX3JlcG9fZmlsZXMsCiAJZGVtYW5nbGVfbmV3X3N5bWJvbHMsIHNjYW5fbGlua2VyX291dHB1dCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCShzeW1ib2xfaGFzaF9uZXdmdW5jLCBmaWxlX2hhc2hfbmV3ZnVuYywgZGVtYW5nbGVkX2hhc2hfbmV3ZnVuYyk6CglNYWtlIHRoZSB0aGlyZCBhcmd1bWVudCBhIGBoYXNoX3RhYmxlX2tleScuCgoJKiB0b3BsZXYuYyAoZGVidWdfc3RhcnRfc291cmNlX2ZpbGUpOiBNYXJrIHBhcmFtZXRlciBgZmlsZW5hbWUnCgl3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgpTdW4gTWFyIDIxIDAyOjI4OjIxIDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHRtLnRleGkgKFZhcmFyZ3MpOiBEb24ndCBzcGxpdCBhcmd1bWVudCBvZiBAaXRlbSBhY3Jvc3MgbGluZXMuCgoJKiBpbnZva2UudGV4aTogRml4IHVzZSBvZiBAaXRlbSB2cyBAaXRlbXguCgpTdW4gTWFyIDIxIDA5OjU5OjU0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBudWxsIGRlc2NyaXB0aW9uIHRvCglkZWZhdWx0IGNhc2UuCgpTYXQgTWFyIDIwIDIzOjMzOjU0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRml4IGRlYnVnIG1lc3NhZ2UuCgpTYXQgTWFyIDIwIDE1OjU0OjM1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudCk6IEVtaXQgcnB0Yl9lbmQKCXBhdHRlcm4gaW5zdGVhZCBvZiBkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvIHBhdHRlcm4uCgpTYXQgTWFyIDIwIDExOjM5OjU4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvYzR4L2M0eC5oIChUQVJHRVRfT1BUSU9OUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoKRnJlIE1hciAxOSAyMzoyNjoyOSAxOTk5ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBFUlJPUl9NQVJLIG11Y2ggZWFybGllci4KCkZyaSBNYXIgMTkgMTU6Mjg6MzggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChjcmVhdGVfZGVmaW5pdGlvbik6IENhc3QgdG8gVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuCgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogTGlrZXdpc2UuCglTdGFydCBhICNkZWZpbmUgaW4gY29sdW1uIDAuCgoJKiBjcHBsaWIuYyAoY3BwX2RlZmluZSk6IENhc3QgdG8gVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuCgkoY3BwX3B1c2hfYnVmZmVyKTogTGlrZXdpc2UgZm9yIGNwcF9idWZmZXIqLgoJKGRvX2luY2x1ZGUpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgYGZiZWcnIGFuZCBgZmVuZCcgdG8gdW5zaWduZWQgY2hhciouCgkoZG9fZW5kaWYpOiBDYXN0IHRvIGNoYXIqIHdoZW4gYXNzaWduaW5nIHRvIG9uZS4KCShkb19hc3NlcnQpOiBMaWtld2lzZS4KCShkb191bmFzc2VydCk6IExpa2V3aXNlLgoJKGNwcF9yZWFkX2NoZWNrX2Fzc2VydGlvbik6IENoYW5nZSB0aGUgdHlwZSBvZiBgbmFtZScgdG8gVV9DSEFSKi4KCURvbid0IGRvIHVubmVjZXNzYXJ5IGNhc3QgdG8gY2hhciogYW55bW9yZS4KCgkqIGdlbnJlY29nLmMgKG1ha2VfaW5zbl9zZXF1ZW5jZSk6IENhc3QgdG8gY2hhcioqIHdoZW4gYXNzaWduaW5nCgl0byBvbmUuICBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBiemVybyB0byBQVFIuCgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG5vdGUnLgoKCSogcmVsb2FkMS5jIChuZXdfaW5zbl9jaGFpbik6IENhc3QgdG8gc3RydWN0IGluc25fY2hhaW4qIHdoZW4KIAlhc3NpZ25pbmcgdG8gb25lLgoKCSogcnRsLmMgKGNvcHlfcnR4KTogVXNlIG1lbWNweSBpbnN0ZWFkIG9mIGJjb3B5LgoKRnJpIE1hciAxOSAxMToxOTozMSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjYWxscy5jIChpbml0aWFsaXplX2FyZ3VtZW50X2luZm9ybWF0aW9uKTogTWFyayBwYXJhbWV0ZXJzCglgbnVtX2FjdHVhbHMnIGFuZCBgbl9uYW1lZF9hcmdzJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBkYnhvdXQuYyAoZGJ4b3V0X3N0YXJ0X25ld19zb3VyY2VfZmlsZSk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIKCWBmaWxlbmFtZScuCgkoZGJ4b3V0X2ZpbmlzaCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXJzIGBmaWxlJyBhbmQgYGZpbGVuYW1lJy4KCShkYnhvdXRfcHJlcGFyZV9zeW1ib2wpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBkZWNsJy4KCShkYnhvdXRfYmVnaW5fZnVuY3Rpb24pOiBMaWtld2lzZS4KCgkqIGV4cGxvdy5jIChoYXJkX2Z1bmN0aW9uX3ZhbHVlKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgZnVuYycuCgoJKiBmdW5jdGlvbi5jIChsb2NhdGVfYW5kX3BhZF9wYXJtKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgZm5kZWNsJy4KCQoJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IE9taXQgdW51c2VkIGFyZ3VtZW50IHRvIGBleHBhbmRfYWJzJy4KCSogZXhwci5jIChleHBhbmRfZXhwcik6IExpa2V3aXNlLgoJKiBleHByLmggKGV4cGFuZF9hYnMpOiBEZWxldGUgdW51c2VkIGFyZ3VtZW50IGZyb20gcHJvdG90eXBlLgoJKiBvcHRhYnMuYyAoZXhwYW5kX2Ficyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGB1bnNpZ25lZHAnLgoKCSogc2Rib3V0LmMgKHNkYm91dF9pbml0KTogTWFyayBwYXJhbWV0ZXIgYHN5bXMnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShzZGJvdXRfZW5kX2Jsb2NrKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgbicuCgkKCSogdG9wbGV2LmMgKGRlYnVnX2RlZmluZSk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXJzIGBsaW5lbm8nIGFuZAoJYGJ1ZmZlcicuCgkoZGVidWdfdW5kZWYpOiBMaWtld2lzZS4KCQoJKiB2YXJhc20uYyAobmFtZWRfc2VjdGlvbik6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgJ3JlbG9jJy4KCShhc3NlbWJsZV9leHRlcm5hbCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGRlY2wnLgoJKGFzc2VtYmxlX2FsaWFzKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgdGFyZ2V0Jy4KCQpGcmkgTWFyIDE5IDAxOjU0OjMwIDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogdG9wbGV2LmMgKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogQ29uc3RpZnkuICBCZXR0ZXIgY29udHJvbCBvZgoJZXJyb3IgbWVzc2FnZXMuCgkobWFpbik6IFVzZSByZWFkX2ludGVncmFsX3BhcmFtZXRlciB0byBzZXQgb3B0aW1pemUsIGlkX2NsYXNoX2xlbiwKCWxhcmdlcl90aGFuX3NpemUsIGFuZCB0aGUgZGVidWdnaW5nIGxldmVsLgoJKiB0b3BsZXYuaCAocmVhZF9pbnRlZ3JhbF9wYXJhbWV0ZXIpOiBVcGRhdGUgcHJvdG90eXBlLgoKRnJpIE1hciAxOSAwMTo0MjowNSAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogc3lzdGVtLmg6IFVzZSBwdXRjX3VubG9ja2VkLCBmcHV0Y191bmxvY2tlZCwgYW5kCglmcHV0c191bmxvY2tlZCBvbmx5IGlmIHB1dGNfdW5sb2NrZWQgaGFzIGEgcHJvdG90eXBlIGFscmVhZHkuCglQcm90b3R5cGUgZnB1dHNfdW5sb2NrZWQgaWYgbmVjZXNzYXJ5LgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBwcm90b3R5cGVzIG9mIHB1dGNfdW5sb2NrZWQgYW5kCglmcHV0c191bmxvY2tlZC4gCgkqIGFjY29uZmlnLmg6IFVwZGF0ZWQuCgkqIGNvbmZpZy5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIE1hciAxOSAwMjo0NToxMiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluIChJTlRMX1RBUkdFVFMpOiBuZXcgbWFjcm8KCSgkKElOVExfVEFSR0VUUykpOiBkZXBlbmQgb24gZ2VuZXJhdGVkIHNvdXJjZXM7IGRyb3AgZGVwZW5kZW5jaWVzCglvbiBjcC9wYXJzZS5jIGFuZCBvYmpjL29iamMtcGFyc2UuYwoJKCQoc3JjZGlyKS9jcC9wYXJzZS5jKTogbW92ZSB0byBjcC9NYWtlLWxhbmcuaW4KCSogb2JqYy9NYWtlLWxhbmcuaW4gKCQoSU5UTF9UQVJHRVRTKSk6IGRlcGVuZCBvbiBvYmpjL29iamMtcGFyc2UuYyAKClRodSBNYXIgMTggMjI6Mjg6NTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTg2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogaTg2MC9wYXJhZ29uLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBpMzcwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBmeDgwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgogICAgICAgICogZWx4c2kuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGNsaXBwZXIuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIDE3NTBhLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBwYS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCShUQVJHRVRfT1BUSU9OUyk6IExpa2V3aXNlLgoJKiBtbjEwMzAwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBoODMwMC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KClRodSBNYXIgMTggMTU6NTg6MjYgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRG8gbm90IHBlcmZvcm0gcHNldWRvIHJlcGxhY2VtZW50cwoJaWYgdGhlIGxvb3AgY29udGFpbnMgdm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMuCgpUaHUgTWFyIDE4IDE5OjA5OjUwIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogV2hlbiBwcm9jZXNzaW5nIFggcmVjdXJzaXZlbHksCglkb24ndCBhbHRlciBpdCBkZXN0cnVjdGl2ZWx5IGV4Y2VwdCBieSBmaWxsaW5nIGluIGNvbnN0YW50cy4KClRodSBNYXIgMTggMTA6MTQ6MTggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChkZWZhdWx0X2luY2x1ZGUpOiBJbml0aWFsaXplIHN0cnVjdHVyZSBtZW1lYmVycy4KICAJKHBhc3NfdGhydV9kaXJlY3RpdmUpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgJ2tleXdvcmRfbGVuZ3RoJyB0byBpbnQuCiAgCShtYWluKTogQ2FzdCBgYmluZHRleHRkb21haW4nIGFuZCBgdGV4dGRvbWFpbicgdG8gKHZvaWQpLgoKCSogY29sbGVjdDIuYyAobWFpbik6IExpa2V3aXNlLgoKCSogY3BwbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBnY2MuYyAobWFpbik6IExpa2V3aXNlLgoKCSogZ2Nvdi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBwcm90b2l6ZS5jIChtYWluKTogTGlrZXdpc2UuCgoJKiB0b3BsZXYuYyAobWFpbik6IExpa2V3aXNlLgoKMTk5OS0wMy0xOCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmMgKG1pcHNfZXhwbGljaXRfdHlwZV9zaXplX3N0cmluZyk6IENvcnJlY3QKICAgICAgIGl0cyB0eXBlLgoKVGh1IE1hciAxOCAwMToyNDoyNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFVzZSAiZXhpdCAxIiwgbm90ICJleGl0ICgxKSIuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBNYXIgMTcgMjM6MTc6NDIgMTk5OSAgTWFyayBLZXR0ZW5pcyAgPGtldHRlbmlzQGdudS5vcmc+CgoJKiBjb25maWcvdC1nbnUgKFNZU1RFTV9IRUFERVJfRElSKTogTmV3IHZhcmlhYmxlLiAgU2V0IHRvCglgL2luY2x1ZGUnIGluIG9yZGVyIHRvIGZpbmQgdGhlIHN5c3RlbSdzIGxpbWl0cy5oLgoKV2VkIE1hciAxNyAyMzowMDoxOCAxOTk5ICBSb2JlcnQgTGlwZSA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogZml4aW5jL2ZpeGluY2wuYzogSW5jbHVkZSBhdXRvLWhvc3QuaCBpbnN0ZWFkIG9mIGNvbmZpZy5oCgkqIGZpeGluYy9wcm9jb3Blbi5jOiBMaWtld2lzZS4KCSogZml4aW5jL3JlZ2V4LmM6IExpa2V3aXNlLgoJKiBmaXhpbmMvc2VydmVyLmM6IExpa2V3aXNlLgoKV2VkIE1hciAxNyAyMjo0NjoxMyAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQuCgoJKiBjb25maWcvaTM4Ni9nbzMyLmg6IERlbGV0ZS4KCSogY29uZmlnL2kzODYvZGpncHAuaDogTmV3LiBSZW5hbWVkIGZyb20gZ28zMi5oLgogIAlBZGRlZCAtRERKR1BQPTIgdG8gQ1BQX1BSRURFRklORVMuCgkqIGNvbmZpZy9pMzg2L2dvMzItcnRlbXMuaDogRGVsZXRlLgoJKiBjb25maWcvaTM4Ni9kamdwcC1ydGVtcy5oOiBOZXcuIFJlbmFtZWQgZnJvbSBnbzMyLXJ0ZW1zLmguCiAgCUFkZGVkIC1EREpHUFA9MiB0byBDUFBfUFJFREVGSU5FUy4KCSogY29uZmlnL2kzODYveG0tZ28zMi5oOiBEZWxldGUuCgkqIGNvbmZpZy9pMzg2L3htLWRqZ3BwLmg6IE5ldy4gUmVuYW1lZCBmcm9tIHhtLWdvMzIuaC4KCSogY29uZmlnL2kzODYveC1nbzMyOiBEZWxldGUuCgkqIGNvbmZpZy9pMzg2L3gtZGpncHA6IE5ldy4gUmVuYW1lZCBmcm9tIHgtZ28zMi4KCSogY29uZmlnL2kzODYvdC1nbzMyOiBEZWxldGUuCgkqIGNvbmZpZy9pMzg2L3QtZGpncHA6IE5ldy4gUmVuYW1lZCBmcm9tIHQtZ28zMi4KCSogY29uZmlndXJlLmluKHBjLW1zZG9zZGpncHApOiBTZXQgeG1fZmlsZSB0byBpMzg2L3htLWRqZ3BwLmguCiAgCVNldCB0bV9maWxlIHRvIGkzODYvZGpncHAuaC4gU2V0IHRtYWtlX2ZpbGUgdG8gaTM4Ni90LWRqZ3BwLgogIAlTZXQgeG1ha2VfZmlsZSB0byBpMzg2L3gtZGpncHAuCgkoKi1nbzMyLW1zZG9zLCAqLWdvMzIqKTogUmVtb3ZlIGVudHJpZXMuICBXYXJuIHRoYXQgR08zMi9ESkdQUCBWMS5YCglpcyBub3cgdW5zdXBwb3J0ZWQgYW5kICotcGMtbXNkb3NkamdwcCBmb3IgREpHUFAgVjIuWCBzaG91bGQgYmUKCXVzZWQgaW5zdGVhZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IER1bXAgbGlua19jb21tYW5kX3NwZWMgdG9vLgoKV2VkIE1hciAxNyAyMDozODowOCAxOTk5ICBKZXJyeSBRdWlubiA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCQkJICBKZWZmIExhdyA8bGF3QGN5Z251cy5jb20+CgogICAgICAgICogcGEubWQ6IEFkZCByZWFsIFBBODAwMCBzY2hlZHVsaW5nIGluZm9ybWF0aW9uLgoKICAgICAgICAqIHBhLmggKHByb2Nlc3Nvcl90eXBlKTogIEFkZCBQUk9DRVNTT1JfODAwMCBzeW1ib2wuCiAgICAgICAgKElTU1VFX1JBVEUpOiAgUmV2YW1wLCBpbmNsdWRpbmcgUEE4MDAwIHN1cHBvcnQuCiAgICAgICAgKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogIEFkZCA4MDAwIGFzIC1tc2NoZWR1bGU9IG9wdGlvbi4KCURvIG5vdCBjYWxsIHN0cmNtcCBpZiBwYV9jcHVfc3RyaW5nIGlzIG51bGwuCiAgICAgICAgKiBwYS5tZCAoYXR0ciBjcHUpOiAgQWRkIDgwMDAuCgkqIGludm9rZS50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgUEE4MDAwIHNjaGVkdWxpbmcuCiAgICAgICAgCldlZCBNYXIgMTcgMTg6MjA6MjQgMTk5OSAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChUQVJHRVRfU1dJVENIRVMsIFRBUkdFVF9PUFRJT05TKToKCUFkZCBkZXNjcmlwdGlvbnMuCgkqIGNvbmZpZy9zcGFyYy9zcDY0LWVsZi5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3NwbGV0LmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IExpa2V3aXNlLgoKV2VkIE1hciAxNyAxNDo1MToxOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChjb21wdXRlX2ltbWVkaWF0ZV9kb21pbmF0b3JzKTogTmV3IGZ1bmN0aW9uLgoJKiBiYXNpYy1ibG9jay5oIChjb21wdXRlX2ltbWVkaWF0ZV9kb21pbmF0b3JzKTogRGVjbGFyZSBpdC4KCgkqIGFscGhhLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEFsbG93IG9ubHkgNCBhbmQgOCBieXRlIHVuaXQgbW9kZXMKCWluIEZQIHJlZ3MuCgkoTU9ERVNfVElFQUJMRV9QKTogRGVmaW5lIGFzeW1tZXRyaWNseSB3cnQgbW9kZXMgaWxsZWdhbCBpbiBGUCByZWdzLgoKV2VkIE1hciAxNyAxNDo0MTo0MSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hb3V0LmggKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6IEZpeCBjb21waWxlCgl0aW1lIHdhcm5pbmcuIAkKCSogY29uZmlnL2FybS9hcm0ubWQ6IEZpeCB2YXJpb3VzIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KCSogY29uZmlnL2FybS9hcm0uaDogRml4IHZhcmlvdXMgY29tcGlsZSB0aW1lIHdhcm5pbmdzLiAgQWRkCglmdW5jdGlvbiBwcm90b3R5cGVzLgoJKiBjb25maWcvYXJtL2FybS5jOiBGaXggdmFyaW91cyBjb21waWxlIHRpbWUgd2FybmluZ3MuCgkoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBSZW9yZ2FuaXNlIHRvIHNlcGVyYXRlIHR1bmluZyBmcm9tCgl0YXJnZXR0aW5nLgoJKGJpdF9jb3VudCk6IE5ldyBmdW5jdGlvbjogUmV0dXJuIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBiaXRzCglzZXQgaW4gYSB3b3JkLgoKV2VkIE1hciAxNyAyMToyOToxMiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRG9uJ3Qga2VlcCBSRUdfREVBRCBub3RlcyBhcm91bmQgZm9yCgl0aGluZ3MgdGhhdCB3ZXJlIGVsaW1pbmF0ZWQuCgpXZWQgTWFyIDE3IDEyOjE2OjI2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc18xKTogRmlyc3QgdHJ5IG1vdmluZyB0aGUgZXhwcmVzc2lvbgoJZGlyZWN0bHkgaW50byBhIHJlZ2lzdGVyLiAgRG9uJ3Qgc2VwYXJhdGUgY2MwIHNldHRlciBhbmQgdXNlci4KCldlZCBNYXIgMTcgMTE6MjA6MjkgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY3BwZmlsZXMuYyAoUElQRV9CVUYpOiAjZGVmaW5lIFBJUEVfQlVGIGlmIG5vdCBkZWZpbmVkIGFscmVhZHkuCgpXZWQgTWFyIDE3IDA5OjI1OjA2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCiAgICAgICAgKiBjLWxleC5jOiBEb24ndCBpbmNsdWRlIHNldGptcC5oLgoJKHBhcnNlX2Zsb2F0KTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShwZl9hcmdzKTogTmV3IHN0cnVjdC4KCSh5eWxleCk6IFVzZSB0aGVtIGluIGNhbGwgdG8gYGRvX2Zsb2F0X2hhbmRsZXInLgoKMTk5OS0wMy0xNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY2V4cC55ICh5eWVycm9yKTogQ2FsbCB2ZXJyb3IgdG8gZ2V0IGEgdXNlZnVsbCBlcnJvciBtZXNzYWdlLgoJKiBjZXhwLmM6IFJlYnVpbHQuCgoJKiAuZ2RiaW5pdDogTW92ZSBjb21tYW5kIHRvIHB1dCBicmVha3BvaW50IGF0IGFib3J0IHRvIGVuZCBvZiBmaWxlCglzbyB0aGF0IGdkYiBkb2VzIG5vdCBiYWlsIG91dCBlYXJseS4KClR1ZSBNYXIgMTYgMTU6MzA6MTkgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJ0bC5oOiBSZW5hbWUgcHJvdG90eXBlIGZvciBmcmVlX2JiX21lbW9yeSB0byBmcmVlX2JiX21lbS4gCgpUdWUgTWFyIDE2IDIzOjQwOjA5IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtb3ZzaV9pKTogTW92ZSB0L3IgYWx0ZXJuYXRpdmUgYWZ0ZXIgci9ySSBhbHRlcm5hdGl2ZS4KClR1ZSBNYXIgMTYgMTM6NDQ6NTAgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbW4xMDIwMC9tbjEwMjAwLm1kIChhZGRzaTMsIHN1YnNpMywgYXNobHNpMywgbHNocnNpMywgYXNocnNpMyk6CglEZWxldGUgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUgZGVjbGFyYXRpb24uCgoxOTk5LTAzLTE2IDE2OjA2IC0wNTAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfYW5kX3ByZXNjYW4pOiBNYXAgYmFja3NsYXNoLW5ld2xpbmUgdG8gJ1xyJwoJKHdoaWNoIGNhbm5vdCBvdGhlcndpc2UgYXBwZWFyIGluIHRoZSBwcm9jZXNzZWQgYnVmZmVyKSBhbmQKCW1vdmUgaXQgb3V0IG9mIHRva2VucyB0aGF0IGl0IGFwcGVhcnMgaW4gdGhlIG1pZGRsZSBvZi4KCUltcHJvdmUgcGVyZm9ybWFuY2UuCgkoZmluZF9wb3NpdGlvbik6IE5ldyBmdW5jdGlvbi4KCgkqIGNwcGxpYi5jOiBcciAob25lIGNoYXJhY3RlcikgaW5kaWNhdGVzIGJhY2tzbGFzaAoJbmV3bGluZSwgbm90IFxcXG4gKHR3byBjaGFyYWN0ZXJzKS4gIEl0IGNhbm5vdCBhcHBlYXIgaW4gdGhlCgltaWRkbGUgb2YgYSB0b2tlbi4gIENhbGwgQ1BQX0JVTVBfTElORSAocGZpbGUpIHdoZW5ldmVyCglwYXJzaW5nIG1vdmVzIHBhc3QgXG4gb3IgXHIuICBJbmNyZW1lbnQgcGZpbGUtPmxpbmVubyB3aGVuZXZlcgoJYSBcbiBpcyBwbGFjZWQgaW50byB0b2tlbl9idWZmZXIuICBPbmx5IG9uZSBtYXJrIGNhbiBleGlzdCBhdAoJYSB0aW1lLCBhbmQgQ1BQX0JVTVBfTElORSBtdXN0IG5vdCBiZSB1c2VkIHdoaWxlIGl0IGlzCglhY3RpdmUuICBJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgY3BwX3BvcF9idWZmZXIgYW5kCglwYXJzZV9nb3RvX21hcmsuICBcciBpcyBub3QgaW4gaXNfaG9yX3NwYWNlIG9yIGlzX3NwYWNlLgoKCShORVdMSU5FX0ZJWCwgTkVXTElORV9GSVgxLCBhZGp1c3RfcG9zaXRpb24sCgl1cGRhdGVfcG9zaXRpb24sIGNvdW50X25ld2xpbmVzLCBwYXJzZV9tb3ZlX21hcmspOiBSZW1vdmVkLgoJKHBhcnNlX3N0cmluZywgY29weV9jb21tZW50KTogTmV3IGZ1bmN0aW9ucy4KCShwYXJzZV9uYW1lKTogUmV0dXJucyB2b2lkLgoJKHBhcnNlX3NldF9tYXJrLCBwYXJzZV9jbGVhcl9tYXJrLCBwYXJzZV9nb3RvX21hcmspOiBUYWtlIG9ubHkKCW9uZSBhcmd1bWVudCwgYSBjcHBfcmVhZGVyICouICBDaGFuZ2UgZm9yIG5ldyBtYXJraW5nIHNjaGVtZS4KCShza2lwX2NvbW1lbnQpOiBIYW5kbGUgQ0hJTEwgbGluZSBjb21tZW50cyB0b28uICBTZWNvbmQKCWFyZ3VtZW50IGlzIG5vdyBmaXJzdCBjaGFyYWN0ZXIgb2YgY29tbWVudCBtYXJrZXI7IGFsbCBjYWxsZXJzCgljaGFuZ2VkLiAgSXNzdWUgZXJyb3IgZm9yIHVudGVybWluYXRlZCBibG9jayBjb21tZW50IGhlcmUuCgkoY3BwX3NraXBfaHNwYWNlKTogUmVjb2duaXplIENISUxMIGNvbW1lbnRzLgoJKGNvcHlfcmVzdF9vZl9saW5lKTogTGlrZXdpc2UuICBDYWxsIHNraXBfY29tbWVudCBhbmQKCXBhcnNlX3N0cmluZyBkaXJlY3RseSwgZG9uJ3QgZ28gdGhyb3VnaCBjcHBfZ2V0X3Rva2VuLiAgRW1pdAoJIi8qKi8iIGZvciBibG9jayBjb21tZW50cyBpZiAtdHJhZGl0aW9uYWwgKGNyZWF0ZV9kZWZpbml0aW9uCgluZWVkcyB0aGlzKS4KCShkb19kZWZpbmUpOiBEb24ndCBwbGF5IHdpdGggcHV0X291dF9jb21tZW50cy4KCShjcHBfcHVzaF9idWZmZXIpOiBJbml0aWFsaXplIC0+bWFyayB0byAtMS4KCShjcHBfYnVmX2xpbmVfYW5kX2NvbCk6IEp1c3QgcmVhZCBvdXQgdGhlIHZhbHVlcyBpbiB0aGUgYnVmZmVyCglzdHJ1Y3R1cmUuCgkob3V0cHV0X2xpbmVfY29tbWFuZCk6IFVzZSBjcHBfYnVmX2xpbmVfYW5kX2NvbC4gIEZpeAoJZm9ybWF0dGluZy4gIFJlbW92ZSBzdGFsZSBjb2RlLgoJKGNwcF9nZXRfdG9rZW4pOiBCcmVhayBvdXQgc3RyaW5nIHBhcnNpbmcgY29kZSB0bwoJcGFyc2Vfc3RyaW5nLiAgVXNlIHNraXBfY29tbWVudCBmb3IgQ0hJTEwgY29tbWVudHMgdG9vLiAgVXNlCgljb3B5X2NvbW1lbnQgZm9yIHB1dF9vdXRfY29tbWVudHMgaW5zdGVhZCBvZiBkaW5raW5nIHdpdGgKCW1hcmtzLiAgUmVtb3ZlIHN0YWxlIGNvZGUuICBEb24ndCBjYWxsIG91dHB1dF9saW5lX2NvbW1hbmQKCXVubGVzcyBpdCdzIG5lY2Vzc2FyeS4KCgkqIGNwcGxpYi5oIChwYXJzZV9tYXJrZXIpOiBSZW1vdmVkLgoJKHN0cnVjdCBjcHBfYnVmZmVyKTogbGluZV9iYXNlIGlzIG5vdyBhIHVuc2lnbmVkIGNoYXIgKjsgYWRkCglgbWFyaycgW2xvbmddLCByZW1vdmUgYG1hcmtzJyBbc3RydWN0IHBhcnNlX21hcmtlciAqXS4KCShwYXJzZV9zZXRfbWFyaywgcGFyc2VfY2xlYXJfbWFyaywgcGFyc2VfZ290b19tYXJrKTogVXBkYXRlCglwcm90b3R5cGVzLgoJKENQUF9CVU1QX0xJTkUsIENQUF9CVU1QX0JVRkZFUl9MSU5FKTogTmV3IG1hY3Jvcy4KCSogY3BwaW5pdC5jIChpc19ob3Jfc3BhY2UsIGlzX3NwYWNlKTogJ1xyJyBpcyBub3QgY29uc2lkZXJlZAoJd2hpdGVzcGFjZS4KCSogY3BwZXhwLmMgKGNwcF9wYXJzZV9leHByZXNzaW9uKTogVXNlIGNwcF9za2lwX2hzcGFjZSwgbm90CglTS0lQX1dISVRFX1NQQUNFLgoJKiBjcHBoYXNoLmMgKG1hY2FyZyk6IERpc2FibGUgbGluZSBjb21tYW5kcyB3aGlsZSBleHBhbmRpbmcuCgpUdWUgTWFyIDE2IDExOjMwOjE5IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogYy1sZXguYyAoeXlsZXgpIDogUmVtb3ZlIHdhcm5pbmcgZm9yIGludGVnZXIgbGl0ZXJhbHMgYmVpbmcKCWxhcmdlciB0aGFuIHRoZSBsYXJnZXN0IHRhcmdldCBpbnQuICBBZGQgd2FybmluZyBmb3IgaW50ZWdlcgoJbGl0ZXJhbCBiZWluZyBsYXJnZXIgdGhhbiB0aGFuIGl0cyBjaG9vc2VuIHR5cGUuCgpUdWUgTWFyIDE2IDEwOjUzOjE3IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogaW52b2tlLnRleGk6IEFkZCAtbWxvbmczMiBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvbWlwcy9taXBzLmggKG1pcHNfZXhwbGljaXRfdHlwZV9zaXplX3N0cmluZyk6IE5ldy4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgJ2xvbmczMicuCgkoVEFSR0VUX09QVElPTlMpOiBBZGQgJ2V4cGxpY2l0LXR5cGUtc2l6ZScuCgkoQ0MxX1NQRUNTKTogU2V0IC1tZXhwbGljaXQtdHlwZS1zaXplLgogICAgICAgIChMT05HX01BWF9TUEVDKTogQ2hhbmdlIGEgdXNlIG9mICduby1sb25nNjQnIHRvICdsb25nMzInLgoJKiBjb25maWcvbWlwcy9hYmk2NC5oIChMT05HX01BWF9TUEVDKTogU2FtZS4gIEFkZCAnbWFiaT0zMicuCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19leHBsaWNpdF90eXBlX3NpemVfc3RyaW5nKTogTmV3LgoJKG92ZXJyaWRlX29wdGlvbnMpOiBVc2UgaXQuCgkqIGNvbmZpZy9taXBzL29zZnJvc2UuaCAoQ0MxX1NQRUNTKTogU2V0IC1tZXhwbGljaXQtdHlwZS1zaXplLgoKCSogY29uZmlnL21pcHMvbWlwcy5oIChTVUJUQVJHRVRfQ1BQX1NJWkVfU1BFQyk6IAoJUG9pbnRlciBzaXplIG5vdyBkZXBlbmRzIG9uIGJvdGggc2l6ZSBsb25ncyBhbmQgc2l6ZSBvZiBHUAoJcmVnaXN0ZXJzLgoKVHVlIE1hciAxNiAxMDoyMjoyMiAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL2lyaXMuaCAoQ1RPUlNfU0VDVElPTl9BU01fT1AsRFRPUlNfU0VDVElPTl9BU01fT1AsCglkdG9yc19zZWN0aW9uKTogVXNlIFBtb2RlID09IERJbW9kZSByYXRoZXIgdGhhbiBUQVJHRVRfTE9ORzY0LgoJKiBjb25maWcvbWlwcy9taXBzLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBBbGxvdyAtbWxvbmc2NCBhbmQKCS1taW50NjQgd2l0aCAtbWlwczIgb3IgbGVzcy4KCSogY29uZmlnL21pcHMvbWlwcy5oIChNQVNLX0xPTkc2NCk6IEZpeCBjb21tZW50LgoJKFBPSU5URVJfU0laRSk6IFVzZSBQbW9kZSA9PSBESW1vZGUgcmF0aGVyIHRoYW4gVEFSR0VUX0xPTkc2NC4KCShQbW9kZSk6IE1ha2UgUG1vZGUgdGhlIHNtYWxsZXIgb2YgbG9uZ3Mgb3IgZ3AgcmVnaXN0ZXJzLgoJKiBpbnZva2UudGV4aTogTm90ZSB0aGUgbmV3IHNpemUgZm9yIHBvaW50ZXJzLgoKTW9uIE1hciAxNSAyMjo0NToyNSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoQVNNX09VVFBVVF97RE9VQkxFLEZMT0FUfSk6IEFsd2F5cyBnZW5lcmF0ZSBJRUVFIDc1NAoJYml0LXBhdHRlcm4gZGlyZWN0bHkuCgkoQVNNX09VVFBVVF9SRUdfe1BVU0gsUE9QfSk6IERlbGV0ZS4KCSogcnM2MDAwLmMgKGZpcnN0X3JlZ190b19zYXZlKTogSWYgcHJvZmlsaW5nIGFuZCBjb250ZXh0IG5lZWRlZCwKCWFsbG9jYXRlIGEgcmVnIHRvIHNhdmUgc3RhdGljIGNoYWluIGZvciBhbGwgQUJJcy4gIEZvciBBSVgKCXByb2ZpbGluZywgY2FsY3VsYXRlIHBhcmFtZXRlciByZWdpc3RlcnMgdG8gc2F2ZSBiYXNlZCBvbiBuZWVkLgoJKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IFNhdmUgYW5kIHJlc3RvcmUgc3RhdGljIGNoYWluIGFyb3VuZAoJcHJvZmlsZSBjYWxsIGZvciBhbGwgQUJJcy4gCgoxOTk5LTAzLTE1IDIxOjM5IC0wNTAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGluaXQuYzogSW5zdGVhZCBvZiBvbmUgcGVuZGluZyBsaXN0LCBrZWVwIHNlcGFyYXRlIGxpc3RzCglmb3IgZWFjaCBjYXRlZ29yeSBvZiBwZW5kaW5nIG9wdGlvbjogLUQvLVUsIC1BLCAtaW5jbHVkZSwKCS1pbWFjcm9zLiAgTW92ZSB0aGUgZm91ciBwYXJ0aWFsIGluY2x1ZGUtcGF0aCBsaXN0cyBpbnRvIHRoZQoJcGVuZGluZyBibG9jay4gIFVzZSBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzIHNvIHdlIGRvbid0IGV2ZXIKCWhhdmUgdG8gcmV2ZXJzZSB0aGUgbGlzdHMuCgoJKGNwcF9zdGFydF9yZWFkKTogQnJlYWsgb3V0IGJsb2NrcyBvZiBjb2RlIHRvIHRoZWlyIG93bgoJZnVuY3Rpb25zOiBpbnN0YWxsX3ByZWRlZnMgYW5kIGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQuCglVc2UgcGF0aF9pbmNsdWRlIGZvciBDX0lOQ0xVREVfUEFUSCBhbmQgZnJpZW5kcyBhcyB3ZWxsIGFzCglDUEFUSC4gIFJlbW92ZSBpbmNsdWRlX2RlZmF1bHRzIGd1bmsuICBXYXJuIGFib3V0IHRoZQoJY29tYmluYXRpb24gb2YgLWxhbmctY2hpbGwgYW5kIC10cmlncmFwaHMuICBPcHRpbWl6ZSBzdHJpbmcKCWJhc2hpbmcuICBXYWxrIGVhY2ggcGVuZGluZyBsaXN0IG9uY2UsIGRlYWxsb2NhdGluZyBhcyB3ZSBnby4KCgkoYXBwZW5kX2luY2x1ZGVfY2hhaW4pOiBCcm91Z2h0IG92ZXIgZnJvbSBjcHBmaWxlcy5jLiAgTWFyawoJZGlycyBhcyBzeXN0ZW0gaW5jbHVkZSBkaXJzIGlmIGFuZCBvbmx5IGlmIGFwcGVuZGluZyB0bwoJc3lzdGVtIGluY2x1ZGUgcGF0aC4gSWYgb3B0cy0+dmVyYm9zZSwgcHJpbnQgYSBub3RpY2Ugd2hlbiBhCglkaXIgaXMgZHJvcHBlZCBmcm9tIHRoZSBpbmNsdWRlIHBhdGggYmVjYXVzZSBpdCBkb2Vzbid0CglleGlzdC4gIEZpeCBtZW1vcnkgbGVhazogdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9zZWQgdG8gY29weQoJaXRzIERJUiBhcmd1bWVudC4KCgkobnJldmVyc2VfcGVuZGluZywgcHVzaF9wZW5kaW5nKTogUmVtb3ZlZC4KCShBUFBFTkQpOiBOZXcgbWFjcm8gZm9yIGFkZGluZyB0byBwZW5kaW5nIGxpc3RzLgoJKHBhdGhfaW5jbHVkZSk6IENhbiBub3cgYWRkIHRvIGFueSBwYXJ0aWFsIGluY2x1ZGUgcGF0aC4KCShiYXNlX25hbWUpOiBCcmluZyBvdmVyIGZyb20gY2NjcC5jLgoJKGNwcF9vcHRpb25zX2luaXQpOiBBbGxvY2F0ZSB0aGUgcGVuZGluZyBibG9jay4KCShjcHBfaGFuZGxlX29wdGlvbik6IEFkZCAtLXZlcnNpb24uICBFeGl0IGFmdGVyIC0taGVscC4gIEZpeAoJZm9ybWF0dGluZy4gIE9yZGVyIC1pZm9vIG9wdGlvbnMgYnkgZnJlcXVlbmN5IG9mIHVzYWdlLgoJKGluc3RhbGxfcHJlZGVmcyk6IE5ldyBmdW5jdGlvbiwgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIGNvZGUKCXRoYXQgd2FzIGluIGNwcF9zdGFydF9yZWFkLgoJKGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQpOiBMaWtld2lzZS4gIFVuZGVyc3RhbmQgT0JKRUNUX1NVRkZJWC4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogRXhwb3J0LgoJKG1lcmdlX2luY2x1ZGVfY2hhaW5zKTogIERvbid0IG5yZXZlcnNlIHRoZSBsaXN0cy4gIElmCglvcHRzLT52ZXJib3NlLCBwcmludCBhIG5vdGljZSB3aGVuIGEgZHVwbGljYXRlIGRpciBpcyBkZXRlY3RlZAoJYW5kIGRyb3BwZWQgZnJvbSB0aGUgaW5jbHVkZSBwYXRoLgoJKGZpbmNsdWRlKTogRml4IGV4Y2Vzc2l2ZSBjbGV2ZXJuZXNzIGluIHNldHRpbmcKCWZwLT5zeXN0ZW1faGVhZGVyX3AuCgkoYWN0dWFsX2RpcmVjdG9yeSk6IFNldCB4LT5zeXNwIGZyb20KCUNQUF9CVUZGRVIgKHBmaWxlKS0+c3lzdGVtX2hlYWRlcl9wIHNvIHRoYXQgb25lIHN5c3RlbSBoZWFkZXIKCW1heSBpbmNsdWRlIGFub3RoZXIgd2l0aCAiIi4KCShkZXBzX291dHB1dCk6IEZpeCBkb3VibGUgYWRqdXN0bWVudCBvZiBkZXBzX3NpemUgd2hpY2ggd291bGQKCWNhdXNlIGFsbCBkZXBlbmRlbmNpZXMgYWZ0ZXIgdGhlIGZpcnN0IHR3byBsaW5lcyB0byBiZSBsb3N0LgoKCSogY3BwbGliLmMgKGNwcF91bmFzc2VydCk6IE5ldyBmdW5jdGlvbi4KCSogY3BwbGliLmg6IExheSBvdXQgc3RydWN0IGNwcF9wZW5kaW5nIGhlcmUuICBBZGp1c3QKCXByb3RvdHlwZXMuICBBZGQgaW5jbHVkZV9wcmVmaXhfbGVuIHRvIHN0cnVjdCBjcHBfb3B0aW9ucy4KCk1vbiBNYXIgMTUgMTY6MDE6NTIgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pc3AvbWlwcy5oIChSRUdJU1RFUl9NT1ZFX0NPU1QpOiBNYWtlIHRoZSBjb3N0IG9mIG1vdmluZwogCWZyb20gSEkvTE8vSElMTy9NRCBpbnRvIGdlbmVyYWwgcmVnaXN0ZXJzIHRoZSBzYW1lIGFzIGZvciBvbmUKIAlvZiBtb3ZpbmcgZ2VuZXJhbCByZWdpc3RlcnMgdG8gSEkvTE8vSElMTy9NRC4KCk1vbiBNYXIgMTUgMTI6Mzk6MzggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAoaW5pdF9pZGVudHMpOiBOZXcgZnVuY3Rpb24uICBJbml0aWFsaXNlCglzdGF0aWMgdHJlZSBub2RlcyBmb3IgbTMyciBzcGVjaWZpYyBhdHRyaWJ1dGUgaWRlbnRpZmllcnMuICBSZW1vdmUKCWxlYWRpbmcgYW5kIHRyYWlsaW5nIGRvdWJsZSB1bmRlcnNjb3JlcyBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZXMuCgkobTMycl92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogQ2FsbCBpbml0X2lkZW50cy4KCShtMzJyX2VuY29kZV9zZWN0aW9uX2luZm8pOiBDYWxsIGluaXRfaWRlbnRzLgoKTW9uIE1hciAxNSAxMDoyMDoyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFkZCBhIFJFR19MQUJFTCBub3RlIGlmIHdlIHN1YnN0aXR1dGUgYQoJTEFCRUxfUkVGIGZvciBzb21ldGhpbmcgZWxzZS4KCk1vbiBNYXIgMTUgMDg6MjQ6MTcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKICAgICAgICAqIGZvbGQtY29uc3QuYyAoZXhhY3RfcmVhbF9pbnZlcnNlKTogTW92ZSB2YXJpYWJsZSBgZmxvYXRfZXJyb3InCglpbnRvIHRoZSBzY29wZSB3aGVyZSBpdCBpcyB1c2VkLgoJKGNvbnN0X2Jpbm9wXzEpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKGNiX2FyZ3MpOiBOZXcgc3RydWN0LgoJKGNvbnN0X2Jpbm9wKTogVXNlIHRoZW0gaW4gY2FsbCB0byBgZG9fZmxvYXRfaGFuZGxlcicuCgkoZm9sZF9jb252ZXJ0XzEpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKGZjX2FyZ3MpOiBOZXcgc3RydWN0LgoJKGZvbGRfY29udmVydCk6IFVzZSB0aGVtIGluIGNhbGwgdG8gYGRvX2Zsb2F0X2hhbmRsZXInLgoKTW9uIE1hciAxNSAyMjo1MDoxOCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBydGxhbmFsLmMgKGF1dG9faW5jX3ApOiBOZXcgZnVuY3Rpb24uCiAgICAgICAgKiBydGwuaCAoYXV0b19pbmNfcCk6IFByb3RvdHlwZSBpdC4KCSogcmVsb2FkMS5jIChhZGRfYXV0b19pbmNfbm90ZXMpOiBOZXcgZnVuY3Rpb24uCgkocmVsb2FkKTogU3RyaXAgUkVHX0lOQyBub3RlcyBhbmQgY2FsbCBhZGRfYXV0b19pbmNfbm90ZXMKCWZvciBlYWNoIGluc24gdG8gcmVzdG9yZSB0aGVtIGNvcnJlY3RseS4KCjE5OTktMDMtMTUgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbiAocHJvY29wZW4ubyk6IExpc3QgdGhlIGFjdHVhbAoJZGVwZW5kZW5jaWVzLgoKU3VuIE1hciAxNCAxNjoyMjoxMCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjc2UuYyAoY2hlY2tfZm9sZF9jb25zdHMpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKGNmY19hcmdzKTogTmV3IHN0cnVjdC4KCShzaW1wbGlmeV9yZWxhdGlvbmFsX29wZXJhdGlvbik6IFVzZSB0aGVtIGluIGNhbGwgdG8KCWBkb19mbG9hdF9oYW5kbGVyJy4KCQoJKiB0b3BsZXYuYyAoZG9fZmxvYXRfaGFuZGxlcik6IE5ldyBmdW5jdGlvbiB0byB3cmFwIGNhbGxzIHRvCglzZXRqbXAvc2V0X2Zsb2F0X2hhbmRsZXIuCgoJKiB0b3BsZXYuaCAoZG9fZmxvYXRfaGFuZGxlcik6IEFkZCBleHRlcm4gcHJvdG90eXBlLgoKCSogdHJlZS5jIChidWlsZF9yZWFsX2Zyb21faW50X2NzdF8xKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShicmZpY19hcmdzKTogTmV3IHN0cnVjdC4KCShidWlsZF9yZWFsX2Zyb21faW50X2NzdCk6IFVzZSB0aGVtIGluIGNhbGwgdG8KCWBkb19mbG9hdF9oYW5kbGVyJy4KClN1biBNYXIgMTQgMDE6MTU6MDYgUFNUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgTWFyIDEzIDE3OjM3OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBPbmx5IGNsZWFyIHJlZ19sYXN0X3VzZXMgb24gYSBTRVQuCgpTYXQgTWFyIDEzIDExOjM2OjE2IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uYyAoYXJtX3NwbGl0X2NvbnN0YW50KTogRG9uJ3QgdHJ5IHRvIGZvcmNlIGEgY29uc3RhbnQgdG8KCW1lbW9yeSBhZnRlciBhcm1fcmVvcmcgaGFzIHJ1bi4KCShhZnRlcl9hcm1fcmVvcmcpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGFybV9yZW9yZyk6IFNldCBpdC4KCShvdXRwdXRfZnVuY19lcGlsb2d1ZSk6IENsZWFyIGl0LgoKRnJpIE1hciAxMiAyMDoyNjozMiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4gKHtyczYwMDAscG93ZXJwY30taWJtLWFpeCopOiBTZXQgZmxvYXRfZm9ybWF0IHRvIG5vbmUuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCkZyaSBNYXIgMTIgMjA6NDU6MzAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogdW5yb2xsLmMgKGxvb3BfaXRlcmF0aW9ucyk6IERvbid0IHJldHVybiBhIGZpbmFsIHZhbHVlIGZvciBFUQoJY29tcGFyaXNvbiBsb29wcy4KCkZyaSBNYXIgMTIgMTI6MzU6MDEgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogcmVsb2FkMS5jIChjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zKTogV2hlbiBpZ25vcmUgZXF1aXZhbGVuY2UKCXNldHRpbmcgaW5zbiwgY2xlYXIgbmVlZF9lbGltLCBuZWVkX3JlbG9hZCwgYW5kIG5lZWRfb3BlcmFuZF9jaGFuZ2UuCgpGcmkgTWFyIDEyIDA3OjU0OjQzIDE5OTkgIEJydWNlIEtvcmIgPGtvcmJAZGF0YWRlc2lnbi5jb20+CgoJKiBmaXhpbmMvZml4aW5jLio6IFNvbWUgY2hhbmdlcyBmcm9tIHRoZSBmaXhpbmNsLWJyYW5jaAoJd2VyZSBub3QgYXBwbGllZCAoPz8hISkuICBDb3JyZWN0ZWQuCgoJKiBmaXhpbmMvTWFrZWZpbGUuaW46IHNhbWUgdGhpbmcuCgpGcmkgTWFyIDEyIDAwOjUxOjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBBbGxvdyBhIENBTExfRVhQUiB3aXRoIGEgbW9kZSB3aWRlciB0aGFuCglNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFLgoKVGh1IE1hciAxMSAxNDowMDo1OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRGlzYWxsb3cgUUkvSEltb2RlIGluIGZwIHJlZ3MuCgkoTU9ERVNfVElFQUJMRV9QKTogVXBkYXRlLgoKCSogYWxwaGEubWQgKGV2NV9lMCk6IENvbmZsaWN0IGxvYWRzIGFuZCBzdG9yZXMuCgpUaHUgTWFyIDExIDEzOjU1OjUyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtYWNobW9kZS5oIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUHJvdG90eXBlLgoJKiBzdG9yLWxheW91dC5jIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUmVtb3ZlIHN0YXRpYy4KClRodSBNYXIgMTEgMjE6MjU6NTkgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEb24ndCBkbyBiaXYgaW5jcmVtZW50IC0+IERFU1RfUkVHIGdpdgoJY29udmVyc2lvbiBpZiB3ZSBkb24ndCBrbm93IHRoZSBsaWZldGltZS4KClRodSBNYXIgMTEgMjA6Mzc6NTkgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLjFjIChkZWxldGVfYWRkcmVzc19yZWxvYWRzXzEpOiAgQ2hlY2sgZm9yIHJlbG9hZHMgb2YKCUNVUlJFTlRfSU5TTiBldmVuIGlmIGl0IHNldHMgRFNULgoKVGh1IE1hciAxMSAxMDoyOTo1MCAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoYWRkX0FUX2xibF9vZmZzZXQpOiBSZW5hbWUgZnJvbSBhZGRfQVRfc2VjdGlvbl9vZmZzZXQuCgkocHJpbnRfZGllLCBzaXplX29mX2RpZSwgdmFsdWVfZm9ybWF0LCBvdXRwdXRfZGllKTogQWRqdXN0LgoKVGh1IE1hciAxMSAxMDoyNzo0MiAxOTk5ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIGR3YXJmMm91dC5jIChURVhUX1NFQ1RJT05fTEFBQkVMLCBERUJVR19MSU5FX1NFQ1RJT05fTEFCRUwsCglERUJVR19JTkZPX1NFQ1RJT05fTEFCRUwsIEFCQlJFVl9TRUNUSU9OX0xBQkVMLCAKCXRleHRfc2VjdGlvbl9sYWFiZWwsIGRlYnVnX2xpbmVfc2VjdGlvbl9sYWJlbCwKCWRlYnVnX2luZm9fc2VjdGlvbl9sYWJlbCwgYWJicmV2X3NlY3Rpb25fbGFiZWwpOiBOZXcuCgkob3V0cHV0X2NvbXBpbGF0aW9uX3VuaXRfaGVhZGVyKTogIEVtaXQgbGFiZWwgYXNzb2NpYXRlZAoJd2l0aCBzZWN0aW9uIGluc3RlYWQgb2Ygc2VjdGlvbiBuYW1lIGl0c2VsZi4KCShvdXRfcHVibmFtZXMsIG91dHB1dF9hcmFuZ2VzLCBvdXRwdXRfbGluZV9pbmZvLCAKCWR3YXJmMm91dF9maW5pc2gpOiBMaWtld2lzZS4KCShkd2FyZjJvdXRfaW5pdCk6IEJ1aWxkIGludGVybmFsIGxhYmVsIG5hbWVzIGZvciBzZWN0aW9ucwoJZnJvbSBzdGF0aWMgbGFiZWxzLgoKVGh1IE1hciAxMSAxNzoyODozMiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobXVsc2kzKTogRW5kIG11bC5sIHNlcXVlbmNlIHdpdGggYSBuby1vcCBtb3ZlLgoKVGh1IE1hciAxMSAwODo1MjowMiAxOTk5ICBCcnVjZSBLb3JiIDxrb3JiQGRhdGFkZXNpZ24uY29tPgoKCSogTWFrZWZpbGUuaW46IGFjdGl2YXRlZCBmaXhpbmMvbWtmaXhpbmMuc2gKCSogY29uZmlndXJlLmluOiBhY3RpdmF0ZWQgZml4aW5jL21rZml4aW5jLnNoCgpUaHUgTWFyIDExIDAxOjM4OjAyIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY3BwZmlsZXMuYyAoSU5PX1RfRVEpOiBIYW5kbGUgVVdJTi4KCgkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IEZsYWcgdW5yZWNvZ25pemVkIGF0dHJpYnV0ZQoJZnVuY3Rpb25zIGFzIHdhcm5pbmdzIGluc3RlYWQgb2YgYXMgZXJyb3JzLgoKCVN1cHBvcnQgZm9yIGkzODYtcGMtdXdpbi4KCSogaTM4Ni91d2luLmg6IE5ldyBmaWxlLgoJKiBpMzg2L3htLXV3aW4uaDogTmV3IGZpbGUuCgkqIGkzODYvdC11d2luOiBOZXcgZmlsZS4KCSogaTM4Ni91d2luLmFzbTogTmV3IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2XTg2LSotdXdpbiopOiBEZWZpbmUuCglBZGQgV29ya2Fyb3VuZCBmb3IgdmZvcmsgYnVnIHdoZW4gaG9zdGVkIG9uIHV3aW4uCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYyAoSU5PX1RfRVEpOiBVbmRlZmluZS4gVVdJTiBoYXMgaW5vZGVzLgoJKGFic29sdXRlX2ZpbGVuYW1lKTogVVdJTiB1c2VzIFBPU0lYIHBhdGhuYW1lcyBvbmx5LgoJKiBsaWJnY2MyLmMgKGdldHBhZ2VzaXplKTogRG8gbm90IGRlZmluZSBmb3IgVVdJTi4KCShtcHJvdGVjdCk6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChkaXJlbnQuaCk6IENvbmRpdGlvbmFsbHkgaW5jbHVkZS4KCShmcHV0Yyk6IFByb3RvdHlwZSBvbmx5IGlmIGl0J3Mgbm90IGEgbWFjcm8uCgpXZWQgTWFyIDEwIDAyOjQ5OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGluaXRfcHJpb3JpdHkgc3R1ZmYuCgoxOTk5LTAzLTExICBDb2xpbiBTbWl0aCA8Y29saW5Ad3JzLmNvbT4KCgkqIHNkYm91dC5jIChwbGFpbl90eXBlXzEpOiBNYWtlIGJvb2xlYW4gdHlwZXMgd29yayBiZXR0ZXIgd2l0aCBzZGIuCgpUaHUgTWFyIDExIDAwOjIwOjUyIDE5OTkgIEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBnY2MudGV4aTogVXBkYXRlIGJ1ZyByZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zIHRvIG1hdGNoCgljdXJyZW50IGV6bWxtIGxpc3QgcmVhbGl0eS4KCldlZCBNYXIgMTAgMjM6MTE6MTkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKHByaW50X2ZpbGVfbmFtZSwgcHJpbnRfcHJvZ19uYW1lLCBzcGVjX21hY2hpbmUsCiAJcmVhZF9zcGVjcywgc2V0X3NwZWMsIGxvb2t1cF9jb21waWxlciwgYnVpbGRfc2VhcmNoX2xpc3QsCiAJcHV0ZW52X2Zyb21fcHJlZml4ZXMsIGZpbmRfYV9maWxlLCByZWNvcmRfdGVtcF9maWxlLAogCWRlbGV0ZV9pZl9vcmRpbmFyeSwgaGFuZGxlX2JyYWNlcywgZG9fc3BlYywgZG9fc3BlY18xLCBmaW5kX2ZpbGUsCiAJaXNfZGlyZWN0b3J5LCB2YWxpZGF0ZV9zd2l0Y2hlcywgdXNlZF9hcmcsIGRlZmF1bHRfYXJnLAogCXBmYXRhbF93aXRoX25hbWUsIHBlcnJvcl93aXRoX25hbWUsIHBmYXRhbF9wZXhlY3V0ZSwgZmF0YWwsIGVycm9yLAogCW5vdGljZSwgYWRkX3ByZXByb2Nlc3Nvcl9vcHRpb24sIGFkZF9hc3NlbWJsZXJfb3B0aW9uLAogCWFkZF9saW5rZXJfb3B0aW9uLCBwcm9jZXNzX2NvbW1hbmQsIGV4ZWN1dGUsCiAJdW51c2VkX3ByZWZpeF93YXJuaW5ncywgY2xlYXJfYXJncywgZmF0YWxfZXJyb3IsCiAJbGFuZ19zcGVjaWZpY19kcml2ZXIsIHVzZXJfc3BlY3MsIGNvbXBpbGVyLCBsaW5rX2NvbW1hbmRfc3BlYywKIAlvcHRpb25fbWFwLCB0cmFuc2xhdGVfb3B0aW9ucywgbWFrZV90ZW1wX2ZpbGUsIHRlbXBfbmFtZSwKIAlwcm9ncmFtbmFtZSwgcGF0aF9wcmVmaXgsIG1hY2hpbmVfc3VmZml4LCBqdXN0X21hY2hpbmVfc3VmZml4LAogCWdjY19leGVjX3ByZWZpeCwgc3RhbmRhcmRfZXhlY19wcmVmaXgsIHN0YW5kYXJkX2V4ZWNfcHJlZml4XzEsCiAJbWRfZXhlY19wcmVmaXgsIG1kX3N0YXJ0ZmlsZV9wcmVmaXgsIG1kX3N0YXJ0ZmlsZV9wcmVmaXhfMSwKIAlzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4LCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEsCiAJc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yLCB0b29sZGlyX2Jhc2VfcHJlZml4LCB0b29sZGlyX3ByZWZpeCwKIAltdWx0aWxpYl9kaXIsIHRlbXBfZmlsZW5hbWUsIHRlbXBfZmlsZSwgY29tbWFuZCwgc3dpdGNoc3RyLAogCWluZmlsZSwgb3V0ZmlsZXMsIGlucHV0X2ZpbGVuYW1lLCBpbnB1dF9iYXNlbmFtZSwgaW5wdXRfc3VmZml4LAogCWNoZWNrX2xpdmVfc3dpdGNoLCBtYWluKTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCldlZCBNYXIgMTAgMjA6Mjg6MjkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbGNtLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEFkZCBsY20ubwoJKGxjbS5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIGdjc2UuYyAoY29tcHV0ZV9wcmVfbG9jYWxfcHJvcGVydGllcyk6IERlbGV0ZS4KCShjb21wdXRlX3ByZV9kYXRhKTogVXNlIGNvbXB1dGVfbG9jYWxfcHJvcGVydGllcyBpbnN0ZWFkIG9mCgljb21wdXRlX3ByZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBNb3JlIGNvbW1lbnRzLCB3aGl0ZXNwYWNlIGFuZCBzaW1pbGFyIGZpeGVzLgoJKGR1bXBfY3VpZF90YWJsZSwgbWF5YmVfc2V0X3JkX2dlbiwgZHVtcF9jcHJvcF9kYXRhKTogRGVsZXRlLgoJKGR1bXBfcHJlX2RhdGEsIGNvbXB1dGVfY3Byb3BfbG9jYWxfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKG9uZV9jbGFzc2ljX2djc2VfcGFzcyk6IExvc2UgdW51c2VkIGFyZ3VtZW50LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjb21wdXRlX2hhc2hfdGFibGUsIGNvbXB1dGVfZXhwcl9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9zZXRfaGFzaF90YWJsZSwgb25lX3ByZV9nY3NlX3Bhc3MsIG1hcmtfY2FsbCk6IExpa2V3aXNlLgoJKGNwcm9wX2luc24sIGNwcm9wLCBvbmVfY3Byb3BfcGFzcyk6IEFkZCBuZXcgYXJndW1lbnQgQUxURVJfSlVNUFMuCglBbGwgY2FsbGVycyBjaGFuZ2VkLiAgT25seSBhbHRlciBqdW1wcyBpZiBBTFRFUl9KVU1QUyBpcyBub256ZXJvLgoJTG9zZSB1bnVzZWQgYXJndW1lbnQuCgkoZ2NzZV9tYWluKTogQWx3YXlzIHJ1biBhIGNwcm9wIHBhc3MgYWZ0ZXIgZmluaXNoaW5nIGdsb2JhbCBjc2UuCgkoY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzKTogTmV3IGZ1bmN0aW9uLgoJKGhhc2hfc2Nhbl9wYXQsIGhhc2hfc2Nhbl9pbnNuKTogTm8gbG9uZ2VyIGNhbGwgbWF5YmVfc2V0X3JkX2dlbi4KCShjb21wdXRlX2Nwcm9wX2RhdGEpOiBVc2UgY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBVcGRhdGUgdmFyaW91cyBjb21tZW50cy4KCShjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2xvbmdqbXApOiBEZWxldGUgZGVjbGFyYXRpb24uCgoJKiBnY3NlLmMgKHJ1bl9qdW1wX29wdF9hZnRlcl9nY3NlKTogTmV3IHZhcmlhYmxlLgoJKGdjc2VfbWFpbik6IFJldHVybnMgYW4gaW50ZWdlci4KCShoYXNoX3NjYW5fc2V0KTogUmVjb3JkIGluaXRpYWxpemF0aW9ucyBmcm9tIENPTlNUX0RPVUJMRXMgdG9vLgoJKHRyeV9yZXBsYWNlX3JlZyk6IFVwZGF0ZSBzb21lIGNvbW1lbnRzLgoJKGNwcm9wX2luc24pOiBBbGxvdyBwcm9wYWdhdGlvbiBpbnRvIHNvbWUgSlVNUF9JTlNOcyB0b28uCgkqIHJ0bC5oIChnY3NlX21haW4pOiBVcGRhdGUgcHJvdG90eXBlLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IElmIGdjc2VfbWFpbiByZXR1cm5zIG5vbnplcm8sCgl0aGVuIHJ1biBhIGp1bXAgb3B0aW1pemF0aW9uIHBhc3MuCgkqIGp1bXAuYyAoZGVsZXRlX2JhcnJpZXJfc3VjY2Vzc29ycyk6IERlbGV0ZSBub3AganVtcHMgdG9vLgoKV2VkIE1hciAxMCAxOTowNDozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5jIChmcF9hcml0aF9yZWdfb3BlcmFuZCk6IEFjdHVhbGx5IHRlc3QgaWYgcmVnIGlzIHN1aXRhYmxlCglmb3IgRlAgYXJpdGhtZXRpYy4gIENoYW5nZWQgY2FsbGVyLgoJKiBzaC5tZCAoc3Vic2YzLCBzdWJzZl9pKTogVXNlIGZwX2FyaXRoX3JlZ19vcGVyYW5kLgoKV2VkIE1hciAxMCAxODo1NjozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IFdoZW4gaW5oZXJpdGluZyBmcm9tIHRoZSBmcmFtZQoJcG9pbnRlciwgZG9uJ3QgY2xvYmJlciBpdC4KCldlZCBNYXIgMTAgMDg6MDE6NTIgMTk5OSAgQnJ1Y2UgS29yYiA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIGZpeGluYy9maXhpbmMuKjogUmVzeW5jLWVkIHdpdGggdGhlIGZpbGVzIGluIHRoaXMKCWRpcmVjdG9yeS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogdGhlIG1hY2hpbmUgY2FzZSBlbGVtZW50cyB3ZXJlCglvdXQtb2Ytb3JkZXIuICAodGhlIGl4ODYtKi1saW51eC1nbnUqIGVudHJ5IG5lZWRlZCB0bwoJYmUgZWFybGllcikuCgpXZWQgTWFyIDEwIDAwOjAxOjI0IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IEZpeCBjYWxjdWxhdGlvbiBvZiBudW1iZXIKCW9mIGFmZmVjdGVkIHJlZ2lzdGVycy4KClR1ZSBNYXIgIDkgMTU6NDg6MTUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAodGlkeV9mYWxsdGhydV9lZGdlKTogQmUgbW9yZSBjYXJlZnVsIGZpbmRpbmcgdGhlIGxhc3QKCUJBUlJJRVIgb2YgYSBsaXN0LiAgRGVsZXRlIHRoZSBjYzAgc2V0dGVyIGFzIHdlbGwgYXMgYSBjb25kIGp1bXAuCgpUdWUgTWFyICA5IDE1OjI2OjAyIDE5OTkgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGJpdHJhbmdlLmNvbT4KCgkqIGkzODYubWQgKGFzaGxzaTMgc3BsaXR0ZXIpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KClR1ZSBNYXIgIDkgMTE6MzU6MjAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZy1zdGFjay5jIChzdGFja19yZWdfbGlmZV9hbmFseXNpcyk6IFVzZSByZXR1cm5qdW1wX3AKCWluc3RlYWQgb2YgYW4gZXhwbGljaXQgdGVzdCBmb3IgUkVUVVJOLgoKVHVlIE1hciAgOSAwOTozMzoxNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAodG9wbGV2Lm8pOiBEZXBlbmQgb24gJChCQVNJQ19CTE9DS19IKS4KCgkqIHRvcGxldi5jOiBJbmNsdWRlIGJhc2ljLWJsb2NrLmguCgpUdWUgTWFyICA5IDAyOjA4OjE3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNhbGxzLmMgKGxvYWRfcmVnaXN0ZXJfcGFyYW1ldGVycyk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfY2FsbCk6IFVzZSBpdC4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU2xpZ2h0bHkgcmVvcmdhbml6ZSBjb2RlLgoKCSogY2FsbHMuYyAoY29tcHV0ZV9hcmd1bWVudF9hZGRyZXNzZXMpOiBOZXcgZnVuY3Rpb24uCgkocnR4X2Zvcl9mdW5jdGlvbl9jYWxsKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9jYWxsKTogVXNlIHRoZW0uCgoJKiBpMzg2Lm1kICh6ZXJvX2V4dGVuZGhpc2kyKTogU3BsaXQgaW50byBhbiBleHBhbmRlciBhbmQgYW5vbnltb3VzCglwYXR0ZXJuLiAgQWRkIG5ldyBhbm9ueW1vdXMgcGF0dGVybiBmb3IgdXNlIHdoZW4gb3B0aW1pemluZyBmb3IKCXNpemUgb3IgZm9yIHRoZSBQUHJvLgoJKHplcm9fZXh0ZW5kcWloaTIsIHplcm9fZXh0ZW5kcWlzaTIpOiBMaWtld2lzZS4KCk1vbiBNYXIgIDggMjM6NDM6NDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emVfMSk6IEZpeCBsYXN0IGNoYW5nZSAtLSBhZGQgY2xvYmJlcgoJZGVwZW5kYW5jaWVzIHRvIHNldHMgaW4gdGhlIG5vbi1oYXJkLXJlZyBjYXNlIHRvby4KCk1vbiBNYXIgIDggMTg6NTU6MjEgMTk5OSAgTWFyYyBFc3BpZSA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKICAgICAgICAqIGNvbmZpZy9vcGVuYnNkLmggKEhBTkRMRV9TWVNWX1BSQUdNQSk6IERlZmluZS4KCk1vbiBNYXIgIDggMTY6MDQ6NDQgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbG9jYWwtYWxsb2MuYyAoY29tYmluZV9yZWdzKTogRG9uJ3QgY29tYmluZSBpZiB3ZSBoYXZlIGEgaGFyZCByZWcKCWZvciB3aGljaCBDTEFTU19MSUtFTFlfU1BJTExFRF9QIGlzIHRydWUuCgoJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25zKTogT25seSBjYWxsIGxvb3BfZmluZF9lcXVpdl92YWx1ZSBpZiB3ZQoJaGF2ZSBhIFJFRyBvciBTVUJSRUcuCgpNb24gTWFyICA4IDE1OjI3OjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQgKGFzaGxzaTMpOiBSZXZpc2UgY29tbWVudHMuICBQcm92aWRlIG5ldyBhbm9ueW1vdXMKCXBhdHRlcm4gZm9yIFBlbnRpdW0gYW5kIFBQcm8vUElJLiAgUmV2ZXJzZSBjb25zdHJhaW50cyBpbiAKCWdlbmVyaWMgYXNobHNpMyBhbm9ueW1vdXMgcGF0dGVybi4KCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mbyk6IEFjY2VwdCBhIHBvaW50ZXIgdG8gCglDVU1VTEFUSVZFX0FSR1MuCgkoZXhwYW5kX2NhbGwpOiBQYXNzIHRoZSBhZGRyZXNzIG9mIENVTVVMQVRJVkVfQVJHUy4KCgkqIHJzNjAwMC94bS1zeXN2NC5oIChIT1NUX0JJVFNfUEVSX0xPTkdMT05HKTogUmVtb3ZlICNpZiAwLgoKCSogbW4xMDMwMC5oIChDQVNFX0RST1BTX1RIUk9VR0gpOiBEZWxldGUuCgkqIG1uMTAyMDAuaCAoQ0FTRV9EUk9QU19USFJPVUdIKTogRGVsZXRlLgoJKiBoODMwMC5oIChDQVNFX0RST1BTX1RIUk9VR0gpOiBEZWxldGUuCgoJKiBmbG93LmMgKG1lcmdlX2Jsb2Nrc19ub21vdmUpOiBGb3IgSEFWRV9jYzAgdGFyZ2V0cywgbWFrZSBzdXJlCgl0byBhbHNvIGRlbGV0ZSB0aGUgY2MwIHNldHRlciB3aGVuIGRlbGV0aW5nIGEgY29uZGl0aW9uYWwgYnJhbmNoCgl0byB0aGUgbmV4dCBibG9jay4KCk1vbiBNYXIgIDggMTg6NDc6MTEgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnbW92ZS5jIChjb3B5X3NyY190b19kZXN0KTogTmV3IGFyZ3VtZW50IG1heF9vbGRfdWlkLgoKTW9uIE1hciAgOCAwODoyMzowMCAxOTk5ICBCcnVjZSBLb3JiIDxrb3JiQGRhdGFkZXNpZ24uY29tPgoKCSogQ2hhbmdlTG9nOiBtZXJnZWQgZW50cmllcyBmcm9tIGZpeGluY2wtYnJhbmNoCgpTdW4gTWFyICA3IDExOjQ4OjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChFTkNPREVfQkxPQ0tBR0UpOiBEb24ndCBzaGlmdCB1bml0IHRvbyBmYXIuCgkocHJpbnRfZXhwKTogU3BlY2lhbCBjYXNlIGFkZGl0aW9uIG9mIGEgY29uc3RhbnQuCgkocHJpbnRfdmFsdWUpIFtDT05TVF9JTlRdOiBVc2UgSE9TVF9XSURFX0lOVF9QUklOVF9IRVguCgpTdW4gTWFyICA3IDExOjIxOjAyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChyZWdfbGFzdF9jbG9iYmVycyk6IE5ldy4KCShyZWdfcGVuZGluZ19jbG9iYmVycywgYmJfcmVnX2xhc3RfY2xvYmJlcnMpOiBOZXcuCgkoY29tcHV0ZV9ibG9ja19iYWNrd2FyZF9kZXBlbmRlbmNlcyk6IEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlbS4KCShzY2hlZHVsZV9yZWdpb24pOiBMaWtld2lzZS4KCShzY2hlZF9hbmFseXplXzEpOiBDbG9iYmVycyBkb24ndCBpbnRlcmZlcmUgd2l0aCBvbmUgYW5vdGhlci4KCVRoZXkgZG8gaW50ZXJmZXJlIHdpdGggc2V0cyAuLi4KCShzY2hlZF9hbmFseXplXzIpOiAuLi4gYW5kIHVzZXMuCgkoc2NoZWRfYW5hbHl6ZSk6IExpa2V3aXNlLgoJKHNjaGVkX2FuYWx5emVfaW5zbik6IFVwZGF0ZSByZWdfbGFzdF9jbG9iYmVycyBhcHByb3ByaWF0ZWx5LgoKU3VuIE1hciAgNyAwODozMDozNyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnbW9uLXNvbDIuYzogSW5jbHVkZSBjb25maWcuaCBhbmQgc3lzdGVtLmguICBEb24ndCByZWR1bmRhbnRseQoJaW5jbHVkZSBzeXN0ZW0gaGVhZGVyIGZpbGVzLgoJKHNjY3NpZCk6IFJlbW92ZS4KCShtb25jb250cm9sLCBtb25zdGFydHVwLCBfbWNsZWFudXAsIGludGVybmFsX21jb3VudCk6IFByb3RvdHlwZS4KCShfbWNsZWFudXApOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZCB0byBhIGNoYXIqLgoJKGludGVybmFsX21jb3VudCk6IERlY2xhcmUgYGV0ZXh0JyBhcyBhIGNoYXJbXSBub3QgYSBmdW5jdGlvbi4KCUNhc3QgYGV0ZXh0JyB0byBjaGFyKiB3aGVuIGNhbGxpbmcgYG1vbnN0YXJ0dXAnLgoKCSogc3BhcmMuYyAoZnJhbWVfYmFzZV9uYW1lLCBzYXZlX3JlZ3MsIHJlc3RvcmVfcmVncywKCWJ1aWxkX2JpZ19udW1iZXIsIHNwYXJjX2Ntb2RlbF9zdHJpbmcsIHNwYXJjX2FsaWduX2xvb3BzX3N0cmluZywKCXNwYXJjX2FsaWduX2p1bXBzX3N0cmluZywgc3BhcmNfYWxpZ25fZnVuY3Nfc3RyaW5nLCBjb2RlX21vZGVsLAoJY3B1X2RlZmF1bHQsIGNwdV90YWJsZSwgb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlLAoJb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlLCBvdXRwdXRfcmV0dXJuLAoJc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsIHVsdHJhX2NvZGVfbmFtZXMsCglzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IENvbnN0aWZ5IGEgY2hhciouCgkoaHlwZXJzcGFyY19hZGp1c3RfY29zdCk6IEFkZCBhIGRlZmF1bHQgY2FzZSBpbiBhIHN3aXRjaC4KCgkqIHNwYXJjLmggKHNwYXJjX2Ntb2RlbF9zdHJpbmcsIE9WRVJSSURFX09QVElPTlMsCglzcGFyY19jcHVfc2VsZWN0LCBzcGFyY19hbGlnbl9sb29wc19zdHJpbmcsCglzcGFyY19hbGlnbl9qdW1wc19zdHJpbmcsIHNwYXJjX2FsaWduX2Z1bmNzX3N0cmluZywKCW91dHB1dF9yZXR1cm4pOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogc3BhcmMubWQgKG1vdmRpKTogQ2hhbmdlIHRoZSBjb21wYXJpc29uIG9mIEhPU1RfQklUU19QRVJfV0lERV9JTlQKCXNvIHRoYXQgd2UgY2hlY2sgIj09IDMyIiwgaW5zdGVhZCBvZiAiIT0gNjQiLiAgQ2FzdCBhIHZhbHVlIHRvCiAJSE9TVF9XSURFX0lOVCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIEhpZGUgdGhlIGRlY2xhcmF0aW9uCiAJZm9yIHZhcmlhYmxlIGBjaGFpbicuCgpTdW4gTWFyICA3IDA4OjA1OjI3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oIChjb25zdCwgaW5saW5lKTogTW92ZSB0aGUgc3RhZ2UyIGhhbmRsaW5nIG9mIHRoZXNlCiAJa2V5d29yZHMtYXMtbWFjcm9zIGZyb20gaGVyZS4uLgoKCSogZ2Fuc2lkZWNsLmggKGNvbnN0LCBpbmxpbmUpOiAuLi50byBoZXJlLgoKU3VuIE1hciAgNyAwMjo0NDoxNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVjb2cuYyAocHVzaF9vcGVyYW5kLCBwb3Bfb3BlcmFuZCk6IFZPSURtb2RlIG5lZWRuJ3QgbWF0Y2ggbW9kZXMuCgpTdW4gTWFyICA3IDAxOjU4OjQ3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoY2Fub25faGFzaCk6IE5ldmVyIHJlamVjdCBoYXJkIHJlZ3MgaW4gQ0Ntb2RlLgoKU3VuIE1hciA3IDAxOjE1OjA0IFBTVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IE1hciAgNiAxNzoxODo0NCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogSGFuZGxlIGNhc2VzaSB0aGF0IGp1bXAgdG8gZGVmYXVsdCBicmFuY2guCglJZiBDQVNFX0RST1BTX1RIUk9VR0gsIGZvcmNlIGZhbGx0aHJ1IHRvIGJsb2NrIGFmdGVyIGNhc2VzaS4KClNhdCBNYXIgIDYgMDc6NDk6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1hdXgtaW5mby5jIChkYXRhX3R5cGUsIGFmZml4X2RhdGFfdHlwZSwgZ2VuX2RlY2wsIAogCWdlbl9mb3JtYWxfbGlzdF9mb3JfdHlwZSwgZ2VuX2Zvcm1hbF9saXN0X2Zvcl9mdW5jX2RlZiwgZ2VuX3R5cGUpOgoJUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCgkqIGMtY29tbW9uLmMgKGRlY2xhcmVfaGlkZGVuX2NoYXJfYXJyYXksIGFkZF9hdHRyaWJ1dGUsIGlmX2VsdCwKIAlkZWNsYXJlX2Z1bmN0aW9uX25hbWUsIGRlY2xfYXR0cmlidXRlcywgZm9ybWF0X2NoYXJfaW5mbywKIAljaGVja19mb3JtYXRfaW5mbywgYmluYXJ5X29wX2Vycm9yKTogTGlrZXdpc2UuCgkKCSogY2V4cC55ICh5eWVycm9yLCBlcnJvciwgcGVkd2Fybiwgd2FybmluZywgdG9rZW4pOiBMaWtld2lzZS4KCgkqIGdjc2UuYyAoZHVtcF9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgoJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogTGlrZXdpc2UKCgkqIG9wdGFicy5jOiBJbmNsdWRlIGluc24tY29uZmlnLmggZWFybGllci4KCShpbml0X2xpYmZ1bmNzLCBpbml0X2ludGVncmFsX2xpYmZ1bmNzLCBpbml0X2Zsb2F0aW5nX2xpYmZ1bmNzKToKCVF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCgkKCSogcmVhbC5jIChhc2N0b2UyNCwgYXNjdG9lNTMsIGFzY3RvZTY0LCBhc2N0b2UxMTMsIGFzY3RvZSwKIAlhc2N0b2VnLCBtdGhlcnIsIGVyZWFsX2F0b2YpOiBMaWtld2lzZS4KCgkqIHJlYWwuaCAoZXJlYWxfYXRvZik6IExpa2V3aXNlLgoKCSogc2JpdG1hcC5jIChkdW1wX3NiaXRtYXBfdmVjdG9yKTogTGlrZXdpc2UuCgoJKiBzYml0bWFwLmggKGR1bXBfc2JpdG1hcF92ZWN0b3IpOiBMaWtld2lzZS4KCgkqIHN0bXQuYyAobmVzdGluZywgbl9vY2N1cnJlbmNlcywgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCgoJKiB0cmVlLmggKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCwgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCQpGcmkgTWFyICA1IDIzOjE2OjQyIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChBU01fT1VUUFVUX1JFR197UFVTSCxQT1B9KTogQWRkIDY0LWJpdCBzdXBwb3J0IGFuZCBkbwoJbm90IG92ZXJ3cml0ZSBBSVggbGluayByZWdpc3RlciBzYXZlIGFyZWEuCgpGcmkgTWFyICA1IDIzOjA4OjAxIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfc3VicmVnX2FkZHJlc3MpOiBBY3R1YWxseSBjcmVhdGUgdGhlIFVTRQoJZm9yIHRoZSByZWdpc3Rlciwgbm90IHRoZSBuZXcgbWVtb3J5IGxvY2F0aW9uLgoKRnJpIE1hciAgNSAyMTo0MTowNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogSWYgcHNldWRvIHRoYXQgY2FuJ3QgYmUgcmVwbGFjZWQKCXdpdGggaXRzIGVxdWl2YWxlbnQgY29uc3RhbnQsIGZhbGwgYmFjayB0byByZWxvYWRfaW4uCgpGcmkgTWFyICA1IDEzOjIwOjM5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbjogRGVsZXRlIC5mbG93MiBkZWJ1Z2dpbmcgZmlsZXMuCgpGcmkgTWFyICA1IDExOjM2OjExIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IENoYW5nZSBkZWZhdWx0IHRhcmdldAoJY3B1IHNlbGVjdGlvbiBzbyB0aGF0IGVuYWJsaW5nIFRBUkdFVF9BUENTXzMyIGRvZXMgbm90IG92ZXJyaWRlCglkZWZhdWx0IHRhcmdldCBDUFUuCgpGcmkgTWFyICA1IDE5OjI2OjIzIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmggKFNMT1dfQllURV9BQ0NFU1MpOiBEZWZpbmUgdG8gMS4KCShCT09MX1RZUEVfU0laRSk6IERlZmluZS4KCkZyaSBNYXIgIDUgMDI6MTQ6NTQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBBYm9ydAoJaWYgbW9kZSA9PSBCbGttb2RlIGFuZCBhbGlnbiBpcyBsZXNzIHRoYW4KCUJJR0dFU1RfQUxJR05NRU5UIC8gQklUU19QRVJfVU5JVC4KCShhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSk6IFJvdW5kIHRoZSBzaXplIHBhcmFtZXRlcgoJcGFzc2VkIHRvIGFzc2lnbl9zdGFja19sb2NhbCBpbnN0ZWFkIG9mIHNpemUgaXRzZWxmLgoKVGh1IE1hciAgNCAxNTowMDozNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogTWFyayBibG9ja3MgYXMgdGhleQoJYXJlIHB1dCBvbiB0byB0aGUgd29ya2xpc3QsIG5vdCBhcyB0aGV5IGFyZSB0YWtlbiBvZmYuCgpUaHUgTWFyICA0IDAwOjA1OjQ0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmMgKGN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXApOiBSZW1vdmUgZHVwbGljYXRlCglkZWZpbml0aW9uLgoKV2VkIE1hciAgMyAxOTowOToxMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBtNjhrL202ODAyMC1lbGYuaCAoSU5JVF9TRUNUSU9OX0FTTV9PUCwgRklOSV9TRUNUSU9OX0FTTV9PUCk6IFVuZGVmLgoJKFNUQVJURklMRV9TUEVDLCBFTkRGSUxFX1NQRUMpOiBEZWZpbmUgdG8gZW1wdHkgc3RyaW5nLgoKCSogc3BhcmMvZWxmLmggKE1VTERJM19MSUJDQUxMLCBESVZESTNfTElCQ0FMTCwgVURJVkRJM19MSUJDQUxMLAoJTU9EREkzX0xJQkNBTEwsIFVNT0RESTNfTElCQ0FMTCwgU1REQ18wX0lOX1NZU1RFTV9IRUFERVJTKTogVW5kZWYuCgkoSU5JVF9TVUJUQVJHRVRfT1BUQUJTKTogRGVmaW5lIHRvIGVtcHR5LgkKCldlZCBNYXIgIDMgMDA6MDA6MzcgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guYyAoZm9yY2VfaW50byk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfYmxvY2tfbW92ZSk6IFVzZSBpdC4KClR1ZSBNYXIgIDIgMTA6Mzk6NDMgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNjY3AuYyAoc3RydWN0IGRlZmF1bHRfaW5jbHVkZSk6IEFkZCAnaW5jbHVkZWQnIGZpZWxkLgoJKG1haW4pOiBTZXQgJ2luY2x1ZGVkJyBmaWVsZCB3aGVuIGEgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yeQoJaXMgYWRkZWQgdG8gdGhlIGNoYWluLiAgSWYgLXYgaXMgc3BlY2lmaWVkIGxpc3QgYWxsIGRlZmF1bHQKCWluY2x1ZGUgZGlyZWN0b3JpZXMgd2hpY2ggZG8gbm90IGdldCBhcHBlbmRlZCB0byB0aGUgY2hhaW4uCgpUdWUgTWFyICAyIDA5OjI0OjEwIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGd4eF9pbmNsdWRlX2Rpcik6IFJlbmFtZSB0bwoJZ2NjX2d4eF9pbmNsdWRlX2RpciBpbiBvcmRlciB0byBwcmV2ZW50IGl0IGJlaW5nIG92ZXJyaWRkZW4gYnkKCWEgdG9wIGxldmVsIE1ha2VmaWxlLgoJKGdjY190b29sZGlyKTogSWYgJGV4ZWNfcHJlZml4ICE9ICRwcmVmaXggdGhlbiB1c2UgdGhlCglkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBhcyB0aGUgYmFzaXMgZm9yIGdjY190b29sZGlyLgoKCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKCSogTWFrZWZpbGUuaW46IFJlbmFtZSBneHhfaW5jbHVkZV9kaXIgdG8gZ2NjX2d4eF9pbmNsdWRlX2Rpci4KClR1ZSBNYXIgIDIgMTY6NDU6MzEgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgbWFrZSBleHRyYSBjb3BpZXMgb2YKCU5PVEVfSU5TTl9MT09QX0NPTlQgbm90ZXMuCgpUdWUgTWFyICAyIDA3OjQ0OjU2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBEb24ndCB0cmVhdCBmdW5jdGlvbnMgd2l0aCBubyBjb250ZXh0CglhcyBuZXN0ZWQuCgpUdWUgTWFyICAyIDA5OjM3OjA1IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogTWFrZWZpbGUuaW4gKE1BS0VJTkZPKTogVXNlIG1ha2VpbmZvIGJ1aWx0IGZyb20gc2libGluZwoJdHJlZSB3aGVuIGF2YWlsYWJsZS4KClR1ZSBNYXIgIDIgMTA6MTI6NDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWxwaGEuYyAoYWxwaGFfY3B1X25hbWUsIGFscGhhX2NwdV9zdHJpbmcsIGFscGhhX3RwX3N0cmluZywKIAlhbHBoYV9mcHJtX3N0cmluZywgYWxwaGFfZnB0bV9zdHJpbmcsIGFscGhhX21sYXRfc3RyaW5nLAoJY3VycmVudF9mdW5jdGlvbl9maWxlKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQuCgkobm9ybWFsX21lbW9yeV9vcGVyYW5kKTogTWFyayBwYXJhbWV0ZXIgYG1vZGUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoYWxwaGFfZXhwYW5kX3VuYWxpZ25lZF9sb2FkKTogQWRkIGEgZGVmYXVsdCBjYXNlIHRvIGEgc3dpdGNoLgoKCSogYWxwaGEuaCAoYWxwaGFfY3B1X3N0cmluZywgYWxwaGFfZnBybV9zdHJpbmcsIGFscGhhX2ZwdG1fc3RyaW5nLAoJYWxwaGFfdHBfc3RyaW5nLCBhbHBoYV9tbGF0X3N0cmluZyk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoJKG5vcm1hbF9tZW1vcnlfb3BlcmFuZCk6IEFkZCBwcm90b3R5cGUuCgkKCSogYWxwaGEubWQ6IENhc3QgYW4gZXhwcmVzc2lvbiB0byBgdW5zaWduZWQgSE9TVF9XSURFX0lOVCcgd2hlbgogCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KClR1ZSBNYXIgIDIgMTA6MDA6MjEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWlwcy5jIChhYm9ydF93aXRoX2luc24pOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYywgYWRkIGEgcHJvdG90eXBlLAoJY29uc3RpZnkgMm5kIHBhcmFtZXRlciBhbmQgbWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX25vX21pcHMxNl9zdHJpbmcsIG1pcHNfZW50cnlfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSwgbG9hZF9zdG9yZSwKCW92ZXJyaWRlX29wdGlvbnMsIG1ha2VfdGVtcF9maWxlLCBtaXBzMTZfZnBfYXJncyk6IFF1YWxpZnkgYSBjaGFyKgoJd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogbWlwcy5oIChjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX2VudHJ5X3N0cmluZywgbWlwc19ub19taXBzMTZfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSk6IExpa2V3aXNlLgoJKGFib3J0X3dpdGhfaW5zbik6IFJlbW92ZSBleHRlcm4gcHJvdG90eXBlLgoKCSogbWlwcy5tZDogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCVJlbW92ZSBtYW55IHVudXNlZCB2YXJpYWJsZXMgbmFtZWQgYGxhYmVsJy4KClR1ZSBNYXIgIDIgMDE6Mjc6NTIgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogTWFrZWZpbGUuaW4gKGNwcF9pbnN0YWxsX2RpciwgSU5TVEFMTF9DUFAsIFVOSU5TVEFMTF9DUFApOiBOZXcKCXZhcmlhYmxlcy4KCShpbnN0YWxsLWNwcCwgdW5pbnN0YWxsLWNwcCk6IE5ldyB0YXJnZXRzLgoJKGluc3RhbGwtbm9ybWFsKTogRGVwZW5kIG9uICQoSU5TVEFMTF9DUFApLgoJKHVuaW5zdGFsbCk6IERlcGVuZCBvbiAkKFVOSU5TVEFMTF9DUFApLgoJKiBjb25maWd1cmUuaW4gKGNwcF9pbnN0YWxsX2Rpcik6IE5ldywgc3Vic3RpdHV0ZS4KCSh0bWFrZV9maWxlKTogQWRkZWQgdC1pbnN0YWxsLWNwcCBmb3IgLS1lbmFibGUtY3BwLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNwcC5zaDogTmV3IGNwcCBzY3JpcHQuCgkqIGNvbmZpZy90LWluc3RhbGwtY3BwOiBOZXcgdGFyZ2V0IGZyYWdtZW50LgoKVHVlIE1hciAgMiAwMTo0MDowMSAxOTk5ICBGcmFueiBTaXJsIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KICAgICAgICAgICAgICAgICAgICAgICAgICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjc2UuYyAoZm9sZF9ydHgpOiBVcGRhdGUgY29tbWVudHMgZm9yIChjb25zdCAobWludXMgKGxhYmVsKSAobGFiZWwpKSkKCWNhc2UuCgkoY3NlX2luc24pOiBBdm9pZCBjcmVhdGluZyBhIGJvZ3VzIFJFR19FUVVBTCBub3RlIGZvcgoJKGNvbnN0IChtaW51cyAobGFiZWwpIChsYWJlbCkpKQoJKHJlY29yZF9qdW1wX2NvbmQpOiBGaXggbWlzbWF0Y2hlZCBwYXJlbiBpbiBjb21tZW50LgoKVHVlIE1hciAgMiAwMTowNzoxMiAxOTk5ICBEYW4gTmljb2xhZXNjdSAgPGRhbm5AZ29kemlsbGEuaWNzLnVjaS5lZHU+CgoJKiBmaW5hbC5jIChlbmRfZmluYWwpOiBUaGVyZSBhcmUgMTEgd29yZHMgaW4gdGhlICJtYWluIGhlYWRlciIKCXN0cnVjdHVyZSwgbm90IDEwLgoKVHVlIE1hciAgMiAwMDowOToxOCAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBleHRlbmQudGV4aTogUmVmZXJlbmNlIF9fZXh0ZW5zaW9uX18gaW4gdGhlIGluZGV4LgoKTW9uIE1hciAgMSAxOTowOTozMiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ1JPU1NfRkxPQVRfSCk6IERlbGV0ZS4KCShGTE9BVF9IKTogVXNlIGZsb2F0X2hfZmlsZS4KCShyZXN0LmNyb3NzLCBzdG1wLWludC1oZHJzKTogRGVsZXRlIGdmbG9hdC5oIGRlcGVuZGVuY3kuCgkoZ2Zsb2F0LmgpOiBEZWxldGUuCgkoc3RtcC1pbnQtaGRycyk6IFVzZSBGTE9BVF9IIGluc3RlYWQgb2YgZ2Zsb2F0LmguCgkobW9zdGx5Y2xlYW4pOiBEZWxldGUgZ2xvYXQuaCByZWZlcmVuY2UuCgkoaW5zdGFsbC1jcm9zcy1yZXN0LCBpbnN0YWxsLWZsb2F0LWgtY3Jvc3MsIHN0bXAtaGVhZGVycyk6IFVwZGF0ZQoJY29tbWVudHMuCgkqIGNvbmZpZ3VyZS5pbiAoc3BhcmN2OS0qLXNvbGFyaXMyKik6IFNldCBmbG9hdF9mb3JtYXQgdG8gbm9uZS4KCShzcGFyYy0qLXNvbGFyaXMyKik6IFNldCBmbG9hdF9mb3JtYXQgdG8gbm9uZSBmb3IgMi41IGFuZCBoaWdoZXIuCgkoZmxvYXRfaF9maWxlKTogU2V0IGZyb20gZmxvYXRfZm9ybWF0LiAgU3Vic3RpdHV0ZSBpbnRvIE1ha2VmaWxlLmluLgoJKGZsb2F0X2Zvcm1hdCk6IE5vIGxvbmdlciBzdWJzdGl0dXRlIGludG8gTWFrZWZpbGUuaW4uCQoJKiBjcm9zcy1tYWtlIChGTE9BVF9IKTogRGVsZXRlLgoJKiBjb25maWcvbWlwcy90LWNyb3NzNjQgKEZMT0FUX0gpOiBEZWxldGUuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCQpNb24gTWFyICAxIDE2OjM2OjE4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKGRpdl90cmFwX25vcm1hbCwgZGl2X3RyYXBfbWlwczE2KTogUmVxdWlyZSB0aGUgZGVwZW5kZW50CglpbnNuIHRvIGJlIGFuIElOU04gYmVmb3JlIGxvb2tpbmcgYXQgaXRzIHBhdHRlcm4uCgpNb24gTWFyICAxIDE1OjAzOjUxIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tNjhrL2xiMXNmNjguYXNtICh1ZGl2c2kzKTogQ2hhbmdlIGptaSB0byBqY3MuICBGaXggY29tbWVudHMuCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoTEVHSVRJTUFURV9JTkRFWF9SRUdfUCk6IFJlamVjdCBTSUdOX0VYVEVORCBvZgoJSEltb2RlIHJlZyB3aGVuIFRBUkdFVF81MjAwLgoKTW9uIE1hciAgMSAyMTo0NDozMCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJRnJvbSBUb3NoaXlhc3UgTW9yaXRhOgoJKiBzaC5oIChDQUNIRV9MT0cpOiBTSDIgaGFzIGNhY2hlLCB0b28uCgpNb24gTWFyICAxIDE0OjIzOjM2IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgogCiAgICAgICAgKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogIERpc2FibGUgLWZmdW5jdGlvbi1zZWN0aW9ucyBhbmQKICAgICAgICBkZWJ1Z2dpbmcgd2FybmluZyBpZiB0aGUgb2JqZWN0IGZvcm1hdCBpcyBlbGYuCiAKTW9uIE1hciAgMSAxMTo0NjoyNSAxOTk5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9oODMwMC9oODMwMC5jIChwcmludF9vcGVyYW5kKTogIFVzZSAxNiBiaXQgYWRkcmVzc2luZwoJd2hlbiB0aGUgZGF0YSBpbiA4LWJpdCBhcmVhIGFuZCBjYW4gbm90IGJlIGFkZHJlc3NlZCBieSA4LWJpdC4KClN1biBGZWIgMjggMTY6NDA6MDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoY3JlYXRlX2Jhc2ljX2Jsb2NrKTogRGlzcmVnYXJkIGludGVncmF0ZWQgYmIgbm90ZXMuCgpTdW4gRmViIDI4IDE1OjU3OjA2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzcGFyYy5tZCAoYmxvY2thZ2UsIG5vbmxvY2FsX2dvdG9fcmVjZWl2ZXIpOiBTZXQgbGVuZ3RoIHRvIDAuCgpTdW4gRmViIDI4IDE0OjQ3OjUzIDE5OTkgIEFydHVybyBNb250ZXMgIDxtaXRvc3lzQGNvbG9tc2F0LmNvbS5jbz4KCiAgICAgICAgKiBjb25maWcvaTM4Ni90LXNjbzVnYXMgKGNydGkubyk6IE5ldyB0YXJnZXQuCgpTdW4gRmViIDI4IDE1OjEwOjE3IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoZWxmX2hpZ2gsIG1vdnNpX2dvdCwgKm1vdnNpX2dvdF9pbnRlcm5hbCwKCSptb3ZzaV9nb3RfaW50ZXJuYWxfbWVtLCBHT1Qgc3BsaXR0ZXIsIG1vdmRmX2hhcmRmbG9hdDMyLAoJbW92ZGZfc29mdGZsb2F0MzIsIG1vdmRmX2hhcmRmbG9hdDY0LCBtb3ZkZl9zb2Z0ZmxvYXQ2NCwKCWxvYWRfbXVsdGlwbGUsIGFsbG9jYXRlX3N0YWNrLCBjYWxsX2luZGlyZWN0X2FpeDMyLAoJY2FsbF9pbmRpcmVjdF9haXg2NCwgY2FsbF92YWx1ZV9pbmRpcmVjdF9haXgzMiwKCWNhbGxfdmFsdWVfaW5kaXJlY3RfYWl4NjQsIGNhbGxfaW5kaXJlY3RfbnQsCgljYWxsX3ZhbHVlX2luZGlyZWN0X250KTogVXNlIGdwY19yZWdfb3BlcmFuZCBpbnN0ZWFkIG9mCglyZWdpc3Rlcl9vcGVyYW5kLiAKClN1biBGZWIgMjggMTU6MTA6MTcgMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAubWQgKG9uZV9jbXBsc2kyLCBhbmRzaTMsIGlvcnNpMywgeG9yc2kzLCAqZXF2c2kzLAoJKmFuZGNzaTMsICppb3Jjc2kzLCAqbmFuZHNpMywgKm5vcnNpMyk6IEFkZCBhbHRlcm5hdGl2ZXMgdG8gdXNlIENSCglvdGhlciB0aGFuIGNyMC4KCSogcnM2MDAwLmMgKGFuZHssNjR9X29wZXJhbmQpOiBJZiB0aGUgdXNlciBkaWQgLWZmaXhlZC1jcjAsIGRvbid0CglhbGxvdyBhbmRpLiBvciBhbmRpcy4gd2hpY2ggYWx3YXlzIHNldCBjcjAuCgpTdW4gRmViIDI4IDAxOjE1OjA0IFBTVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAyOCAwMjowMDozOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpbnZva2UudGV4aTogVXBkYXRlIGluZm9ybWF0aW9uIGZvciBQQSBzY2hlZHVsaW5nLgoKU2F0IEZlYiAyNyAyMzoyMTo0NyAxOTk5ICBKZXJyeSBRdWlubiA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCQkJICBNaWtlIFN0dW1wIDxtcnNAd3JzLmNvbT4KCgkqIHBhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBDaGFuZ2UgZGVmYXVsdCB0byA3MTAwTEMKCgkqIHBhLmggKFJFR19BTExPQ19PUkRFUik6IENoYW5nZSBvcmRlciB0byBhbGxvY2F0ZSBsZWZ0IGhhbGYgb2YKCWZsb2F0IHJlZ3MgYmVmb3JlIHJpZ2h0IGhhbGYgb2YgZmxvYXQgcmVncy4KClNhdCBGZWIgMjcgMjI6NDg6MzggMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZyYW1lLmg6IFVwZGF0ZSBzb21lIGNvbW1lbnRzLgoJKiBkZWZhdWx0cy5oIChUQVJHRVRfQVRUUklCVVRFX1dFQUspOiBEZWZpbmUuCgkqIGNydHN0dWZmLmMgKF9fcmVnaXN0ZXJfZnJhbWVfaW5mbywgX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8pOiBEZWNsYXJlCgl1c2luZyBUQVJHRVRfV0VBS19BVFRSSUJVVEUuCgkoX19kb19nbG9iYWxfZHRvcnNfYXV4KTogQ2hlY2sgaWYgX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8gaXMKCXplcm8gYmVmb3JlIGNhbGxpbmcgaXQuCgkoX19kb19nbG9iYWxfZHRvcnMpOiBMaWtld2lzZS4KCShmcmFtZV9kdW1teSk6IENoZWNrIGlmIF9fcmVnaXN0ZXJfZnJhbWVfaW5mbyBpcyB6ZXJvIGJlZm9yZQoJY2FsbGluZyBpdC4KCShfX2ZyYW1lX2R1bW15KTogTGlrZXdpc2UuCgpTYXQgRmViIDI3IDE5OjE4OjI0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIFNFUlZJQ0U6IFVwZGF0ZSBmcm9tIHRoZSBGU0YuCgpTYXQgRmViIDI3IDE0OjMxOjIyIDE5OTkgIEFydHVybyBNb250ZXMgIDxtaXRvc3lzQGNvbG9tc2F0LmNvbS5jbz4KCiAgICAgICAgKiBjb25maWcvaTM4Ni90LXNjbzUgKGNydGkubyk6IE5ldyB0YXJnZXQuCiAgICAgICAgKiBjb25maWcvaTM4Ni9zY281LmggKFNUQVJURklMRV9TUEVDKTogSW5jbHVkZSBjcnRpLm8gd2hlbiAKICAgICAgICBsaW5raW5nIC1zaGFyZWQuCiAgICAgICAgKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1zY28zLjJ2NSopOiBBZGQgY3J0aS5vLgoKU2F0IEZlYiAyNyAwMToxMjo0MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZC50ZXhpIChwcm9sb2d1ZSxlcGlsb2d1ZSk6IERvY3VtZW50IG5hbWVkIHBhdHRlcm5zLgoKRnJpIEZlYiAyNiAxOTozMToyNSAxOTk5ICBEYXZlIExvdmUgIDxmeEBnbnUub3JnPgoKCSogbWQudGV4aSwgaW52b2tlLnRleGk6IEZpeCB1bnRlcm1pbmF0ZWQgQHhyZWZzLgoKRnJpIEZlYiAyNiAxNTozMzo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuYXR0cnRhYi5jIChzaW1wbGlmeV9rbm93aW5nKTogRml4IHVuaW5pdGlhbGl6ZWQgcmVhZAoJaW4gRmViIDIxIGNoYW5nZS4KCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IENsZWFyIHJlY29nX29wZXJhbmRzIGJlZm9yZSBleHRyYWN0aW5nLgoKRnJpIEZlYiAyNiAwMjoyNDo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjLXByYWdtYS5jIChhZGRfd2Vhayk7IERlbGV0ZS4gIE1vdmVkIGludG8uLi4KCSogdmFyYXNtLmMgKGFkZF93ZWFrKTogTmV3IGV4dGVybmFsIGZ1bmN0aW9uLgoJKGRlY2xhcmVfd2Vhayk6IElmIEhBTkRMRV9QUkFHTUFfV0VBSywgdGhlbiBhZGQgdGhlIGZ1bmN0aW9uIHRvCgl0aGUgbGlzdCBvZiB3ZWFrIGZ1bmN0aW9ucy4KCSogYy1wcmFnbWEgKGFkZF93ZWFrKTogRGVjbGFyZS4KClRodSBGZWIgMjUgMjM6NDM6NTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCglGbG93IHJld3JpdGUgdG8gdXNlIGJhc2ljIGJsb2NrIHN0cnVjdHVyZXMgYW5kIGVkZ2UgbGlzdHM6CgoJKiBiYXNpYy1ibG9jay5oICh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoc3RydWN0IGVkZ2VfZGVmKTogTmV3LgoJKHN0cnVjdCBiYXNpY19ibG9ja19kZWYpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShCTE9DS19IRUFELCBCTE9DS19FTkQpOiBVcGRhdGUuCgkoRU5UUllfQkxPQ0tfUFRSLCBFWElUX0JMT0NLX1BUUik6IE5ldy4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCShiYXNpY19ibG9ja19mb3JfaW5zbiwgQkxPQ0tfRk9SX0lOU04pOiBOZXcuCgkoQkxPQ0tfTlVNKTogVXBkYXRlLgoJKiBmbG93LmMgKFhOTUFMTE9DKTogS2lsbC4KCShtYXhfdWlkX2Zvcl9mbG93KTogS2lsbC4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCSh1aWRfdm9sYXRpbGUpOiBUdXJuIGludG8gYSBiaXRtYXAuCgkoU0VUX0lOU05fVk9MQVRJTEUpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShlbnRyeV9leGl0X2Jsb2Nrcyk6IE5ldy4KCSh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoZmxvd19pbnRfbGlzdF9ibG9ja3MsIGJhc2ljX2Jsb2NrX3N1Y2MsIGJhc2ljX2Jsb2NrX3ByZWQpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2xvb3BfZGVwdGgpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2Zvcl9pbnNuKTogTmV3LgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogU3BsaXQgb3V0IGluaXRpYWwgYmxvY2sgY291bnRpbmcgaW50byAKCWNvdW50X2Jhc2ljX2Jsb2Nrcy4gIENhbGwgZnVuY3Rpb25zIHNwbGl0IG91dCBvZiBmaW5kX2Jhc2ljX2Jsb2Nrc18xLgoJKGNvdW50X2Jhc2ljX2Jsb2Nrcyk6IE5ldy4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogU3BsaXQgb3V0IGVkZ2UgcmVjb2duaXRpb24sIHVucmVhY2hhYmxlCglibG9jayBkZWxldGlvbi4KCShjcmVhdGVfYmFzaWNfYmxvY2spOiBOZXcuCgkoY29tcHV0ZV9iYl9mb3JfaW5zbik6IE5ldy4KCShjbGVhcl9lZGdlcyk6IE5ldy4KCShmcmVlX2JiX21lbW9yeSk6IEtpbGwuCgkoYWRkX2VkZ2UsIGFkZF9lZGdlX3RvX2xhYmVsKTogS2lsbC4KCShtYXJrX2xhYmVsX3JlZik6IEtpbGwuCgkobWFrZV9lZGdlcyk6IFJld3JpdGUgdG8gdXNlIGVkZ2UgbGlzdHMuCgkobWFrZV9lZGdlLCBtYWtlX2xhYmVsX2VkZ2UpOiBOZXcuCgkobWFya19jcml0aWNhbF9lZGdlcyk6IE5ldy4KCShzcGxpdF9lZGdlLCBpbnNlcnRfaW5zbl9vbl9lZGdlKTogTmV3LgoJKGNvbW1pdF9vbmVfZWRnZV9pbnNlcnRpb24sIGNvbW1pdF9lZGdlX2luc2VydGlvbnMpOiBOZXcuCgkoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IFJld3JpdGUgdG8gdXNlIGVkZ2UgbGlzdHMuICAKCVNwbGl0IG91dCBFSCByZWdpb24gbWFuaXB1bGF0aW9uIGludG8gZGVsZXRlX2VoX3JlZ2lvbnMuCglDYWxsIHRpZHlfZmFsbHRocnVfZWRnZSBhbmQgbWVyZ2VfYmxvY2tzLgoJKGRlbGV0ZV9laF9yZWdpb25zKTogTmV3LgoJKGRlbGV0ZV9ub3RlX3ApOiBOZXcuCgkoZGVsZXRlX2luc25fY2hhaW4pOiBOZXcuCgkoZGVsZXRlX2Jsb2NrKTogU3BsaXQgb3V0IGNvZGUgaW50byBkZWxldGVfaW5zbl9jaGFpbiBhbmQKCXRpZHlfZmFsbHRocnVfZWRnZS4gIFVwZGF0ZSBlZGdlIGxpc3RzLgoJKGV4cHVuZ2VfYmxvY2spOiBOZXcuCgkoZmxvd19kZWxldGVfaW5zbik6IE5ldz8KCShjYW5fZGVsZXRlX2xhYmVsX3ApOiBOZXc/CgkobWVyZ2VfYmxvY2tzX25vbW92ZSwgbWVyZ2VfYmxvY2tzKTogTmV3LgoJKHRpZHlfZmFsbHRocnVfZWRnZSk6IE5ldy4KCShjYWxjdWxhdGVfbG9vcF9kZXB0aCk6IE5ldy4KCShsaWZlX2FuYWx5c2lzKTogQWxsb2NhdGUgYW5kIGZyZWUgdWlkX3ZvbGF0aWxlLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IFVwZGF0ZSBmb3IgbmV3IHN0cnVjdHVyZXMuCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zKTogVXNlIFNFVF9JTlNOX1ZPTEFUSUxFLgoJKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IFRpZHkgRVhJVF9JR05PUkVfU1RBQ0sgdXNhZ2UuCgkobWFya191c2VkX3JlZ3MpOiBMaWtld2lzZS4KCShsaWZlX2FuYWx5c2lzXzEpOiBVc2UgYmIgZ2xvYmFsX2xpdmVfYXRfc3RhcnQsIGdsb2JhbF9saXZlX2F0X2VuZCwgCglsb2NhbF9zZXQgcmVnc2V0cy4gIFVzZSBiYi0+YXV4IHRvIHN0b3JlIG5ld19saXZlX2F0X2VuZC4gIEJlZ2luCglsaWZlIHByb3BhZ2F0aW9uIGZyb20gRVhJVF9CTE9DSyByYXRoZXIgdGhhbiBsYXN0IGJsb2NrLiAgQ2xlYXIKCXJlZ3NfZXZlcl9saXZlIGFmdGVyIG1hcmtfcmVnc19saXZlX2F0X2VuZC4KCShhbGxvY2F0ZV9mb3JfbGlmZV9hbmFseXNpcyk6IFVwZGF0ZSBmb3IgbmV3IHN0cnVjdHVyZXMuCgkocHJvcGFnYXRlX2Jsb2NrKTogU3BsaXQgb3V0IGxvb3AgZGVwdGggY2FsY3VsYXRpb24gdG8KCWNhbGN1bGF0ZV9sb29wX2RlcHRoLgoJKHJlZ25vX3VuaW5pdGlhbGl6ZWQpOiBVc2UgYmItPmdsb2JhbF9saXZlX2F0X3N0YXJ0LgoJKHJlZ25vX2Nsb2JiZXJlZF9hdF9zZXRqbXApOiBMaWtld2lzZS4KCShkdW1wX2JiX2RhdGEpOiBMaWtld2lzZS4KCShmaW5kX2F1dG9faW5jKTogVXNlIEJMT0NLX0ZPUl9JTlNOIGluc3RlYWQgb2YgQkxPQ0tfTlVNLgoJKGR1bXBfZmxvd19pbmZvKTogVXBkYXRlIGZvciBuZXcgc3RydWN0dXJlcy4KCShkdW1wX2VkZ2VfaW5mbyk6IE5ldy4KCShwcmludF9ydGxfd2l0aF9iYik6IFVwZGF0ZSBmb3IgbmV3IHN0cnVjdHVlcy4KCShjb21wdXRlX3ByZWRzX3N1Y2NzKTogRG8gbm8gd29yayAtLSBjb252ZXJ0IGVkZ2UgbGlzdHMuCgkoc2V0X2Jsb2NrX2Zvcl9pbnNuKTogRnJvbSBjb3Jwc2Ugb2Ygb2xkIHNldF9ibG9ja19udW0uCgkoc2V0X2Jsb2NrX251bSk6IENhbGwgaXQuCgoJKiBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBBZGQgTk9URV9JTlNOX0JBU0lDX0JMT0NLLgoJKiBydGwuaCAocnR1bmlvbl9kZWYpOiBBZGQgYmIgZW50cnkuCgkoTk9URV9CQVNJQ19CTE9DSyk6IE5ldy4KCShOT1RFX0lOU05fQkFTSUNfQkxPQ0spOiBOZXcuCgoJKiB2YXJyYXkuaCAodmFycmF5X2RhdGFfdGFnKTogQWRkIGJiIGVudHJ5LgoJKFZBUlJBWV9CQl9JTklULCBWQVJSQVlfQkIpOiBOZXcuCgoJKiBlbWl0LXJ0bC5jIChlbWl0X2xhYmVsX2JlZm9yZSk6IE5ldy4KCgkqIGV4Y2VwdC5jIChleHBhbmRfcmV0aHJvdyk6IERlbGV0ZSBpbnNucyBmb2xsb3dpbmcgdGhlIGNhbGwgdG8KCXJldGhyb3cuICBQdXQgdGhlIFJFR19FSF9SRVRIUk9XIG9uIHRoZSBjYWxsLgoKCSoganVtcC5jIChyZXR1cm5qdW1wX3AsIHJldHVybmp1bXBfcF8xKTogTmV3LgoKCSogZXhwci5oIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogTmV3IGRlY2xhcmF0aW9uLgoJKiBmdW5jdGlvbi5jIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogRGVmaW5lIGl0LgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90byk6IFNhdmUgaXQuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFJlc3RvcmUgaXQuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IENsZWFyIGl0LgoJKG5vbmxvY2FsX2xhYmVsX3J0eF9saXN0KTogS2lsbC4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIHN0b3JhZ2Ugc3BhY2UgZm9yIGl0LgoJKiBzdG10LmMgKGV4cGFuZF9ubF9oYW5kbGVyX2xhYmVsKTogUmV0dXJuIHRoZSBuZXcgbGFiZWwuCgkoZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogQ29sbGVjdCBhIGxpc3Qgb2YgdGhlbSBpbgoJbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscy4KCgkqIE1ha2VmaWxlLmluIChwcmludC1ydGwubyk6IERlcGVuZCBvbiBiYXNpYy1ibG9jay5oLgoJKGZsb3cubyk6IERlcGVuZCBvbiBpbnNuLWZsYWdzLmguCgoJKiBmdW5jdGlvbi5jICh0aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zKTogRG8gbm90CgloYWxmLWhlYXJ0ZWRseSB1cGRhdGUgYmIgc3RydWN0dXJlcy4KCgkqIHRvcGxldi5jOiBBZGQgZmxvdzIgZHVtcCBhcyAtZHcuCgkocmVzdF9vZl9jb21waWxhdGlvbik6IEZpbmlzaCAuZ3JlZyBiZWZvcmUgZmxvdzIuCgoJKiBncmFwaC5jIChkcmF3X2VkZ2UpOiBIYW5kbGUgY2xhc3MgMy4KCShwcmludF9ydGxfZ3JhcGhfd2l0aF9iYik6IE1ha2UgYWJub3JtYWwgZWRnZXMgcmVkIGNsYXNzIDIsIAoJY2hhbmdlIG5vbi1mYWxsLXRocnUgYnV0IGFkamFjZW50IHRvIGdyZWVuIGNsYXNzIDMuICBVcGRhdGUgCgl0byB1c2UgbmV3IHN0cnVjdHVyZXMuCgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogSGFuZGxlIE5PVEVfSU5TTl9CQVNJQ19CTE9DSy4KCgkqIHJlZy1zdGFjay5jIChCTE9DS19OVU0pOiBDb252ZXJ0IHRvIGZ1bmN0aW9uLiAgQWJvcnQgaWYKCWJsb2NrX251bWJlciBpcyAtMS4KCShyZWdfdG9fc3RhY2spOiBJbml0aWFsaXplIGJsb2NrX251bSB0byAtMS4KCgkqIGNvbWJpbmUuYyAoc2V0X25vbnplcm9fYml0c19hbmRfc2lnbl9jb3BpZXMpOiBVcGRhdGUgcmVmZXJlbmNlCgl0byBiYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0IHRvIGJiLT5nbG9iYWxfbGl2ZV9hdF9zdGFydC4KCSh0cnlfY29tYmluZSk6IExpa2V3aXNlLgoJKHJlZ19kZWFkX2F0X3ApOiBMaWtld2lzZS4KCSogZ2xvYmFsLmMgKGdsb2JhbF9jb25mbGljdHMpOiBMaWtld2lzZS4KCUhhbmRsZSBzdGFjayByZWdzIG9uIGFsbCBhYm5vcm1hbCBlZGdlcywgbm90IGp1c3QgY29tcHV0ZWQganVtcHMuCgkobWFya19lbGltaW5hdGlvbik6IFVwZGF0ZSByZWZlcmVuY2UgdG8gYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydC4KCShidWlsZF9pbnNuX2NoYWluKTogTGlrZXdpc2UuCgkqIGhhaWZhLXNjaGVkLmMgKGhhaWZhX2VkZ2UpOiBSZW5hbWUgZnJvbSBlZGdlIGZvciBjb25mbGljdC4KCShpc19jZmdfbm9ucmVndWxhcik6IExvb2sgYXQgbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscyBpbnN0ZWFkCglvZiBub25sb2NhbF9sYWJlbF9ydHhfbGlzdC4KCShjaGVja19saXZlXzEpOiBVcGRhdGUgcmVmZXJlbmNlIHRvIGJhc2ljX2Jsb2NrX2xpdmVfYXRfc3RhcnQuCgkodXBkYXRlX2xpdmVfMSk6IExpa2V3aXNlLgoJKGZpbmRfcHJlX3NjaGVkX2xpdmUpOiBMaWtld2lzZS4KCShmaW5kX3Bvc3Rfc2NoZWRfbGl2ZSk6IExpa2V3aXNlLgoJKiBsb2NhbC1hbGxvYy5jICh1cGRhdGVfZXF1aXZfcmVncyk6IExpa2V3aXNlLgoJKGJsb2NrX2FsbG9jKTogTGlrZXdpc2UuCgkqIHJlbG9hZDEuYyAocmVsb2FkLCByZWxvYWRfY29tYmluZSk6IExpa2V3aXNlLgoJKiByZWdtb3ZlLmMgKG1hcmtfZmxhZ3NfbGlmZV96b25lcyk6IExpa2V3aXNlLgoJKiByZXNvdXJjZS5jIChtYXJrX3RhcmdldF9saXZlX3JlZ3MpOiBMaWtld2lzZS4KCSogc2NoZWQuYyAoc2NoZWR1bGVfYmxvY2spOiBMaWtld2lzZS4KCgkqIHJlZ2NsYXNzLmMgKHJlZ3NldF9yZWxlYXNlX21lbW9yeSk6IERvbid0IGZyZWUKCWJhc2ljX2Jsb2NrX2xpdmVfYXRfc3RhcnQuCgoJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBEb24ndCBkdXBsaWNhdGUgTk9URV9JTlNOX0JBU0lDX0JMT0NLLgoKVGh1IEZlYiAyNSAyMTozMjozNCAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmaXhpbmMud3JhcDogQWxzbyBoYW5kbGUgc3RydWN0IHF1ZXVlIGluIHN5cy9zdHJlYW0uaC4KCSogZml4aW5jLnN2cjQ6IExpa2V3aXNlLgoKCSogZHdhcmYyb3V0LmMgKHNjb3BlX2RpZV9mb3IpOiBTZXQgc2NvcGVfZGllIHRvIGNvbXBfdW5pdF9kaWUKCXJhdGhlciB0aGFuIGFzc2VydGluZyBpdC4KClRodSBGZWIgMjUgMjM6MzM6MDYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BwZXhwLmMgKGxlZnRfc2hpZnQsIHJpZ2h0X3NoaWZ0LCBwYXJzZV9jaGFyY29uc3QsIENPTVBBUkUsCgljcHBfcGFyc2VfZXhwcik6IFJlcGxhY2UgdXNlcyBvZiBsb25nL0hPU1RfQklUU19QRVJfTE9ORyB3aXRoCglIT1NUX1dJREVTVF9JTlQvSE9TVF9CSVRTX1BFUl9XSURFU1RfSU5ULgoKCgkqIE1ha2VmaWxlLmluIChjcHBtYWluLm8sIGNwcGxpYi5vLCBjcHBoYXNoLm8sIGNwcGFsbG9jLm8sCiAJY3BwZXJyb3IubywgY3BwZXhwLm8sIGNwcGZpbGVzLm8sIGNwcGluaXQubywgZml4LWhlYWRlci5vLAogCXNjYW4tZGVjbHMubyk6IERvbid0IGRlcGVuZCBvbiBtYWNobW9kZS5oLgoJCiAgICAgICAgKiBjcHBleHAuYzogRG9uJ3QgZGVmaW5lIENIQVJfQklUIG9yIEhPU1RfQklUU19QRVJfV0lERV9JTlQgYW55bW9yZS4KICAJUmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIEhPU1RfV0lERV9JTlQgd2l0aCBIT1NUX1dJREVTVF9JTlQuCgkKCSogY3BwZmlsZXMuYzogTGlrZXdpc2UuCgogCSogY3BwbGliLmM6IExpa2V3aXNlLgoJIAogCSogY3BwbGliLmg6IExpa2V3aXNlLiAgQWxzbyBkb24ndCBpbmNsdWRlIG1hY2htb2RlLmggYW55bW9yZS4KClRodSBGZWIgMjUgMTg6NDY6MjYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IERlZmluZSBfX0ZBU1RfTUFUSF9fIHdoZW4gYXBwcm9wcmlhdGUuCgkqIG9iamMvbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KClRodSBGZWIgMjUgMTY6MTk6NDMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEubWQgKGNhbGwgcGF0dGVybnMpOiBMb3NlIHVudXNlZCBhcmd1bWVudCB0byBvdXRwdXRfY2FsbC4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydGwpOiBQcmludCAvaiBhbmQgL2MgZm9yIHRoZSBqdW1wL2NhbGwgZmxhZ3MuCgoxOTk5LTAyLTI1IDE3OjE0IC0wNTAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGhhc2guYyAoaW5zdGFsbCk6IFJlbmFtZSB0byBjcHBfaW5zdGFsbCwgYWRkIGNwcF9yZWFkZXIqCglmaXJzdCBhcmd1bWVudC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoaGFzaHRhYik6IFJlbW92ZWQuCgkoY3BwX2xvb2t1cCwgY3BwX2luc3RhbGwpOiBDaGFuZ2UgYWxsIHJlZnMgdG8gaGFzaHRhYiB0bwoJcGZpbGUtPmhhc2h0YWIuCgkoY3BwX2hhc2hfY2xlYW51cCk6IFJlbW92ZWQuCgkqIGNwcGhhc2guaDogQWRqdXN0IHByb3RvdHlwZXMuCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX3JlYWRlcik6IEFkZCBoYXNodGFiIHBvaW50ZXIuCgkqIGNwcGluaXQuYyAoY3BwX3JlYWRlcl9pbml0KTogQWxzbyBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlCgloYXNodGFiLgoJKGNwcF9jbGVhbnVwKTogRGVsZXRlIGFsbCBtYWNyb3MgYW5kIGZyZWUgdGhlIGhhc2h0YWIuCgpUaHUgRmViIDI1IDIxOjUyOjU0IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmggKFBBU1NfSU5fUkVHX1ApOiAgRm9yIFRBUkdFVF9ISVRBQ0hJLCBkb24ndCBwYXNzIHN0cnVjdHVyZXMKCWluIHJlZ2lzdGVycy4KCgkqIGV4cHIuaCAoUFJFVEVORF9PVVRHT0lOR19WQVJBUkdTX05BTUVEKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24uCgkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcyk6IEhvbm91ciBQUkVURU5EX09VVEdPSU5HX1ZBUkFSR1NfTkFNRUQuCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCgoJKiBzaC5jIChzaF9leHBhbmRfcHJvbG9ndWUpOiBGb3IgVEFSR0VUX0hJVEFDSEksIGRvbid0IHB1c2ggdmFyYXJncyAvCglzdGRhcmcgYXJndW1lbnRzLgoJKiBzaC5oIChDUFBfU1BFQyk6IEFkZCAtRF9fSElUQUNISV9fIGZvciAtbWhpdGFjaGkuCgkoRlVOQ1RJT05fQVJHKTogIEZvciBUQVJHRVRfSElUQUNISSwgZG9uJ3QgcGFzcyB1bm5hbWVkCglhcmd1bWVudHMgaW4gcmVnaXN0ZXJzLgoJKFBSRVRFTkRfT1VUR09JTkdfVkFSQVJHU19OQU1FRCk6IERlZmluZS4KCSogdmEtc2guaCAoZW50aXJlIGZpbGUpOiBJZiBfX0hJVEFDSElfXyBpcyBkZWZpbmVkLCB1c2Ugc2hbMTIzXQoJZmxhdm91ciB2YXJhcmdzLgoKVGh1IEZlYiAyNSAxNDozMjo0MCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjc2UuYyAoZHVtcF9jbGFzcyk6IFJldmVydCBsYXN0IGNoYW5nZSBhbmQgbWFrZSB0aGUgcHJvdG90eXBlCglleHRlcm4uCgpUaHUgRmViIDI1IDE5OjEzOjQyIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bC5oIChpbnNuX2ZpcnN0X3ApOiBEb24ndCBkZWNsYXJlLgoJKiBydGxhbmFsLmMgKGluc25fZmlyc3RfcCk6IERlbGV0ZS4KCSogbG9vcC5jIChsb29wX2luc25fZmlyc3RfcCk6IEZhc3RlciBpbXBsZW1lbnRhdGlvbi4KClRodSBGZWIgMjUgMTA6NDQ6MzUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5oIChUQVJHRVRfU1dJVENIRVMpOiBEZWxldGUgZGVwcmVjYXRlZCBzd2l0Y2hlcyAtbVsyMzZdLgoJKFRBUkdFVF8zLCBUQVJHRVRfNik6IERlbGV0ZS4KCShBUk1fRkxBR19BUk1bMzZdKTogRGVsZXRlLgoJKENQUF9DUFVfQVJDSF9TUEVDKTogTm8gbmVlZCB0byBoYW5kbGUgLW1bMjM2XSBhbnkgbW9yZS4KCShDQzFfU1BFQyk6IERvbid0IGV4cGFuZCAtbVsyMzZdIGludG8gbmV3IGVxdWl2YWxlbnRzLgoJKENQUF9BUENTX1BDX1NQRUMpOiBObyBuZWVkIHRvIGhhbmRsZSAtbVsyMzZdIGFueSBtb3JlLgoJKiBhcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBEZWxldGUgd2FybmluZ3MgYWJvdXQgZGVwcmVjYXRlZAoJb3B0aW9ucyAtbVsyMzZdLgoKCSogYXJtLmMgKGFybV9maW5hbGl6ZV9waWMpOiBCdWlsZCB0aGUgbGFiZWwgaW50byB0aGUgc3BlY2lhbCBwaWMKCWFkanVzdG1lbnQgaW5zbiBpbnN0ZWFkIG9mIGlzc3VpbmcgaXQgc2VwYXJhdGVseS4KCSogYXJtLm1kIChwaWNfYWRkX2RvdF9wbHVzX2VpZ2h0KTogUmV3b3JrIHRvIGNvbnRhaW4gdGhlIGxhYmVsCgl0aGF0IGlzIG5lZWRlZC4KCgkqIGFybS5tZCAoKnplcm9leHRyYWN0cWlfY29tcGFyZTBfc2NyYXRjaCk6IERlbGV0ZS4KCSgqbmVfemVyb2V4dHJhY3RzaSk6IE5ldyBwYXR0ZXJuLgoKVGh1IEZlYiAyNSAxODo0MDowNiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzdG10LmMgKGV4cGFuZF9lbmRfbG9vcCk6IEdyb2sgY29kZSBlbWl0dGVkIGJ5CglleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlLgoKVGh1IEZlYiAyNSAxMDoxNzozMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYyAocmV0dXJuX2luX21lbW9yeSk6IEZsb2F0IGZpZWxkcyBpbiB1bmlvbnMKCWZvcmNlIGEgcmV0dXJuIGluIG1lbW9yeS4KCShsb2FkX211bHRpcGxlX3NlcXVlbmNlKTogQWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdHdvIExEUgoJaW5zdHJ1Y3Rpb25zIGNhbiBiZSBiZXR0ZXIgdGhhbiBhbiBMRE1JQSBpbnN0cnVjdGlvbi4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKFRBUkdFVF9TSE9SVF9CWV9CWVRFUyk6IEFkZCBjb21tZW50CglkZXNjcmliaW5nIHRoZSByZWFsIG1lYW5pbmcgb2YgdGhpcyBvcHRpb24uCgkoRklYRURfUkVHSVNURVJTKTogRGVmYXVsdCByMTAgdG8gbm90LWZpeGVkLgoJKENBTExfVVNFRF9SRUdJU1RFUlMpOiBEZWZhdWx0IHIxMCB0byBub3QtY2FsbC11c2VkLgoJKFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IElmIG5vdCBkZWZpbmVkLCBkZWZpbmUKCWFzIGVtcHR5LiAKCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IEZpeCByMTAgaWYgVEFSR0VUX0FQQ1NfU1RBQ0sgaXMKCXRydWUuICBJbnZva2UgU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFIGFmdGVyCglwZXJmb3JtaW5nIG90aGVyIGNoZWNrcy4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kICh6ZXJvX2V4dGVuZGhpc2kyKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCgkoZXh0ZW5kaGlzaTIpOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KCUFsc28gYWRkIGNvbW1lbnRzIGRlc2NyaWJpbmcgd2h5IFRBUkdFVF9TSE9SVF9CWV9CWVRFUyBjYW4gYmUKCWlnbm9yZWQgZm9yIGFybXY0KHQpIGFyY2hpdGVjdHVyZXMuIAoKCSogY29uZmlnL2FybS9yaXNjaXguaCAoU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKToKCURlZmluZSB0byBmaXggcjEwLgoKCSogY29uZmlnL2FybS9yaXNjaXgxLTEuaAoJKFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERlZmluZSB0byBmaXggcjEwLiAKClRodSBGZWIgMjUgMTI6MDk6MDQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3NlLmMgKGR1bXBfY2xhc3MpOiBNYWtlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIHN0YXRpYyB0byBtYXRjaAogCXRoZSBwcm90b3R5cGUuCgpXZWQgRmViIDI0IDE3OjQ3OjI4IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGRieG91dC5jIChnc3RhYi5oKTogVXNlIGlmIENST1NTX0NPTVBJTEUuCgoJKiBkd2FyZjJvdXQuYyAoYWRkX2xvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6ICBBZGQgYmlnCgllbmRpYW4gY29ycmVjdGlvbiBmb3IgcGFybXMgcGFzc2VkIGluIHJlZ3MgYnV0IGxpdmluZyBvbiB0aGUgc3RhY2suCgpXZWQgRmViIDI0IDE0OjAzOjU0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24pOiBOZXcgZnVuY3Rpb24gZXh0cmFjdGVkCglmcm9tIGV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24uICBSZW1vdmUgdmFyaWFibGVzCgl3aGljaCBhcmUgbm8gbG9uZ2VyIHVzZWQgZHVlIHRvIGNsZWFudXBzLgoKCSogY2FsbHMuYyAoY29tcHV0ZV9hcmd1bWVudF9ibG9ja19zaXplKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbQoJZXhwYW5kX2NhbGxzLgoJKGV4cGFuZF9jYWxscyk6IFVzZSBjb21wdXRlX2FyZ3VtZW50X2Jsb2NrX3NpemUuICBEZWxldGUKCW9yaWdpbmFsX2FyZ3Nfc2l6ZSwgdXNlIHVuYWRqdXN0ZWRfYXJnc19zaXplIGluc3RlYWQuCgoJKiBjYWxscy5jIChwcmVjb21wdXRlX2FyZ3VtZW50cyk6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20KCWV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIHByZWNvbXB1dGVfYXJndW1lbnRzLgoKCSogY2FsbHMuYyAoZmluYWxpemVfbXVzdF9wcmVhbGxvY2F0ZSk6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20KCWV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIGZpbmFsaXplX211c3RfcHJlYWxsb2NhdGUuCgoJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogTWFyayAidmFyaWFibGVfc2l6ZSIgYXMgcG9zc2libHkgdW51c2VkLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzLCBjYXNlICdwJyk6IFNldCBjbGFzc2VzIGFwcHJvcHJpYXRlbHkuCglBbiBhbHRlcm5hdGl2ZSBhbHdheXMgZmFpbHMgaWYgaXQgbmVlZHMgYSBwc2V1ZG8gYW5kIG5vIHN1aXRhYmxlCglyZWdpc3RlciBjbGFzcyBjYW4gYmUgZm91bmQuCgpXZWQgRmViIDI0IDE5OjQ3OjU2IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuaCAobG9vcF9pbnNuX2ZpcnN0X3ApOiBEZWNsYXJlLgoJKiBsb29wLmMgKGxvb3BfaW5zbl9maXJzdF9wKTogTm8gbG9uZ2VyIHN0YXRpYy4KCSogdW5yb2xsLmMgKGl0ZXJhdGlvbl9pbmZvKSBGaXggY29tcGFyaXNvbiB0bwoJcmVnX2l2X3R5cGUtPm51bV9lbGVtZW50cy4KCUJlZm9yZSBhY2Nlc3NpbmcgcmVnX2Jpdl9jbGFzcywgY2hlY2sgaW5kZXggYWdhaW5zdAoJbWF4X3JlZ19iZWZvcmVfbG9vcC4KCUZpeCBhbmQgZW5hYmxlIGNvZGUgZm9yIGdpdiBpdGVyYXRvcnMuCgkobG9vcF9pdGVyYXRpb25zKTogQ29tcGFyZSB3aXRoIHJlZ19pdl90eXBlLT5udW1fZWxlbWVudHMgaW5zdGVhZAoJb2Ygd2l0aCBtYXhfcmVnX2JlZm9yZV9sb29wLgoKV2VkIEZlYiAyNCAxOToxNzoxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBBdm9pZCBvdXQtb2YtYm91bmRzIGluZGV4IGZvciBsb2NhbF9yZWduby4KCldlZCBGZWIgMjQgMTE6MjY6NDEgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEb24ndCB1c2UKIAlQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSBmb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbiB3aGVuIC1mUElDLgoKVHVlIEZlYiAyMyAxNjoyNDoxOSBDRVQgMTk5OSBNYXJjIExlaG1hbm4gPHBjZ0Bnb29mLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYubWQ6IGZpeCB0eXBvZS4KCk1vbiBGZWIgMjIgMTk6MzY6MzMgMTk5OSAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX2RlYnVnZ2VyX29mZnNldCk6IFdoZW4gVEFSR0VUX01JUFMxNiAmJgogCWZyYW1lX3BvaW50ZXJfbmVlZGVkIGFkanVzdCBmcmFtZSBzaXplLgoJKGZ1bmN0aW9uX3Byb2xvZ3VlKTogRG9uJ3QgTUlQUzE2IC5tYXNrIEdQT0ZGU0VULiBBbHJlYWR5IGFkanVzdGVkCiAJaW4gLmZyYW1lIHBzZXVkby1vcC4KCUZybSBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+OgoJKiBtaXBzLmMgKGZ1bmN0aW9uX3Byb2xvZ3VlKTogQWRqdXN0IGZyYW1lIHNpemUgaW4gLmZyYW1lIHBzZXVkby1vcAoJd2hlbiBUQVJHRVRfTUlQUzE2ICYmIGZyYW1lX3BvaW50ZXJfbmVlZGVkLgoKMTk5OS0wMi0yMiAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmg6IEFkZCBUQVJHRVRfQ1BVX3N0cm9uZ2FybTExMDAuCglBZGQgLW1uby1zY2hlZCBjb21tYW5kIGxpbmUgc3dpdGNoIHRvIGRpc2FibGUgc2NoZWR1bGluZyBvZgoJaW5zdHJ1Y3Rpb25zIGludG8gdGhlIGZ1bmN0aW9uJ3MgcHJvbG9ndWUuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IFJlbW92ZS4KCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAiZnBlPSIgb3B0aW9uIHRvIG1hdGNoIGRvY3VtZW50YXRpb24uCgkoc3RydWN0IGFybV9jcHVfc2VsZWN0KTogUmVwbGFjZSAnc2V0X3R1bmVfcCcgYW5kICdzZXRfYXJjaF9wJwoJZmllbGRzIHdpdGggJ3Byb2Nlc3NvcnMnIGZpZWxkLgoJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogQWxsb3cgcjEwIHRvIGJlIHVzZWQgaWYgc3RhY2sKCWNoZWNraW5nIGlzIG5vdCBlbmFibGVkLgoJKFJFVFVSTl9JTl9NRU1PUlkpOiBBbHdheXMgY2FsbCBhcm1fcmV0dXJuX2luX21lbW9yeS4KCQoJKiBjb25maWcvYXJtL2FybS5jOiAoYXJtX2NwdSk6IFJlbW92ZS4KCSh0dW5lX2ZsYWdzKTogUmVtb3ZlLgoJKGFybV9pc19zdHJvbmcpOiBOZXcgdmFyaWFibGU6IHRydWUgaWZmIHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIGEgCglTdHJvbmdBUk0uCgkoYXJtX2lzXzZfb3JfNyk6IE5ldyB2YXJpYWJsZTogdHJ1ZSBpZmYgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgYW4KCUFSTTYgb3IgYW5kIEFSTTcuCgkoYXJtX3NlbGVjdCk6IEZpZWxkcyByZW9yZ2FuaXNlZC4KCShzdHJ1Y3QgcHJvY2Vzc29ycyk6IHByb2Nlc3Nvcl90eXBlIGZpZWxkIHJlbW92ZWQuCgkoYWxsX3Byb2NzKTogUmVtb3ZlLgoJKGFsbF9jb3Jlcyk6IE5ldyBhcnJheTogRGVmaW5pdGlvbnMgb2YgYWxsIGtub3duIEFSTSBjcHUgY29yZXMuCgkoYWxsX2FyY2hpdGVjdHVyZXMpOiBOZXcgYXJyYXk6IERlZmluaXRpb25zIG9mIGFsbCBrbm93biBBUk0KCWFyY2hpdGVjdHVyZXMuIAoJKHN0cmVxKTogTmV3IG1hY3JvLgoJKEZMX1NDSEVEKTogTmV3IHByb2Nlc3NvciBmbGFnOiBwcm9jZXNzb3IgcmVxdWlyZWQgbG9hZAoJc2NoZWR1bGluZy4KCShGTF9TVFJPTkcpOiBOZXcgcHJvY2Vzc29yIGZsYWc6IHByb2Nlc3NvciBpcyBhIFN0cm9uZ0FSTS4KCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IFJlb3JnYW5pc2VkIHRvIG1ha2UgY29kZSBjbGVhcmVyLgoJKHVzZV9yZXR1cm5faW5zbik6IFRlc3QgZm9yICJub3QgKFRBUkdFVF9BUENTIGFuZAoJZnJhbWVfcG9pbnRlcl9uZWVkZWQpIi4KCShhcm1fcmV0dXJuX2luX21lbW9yeSk6IEltcHJvdmUgaGFuZGxpbmcgb2Ygc3RydWN0dXJlcy4KCQoJKiBjb25maWcvYXJtL2FybS5tZDogUmVtb3ZlICJjcHUiIGF0dHJpYnV0ZS4gIFJlcGxhY2Ugd2l0aAoJImlzX3N0cm9uZ2FybSIgYW5kICJpc19hcm1fNl9vcl83IiBhdHRyaWJ1dGVzLgoJKHplcm9fZXh0ZW5kaGlzaTIpOiBDaGVjayBmb3IgVEFSR0VUX1NIT1JUX0JZX0JZVEVTIGJlZm9yZQoJYXJtX2FyY2g0LgoJKGV4dGVuZGhpc2kyKTogIENoZWNrIGZvciBUQVJHRVRfU0hPUlRfQllfQllURVMgYmVmb3JlIGFybV9hcmNoNC4gCgoJKiBpbnZva2UudGV4aSAoQVJNIE9wdGlvbnMpOiBEb2N1bWVudCAtbXR1bmU9IGFuZCAtbWZwPSBvcHRpb25zLgoJCjE5OTktMDItMjIgIFBoaWxpcCBCbHVuZGVsbCAgPHBoaWxiQGdudS5vcmc+CgoJKiBjb25maWcvYXJtL2xpbnV4LWdhcy5oIChJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBSZXBsYWNlIGRlZmF1bHQKCWRlZmluaXRpb24gd2l0aCBvbmUgaW5jbHVkaW5nIGNhY2hlIHN5bmNocm9uaXNhdGlvbi4KCShDTEVBUl9JTlNOX0NBQ0hFKTogQ29ycmVjdCBzeXNjYWxsIG51bWJlciBhbmQgZW5hYmxlIGRlZmluaXRpb24uCglNb3ZlIGRlZmluaXRpb24gb2YgaW5oaWJpdF9saWJjIHRvLi4uCgkqIGNvbmZpZy9hcm0veG0tbGludXguaDogLi4uIGhlcmUuCgoJKiBjb25maWcvYXJtL3QtbGludXg6IERpc2FibGUgbXVsdGlsaWIgY29uZmlndXJhdGlvbnMgc2luY2UgdGhlCglvbmx5IGVmZmVjdCBmb3IgbW9zdCBwZW9wbGUgaXMgdG8gY2F1c2UgYnVpbGRzIHRvIGZhaWwuCgkKCSogY29uZmlnL2FybS9lbGYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBBZGQgLmZpbGUgZGlyZWN0aXZlLgoJKEFTTV9TUEVDKTogVHJhbnNsYXRlIC1tYXBjcy1mbG9hdCB0byAtbWZsb2F0IGZvciB0aGUgYXNzZW1ibGVyLgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaCAoREVGQVVMVF9WVEFCTEVfVEhVTktTKTogRGVmaW5lLgoJKEhBTkRMRV9TWVNWX1BSQUdNQSk6IExpa2V3aXNlLgoJKExJQl9TUEVDKTogQ29weSBkZWZpbml0aW9uIGZyb20gZ2VuZXJpYyBMaW51eCBmaWxlcy4KCShMSUJHQ0NfU1BFQyk6IEluY2x1ZGUgLWxmbG9hdCBpZiAtbXNvZnQtZmxvYXQgd2FzIGdpdmVuLgoJKEZQX0RFRkFVTFQpOiBTZXQgdG8gU09GVDMgb24gMzItYml0IHRhcmdldHMuCgkoRFdBUkYyX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgoJKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IERlZmluZSBhcyBEQlhfREVCVUcuCgpNb24gRmViIDIyIDE2OjU0OjE4IEVTVCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGxpYmNhbGxfb3RoZXJfcmVncyk6IE1ha2UgZXh0ZXJuLgoJKiBydGwuaCAoZmluZF9sYXN0X3ZhbHVlKTogQWRkIHBhcmFtZXRlciB0byBwcm90b3R5cGUuCgkobGliY2FsbF9vdGhlcl9yZWcpOiBBZGQgZXh0ZXJuIGRlY2xhcmF0aW9uLgoJKiBydGxhbmFsLmMgKGZpbmRfbGFzdF92YWx1ZSk6IEFkZCBhbm90aGVyIHBhcmFtZXRlciB0byBhbGxvdwoJYSBkZWZpbml0aW9uIHVzaW5nIGEgaGFyZHdhcmUgcmVnaXN0ZXIgdG8gYmUgZm91bmQgYXMgd2VsbC4KCk1vbiBGZWIgMjIgMTM6MzM6NDcgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNzZS5jIChkdW1wX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKGludmFsaWRhdGVfbWVtb3J5KTogRml4IHR5cG8gaW4gY29tbWVudC4KCSogZnVuY3Rpb24uYyAodGVtcF9zbG90KTogQWRkIGFuIGFsaWFzIHNldCBmaWVsZC4gIAoJKGFzc2lnbl9zdGFja190ZW1wKTogT25seSByZXVzZSBzbG90cyBpZiB0aGV5IHdpbGwgaGF2ZSB0aGUKCXNhbWUgYWxpYXMgc2V0IGFzIGJlZm9yZS4KCShjb21iaW5lX3RlbXBfc2xvdHMpOiBEb24ndCBjb21iaW5lIGlmIC1mc3RyaWN0LWFsaWFzaW5nOwoJdGhhdCdzIHVuc2FmZS4KCSogcnRsLmMgKGNvcHlfcnR4KTogQ29weSBhbGwgdGhlIGZsYWdzIChpbiBwYXJ0aWN1bGFyLAoJTUVNX1NDQUxBUl9QKS4KCk1vbiBGZWIgMjIgMTQ6MTM6MjMgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1saW51eC1nbnUqLAoJaVszNDU2N104Ni0qLWxpbnV4LWdudWxpYmMxLCBpWzM0NTY3XTg2LSotbGludXgtZ251YW91dCosCglpWzM0NTY3XTg2LSotbGludXgtZ251b2xkbGQqKTogVXNlIGZpeGluYy54ODYtbGludXgtZ251IGFzCglmaXhpbmNsdWRlcy4KCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGZpeGluYy54ODYtbGludXgtZ251OiBOZXcgc2NyaXB0IGZvciBmaXhpbmcgYXNtLXN0YXRlbWVudHMgYnVnCglvbiB4ODYgbGludXguCgoJKiBmaXhpbmMvZml4aW5jLng4Ni1saW51eC1nbnU6IENvcHkgb2YgdGhlIHByZXZpb3VzIG9uZS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaCAoaVszNDU2N104Ni0qLWxpbnV4LWdudSosCglpWzM0NTY3XTg2LSotbGludXgtZ251bGliYzEsIGlbMzQ1NjddODYtKi1saW51eC1nbnVhb3V0KiwKCWlbMzQ1NjddODYtKi1saW51eC1nbnVvbGRsZCopOiBVc2UgZml4aW5jLng4Ni1saW51eC1nbnUgYXMKCWZpeGluY2x1ZGVzLgoKTW9uIEZlYiAyMiAwODo1NTowNSAxOTk5ICBPdmlkaXUgUHJlZGVzY3UgIDxvdmlkaXVAY3VwLmhwLmNvbT4KCgkqIG9iamMvb2JqYy1hY3QuYyAoZW5jb2RlX3R5cGUpOiBUZW1wb3JhcnkgcmV2ZXJ0IHRvIHRoZSBvbGQKIAliZWhhdmlvciBvZiBlbmNvZGluZyB0eXBlcyBhcyB0aGUgbmV3IG9uZSBzZWVtcyB0byBicmVhayB0aGUKIAllbmNvZGluZyBvZiBiaXRmaWVsZHMuCgpNb24gRmViIDIyIDExOjQwOjQ0IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+ClNhdCBGZWIgMjAgMDk6NTk6MzYgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIE1ha2VmaWxlLmluIChhbGwuaW50ZXJuYWwsIGFsbC5jcm9zcyk6IERlcGVuZCBvbiBgZG9jJwoJdGFyZ2V0LCB0byBlbnN1cmUgZG9jcyBnZXQgbWFkZSBiZWZvcmUgaW5zdGFsbGF0aW9uLgoKCglEZWNyZWFzZSBzcHVyaW91cyB3YXJuaW5ncyBmcm9tIC1mc3ludGF4LW9ubHk6CgkqIHN0bXQuYyAoZXhwYW5kX2V4cHJfc3RtdCk6IEV4cGFuZCBleHByIGV2ZW4gd2hlbiAtZnN5bnRheC1vbmx5LgoKTW9uIEZlYiAyMiAxMDo1NTowMCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogUmVwbGFjZSB3YXJuaW5nIGFib3V0IGludGVnZXIgY29uc3RhbnRzIGJlaW5nCglsYXJnZXIgdGhhbiBsb25nLWxvbmdzLCB3aXRoIGEgd2FybmluZyBhYm91dCBpbnRlZ2VyIGNvbnN0YW50cyAKICAgICAgICBiZWluZyBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCB0YXJnZXQgaW50ZWdlci4KCk1vbiBGZWIgMjIgMDg6MzU6MzggMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCglGaXggLWZzeW50YXgtb25seSBJQ0VzOgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfemVyb3MsIGFzc2VtYmxlX3ZhcmlhYmxlLAoJb3V0cHV0X2NvbnN0YW50X2RlZik6IERvIG5vdGhpbmcgd2hlbiAtZnN5bnRheC1vbmx5LgoKRnJpIEZlYiAxOSAxODoxODo1NiAxOTk5ICBEb24gQm93bWFuICA8ZG9uQHBpeHN0cmVhbS5jb20+CgoJKiBjb25maWd1cmUuaW4gKG1pcHMqLSotdnh3b3JrcyopOiBFbmFibGUgZ3RocmVhZHMgdnh3b3JrcyBzdXBwb3J0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTdW4gRmViIDIxIDIwOjM0OjQ0IFBTVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAyMSAyMDozNToxMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWcvYW91dG9zLmggKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IpOiBEZWxldGUuCgkoQVNNX09VVFBVVF9ERVNUUlVDVE9SLCBBU01fT1VUUFVUX0dDX0VOVFJZKTogTGlrZXdpc2UuCgkqIHRtLnRleGk6IFVwZGF0ZSBkb2NzIGZvciBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzLgoKU3VuIEZlYiAyMSAxNzoxMToxOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuYXR0cnRhYi5jIChjaGVja19hdHRyX3ZhbHVlKTogQWxsb3cgbmVnYXRpdmUgY29uc3RfaW50IGlmCgluZWdhdGl2ZV9vay4gIEFjY2VwdCBpbnRlZ3JhbCBhcml0aG1ldGljIG9wZXJhdG9ycy4gIEFjY2VwdAoJZGlyZWN0IHJlZmVyZW5jZXMgdG8gb3RoZXIgYXR0cmlidXRlcy4gIEFjY2VwdCBzeW1ib2xfcmVmIGluCglub24tY29uc3RhbnQgYXR0cmlidXRlcy4KCShtYXhfYXR0cl92YWx1ZSk6IEFkZCBuZXcgYXJndW1lbnQgYHVua25vd25wJy4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KCShvcl9hdHRyX3ZhbHVlKTogTGlrZXdpc2UuCgkoc2ltcGxpZnlfa25vd2luZyk6IERvbid0IG9wdGltaXplIGlmIG1heF9hdHRyX3ZhbHVlIHVua25vd24uCgkod3JpdGVfbGVuZ3RoX3VuaXRfbG9nKTogTGlrZXdpc2Ugd2l0aCBvcl9hdHRyX3ZhbHVlLgoJKGZpbmRfYW5kX21hcmtfdXNlZF9hdHRyaWJ1dGVzKTogRG9uJ3QgZmFsbHRocnUgY2FzZS4KCSh3cml0ZV9hdHRyX3NldCk6IFBhc3MgdGhydSBhbGwgbm9uLWNvbmQgZXhwcmVzc2lvbnMuCgkod3JpdGVfYXR0cl92YWx1ZSk6IEhhbmRsZSBzeW1ib2xfcmVmLCBhdHRyLCBhbmQgYXJpdGhtZXRpYy4KClN1biBGZWIgMjEgMTM6MTY6NDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogcmVnbW92ZS5jIChkaXNjb3Zlcl9mbGFnc19yZWcpOiBVc2Ugd29yZF9tb2RlIGluc3RlYWQgb2YgU0ltb2RlLgoKU3VuIEZlYiAyMSAxMzoxNTo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVnbW92ZS5jIChkaXNjb3Zlcl9mbGFnc19yZWcpOiBSZW1vdmUgY2MwIGNvZGUuCgkobWFya19mbGFnc19saWZlX3pvbmVzKSBbSEFWRV9jYzBdOiBGb3JjZSB1c2Ugb2YgY2MwOyBiYWlsIGlmCglhIHBvdGVudGlhbCBmbGFncyByZWdpc3RlciB3YXMgaWRlbnRpZmllZC4KClNhdCBGZWIgMjAgMTY6MTY6MDcgMTk5OCAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwLm1kIChzY2MgcGx1cyBsdHUpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KClNhdCBGZWIgMjAgMDk6MDg6NDQgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiB4bS1hcm0uaCAoSE9TVF9CSVRTX1BFUl9MT05HTE9ORyk6IERlZmluZS4KCkZyaSBGZWIgMTkgMjM6MDI6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZ21vdmUuYyAoZGlzY292ZXJfZmxhZ3NfcmVnKTogTmV3IGZ1bmN0aW9uLgoJKGZsYWdzX3NldF8xLCBtYXJrX2ZsYWdzX2xpZmVfem9uZXMpOiBOZXcgZnVuY3Rpb25zLgoJKHJlZ21vdmVfb3B0aW1pemUpOiBDYWxsIHRoZW0uCgkoZml4dXBfbWF0Y2hfMSk6IFVzZSBpbnNuIG1vZGVzIHJhdGhlciB0aGFuIHNldHNfY2MwX3AuCgpGcmkgRmViIDE5IDIyOjQ3OjAxIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bGFuYWwuYyAoaW5zbl9maXJzdF9wKTogRml4IHJldHVybiB2YWx1ZSBmb3IgaW5zbiA9PSByZWZlcmVuY2UuCgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSwgY2hlY2tfZmluYWxfdmFsdWUsIGNoZWNrX2RicmFfbG9vcCk6CglVc2UgbG9vcF9pbnNuX2ZpcnN0X3AuCgpGcmkgRmViIDE5IDE1OjQ5OjI2IDE5OTkgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoJCQkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoc2NjIHBsdXMgZXEpOiBGaXggb3V0cHV0IHRlbXBsYXRlLgoJKHNjYyBwbHVzIGx0dSk6IEZpeCBvdXRwdXQgdGVtcGxhdGUgYW5kIGNvbGxhcHNlIHZhcmlhbnRzCgljb3JyZWN0aW5nIGVhcmx5IGNsb2JiZXJzLgoJKHNjYyBwbHVzIGdldSk6IEZpeCBvdXRwdXQgdGVtcGxhdGUuCgkoc2NjIHBsdXMgZ3QpOiBGaXggb3V0cHV0IHRlbXBsYXRlLgoJKHNjYyBwbHVzIGd0dSk6IEZpeCBvdXRwdXQgdGVtcGxhdGUgYW5kIGNvbGxhcHNlIHZhcmlhbnRzLgoKRnJpIEZlYiAxOSAxNTo0Mzo1OSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcHBpbml0LmMgKHByaW50X2hlbHApOiBSZW1vdmUgdW5lc2NhcGVkIG5ld2xpbmUgaW4gc3RyaW5nLgoKRnJpIEZlYiAxOSAxOTo1NTowNiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENoZWNrIGZvciBpbnRlcnZlbmluZyBqdW1wcyB3aGVuCgljb252ZXJ0aW5nIGJpdiBpbmNyZW1lbnQgdG8gZ2l2LgoKVGh1IEZlYiAxOCAxNjozNjo1OCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChUUllfRklOQUxMWV9FWFBSLCBHT1RPX1NVQlJPVVRJTkVfRVhQUik6ICBOZXcgdHJlZSBub2RlcywKCSogZXhwci5jIChleHBhbmRfZXhwcik6ICBTdXBwb3J0IG5ldyB0cmVlIG5vZGVzLgoKRnJpIEZlYiAxOSAxMDoxNzo1NiAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmMgKG02OGtfYWxpZ25fbG9vcHNfc3RyaW5nLAoJbTY4a19hbGlnbl9qdW1wc19zdHJpbmcsIG02OGtfYWxpZ25fZnVuY3Nfc3RyaW5nKTogQWRkIGNvbnN0LgoJKiBjb25maWcvbTY4ay9tNjhrLmggKG02OGtfYWxpZ25fbG9vcHNfc3RyaW5nLAoJbTY4a19hbGlnbl9qdW1wc19zdHJpbmcsIG02OGtfYWxpZ25fZnVuY3Nfc3RyaW5nKTogTGlrZXdpc2UuCgpUaHUgRmViIDE4IDIzOjI4OjM1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCiAgICAgICAgKiBiaXRtYXAuYyAoYml0bWFwX3ByaW50KTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCSAKICAgICAgICAqIGJpdG1hcC5oIChiaXRtYXBfcHJpbnQpOiBMaWtld2lzZS4KCSAKICAgICAgICAqIGMtZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uLCBncm9rZGVjbGFyYXRvciwgZ3Jva2ZpZWxkKTogTGlrZXdpc2UuCgkgCiAgICAgICAgKiBjLWxhbmcuYyAoYnVpbGRfb2JqY19zdHJpbmcpOiBMaWtld2lzZS4KCSAKICAgICAgICAqIGMtbGV4LmMgKHl5ZXJyb3IsIGV4dGVuZF90b2tlbl9idWZmZXIpOiBMaWtld2lzZS4gIERvbid0IGluY2x1ZGUKIAlsaW1pdHMuaCBvciBjdHlwZS5oLiAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgcCcuCgkgCiAgICAgICAgKiBjLWxleC5oICh5eWVycm9yKTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCSAKICAgICAgICAqIGMtcHJhZ21hLmMgKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBMaWtld2lzZS4KCSAKICAgICAgICAqIGMtcHJhZ21hLmggKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBMaWtld2lzZS4KCSAKICAgICAgICAqIGMtdHJlZS5oIChidWlsZF9vYmpjX3N0cmluZywgYnVpbHRpbl9mdW5jdGlvbiwgZ3Jva2ZpZWxkLAogCWJ1aWxkX2luZGlyZWN0X3JlZiwgbHZhbHVlX29yX2Vsc2UsIHJlYWRvbmx5X3dhcm5pbmcsIGVycm9yX2luaXQsCiAJcGVkd2Fybl9pbml0KTogTGlrZXdpc2UuCgkgCiAgICAgICAgKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50LCB3YXJuX2Zvcl9hc3NpZ25tZW50LAogCXB1c2hfc3RyaW5nLCB3YXJuaW5nX2luaXQsIGluY29tcGxldGVfdHlwZV9lcnJvciwKIAlidWlsZF9pbmRpcmVjdF9yZWYsIGx2YWx1ZV9vcl9lbHNlLCByZWFkb25seV93YXJuaW5nLAogCWJ1aWxkX2NfY2FzdCwgc3BlbGxpbmcsIHB1c2hfbWVtYmVyX25hbWUsIHByaW50X3NwZWxsaW5nLAogCWVycm9yX2luaXQsIHBlZHdhcm5faW5pdCwgc3RhcnRfaW5pdCk6IExpa2V3aXNlLgoJIAogICAgICAgICogb2JqYy9vYmpjLWFjdC5jIChidWlsZF9vYmpjX3N0cmluZyk6IExpa2V3aXNlLgoJIAogICAgICAgICogcHJpbnQtdHJlZS5jIChwcmludF9ub2RlX2JyaWVmLCBwcmludF9ub2RlKTogTGlrZXdpc2UuCgkgCiAgICAgICAgKiB0cmVlLmggKGx2YWx1ZV9vcl9lbHNlLCBwcmludF9ub2RlLCBwcmludF9ub2RlX2JyaWVmKTogTGlrZXdpc2UuCgpUaHUgRmViIDE4IDIwOjQ0OjIxIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IENvcnJlY3RseSBoYW5kbGUgJ3AnIGNvbnN0cmFpbnQuCgpUaHUgRmViIDE4IDE5OjU5OjM3IDE5OTkgIE1hcmMgRXNwaWUgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiA6SGFuZGxlIE9wZW5CU0QgcGxhdGZvcm1zLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCiAgICAgICAgKiBjb25maWcvb3BlbmJzZC5oOiBOZXcgZmlsZS4KICAgICAgICAqIGNvbmZpZy94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgogICAgICAgICogY29uZmlnL3Qtb3BlbmJzZDogTmV3IGZpbGUuCiAgICAgICAgKiBjb25maWcvdC1vcGVuYnNkLXRocmVhZDogTmV3IGZpbGUuCgpUaHUgRmViIDE4IDE4OjQ3OjA5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlKTogUm91bmQgU0laRSBiZWZvcmUgY2FsbGluZwoJYXNzaWduX3N0YWNrX2xvY2FsIGZvciBCTEttb2RlIHNsb3RzLgoKRnJpIEZlYiAxOSAwMTo0NTowNiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IEZvciBkZXJpdmVkIGdpdnMsIHJlcGxhY2UgdGhlCglnaXYgdGhpcyB3YXMgZGVyaXZlZCBmcm9tIHdpdGggaXRzIG5ld19yZWcuCgkocmVjb21iaW5lX2dpdnMpOiBEb24ndCBzZXQgbmV3X3JlZyBmb3IgZGVyaXZlZCBnaXYuCglBbmQgZG9uJ3QgcHJpbnQgaXQsIHByaW50IFNVTSBpbnN0ZWFkLgoKVGh1IEZlYiAxOCAxNTo1Mjo0OSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBtNjhrZWxmLmggKEFTTV9SRVRVUk5fQ0FTRV9KVU1QKTogQWRkIDUyMDAgc3VwcG9ydC4KCjE5OTktMDItMTggMTg6MzIgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IEtpbGwgZGVmaW5lIG9mIFNURENfVkFMVUUuICBEb24ndCBpbmNsdWRlIG91dHB1dC5oCiAgICAgICAgICBvciBwcmVmaXguaC4gQ2hhbmdlIENQUF9JU19NQUNST19CVUZGRVIgdG8gbm90IHJlZmVyIHRvCiAgICAgICAgICBtYWNyb19jbGVhbnVwLgoJICAoR0VUX0VOVl9QQVRIX0xJU1QsIFBBVEhfU0VQQVJBVE9SLCBTVEFOREFSRF9JTkNMVURFX0RJUiwKICAgICAgICAgIHByZWRlZnMsIFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFLCBXQ0hBUl9UWVBFLAogICAgICAgICAgQ1BQX1dDSEFSX1RZUEUsIFVTRVJfTEFCRUxfUFJFRklYLCBSRUdJU1RFUl9QUkVGSVgsIHN0cnVjdAogICAgICAgICAgY3BwX3BlbmRpbmcsIHZlcnNpb25fc3RyaW5nLCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlLAogICAgICAgICAgaW5jbHVkZV9kZWZhdWx0c19hcnJheSwgcGF0aF9pbmNsdWRlLCBjcHBfb3B0aW9uc19pbml0LAogICAgICAgICAgZHVtcF9zcGVjaWFsX3RvX2J1ZmZlciwgaW5pdGlhbGl6ZV9idWlsdGlucywgY3BwX3N0YXJ0X3JlYWQsCiAgICAgICAgICBjcHBfcmVhZGVyX2luaXQsIG5yZXZlcnNlX3BlbmRpbmcsIHB1c2hfcGVuZGluZywgcHJpbnRfaGVscCwKICAgICAgICAgIGNwcF9oYW5kbGVfb3B0aW9uLCBjcHBfaGFuZGxlX29wdGlvbnMsIGNwcF9maW5pc2gsCiAgICAgICAgICBjcHBfY2xlYW51cCk6IE1vdmUgdG8gY3BwaW5pdC5jLgoJICAobWFjcm9fY2xlYW51cCwgc3RydWN0IGFyZ2xpc3QsIGNvbGxlY3RfZXhwYW5zaW9uLAoJICBjcmVhdGVfZGVmaW5pdGlvbiwgY29tcGFyZV9kZWZzLCBjb21wX2RlZl9wYXJ0LCBBUkdfQkFTRSwKCSAgc3RydWN0IGFyZ2RhdGEsIG1hY2FyZywgY2hhbmdlX25ld2xpbmVzLCB0aW1lc3RhbXAsCgkgIG1vbnRobmFtZXMsIHNwZWNpYWxfc3ltYm9sLCB1bnNhZmVfY2hhcnMsIG1hY3JvZXhwYW5kLAoJICBwdXNoX21hY3JvX2V4cGFuc2lvbik6IE1vdmUgdG8gY3BwaGFzaC5jLgoJICAocXVvdGVfc3RyaW5nLCBjaGVja19tYWNyb19uYW1lLCBjcHBfZXhwYW5kX3RvX2J1ZmZlciwKCSAgb3V0cHV0X2xpbmVfY29tbWFuZCwgY3BwX3VuZGVmKTogRXhwb3J0LgoJICAobnVsbF91bmRlcmZsb3csIG51bGxfY2xlYW51cCwgaGFuZGxlX2RpcmVjdGl2ZSk6IE1ha2Ugc3RhdGljLgoKCSogY3BwbGliLmg6IFByb3RvdHlwZSBub3ctZXhwb3J0ZWQgZnVuY3Rpb25zLiAgQWRqdXN0IGRlY2xzIG9mCiAgICAgICAgICBzeW50YXggdGFibGVzIHNvIHdlIGNhbiBpbmNsdWRlIGNwcGxpYi5oIGluIGNwcGluaXQuYy4KCSogY3BwaGFzaC5oOiBQcm90b3R5cGUgYWxsIGZ1bmN0aW9ucyBleHBvcnRlZCBieSBjcHBoYXNoLmMuCgkqIGNwcGluaXQuYzogTWFrZSBzeW50YXggdGFibGVzIGluaXRpYWxpemVkIGRhdGEgaWYgcG9zc2libGUKICAgICAgICAgICh1c2VzIEdDQyBkZXNpZ25hdGVkLWluaXRpYWxpemVyIGV4dGVuc2lvbikuCgkqIGNwcGV4cC5jOiAgTWFrZSBjcHBfbGV4IHN0YXRpYy4KCSogTWFrZWZpbGUuaW46IE1vdmUgLUQgc3dpdGNoZXMgZm9yIHRoZSB2YXJpb3VzIGluY2x1ZGUgZGlycwogICAgICAgICAgZnJvbSBjcHBsaWIubyBydWxlIHRvIGNwcGluaXQubyBydWxlLiAgQWRqdXN0IGRlcGVuZGVuY2llcy4KClRodSBGZWIgMTggMTM6MTU6NTYgMTk5OSAgTWFyYyBFc3BpZSA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKCSogYWxwaGEvb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogYWxwaGEveG0tb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogc3BhcmMvb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogc3BhcmMveG0tb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogbTY4ay9vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBtNjhrL3htLW9wZW5ic2QuaDogTmV3IGZpbGUuCgkqIGkzODYvb3BlbmJzZC5oOiBOZXcgZmlsZSwgb3JpZ2luYWxseSBmcm9tIG5ldGJzZC4KCSogaTM4Ni94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgoKMTk5OS0wMi0xNyAxNDo0OSAtMDUwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBNYWtlZmlsZS5pbjogQ29ycmVjdCBkZXBlbmRlbmNpZXMgZm9yIGNwcGxpYiBvYmplY3QgZmlsZXMuCgpXZWQgRmViIDE3IDE0OjA0OjE4IDE5OTkgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLm1kICh7YWRkLHN1Yn1zaTMgYC4nKTogQWRkIGFsdGVybmF0aXZlcyB0byB1c2UgQ1Igb3RoZXIKCXRoYW4gY3IwLgoKV2VkIEZlYiAxNyAxNjo1OToyOCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERvbid0IG1vdmUgZ2l2IGluc24gZm9yIGJpdiB0dXJuZWQgZ2l2CgliZWxvdyBzY2FuX3N0YXJ0LgoKV2VkIEZlYiAxNyAxMDo1NjoyNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB0cmVlLmMgKHRyZWVfbm9kZV9raW5kX25hbWVzLCBwcmludF9vYnN0YWNrX25hbWUsCiAJZ2V0X2lkZW50aWZpZXIsIG1heWJlX2dldF9pZGVudGlmaWVyLCBidWlsZF9zdHJpbmcsCiAJYnVpbGRfZXhwcl93ZmwsIGlzX2F0dHJpYnV0ZV9wLCBsb29rdXBfYXR0cmlidXRlLAogCXByaW50X29ic3RhY2tfc3RhdGlzdGljcywgZ2V0X2ZpbGVfZnVuY3Rpb25fbmFtZV9sb25nLCB0cmVlX2NoZWNrLAogCXRyZWVfY2xhc3NfY2hlY2ssIGV4cHJfY2hlY2spOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JwogCWtleXdvcmQuCgoJKiB0cmVlLmggKGdldF9pZGVudGlmaWVyLCBtYXliZV9nZXRfaWRlbnRpZmllciwgYnVpbGRfc3RyaW5nLAoJYnVpbGRfZXhwcl93ZmwsIGlzX2F0dHJpYnV0ZV9wLCBsb29rdXBfYXR0cmlidXRlLAoJcHJpbnRfb2JzdGFja19zdGF0aXN0aWNzLCBwcmludF9vYnN0YWNrX25hbWUsIHRyZWVfY2hlY2ssCgl0cmVlX2NsYXNzX2NoZWNrLCBleHByX2NoZWNrKTogTGlrZXdpc2UuCgpUdWUgRmViIDE2IDIxOjI5OjM4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYvZnJlZWJzZC1lbGYuaCwgaTM4Ni9nYXMuaCwgaTM4Ni9saW51eC5oOiBGaXggbWlub3Igc3BhY2luZwoJZXJyb3JzLgoKCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IE1hcmsgYW55IHNsb3RzIHVzZWQgZm9yIHRoZSBhcmd1bWVudAoJYXMgaW4tdXNlIGltbWVkaWF0ZWx5IGFmdGVyIHdlJ3JlIGRvbmUgc2F2aW5nIGFueSBzbG90cyB3aGljaAoJd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGlzIGFyZ3VtZW50LiAKClR1ZSBGZWIgMTYgMjE6MDI6MDcgMTk5OSAgQW50b24gSGFydGwgPHRvbmlAZGV2c29mdC5jb20+CgoJKiByczYwMDAubWQgKGNhbGxfdmFsdWUpOiBGaXggdHlwby4KCldlZCBGZWIgMTcgMDE6Mjk6MDcgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBDYWxjdWxhdGUgbWF5YmVfZGVhZCBiZWZvcmUKCWNhbGxpbmcgcmVjb21iaW5lX2dpdnMuCgpXZWQgRmViIDE3IDAwOjQzOjEyIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRHVtcCBiaXYgaW5jcmVtZW50IC0+IGdpdiBjb252ZXJzaW9ucy4KClR1ZSBGZWIgMTYgMTU6MzE6MzkgMTk5OSAgT3ZpZGl1IFByZWRlc2N1ICA8b3ZpZGl1QGN1cC5ocC5jb20+CgoJKiBvYmpjL29iamMtYWN0LmMgKGVuY29kZV90eXBlKTogRW5jb2RlIHRoZSB0eXBlIGluc3RlYWQgb2YKIAllbmNvZGluZyB0aGUgbW9kZSBvZiB0aGUgdHlwZSAocGF0Y2ggZnJvbSBSaWNoYXJkIEZyaXRoLU1hY2RvbmFsZAogCTxyaWNoYXJkQGJyYWluc3Rvcm0uY28udWs+KS4KClR1ZSBGZWIgMTYgMTA6NTM6NTEgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGNvbmZpZy9hcm0vYXJtLm1kICgqemVyb2V4dHJhY3RxaV9jb21wYXJlMF9zY3JhdGNoKTogUmUtYWRkIGxvYWQKCWluc3RydWN0aW9uIGtpbGxlZCBpbiBwcmV2aW91cyBjaGFuZ2UuICBTaW1wbGlmeSBtYXNrIGdlbmVyYXRpb24uCgkoKnplcm9leHRyYWN0c2lfY29tcGFyZTBfc2NyYXRjaCk6IFNpbXBpZnkgbWFzayBnZW5lcmF0aW9uLgoKVHVlIEZlYiAxNiAwOTo1MjoyNiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0ubWQgKHplcm9leHRyYWN0cWlfY29tcGFyZTBfc2NyYXRjaCk6IEVuc3VyZSB0aGF0CgliaXRmaWVsZCBkb2VzIG5vdCBvdmVyZmxvdyBhIGJ5dGUgYm91bmRhcnkuCgpUdWUgRmViIDE2IDAxOjM3OjMzIDE5OTkgIENoYXJsZXMgRyBXYWxkbWFuICA8Y2d3QGFsdW0ubWl0LmVkdT4KCgkqIGMtY29tbW9uLmMgKHNob3J0ZW5fY29tcGFyZSk6IEdldCB0aGUgbWluL21heCB2YWx1ZSBmcm9tIHRoZQoJdW5kZXJseWluZyB0eXBlIG9mIGFuIGVudW1lcmF0aW9uLCBub3QgdGhlIGVudW1lcmF0ZWQgdHlwZSBpdHNlbGYuCgpNb24gRmViIDE1IDIzOjA0OjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGp1bXAuYzogSW5jbHVkZSBpbnNuLWF0dHIuaC4KCShkZWxldGVfY29tcHV0YXRpb24pOiBJZiByZWxvYWQgaGFzIGNvbXBsZXRlZCBhbmQgaW5zbiBzY2hlZHVsaW5nCglhZnRlciByZWxvYWQgaXMgZW5hYmxlZCwgdGhlbiBkbyBub3QgZGVwZW5kIG9uIFJFR19ERUFEIG5vdGVzLgoJKiBNYWtlZmlsZS5pbiAoanVtcC5vKTogRGVwZW5kIG9uIGluc24tYXR0ci5oLgoKTW9uIEZlYiAxNSAxNjo1NzozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAoYWRkc2kzKTogQWxsb3cgbGVhIGZvciBhbnkgY29uc3RhbnRfcC4KCjE5OTktMDItMTUgMTc6MTEgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogUmVtb3ZlIC1maWRlbnQgYW5kCiAgICAgICAgICAtZm5vaWRlbnQsIHdoaWNoIGFyZSBub3cgaGFuZGxlZCBieSB0aGUgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQKCSAgb3B0aW9uIHBhcnNlci4KCjE5OTktMDItMTUgMTY6NTkgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogYy1jb21tb24uYyAoVU5HRVRDIFtVU0VfQ1BQTElCPTFdKTogRG8gbm90aGluZyBpZiBjIGlzIEVPRi4KCSogYy1sZXguYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5jIChjcHBfcHVzaF9idWZmZXIsIGNwcF9wb3BfYnVmZmVyKTogVXNlIGEgbGlua2VkCglsaXN0IGluIG1hbGxvY2VkIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBzdGFjay4KCShjcHBfZ2V0X3Rva2VuKTogRG9uJ3QgcG9wIHRoZSBsYXN0IGJ1ZmZlciBvZmYgdGhlIHN0YWNrLgoJQ2FsbHMgYWZ0ZXIgQ1BQX0VPRiBoYXMgYmVlbiByZXR1cm5lZCBwcm9kdWNlIENQUF9FT0Ygd2l0aCBubwoJc3RhdGUgY2hhbmdlLgoJKGNwcF9maW5pc2gpOiBQb3AgbGFzdCBidWZmZXIgaGVyZS4KCShkb19saW5lKTogRG9uJ3QgZnJlZSBpcC0+bGFzdF9ub21pbmFsX2ZuYW1lIGlmIGl0IGlzIGVxdWFsIHRvCglpcC0+Zm5hbWUuCgkoc3BlY2lhbF9zeW1ib2wpOiBJZiBhIFRfQ09OU1QgaXMgdGhlIGVtcHR5IHN0cmluZywgcHVzaCBhCglzaW5nbGUgYEAgJyBlc2NhcGUgaW5zdGVhZC4KCShtYWNyb2V4cGFuZCk6IFNwZWNpYWwgc3ltYm9sIGJ1ZmZlcnMgaGF2ZSBlc2NhcGVzIHRvby4KCSogY3BwbGliLmggKHN0cnVjdCBjcHBfYnVmZmVyKTogUmVtb3ZlIHVudXNlZCBmaWVsZHMsIGFkZCBwcmV2CglidWZmZXIgcG9pbnRlci4KCShzdHJ1Y3QgY3BwX3JlYWRlcik6IFJlbW92ZSBidWZmZXJfc3RhY2suICBBZGQKCWJ1ZmZlcl9zdGFja19kZXB0aC4KCShDUFBfUFJFVl9CVUZGRVIsIENQUF9OVUxMX0JVRkZFUik6IEJ1ZmZlciBzdGFjayBpcyBub3cgYQoJbGlua2VkIGxpc3QuCgpNb24gRmViIDE1IDE0OjQ0OjUzIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNjY3AuYzogRG9uJ3QgZGVmaW5lIEhPU1RfV0lERV9JTlQuICBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZgoJV0lERV9JTlQgd2l0aCBXSURFU1RfSU5ULgoKCSogY2V4cC55OiBMaWtld2lzZS4KCURvbid0IGRlZmluZSB1bnNpZ25lZF9IT1NUX1dJREVfSU5ULCBDSEFSX0JJVCBvcgogCUhPU1RfQklUU19QRVJfV0lERV9JTlQuICBSZXBsYWNlIG9jY3VycmVuY2VzIG9mIFBSSU5URl9QUk9UT18xKCkKIAlzdHlsZSB3aXRoIFBWUFJPVE8oKSBBVFRSSUJVVEVfUFJJTlRGXzEgc3R5bGUgbWFjcm9zLiAgUmVwbGFjZQogCW9jY3VycmVuY2VzIG9mICJ1bnNpZ25lZF9IT1NUIiB3aXRoICJ1bnNpZ25lZCBIT1NUIi4gIFByb3ZpZGUgYQogCWRlZmluaXRpb24gb2YgdmFyaWFibGUgYGM4OScgd2hlbiBjb21waWxpbmcgYSB0ZXN0IGJpbmFyeSBhbmQgc2V0IGl0LgoKCSogc3lzdGVtLmg6IERvbid0IGRlZmluZSB0aGUgUFJJTlRGX1BST1RPXyogbWFjcm9zLgoKTW9uIEZlYiAxNSAxMTozMzo1MSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKG1hcmtfbG9vcF9qdW1wKTogSGFuZGxlIExPX1NVTS4gIElmIHdlIGVuY291bnRlciBzb21ldGhpbmcKCXdlIGRvIG5vdCB1bmRlcnN0YW5kLCBtYXJrIHRoZSBsb29wIGFuZCBjb250YWluaW5nIGxvb3BzIGFzIGludmFsaWQuCgpNb24gRmViIDE1IDAwOjQwOjQ1IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGFsaWFzLmMgKGluaXRfYWxpYXNfYW5hbHlzaXMpOiBBdm9pZCBzZWxmLXJlZmVyZW50aWFsIHZhbHVlCgl3aGVuIHNldHRpbmcgcmVnX2tub3duX3ZhbHVlIGZyb20gUkVHX0VRVUFMIG5vdGVzLgoKU3VuIEZlYiAxNCAyMzoxMjoxMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChsZWdpdGltYXRlX2FkZHJlc3NfcCk6IFZlcmlmeSBtb2RlcyBvZiBiYXNlIGFuZCBpbmRleC4KClN1biBGZWIgMTQgMjM6MDE6MjggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuYyAobGVnaXRpbWF0ZV9waWNfYWRkcmVzc19kaXNwX3ApOiBSZW1vdmUgc3RhdGljLgoJKiBpMzg2LmggKExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCk6IFVzZSBpdCBpbnN0ZWFkIG9mCglvcGVuLWNvZGluZyBjYXNlcy4KClN1biBGZWIgMTQgMjE6MDM6MjggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZXhjZXB0LmMgKHN0YXJ0X2NhdGNoX2hhbmRsZXIpOiBVc2UgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMuCgkqIGV4cGxvdy5jIChwcm9iZV9zdGFja19yYW5nZSk6IExpa2V3aXNlLgoJKiBleHBtZWQuYyAoZG9fY21wX2FuZF9qdW1wKTogTGlrZXdpc2UuCgkqIGV4cHIuYyAoc3RvcmVfZXhwciwgZXhwYW5kX2V4cHIsIGV4cGFuZF9idWlsdGluKTogTGlrZXdpc2UuCgkoZG9fdGFibGVqdW1wKTogTGlrZXdpc2UuCgkqIHN0bXQuYyAoZXhwYW5kX2V4cHJfc3RtdCwgZXhwYW5kX2VuZF9jYXNlKTogTGlrZXdpc2UuCgkoZG9fanVtcF9pZl9lcXVhbCwgZW1pdF9jYXNlX25vZGVzKTogTGlrZXdpc2UuCgkqIG9wdGFicy5jIChlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IENsYXJpZnkgY29tbWVudHMuICBJZiBVTlNJR05FRFAsCgl0aGVuIGNvbnZlcnQgY29tcGFyaXNvbiB0byBhbiB1bnNpZ25lZCBjb2RlIGJlZm9yZSBlbWl0dGluZyB0aGUganVtcC4KCShleHBhbmRfZmxvYXQsIGV4cGFuZF9maXgpOiBVc2UgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMuCgpTdW4gRmViIDE0IDAyOjI0OjE1IFBTVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAxNCAwMToxNTowNCBQU1QgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBGZWIgMTQgMDA6NDU6NTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jOiBEaXNhYmxlIHJlY2VudCBsb29wIGNoYW5nZXMuICBUZW1wb3JhcnkgYXMgSm9lcm4KCWNvbnRpbnVlcyB0byBmaXggcHJvYmxlbXMuCgpTYXQgRmViIDEzIDIzOjI5OjQyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGNvbWJpbmVfZ2l2c191c2VkX2J5X290aGVyKTogRGVsZXRlLgoJKGNvbWJpbmVfZ2l2c19iZW5lZml0X2Zyb20pOiBEZWxldGUuCgkoY29tYmluZV9naXZzKTogRGVueSBjb21iaW5hdGlvbiBvZiBnaXZzIG9ubHkgdXNlZCBvbmNlLiAgU2ltcGxpZnkKCWNvZGUgd2l0aCB0aGUgZGVhdGggb2YgY29tYmluZV9naXZzX2JlbmVmaXRfZnJvbS4KClN1biBGZWIgMTQgMTE6MjQ6MDUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKIAkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQ2FsbCByZWdfaW5fYmFzaWNfYmxvY2tfcCBiZWZvcmUKCWxvb3BfcmVnX3VzZWRfYmVmb3JlX3AuCgpTYXQgRmViIDEzIDA1OjMyOjAwIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0ubWQ6IFVzZSBnZW5fcnR4X0ZPTyBpbnN0ZWFkIG9mIGdlbl9ydHggKEZPTywgLi4uKS4KCSogYXJtLmg6IExpa2V3aXNlLgoJKiBhcm0uYzogTGlrZXdpc2UuCgoJKiBhcm0uaCAoVEFSR0VUX09QVElPTlMpOiBSZWZvcm1hdCBmb3IgY2xhcml0eS4KCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBXaGVuIGdlbmVyYXRpbmcgUElDLCByZWZlcmVuY2VzIHRvIHN5bWJvbHMKCWluIHRoZSBjb25zdGFudCBwb29sIGFyZW4ndCB2YWxpZC4KCShMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1ApOiBMaWtld2lzZS4KCgkqIGFybS5jOiBJbmNsdWRlICJzeXN0ZW0uaCIsIG5vdCBzdGRpby5oIGFuZCBzdHJpbmcuaC4KCkZyaSBGZWIgMTIgMTM6MDY6MjggMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogUmV0dXJuIGlmIG9wdGltaXplX3RhaWxfcmVjdXJzaW9uIHN1Y2NlZWRlZC4KCShvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IENoYW5nZSByZXR1cm4gdHlwZSBmcm9tIHZvaWQgdG8gaW50LgoJQWRkIHJldHVybiBzdGF0ZW1lbnRzLgoJKiB0cmVlLmggKG9wdGltaXplX3RhaWxfcmVjdXJzaW9uKTogQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaC4KCkZyaSBGZWIgMTIgMjE6MDk6NTEgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19zdWJyZWdfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJZmluZF9yZWxvYWRzX3RvcGxldi4KCShmaW5kX3JlbG9hZHNfdG9wbGV2LCBmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogVXNlIGl0LgoKRnJpIEZlYiAxMiAxMzoyMDo1MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5tZCAoemVyb19leHRlbmRoaXNpMiBIOC8zMDAgdmFyaWFudCk6IENvcnJlY3RseSBoYW5kbGUKCWV4dGVuZGluZyBhIENPTlNUX0lOVC4KCgkqIGg4MzAwLm1kIChwZWVwaG9sZSBmb3IgY29tYmluaW5nIG1lbXJlZnMpOiBEZWxldGUgaW5jb3JyZWN0IHBlZXBob2xlLgoKRnJpIEZlYiAxMiAxODoyOToxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGxvb3BfaW5zbl9maXJzdF9wLCBiaXZfZWxpbWluYXRpb25fZ2l2X2hhc18wX29mZnNldCk6CglOZXcgZnVuY3Rpb25zLgoJKG1heWJlX2VsaW1pbmF0ZV9iaXZfMSk6IFVzZSBiaXZfZWxpbWluYXRpb25fZ2l2X2hhc18wX29mZnNldC4KCkZyaSBGZWIgMTIgMTY6NTY6MTAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChsb2FkX21lbXMpOiBEb24ndCBndWVzcyBob3cgdG8gZG8gYSBsb2FkIC8gc3RvcmUsIHVzZQoJZW1pdF9tb3ZlX2luc24uCgpGcmkgRmViIDEyIDA5OjI0OjI2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oOiBQcm92aWRlIGEgZGVmaW5pdGlvbiBmb3IgSE9TVF9XSURFU1RfSU5ULCBldGMuCgpGcmkgRmViIDEyIDIzOjM3OjI2IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2Nvc3QpOiBSZXZlcnQgOSBGZWIgY2hhbmdlLiAKCkZyaSBGZWIgMTIgMDA6NTE6MjYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKICAgICAgICAqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogRml4IGhhbmRsaW5nIG9mIGFuIGF1dG9pbmNyZW1lbnRlZAogICAgICAgIHBzZXVkbyB3aGljaCBpcyBob21lZCBpbiB0aGUgc3RhY2suCgoJKiBtaXBzLmMgKHNhdmVfcmVzdG9yZV9pbnNucyk6IEZpeCBsb29wIHRvIHNhdmUvcmVzdG9yZSBGUCByZWdpc3RlcnMuCgkoY29tcHV0ZV9mcmFtZV9zaXplKTogQ2hhbmdlIGxvb3Agb3ZlciBGUCByZWdzIHRvIGJlIGNvbnNpc3RlbnQKCXdpdGggdGhlIGxvb3AgaW4gc2F2ZV9yZXN0b3JlX2luc25zLgoKVGh1IEZlYiAxMSAxNzozODo0MCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpOTYwL2k5NjAuaCAoT1ZFUlJJREVfT1BUSU9OUyk6IFdhcm4gaWYgLW1sb25nLWRvdWJsZS02NCBpcyB1c2VkLgoJKExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IFVuZGVmIHRoZW4gdW5jb25kaXRpb25hbGx5IGRlZmluZSB0byA5Ni4KClRodSBGZWIgMTEgMTU6MTE6MzUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDIwMC5tZCAoYnNldCk7IFJlLWVuYWJsZS4KClRodSBGZWIgMTEgMTU6MjA6NDkgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2gubWQgKGlzX3NmdW5jKTogTmV3IGF0dHJpYnV0ZS4KCSogc2guaCAoSU5TTl9TRVRTX0FSRV9ERUxBWUVELCBJTlNOX1JFRkVSRU5DRVNfQVJFX0RFTEFZRUQpOiBVc2UgaXQuCgpUaHUgRmViIDExIDAxOjA2OjQ5IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBmb2xkLWNvbnN0LmMgKHJhbmdlX2Jpbm9wKTogVGFrZSBhY2NvdW50IG9mIHRoZSBib3VuZGVkIG5hdHVyZQoJb2YgZml4ZWQgbGVuZ3RoIGFyaXRobWV0aWMgd2hlbiBjb21wYXJpbmcgdW5ib3VuZGVkIHJhbmdlcy4KClRodSBGZWIgMTEgMDA6MDg6MTcgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBDbGVhciBiZXN0X3AKCXdoZW4gYW4gZXhhY3QgbWF0Y2ggaXMgZm91bmQuCgoJKiBpMzg2LmggKExPQ0FMX0FMSUdOTUVOVCk6IERlZmluZS4KCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsLCBhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOiBVc2UgaXQuCgkoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBOZXcgZnVuY3Rpb24gYmFzZWQgb24gYXNzaWduX3N0YWNrX3RlbXAuCgkoYXNzaWduX3N0YWNrX3RlbXApOiBDYWxsIGl0LgoJKGFzc2lnbl90ZW1wKTogVXNlIGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlLCBub3QgYXNzaWduX3N0YWNrX3RlbXAuCgkqIHN0bXQuYzogVXNlIGFzc2lnbl90ZW1wLCBub3QgYXNzaWduX3N0YWNrX3RlbXAuCgkqIHRtLnRleGk6IERvY3VtZW50IExPQ0FMX0FMSUdOTUVOVC4KCldlZCBGZWIgMTAgMjM6Mjg6MjggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYzogRmluaXNoIGRlbGV0aW5nIGhhbGYtZGVsZXRlZCBjb21tZW50LgoKV2VkIEZlYiAxMCAxNzoxMjoyMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBTaWduIGV4dGVuZCBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUKCXJlc3VsdC4KCSogZmluYWwuYyAoc3BsaXRfZG91YmxlKTogU2lnbiBleHRlbmQgUkVBTF9WQUxVRV9UT19UQVJHRVRfRE9VQkxFCglyZXN1bHQuCgkqIHJlYWwuYyAoZW5kaWFuKTogRGVsZXRlIHNpZ24gZXh0ZW5zaW9uIGNvZGUuCgkqIGNvbmZpZy9tMzJyL20zMnIubWQgKG1vdnNmX2luc24rMSk6IFJFQUxfVkFMVUVfVE9fVEFSR0VUX1NJTkdMRSBjYWxsCglyZXBsYWNlZCB3aXRoIG9wZXJhbmRfc3Vid29yZCBjYWxsLgoKV2VkIEZlYiAxMCAxNToxNjozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGNtb3YgY29tcG91bmQgcGF0dGVybnMpOiBEZWxldGUuICBKdW1wIGNhbiBub3cKCWNyZWF0ZSB0aGUgY29ycmVjdCBjb25zdHJ1Y3RzIGluIHRoZSBmaXJzdCBwbGFjZS4KCldlZCBGZWIgMTAgMTE6MDM6MjIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoYWxwaGFldjYqKTogRml4IHR5cG8gaW4gdGFyZ2V0X2NwdV9kZWZhdWx0Mi4KCldlZCBGZWIgMTAgMTM6NTk6MTggMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbWJjaGFyLmMgKGxvY2FsX21iX2N1cl9tYXgpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgTUJfQ1VSX01BWCBpcyAwLgoKV2VkIEZlYiAxMCAxMDozNTowNSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiB0bXAtZW1zZ2lkcy5jOiBEZWxldGUuCgpXZWQgRmViIDEwIDA5OjU3OjA4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBydGxhbmFsLmMgKGZvcl9lYWNoX3J0eCk6IEZpeCBkZWNsYXJhdGlvbiB0byBjb25mb3JtIHRvIEdOVQoJY29kaW5nIHN0YW5kYXJkcy4KCldlZCBGZWIgMTAgMTA6MDk6NDEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDIwMC5tZCAoYnNldCwgYmNscik6IE9wZXJhbmQgMCBpcyBhIHJlYWQvd3JpdGUgb3BlcmFuZC4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IFNlY29uZCBhcmd1bWVudCBpcyBubwoJbG9uZ2VyIHVudXNlZC9pZ25vcmVkLiAgSGFuZGxlIG11bHRpLXJlZ2lzdGVyIGhhcmQgcmVncy4KCShtb3ZlMmFkZF9ub3RlX3N0b3JlKTogU2ltcGxpZnkuCgpXZWQgRmViIDEwIDEwOjA1OjIzIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKICAgICAgICAqIGNvbGxlY3QyLmMgKGNvbGxlY3RfZXhlY3V0ZSk6IFJlbW92ZSBjeWd3aW4tc3BlY2lmaWMgY29kZS4KClR1ZSBGZWIgIDkgMTc6Mjc6MjkgR01UIDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBzeXN0ZW0uaCAoXywgTl8pOiBSZW1vdmUgZHVtbXkgaTE4biBtYWNyb3MuCgkqIHByb3RvaXplLmM6IE1vdmUgaW5jbHVzaW9uIG9mIGludGwuaCB0byBhZnRlciBzeXN0ZW0uaC4KCSogY2V4cC55OiBJbmNsdWRlIGludGwuaC4KCSogY2V4cC5jOiBSZWJ1aWx0LgoKVHVlIEZlYiAgOSAxNjo1MjoyMiAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luLmggKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogTmV3IG1hY3JvIHRvIGlnbm9yZSAKCWZwaWMvZlBJQyBmb3Igd2luZG93czMyIHRhcmdldHMuCgkqIGkzODYveG0tY3lnd2luLmggKEdFVF9FTlZfUEFUSF9MSVNUKTogUmVwbGFjZSAnXFwnIGluIHdpbmRvd3MzMgoJcGF0aHMgd2l0aCAnLycuCgkqIGkzODYvbWluZ3czMi5oIChDUFBfU1BFQyk6IERlZmluZS4KCShDUFBfUFJFREVGSU5FUyk6IEFkZCBNSU5HVzMyIHZlcnNpb24gaWQuCgkqIGkzODYvY3J0ZGxsLmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCgoJKiBNYWtlZmlsZS5pbiAoY29sbGVjdDIkKGV4ZWV4dCkpOiBEZWxldGUgcmVkdW5kYW50IGRlcGVuZGVuY3kgYW5kCglhZGQgbWlzc2luZyBleGVleHQgdG8gdGFyZ2V0LgoKCSogZ2NjLmMgKGNvbnZlcnRfZmlsZW5hbWUpOiBIYW5kbGUgbnVsbCBmaWxlbmFtZSBhcmd1bWVudC4KCldlZCBGZWIgMTAgMTU6NDY6MTAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZoZl9ub2Nsb2JiZXIsICptb3ZoaV9ub2Nsb2JiZXIpOiBVc2UKCW0gY29uc3RyYWludCBpbnN0ZWFkIG9mIFFULgoKMTk5OS0wMi0wOSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IE1vdmUgSVAgdG8gYmUgZGVjbGFyZWQgaW4gZnVuY3Rpb24KCXNjb3BlLCByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIGNhc2Ugc3RhdGVtZW50cy4KCjE5OTktMDItMDkgMTY6NDIgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZmlsZXMuYyAoZmluY2x1ZGUpOiAgSGFuZGxlIHBpcGVzIHByb3Blcmx5IHVuZGVyIG9sZCBCU0QKICAgICAgICAgIGRlcml2YXRpdmVzLgoKMTk5OS0wMi0wOSAxNjo0MiAtMDUwMCAgTWVsaXNzYSBPJ05laWxsIDxvbmVpbGxAY3Muc2Z1LmNhPgoKCSogc3lzdGVtLmg6IFByb3ZpZGUgZmFsbGJhY2sgZGVmaW5pdGlvbnMgZm9yIFNfSVNDSFIsCiAgICAgICAgICBTX0lTU09DSywgU19JU0ZJRk8sIE9fTk9OQkxPQ0ssIGFuZCBPX05PQ1RUWS4KCjE5OTktMDItMDkgMTA6MzAgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGRvX2RlZmluZSk6IEFsbG93IHJlZGVmaW5pbmcgX19TVERDX18gd2l0aCAtRC4KCjE5OTktMDItMDkgIEppbSBCbGFuZHkgIDxqaW1iQHp3aW5nbGkuY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogRm9yIFBvd2VyUEMgY29uZmlndXJhdGlvbnMsIGFjY2VwdCAiNDAxIiwgImVjNjAzZSIsCiAJIjc0MCIsIGFuZCAiNzUwIiBhcyB2YWxpZCBhcmd1bWVudHMgdG8gLS13aXRoLWNwdS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIEZlYiAgOSAwMDowMDoxNCAxOTk5ICBNYXJrIEtldHRlbmlzICA8a2V0dGVuaXNAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2N104Ni0qZ251Kik6IFNldCBmbG9hdF9mb3JtYXQgdG8gaTM4Ni4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIEZlYiAgOCAyMjozODoyNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAubWQ6IFJldmVydCAiYWx0ZXJuYXRlIHVzZSBvZiBjcnMgaWYgY3IwIG5vdCBhdmFpbGFibGUiCglwYXRjaGVzIGZyb20gMDEtMjItMTk5OSwgMDEtMjQtMTk5OSwgMDEtMjYtMTk5OSwgYW5kIDAyLTA4LTE5OTkuCgpNb24gRmViICA4IDIxOjM2OjQ0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCk6IFJlbmFtZSBmcm9tCgljdXJyZW50X2Z1bmN0aW9uX2FkZHJlc3Nlc19sYWJlbHMuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IExpa2V3aXNlIGZvciBhZGRyZXNzZXNfbGFiZWxzIG1lbWJlci4KCSogcnRsLmggKEZVTkNUSU9OX0ZMQUdTX0hBU19DT01QVVRFRF9KVU1QKTogTGlrZXdpc2UuCgkqIGZ1bmN0aW9uLmMgKGN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXApOiBMaWtld2lzZS4KCVVwZGF0ZSBhbGwgcmVmZXJlbmNlcy4KCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6CglUZXN0IGN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXAgaW5zdGVhZCBvZiBhZGRyZXNzZXNfbGFiZWxzLgoJKGluaXRpYWxpemVfZm9yX2lubGluZSk6IExpa2V3aXNlIHNhdmUuCgkob3V0cHV0X2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlIHJlc3RvcmUuCgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRG9uJ3QgcmVmZXJlbmNlIGFkZHJlc3Nlc19sYWJlbHMgdmFyaWFibGVzLgoJKiBzdG10LmMgKGV4cGFuZF9jb21wdXRlZF9nb3RvKTogU2V0IGhhc19jb21wdXRlZF9qdW1wLgoKMTk5OS0wMi0wOCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJVGhpcyBpcyBiZWluZyBpbnN0YWxsZWQgb25seSB0byBnZXQgaXQgaW50byB0aGUgcmVwb3NpdG9yeSB0byBoZWxwCgl3aXRoIHRoZSByZXZlcnQsIHJlc3VibWl0ICYgcmV2aWV3IHByb2Nlc3MgZm9yIHRoZSBtYXNzaXZlIHJzNjAwMC5tZAoJY2hhbmdlcy4KICAgICAgICAqIHJzNjAwMC5tZCAoYW5kc2kzX2ludGVybmFsMSBzcGxpdHRlcik6IERvbid0IHNwbGl0IGlmIHVzaW5nIHRoZQogICAgICAgIHJsd2lubSBpbnN0cnVjdGlvbi4KICAgICAgICAoYW5kZGkzX2ludGVybmFsMSk6IERpdHRvLgogICAgICAgIChhbmRzaTNfaW50ZXJuYWx7MiwzfSk6IENvcnJlY3Qgc29tZSBpbnNuIGxlbmd0aHMuCiAgICAgICAgKGFuZGRpMyopOiBSZXN0b3JlIG1pc3NpbmcgVEFSR0VUX1BPV0VSUEM2NCwgYW5kIGRvbid0IGVtaXQgb2xkCiAgICAgICAgbW5lbW9uaWNzLgoKTW9uIEZlYiAgOCAyMTozMTowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChyZWdfc2luZ2xlX3VzYWdlKTogTmV3IGZpbGUtc2NvcGUgdmFyaWFibGUgLi4uCgkoc2Nhbl9sb29wKTogLi4uIG1vdmVkIG91dCBvZiBoZXJlLiAgQWx3YXlzIGluaXRpYWxpemUuCglUZXN0IGxvb3BfaGFzX2NhbGwgaW5zdGVhZCBvZiByZWdfc2luZ2xlX3VzYWdlIG5vdCB6ZXJvLgoJRnJlZSByZWdfc2luZ2xlX3VzYWdlIGFmdGVyIHN0cmVuZ3RoIHJlZHVjdGlvbi4KCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogQXNzdW1lIHNpbmdsZV91c2FnZSBub24temVyby4KCShjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcik6IFRlc3QgcmVnX3NpbmdsZV91c2FnZS4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IFJlbW92ZSByZWdfc2luZ2xlX3VzYWdlCglhcyBhIHBhcmFtZXRlci4gIEFzc3VtZSBub24temVyby4KCQoxOTk5LTAyLTA4IDIzOjI1IC0wNTAwICBaYWNrIFdlaW5iZXJnICA8emFja0BtaWRuaXRlLmVjLnJobm8uY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKHNwZWNpYWxfc3ltYm9sKTogUmV3cml0ZS4gIERvbid0IGNvcHkgdGhpbmdzCgkgIG11bHRpcGxlIHRpbWVzLiAgSGFuZGxlIF9fU1REQ19fIHNwZWNpYWxseS4gIFRfQ09OU1QKCSAgaW5kaWNhdGVzIGEgY29uc3RhbnQgL3N0cmluZy8uICBEb24ndCBoYW5kbGUgVF8qX1RZUEUgYW5kCgkgIFRfU1BFQ19ERUZJTkVELiAgVXNlIGNwcF9idWZfbGluZV9hbmRfY29sIGluc3RlYWQgb2YKCSAgYWRqdXN0X3Bvc2l0aW9uLiAgRGV0ZXJtaW5lIHRoZSBmaWxlIGJ1ZmZlciBvbmx5IGlmIG5lZWRlZC4KCSAgKGluaXRpYWxpemVfYnVpbHRpbnMpOiBIYW5kbGUgX19TSVpFX1RZUEVfXywKCSAgX19QVFJESUZGX1RZUEVfXywgX19XQ0hBUl9UWVBFX18sIF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgYW5kCgkgIF9fUkVHSVNURVJfUFJFRklYX18gd2l0aCBUX0NPTlNUIHNwZWNpYWwgaGFzaHRhYiBlbnRyaWVzLgoJICBEb24ndCBwcm92aWRlIF9fT0JKQ19fOyB0aGUgZHJpdmVyIGRvZXMgdGhhdC4JIFByb3ZpZGUKCSAgX19TVERDX1ZFUlNJT05fXywgdXNpbmcgVF9DT05TVC4gIFVzZSBUX1NUREMgZm9yCgkgIF9fU1REQ19fLiAgR2l2ZSBpbnN0YWxsIHRoZSBsZW5ndGggb2YgYWxsIHN5bWJvbHMgZGVmaW5lZC4KCSAgKGV2YWxfaWZfZXhwcmVzc2lvbik6IERyb3AgY29kZSB0byBpbnNlcnQgYW5kIHJlbW92ZSB0aGUKCSAgImRlZmluZWQiIHNwZWNpYWwgc3ltYm9sLgoKCSogY3BwbGliLmg6IFJlbW92ZSBTRUxGX0RJUl9EVU1NWSAobm8gbG9uZ2VyIHVzZWQpLiAgUmVtb3ZlCgkgIFRfKl9UWVBFIGFuZCBUX1NQRUNfREVGSU5FRCBmcm9tIGVudW0gbm9kZV90eXBlOyBhZGQgVF9TVERDLgoKCSogY3BwaGFzaC5jIChpbnN0YWxsKTogRHJvcCB0aGUgYGl2YWx1ZScgcGFyYW1ldGVyLiAgQ29uc3RpZnkKCSAgdGhlIGB2YWx1ZScgcGFyYW1ldGVyLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCSogY3BwaGFzaC5oIChpbnN0YWxsKTogQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaC4KCSAgKHVuaW9uIGhhc2h2YWwpOiBSZW1vdmUgYGl2YWwnIG1lbWJlci4KCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBIYW5kbGUgYGRlZmluZWQnIGhlcmUuCgpNb24gRmViICA4IDE3OjI5OjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmggKEVYVFJBX0NPTlNUUkFJTlQpOiBGaXggY29tbWVudC4KCk1vbiBGZWIgIDggMTg6NTc6NDUgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjLXR5cGVjay5jIChjaGVja19pbml0X3R5cGVfYml0ZmllbGRzKTogVXNlIG5vbmluY3JlbWVudGFsCglpbml0aWFsaXphdGlvbiBvZiB1bmlvbnMgd2hvc2UgZmlyc3QgbWVtYmVyIGlzIGEgYml0ZmllbGQuCiAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNvZGUgZm9yIGNoZWNraW5nIHRoZSBkZWNsYXJhdGlvbiBtb2RlCiAgICAgICAgYWZ0ZXIgREVDTF9DX0JJVF9GSUVMRC4KCgkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBBZGRpdGlvbmFsIGNvbW1lbnQgYWJvdXQgdGhlCiAJY29uc3RydWN0b3Igb2YgYml0ZmllbGQgdW5pb24gaW5pdGlhbGl6YXRpb24uCgpUdWUgRmViICA5IDExOjU1OjA0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqbW92aGlfc3Rpayk6IE5ldyBwYXR0ZXJuLgoJKG1vdmhpKTogQWxsb3cgc29tZSBpbW1lZGlhdGUgY29uc3RhbnRzIHRvIGJlIGRpcmVjdGx5CglzdG9yZWQgaW4gbWVtb3J5LgoKVHVlIEZlYiAgOSAxMTozNDoxNSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoYWxsIGNhbGwgcGF0dGVybnMpOiBBZGQgY29uc3RyYWludHMgIlVyIi4KCShjYWxsLCBjYWxsX3ZhbHVlKTogRm9yY2UgYWRkcmVzcyBpbnRvIGEgcmVnaXN0ZXIgaWYgbm90IHZhbGlkCglmb3IgYSBjYWxsIGluc3RydWN0aW9uLgoJKGxvYWRfaW1tZWRfYWRkcmVzcyk6IEVtaXQgYSBVU0Ugb2YgdGhlIFNZTUJPTF9SRUYgdGhhdCBpcwoJZm9yY2VkIGludG8gbWVtb3J5LgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfcHJpbnRfb3BlcmFuZCk6IEZpeCAnQycgYW5kICdVJyBtb2RpZmllcnMuCgpUdWUgRmViICA5IDExOjA4OjQxIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGNhbGxfYWRkcmVzc19vcGVyYW5kLCBzeW1ib2xpY19hZGRyZXNzX29wZXJhbmQpOgogCVJlbmFtZSBmcm9tIGNhbGxfb3BlcmFuZCBhbmQgc3ltYm9saWNfb3BlcmFuZCByZXNwZWN0aXZlbHkuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCSogY29uZmlnL2M0eC9jNHgubWQgKGNhbGxfYWRkcmVzc19vcGVyYW5kLCBzeW1ib2xpY19hZGRyZXNzX29wZXJhbmQpOiAKCUxpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5oIChjYWxsX2FkZHJlc3Nfb3BlcmFuZCwgc3ltYm9saWNfYWRkcmVzc19vcGVyYW5kKTogCglMaWtld2lzZS4KCShQUkVESUNBVEVfQ09ERVMpOiBBbGxvdyBDT05TVCwgTEFCRUxfUkVGIGZvciBjYWxsX2FkZHJlc3Nfb3BlcmFuZC4KClR1ZSBGZWIgIDkgMTA6NTI6MjcgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2xlZ2l0aW1pemVfYWRkcmVzcyk6IERvbid0IGdlbmVyYXRlIGEKIAlMT19TVU0gYWRkcmVzcyBmb3IgSEltb2RlIG9yIEhGbW9kZSBidXQgaW5zdGVhZCBmb3JjZSBhZGRyZXNzIGludG8KIAlhIHJlZ2lzdGVyIHNvIHRoYXQgaXQgaXMgb2Zmc2V0dGFibGUuCgkoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IEhhbmRsZSBMT19TVU0gaW1tZWRpYXRlIGFkZHJlc3MuCgpUdWUgRmViICA5IDEwOjQ2OjQyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2Nvc3QpOiBSZXR1cm4gY29zdCBvZiAxIGZvcgoJUkVHK1JFRyBhZGRyZXNzaW5nIGlmIHN0cmVuZ3RoIHJlZHVjdGlvbiBlbmFibGVkLgoKVHVlIEZlYiAgOSAxMDoxMDozMSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L3QtYzR4ICAoTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCgkoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lLgoJCjE5OTktMDItMDggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvdjg1MC92ODUwLm1kOiBSZXBsYWNlIFxcblxcdCB3aXRoIFxcOwoJCgkqIGNvbmZpZy92ODUwL3Y4NTAubWQ6IEVuZm9yY2UgVEFSR0VUX0xPTkdfQ0FMTFMgb3B0aW9uLgoJKiBjb25maWcvdjg1MC92ODUwLmMgKGNvbnN0cnVjdF9yZXN0b3JlX2pyLCBjb25zdHJ1Y3Rfc2F2ZV9qYXJsKToKCUVuZm9yY2UgVEFSR0VUX0xPTkdfQ0FMTFMgb3B0aW9uLiAKCk1vbiBGZWIgIDggMTE6NDM6MDcgMTk5OSAgRG9ubiBUZXJyeSA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIHJlYWwuYyAoUFVUX1JFQUwpIFtYRm1vZGVdOiBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBzdHJ1Y3R1cmUuCgpNb24gRmViICA4IDExOjM3OjI0IDE5OTkgIE1hcmMgRXNwaWUgKGVzcGllQGN2cy5vcGVuYnNkLm9yZykKCgkqIG04OGsvdC1sdW5hLWdhczogUmVtb3ZlIGJhc2ggZGVwZW5kZW5jeS4KCk1vbiBGZWIgIDggMTE6MzQ6NDQgMTk5OSAgR3JhaGFtIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGNvbGxlY3QyLmMgKHhyZWFsbG9jKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpNb24gRmViIDggMDk6MTM6MzggUFNUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRmViICA3IDIyOjE4OjQyIDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogdHJlZS5oIChUWVBFX0NIRUNLKTogTWFrZSBpdCBjbGVhciB0byB0aGUgcHJlcHJvY2Vzc29yCgl0aGF0IHdlIGRvIG5vdCB3YW50IG1hY3JvIHJlcGxhY2VtZW50IHdpdGhpbiBhIGNoYXJhY3RlciBjb25zdGFudC4KCShUWVBFX0NIRUNLMSk6IExpa2V3aXNlLgoKU3VuIEZlYiAgNyAxNTozNzoxMCAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmggKERFQ0xfUCk6IE5ldyBtYWNyby4KClN1biBGZWIgNyAwMToxNTowNCBQU1QgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBGZWIgIDYgMTg6MTQ6NDYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5tZCAocmVsb2FkX2luc2kpOiBEbyBub3QgZWFybHljbG9iYmVyIHRoZSBvdXRwdXQgb3BlcmFuZC4KCgkqIFJFQURNRS5nNzcsIGdjYy5jLCBnY2MudGV4aTogVXBkYXRlIGVtYWlsIGFkZHJlc3Nlcy4KCSogaW52b2tlLnRleGkgc3lzdGVtLmg6IExpa2V3aXNlLgoKU2F0IEZlYiAgNiAxMTowNDowOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiB1bnJvbGwuYyAoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBBZnRlciBleHByZXNzX2Zyb20sIGNhbGwgcmVwbGFjZV9ydHgKCXRvIGNvbnZlcnQgZGVzdF9yZWcgdG8gbmV3X3JlZy4KClNhdCBGZWIgIDYgMTA6MzE6MzUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChyZWxvYWRfY29tYmluZV9ub3RlX3N0b3JlKTogQmUgbW9yZSBjYXJlZnVsIHdpdGgKCVNUUklDVF9MT1dfUEFSVCwgWkVST19FWFRSQUNUIGFuZCBTSUdOX0VYVFJBQ1QuCgkobW92ZTJhZGRfbm90ZV9zdG9yZSk6IExpa2V3aXNlLgoKU2F0IEZlYiAgNiAxMDoxODowMSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGB4cmVhbGxvYycgdG8KIAlVX0NIQVIqIHdoZW4gYXNzaWduaW5nIHRvIG9uZS4gIEVuc3VyZSB0aGUgdmFsdWVzIG9mIGEgPzogb3BlcmF0b3IKIAloYXZlIHRoZSBzYW1lIHR5cGUuCgoJKiBjcHBpbml0LmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBVc2UgSyZSIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpTYXQgRmViICA2IDExOjE3OjAzIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgPHJlYXJuc2hhQGFybS5jb20+CgoJU3VwcG9ydCBmb3IgQVJNOQoJKiBjb25maWcvYXJtL2FybS5jIChhbGxfcHJvY3MpOiBBZGQgYXJtOSBhbmQgYXJtOXRkbWkuCgkqIGNvbmZpZy9hcm0vYXJtLmggKChUQVJHRVRfQ1BVX2FybTksIFRBUkdFVF9DUFVEX2FybTl0ZG1pKTogRGVmaW5lLgoJKFRBUkdFVF9DUFVfREVGQVVMVCk6IFJld29yayB0byBzdXBwb3J0IEFSTTkuCgkoQ1BQX0NQVV9BUkNIX1NQRUMpOiBMaWtld2lzZS4KCShlbnVtIHByb2Nlc3Nvcl90eXBlKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChhdHRyIGNwdSk6IEFkZCBhcm05LgoKCUdlbmVyYWwgc2NoZWR1bGluZyBjaGFuZ2VzIAoJKiBjb25maWcvYXJtL2FybS5jIChNQVhfSU5TTlNfU0tJUFBFRCk6IERlbGV0ZS4KCShtYXhfaW5zbnNfc2tpcHBlZCk6IE5ldyB2YXJpYWJsZS4KCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IElmIGdlbmVyYXRpbmcgaGFyZCBmbG9hdGluZyBwb2ludCBjb2RlIGZvcgoJdGhlIEZQQSwgZW1pdCBjb2RlIGZvciB2ZXJzaW9uIDMuCglXaGVuIG9wdGltaXppbmcgZm9yIHNwYWNlLCBkb24ndCBzeW50aGVzaXplIGNvbnN0YW50cy4KCVJld29yZCBzZXZlcmFsIGZsYWdzIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzc29yIGFuZCBvcHRpbWl6YXRpb24KCWxldmVsLgoJKHVzZV9yZXR1cm5faW5zbik6IE5ldyBhcmd1bWVudCBpc2NvbmQsIGFsbCBjYWxsZXJzIGNoYW5nZWQuICBEb24ndAoJdXNlIGEgcmV0dXJuIGluc24gaWYgaXQgd2lsbCBiZSBjb25kaXRpb25hbCBhbmQgdGhhdCB3b3VsZCBiZSAKCWV4cGVuc2l2ZTsgZWcgb24gU3Ryb25nQVJNLgoJKGFybV9hZGp1c3RfY29zdCk6IEFudGktIGFuZCBvdXRwdXQtIGRlcGVuZGVuY2llcyBub3JtYWxseSBoYXZlIG5vCgljb3N0LgoJKGxvYWRfbXVsdGlwbGVfc2VxdWVuY2UpOiBOZXdlciBBUk1zIGRvbid0IGJlbmVmaXQgZnJvbSBsZG0gaWYKCXRoZSBzZXF1ZW5jZSBpcyBzaG9ydC4KCShmaW5hbF9wcmVzY2FuX2luc24pOiBVc2UgbWF4X2luc25zX3NraXBwZWQgaW5zdGVhZCBvZiAKCU1BWF9JTlNOU19TS0lQUEVELiAgTm90ZSB3aGV0aGVyIHdlIHdpbGwgbWFrZSBhIHJldHVybiBpbnN0cnVjdGlvbgoJY29uZGl0aW9uYWwsIGFuZCBhdmlvZCB0aGlzIGlmIGl0IHdvdWxkIGJlIGV4cGVuc2l2ZS4KCSogY29uZmlnL2FybS9hcm0ubWQgKHNjaGVkdWxpbmcgYXR0cmlidXRlcyBhbmQgZnVuY3Rpb24gdW5pdHMpOgogCVJld3JpdGUgdG8gYmV0dGVyIGRlc2NyaWJlIEFSTTgsIDkgYW5kIFN0cm9uZ0FSTS4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kICgqbW92aGlfaW5zbl9saXR0bGVlbmQpOiBNYWtlIG9wMCBwcmVkaWNhdGUgCglzX3JlZ2lzdGVyX29wZXJhbmQuCgkoKmlmY29tcGFyZV9wbHVzX21vdmUpOiBVc2UgYXJtX3Joc19vcGVyYW5kIGluIHBsYWNlIG9mIAoJYXJtX3Joc21fb3BlcmFuZC4gIFJld29yayBjb25zdHJhaW50cy4KCSgqaWZfcGx1c19tb3ZlKTogTGlrZXdpc2UuCgkoKmlmY29tcGFyZV9tb3ZlX3BsdXMpOiBMaWtld2lzZS4KCSgqaWZfbW92ZV9wbHVzKTogTGlrZXdpc2UuCgkoKmlmY29tcHJlX2FyaXRoX21vdmUpOiBMaWtld2lzZS4KCSgqaWZfYXJpdGhfbW92ZSk6IExpa2V3aXNlLgoJKCppZmNvbXBhcmVfbW92ZV9hcml0aCk6IExpa2V3aXNlLgoJKCppZl9tb3ZlX2FyaXRoKTogTGlrZXdpc2UuCgoJKiBjb25maWcvYXJtL3htLW5ldGJzZC5oOiBEb24ndCBpbmNsdWRlIGFybS94bS1hcm0uaC4KCQoxOTk5LTAyLTA1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQSBzdG9yZSB1c2luZyBhbiBhZGRyZXNzIGdpdiBmb3Igd2hpY2gKCXdlIGhhdmUgbm8gbGlmZSBpbmZvcm1hdGlvbiBpcyBub3QgcmV2ZXJzaWJsZS4KCkZyaSBGZWIgIDUgMTc6MDg6MDEgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKICAgICAgICAqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzKTogU2NhbiBjYXRjaF9jbGF1c2VzIHRvby4KCkZyaSBGZWIgIDUgMTE6NDk6NDkgMTk5OSAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsb29ueS5jeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogRml4IHJlc2VydmVkIHNwYWNlIGZvciBpbml0X3ByaW9yaXR5LgoJKiB0cmVlLmggKE1BWF9SRVNFUlZFRF9JTklUX1BSSU9SSVRZKTogTmV3IG1hY3JvLgoKRnJpIEZlYiAgNSAxMjozNzowNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENsZWFyIG5vdF9ldmVyeV9pdGVyYXRpb24gd2hlbiAKCXBhc3NpbmcgdGhlIE5PVEVfSU5TTl9MT09QX0NPTlQgbm90ZS4KCgkqIGhhaWZhLXNjaGVkLmMgKGFkZF9kZXBlbmRlbmNlKTogRG8gbm90IGFkZCBhIGRlcGVuZGVuY3kgb24gYQoJbm90ZS4KCkZyaSBGZWIgIDUgMTA6NTU6NDMgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmMgKHNwbGl0X2Jsb2NrX2luc25zKTogT25seSBjYWxsIHVwZGF0ZV9mbG93X2luZm8gaWYKCWluc3RydWN0aW9uIHNjaGVkdWxpbmcgaXMgZW5hYmxlZC4KCjE5OTktMDItMDUgMTE6MjIgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGdlbi1wcm90b3MpOiBVc2UgbGliY3BwLmEgbGlrZSBldmVyeW9uZSBlbHNlLgoKRnJpIEZlYiAgNSAwNzowOToyOSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGZpcnN0X2xvb3Bfc3RvcmVfaW5zbik6IE5ldyBmaWxlLXNjb3BlIHZhcmlhYmxlLgoJKHByZXNjYW5fbG9vcCk6IFNldCBpdC4KCShjaGVja19kYnJhX2xvb3ApOiBDaGVjayBpZiBhIHN0b3JlIGRlcGVuZHMgb24gYSByZWdpc3RlcgoJdGhhdCBpcyBzZXQgYWZ0ZXIgdGhlIHN0b3JlLgoKRnJpIEZlYiAgNSAwNjo1NToxNSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAoZW50aXJlIGZpbGUpOiBSZW1vdmUgdGFicyAvIHNwYWNlcyBhdCBlbmQgb2YgbGluZXMuCglSZXBsYWNlIHNwYWNlcyB3aXRoIHRhYnMgd2hlcmUgYXBwcm9wcmlhdGUuCgpUaHUgRmViICA0IDE1OjEyOjQxIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogTmV3IGFyZ3VtZW50IGxvb3BfY29udC4gIENoYW5nZWQgY2FsbGVyLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IE5ldyBhcmd1bWVudCBsb29wX2NvbnQuIENoYW5nZWQgY2FsbGVyLgoJQmVmb3JlIGNsZWFyaW5nIG5vdF9ldmVyeV9pdGVyYXRpb24gYWZ0ZXIgYSBsYWJlbCwgY2hlY2sgaWYKCXdlIGFyZSBub3QgYWxyZWFkeSBwYXN0IExPT1BfQ09OVC4KCjE5OTktMDItMDQgMTY6MDQgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZXJyb3IuYyAoY3BwX3ByaW50X2NvbnRhaW5pbmdfZmlsZXMpOiBGaXggZm9ybWF0dGluZyAKCWJ1ZyBpbmR1Y2VkIGJ5IG1lcmdlLgoKMTk5OS0wMi0wNCAxNDozMyAtMDUwMAlaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBNb3ZlIHRvIGNwcGluaXQuYy4KCShjcHBfZGVmaW5lKTogUmVtb3ZlIHJlZHVuZGFudCBzeW50YXggY2hlY2tzLgoJKG1ha2VfYXNzZXJ0aW9uKTogUmVuYW1lIGNwcF9hc3NlcnQsIHJlbW92ZSByZWR1bmRhbnQgc3ludGF4CgljaGVja3MsIGV4cG9ydC4KCShjcHBfb3B0aW9uc19pbml0KTogRG9uJ3QgaW5pdCB0aGluZ3MgdG8gemVybyB0d2ljZS4KCShjcHBfZXhwYW5kX3RvX2J1ZmZlcik6IFVzZSBtZW1jcHksIG5vdCBhIGNoYXItYnktY2hhciBsb29wLgoJKGRvX2luY2x1ZGUpOiBLaWxsIGV4Y2Vzc2l2ZWx5IHZlcmJvc2UgI2ltcG9ydCB3YXJuaW5nIHRoYXQKCXNudWNrIGJhY2sgaW4gaW4gdGhlIGdjYzIgbWVyZ2UuCgkoY29udmVydF9zdHJpbmcpOiBSZW1vdmVkLgoJKGRvX2xpbmUpOiBSZXdyaXRlIHdpdGggc2ltcGxlIGxhc3QtbmFtZS11c2VkIGNhY2hlIGluc3RlYWQgb2YKCXByaXZhdGUgaGFzaHRhYmxlLgoJKGNwcF9zdGFydF9yZWFkKTogQ2FsbCBpbml0aWFsaXplX2NoYXJfc3ludGF4IGhlcmUsIG5vdC4uLgoJKGNwcF9yZWFkZXJfaW5pdCk6IC4uLmhlcmUuCgkoY3BwX2hhbmRsZV9vcHRpb25zKTogU3VwcG9ydCB0aGUgLXN0ZCBzd2l0Y2guCgkqIGNwcGxpYi5oIChjcHBfYnVmZmVyKTogQWRkIGxhc3Rfbm9taW5hbF9mbmFtZSBtZW1iZXIuCgkoY3BwX29wdGlvbnMpOiBBZGQgYzl4IGZsYWcuCglEZWNsYXJlIGFsbCB0aGUgaXNfKiB0YWJsZXMgYW5kIHRyaWdyYXBoIHRhYmxlIGhlcmUsIGFzIGNvbnN0LgoJUHJvdG90eXBlIGNwcF9hc3NlcnQgYW5kIGluaXRpYWxpemVfY2hhcl9zeW50YXguCgkqIGNwcGluaXQuYzogTmV3IGZpbGUuCgkqIGNwcGZpbGVzLmMgKHJlYWRfYW5kX3ByZXNjYW4pOiBPcHRpbWl6ZS4KCSogTWFrZWZpbGUuaW4gKExJQkNQUF9PQkpTKTogQWRkIGNwcGluaXQuby4KClRodSBGZWIgIDQgMTA6NDY6MzAgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgogICAgICAgKiBjb25maWcvbWlwcy9taXBzLm1kIChbdV1kaXZtb2RzaTQsW3VdZGl2bW9kZGk0LFt1XWRpdnNpMyxbdV1kaXZkaTMsCglbdV1tb2RzaTMsW3VdbW9kZGkzKSA6IERvbid0IGNvcHkgdGhlICJ6ZXJvIiBhcmd1bWVudCB0byBhIHJlZ2lzdGVyCiAgICAgICAJYmVmb3JlIGNhbGxpbmcgZ2VuX2Rpdl90cmFwLgoKV2VkIEZlYiAgMyAyMTo1NjoyNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGExLjEtKi0qLCBocHBhMiotKik6IFVzZSBzeW1ib2xpYyB2YWx1ZSByYXRoZXIKCXRoYW4gbnVtZXJpYyB2YWx1ZSBmb3IgdGFyZ2V0X2NwdV9kZWZhdWx0Li4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKV2VkIEZlYiAgMyAyMTo1NTo1NiAxOTk5ICBNYXJjIEVzcGllIDxNYXJjLkVzcGllQGxpYWZhLmp1c3NpZXUuZnI+CgoJKiBNYWtlZmlsZS5pbiAoeGdjYyQoZXhlZXh0KSk6IFJlbW92ZSBjaG9vc2UtdGVtcCwgcGV4ZWN1dGUgYW5kCglta3N0ZW1wLiAgR2V0IHRoZW0gZnJvbSBsaWJpYmVydHkuCgkoQ09MTEVDVDJfT0JKUyk6IFNpbWlsYXJseSBmb3IgY2hvb3NlLXRlbXAsIGNwbHVzLWRlbSBhbmQgbWtzdGVtcC4KCShQUk9UT19PQkpTKTogU2ltaWxhcmx5IGZvciBjaG9vc2UtdGVtcCwgZ2V0b3B0LCBnZXRvcHQxIGFuZCBwZXhlY3V0ZS4KCShjcGx1cy1kZW0ubywgcGV4ZWN1dGUubywgY2hvb3NlLXRlbXAubyk6IFJlbW92ZSBidWlsZCBydWxlcy4KCShta3N0ZW1wLm8sIGdldG9wdDEubywgZ2V0b3B0Lm8pOiBMaWtld2lzZS4KCgkqIHBhLWdhcy5oIChUQVJHRVRfREVGQVVMVCk6IFVzZSBzeW1ib2xpYyB2YWx1ZXMgcmF0aGVyIHRoYW4gbnVtZXJpYwoJdmFsdWVzLgoJKiBwYS1ocHV4LmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1ocHV4MTAuaCAoTElOS19TUEVDKTogTGlrZXdpc2UuCgkqIHBhLWhwdXg5LmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1vc2YuaDogKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1wcm8uaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KCSogcGExLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCgkqIHBhLmggKE1BU0tfKik6IE5ldyBkZWZpbmVzLgoJKFRBUkdFVF8qKTogVXNlIHN5bWJvbGljIHZhbHVlcyByYXRoZXIgdGhhbiBudW1lcmljIHZhbHVlcy4KCShUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCShUQVJHRVRfREVGQVVMVCk6IGxpa2V3aXNlLgoJKENQUF9TUEVDKTogbGlrZXdpc2UuCgpXZWQgRmViICAzIDIxOjA3OjM4IDE5OTkgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IFVuZG8gSmFuIDE2IHBhdGNoLgoJKiByZWxvYWQuYyAoZmluZF9yZXVzYWJsZV9yZWxvYWQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXB1c2hfcmVsb2FkLiAgQWRkIGNvZGUgdG8gdmVyaWZ5IHRoYXQgbm9uZSBvZiB0aGUgaW52b2x2ZWQKCW91dHB1dHMgYXJlIHN1YmplY3QgdG8gZWFybHljbG9iYmVycy4KCShwdXNoX3JlbG9hZCk6IEJyZWFrIG91dCBuZXcgZnVuY3Rpb24gZmluZF9yZXVzYWJsZV9yZWxvYWQuCglEZWxldGUgInJlZ2lzdGVyIiBrZXl3b3JkIGZvciBJTiwgT1VUIGFyZ3MuCgpXZWQgRmViICAzIDE1OjUxOjA0IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jICh0cnVlX3JlZ19vcl8wX29wZXJhbmQpIDogTmV3IGZ1bmN0aW9uLgoJKiBjb25maWcvbWlwcy9taXBzLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCB0cnVlX3JlZ19vcl8wX29wZXJhbmQuCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKGRpdl90cmFwLGRpdl90cmFwX25vcm1hbCxkaXZfdHJhcF9taXBzMTYpOiAKCVVzZSB0cnVlX3JlZ19vcl8wX29wZXJhbmQgZm9yIGRpdl90cmFwLgoKV2VkIEZlYiAgMyAyMDo0NDo1OSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmggKGV4cHJlc3NfZnJvbSk6IERlY2xhcmUuCgkoc3RydWN0IGluZHVjdGlvbik6IFJlcGxhY2UgZGVyaXZlZCBmbGFnIHdpdGggZGVyaXZlZF9mcm9tIHBvaW50ZXIuCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlLCByZWNvcmRfZ2l2LCByZWNvbWJpbmVfZ2l2cyk6IExpa2V3aXNlLgoJKGV4cHJlc3NfZnJvbSk6IE5vIGxvbmdlciBzdGF0aWMuCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IFJlcGxhY2UgZGVyaXZlZCB3aXRoIGRlcml2ZWRfZnJvbS4KCVdoZW4gcHJvY2Vzc2luZyBhbiBhZGRyZXNzIGdpdiB3aXRoIHdoaWNoIGFub3RoZXIgZ2l2IGhhcyBiZWVuCgljb21iaW5lZCB0aGF0IGhhcyBhbHNvIGJlZW4gZGVyaXZlZCBmcm9tIGEgdGhpcmQgZ2l2LCBoYW5kbGUgbGlrZQoJaGF2aW5nIGNvbWJpbmVkIHdpdGggdGhlIHRoaXJkIGdpdi4KCVNldCBzcGxpdHRhYmxlX3JlZ3NfdXBkYXRlcyBhcHByb3ByaWF0ZWx5IGZvciBkZXJpdmVkIGdpdnMuCgpXZWQgRmViICAzIDE1OjI2OjU4IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAoZGl2X3RyYXBfbWlwczE2KTogUmVtb3ZlIG5vcCdzIGFmdGVyIGJyYW5jaGVzLgoKV2VkIEZlYiAgMyAxMTo1NjoyMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5jIChpbnNuX3NldHNfYW5kX3JlZnNfYXJlX2RlbGF5ZWQpOiBOZXcgZnVuY3Rpb24uCgkqIHBhLmggKElOU05fU0VUU19BUkVfREVMQVlFRCk6IFVzZSBpdC4KCShJTlNOX1JFRkVSRU5DRVNfQVJFX0RFTEFZRUQpOiBMaWtld2lzZS4KIApXZWQgRmViICAzIDA2OjI0OjQ5IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBjb25maWcvYXJtL3QtYXJtLWVsZiAoTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCgkqIGNvbmZpZy9hcm0vdC1saW51eCAoTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCgkoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lLgoJKExJQkdDQzJfREVCVUdfQ0ZMQUdTKTogRGVmaW5lLgoJKiBjb25maWcvYXJtL3QtbmV0YnNkOiBMaWtld2lzZS4KCSogY29uZmlnL2FybS90LXNlbWk6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL3Qtc2VtaWFvZjogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0vdC1yaXNjaXg6IExpa2V3aXNlLgoKV2VkIEZlYiAgMyAxMDo1OTowNyAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFdoZW4gcHJpbnRpbmcgYQoJU1lNQk9MX1JFRiB0aGF0IGVuZHMgaW4gYC48bGV0dGVyPicgcHV0IHBhcmVudGhlc2VzIGFyb3VuZCBpdC4KClR1ZSBGZWIgIDIgMjM6Mzg6MzUgMTk5OSAgRGF2aWQgTydCcmllbiA8b2JyaWVuQEZyZWVCU0Qub3JnPgoKCSogaTM4Ni9mcmVlYnNkKi5oIG5vdyBhbGxvd3MgJyQnIGluIGxhYmVsIG5hbWVzIGFuZCBkb2VzIG5vdCB1c2UgdGhlCglQQ0Mgc3RydWN0IHJldHVybiBtZXRob2QuCgpUdWUgRmViICAyIDIyOjM4OjIzIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgYWxsIHVzZXMgb2YgQVIgdG8gQVJfRk9SX1RBUkdFVC4gIENoYW5nZSBhbGwgdXNlcwoJb2YgSE9TVF9BUiB0byBBUi4gIExpa2V3aXNlIGZvciBBUl9GTEFHUywgUkFOTElCLCBhbmQgUkFOTElCX1RFU1QuCgkoUkFOTElCX1RFU1QpOiBUZXN0IHRvIHNlZSBpZiByYW5saWIgZXhpc3RzLiAgT25seSB0ZXN0IGFic29sdXRlIGZpbGUKCW5hbWVzIGlmIGhvc3QgPT0gdGFyZ2V0LgoJKEhPU1RfQVIsIEhPU1RfQVJfRkxBR1MsIEhPU1RfUkFOTElCLCBIT1NUX1JBTkxJQl9URVNUKTogRGVsZXRlLgoJKEFSX0ZMQUdTX0ZPUl9UQVJHRVQpOiBSZW5hbWVkIGZyb20gQVJfRk9SX1RBUkdFVF9GTEFHUy4KCShBUiwgQVJfRkxBR1MsIE9MREFSLCBPTERBUl9GTEFHUywgUkFOTElCLCBSQU5MSUJfVEVTVCk6IERlbGV0ZSBydWxlcwoJc2V0dGluZyB0aGVtIHRvICpfRk9SX1RBUkdFVC4KCSogY3Jvc3MtbWFrZSAoQVIsIEFSX0ZMQUdTLCBPTERBUiwgT0xEQVJfRkxBR1MsIFJBTkxJQiwgUkFOTElCX1RFU1QpOgoJRGVsZXRlLgoKVHVlIEZlYiAgMiAyMjozODoxOSAxOTk5ICBUaGVvZG9yZSBQYXBhZG9wb3VsbyA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogdG9wbGV2LmggKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogTmV3IGZ1bmN0aW9uLgoKRnJpIEphbiAyOSAyMTowMDo1NiAxOTk5ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHJlc291cmNlLmMsIHJlc291cmNlLmg6IE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgaXQuCgoJKiBoYWlmYS1zY2hlZC5jIChyZWdub191c2VfaW4pOiBNb3ZlZCB0byBydGxhbmFsLmMuCgkoc3BsaXRfYmxvY2tfaW5zbnMpOiBNb3ZlZCB0byByZWNvZy5jLgoJKHVwZGF0ZV9mbG93X2luZm8pOiBNYWtlIHB1YmxpYy4KCSogcnRsLmg6IERlY2xhcmUgdGhlbS4KCgkqIHJlb3JnLmM6IE1vdmVkIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIGNvbXB1dGluZyByZXNvdXJjZQoJdXNhZ2UgdG8gcmVzb3VyY2UuYy4KCgkqIHNjaGVkLmMgKHJlZ25vX3VzZV9pbik6IE1vdmVkIHRvIHJ0bGFuYWwuYy4KCSh1cGRhdGVfZmxvd19pbmZvKTogTWFrZSBwdWJsaWMuCgkoc2NoZWR1bGVfaW5zbnMpOiBVc2Ugc3BsaXRfYmxvY2tfaW5zbnMuCgoJKiByZWNvZy5jIChzcGxpdF9ibG9ja19pbnNucyk6IE5ldyBmdW5jdGlvbi4KClR1ZSBGZWIgIDIgMjI6MDM6MjYgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1RBUlRfREVGQVVMVF9TUEVDKTogRGVsZXRlLCB1bnVzZWQuCgkoTElOS19PU19ERUZBVUxUX1NQRUMpOiBEZWxldGUsIHVudXNlZC4KClR1ZSBGZWIgIDIgMjA6Mjk6MzQgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CiAKICAgICAgICAqIGNvbmZpZ3VyZS5pbiAoYXJtLSotb2FiaSk6ICBTdXBwb3J0LgogICAgICAgICogY29uZmlndXJlOiAgUmVnZW5lcmF0ZS4KICAgICAgICAqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYtb2FiaS5oOiAgTmV3IGZpbGUuCiAKVHVlIEZlYiAgMiAxOTo0Mzo1OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2Lm1kIChhc2hsc2kzKTogVHVybiBpbnRvIGEgZGVmaW5lX2V4cGFuZCBhbiBhbm9ueW1vdXMgcGF0dGVybi4KCU1ha2UgdGhlIGFub255bW91cyBwYXR0ZXJuIG1hdGNoIHdoZW4gISBvcHRpbWl6ZV9zaXplLgoJKGFzaGxzaTMgc2l6ZSBvcHRpbWl6ZXIpOiBOZXcgcGF0dGVybi4KCgkqIGludGwvTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IEFkZCBtaXNzaW5nICI7IFwiLgoKVHVlIEZlYiAgMiAxODoyMToyMyAxOTk5ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmggKFRBUkdFVF9DUFVfc3BhcmM4NngpOiBBZGRlZC4gVEFSR0VUX0NQVV9zcGFyY2xpdGU4NngKCXN5bm9ueW0uCgpUdWUgRmViICAyIDIwOjI0OjExIDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAobG9vcF9vcHRpbWl6ZSk6IEZpeCB2YWx1ZSBtYXhfdWlkX2Zvcl9sb29wIGlzIHJlc2V0Cgl0byBhZnRlciBmaW5kX2FuZF92ZXJpZnlfbG9vcHMgY2FsbC4KClR1ZSBGZWIgIDIgMTk6NDg6MjkgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogKHJlY29tYmluZV9naXZzKTogRG9uJ3QgdXNlIGEgZ2l2IHRoYXQncyBsaWtlbHkgdG8gYmUgZGVhZCB0bwoJZGVyaXZlIG90aGVycy4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBGaXggdGVzdCBmb3IgbGlmZXRpbWUgb3ZlcmxhcHMgLyBsb29wCgl3cmFwIGFyb3VuZCB3aGVuIGRlcml2aW5nIGdpdnMuCgpNb24gRmViICAxIDIwOjAwOjQwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChjaGVja19hc21fb3BlcmFuZHMpOiBUcmVhdCBpbmRldGVybWluYXRlIG9wZXJhbmQgb2sKCXJlc3VsdHMgYXMgc3VjY2Vzcy4gIFRyeSBoYXJkZXIgdG8gcmVzb2x2ZSBhIG1hdGNoaW5nIGNvbnN0cmFpbnQuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlY29nbml6ZSB3aGVuIGFuIG91dHB1dCBvcGVyYW5kJ3MKCWNvbnN0cmFpbnQgZG9lcyBub3QgYWxsb3cgbWVtb3J5LiAgVHJlYXQgaW5kZXRlcm1pbmF0ZSBvcGVyYW5kIG9rCglyZXN1bHRzIGFzIGZhaWx1cmUuICBUcnkgaGFyZGVyIHRvIHJlc29sdmUgYSBtYXRjaGluZyBjb25zdHJhaW50LgoJCk1vbiBGZWIgIDEgMTU6MDA6MDIgMTk5OSAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJVXNlIHZhcnJheXMgZm9yIGNvbnN0YW50LWVxdWl2YWxlbmNlIGRhdGE6CgoJKiB2YXJyYXkuaCAoc3RydWN0IGNvbnN0X2VxdWl2X2RhdGEpOiBOZXcgdHlwZS4KCSh1bmlvbiB2YXJyYXlfZGF0YV90YWcpOiBOZXcgZWxlbWVudCBjb25zdF9lcXVpdi4KCShWQVJSQVlfQ09OU1RfRVFVSVZfSU5JVCwgVkFSUkFZX0NPTlNUX0VRVUlWKTogTmV3IG1hY3Jvcy4KCShWQVJSQVlfU0laRSk6IE5ldyBtYWNybywgcmV0dXJucyBudW1iZXIgb2YgZWxlbWVudHMuCgkqIGludGVncmF0ZS5oOiBJbmNsdWRlIHZhcnJheS5oLgoJKHN0cnVjdCBpbmxpbmVfcmVtYXApOiBSZXBsYWNlIGNvbnN0X2VxdWl2X21hcCwgY29uc3RfYWdlX21hcCBhbmQKCWNvbnN0X2VxdWl2X21hcF9zaXplIHdpdGggYSBjb25zdF9lcXVpdl92YXJyYXkgZWxlbWVudC4KCShNQVlCRV9FWFRFTkRfQ09OU1RfRVFVSVZfVkFSUkFZKTogTmV3IG1hY3JvOyBncm93cyB2YXJyYXkgaWYKCW5lZWRlZC4KCShTRVRfQ09OU1RfRVFVSVZfREFUQSk6IE5ldyBtYWNybzsgc2V0cyBydHggYW5kIGFnZSBmaWVsZHMKCXNpbXVsdGFuZW91c2x5LCBncm93aW5nIHRoZSB2YXJyYXkgaWYgbmVlZGVkLgoKCSogaW50ZWdyYXRlLmMgKGdsb2JhbF9jb25zdF9lcXVpdl9tYXAsCglnbG9iYWxfY29uc3RfZXF1aXZfbWFwX3NpemUpOiBEZWxldGVkLCByZXBsYWNlZCBieS4uLi4KCShnbG9iYWxfY29uc3RfZXF1aXZfdmFycmF5KTogTmV3IHZhcmlhYmxlLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBSZWZlcmVuY2VzIGNoYW5nZWQuCgkqIGludGVncmF0ZS5oOiBVcGRhdGUgZGVjbGFyYXRpb25zLgoKCSogaW50ZWdyYXRlLmMgKHByb2Nlc3NfcmVnX3Bhcm0sIGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24sCgljb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSwgdHJ5X2NvbnN0YW50cywgc3Vic3RfY29uc3RhbnRzLAoJbWFya19zdG9yZXMpOiBVc2UgdmFycmF5IGFsbG9jYXRpb24gYW5kIGFjY2Vzc29yIG1hY3JvcywgbmV3CglpbnRlZ3JhdGUuaCBtYWNyb3MsIGFuZCBnbG9iYWxfY29uc3RfZXF1aXZfdmFycmF5LiAgRG9uJ3QKCWNvbmRpdGlvbmFsaXplIG5vbi1OVUxMIHN0b3JlcyBvbiBhcnJheSBzaXplOyBpbnN0ZWFkLCBleHBhbmQgdGhlCglhcnJheSBhcyBuZWVkZWQuCgkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IExpa2V3aXNlLgoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogSW5pdGlhbGl6ZSBjb25zdF9lcXVpdl92YXJyYXkgZWxlbWVudCB0bwoJemVyby4gIEFmdGVyIGFsbG9jYXRpbmcgdmFycmF5LCBhbHdheXMgZXhpdCB0aHJvdWdoIGJvdHRvbSBvZgoJZnVuY3Rpb24sIHdoZXJlIGl0IGNhbiBiZSBkZWFsbG9jYXRlZCBpZiBuZWVkZWQuICBEb24ndCBleHBsaWNpdGx5CglyZWFsbG9jYXRlIGNvbnN0X2VxdWl2X21hcCBzdG9yYWdlOyBpbnN0ZWFkLCBqdXN0IGVuc3VyZSB0aGUKCXZhcnJheSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIHVwZGF0ZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZS4KCk1vbiBGZWIgIDEgMDk6NDA6MjUgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3lzdGVtLmggKGlubGluZSwgY29uc3QpOiBIYW5kbGUgdGhlc2UgZm9yIHN0YWdlMiAoYW5kIGxhdGVyKSBnY2MuCgoJKiBkd2FyZjJvdXQuYyAoaW5saW5lKTogRG9uJ3QgZGVmaW5lLgoKCSogZHdhcmZvdXQuYyAoaW5saW5lKTogTGlrZXdpc2UuCgpTdW4gSmFuIDMxIDIyOjA0OjM3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKHJlY29tYmluZV9naXZzKTogRHVtcCByZWNvbWJpbmF0aW9uIGFuZCBkZXJpdmF0aW9uIGRhdGEuCgpTdW4gSmFuIDMxIDIwOjM0OjI5IDE5OTkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZmxhZ3MuaDogRGVjbGFyZSBmbGFnX25vX2lkZW50LgoJKiB0b3BsZXYuYzogRGVmaW5lIGZsYWdfbm9faWRlbnQuICBQcm9jZXNzIC1mKG5vLSlpZGVudCBoZXJlLgoJKiBjLXRyZWUuaDogRG9uJ3QgZGVjbGFyZSBmbGFnX25vX2lkZW50LgoJKiBjLWRlY2wuYzogRG9uJ3QgZGVmaW5lIGZsYWdfbm9faWRlbnQuICBEb24ndCBwcm9jZXNzCiAgICAgICAgICAtZihuby0paWRlbnQgc3dpdGNoZXMgaGVyZS4KCgkqIGNvbmZpZy9lbGZvcy5oIChBU01fRklMRV9FTkQpOiBPdXRwdXQgZmluYWwgLmlkZW50IGRpcmVjdGl2ZQogICAgICAgICAgb25seSBpZiAhZmxhZ19ub19pZGVudC4KCSogY29uZmlnL3B0eDQuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zdnI0Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvYWxwaGEvZWxmLmg6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogY29uZmlnL2k4NjAvZngyODAwLmg6IExpa2V3aXNlLgoJKiBjb25maWcvbWlwcy9nbnUuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L29zZnJvc2UuaDogTGlrZXdpc2UuCgoJKiBnY2MuYyAoQyBzcGVjcyk6IE1hcCAtUW4gdG8gLWZuby1pZGVudC4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKTW9uIEZlYiAgMSAxMDo1MjowNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHJlbW92ZSBsb29wLm8gYW5kIHVucm9sbC5vIHdoZW4KCWVuYWJsZS1oYWlmYSBpcyBzZWxlY3RlZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEphbiAzMSAxMzoyMjowMiAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZzaWNjLCBtb3ZoaWNjLCBtb3ZzZmNjLCBtb3ZkZmNjLAoJbW92eGZjYywgbW92ZGljYyk6IERlbGV0ZSB1bmNvbnN0cmFpbmVkIGFsdGVybmF0aXZlcy4KCSogaTM4Ni5jIChvdXRwdXRfZnBfY29uZGl0aW9uYWxfbW92ZSwKCW91dHB1dF9pbnRfY29uZGl0aW9uYWxfbW92ZSk6IERlbGV0ZSB1bnVzZWQgY2FzZS4KClN1biBKYW4gMzEgMDE6MTU6MDQgUFNUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gSmFuIDMxIDAwOjUyOjM3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAobW92IHBhdHRlcm5zKTogRW1pdCB0aGUgYXNzZW1ibGVyIGFsaWFzZXMgbW92IGFuZCBmbW92CglpbnN0ZWFkIG9mIGJpcyBhbmQgY3B5cy4gIENvbWJpbmUgYWx0ZXJuYXRpdmVzIHdoZXJlIHBvc3NpYmxlLgoKU2F0IEphbiAzMCAyMzoxNDoxMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY292LmMgKGZub3RpY2UpOiBBZGQgbWlzc2luZyBGSUxFKiBwYXJhbWV0ZXIuCgkoZnVuY3Rpb25fc3VtbWFyeSk6IEZpeCBmb3JtYXQgc3BlY2lmaWVycyBpbiBjYWxscyB0byBgZm5vdGljZScuCgkob3V0cHV0X2RhdGEpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChmbm90aWNlKTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVyLgoKCSogdG9wbGV2LmggKGZub3RpY2UpOiBBZGQgcHJvdG90eXBlLgoJV3JhcCBwcm90b3R5cGUgd2l0aCBCVUZTSVogdG8gcHJvdGVjdCBGSUxFKiB1c2FnZS4KCQpTdW4gSmFuIDMxIDE1OjMzOjA5IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFJUWF9DT1NUUyk6IEV4cGxpY2l0bHkgZGVmaW5lIGM0eCBjb3N0cy4KCQpTYXQgSmFuIDMwIDA4OjI3OjIzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IEhhbmRsZSBSRUdfRUhfUkVHSU9OIG5vdGVzLgoKCSogYWxpYXMuYyAoZml4ZWRfc2NhbGFyX2FuZF92YXJ5aW5nX3N0cnVjdF9wKTogQWRkICJzdGF0aWMiIHRvCglmdW5jdGlvbiBkZWZpbml0aW9uLgoJKGFsaWFzZXNfZXZlcnl0aGluZ19wLCB3cml0ZV9kZXBlbmRlbmNlX3ApOkxpa2V3aXNlLgoKCSogaW5zdGFsbC50ZXhpOiBGaXggbWVyZ2UgbG9zc2FnZXMuCgoJKiBjY2NwLmMgKG1haW4pOiBPbmx5IGNhbGwgc2V0bG9jYWxlIChMQ19NRVNTQUdFUywgLi4uKSBpZiBMQ19NRVNTQUdFUwoJaXMgZGVmaW5lZC4KCSogY29sbGVjdDIuYyAobWFpbik6IExpa2V3aXNlLgoJKiBjcHBtYWluLmMgKG1haW4pOiBMaWtld2lzZS4KCSogZ2NjLmMgKG1haW4pOiBMaWtld2lzZS4KCSogZ2Nvdi5jIChtYWluKTogTGlrZXdpc2UuCgkqIHByb3RvaXplLmMgKG1haW4pOiBMaWtld2lzZS4KCSogdG9wbGV2LmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIHBhLm1kIChwYXJhbGxlbCBzaGlmdCBhbmQgc2hpZnRhZGQpOiBNYXJrIG91dHB1dCBvZiBzaGlmdCBhcyBhbgoJZWFybHljbG9iYmVyLgoKCSogbG9vcC5jOiBEaXNhYmxlIHJlY2VudCBsb29wIGNoYW5nZXMuICBUZW1wb3JhcnkgYXMgSm9lcm4KCWNvbnRpbnVlcyB0byBmaXggcHJvYmxlbXMuCgpTYXQgSmFuIDMwIDAzOjI0OjM3IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogU2l6ZSByZWdfbWFwIGFjY29yZGluZyB0byByZWdfaXZfdHlwZS4KCkZyaSBKYW4gMjkgMTg6MjY6MDcgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAocmVtb3ZlX2luc24pOiBOZXcgZnVuY3Rpb24uCgkqIHJ0bC5oIChyZW1vdmVfaW5zbik6IEFkZCBwcm90b3R5cGUuCgkqIGZ1bmN0aW9uLmMgKHJlcG9zaXRpb25fcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX25vdGVzKTogQ2FsbCByZW1vdmVfaW5zbi4KCkZyaSBKYW4gMjkgMjI6MzQ6NDEgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChyZWNvbWJpbmVfZ2l2cyk6IERvbid0IHRyeSB0byBkZXJpdmUgZ2l2cyB0aGF0IGhhdmUgY29tYmluZWQuCgpGcmkgSmFuIDI5IDE1OjAwOjM5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5jIChub3RpY2UsIGZub3RpY2UpOiBDaGVjayBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywKIAl3aGVuIGRlY2xhcmluZyBhcmd1bWVudHMgYW5kIGNhbGxpbmcgdmFfYXJnKCkgdG8gaW5pdGlhbGl6ZSB0aGVtLgoKCSogY29sbGVjdDIuYyAobm90aWNlKTogTGlrZXdpc2UuCgoJKiBsb29wLmMgKGZpbmRfbGlmZV9lbmQpOiBVc2UgUFJPVE8oKSBtYWNybyBpbiB0aGUgcHJvdG90eXBlLgoKRnJpIEphbiAyOSAxNDozNjoxMSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb2xsZWN0Mi5jIChlcnJvcik6IEZpeCB0eXBvIGluIGRlY2xhcmF0aW9uLgoKCSogY3BwZXJyb3IuYyAoY3BwX21lc3NhZ2UpOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5jIChjcHBfd2FybmluZyk6IExpa2V3aXNlLgoKCSogY3BwbGliLmggKGNwcF9ub3RpY2UpOiBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhbHNvIGFkZAogCUFUVFJJQlVURV9QUklOVEZfMS4KCgkqIHRvcGxldi5jIChlcnJvcik6IEZpeCB0eXBvIGluIGRlY2xhcmF0aW9uLgoKRnJpIEphbiAyOSAxNTo0NDoxMyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IEZpeCBIQVZFX2NjMCBoYW5kbGluZyB3aGVuIHNjYW5uaW5nCglmb3J3YXJkIGZyb20gY29udCBkb21pbmF0b3IuCgpGcmkgSmFuIDI5IDA3OjEwOjI3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNjY3AuYyAoZXByaW50X3N0cmluZyk6IENvbnN0aWZ5IGEgY2hhciouCgkobm90aWNlKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQgQVRUUklCVVRFX1BSSU5URl8xLgoJKHZub3RpY2UpOiBDb25zdGlmeSBhIGNoYXIqLgoJKGVycm9yKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQgQVRUUklCVVRFX1BSSU5URl8xLgoJKHZlcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgkod2FybmluZyk6IExpa2V3aXNlLiAgVXNlIFBWUFJPVE8gbm90IFZQUk9UTywgYWRkIEFUVFJJQlVURV9QUklOVEZfMS4KCSh2d2FybmluZyk6IENvbnN0aWZ5IGEgY2hhciouCgkoZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMi4KCSh2ZXJyb3Jfd2l0aF9saW5lKTogQ29uc3RpZnkgYSBjaGFyKi4KCSh2d2FybmluZ193aXRoX2xpbmUpOiBMaWtld2lzZS4KCSh3YXJuaW5nX3dpdGhfbGluZSk6IExpa2V3aXNlLiAgVXNlIFBWUFJPVE8gbm90IFZQUk9UTywgYWRkCglBVFRSSUJVVEVfUFJJTlRGXzIuCgkocGVkd2Fybik6IENvbnN0aWZ5IGEgY2hhciouICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMS4KCShwZWR3YXJuX3dpdGhfbGluZSk6IExpa2V3aXNlIHdpdGggQVRUUklCVVRFX1BSSU5URl8yLgoJKHBlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2Ugd2l0aCBBVFRSSUJVVEVfUFJJTlRGXzQuCglBbHNvIGNvcnJlY3QgdHlwbyBpbiBwYXJhbWV0ZXIgbmFtZSBkZWNsYXJhdGlvbi4KCShtYWtlX2Fzc2VydGlvbik6IENvbnN0aWZ5IGEgY2hhciouCgkocXVvdGVfc3RyaW5nX2Zvcl9tYWtlKTogTGlrZXdpc2UuCgkoZGVwc19vdXRwdXQpOiBMaWtld2lzZS4KCShmYXRhbCk6IExpa2V3aXNlLiAgVXNlIFBWUFJPVE8gbm90IFZQUk9UTywgYWRkCglBVFRSSUJVVEVfUFJJTlRGXzEuICBVc2UgQVRUUklCVVRFX05PUkVUVVJOIG5vdCBhbiBleHBsaWNpdAoJIl9fYXR0cmlidXRlX18gKChub3JldHVybikpIi4KCShmYW5jeV9hYm9ydCk6IExpa2V3aXNlIGZvciBBVFRSSUJVVEVfTk9SRVRVUk4uCgkocGZhdGFsX3dpdGhfbmFtZSk6IExpa2V3aXNlLgoJKHBpcGVfY2xvc2VkKTogTGlrZXdpc2UuCgkobWVtb3J5X2Z1bGwpOiBMaWtld2lzZS4KCkZyaSBKYW4gMjkgMDA6MTQ6NTUgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBHcm93IHNldF9pbl9sb29wIC8gbl90aW1lc19zZXQgLwoJbWF5X25vdF9vcHRpbWl6ZSB0byBwcm9wZXIgc2l6ZSB3aGVuIGNvbnZlcnRpbmcgYml2IGluY3JlbWVudHMKCWludG8gZ2l2cy4KCUlmIG5lY2Vzc2FyeSwgcmVhbGxvY2F0ZSByZWdfaXZfdHlwZSAvIHJlZ19pdl9pbmZvIGJlZm9yZSBjYWxsaW5nCglyZWNvbWJpbmVfZ2l2cy4KClRodSBKYW4gMjggMjM6MjQ6MDggMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChyZWNvbWJpbmVfZ2l2cyk6IE5ldyBwYXJhbWV0ZXIgdW5yb2xsX3AuICBJZiBzZXQsIGRvbid0CglnZW5lcmF0ZSBjb21wbGV4IGFkZHMuICBDaGFuZ2VkIGNhbGxlci4KCURvbid0IGdlbmVyYXRlIGFkZHMgdGhhdCBjb3N0IG1vcmUgdGhhbiB0aGUgb3JpZ2luYWwgb25lLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IFdhcm5pbmcgZml4ZXMuCgpUaHUgSmFuIDI4IDA5OjQxOjExIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoaHBwYTEuMC1ocC1ocHV4MTAqKTogVXNlIHQtcGEuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBKYW4gMjcgMjM6Mzk6NTMgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcnRsLmggKGluc25fZmlyc3RfcCwgbm9fanVtcHNfYmV0d2Vlbl9wKTogRGVjbGFyZS4KCSogcnRsYW5hbC5jIChpbnNuX2ZpcnN0X3AsIG5vX2p1bXBzX2JldHdlZW5fcCk6IE5ldyBmdW5jdGlvbi4KCSogbG9vcC5oICh2YXJyYXkuaCk6IEluY2x1ZGUuCgkoc3RydWN0IGluZHVjdGlvbik6IENoYW5nZSBjb21iaW5lZF93aXRoIHRvIHVuc2lnbmVkLgoJTmV3IG1lbWJlcnMgZGVyaXZlZCwgaXggYW5kIGxhc3RfdXNlLgoJKHJlZ19pdl90eXBlLCByZWdfaXZfaW5mbyk6IE5vdyB2YXJyYXlfdHlwZS4gIEFsbCByZWZlcmVuY2VzIGNoYW5nZWQuCgkoUkVHX0lWX1RZUEUsIFJFR19JVl9JTkZPKTogRGVmaW5lLgoJKGZpcnN0X2luY3JlbWVudF9naXYsIGxhc3RfaW5jcmVtZW50X2dpdik6IERlY2xhcmUuCgkqIGxvb3AuYyAobG9vcF9udW1iZXJfbG9vcF9jb250KTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShsb29wX251bWJlcl9jb250X2RvbWluYXRvcik6IExpa2V3aXNlLgoJKHJlZ19pdl90eXBlLCByZWdfaXZfaW5mbyk6IE5vdyB2YXJyYXlfdHlwZS4KCShmaXJzdF9pbmNyZW1lbnRfZ2l2LCBsYXN0X2luY3JlbWVudF9naXYpOiBOZXcgdmFyaWFibGVzLgoJKGNvbXB1dGVfbHVpZHMsIHZlcmlmeV9kb21pbmF0b3IsIGZpbmRfbGlmZV9lbmQpOiBOZXcgZnVuY3Rpb25zLgoJKGNtcF9yZWNvbWJpbmVfZ2l2c19zdGF0cywgcmVjb21iaW5lX2dpdnMpOiBMaWtld2lzZS4KCShsb29wX29wdGltaXplKTogQWxsb2NhdGUgbG9vcF9udW1iZXJfbG9vcF9jb250IGFuZAoJbG9vcF9udW1iZXJfY29udF9kb21pbmF0b3IuICBVc2UgY29tcHV0ZV9sdWlkcy4KCShmaW5kX2FuZF92ZXJpZnlfbG9vcHMpOiBJbml0aWFsaXplIGxvb3BfbnVtYmVyX2xvb3BfY29udCBhbmQKCWxvb3BfbnVtYmVyX2NvbnRfZG9taW5hdG9yLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IFRyeSB0byBmaW5kIGJpdnMgdGhhdCBjYW4gYmUgZXhwcmVzc2VkIGFzIGdpdnMKCW9mIGFub3RoZXIgYml2LCBhbmQgdG8gY29udmVydCBiaXYgaW5jcmVtZW50cyBpbnRvIGdpdnMuCglDYWxsIHJlY29tYmluZV9naXZzLiAgSGFuZGxlIGRlcml2ZWQgZ2l2cy4KCShyZWNvcmRfYml2KTogTmV3IGFyZ3VtZW50IGxvY2F0aW9uLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShyZWNvcmRfZ2l2KTogSW5pdGlhbGl6ZSBkZXJpdmVkIGFuZCBsYXN0X3VzZSBmaWVsZHMuCgkoYmFzaWNfaW5kdWN0aW9uX3Zhcik6IE5ldyBhcmd1bWVudCBsb2NhdGlvbi4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoY29tYmluZV9naXZzKTogRG9uJ3QgY29tYmluZSBhIERFU1RfUkVHIGdpdiB3aXRoIGEgREVTVF9BRERSIGdpdi4KCUluY3JlbWVudCBjb21iaW5lZF93aXRoIGluc3RlYWQgb2Ygc2V0dGluZyB0byAxLgoJKiB1bnJvbGwuYyAoZGVyaXZlZF9yZWdzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCSh1bnJvbGxfbG9vcCk6IEluaXRpYWxpemUgaXQuCglBbGxvY2F0ZSBsb2NhbF9yZWdubyBhY2NvcmRpbmcgdG8gbWF4X3JlZ19udW0uCgkoY29weV9sb29wX2JvZHkpOiBDb3BlIHdpdGggZGVyaXZlZCBnaXZzLgoJKGZpbmRfc3BsaXR0YWJsZV9naXZzKTogQ2hlY2sgZm9yIEdpdnMgbWFkZSBmcm9tIGJpdiBpbmNyZW1lbnRzLgoJU2V0IGRlcml2ZWRfcmVncyBmb3IgZ2l2cy4KCSogTWFrZWZpbGUuaW4gKHN0bXQubywgbG9vcC5vLCB1bnJvbGwubyk6IERlcGVuZCBvbiBsb29wLmggLgoKV2VkIEphbiAyNyAxOTozMTozNiAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IEhhbmRsZSBjYXNlIHdoZW4gYSByZWdpc3RlcgoJaGFzIGJlZW4gdXNlZCBpbiBhIHdpZGVyIG1vZGUuCgoxOTk5LTAxLTI3ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvZml4aW5jbC5jLCBmaXhpbmMvc2VydmVyLltjaF06CglSZW1vdmVkIHRoZSBsYXN0IG9mIHRoZSBjYXBpdGFsaXplZCB2YXJpYWJsZSBhbmQgcHJvYyBuYW1lcy4KCgkqIGZpeGluYy9zZXJ2ZXIuYzogIFJlbW92ZWQgdGhlIHByb2Nlc3Mgb3BlbiBjb2RlCgkqIGZpeGluYy9wcm9jb3Blbi5jOiBOZXcgZmlsZSBjb250YWluaW5nIHRoZSBwcm9jIG9wZW4gY29kZQoJKiBmaXhpbmMvaW5jbGhhY2sudHBsOiBBZGRlZCBjb2RlIHRvIGJ5cGFzcyBhIHJlYWRhYmlsaXR5IHRlc3QKCXdoZW4gYSBmaWxlIGlzIG5vdCBwcmVzZW50LiAgQSBwcm9ibGVtIG9uIHNvbWUgc3lzdGVtcy4KCSogZml4aW5jL2luY2xoYWNrLnNoLCBmaXhpbmMvZml4aW5jbC5zaDogIHJlZ2VuZXJhdGVkCgpXZWQgSmFuIDI3IDExOjU4OjE4IDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNwcGxpYi5oIChjcHBfbm90aWNlKTogQWRkIHByb3RvdHlwZS4KCldlZCBKYW4gMjcgMDI6MjA6NDggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWVyZ2UgZ2NjMiBzbmFwc2hvdCAxOTk4MDkyOS4KCgkqIGNjY3AuYyAoUFJJTlRGX1BST1RPKTogUmVtb3ZlLgoJKFBSSU5URl9QUk9UT197MSwyLDMsNH06IExpa2V3aXNlLgoJKiBjZXhwLnk6IExpa2V3aXNlLgoJKiBzeXN0ZW0uaDogQWRkIFBSSU5URl9QUk9UTyBhbmQgUFJJTlRGX1BST1RPX3sxLDIsMyw0fS4KCgkqIGZpeC1oZWFkZXIuYyAoY3BwX2ZpbGVfbGluX2Zvcl9tZXNzYWdlKTogRGVsZXRlLiAgSW4gbGliY3BwLgoJKGNwcF9wcmludF9jb250YWluaW5nX2ZpbGVzLCB2X2NwcF9tZXNzYWdlLCBjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoJKGNwcF9mYXRhbCwgY3BwLVBmYXRhbF93aXRoX25hbWUpOiBMaWtld2lzZS4KCgkqIGdlbi1wcm90b3MuYyAoaGFzaGYpOiBEZWxldGUgaW4gY3BwaGFzaC5vCgkqIGdlbi1wcm90b3MuYyAoaGFzaGYpOiBEZWxldGUgaW4gY3BwaGFzaC5vCgoJKiBleHByLmM6IERvIG5vdCBtZXJnZSBTQVZFX1NUQUNLQVJFQV9NT0RFIGNoYW5nZXMuCgkqIGV4cG1lZC5jOiBMaWtld2lzZS4KCSogcnM2MDAwLm1kOiBMaWtld2lzZS4KCgkqIHJzNjAwMC5jLCByczYwMDAubWQ6IERvIG5vdCBtZXJnZSBmb3JtYXR0aW5nIGNoYW5nZXMgeWV0LgoKV2VkIEphbiAyNyAwMToxMzo0MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKGlucHV0X29wZXJhbmQpOiBEb24ndCBleHBlY3QgQ09OU1QgYXJvdW5kIENPTlNUQU5UX1BfUlRYLgoJKiByczYwMDAubWQgKG1vdnNpLCBtb3ZkaSk6IExpa2V3aXNlLgoKVHVlIEphbiAyNiAxMzozMTozOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogUGFzcyBhcmdfcG9pbnRlcl9zYXZlX2FyZWEgdG8KCXZhbGlkaXplX21lbSBiZWZvcmUgdXNpbmcgaXQuICBFbWl0IGNvZGUgaW50byBhIHNlcXVlbmNlLgoKVHVlIEphbiAyNiAxMzo0MTozOCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGRveiArIHNldCBjciBhbmQgb3IgKyBzZXQgY3IgcGF0dGVybnMpOiBBZGQgbWlzc2luZwoJJyMnIHRvIHNwbGl0IHBhdHRlcm5zLiAgQ29ycmVjdCBpbmRlbnRhdGlvbiBvZiBzb21lIG5ldyBwYXR0ZXJucy4KCjE5OTktMDEtMjYgMTI6MTEgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQG1pZG5pdGUuZWMucmhuby5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChzYWZlX3JlYWQpOiBEZWxldGVkLiAgCgkocmVhZF9hbmRfcHJlc2Nhbik6IE5ldyBmdW5jdGlvbiwgcmVwbGFjZXMgc2FmZV9yZWFkLCBjb252ZXJ0cwoJYW5kL29yIHdhcm5zIGFib3V0IHRyaWdyYXBocywgc2lsZW50bHkgY29udmVydHMgb2RkIGxpbmUKCXRlcm1pbmF0b3JzIChcciwgXG5cciwgXHJcbikuICBXYXJucyBhYm91dCBubyBuZXdsaW5lIGF0IEVPRi4KCShmaW5jbHVkZSk6IFVzZSByZWFkX2FuZF9wcmVzY2FuOyB0dXJuIG9mZiBub25ibG9ja2luZyBtb2RlIG9uCgl0aGUgaW5wdXQgZGVzY3JpcHRvcjsgcmVtb3ZlIGZpbGUtc2l6ZS1leGFtaW5hdGlvbiBhbmQKCW5vLW5ld2xpbmUtYXQtRU9GIGd1bmsgd2hpY2ggaXMJbG9uZ2VyIG5lY2Vzc2FyeTsgYmUgbW9yZQoJY2FyZWZ1bCBhYm91dCBjaGVja2luZyB0aGF0IHdlJ3ZlIGJlZW4gaGFuZGVkIGEgbGVnaXRpbWF0ZQoJZmlsZSB0byByZWFkIChvbmx5IHJlYWwgZmlsZXMsIHBpcGVzLCBhbmQgdHR5cyBhcmUgYWNjZXB0YWJsZSkuCgkqIGNwcGxpYi5oIChjcHBfb3B0aW9ucyk6IFJlbmFtZSBub190cmlncmFwaHMgZmxhZyB0byAKCWB0cmlncmFwaHMnIGFuZCBpbnZlcnQgaXRzIHNlbnNlLgoJKHRyaWdyYXBoX3RhYmxlKTogRGVjbGFyZS4KCShjcHBfd2FybmluZ193aXRoX2xpbmUpOiBQcm90b3R5cGUuCgkqIGNwcGxpYi5jOiBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdHJpZ3JhcGhfcGNwLiBEZWZpbmUKCXRyaWdyYXBoX3RhYmxlOyBpbml0aWFsaXplIGl0IGluIGluaXRpYWxpemVfY2hhcl9zeW50YXguICBPcGVuCglmaWxlcyBpbiBub25ibG9ja2luZyBtb2RlLiAgcy9ub190cmlncmFwaHMvdHJpZ3JhcGhzLwoJdGhyb3VnaG91dCwgYW5kIGludmVydCBzZW5zZS4gIFB1dCBjcHBfd2FybmluZ193aXRoX2xpbmUgYmFjawoJaW4gYW5kIGV4cG9ydCBpdC4KClR1ZSBKYW4gMjYgMjM6MjE6NDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoQ09VTlRFUl9SRUdTKTogTmV3IHJlZ2lzdGVyIGNsYXNzLgoJKiBjb25maWcvYzR4L2M0eC5tZCAoKnJwdGJfaW5pdCk6IENoYW5nZSBjb25zdHJhaW50cy4KCShycHRiX2VuZCk6IEVtaXQgYWx0ZXJuYXRlIGxvb3BpbmcgaW5zdHJ1Y3Rpb25zIGlmIAoJUkMgcmVnaXN0ZXIgbm90IGFsbG9jYXRlZCBmb3IgbG9vcCBjb3VudGVyLgoJKGRlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50KTogQWxsb3cgb3RoZXIgcmVnaXN0ZXJzCglmb3IgbG9vcCBjb3VudGVyLgoKMTk5OS0wMS0yNSAxNDoyNiAtMDUwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBleHAuYyAoc3RydWN0IGFyZ2xpc3QpOiBSZW1vdmVkLgoJKHBhcnNlX251bWJlcik6IFVzZSBIT1NUX1dJREVfSU5UIGZvciB0aGUgYWNjdW11bGF0b3IuCglBbGxvdyB0d28gYGwnIHN1ZmZpeGVzIHVubGVzcyBDODkuICBDbGVhbiB1cC4gIE1ha2Ugc3RhdGljLgoJKHBhcnNlX2NoYXJjb25zdCk6IE5ldyBmdW5jdGlvbiBicm9rZW4gb3V0IG9mIGNwcF9sZXguCglDb2RlIGNsZWFuZWQgdXAgZHJhc3RpY2FsbHkuICBEb24ndCB1c2UgYSB0b2tlbl9idWZmZXIuCgkodG9rZW5fYnVmZmVyKTogUmVtb3ZlZC4KCShjcHBfbGV4KTogRG9uJ3QgY2FsbCBwYXJzZV9udW1iZXIgb24gYSBjb25zdGFudCBzdHJpbmcuCglVc2UgcGFyc2VfY2hhcmNvbnN0LgoJKGNwcF9wYXJzZV9leHByKTogUHJvcGVybHkgaGFuZGxlIGFuIEVSUk9SIG9wIHJldHVybmVkIGJ5CgljcHBfbGV4LiAKCjE5OTktMDEtMjUgMTQ6MTAgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYzogRG9uJ3QgaW5jbHVkZSBzaWduYWwuaCwgc3lzL3RpbWVzLmgsIG9yCglzeXMvcmVzb3VyY2UuaC4gRG9uJ3QgZGVjbGFyZSBsb2NhbHRpbWUuCgkobWFjcm9leHBhbmQpOiBIYW5kbGUgc3BlY2lhbCBzeW1ib2xzIGhlcmUuCgkocHVzaF9tYWNyb19leHBhbnNpb24pOiBDaG9wIG9mZiB0aGUgdHJhaWxpbmcgJ0AgJyBpZiBwb3NzaWJsZQoJaGVyZS4KCShjcHBfZ2V0X3Rva2VuKTogRG9uJ3QgZG8gZWl0aGVyIG9mIHRoZSBhYm92ZSB0d28gdGhpbmdzIGhlcmUuCglNb3ZlIGBzdHJpbmcnIGxhYmVsIGp1c3QgYWZ0ZXIgY2FzZSAnIicgc28gdGhhdCB3aWRlIHN0cmluZ3MKCWRvbid0IGNyYXNoIHRoZSBwcmVwcm9jZXNzb3IuCgpTdW4gSmFuIDI0IDIwOjEzOjQ1IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAobGVmdCBzaGlmdCArIHNldCBjciBwYXR0ZXJucyk6IEFkZCBtaXNzaW5nICcjJyB0bwoJc3BsaXQgcGF0dGVybnMuCgkobW92ZSByZWdpc3RlciArIHNldCBjciBwYXR0ZXJuKTogRGl0dG8uCgkobW92ZGksICFUQVJHRVRfUE9XRVJQQzY0IHNwbGl0dGVycyk6IEFkZCBiYWNrIGluIEphbi4gMTV0aCBwYXRjaCwKCWluYWR2ZXJ0ZW50bHkgZGVsZXRlZC4KClN1biBKYW4gMjQgMDg6MDc6NTkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3RtdC5jIChzdG10X2xvb3BfbmVzdF9lbXB0eSk6IE5ldyBmdW5jdGlvbi4KCSogdHJlZS5oIChzdG10X2xvb3BfbmVzdF9lbXB0eSk6IERlY2xhcmUgaXQuCgkqIHJ0bC5kZWYgKENBTExfUExBQ0VIT0xERVIpOiBOZXcgcnR4IGNvZGUuCgpTdW4gSmFuIDI0IDIxOjI0OjQzIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9lbWl0X21vdmVfc2VxdWVuY2UsIGM0eF9lbmNvZGVfc2VjdGlvbl9pbmZvKToKCU5ldyBmdW5jdGlvbnMuCgkoYzR4X2NoZWNrX2xlZ2l0X2FkZHIpOiBSZW1vdmUgVVNFIGFuZCBQTFVTLCBhbGxvdwoJTE9fU1VNLCBhbmQgZGlzYWJsZSBTWU1CT0xfUkVGLCBMQUJFTF9SRUYsIGFuZCBDT05TVCBjYXNlcy4KCShjNHhfbGVnaXRpbWl6ZV9hZGRyZXNzKTogUGVuYWxpc2UgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBhbmQgCglDT05TVCBjYXNlcy4gIEFkZCBMT19TVU0uCgkoYzR4X3ByaW50X29wZXJhbmQpOiBNb2RpZmllZCAnQycgYW5kICdSJyBjYXNlcyBmb3IgY2FsbHMuCglBZGRlZCAnVScgY2FzZS4gIFJlbW92ZSBkZXBlbmRlbmNlIG9uIFNZTUJPTF9SRUZfRkxBRy4KCShjNHhfcHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIExPX1NVTS4KCShjNHhfc2Nhbl9mb3JfbGRwKTogRGVsZXRlLiAgSG9vcmF5IQoJKGM0eF9wcm9jZXNzX2FmdGVyX3JlbG9hZCk6IFJlbW92ZSBjYWxsIHRvIGM0eF9zY2FuX2Zvcl9sZHAuCglTcGxpdCBhbGwgaW5zbnMuCgkoYzR4X2ltbWVkX2ludF9jb25zdGFudCk6IFJlbmFtZWQgZnJvbSBjNHhfaW50X2NvbnN0YW50LiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoYzR4X2ltbWVkX2Zsb2F0X2NvbnN0YW50KTogUmVuYW1lZCBmcm9tIGM0eF9mbG9hdF9jb25zdGFudC4gIEFsbAogCWNhbGxlcnMJY2hhbmdlZC4KCShjNHhfVF9jb25zdHJhaW50KTogQWxsb3cgTE9fU1VNLCBkaXNhYmxlIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgCglhbmQgQ09OU1QuCgkoYzR4X1VfY29uc3RyYWludCwgc3ltYm9saWNfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbnMuCgkoc3JjX29wZXJhbmQpOiBBbGxvdyAnSScgY29uc3RhbnRzIGluIEhJbW9kZS4gIEFsbG93IExPX1NVTSwKCWRpc2FibGUgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBhbmQgQ09OU1QuCgkobHNyY19vcGVyYW5kLCB0c3JjX29wZXJhbmQpOiBDYWxsIHNyY19vcGVyYW5kIGluc3RlYWQgb2YKCWdlbmVyYWxfb3BlcmFuZC4KCShjNHhfb3BlcmFuZF9zdWJ3b3JkKTogVXBkYXRlIGNvbW1lbnRzLgoKCSogY29uZmlnL2M0eC9jNHguYyAoVEFSR0VUX0xPQURfQUREUkVTUyk6IE5ldyBtYWNyby4KCShMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBBbGxvdyBTWU1CT0xfUkVGLCBMQUJFTF9SRUYsIENPTlNULAoJcGx1cyBISUdIIGFuZCBMT19TVU0gZm9yIHRoZSBDNDAuCgkoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IERlZmluZSBtYWNyby4KCShzeW1ib2xpY19vcGVyYW5kLCBjNHhfVV9jb25zdHJhaW50LCBjNHhfZW1pdF9tb3ZlX3NlcXVlbmNlKTogTmV3Cglwcm90b3R5cGVzLgoJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBzeW1ib2xpY19vcGVyYW5kLgoKCSogY29uZmlnL2M0eC9jNHgubWQgKG1vdnFpLCBtb3ZncWYsIG1vdmhpLCBtb3ZoaSk6IENhbGwKCWM0eF9lbWl0X21vdmVfc2VxdWVuY2UuCgkoZmxvYXR1bnNxaXFmMiwgZml4dW5zX3RydW5jcWZxaTIpOiBSZXdvcmsgZW1pdHRlZCBSVEwKCXRvIGF2b2lkIHN5bWJvbCByZWZlcmVuY2VzLgoJKGFsbCBwYXR0ZXJucyB3aXRoIGcgY29uc3RyYWludCk6IFJlcGxhY2UgJ2cnIGNvbnN0cmFpbnQgd2l0aCAnckltJy4KCShzZXRfaGlnaCk6IFJlbmFtZWQgZnJvbSBzZXRfaGlnaF91c2UuCgkoc2V0X2xvX3N1bSk6IFJlbmFtZWQgZnJvbSBzZXRfaW9yX2xvX3VzZS4KCShhbGwgY2FsbCBwYXR0ZXJucyk6IE1ha2UgTUVNIGV4cGxpY2l0IGluIGNhbGwgYWRkcmVzcyBvcGVyYW5kcy4KCU1vZGlmaWVkIG91dHB1dCB0ZW1wbGF0ZXMgdG8gdXNlICdVJyBtb2RpZmllci4KCQpTdW4gSmFuIDI0IDAxOjE1OjA1IFBTVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IEphbiAyMyAyMjozNDo1NyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaW5hbC5jIChiYl9zdHIpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUga2V5d29yZCBgY29uc3QnLgoJKGFkZF9iYl9zdHJpbmcsIGZpbmFsX3NjYW5faW5zbiwgb3V0cHV0X2FzbV9pbnNuKTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKHJlYWRfc2Nhbl9maWxlKTogTGlrZXdpc2UuCgoJKiBnZW5vdXRwdXQuYyAob3V0cHV0X2VwaWxvZ3VlLCBwcm9jZXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkKCSogbG9jYWwtYWxsb2MuYyAocmVxdWlyZXNfaW5vdXQsIGJsb2NrX2FsbG9jKTogTGlrZXdpc2UuCgoJKiBvdXRwdXQuaCAob3V0cHV0X2FzbV9pbnNuLCBhc3NlbWJsZV9zdHJpbmcpOiBMaWtld2lzZS4KCgkqIHJlY29nLmMgKHJlY29nX2NvbnN0cmFpbnRzLCBjaGVja19hc21fb3BlcmFuZHMsCglkZWNvZGVfYXNtX29wZXJhbmRzLCBleHRyYWN0X2luc24sIHByZXByb2Nlc3NfY29uc3RyYWludHMsCgljb25zdHJhaW5fb3BlcmFuZHMpOiBMaWtld2lzZS4KCgkqIHJlY29nLmggKG9wZXJhbmRfYWx0ZXJuYXRpdmUsIHJlY29nX2NvbnN0cmFpbnRzLCBpbnNuX3RlbXBsYXRlLAoJaW5zbl9vdXRmdW4sIGluc25fb3BlcmFuZF9jb25zdHJhaW50LCBpbnNuX25hbWUpOiBMaWtld2lzZS4KCgkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcywgc2Nhbl9vbmVfaW5zbik6IExpa2V3aXNlLgoKCSogcmVnbW92ZS5jIChmaW5kX21hdGNoZXMpOiBMaWtld2lzZS4KCgkqIHJlbG9hZC5jIChhbHRlcm5hdGl2ZV9hbGxvd3NfbWVtY29uc3QpOiBMaWtld2lzZS4KCgkqIHJlbG9hZDEuYyAoY29uc3RyYWludF9hY2NlcHRzX3JlZ19wLAoJcmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogcnRsLmggKGRlY29kZV9hc21fb3BlcmFuZHMpOiBMaWtld2lzZS4KCgkqIHNjYW4uaCAoZm5fZGVjbCk6IExpa2V3aXNlLgoKCSogdmFyYXNtLmMgKGFzc2VtYmxlX3N0cmluZyk6IExpa2V3aXNlLgoKU2F0IEphbiAyMyAwMTozNzozNiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogSGFuZGxlIGNhc2Ugd2hlcmUgZXhlY19wcmVmaXggaGFzCglub3QgYmVlbiBleHBsaWNpdGx5IHNldC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZm9sZC1jb25zdC5jIChsc2hpZnRfZG91YmxlKTogTWFyayAncHJlYycgYXJndW1lbnRzIGFzIHBvc3NpYmx5Cgl1bnVzZWQuCgoJKiBiaXRtYXAuaCAoYml0bWFwX2hlYWRfZGVmKTogTWFrZSBpbmR4IGZpZWxkIHVuc2lnbmVkLgoKCSogY29uZmlndXJlLmluIChnY2NfdG9vbGRpcik6IFdoZW4gbm90IG1ha2luZyBhIHJlbGF0aXZlIGdjY190b29sZGlyLAoJdXNlICRleGVjX3ByZWZpeC8kdGFyZ2V0X2FsaWFzIGZvciBnY2NfdG9vbGRpci4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIEphbiAyMiAxMTo0ODo1NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY3BwcC5jICh4cmVhbGxvYyk6IEZpeCB0eXBvIGxhc3QgY2hhbmdlLgoJKiBjcHBhbGxvYy5jLCBnY2MuYywgZ2VuYXR0ci5jLCBnZW5hdHRydGFiLmMsIGdlbmNvZGVzLmM6IExpa2V3aXNlLgoJKiBnZW5jb25maWcuYywgZ2VuZW1pdC5jLCBnZW5leHRyYWN0LmMsIGdlbmZsYWdzLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYywgZ2Vub3V0cHV0LmMsIGdlbnBlZXAuYywgZ2VucmVjb2cuYzogTGlrZXdpc2UuCgoxOTk5LTAxLTIyICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oIChDUjBfUkVHTk9fUCk6IE5ldyBtYWNybyB0byB0ZXN0IGlmIGNyMC4KCShDUl9SRUdOT19OT1RfQ1IwX1ApOiBOZXcgbWFjcm8gdG8gdGVzdCBpZiBjciwgYnV0IG5vdCBjcjAuCgkoUFJFRElDQVRFX0NPREVTKTogQWRkIGNjX3JlZ19ub3RfY3IwX29wZXJhbmQuCgkoY2NfcmVnX25vdF9jcjBfb3BlcmFuZCk6IEFkZCBkZWNsYXJhdGlvbi4KCgkqIHJzNjAwMC5jIChjY19yZWdfbm90X2NyMF9vcGVyYW5kKTogUmV0dXJuIHRydWUgaWYgcmVnaXN0ZXIgaXMgYQoJcHNldWRvIHJlZ2lzdGVyLCBvciBhIGNvbnRyb2wgcmVnaXN0ZXIgdGhhdCBpcyBub3QgQ1IwLgoKCSogcnM2MDAwLm1kIChhbGwgY29tYmluZXIgcGF0dGVybnMgYnVpbGRpbmcgLiBpbnN0cnVjdGlvbnMpOiBGb3IKCWFsbCBgLicgaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gc29tZXRoaW5nIGFuZCBzZXQgY3IwLCBhZGQgYW4KCWFsdGVybmF0aXZlIHRoYXQgZG9lcyB0aGUgb3BlcmF0aW9uLCBhbmQgdGhlbiBzZXRzIGEgZGlmZmVyZW50CglmbGFnLCBpbiBvcmRlciB0byBhdm9pZCB1c2luZyB0aGUgY29zdGx5IG1jcmYgaW5zdHJ1Y3Rpb24gYW5kIGFsc28KCWFsbG93IGNyMCB0byBiZSBjbG9iYmVyZWQgaW4gYXNtIHN0YXRlbWVudHMuICBBbHNvIGZpeCBhIGZldwoJcGF0dGVybnMgdGhhdCB1c2VkIHRoZSB3cm9uZyByZWdpc3Rlci4KCgkqIHJzNjAwMC5oIChyczYwMDBfY3B1X3NlbGVjdCk6IE1ha2Ugc3RyaW5nLCBuYW1lcyBiZSBjb25zdCBjaGFyICouCgkocnM2MDAwX2RlYnVnX25hbWUpOiBNYWtlIGNvbnN0IGNoYXIgKiwgbm90IGNoYXIgKi4KCgkqIHN5c3Y0LmggKHJzNjAwMF97YWJpLHNkYXRhfV9uYW1lKTogTWFrZSBjb25zdCBjaGFyICouCgkKCSogcnM2MDAwLmMgKHJzNjAwMF97ZGVidWcsYWJpLHNkYXRhfV9uYW1lKTogTWFrZSBjb25zdCBjaGFyICouCgkocnM2MDAwX3NlbGVjdCk6IFVzZSBjb25zdCBjaGFyICogaW4gY2FzdHMuCgpGcmkgSmFuIDIyIDA3OjQzOjAxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCQoJKiBNYWtlZmlsZS5pbiAoZ2NjX3Rvb2xkaXIpOiBNb3ZlIGJlZm9yZSBmaXJzdCByZWZlcmVuY2UuCglMZXQgYXV0b2NvbmYgc3Vic3RpdHV0ZSBpbiBhIHZhbHVlLgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogT25seSB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZQoJdG9vbCBkaXJlY3RvcnkgaWYgJGV4ZWNfcHJlZml4ID09ICRwcmVmaXguCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIE1ha2VmaWxlLmluICh0b29sZGlyKTogUmVwbGFjZSB3aXRoIGdjY190b29sZGlyLgoKVGh1IEphbiAyMSAyMzoyMTo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChhc2hsZGlfY29uc3QpOiBEaXNhYmxlIGZvciAhVEFSR0VUXzUyMDAuICBGaXggaW5kZW50aW9uLgoJKGFzaGxkaTMgZXhwYW5kZXIpOiBTaW1pbGFybHkuICBVcGRhdGUgY29tbWVudHMuCgkoYXNocmRpX2NvbnN0LCBsc2hyZGlfY29uc3QpOiBGaXggaW5kZW50aW9uLgoJKGFzaHJkaTMsIGxzaHJkaTMpOiBGSXggaW5kZW50aW9uLiAgVXBkYXRlIGNvbW1lbnRzLgoKVGh1IEphbiAyMSAyMTo1MzozNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogRG9uJ3QgdHJ5IHRvIHNwbGl0IG5vbi1pbnN0cnVjdGlvbnMuCgpUaHUgSmFuIDIxIDIzOjQ3OjMwIEVTVCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogRml4IGR1bWIgdHlwby4KClRodSBKYW4gMjEgMjA6MjQ6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oIChMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogUmVjb2duaXplIGFuZCBhY2NlcHQKCXRyYW5zZm9ybWF0aW9ucyB0aGF0IHdlIGhhdmUgcGVyZm9ybWVkIGVhcmxpZXIuCgkqIGFscGhhLmggKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBMaWtld2lzZS4KCgkqIGFscGhhLm1kIChwcm9sb2d1ZV9zdGFja19wcm9iZV9sb29wKTogRG9uJ3QgZG8gb3VyIG93biBsYWJlbAoJaGFuZGxpbmcsIGNhbGwgZ2VuX2xhYmVsX3J0eCBpbnN0ZWFkLgoKVGh1IEphbiAyMSAxNzo0NToxOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluICh7cnM2MDAwfHBvd2VycGN9LWlibS1haXg0LlsxMl0qKTogQWRkIG1pc3NpbmcgYHRoZW4nLgoKCSogY2NjcC5jICh4cmVhbGxvYyk6IENhbGwgbWFsbG9jIGdpdmVuIGEgTlVMTCBvbGQgcG9pbnRlci4KCSogY29sbGVjdDIuYywgY3BwYWxsb2MuYywgZ2NjLmMsIGdlbmF0dHIuYywgZ2VuYXR0cnRhYi5jOiBMaWtld2lzZS4KCSogZ2VuY29kZXMuYywgZ2VuY29uZmlnLmMsIGdlbmVtaXQuYywgZ2VuZXh0cmFjdC5jOiBMaWtld2lzZS4KCSogZ2VuZmxhZ3MuYywgZ2Vub3Bpbml0LmMsIGdlbm91dHB1dC5jLCBnZW5wZWVwLmM6IExpa2V3aXNlLgoJKiBnZW5yZWNvZy5jLCBtaXBzLXRmaWxlLmMsIHByb3RvaXplLmM6IExpa2V3aXNlLgoKVGh1IEphbiAyMSAxOTo0NDo1NSAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoe3JzNjAwMHxwb3dlcnBjfS1pYm0tYWl4NC5bMTJdKik6IElmCgktLXdpdGgtZ251LWxkLCB1c2UgeC1haXg0MS1nbGQgaW5zdGVhZCBvZiB4LWFpeDQxIHRvIHN1cHByZXNzCglhZGRpbmcgLVdsLC1iYmlndG9jIHRvIEJPT1RfTERGTEFHUy4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKCSogY29uZmlnL3JzNjAwMC94LWFpeDQxLWdsZDogTmV3IGZpbGUsIGRvbid0IHNldCBCT09UX0xERkxBR1MuCgpUaHUgSmFuIDIxIDE1OjQ4OjAzIDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNwcGV4cC5jIChjcHBfbGV4KTogQWxsb2NhdGUgdG9rZW5fYnVmZmVyIGR5bmFtaWNhbGx5LgoKVGh1IEphbiAyMSAxNDoxODowNCBFU1QgMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhwci5jIChNT1ZFX0JZX1BJRUNFU19QKTogRGVmaW5lIGNvbmRpdGlvbiBmb3IgZGVjaWRpbmcgdG8gdXNlCgltb3ZlX2J5X3BpZWNlcy4KCShNT1ZFX01BWF9QSUVDRVMpOiBEZWZpbmUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gbW92ZSBhdCBvbmNlLgoJKFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5ULCBVU0VfTE9BRF9QUkVfREVDUkVNRU5UKTogRGVmaW5lIGRlZmF1bHRzLgoJKFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwgVVNFX1NUT1JFX1BSRV9ERUNSRU1FTlQpOiBEZWZpbmUgZGVmYXVsdHMuCgkobW92ZV9ieV9waWVjZXMpOiBVc2UgbmV3IG1hY3Jvcy4KCShlbWl0X2Jsb2NrX21vdmUpOiBVc2UgbmV3IG1hY3Jvcy4KCShjbGVhcl9ieV9waWVjZXMpOiBVc2UgbmV3IG1hY3Jvcy4KCShjbGVhcl9zdG9yYWdlKTogVXNlIG5ldyBtYWNyb3MuCgkoZW1pdF9wdXNoX2luc24pOiBVc2UgbmV3IG1hY3Jvcy4KCShleHBhbmRfZXhwcik6IFVzZSBuZXcgbWFjcm9zLgoJKiBjb25maWcvc2gvc2guaCAoVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQpOiAKCURlZmluZS4KCShVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVmaW5lLgoJKE1PVkVfQllfUElFQ0VTX1ApOiBEZWZpbmUgYmFzZWQgb24gYWxpZ25tZW50IGFuZCBUQVJHRVRfU01BTExDT0RFLgoJKE1PVkVfTUFYX1BJRUNFUyk6IG1vdmUgOCBieXRlcyBvbiBTSDQuCgkqIHRtLnRleGkoTU9WRV9CWV9QSUVDRVNfUCwgTU9WRV9NQVhfUElFQ0VTLCBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwKCVVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwgCglVU0VfU1RPUkVfUFJFX0RFQ1JFTUVOVCk6IERlc2NyaWJlIG5ldyBtYWNyb3MuCgpUaHUgSmFuIDIxIDE0OjEzOjMxIDE5OTkgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKICAgICAgICAqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RhbnRfcG9vbCk6IFVzZSBmbG9vcl9sb2cyIGluc3RlYWQgb2YKCWV4YWN0X2xvZzIgZm9yIEFTTV9PVVRQVVRfQUxJR04uCgoJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IERvIG1hY2hpbmUtZGVwZW5kZW50IGV4dHJhIGFsaWdubWVudC4KCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IEhhbmRsZSBjYXNlIHdoZW4gYSBzdWJ3b3JkIG91dHNpZGUKCXRoZSBvcGVyYW5kLgoKCSogdG0udGV4aSAoUk9VTkRfVFlQRV97U0laRSxBTElHTn0pOiBNb3JlIGFjY3VyYXRlIGRlc2NyaXB0aW9ucyBvZgoJdGhlIG1hY3Jvcy4KClRodSBKYW4gMjEgMDE6NTk6MzAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChmb2xkX3J0eCk6IFJldmVydCAyOSBEZWMgY2hhbmdlLgoJKGNzZV9pbnNuKTogUmV2ZXJ0IDEyIEphbiBjaGFuZ2UuCgkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBEb24ndCBlbWl0IENPTlNUIGFyb3VuZCBDT05TVEFOVF9QX1JUWC4KCSogcmVnY2xhc3MuYyAocmVnX3NjYW5fbWFya19yZWZzKTogUmV2ZXJ0IDI5IERlYyBjaGFuZ2UuCgkqIHJ0bC5kZWY6IExpa2V3aXNlLgoJKiBydGwuaCAoQ09OU1RBTlRfUCk6IExpa2V3aXNlLgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbik6IE5ldmVyIHRyeSB0byBmbHVzaCBDT05TVEFOVF9QX1JUWAoJdG8gbWVtb3J5LgoJKiByZWNvZy5jIChpbW1lZGlhdGVfb3BlcmFuZCk6IEFjY2VwdCBDT05TVEFOVF9QX1JUWC4KCSogYWxwaGEuYyAoaW5wdXRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKiBjNHguYyAoY29uc3Rfb3BlcmFuZCk6IExpa2V3aXNlLgoKCSogZXhwbG93LmMgKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBVc2UgcmVnaXN0ZXJfb3BlcmFuZAoJaW5zdGVhZCBvZiBhcml0aF9vcGVyYW5kLCB3aGljaCBkb2VzIG5vdCBleGlzdC4KCgkqIDE3NTBhLmg6IEZpeCBjb21tZW50IGNsb3N1cmUuCgkqIGEyOWsuYyAoYTI5a19zZXRfbWVtZmxhZ3MpOiBGaXggdHlwbyBpbiAxOSBKYW4gY2hhbmdlLgoJKiBhcmMubWQgKG9uZV9jbXBsc2kyX3NldF9jY19pbnNuKTogRml4IHNldCBtb2RlIG1pc21hdGNoLgoJKiBhcm0uaCAoVEFSR0VUX1NXSVRDSEVTKTogRml4IHR5cG8uCgkqIGkzNzAubWQgKGFub24gbXVsdCBhbmQgZGl2IHBhdHRlcm5zKTogRml4IHNldCBtb2RlIG1pc21hdGNoLgoJKiBpODYwLmMgKG91dHB1dF9kZWxheWVkX2JyYW5jaCk6IEZpeCBvcGVyYW5kcyB0byBjb25zdHJhaW5fb3BlcmFuZHMuCgkob3V0cHV0X2RlbGF5X2luc24pOiBMaWtld2lzZS4KCSogbTg4ay5tZCAoYW5vbiByb3RhdGUgaW5zbnMpOiBGaXggc2V0IG1vZGUgbWlzbWF0Y2guCgkoYW5vbiBCTEttb2RlIG1vdmVzKTogQ29tbW9uaXplIGFuZCBmaXggc2V0IG1vZGUgbWlzbWF0Y2hlcy4KCSogbnMzMmsubWQgKHVkaXZtb2RkaVtzaHFdaTRfaW50ZXJuYWwpOiBGaXggbW9kZSBtaXNtYXRjaC4KCSogcm9tcC5tZCAobW92ZGYpOiBGaXggdHlwby4KClRodSBKYW4gMjEgMDA6Mjk6MzUgMTk5OSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWNvbW1vbik6IFJlbW92ZSBleHRyYW5lb3VzIGNobW9kIGZvciBnY292CglpbnN0YWxsLgoKV2VkIEphbiAyMCAxODoxNTowOCAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBTYXZlIGFuZCByZXN0b3JlIHNldHRpbmcgb2YKIAlUUkVFX1VTRUQgKHBhcm0pLgoKV2VkIEphbiAyMCAxMjo1MTo0MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYXJtLm1kOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUyB3aGVyZSBhcHByb3ByaWF0ZSB0aHJvdWdob3V0LgoJUGFzcyBNRU1fU0NBTEFSX1AgdG8gYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSB3aGVyZSBhcHByb3ByaWF0ZS4KClR1ZSBKYW4gMTkgMjE6MjA6NTIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmMgKHBvcF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByZWNvZy5oIChwb3Bfb3BlcmFuZCk6IERlY2xhcmUgaXQuCgkqIGdlbnJlY29nLmMgKHByZWRzKTogRGVmaW5lIGl0LgoKCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogSGFuZGxlIGNvbmRpdGlvbmFsIGJyYW5jaCBleHBhbmRlcnMKCWVtaXR0aW5nIG11bHRpcGxlIGp1bXAgaW5zdHJ1Y3Rpb25zLgoJKiBqdW1wLmMgKGNvbmRqdW1wX2xhYmVsKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAoY29uZGp1bXBfbGFiZWwpOiBEZWNsYXJlIGl0LgoKVHVlIEphbiAxOSAyMTowODoyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogUmV2ZXJ0IDE3IERlYyBjaGFuZ2UuICBEb24ndCBlbWl0CgljbG9iYmVyIGR1cmluZyBvciBhZnRlciByZWxvYWQuCgpUdWUgSmFuIDE5IDE2OjU2OjAzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZW5vdXRwdXQuYyAobmFtZV9mb3JfaW5kZXgpOiBOZXcgZnVuY3Rpb24uCgkoc2Nhbl9vcGVyYW5kcywgdmFsaWRhdGVfaW5zbl9hbHRlcm5hdGl2ZXMpOiBVc2UgaXQuCgkqIGdlbnJlY29nLmMgKGluc25fbmFtZV9wdHJfc2l6ZSk6IE5ldyB2YXJpYWJsZS4KCShtYWtlX2luc25fc2VxdWVuY2UpOiBGaWxsIGluIGluc25fbmFtZV9wdHIuCgkobWVyZ2VfdHJlZXMpOiBVc2UgaXQuCgpUdWUgSmFuIDE5IDE2OjM3OjM2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2L2lzYy5oIChUQVJHRVRfREVGQVVMVCk6IERlZmluZSBzeW1ib2xpY2x5LgoJKiBpMzg2L2lzY2NvZmYuaCwgaTM4Ni9uZXh0LmgsIGkzODYvc2NvLmgsIGkzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogaTM4Ni9zY29kYnguaCwgaTM4Ni9zZXF1ZW50LmgsIGkzODYudW5peC5oOiBMaWtld2lzZS4KClR1ZSBKYW4gMTkgMTU6MDA6MTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChOVU1fU1RPUkVTKTogRGVsZXRlLgoJKGxvb3Bfc3RvcmVfbWVtcyk6IFR1cm4gaW50byBhbiBFWFBSX0xJU1Qgb2YgTUVNcy4KCShwcmVzY2FuX2xvb3ApOiBQcm9wZXJseSBpbml0aWFsaXplIGxvb3BfbWVtc19pZHguCgkobm90ZV9hZGRyX3N0b3JlZCk6IFNpbXBsaWZ5IHVzaW5nIGxpc3Qgc3RydWN0dXJlIGluc3RlYWQgb2YKCWZpeGVkIHNpemVkIGFycmF5LgoJKGludmFyaWFudF9wLCBjaGVja19kYnJhX2xvb3AsIGxvYWRfbWVtcyk6IFNpbWlsYXJseS4KCgkqIGZsb3cuYyAoaW52YWxpZGF0ZV9mcm9tX2F1dG9pbmMpOiBOZXcgZnVuY3Rpb24uCgkobWFya19zZXRfMSwgbWFya191c2VkX3JlZ3MpOiBVc2UgaXQuCgoJKiBNYWtlZmlsZS5pbiAocHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogRGVwZW5kIG9uIE1ha2VmaWxlLgoKMTk5OS0wMS0xOSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoLW1sb25nLWRvdWJsZS02NCk6IE5ldyBvcHRpb24gZGVzY3JpcHRpb24uCgoxOTk5LTAxLTE5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsaWJnY2MyLmM6IENoYW5nZSBhbGwgdXNlcyBvZiBMT05HX0RPVUJMRV9UWVBFX1NJWkUgdG8KCUxJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFLgoJKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTmV3LiAgU2V0IHRvIExPTkdfRE9VQkxFX1RZUEVfU0laRQoJaWYgbm90IGRlZmluZWQuCgkqIGk5NjAvaTk2MC5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtbnVtZXJpY3MuCgkoQ1BQX1NQRUNTKTogQWRkIC1tbG9uZy1kb3VibGUtNjQgc3VwcG9ydC4KCShUQVJHRVRfRkxBR19MT05HX0RPVUJMRV82NCwgVEFSR0VUX0xPTkdfRE9VQkxFXzY0KTogTmV3LgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxvbmctZG91YmxlLTY0IHN1cHBvcnQuCgkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTGlrZXdpc2UuCgkoTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBEZWZpbmUuCgkqIGk5NjAvdng5NjAtY29mZi5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtc29mdC1mbG9hdC4KCShDUFBfU1BFQ1MpOiBBZGQgLW1sb25nLWRvdWJsZS02NCBzdXBwb3J0LgoJKiBpOTYwL3QtOTYwYmFyZSAoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtbG9uZy1kb3VibGUtNjQuCgkoTVVMVElMSUJfRElSTkFNRVMpOiBBZGQgbGQ2NC4KCSogaTk2MC90LXZ4d29ya3M5NjAgKE1VTFRJTElCX09QVElPTlMsIE1VTFRJTElCX0RJUk5BTUVTKTogTGlrZXdpc2UuCgpUdWUgSmFuIDE5IDExOjU0OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU3RyaXAgYSBUQVJHRVRfRVhQUiBpZiB3ZSdyZSBwYXNzaW5nIGJ5CglpbnZpc2libGUgcmVmZXJlbmNlLgoKVHVlIEphbiAxOSAxNDo1MTozNiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAob2Zmc2V0dGFibGVfYWRkcl9vcGVyYW5kKTogRGVsZXRlLgoJKG9mZnNldHRhYmxlX21lbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogUmVmbGVjdCBmdW5jdGlvbiBjaGFuZ2UuCgkoUlM2MDAwX1NBVkVfVE9DKTogUmVwcmVzZW50IGFkZHJlc3MgYXMgTUVNLgoJKiB3aW4tbnQuaCAoUlM2MDAwX1NBVkVfVE9DKTogU2FtZS4KCSogcnM2MDAwLm1kIChpbmRpcmVjdCBjYWxscyk6IENoYW5nZSBvZmZzZXR0YWJsZSBhZGRyZXNzIHBhcmFtZXRlcgoJdG8gb2Zmc2V0dGFibGUgbWVtb3J5IHBhcmFtZXRlci4KClR1ZSBKYW4gMTkgMTA6MjQ6NTMgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bC5oIChydHhfZGVmKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgkoTUVNX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkoTUVNX1NDQUxBUl9QKTogTmV3IG1hY3JvLgoJKE1FTV9DT1BZX0FUVFJJQlVURVMpOiBMaWtld2lzZS4KCShNRU1fU0VUX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkqIHJ0bC50ZXhpIChNRU1fU0NBTEFSX1ApOiBEb2N1bWVudC4KCSogYWxpYXMuYyAoY2Fub25fcnR4KTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkoZml4ZWRfc2NhbGFyX2FuZF92YXJ5aW5nX3N0cnVjdF9wKTogTmV3IGZ1bmN0aW9uLiAgVXNlCglNRU1fU0NBTEFSX1AgcmF0aGVyIHRoYW4gIU1FTV9JTl9TVFJVQ1RfUC4KCShhbGlhc2VzX2V2ZXJ5dGhpbmdfcCk6IExpa2V3aXNlLgoJKHRydWVfZGVwZW5kZW5jZSk6IFVzZSB0aGVtLgoJKHdyaXRlX2RlcGVuZGVuY2VfcCk6IE5ldyBmdW5jdGlvbiwgY29udGFpbmluZyBjb2RlIGNvbW1vbiB0bwoJYW50aV9kZXBlbmRlbmNlIGFuZCBvdXRwdXRfZGVwZW5kZW5jZS4KCShhbnRpX2RlcGVuZGVuY2UpOiBVc2UgaXQuCgkob3V0cHV0X2RlcGVuZGVuY2UpOiBMaWtld2lzZS4KCSogY2FsbHMuYyAoc2F2ZV9maXhlZF9hcmd1bWVudF9hcmVhKTogRG9uJ3QgY2xlYXIKCU1FTV9JTl9TVFJVQ1RfUC4gCgkoZXhwYW5kX2NhbGwpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShlbWl0X2xpYnJhcnlfY2FsbCk6IERvbid0IGNsZWFyIE1FTV9JTl9TVFJVQ1RfUC4KCShlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSk6IExpa2V3aXNlLgoJKHN0b3JlX29uZV9hcmcpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCShtYWtlX2V4dHJhY3Rpb24pOiBMaWtld2lzZS4KCShzaW1wbGlmeV9zaGlmdF9jb25zdCk6IExpa2V3aXNlLgoJKGdlbl9sb3dwYXJ0X2Zvcl9jb21iaW5lKTogTGlrZXdpc2UuCgkqIGNzZS5jIChnZW5fbG93cGFydF9pZl9wb3NzaWJsZSk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBMaWtld2lzZS4KCShjaGFuZ2VfYWRkcmVzcyk6IExpa2V3aXNlLgoJKiBleHBsb3cuYyAoc3RhYmlsaXplKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGV4cHIuYyAocHJvdGVjdF9mcm9tX3F1ZXVlKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkoZW1pdF9ncm91cF9zdG9yZSk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKGNvcHlfYmxrbW9kZV9mcm9tX3JlZyk6IExpa2V3aXNlLgoJKHN0b3JlX2ZpZWxkKTogTGlrZXdpc2UuCgkoZXhwYW5kX2V4cHIpOiBSZW1vdmUgYm9ndXMgZ3Vlc3N3b3JrIHNldHRpbmcgTUVNX0lOX1NUUlVDVF9QCgloZXVyaXN0aWNhbGx5LiAgVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkoZ2V0X21lbW9yeV9ydHgpOiBMaWtld2lzZS4KCSogZmluYWwuYyAoYWx0ZXJfc3VicmVnKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9zdGFja190ZW1wKTogQ2xlYXIgTUVNX1NDQUxBUl9QIGFuZAoJTUVNX0FMSUFTX1NFVCBvbiBuZXdseSByZXR1cm5lZCBNRU1zLgoJKGFzc2lnbl90ZW1wKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkocHV0X3JlZ19pbnRvX3N0YWNrKTogTGlrZXdpc2UuCgkoZml4dXBfdmFyX3JlZnMxKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkoZ2VuX21lbV9hZGRyZXNzb2YpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShhc3NpZ25fcGFybXMpOiBMaWtld2lzZS4KCShleHBhbmRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiBsb29wLmMgKG5vdGVfYWRkcl9zdG9yZWQpOiBSZW1vdmUgY2hlY2sgb24gTUVNX0lOX1NUUlVDVF9QLgoJKiBvcHRhYnMuYyAoZ2VuX21vdmVfaW5zbik6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogUHJpbnQgL2YgZm9yIGZyYW1lX3JlbGF0ZWQuCgkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDb3B5IE1FTV9TQ0FMQVJfUCBhcyB3ZWxsLgoJKiBzdG10LmMgKGV4cGFuZF9kZWNsKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkoZXhwYW5kX2Fub25fdW5pb25fZGVjbCk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiB2YXJhc20uYyAobWFrZV9kZWNsX3J0bCk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKG91dHB1dF9jb25zdGFudF9kZWYpOiBMaWtld2lzZS4KCSogYTI5ay5jIChhMjlrX3NldF9tZW1mbGFnc18xKTogVGFrZSBzY2FsYXJfcC4KCVNldCBNRU1fU0NBTEFSX1AuCgkoYTI5a19zZXRfbWVtZmxhZ3MpOiBVc2UgaXQuCgkqIGFscGhhLmMgKGdldF9hbGlnbmVkX21lbSk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiBjNHguYyAoYzR4X3NjYW5fZm9yX2xkKTogTGlrZXdpc2UuCgkqIGg4MzAwLmMgKGZpeF9iaXRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKiBtODhrLmMgKGxlZ2l0aW1pemVfYWRkcmVzcyk6IExpa2V3aXNlLgoJKGJsb2NrX21vdmVfbG9vcCk6IExpa2V3aXNlLgoJKGJsb2NrX21vdmVfbm9fbG9vcCk6IExpa2V3aXNlLgoJKGJsb2NrX21vdmVfc2VxdWVuY2UpOiBMaWtld2lzZS4KCShtODhrX2J1aWx0aW5fc2F2ZXJlZ3MpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCSogbWlwcy9hYmk2NC5oIChTRVRVUF9JTkNPTUlOR19WQVJBUkdTKTogTGlrZXdpc2UuCgkqIHJzNjAwMC5jIChleHBhbmRfYmxvY2tfbW92ZV9pbnNuKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIHNoLmMgKHNoX2J1aWx0aW5fc2F2ZXJlZ3MpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCSogYXJtLmggKGFybV9nZW5fbG9hZF9tdWx0aXBsZSk6IFRha2Ugc2NhbGFyX3AuCgkoYXJtX3N0b3JlX2xvYWRfbXVsdGlwbGUpOiBMaWtld2lzZS4KCSogYXJtLmMgKGFybV9nZW5fbG9hZF9tdWx0aXBsZSk6IExpa2V3aXNlLgoJKGFybV9nZW5fc3RvcmVfbXVsdGlwbGUpOiBMaWtld2lzZS4KCShhcm1fZ2VuX21vdnN0cnFpKTogVHJlYXQgTUVNX1NDQUxBUl9QIGxpa2UgTUVNX0lOX1NUUlVDVF9QLgoJClR1ZSBKYW4gMTkgMTI6MzA6MzcgRVNUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIG9wdGFicy5jIChlbWl0X2xpYmNhbGxfYmxvY2spOiBBZGQgYSBSRUdfRUhfUkVHSU9OIHJlZyBub3RlIHRvIGFsbAoJY2FsbHMgd2l0aGluIGEgbGliY2FsbCBibG9jayB0byBpbmRpY2F0ZSBubyB0aHJvd3MgYXJlIHBvc3NpYmxlLgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzLCBmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgbG9vayBmb3IgCglsaWJjYWxsIGJsb2Nrcy4gRG9uJ3QgYWRkIGVkZ2VzIHRvIGV4Y2VwdGlvbiBoYW5kbGVycyBpZiB3ZSBzZWUgCglhIFJFR19FSF9SRUdJT04gbm90ZSB3aXRoIGEgdmFsdWUgb2YgMC4KCShtYWtlX2VkZ2VzKTogT3ZlcnJpZGUgYWN0aXZlX2VoX3JlZ2lvbiB2ZWN0b3IgaWYgdGhlIGNhbGwgaGFzIGEgbm90ZQoJaW5kaWNhdGluZyB0aGUgY2FsbCBkb2VzIG5vdCB0aHJvdy4KCjE5OTktMDEtMTkgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY29uZmlnL3JzNjAwMC9zeXN2NC5oIChDQzFfU1BFQyk6IEZpeCBjb3JyZWN0IG51bWJlcnMgb2Yge30uCgpUdWUgSmFuIDE5IDA2OjI2OjMwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChjY2NwLm8sIGNwcGxpYi5vKTogRGVwZW5kIG9uIE1ha2VmaWxlLgoKTW9uIEphbiAxOCAwOTo1Njo0MSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoQysrIERpYWxlY3QgT3B0aW9ucyk6IERvY3VtZW50IC1mbm8tcnR0aS4KCjE5OTktMDEtMTggIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogIGludm9rZS50ZXhpICgtbWNwdT03NDAsIC1tY3B1PTc1MCk6IE5ldyBvcHRpb25zLgogICAgICAgICgtbShuby0pbXVsdGlwbGUsIC1tKG5vLSlzdHJpbmcpOiBEZXNjcmliZSBjYXNlcyBmb3IgUFBDNzQwICYKCVBQQzc1MC4KCjE5OTktMDEtMTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKHtBU00sQ1BQfV9DUFVfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciBhbGwgbWFjaGluZXMKCXN1cHBvcnRlZCB3aXRoIC1tY3B1PXh4eC4KCShwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfUFBDNzUwLgoJKEFESlVTVF9QUklPUklUWSk6IENhbGwgcnM2MDAwX2FkanVzdF9wcmlvcml0eS4KCShSVFhfQ09TVFMpOiBTdXBwbHkgY29zdHMgZm9yIDc1MCBtdWx0aXBseS9kaXZpZGUgb3BlcmF0aW9ucy4KCShyczYwMDBfYWRqdXN0X3ByaW9yaXR5KTogQWRkIGRlY2xhcmF0aW9uLgoJCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IC1tY3B1PXs3NTAsNzQwfSBub3cgc2V0cyB0aGUKCXByb2Nlc3NvciB0eXBlIGFzIDc1MCwgbm90IDYwMy4gIEFsbG93IC1tbXVsdGlwbGUgYW5kIC1tc3RyaW5nIG9uCglsaXR0bGUgZW5kaWFuIDc1MCBzeXN0ZW1zLgoJKHJzNjAwMF9hZGp1c3RfcHJpb3JpdHkpOiBTdHViIGZvciBub3cuCgkoZ2V0X2lzc3VlX3JhdGUpOiBUaGUgUG93ZXJQQyA3NTAgY2FuIGlzc3VlIDIgaW5zdHJ1Y3Rpb25zL2N5Y2xlLgoKCSogcnM2MDAwLm1kIChmdW5jdGlvbi9jcHUgYXR0cmlidXRlcyk6IEFkZCBpbml0aWFsIHBwYzc1MCBzdXBwb3J0LgoKCSogc3lzdjQuaCAoU1RSSUNUX0FMSUdOTUVOVCk6IERvbid0IGZvcmNlIHN0cmljdCBhbGlnbm1lbnQgaWYKCWxpdHRsZSBlbmRpYW4uCgkoQ0MxX1NQRUMpOiBQYXNzIC1tc3RyaWN0LWFsaWduIGlmIGxpdHRsZSBlbmRpYW4sIGFuZCBub3QKCW92ZXJyaWRkZW4uCgkoQ0MxX0VORElBTl97TElUVExFLEJJRyxERUZBVUxUfV9TUEVDKTogRW5kaWFuIHNwZWNpZmljIGNvbmZpZ3MuCgkoU1VCVEFSR0VUX0VYVFJBX1NQRUNTKTogQWRkIGNjMSBlbmRpYW4gc3BlY3MuCgoJKiB7c3lzdjQsZWFiaX1sZS5oIChDQzFfRU5ESUFOX0RFRkFVTFRfU1BFQyk6IE92ZXJyaWRlLCBkZWZhdWx0IGlzCglsaXR0bGUgZW5kaWFuLgoKCSogdC1wcGNnYXMgKE1VTFRJTElCXyopOiBEZWxldGUgb2Jzb2xldGUgU29sYXJpcyBtdWx0aWxpYnMuCgpNb24gSmFuIDE4IDEyOjAzOjA4IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAoZGl2X3RyYXApOiBTcGxpdCBkaXZfdHJhcF9taXBzMTYKCWZyb20gZGl2X3RyYXAuICAKCShkaXZfdHJhcF9ub3JtYWwsZGl2X3RyYXBfbWlwczE2KTogQ29ycmVjdCB0aGUgbGVuZ3RoIGF0dHJpYnV0ZXMuCgpNb24gSmFuIDE4IDExOjQ4OjI4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCglJbnN0ZWFkIG9mIHdyaXRpbmcgdG8gY29uc3QgY2hhciAqYnVmIGRpcmVjdGx5LCB1c2UgYSBub24tY29uc3QKIAl2YXJpYWJsZSBgd2J1ZicgdG8gYWxsb2NhdGUgYW5kIHdyaXRlIGEgc3RyaW5nLCB0aGVuIHNldCBidWYgPSB3YnVmLgoKCSogY3BwdWxwLmMgKHVzZXJfbGFiZWxfcHJlZml4KTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcKCWtleXdvcmQuCgoJKiBkeW4tc3RyaW5nLmMgKGR5bl9zdHJpbmdfYXBwZW5kKTogTGlrZXdpc2UuCgoJKiBkeW4tc3RyaW5nLmggKGR5bl9zdHJpbmdfYXBwZW5kKTogTGlrZXdpc2UuCgoJKiBmaW5hbC5jIChlbmRfZmluYWwsIG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UsIGFzbV9mcHJpbnRmKTogTGlrZXdpc2UuCgoJKiBvdXRwdXQuaCAoZW5kX2ZpbmFsLCBvdXRwdXRfb3BlcmFuZF9sb3NzYWdlLCBhc21fZnByaW50ZiwKCW5hbWVkX3NlY3Rpb24sIGRlY29kZV9yZWdfbmFtZSwgbWFrZV9kZWNsX3J0bCwgdXNlcl9sYWJlbF9wcmVmaXgpOgoJTGlrZXdpc2UuCgoJKiBwcm9maWxlLmMgKGluaXRfYnJhbmNoX3Byb2IpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChzZXRfdGFyZ2V0X3N3aXRjaCwgdm1lc3NhZ2UsCiAJdl9tZXNzYWdlX3dpdGhfZmlsZV9hbmRfbGluZSwgdl9tZXNzYWdlX3dpdGhfZGVjbCwKIAl2X2Vycm9yX3dpdGhfZmlsZV9hbmRfbGluZSwgdl9lcnJvcl93aXRoX2RlY2wsIHZfZXJyb3JfZm9yX2FzbSwKIAl2ZXJyb3IsIHZmYXRhbCwgdl93YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSwgdl93YXJuaW5nX3dpdGhfZGVjbCwKIAl2X3dhcm5pbmdfZm9yX2FzbSwgdndhcm5pbmcsIHZwZWR3YXJuLCB2X3BlZHdhcm5fd2l0aF9kZWNsLAogCXZfcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUsIHZzb3JyeSwgdl9yZWFsbHlfc29ycnksCglvcGVuX2R1bXBfZmlsZSwgZHVtcF9ydGwsIGNsZWFuX2R1bXBfZmlsZSwgCglwcmludF92ZXJzaW9uLCBwcmludF9zaW5nbGVfc3dpdGNoLCBwcmludF9zd2l0Y2hfdmFsdWVzLAoJZHVtcF9iYXNlX25hbWUsIGRlYnVnX2FyZ3MsIGxhbmdfaW5kZXBlbmRlbnRfb3B0aW9ucywKCXVzZXJfbGFiZWxfcHJlZml4LCBkb2N1bWVudGVkX2xhbmdfb3B0aW9ucywgdGFyZ2V0X3N3aXRjaGVzLAoJdGFyZ2V0X29wdGlvbnMsIHByaW50X3RpbWUsIHBmYXRhbF93aXRoX25hbWUsIGZhdGFsX2lvX2Vycm9yLAoJZmF0YWxfaW5zbiwgZGVmYXVsdF9wcmludF9lcnJvcl9mdW5jdGlvbiwgcHJpbnRfZXJyb3JfZnVuY3Rpb24sCglyZXBvcnRfZXJyb3JfZnVuY3Rpb24sIGVycm9yX3dpdGhfZmlsZV9hbmRfbGluZSwgZXJyb3Jfd2l0aF9kZWNsLAoJZXJyb3JfZm9yX2FzbSwgZXJyb3IsIGZhdGFsLCB3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSwKCXdhcm5pbmdfd2l0aF9kZWNsLCB3YXJuaW5nX2Zvcl9hc20sIHdhcm5pbmcsIHBlZHdhcm4sCglwZWR3YXJuX3dpdGhfZGVjbCwgcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUsIHNvcnJ5LAoJcmVhbGx5X3NvcnJ5LCBib3RjaCwgb3V0cHV0X3F1b3RlZF9zdHJpbmcsIG91dHB1dF9maWxlX2RpcmVjdGl2ZSwKCW9wZW5fZHVtcF9maWxlLCByZXN0X29mX2RlY2xfY29tcGlsYXRpb24sIGRpc3BsYXlfaGVscCwgbWFpbik6CglMaWtld2lzZS4KCgkqIHRvcGxldi5oIChwcmludF90aW1lLCBmYXRhbCwgZmF0YWxfaW9fZXJyb3IsIHBmYXRhbF93aXRoX25hbWUsCglmYXRhbF9pbnNuLCB3YXJuaW5nLCBlcnJvciwgcGVkd2FybiwgcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUsCgl3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSwgZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lLCBzb3JyeSwKICAgICAgICByZWFsbHlfc29ycnksIGRlZmF1bHRfcHJpbnRfZXJyb3JfZnVuY3Rpb24sIHJlcG9ydF9lcnJvcl9mdW5jdGlvbiwKCXJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiwgcGVkd2Fybl93aXRoX2RlY2wsIHdhcm5pbmdfd2l0aF9kZWNsLAoJZXJyb3Jfd2l0aF9kZWNsLCBlcnJvcl9mb3JfYXNtLCB3YXJuaW5nX2Zvcl9hc20sIG91dHB1dF9xdW90ZWRfc3RyaW5nLAoJb3V0cHV0X2ZpbGVfZGlyZWN0aXZlLCBib3RjaCk6IExpa2V3aXNlLgoKCSogdHJlZS5oIChtYWtlX2RlY2xfcnRsKTogTGlrZXdpc2UuCgoJKiB2YXJhc20uYyAoc3RyaXBfcmVnX25hbWUsIG5hbWVkX3NlY3Rpb24sIGRlY29kZV9yZWdfbmFtZSwKCW1ha2VfZGVjbF9ydGwpOiBMaWtld2lzZS4KCQpNb24gSmFuIDE4IDExOjM1OjQ5IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKFRDTF9MSUJSQVJZKTogVXNlICdjZCcgdG8gZmluZCB0aGUgbGlicmFyeQoJZGlyZWN0b3J5IGxvZ2ljYWxseSByYXRoZXIgdGhhbiBwaHlzaWNhbGx5LiAKCk1vbiBKYW4gMTggMDk6MDU6MzcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbG9vcC5jIChpbnNlcnRfYmN0KTogSGlkZSB0aGUgZGVmaW5pdGlvbiBvZiB2YXJpYWJsZXMKCWBpbmNyZW1lbnRfZGlyZWN0aW9uJywgYGNvbXBhcmVfZGlyZWN0aW9uJywgYGFkZF9pdGVyYXRpb24nIGFuZAoJYGxvb3BfdmFyX21vZGUnLgoKCSogcmVjb2cuYyAobW9kZV9kZXBlbmRlbnRfYWRkcmVzc19wKTogTWFyayBwYXJhbWV0ZXIgYGFkZHInIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuICBNYXJrIGxhYmVsIGB3aW4nIHdpdGggQVRUUklCVVRFX1VOVVNFRF9MQUJFTC4KCShtb2RlX2luZGVwZW5kZW50X29wZXJhbmQpOiBNYXJrIGxhYmVsIGBsb3NlJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VEX0xBQkVMLgoKCSogcmVnY2xhc3MuYyAobl9vY2N1cnJlbmNlcyk6IFJlbW92ZSBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24uCgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IE1hcmsgdmFyaWFibGUgYHRlbScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2FzdCB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBvZiBgYmNvcHknIHRvIFBUUi4KCgkqIHNiaXRtYXAuYyAoc2JpdG1hcF9jb3B5KTogTGlrZXdpc2UuCgoJKiBzY2FuLWRlY2xzLmMgKHNjYW5fZGVjbHMpOiBIaWRlIGxhYmVsIGBoYW5kbGVfY29tbWEnLgoKCSogdG9wbGV2LmMgKG91dHB1dF9sYW5nX2lkZW50aWZ5KTogTWFyayBwcm90b3R5cGUgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHRyZWUuYyAobWFrZV9ub2RlKTogQ2FzdCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYGJ6ZXJvJyB0byBQVFIuCgkobWFrZV90cmVlX3ZlYyk6IExpa2V3aXNlLgoJKGJ1aWxkMSk6IExpa2V3aXNlLgoKCSogdmFyYXNtLmMgKGFzc2VtYmxlX3N0YXRpY19zcGFjZSk6IE1hcmsgdmFyaWFibGUgYHRlbScgd2l0aAogCUFUVFJJQlVURV9VTlVTRUQuCgpNb24gSmFuIDE4IDA0OjI4OjM2IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBNYWtlZmlsZS5pbiAoR0NPVl9JTlNUQUxMX05BTUUpOiBOZXcgbWFjcm8uCgkoaW5zdGFsbC1jb21tb24pOiBVc2UgaXQuCgkodW5pbnN0YWxsKTogVXNlIGl0LgoJKHVuaW5zdGFsbCk6IFVzZSBjb3JyZWN0IG5hbWVzIGZvciBwcm90b2l6ZSBhbmQgdW5wcm90b2l6ZS4KCk1vbiBKYW4gMTggMDM6NTI6NTYgMTk5OSAgQ2hyaXN0aWFuIEJydWVsIDxDaHJpc3RpYW4uQnJ1ZWxAc3QuY29tPgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAobGFzdF9tZW1fc2V0KTogRGVsZXRlIHZhcmlhYmxlLiAgUmVmZXJlbmNlcyByZW1vdmVkLgoJKG1lbV9zZXRfbGlzdCk6IE5ldyB2YXJpYWJsZS4KCShsaWZlX2FuYWx5c2lzKTogSW5pdGlhbGl6ZSBhbmQgZmluYWxpemUgYWxpYXMgYW5hbHlzaXMuCgkocHJvcGFnYXRlX2Jsb2NrKTsgSW5pdGlhbGl6ZSBtZW1fc2V0X2xpc3QuICBDbGVhciBmb3IgQ0FMTF9JTlNOcy4KCShpbnNuX2RlYWRfcCk6IEZvciBhIHN0b3JlIHRvIG1lbW9yeSwgc2VhcmNoIHRoZSBlbnRpcmUgbWVtX3NldF9saXN0Cglmb3IgYSBtYXRjaC4KCShtYXJrX3NldF8xKTogS2lsbCBlbnRyaWVzIG9uIHRoZSBtZW1fc2V0X2xpc3QgZm9yIGFsaWFzZWQgd3JpdGVzIG9yCgljaGFuZ2VzIHRvIHRoZWlyIGFkZHJlc3Nlcy4gIEFkZCBuZXcgZW50cmllcyB0byB0aGUgbWVtX3NldF9saXN0IGZvcgoJbWVtb3J5IHdyaXRlcyB3cml0ZXMuCgkobWFya191c2VkX3JlZ3MpOiBLaWxsIGVudHJpZXMgb24gdGhlIG1lbV9zZXRfbGlzdCB3aGljaCBtYXkgYmUKCXJlZmVyZW5jZWQgYnkgYSBsb2FkIG9wZXJhdGlvbi4KCk1vbiBKYW4gMTggMDE6MDE6MDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogYWxpYXMuYyAoYmFzZV9hbGlhc19jaGVjayk6IEFkZCBtaXNzaW5nIHJldHVybiBmb3IgZGlmZmVyaW5nCglzeW1ib2xzIGNhc2UuCgpNb24gSmFuIDE4IDAwOjM2OjEzIDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSogbWlwcy10ZHVtcC5jIChwcmludF9maWxlX2Rlc2MpOiBIYW5kbGUgdW5rbm93biBmaWxlbmFtZXMgYW5kCgltaXNzaW5nIGxvY2FsIHN5bWJvbHMuCgpTdW4gSmFuIDE3IDIxOjA0OjMxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3ApOiBTcGVjaWFsIGNhc2UgQ09ERV9MQUJFTC4KCgkqIHN5c3RlbS5oIChiY29weSk6IEltcGxlbWVudCB3aXRoIG1lbW1vdmUgbm90IG1lbWNweS4KClN1biBKYW4gMTcgMTk6MjM6MjAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGNwcHVscC5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIGkzODYubWQgKGludGVnZXIgY29uZGl0aW9uYWwgbW92ZXMpOiBBZGQgbWlzc2luZyBlYXJseWNsb2JiZXJzLgoKICAgICAgICAqIHJlZ21vdmUuYyAob3B0aW1pemVfcmVnX2NvcHlfMSk6IFVuZG8gQXVnIDE4IGNoYW5nZS4gIFVwZGF0ZQogICAgICAgIFJFR19OX0NBTExTX0NST1NTRUQgYW5kIFJFR19MSVZFX0xFTkdIIGlmIGFuZCBvbmx5IGlmIHdlIGNoYW5nZQogICAgICAgIHdoZXJlIGEgcmVnaXN0ZXIgaXMgbGl2ZS4KClN1biBKYW4gMTcgMDM6MjA6NDcgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogcmVnLXN0YWNrLmMgKHN1YnN0X3N0YWNrX3JlZ3NfcGF0KTogQWJvcnQgaWYgdGhlIGRlc3RpbmF0aW9uCglvZiBhIEZQIGNvbmRpdGlvbmFsIG1vdmUgaXMgbm90IG9uIHRoZSBGUCByZWdpc3RlciBzdGFjay4KClN1biBKYW4gMTcgMDE6MTU6MDQgUFNUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgSmFuIDE2IDIzOjQwOjMzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdzXzEpOiBEbyBub3QgY2FsbAoJcmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyBmb3IgYW4gaW5zbiB3aXRoIGFzbSBvcGVyYW5kcy4KCgkqIGNjY3AuYyAocHJpbnRfaGVscCk6IEZpeCB0eXBvcy4KCSogY3BwbGliLmMgKHByaW50X2hlbHApOiBGaXggdHlwb3MuCgkqIHRvcGxldi5jIChmX29wdGlvc24pOiBGaXggdHlwb3MuCgkoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBGaXggdHlwb3MuCgpTYXQgSmFuIDE2IDIxOjQ4OjE3IDE5OTkgIE1hcmMgRXNwaWUgKE1hcmMuRXNwaWVAb3BlbmJzZC5vcmcpCgoJKiBnY2MuYzogKGRvX3NwZWNfMSk6IEZpeCBvYnZpb3VzIHR5cG8uCgpTYXQgSmFuIDE2IDE5OjMxOjA3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBJZiBgd2Fybl90cmFkaXRpb25hbCcsIHdhcm4gd2hlbgoJYSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZvbGxvd3MgYSBzdGF0aWMgb25lLgoKCSogaW52b2tlLnRleGkgKC1XdHJhZGl0aW9uYWwpOiBEb2N1bWVudCB0aGUgZXh0cmEgY2hlY2sgbm93IGRvbmUKCWJ5IHRoaXMgZmxhZy4KClNhdCBKYW4gMTYgMTU6MTM6NDYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEubWQgKHNoYWRkKTogQ3JlYXRlIHNoYWRkIGluc25zLCBldmVuIGlmIHRoZSByZXN1bHQgb2YgdGhlIHNoaWZ0IGlzCgluZWVkZWQgd2l0aG91dCB0aGUgYWRkaXRpb24uCgpTYXQgSmFuIDE2IDEwOjQ4OjE2IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtb3ZkZiwgbW92c2YpOiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Igbm9fbmV3X3BzZXVkb3MgbG9zc2FnZS4KCkZyaSBKYW4gMTUgMjM6NDQ6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmMgKHNwYXJjX2lzc3VlKTogQWRkIGh5cGVyc3BhcmMvc3BhcmNsaXRlODZ4IGVudHJpZXMuCgpGcmkgSmFuIDE1IDIyOjMwOjA0IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBEbyBub3QgYXNzdW1lIDMyLWJpdCBDT05TVF9JTlQuCgkqIHJzNjAwMC5jICh1X3Nob3J0X2NpbnRfb3BlcmFuZCwgYWRkX29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCwKCW5vbl9hZGRfY2ludF9vcGVyYW5kLCBub25fbG9naWNhbF9jaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCShnZXRfaXNzdWVfcmF0ZSk6IEFkZCBDUFVfUFBDNjA0RSBjYXNlLgoJKiByczYwMDAubWQgKG1vdmRpLCAhVEFSR0VUX1BPV0VSUEM2NCBzcGxpdHRlcnMpOiBIYW5kbGUgNjQtYml0IGhvc3RzLgoJCkZyaSBKYW4gMTUgMTg6NDI6MTIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocXVldWVkX3N1YmV4cF9wKTogTWFrZSBwdWJsaWMuCgkqIGV4cHIuaCAocXVldWVkX3N1YmV4cF9wKTogRGVjbGFyZSBpdC4KCSogcmVjb2cuYyAoYXNtX29wZXJhbmRfb2spOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfYXNtX29wZXJhbmRzKTogVXNlIGl0LiAgQWZ0ZXIgcmVsb2FkLCB1c2UgY29uc3RyYWluX29wZXJhbmRzIAoJaW5zdGVhZC4KCSogcmVjb2cuaCAoYXNtX29wZXJhbmRfb2spOiBEZWNsYXJlIGl0LgoJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBVc2UgaXQgdG8gdHJ5IGhhcmRlciB0byBtYWtlCglhc21zIGluaXRpYWxseSBzYXRpc2Z5IHRoZWlyIGNvbnN0cmFpbnRzLgoKRnJpIEphbiAxNSAxNzo0Mzo1OSAxOTk5ICBKZWZmcmV5IEEuIExhdyAgPGxhd0BydGwuY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmggKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBEbyBub3QgY3JlYXRlCgkobWVtIChsb19zdW0gKC4uLikpIGZvciBURm1vZGUgdW5sZXNzIFRBUkdFVF9WOS4KClNhdCBKYW4gMTYgMTI6NDc6MTUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKG5vdF9yZXBlYXRfcmVnKTogQWxsb3cgbGRwIGluc3RydWN0aW9uCglpbiBkZWxheSBzbG90IG9mIFJQVEJELgoKU2F0IEphbiAxNiAxMjoyNjo0MCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2xpYmdjYy5TIChfX19kaXZoaTMsIF9fX21vZGhpMyk6IEZpeCBsb25nIGxvbmcKCWRpdmlkZSBhbmQgbW9kdWxvIHNpZ24gcHJvYmxlbS4KCkZyaSBKYW4gMTUgMTE6MDI6MzEgMTk5OSAgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBSZXR1cm4gMCBpZiB0aGUgbGFzdCBsb29wIGluc24KCWlzIG5vdCBhIGp1bXAgaW5zbiBvciBpZiB0aGUgbG9vcCBoYXMgbXVsdGlwbGUgYmFjayBlZGdlcy4KCjE5OTktMDEtMTUgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZS5pbiAoZml4aW5jX2RlZnMpOiBEbyBub3QgZGVmaW5lIGZvciBtWzY4XThrLW1vdG9yb2xhLXN5c3Z7LDN9OwoJaXQncyB3b3JraW5nIHByb3Blcmx5IG5vdy4gIFJlbW92ZSBjb21tZW50IHNheWluZyAic2VlIG02OGstbW90b3JvbGEtc3lzdgoJYXMgYW4gZXhhbXBsZSIuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSB1c2luZyBhdXRvY29uZi4KCgkqIGZpeGluYy9maXhpbmNsLmMgKG1haW4pOiBEbyBub3QgaWdub3JlIFNJR0NITEQuCgpUaHUgSmFuIDE0IDIyOjM4OjQxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEZvciBhIERFU1RfQUREUiBnaXYsIGRvIG5vdCBzaGFyZQoJYSByZWdpc3RlciB3aXRoIGFub3RoZXIgREVTVF9BRERSIGdpdiBpZiB0aGUgYWRkcmVzcyBpcyBub3QgdmFsaWQuCgoJKiBwYS5jIChocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IFNhdmUgYW5kIHJlc3RvcmUgdGhlIHN0YXRpYyBjaGFpbgoJYXJvdW5kIHRoZSBjYWxsIHRvIG1jb3VudC4KCgkqIGg4MzAwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVc2UgYXNtX2ZwcmludGYsIG5vdCBmcHJpbnRmLgoKCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBVc2UgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgdG8gYXZvaWQKCWdlbmVyYXRpbmcgbm9uLWNhbm9uaWNhbCBydGwuCgoxOTk5LTAxLTE0ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pOTYwL2k5NjAuYyAoaTk2MF9vdXRwdXRfbW92ZV9kb3VibGVfemVybywKCWk5NjBfb3V0cHV0X21vdmVfcXVhZF96ZXJvKTogTmV3IGZ1bmN0aW9ucyBmb3IgbW92aW5nIHplcm9zLgoJKGk5NjBfb3V0cHV0X21vdmVfZG91YmxlLCBpOTYwX291dHB1dF9tb3ZlX3F1YWQpOiBBZGRpdGlvbmFsIGNvZGUKCWZvciBzaXR1YXRpb24gd2hlbiBtb3ZpbmcgdW5hbGlnbmVkIHJlZ2lzdGVyIGdyb3VwLgoJCiAgICAgICAgKiBjb25maWcvaTk2MC9pOTYwLmggKGk5NjBfb3V0cHV0X21vdmVfZG91YmxlX3plcm8sCglpOTYwX291dHB1dF9tb3ZlX3F1YWRfemVybyk6IFRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KCgkqIGNvbmZpZy9pOTYwL2k5NjAubWQgKG1vdmRpKzEsIG1vdnRpKzEpOiBVc2FnZSBvZiB0aGUgZnVuY3Rpb25zLgoKMTk5OS0wMS0xMyAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTk2MC9pOTYwLmMgKGk5NjBfZnVuY3Rpb25fcHJvbG9ndWUpOiBOZXcgY29kZSAob3B0aW1hbAoJc29sdXRpb24pIGZvciBzYXZpbmcgZ2xvYmFsIHJlZ2lzdGVycyBpbiBsb2NhbCByZWdpc3RlcnMuCgkoZm9ybV9yZWdfZ3JvdXBzLCByZWdfZ3JvdXBfY29tcGFyZSwgc3BsaXRfcmVnX2dyb3VwKTogTmV3CglmdW5jdGlvbnMgdXNlZCBieSB0aGUgY29kZS4KCShyZWdfZ3JvdXApOiBOZXcgc3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHRoZSBuZXcgY29kZS4KCjE5OTktMDEtMTMgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGZpeGluYy9maXhpbmNsLmMgKGNyZWF0ZV9maWxlKTogUGFzcyBmaWxlIGNyZWF0aW9uIG1hc2sgYXMKCXRoaXJkIHBhcmFtZXRlciB0byAib3BlbiIuICBVc2UgT19UUlVOQyBmbGFnIHRvIG9wZW4gaW5zdGVhZCBvZgoJZXhwbGljaXRseSB1bmxpbmsnaW5nIHRoZSBmaWxlLgoJKHByb2Nlc3MpOiBhbmQgZm9yZ2V0IGFib3V0IHRoZSAiY2htb2QiIHN0dWZmLgoKV2VkIEphbiAxMyAyMDoxMjozNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaW50ZWdyYXRlLmMgKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBSZWNvZ25pemUgKG1lbSAoYWRkcmVzc29mKSkKCWFuZCBzdWJzdGl0dXRlLiAgQ29weSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlcmUgaW50byBhIG5ldyBwc2V1ZG8uCgpXZWQgSmFuIDEzIDE2OjQ3OjAwIDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKICAgICAgICAqIGNvbmZpZy9hcm0uYyAob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiAgQ2hlY2sgVEFSR0VUX0FCT1JUX05PUkVUVVJOCiAgICAgICAgYmVmb3JlIGdlbmVyYXRpbmcgYSBjYWxsIHRvIGFib3J0IGZvciB2b2xhdGlsZSBmdW5jdGlvbnMuCiAgICAgICAgKiBjb25maWcvYXJtLmggKEFSTV9GTEFHX0FCT1JUX05PUkVUVVJOKTogIERlZmluZS4KICAgICAgICAoVEFSR0VUX0FCT1JUX05PUkVUVVJOKTogIERlZmluZS4KICAgICAgICAoYWJvcnQtb24tbm9yZXR1cm4pOiAgTmV3IG9wdGlvbi4KClRodSBKYW4gMTQgMTM6NTI6NDIgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGluX2FubnVsX3Nsb3RfMyk6IENvcnJlY3RseSBhbGxvdyB1bmFyeWNjIAoJYW5kIGJpbmFyeWNjIG9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QhCgpXZWQgSmFuIDEzIDE2OjE2OjQ0IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKICAgICAgICAqIGNvbmZpZy9hcm0uYyAob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiAgQ2hlY2sgVEFSR0VUX0FCT1JUX05PUkVUVVJOCiAgICAgICAgYmVmb3JlIGdlbmVyYXRpbmcgYSBjYWxsIHRvIGFib3J0IGZvciB2b2xhdGlsZSBmdW5jdGlvbnMuCiAgICAgICAgKiBjb25maWcvYXJtLmggKEFSTV9GTEFHX0FCT1JUX05PUkVUVVJOKTogIERlZmluZS4KICAgICAgICAoVEFSR0VUX0FCT1JUX05PUkVUVVJOKTogIERlZmluZS4KICAgICAgICAoYWJvcnQtb24tbm9yZXR1cm4pOiAgTmV3IG9wdGlvbi4KCldlZCBKYW4gMTMgMTM6MzA6MDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jICh4c3RyZHVwKTogUmVuYW1lZCBmcm9tIGBzYXZlc3RyaW5nJy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglSZW1vdmUgcHJvdG90eXBlIHdoaWNoIHdlIGdldCBmcm9tIGxpYmliZXJ0eS5oLgoKCSogY29sbGVjdDIuYyAoeHN0cmR1cCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jICh4c3RyZHVwKTogTGlrZXdpc2UgZm9yIGBjb3B5c3RyJy4KCShteWJ6ZXJvKTogUmVtb3ZlIGl0IGFuZCB1c2UgYG1lbXNldCcgaW5zdGVhZC4KCgkqIGdlbm91dHB1dC5jIChteWJjb3B5LCBteWJ6ZXJvKTogUmVtb3ZlIHRoZXNlLiAgQWxsIGNhbGxlcnMgY2hhbmdlZAoJdG8gdXNlIGBtZW1jcHknIGFuZCBgbWVtc2V0JyBpbnN0ZWFkLgoKCSogZ2VucmVjb2cuYyAoeHN0cmR1cCk6IFJlbmFtZWQgZnJvbSBgY29weXN0cicuICBBbGwgY2FsbGVycwogCWNoYW5nZWQuICBSZW1vdmUgcHJvdG90eXBlLgoJKG15YmNvcHksIG15Ynplcm8pOiBSZW1vdmUgdGhlc2UgYW5kIHVzZSBtZW1jcHkvbWVtc2V0LgoKV2VkIEphbiAxMyAwMDo1OTowNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtaXBzLmggKExPQURfRVhURU5EX09QKTogQ29ycmVjdCBmb3IgU0ltb2RlIGFuZCBDQ21vZGUgbW92ZXMgd2hlbgoJZ2VuZXJhdGluZyBjb2RlIGZvciBUQVJHRVRfNjRCSVQuCgpUdWUgSmFuIDEyIDE0OjA1OjM3IDE5OTkgICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCwgY2FzZXMgJ20nIGFuZCAnTScpOiBEbyBub3QgZGVwZW5kIG9uCglIT1NUX1dJREVfSU5UIHdvcmQtc2l6ZS4KCShyczYwMDBfc3RhY2tfaW5mbyk6IFJlbW92ZSByZWR1bmRhbnQgYWxpZ25tZW50IG9mIGZwbWVtLgoKVHVlIEphbiAxMiAxNDowNTozNyAxOTk5ICAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChzaG9ydF9jaW50X29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkodV9zaG9ydF9jaW50X29wZXJhbmQsIHJlZ19vcl9jaW50X29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGlucHV0X29wZXJhbmQpOiBBZGp1c3QgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkqIHJzNjAwMC5oIChQUkVESUNBVEVfQ09ERVMpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggcmVmZXJlbmNlcy4KCSogcnM2MDAwLm1kIChtb3ZzaSk6IEFkanVzdCBDT05TVEFOVF9QX1JUWCBoYW5kbGluZy4KCShtb3ZoaSwgbW92cWkpOiBSZW1vdmUgQ09OU0FOVF9QX1JUWCBoYW5kbGluZy4KCShtb3ZkaSk6IEFkanVzdCBDT05TVEFOVF9QX1JUWCBoYW5kbGluZy4KCjE5OTktMDEtMTIgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSB1c2luZyBhdXRvY29uZi4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbiAoSU5DTFVERVMpOiBBZGQgLUkkKHNyY2RpcikvLi4vLi4vaW5jbHVkZS4KCSogZml4aW5jL2ZpeGluY2wuYyAoU0lHQ0hMRCk6IFVzZSBTSUdDTEQgb24gKHZlcnkpIG9sZCBzeXN0ZW1zLgoJKHByb2Nlc3MpOiAiZmNobW9kIiBpc24ndCBhdmFpbGFibGUgb24gYWxsIHN5c3RlbXMsIHVzZSAiY2htb2QiCglpbnN0ZWFkLgoJKiBmaXhpbmMvc2VydmVyLmM6IEFkZCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+LgoJKFNURElOX0ZJTEVOTyk6IEFkZCBkZWZhdWx0IGRlZmluaXRpb24gaWYgbm8gaW5jbHVkZSBmaWxlIGRlZmluZXMKCWl0IGFscmVhZHkuCgkoU1RET1VUX0ZJTEVOTyk6IExpa2V3aXNlLgoKVHVlIEphbiAxMiAxMDoyMzoyNCAxOTk5ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIG1pcHMubWQgKGNhbGxfdmFsdWVfaW50ZXJuYWwzYyk6IE5ldyBwYXR0ZXJuIGZvciAtbWlwczE2IC1tbG9uZy1jYWxscy4KCjE5OTktMDEtMTIgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIG02OGsvbW90MzMwMC5oIChBRERfTUlTU0lOR19QT1NJWCwgQUREX01JU1NJTkdfWE9QRU4pOiBEZWZpbmUgdG8KCWVuc3VyZSBhbGwgcHJvdG90eXBlcyBuZWNlc3NhcnkgZm9yIGJ1aWxkaW5nIGxpYmlvIHdpbGwgYmUgYXZhaWxhYmxlLgoJKiBtNjhrL3htLW1vdDMzMDAuaCAoQUREX01JU1NJTkdfUE9TSVgsIEFERF9NSVNTSU5HX1hPUEVOKTogUmVtb3ZlCglkZWZpbml0aW9ucyBoZXJlIGFzIHRoZXkgYXJlIG5vdCBob3N0IHNwZWNpZmljLgoJKiBtODhrL3N5c3YzLmgsIG04OGsveG0tc3lzdjMuaDogTGlrZXdpc2UuCgpUdWUgSmFuIDEyIDAyOjUzOjQ2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoY3NlX2luc24pOiBOZXZlciBwcmVmZXIgKGNvbnN0IChjb25zdGFudF9wX3J0eCkpLgoKVHVlIEphbiAxMiAwMjozNjoxMCBQU1QgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClR1ZSBKYW4gMTIgMDE6MzA6MTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJ0bC5jIChydHhfYWxsb2MpOiBVc2UgbWVtc2V0IGluc3RlYWQgb2YgaW5saW5lIGxvb3AuCgoJKiByZWNvZy5oIChyZWNvZ19vcF9hbHQpOiBEZWNsYXJlIGV4dGVybi4KClR1ZSBKYW4gMTIgMDA6MjM6MzEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogSWYgdGhlIG5vdGUgYWNjZXNzZXMgYSBtZW0rYWRkcmVzc29mCglpbiBhIHdpZGVyIG1vZGUgdGhhbiBhbnkgcmVwbGFjZW1lbnQsIGFkanVzdCB0aGUgY2FjaGVkIHJlcGxhY2VtZW50LgoJQ2FjaGUgdHJpdmlhbCBzdWJzdGl0dXRpb25zIGFzIHdlbGwuCgpUdWUgSmFuIDEyIDAwOjA2OjAwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgogICAgICAgICogTWFrZWZpbGUuaW4gKE9CSkVDVFMpOiBBZGQgc2JpdG1hcC5vLgogICAgICAgIChCQVNJQ19CTE9DS19IKTogQWRkIHNiaXRtYXAuaC4KICAgICAgICAqIGJhc2ljLWJsb2NrLmg6IE1vdmUgc2ltcGxlIGJpdG1hcCBjb2RlIHRvIHNiaXRtYXAuaC4KICAgICAgICAqIGZsb3cuYzogTW92ZSBzaW1wbGUgYml0bWFwIGNvZGUgdG8gc2JpdG1hcC5jCiAgICAgICAgKiBzYml0bWFwLmgsIHNiaXRtYXAuYzogTmV3IGZpbGVzLgoKTW9uIEphbiAxMSAyMzo1MTo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogRG9jdW1lbnQgc3dpdGNoZXMuCgkoVEFSR0VUX09QVElPTlMpOiBMaWtld2lzZS4KCgkqIGFscGhhL2VsZi5oIChBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKTogVXNlIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDLgoKTW9uIEphbiAxMSAyMjo1NDoxNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChuZXdfYWxpYXNfc2V0KTogUmV0dXJuIHplcm8gaWYgIWZsYWdfc3RyaWN0X2FsaWFzaW5nLgoKTW9uIEphbiAxMSAyMjozNjowMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYmFzaWMtYmxvY2suaCAoYmFzaWNfYmxvY2tfaGVhZCk6IFJlbmFtZSB0byB4X2Jhc2ljX2Jsb2NrX2hlYWQuCgkoYmFzaWNfYmxvY2tfZW5kKTogUmVuYW1lIHRvIHhfYmFzaWNfYmxvY2tfZW5kLgoJKEJMT0NLX0hFQUQsIEJMT0NLX0VORCk6IFVwZGF0ZS4KCgkqIGNhbGxlci1zYXZlLmM6IENoYW5nZSBiYXNpY19ibG9ja19oZWFkL2VuZCByZWZlcmVuY2VzIHRvIAoJQkxPQ0tfSEVBRC9FTkQuCgkqIGNvbWJpbmUuYywgZmxvdy5jLCBmdW5jdGlvbi5jLCBnY3NlLmMsIGdsb2JhbC5jOiBMaWtld2lzZS4KCSogZ3JhcGguYywgaGFpZmEtc2NoZWQuYywgbG9jYWwtYWxsb2MuYywgcmVnY2xhc3MuYzogTGlrZXdpc2UuCgkqIHJlZ21vdmUuYywgcmVsb2FkMS5jLCByZW9yZy5jLCBzY2hlZC5jOiBMaWtld2lzZS4KClNhdCBKYW4gIDkgMjM6NTQ6MDkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKHhzdHJlcnJvcik6IFJlbmFtZWQgZnJvbSBteV9zdHJlcnJvci4gIEFsbCBjYWxsZXJzCiAJY2hhbmdlZC4gIFJlbW92ZSBwcm90b3R5cGUgc2luY2Ugd2UgZ2V0IHRoYXQgZnJvbSBsaWJpYmVydHkuaC4KCgkqIHByb3RvaXplLmMgKHhzdHJlcnJvcik6IExpa2V3aXNlLgoKU2F0IEphbiAgOSAyMzoyMjowNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAocmVhZF9zcGVjcyk6IEVuc3VyZSBmb3JtYXQgc3BlY2lmaWVycyBtYXRjaCB0aGVpciBhcmd1bWVudHMuCgpTYXQgSmFuICA5IDIwOjA0OjI0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGNvcHlfbm9kZSk6IE9vcHMuICBUaGF0IHdvdWxkIGJlIGNvcHkgbm90IHplcm8KCWluIHRoYXQgbGFzdCBjaGFuZ2UuCgpTdW4gSmFuIDEwIDE1OjM1OjQxIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IEluY2x1ZGUgc3lzdGVtLmguCiAJKGM0eF9jYWxsZXJfc2F2ZV9tYXApOiBEaXNhYmxlIGNhbGxlciBzYXZlIGZvciBSQy4KCShjNHhfb3B0aW1pemF0aW9uX29wdGlvbnMpOiBEaXNhYmxlIHNjaGVkdWxpbmcgYmVmb3JlIHJlbG9hZC4KCSh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKSA6IERlZmluZSByZXR1cm4gdHlwZSBhcyBpbnQuICAKCVJlbW92ZSB1bnVzZWQgdmFyaWFibGUgcmVncy4KCSogY29uZmlnL2M0eC9jNHguaCAoUkVHSVNURVJfTU9WRV9DT1NUKTogTWFrZSBpbmRlcGVuZGVudCBvZiByZWdpc3RlcgoJY2xhc3MuCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChyb3RscWkzLCByb3RycWkzKTogRml4IHVwIGVtaXR0ZWQgUlRMIHRvCgloYW5kbGUgcm90YXRpb25zLgoJKCpkYiwgZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybyk6IEZpeCB1cCBjb25zdHJhaW50cwoJdG8ga2VlcCByZWxvYWQgaGFwcHkuCgpTYXQgSmFuICA5IDE4OjM1OjI5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1ha2Vfbm9kZSk6IENhbGwgYnplcm8gaW5zdGVhZCBvZiBpbmxpbmUgY2xlYXIuCgkoY29weV9ub2RlLCBtYWtlX3RyZWVfdmVjLCBidWlsZDEpOiBMaWtld2lzZS4KCShnZXRfaWRlbnRpZmllcik6IENhbGwgc3RybGVuIGluc3RlYWQgb2YgaW5saW5lIGNvdW50LgoJKG1heWJlX2dldF9pZGVudGlmaWVyKTogTGlrZXdpc2UuCgpTdW4gSmFuIDEwIDE0OjA0OjUxIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiAoaW5fYW5udWxfc2xvdF8zKTogQWxsb3cgdW5hcnljYyBhbmQgYmluYXJ5Y2MKCW9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QuCgkoKmxzaHJxaTNfY29uc3Rfc2V0KTogRGlzYWxsb3cgYyBjb25zdHJhaW50IGZvciBvcGVyYW5kMC4KCShtb2RoaTMrMSwgbW9kaGkzKzIpOiBTZXQgYXR0cmlidXRlIHR5cGUgdG8gbXVsdGkuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9TX2NvbnN0cmFpbnQpOiBSZW1vdmVkIHNwYWNlIGluIG1pZGRsZSBvZiAKCSE9IG9wZXJhdG9yLgoKU2F0IEphbiAgOSAxMTo0NDo1NSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnYW5zaWRlY2wuaDogQWxsb3cgYXR0cmlidXRlIHVudXNlZCBvbiBsYWJlbHMgb25seSB3aGVuIHdlIGFyZQogCXZlcnNpb24gMi45MyBvciBoaWdoZXIuICBOb3QgYWxsIHZlcnNpb25zIG9mIDIuOTIgaGF2ZSB0aGlzIGZlYXR1cmUuCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgbWlub3IgbnVtYmVyIHRvIDkzLgoKRnJpIEphbiAgOCAxMDo1MToxMyAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmg6IERlY2xhcmUgb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlLgoJKiByZWNvZy5oOiBEZWNsYXJlIG5leHRfaW5zbl90ZXN0c19ub19pbmVxdWFsaXR5LgoKRnJpIEphbiAgOCAwMTo0Mzo1MyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBzdG10LmMgKG9wdGltaXplX3RhaWxfcmVjdXJzaW9uKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbSAuLi4KCShleHBhbmRfcmV0dXJuKTogVXNlIG9wdGltaXplX3RhaWxfcmVjdXJzaW9uLgoJKiB0cmVlLmggKG9wdGltaXplX3RhaWxfcmVjdXJzaW9uKTogRGVjbGFyZS4KCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBNb3ZlIGNhbGwgdG8gb3V0cHV0X2Z1bmNfc3RhcnRfcHJvZmlsZXIKCXRvIGFmdGVyIHRoZSBsb29wIHRvIGVtaXQgZGVmZXJyZWQgZnVuY3Rpb25zLgoKVGh1IEphbiAgNyAxOTo1Mjo1MyAxOTk5ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBzeXN0ZW0uaCAoYWJvcnQpOiBTdXBwbHkgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8KIAlyZXBvcnQgYW4gSW50ZXJuYWwgQ29tcGlsZXIgRXJyb3IuCgpUaHUgSmFuIDcgIDk6MjU6NTggUFNUIDE5OTkgQnJ1Y2UgS29yYiAoa29yYkBkYXRhZGVzaWduLmNvbSkKCgkqIGZpeGluYy9maXhpbmNsLmMgKCopOiBtb3JlIGRlY2FwaXRhbGl6YXRpb24gb2YgdmFyaWFibGVzCglwbHVzIHNvbWUgZXhwbGFuaXRvcnkgY29tbWVudHMKCgkqIGZpeGluYy9NYWtlZmlsZS5pbiBmaXhpbmMvbWtmaXhpbmMuc2g6CglXaGVuIHRoZSBmaXhpbmNsIHByb2dyYW0gZG9lcyBub3Qgd29yayBmb3IgYSBjZXJ0YWluIHN5c3RlbSwKCXdlIHN1YnN0aXR1dGUgYSBzaGVsbCBzY3JpcHQuICBBZGRlZCB1c2VyIGNvbW1lbnRhcnkgd2hlbgoJdGhpcyBoYXBwZW5zLgoKVGh1IEphbiAgNyAxMToyNjoxNyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2FsbHMuYyAoc3RvcmVfdW5hbGlnbmVkX2FyZ3VtZW50c19pbnRvX3BzZXVkb3MpOiBVc2UgeG1hbGxvYyB0bwoJYWxsb2NhdGUgbWVtb3J5IHRoYXQgd2lsbCBsaXZlIGJleW9uZCB0aGlzIGZ1bmN0aW9uLgoJKGV4cGFuZF9jYWxsKTogRnJlZSBpdCBoZXJlLgoKVGh1IEphbiAgNyAwMzowODoxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFNlbGVjdCBHRU5FUkFMX1JFR1MgZm9yIAoJaW50ZWdlciBkYXRhIG5vdCBkZXN0aW5lZCBmb3IgZnAgcmVncy4KCShMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogTmV3LgoKVGh1IEphbiAgNyAwMzowMzo0MiAxOTk5ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCVN1cHBvcnQgZm9yIEh5cGVyc3BhcmMgYW5kIFNwYXJjbGl0ZTg2eDoKCSogc3BhcmMuaCAoVEFSR0VUX0NQVV9oeXBlcnNwYXJjLCBUQVJHRVRfQ1BVX3NwYXJjbGl0ZTg2eCk6IE5ldy4KCShDUFBfQ1BVMzJfREVGQVVMVF9TUEVDKTogRml4IHVwIGZvciB0aGUgbmV3IHRhcmdldHMuCgkoQVNNX0NQVTMyX0RFRkFVTFRfU1BFQyk6IExpa2V3aXNlLgoJKFRBUkdFVF9DUFVfREVGQVVMVCk6IExpa2V3aXNlLgoJKGVudW0gcHJvY2Vzc29yX3R5cGUpOiBMaWtld2lzZS4KCShDUFBfRU5ESUFOX1NQRUMpOiBIYW5kbGUgbGl0dGxlIGVuZGlhbiBkYXRhLgoJKExJQkdDQzJfV09SRFNfQklHX0VORElBTik6IExpa2V3aXNlLgoJKEFESlVTVF9DT1NUKTogQ2FsbCBzcGFyY19hZGp1c3RfY29zdC4KCSogc3BhcmMuYyAoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IEZpeCB1cCBmb3IgdGhlIG5ldyB0YXJnZXRzLgoJKHN1cGVyc3BhcmNfYWRqdXN0X2Nvc3QpOiBNYWtlIHN0YXRpYy4KCShoeXBlcnNwYXJjX2FkanVzdF9jb3N0KTogTmV3LgoJKHVsdHJhc3BhcmNfYWRqdXN0X2Nvc3QpOiBNYWtlIHN0YXRpYy4KCShzcGFyY19hZGp1c3RfY29zdCk6IE5ldy4KCSogc3BhcmMubWQgKGF0dHIgY3B1KTogQWRkIGh5cGVyc3BhcmMgYW5kIHNwYXJjbGl0ZTg2eC4KCShmdW5jdGlvbl91bml0KTogQWRkIGh5cGVyc3BhcmMgc2NoZWR1bGluZyBydWxlcy4KCgkqIGNvbmZpZ3VyZS5pbiAod2l0aF9jcHUgaGFuZGxlcik6IFJlY29nbml6ZSBoeXBlcnNwYXJjLgoKVGh1IEphbiAgNyAyMzo1NDowNSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jOiBBZGRlZCBzcGFjZSBhZnRlciBuZWdhdGlvbiBvcGVyYXRvci4KCSogY29uZmlnL2M0eC9jNHguaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiBMaWtld2lzZS4KClRodSBKYW4gIDcgMjM6Mzk6MjcgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X3ByZWZlcnJlZF9yZWxvYWRfY2xhc3MpOiBBbHdheXMgcmV0dXJuIGNsYXNzLgoKVGh1IEphbiAgNyAwMDoyOToyNSAxOTkgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogY29tYmluZS5jIChudW1fc2lnbl9iaXRfY29waWVzKTogSW4gTkVHLCBNVUxULCBESVYgYW5kIE1PRCBjYXNlcywKCXdoZW4gYSB0ZXN0IGNhbid0IGJlIHBlcmZvcm1lZCBkdWUgdG8gbGltaXRlZCB3aWR0aCBvZgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwgdXNlIHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uLgoJRml4IFVESVYgY2FzZSBmb3IgY2FzZXMgd2hlcmUgdGhlIGZpcnN0IG9wZXJhbmQgaGFzIHRoZSBoaWdoZXN0IGJpdAoJc2V0LgoKVGh1IEphbiAgNyAwMDowMTozOCAxOTk5ICBMdXR6IFZpZXdlZyA8bGt2QG1hbmlhLnJvYmluLmRlPgoKCSogcGEuaCAocmVnX2NsYXNzKTogQWRkIEZQVVBQRVJfUkVHUy4KCShSRUdfQ0xBU1NfTkFNRVMpOiBTaW1pbGFybHkuCgkoUkVHX0NMQVNTX0NPTlRFTlRTKTogU2ltaWxhcmx5CgkoUkVHTk9fUkVHX0NMQVNTKTogSGFuZGxlIEZQVVBQRVJfUkVHUy4KCShGUF9SRUdfQ0xBU1NfUCk6IExpa2V3aXNlLgoJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IFNpbWlsYXJseS4KCShDTEFTU19NQVhfTlJFR1MpOiBTaW1pbGFybHkuCgoxOTk5LTAxLTA2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZml4aW5jbHVkZXM6IEZvciBIUC9VWCAxMC4yMCwgYWxzbyBsb29rIGluIGN1cnNlc19jb2xyL2N1cnNlcy5oCglmb3IgYSB0eXBlZGVmIG9mIGJvb2wuICBNYWtlIHN1cmUgdG8gaGF2ZSBhIGNvcHkgb2YgdGhlIGZpbGUgaXMKCWluIHBsYWNlIGJlZm9yZSB3ZSBsb29rIHRvIGZpeCBpdC4gIEZpeCB0eXBvIGluIHZhcmlhYmxlIG5hbWUgdG8KCUZJTEUuCgpXZWQgSmFuICA2IDA3OjUxOjA1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKSBbY2FzZSBCVUlMVF9JTl9DT05TVEFOVF9QXTogVXNlCgl2YWx1ZV9tb2RlIGZvciB0aGUgcmV0dXJuIG1vZGUuCgpXZWQgSmFuICA2IDE3OjU1OjE5IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogY29uZmlndXJlLmluOiBOZXcgZmxhZyAtLXdpdGgtZHdhcmYyLiAgIElmIHNldCwgZW5hYmxlcyBEV0FSRi0yCglkZWJ1Z2dpbmcgYXMgZGVmYXVsdC4KCgkqIGNvbmZpZy90bS1kd2FyZjIuaDogTmV3IGZpbGUuCgpXZWQgSmFuICA2IDE2OjA4OjU0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGg4MzAwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBEZWZpbmUuCgoJKiBwYS5oIChET05UX1JFQ09SRF9FUVVJVkFMRU5DRSk6IEtpbGwuCgkqIGxvY2FsLWFsbG9jLmMgKHVwZGF0ZV9lcXVpdl9yZWdzKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoJKiB0bS50ZXhpIChET05UX1JFQ09SRF9FUVVJVkFMRU5DRSk6IEtpbGwuCgoJKiBjYWxscy5jIChzcGVjaWFsX2Z1bmN0aW9uX3ApOiBQdXNoIGFsbG9jYSB0ZXN0IGluc2lkZSB0aGUgbGFyZ2UKCWNvbmRpdGlvbmFsIHdoaWNoIGV4Y2x1ZGVzIGZ1bmN0aW9ucyBub3QgYXQgZmlsZSBzY29wZSBvciBub3QKCWV4dGVybi4gIAoKCSogY2FsbHMuYyAoc3BlY2lhbF9mdW5jdGlvbl9wKTogTmV3IGZ1bmN0aW9uIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9jYWxsLgoJKHByZWNvbXB1dGVfcmVnaXN0ZXJfcGFyYW1ldGVycyk6IExpa2V3aXNlLgoJKHN0b3JlX29uZV9hcmcpOiBMaWtld2lzZS4KCShzdG9yZV91bmFsaWduZWRfYXJndW1ldG5zX2ludG9fcHNldWRvcyk6IExpa2V3aXNlLgoJKHNhdmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKHJlc3RvcmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKGV4cGFuZF9jYWxsKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKVGh1IEphbiAgNyAwMDoxMjoyNCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoYWRkcWkzKTogSWYgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgaXMKCWEgaGFyZCByZWdpc3RlciBvdGhlciB0aGFuIGFuIGV4dGVuZGVkIHByZWNpc2lvbiByZWdpc3RlciwKCWVtaXQgYWRkcWkzX25vY2xvYmJlci4KCSgqYWRkcWkzX25vY2xvYmJlcl9yZWxvYWQpOiBOZXcgcGF0dGVybiBhZGRlZCBzbyB0aGF0IHJlbG9hZAoJd2lsbCByZWNvZ25pc2UgYSBzdG9yZSBvZiBhIHBzZXVkbywgZXF1aXZhbGVudCB0byB0aGUgc3VtCglvZiB0aGUgZnJhbWUgcG9pbnRlciBhbmQgYSBjb25zdGFudCwgYXMgYW4gYWRkIGluc24uCgoxOTk5LTAxLTA2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiBSZS1pbmRlbnQgYWNjb3JkaW5nIHRvIHRoZSBHTlUgc3RhbmRhcmRzLgoJZml4aW5jL3NlcnZlci5jOiBMaWtld2lzZS4KCWZpeGluYy9zZXJ2ZXIuaDogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDEwOjQzOjI5IDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuYyAoY29uc3RfdWludDMyX29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFgKCWhhbmRsaW5nLgoJKGNvbnN0X3NpbnQzMl9vcGVyYW5kKTogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDA5OjQ0OjUxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5oOiBJbiBhZGRpdGlvbiB0byBjaGVja2luZyBfSkJMRU4sIGFsc28gY2hlY2sgaWYgYHNldGptcCcKIAlpcyBhIG1hY3JvIHdoZW4gZGVjaWRpbmcgaWYgd2UgY2FuIHVzZSBgam1wX2J1ZicgaW4gcHJvdG90eXBlcy4KCldlZCBKYW4gIDYgMDM6MTg6NTMgMTk5OSAgTWFyayBFbGJyZWNodCAgPHNub3diYWxsM0B1c2EubmV0PgoKCSogY29uZmlndXJlLmluIChwYy1tc2Rvc2RqZ3BwKTogU2V0IHhfbWFrZSB0byB4LWdvMzIuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogaTM4Ni94bS1nbzMyLmg6IERlZmluZSBMSUJTVERDWFguCgkqIGkzODYveC1nbzMyOiBOZXcuCgkqIGkzODYvZ28zMi5oIChNRF9FWEVDX1BSRUZJWCk6IERlZmluZS4KCShGSUxFX05BTUVfQUJTT0xVVEVfUCk6IERlZmluZS4KCShMSU5LX0NPTU1BTkRfU1BFQyk6IERlZmluZS4KCldlZCBKYW4gIDYgMDI6MjM6MzYgMTk5OSAgIkNoYXJsZXMgTS4gSGFubnVtIiA8cm9vdEBpaGFjay5uZXQ+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBJZiB0aGUgbGhzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQKCXRvIGJlIGEgcG9zdGluY3JlbWVudGVkIChvciBwb3N0ZGVjcmVtZW50ZWQpIHBvaW50ZXIsIGFsd2F5cwoJZm9yY2UgdGhlIHJocyB0byBiZSBldmFsdWF0ZWQgaW50byBhIHBzZXVkby4KCldlZCBKYW4gIDYgMDA6NTQ6MjEgMTk5OSAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KCgkqIHJlYWwuYyAobXRoZXJyKTogUHJpbnQgbW9yZSByZWFzb25hYmxlIHdhcm5pbmcgbWVzc2FnZXMuCgpUdWUgSmFuICA1IDIxOjU3OjQyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnY2MubywgcHJlZml4Lm8sIGNjY3AubywgY3BwbGliLm8pOiBEZXBlbmQgb24gcHJlZml4LmguCgoJKiBjY2NwLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkobmV3X2luY2x1ZGVfcHJlZml4KTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVycy4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfbmFtZV9tYXApOiBMaWtld2lzZS4KCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IExpa2V3aXNlLiAgQWxzbywgdXNlIGEgd3JpdGFibGUgY2hhciogY29weQoJb2YgcGFyYW1ldGVyIGBkaXInIHdoaWNoIHdlIHRoZW4gbW9kaWZ5LCByYXRoZXIgdGhhbiB1c2luZyB0aGUKCXBhcmFtZXRlciBpdHNlbGYgdG8gc3RvcmUgdGhlIG5ldyB3cml0YWJsZSBzdHJpbmcuCgkocmVtYXBfZmlsZW5hbWUpOiBDb25zdGlmeSBzb21lIHZhcmlhYmxlcy4gIEFsc28sIHVzZSBhIHdyaXRhYmxlCgljaGFyKiB0byBzdG9yZSBhbiBhbGxvY2F0ZWQgc3RyaW5nIHdoaWNoIHdlIHdpbGwgYmUgbW9kaWZ5aW5nLgoKCSogY3BwbGliLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkoY3BwX3N0YXJ0X3JlYWQpOiBDb25zdGlmeSB2YXJpYWJsZSBgc3RyJy4KCgkqIGNwcGxpYi5oIChhcHBlbmRfaW5jbHVkZV9jaGFpbik6IENvbnN0aWZ5IGEgY2hhciogcGFyYW1ldGVyLgoKCSogZ2NjLmMgSW5jbHVkZSBwcmVmaXguaCwgZG9uJ3QgcHJvdG90eXBlIHByZWZpeC5jIGZ1bmN0aW9ucy4KCShhZGRfcHJlZml4LCBzYXZlX3N0cmluZyk6IENvbnN0aWZ5IGNoYXIqIHBhcmFtZXRlcnMuCgkoZmF0YWwsIGVycm9yKTogQWRkIEFUVFJJQlVURV9QUklOVEZfMSB0byBwcm90b3R5cGVzLgoKCSogcHJlZml4LmM6IEluY2x1ZGUgcHJlZml4LmguCiAgCShnZXRfa2V5X3ZhbHVlLCB0cmFuc2xhdGVfbmFtZSwgc2F2ZV9zdHJpbmcsIHVwZGF0ZV9wYXRoLAoJc2V0X3N0ZF9wcmVmaXgpOiBDb25zdGlmeSB2YXJpb3VzIGNoYXIqIHBhcmFtZXRlcnMgYW5kIHZhcmlhYmxlcy4KCShzYXZlX3N0cmluZyk6IFVzZSB4bWFsbG9jLCBub3QgbWFsbG9jLgoJKHRyYW5zbGF0ZV9uYW1lKTogVXNlIGEgd3JpdGFibGUgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGNyZWF0ZSBhbmQKCW1vZGlmeSBhIHN0cmluZyBiZWZvcmUgc2V0dGluZyBpdCB0byBhIGNvbnN0IGNoYXIqLgoJCgkqIHByZWZpeC5oOiBOZXcgZmlsZSB0byBwcm90b3R5cGUgZnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gcHJlZml4LmMuCgpUdWUgSmFuIDUgIDg6NTI6MTggUFNUIDE5OTkgQnJ1Y2UgS29yYiAoa29yYkBkYXRhZGVzaWduLmNvbSkKCgkqIGZpeGluYy9maXhpbmNsLmMgKHZhcmlvdXMpOiBhZGRlZCBkZWJ1ZyBjb2RlIHNvCglNYW5mcmVkIGNhbiB0cmFjZSB0aGUgcHJvY2Vzc2luZy4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWYgKHN5cy91dHNuYW1lLmgpOiBQcm92aWRlIGZvcndhcmQgZGVjbGFyYXRpb24gb2YKCXN0cnVjdCB1dHNuYW1lIG9uIFVsdHJpeCBWNC5bMzVdLgoKCSogZml4aW5jL3tmaXhpbmNsLnh8Zml4aW5jbC5zaHxpbmNsaGFjay5zaH0gOiByZWdlbmVyYXRlZAoKTW9uIEphbiAgNCAxNTozNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKHNraXBfaWZfZ3JvdXApOiBTcGxpdCBvdXQgdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcwoJZGlyZWN0aXZlIHJlY29nbml0aW9uIHRvIGl0cyBvd24gZnVuY3Rpb24uICBEb24ndCB1c2UKCXBhcnNlIG1hcmtlcnM7IHVzZSBhIGJhcmUgcG9pbnRlciBpbnRvIHRoZSBidWZmZXIuICBVc2UKCWNvcHkvc2tpcF9yZXN0X29mX2xpbmUgaW5zdGVhZCBvZiBkb2luZyBpdCBieSBoYW5kLiAgUmVtb3ZlCglgcmV0dXJuIG9uIGFueSBkaXJlY3RpdmUnIG1vZGUgd2hpY2ggd2FzIG5ldmVyIHVzZWQsIGFuZCB0YWtlCglvbmx5IG9uZSBhcmd1bWVudC4KCShjb25zaWRlcl9kaXJlY3RpdmVfd2hpbGVfc2tpcHBpbmcpOiBOZXcgZnVuY3Rpb24sIHN1YnJvdXRpbmUKCW9mIHNraXBfaWZfZ3JvdXAuICBMb2dpYyBzdHJlYW1saW5lZCBhIGJpdC4KCShjb25kaXRpb25hbF9za2lwLCBkb19lbGlmLCBkb19lbHNlKTogQ2FsbCBza2lwX2lmX2dyb3VwIHdpdGgKCW9ubHkgb25lIGFyZ3VtZW50LgoKTW9uIEphbiAgNCAxNToyNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGRvX3VuZGVmKTogRU9GIGltbWVkaWF0ZWx5IGFmdGVyICcjdW5kZWYgRk9PJyBpcyBub3QgYW4KCWVycm9yLgoKTW9uIEphbiAgNCAxMTo1NTo1MSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHRlbmQudGV4aSAoQm91bmQgbWVtYmVyIGZ1bmN0aW9ucyk6IERvY3VtZW50LgoKTW9uIEphbiAgNCAxMTowMTo0OCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBtaXBzLXRkdW1wLmMgKHN0X3RvX3N0cmluZywgc2NfdG9fc3RyaW5nLCBnbGV2ZWxfdG9fc3RyaW5nLAoJbGFuZ190b19zdHJpbmcsIHR5cGVfdG9fc3RyaW5nKTogTWFrZSByZXR1cm4gdHlwZSBjb25zdCBjaGFyKi4KCShwcmludF9zeW1ib2wpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShwcmludF9maWxlX2Rlc2MpOiBDYXN0IHN0cnVjdHVyZSBtZW1iZXIgYGNyZmQnIHRvIHVsb25nIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIG1pcHMtdGZpbGUuYyAocGZhdGFsX3dpdGhfbmFtZSk6IEFwcGx5IGBjb25zdCcga2V5d29yZCB0byBjaGFyKi4KCShmYXRhbCwgZXJyb3IpOiBBZGQgQVRUUklCVVRFX1BSSU5URl8xIHRvIHByb3RvdHlwZXMuCgkocHJvZ25hbWUsIGlucHV0X25hbWUpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCURvbid0IHJlZHVuZGFudGx5IGluY2x1ZGUgc3lzL3N0YXQuaC4KCShhbGxvY19pbmZvKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoc3RfdG9fc3RyaW5nLCBzY190b19zdHJpbmcpOiBMaWtld2lzZS4KCShoYXNoX3N0cmluZyk6IENhc3QgdmFyaWFibGUgYGhhc2hfc3RyaW5nJyB0byBhIHN5bWludF90IHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfc3RyaW5nKTogQ2FzdCBQQUdFX1VTSVpFIHRvIFB0cmRpZmZfdCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCUxpa2V3aXNlIGNhc3QgaXQgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfbG9jYWxfc3ltYm9sKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoYWRkX2V4dF9zeW1ib2wpOiBMaWtld2lzZS4KCShhZGRfdW5rbm93bl90YWcpOiBMaWtld2lzZS4KCShhZGRfcHJvY2VkdXJlKTogQ2FzdCBhIHByaW50Zi1zdHlsZSBmaWVsZCB3aWR0aCB0byBhbiBpbnQuCgkoYWRkX2ZpbGUpOiBDYXN0IFBBR0VfVVNJWkUgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZQoJKHBhcnNlX2JlZ2luKTogQ2FzdCBhIHByaW50Zi1zdHlsZSBmaWVsZCB3aWR0aCB0byBhbiBpbnQuCgkocGFyc2VfYmVuZCk6IExpa2V3aXNlLgoJKHBhcnNlX2RlZik6IExpa2V3aXNlLgoJKHBhcnNlX2VuZCk6IExpa2V3aXNlLgoJKG1hcmtfc3RhYnMpOiBNYXJrIHBhcmFtZXRlciBgc3RhcnQnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShwYXJzZV9zdGFic19jb21tb24pOiBGaXggZm9ybWF0IHNwZWNpZmllci4KCShwYXJzZV9pbnB1dCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byBTaXplX3QuCgkod3JpdGVfb2JqZWN0KTogRml4IGFyZ3VtZW50cyB0byBtYXRjaCBmb3JtYXQgc3BlY2lmaWVycy4KCUNhc3QgdmFyaWFibGUgYG51bV93cml0ZScgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShyZWFkX3NlZWspOiBDYXN0IHZhcmlhYmxlIGBzeXNfcmVhZCcgdG8gc3ltaW50X3Qgd2hlbiBjb21wYXJpbmcKIAlhZ2FpbnN0IG9uZS4gIEZpeCBhcmd1bWVudHMgdG8gbWF0Y2ggZm9ybWF0IHNwZWNpZmllcnMuICBDYXN0Cgl2YXJpYWJsZSBgc2l6ZScgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjb3B5X29iamVjdCk6IENhc3QgcmVzdWx0IG9mIGBzaXplb2YnIHRvIGludCB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuICBGaXggYXJndW1lbnRzIHRvIG1hdGNoIGZvcm1hdCBzcGVjaWZpZXJzLiAgQ2FzdAoJdmFyaWFibGUgYGlmZCcgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IGEgc2lnbmVkIHZhbHVlLgoJTGlrZXdpc2UsIGxpa2V3aXNlLgoJCk1vbiBKYW4gIDQgMTA6MzA6MzMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogQWxsb3cgYXBwbHlpbmcgYXR0cmlidXRlIGB1bnVzZWQnCglvbiBhIExBQkVMX0RFQ0wuCgoJKiBjLXBhcnNlLmluIChsYWJlbCk6IFBhcnNlIGF0dHJpYnV0ZXMgYWZ0ZXIgYSBsYWJlbCwgYW5kIGNhbGwKIAlgZGVjbF9hdHRyaWJ1dGVzJyB0byBoYW5kbGUgdGhlbS4KCgkqIGdhbnNpZGVjbC5oIChBVFRSSUJVVEVfVU5VU0VEX0xBQkVMKTogRGVmaW5lLgoKCSogZ2VucmVjb2cuYyAoT1VUUFVUX0xBQkVMLCB3cml0ZV90cmVlXzEsIHdyaXRlX3RyZWUpOiBXaGVuCglnZW5lcmF0aW5nIGxhYmVscywgbWFyayB0aGVtIHdpdGggQVRUUklCVVRFX1VOVVNFRF9MQUJFTC4KCgkqIGludm9rZS50ZXhpOiBOb3RlIHRoYXQgbGFiZWxzIGNhbiBiZSBtYXJrZWQgYHVudXNlZCcuCgpTdW4gSmFuIDMgMjM6MzI6MTggUFNUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gSmFuICAzIDIzOjAwOjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG9wdGFicy5jIChlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IFVzZSBDT05TVEFOVF9QIGNhbm9uaWNhbGl6aW5nCglSVEwgZm9yIGEgY29tcGFyZS9qdW1wIHNlcXVlbmNlLgoJClN1biBKYW4gIDMgMjI6NTg6MTUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogb3B0YWJzLmMgKGVtaXRfY21wX2luc24pOiBBYm9ydCBpZiBhc2tlZCB0byBlbWl0IG5vbi1jYW5vbmljYWwgUlRMCglmb3IgYSB0YXJnZXQgd2l0aCBIQVZFX2NjMCBkZWZpbmVkLgoJKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogTmV3IGZ1bmN0aW9uLgoJKiBleHByLmggKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogUHJvdG90eXBlIGl0LgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFVzZSBpdCB0byByZXBsYWNlIGNhbGxzCgl0byBlbWl0X2NtcF9pbnNuIGFuZCBlbWl0X2p1bXBfaW5zbiBhbmQgdG8gY2Fub25pY2FsaXNlCgl0aGUgY29tcGFyaXNvbiBpZiBuZWNlc3NhcnkuCgkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IExpa2V3aXNlLgoKU3VuIEphbiAgMyAyMTowMTowNCAxOTk5ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KCgkqIGZpeGluY2x1ZGVzIChzeXMvdXRzbmFtZS5oKTogUHJvdmlkZSBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mCglzdHJ1Y3QgdXRzbmFtZSBvbiBVbHRyaXggVjQuWzM1XS4KCgkqIG1pcHMubWQgKGRpdl90cmFwKTogVXNlIGxvY2FsIGxhYmVscyBpbnN0ZWFkIG9mIGRvdC1yZWxhdGl2ZQoJYnJhbmNoZXMuCgpTdW4gSmFuICAzIDIwOjQwOjM0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLm1kIChicmFuY2gsIG5lZ2F0ZWQgYnJhbmNoKTogSGFuZGxlIChjb25zdF9pbnQgMCkgYXMgZmlyc3QKCXNvdXJjZSBvcGVyYW5kLgoJKiBwYS5jIChvdXRwdXRfY2JyYW5jaCk6IExpa2V3aXNlLgoKU3VuIEphbiAgMyAwMzoyMDozOCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAocnM2MDAwX3N0YWNrX2luZm8pOiBVbmRvIHNwdXJpb3VzIHBhcnQgb2YgbGFzdAoJY2hhbmdlLgoKMTk5OS0wMS0wMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogZXh0ZW5kLnRleGkgKF9fYnVpbHRpbl9jb25zdGFudF9wKTogQWRkIG1pc3NpbmcgQHNtYWxsZXhhbXBsZS4KCkZyaSBKYW4gIDEgMTE6NDg6MjAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5tZCAoZG91Ymxld29yZCBzaGlmdHMpOiBGaXggZHVtYiBtaXN0YWtlcyBpbiBwcmV2aW91cyBjaGFuZ2UuCgpXZWQgRGVjIDMwIDIzOjM4OjU1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsubWQgKGFkZGRpX2RpbHNocjMyKTogQWxsb3cgYWxsIG9wZXJhbmRzIHRvIGJlIHJlZ2lzdGVycyB0b28uCgkoYWRkZGlfZGlzaGwzMik6IFNpbWlsYXJseS4KCgkqIGNzZS5jIChpbnZhbGlkYXRlX3NraXBwZWRfYmxvY2spOiBDYWxsIGludmFsaWRhdGVfZnJvbV9jbG9iYmVycwoJZm9yIGVhY2ggaW5zbiBpbiB0aGUgc2tpcHBlZCBibG9jay4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFZlcmlmeSB0aGF0IHRoZSBpbnNuIHNhdGlzZmllcyBpdHMKCWNvbnN0cmFpbnRzIGFmdGVyIHJlcGxhY2luZyBhIHJlZ2lzdGVyIGFkZHJlc3Mgd2l0aCBhbiBhdXRvaW5jcmVtZW50CglhZGRyZXNzIGZvciByZWxvYWQgaW5oZXJpdGFuY2UgcHVycG9zZXMuCgoJKiBpMzg2Lm1kIChkb3VibGV3b3JkIHNoaWZ0cyk6IEF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24uCgpXZWQgRGVjIDMwIDIzOjAwOjI4IDE5OTggIERhdmlkIE8nQnJpZW4gPG9icmllbkBOVVhJLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoRnJlZUJTRCBFTEYpOiBOZWVkcyBzcGVjaWFsIGNydCBmaWxlcy4KCldlZCBEZWMgMzAgMjI6NTA6MTMgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYveG0tY3lnd2luLmg6IGNoYW5nZSBESVJfU0VQQVJBVE9SIHRvIGZvcndhcmQgc2xhc2guCgoxOTk4LTEyLTMwICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFdoaWxlIHJldmVyc2luZyB0aGUgbG9vcCwgaWYgdGhlCgljb21wYXJpc29uIHZhbHVlIGhhcyBhIFZPSUQgbW9kZSB1c2UgdGhlIG1vZGUgb2YgdGhlIG90aGVyIG9wZXJhbmQKCXRvIGNvbXB1dGUgdGhlIG1hc2suCgpXZWQgRGVjIDMwIDIyOjI0OjAwIDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLm1kICh7c2F2ZSxyZXN0b3JlfV9zdGFja19mdW5jdGlvbik6IFRha2UgMiBvcGVyYW5kcyB0bwoJYXZvaWQgd2FybmluZ3MgaW4gY29tcGlsaW5nIGV4cGxvdy5jLgoKCShwYXRjaCBmcm9tIEtlbiBSYWVidXJuLCByYWVidXJuQGN5Z251cy5jb20pCgkqIHJzNjAwMC5jIChyczYwMDBfc3RhY2tfaW5mbyk6IEZvcmNlIDgtYnl0ZSBhbGlnbm1lbnQgb2YKCWZwbWVtX29mZnNldC4gIENvbXB1dGUgdG90YWwgc2l6ZSBhZnRlciB0aGF0LCBhbmQgdGhlbgoJcnM2MDAwX2ZwbWVtX29mZnNldCB1c2luZyBib3RoIHZhbHVlcy4KCk1vbiBEZWMgMjggMTk6MjY6MzIgMTk5OCAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoKCSogZ2NjLnRleGkgKE5vbi1idWdzKTogYGBFbXB0eScnIGxvb3BzIHdpbGwgYmUgb3B0aW1pemVkIGF3YXkgaW4KCXRoZSBmdXR1cmU7IGluZGVlZCB0aGF0IGFscmVhZHkgaGFwcGVucyBpbiBzb21lIGNhc2VzLgoKVHVlIERlYyAyOSAxMTo1ODo1MyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMuYyAoaW5wdXRfb3BlcmFuZCk6IFJlY29nbml6ZSAoY29uc3QgKGNvbnN0YW50X3BfcnR4KSkuCgkoYXJpdGhfb3BlcmFuZCk6IFJlbW92ZSBjb25zdGFudF9wX3J0eCBoYW5kbGluZy4KCShjb25zdDY0X29wZXJhbmQsIGNvbnN0NjRfaGlnaF9vcGVyYW5kKTogTGlrZXdpc2UuCgkoYXJpdGgxMV9vcGVyYW5kLCBhcml0aDEwX29wZXJhbmQsIGFyaXRoX2RvdWJsZV9vcGVyYW5kKTogTGlrZXdpc2UuCgkoYXJpdGgxMV9kb3VibGVfb3BlcmFuZCwgYXJpdGgxMF9kb3VibGVfb3BlcmFuZCwgc21hbGxfaW50KTogTGlrZXdpc2UuCgkoc21hbGxfaW50X29yX2RvdWJsZSwgdW5zX3NtYWxsX2ludCwgemVyb19vcGVyYW5kKTogTGlrZXdpc2UuCgkqIHNwYXJjLmggKFBSRURJQ0FURV9DT0RFUyk6IExpa2V3aXNlLgoKCSogcnRsLmggKENPTlNUQU5UX1ApOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFguCgpUdWUgRGVjIDI5IDExOjMyOjU0IDE5OTggIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+OgoKCSogcnRsLmRlZiAoQ09OU1RBTlRfUF9SVFgpOiBDbGFyaWZ5IGNvbW1lbnRhcnkuCgkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4sIGNhc2UgQlVJTFRfSU5fQ09OU1RBTlRfUCk6IFJld29yayB0bwoJY29uc2lkZXIgY29uc3RhbnQgQ09OU1RSVUNUT1IgY29uc3RhbnQgYW5kIHRvIGRlZmVyIHNvbWUgY2FzZXMKCXRvIGNzZS4KCSogY3NlLmMgKGZvbGRfcnR4LCBjYXNlIENPTlNUKTogQWRkIGhhbmRsaW5nIGZvciBDT05TVEFOVF9QX1JUWC4KCSogcmVnY2xhc3MuYyAocmVnX3NjYW5fbWFya19yZWZzLCBjYXNlIENPTlNUKTogTGlrZXdpc2UuCgpUdWUgRGVjIDI5IDExOjMwOjEwIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGluaXRfZXhwcl9vbmNlKTogS2lsbCBjYW5faGFuZGxlX2NvbnN0YW50X3AgcmVjb2duaXRpb24uCgkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSAneCcpOiBSZW1vdmUgc3RhbmRhbG9uZSBDT05TVEFOVF9QX1JUWCBjb2RlLgoKCSogYWxwaGEuYyAocmVnX29yXzZiaXRfb3BlcmFuZCk6IFJlbW92ZSBDT05TVEFOVF9QX1JUWCBoYW5kbGluZy4KCShyZWdfb3JfOGJpdF9vcGVyYW5kLCBjaW50OF9vcGVyYW5kLCBhZGRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKHNleHRfYWRkX29wZXJhbmQsIGFuZF9vcGVyYW5kLCBvcl9vcGVyYW5kKTogTGlrZXdpc2UuCgkocmVnX29yX2NpbnRfb3BlcmFuZCwgc29tZV9vcGVyYW5kLCBpbnB1dF9vcGVyYW5kKTogTGlrZXdpc2UuCgkqIGFscGhhLmggKFBSRURJQ0FURV9DT0RFUyk6IExpa2V3aXNlLgoKU2F0IERlYyAyNiAyMzoyNjoyNiBQU1QgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBEZWMgMjYgMDk6MTc6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2VuZ2VucnRsLmMgKGdlbmNvZGUpOiBBbHdheXMgdXNlIGJ6ZXJvIHRvIGNsZWFyIG1lbW9yeSBpbnN0ZWFkCglvZiBkYW5nZXJvdXMgY2FzdHMgYW5kIHN0b3Jlcy4KCgkqIE1ha2VmaWxlLmluIChjb21wYXJlLCBnbnVjb21wYXJlKTogQWRkIG1pc3NpbmcgZWxzZSB0cnVlIGNsYXVzZXMuCgpGcmkgRGVjIDI1IDIzOjAwOjU2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGFscGhhLm1kIChidWlsdGluX2xvbmdqbXApOiBBZGQgbWlzc2luZyAiRE9ORSIuCgpUaHUgRGVjIDI0IDEwOjM5OjU3IDE5OTggIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogZ2NjLmMgKGV4ZWN1dGUpOiBFbmFibGUgLXBpcGUgd2l0aCB3aW4zMi4KCldlZCBEZWMgMjMgMTA6Mjc6NDQgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdC1hcm0tZWxmOiBBZGQgbXVsdGlwbGliIG9wdGlvbiBmb3IgbGVhZGluZwoJdW5kZXJzY29yZXMuCgoJKiBjb25maWcvYXJtL3RodW1iLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVc2UgdmFyaWFibGUKICAgICAgICAndXNlcl9sYWJlbF9wcmVmaXgnIHJhdGhlciB0aGFuIG1hY3JvIFVTRVJfTEFCRUxfUFJFRklYLgoKCSh0aHVtYl9zaGlmdGFibGVfY29uc3QpOiBVc2UgbWFjcm8gJ0JBU0VfUkVHX0NMQVNTJyByYXRoZXIKCXRoYW4gdmFyaWFibGUgJ3JlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzJy4gIFtOb3RlIHRoaXMKCWNoYW5nZSBpcyB1bnJlbGF0ZWQgdG8gdGhlIG90aGVycyBpbiB0aGlzIHBhdGNoXS4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBEZWZhdWx0IHRvIG5vCiAgICAgICAgbGVhZGluZyB1bmRlcnNjb3JlLgoKV2VkIERlYyAyMyAwOTo1MTozMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhbGlhcy5jIChyZWNvcmRfYWxpYXNfc3Vic2V0KTogUmVtb3ZlIGlnbm9yZWQgYCYnLgoJKGluaXRfYWxpYXNfb25jZSk6IExpa2V3aXNlLgoKCSogYy1sZXguYyAoVU5HRVRDKTogQ2FzdCBmaXJzdCBhcmd1bWVudCBvZiBjb21tYSBleHByZXNzaW9uIHRvIHZvaWQuCgoJKiBjb25maWcvbWlwcy9taXBzLmMgKG1pcHNfYXNtX2ZpbGVfZW5kKTogQ2FzdCB0aGUgcmVzdWx0IG9mCglmd3JpdGUgdG8gYGludCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBjb25maWcvbWlwcy9taXBzLmggKENBTl9FTElNSU5BVEUpOiBBZGQgcGFyZW5zIGFyb3VuZCAmJiB3aXRoaW4gfHwuCgkoSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBBZGQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBgZWxzZScuCgoJKiBjc2UuYyAocmVoYXNoX3VzaW5nX3JlZyk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0bwoJdW5zaWduZWQgaW50LgoKCSogZHdhcmYyb3V0LmMgKGluaXRpYWxfcmV0dXJuX3NhdmUpOiBDYXN0IC0xIHRvIHVuc2lnbmVkIGJlZm9yZQoJYXNzaWduaW5nIGl0IHRvIG9uZS4KCgkqIGV4Y2VwdC5jIChkdXBsaWNhdGVfZWhfaGFuZGxlcnMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGB0bXAnLgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBpJy4KCShvdXRwdXRfYXNtX2luc24pOiBDYXN0IGEgY2hhciB0byB1bnNpZ25lZCBjaGFyIHdoZW4gdXNlZCBhcyBhbgoJYXJyYXkgaW5kZXguCgoJKiBnY3NlLmMgKGNvbXB1dGVfcHJlX3BwaW5vdXQpOiBDYXN0IC0xIHRvIFNCSVRNQVBfRUxUX1RZUEUgd2hlbgoJYXNzaWduaW5nIGl0IHRvIG9uZS4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYGNvdW50JyBhbmQgYHRlbXAnLgoKCSogcmVjb2cuYyAocHJlcHJvY2Vzc19jb25zdHJhaW50cyk6IENhc3QgYSBjaGFyIHRvIHVuc2lnbmVkIGNoYXIKCXdoZW4gdXNlZCBhcyBhbiBhcnJheSBpbmRleC4KCgkqIHJlZ21vdmUuYyAoZmluZF9tYXRjaGVzKTogTGlrZXdpc2UuCgoJKiByZWxvYWQxLmMgKGNhbGN1bGF0ZV9uZWVkcyk6IEFkZCBkZWZhdWx0IGNhc2UgaW4gc3dpdGNoLgoJKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBJbml0aWFsaXplIHZhcmlhYmxlIGBvZmZzZXQnLgoJKHNldF9vZmZzZXRzX2Zvcl9sYWJlbCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byB1bnNpZ25lZC4KCShyZWxvYWRfYXNfbmVlZGVkKTogV3JhcCB2YXJpYWJsZSBgaScgaW4gbWFjcm8gY2hlY2sgb24KCUFVVE9fSU5DX0RFQyB8fCBJTlNOX0NMT0JCRVJTX1JFR05PX1AuCgoJKiBzY2FuLWRlY2xzLmMgKHNjYW5fZGVjbHMpOiBNYXJrIHBhcmFtZXRlcnMgYGFyZ2MnIGFuZCBgYXJndicKCXdpdGggQVRUUklCVVRFX1VOVVNFRC4gIENhc3QgdmFyaWFibGUgYHN0YXJ0X3dyaXR0ZW4nIHRvIHNpemVfdAoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfZGVjbCk6IENhc3QgbWF4aW11bV9maWVsZF9hbGlnbm1lbnQgdG8KCXVuc2lnbmVkIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLiAgTGlrZXdpc2UgZm9yCglHRVRfTU9ERV9BTElHTk1FTlQoKS4KCShsYXlvdXRfcmVjb3JkKTogQ2FzdCByZWNvcmRfYWxpZ24gdG8gaW50IHdoZW4gY29tcGFyaW5nIGFnYWluc3QgYQoJc2lnbmVkIHZhbHVlLiAKCShsYXlvdXRfdHlwZSk6IENhc3QgVFlQRV9BTElHTigpIHRvIGludCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IGEKCXNpZ25lZCB2YWx1ZS4KCgkqIHRyZWUuYyAoZ2V0X2lkZW50aWZpZXIpOiBDYXN0IHZhcmlhYmxlIGBsZW4nIHRvIHVuc2lnbmVkIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShtYXliZV9nZXRfaWRlbnRpZmllcik6IExpa2V3aXNlCgpXZWQgRGVjIDIzIDAwOjEwOjAxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogRG8gbm90IHNldCByZWxvYWRfY29tcGxldGVkLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFNldCByZWxvYWRfY29tcGxldGVkIGJlZm9yZSBjYWxsaW5nCgljbGVhbnVwX3N1YnJlZ19vcGVyYW5kcy4KClR1ZSBEZWMgMjIgMjM6NTg6MzEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBDaGVjayBgc2V0JyBub3QgbnVsbCBiZWZvcmUgdXNlLgoKVHVlIERlYyAyMiAxNToxNTo0NSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogcnRsYW5hbC5jIChtdWx0aXBsZV9zZXRzKTogQ2hhbmdlIHR5cGUgb2YgJ2ZvdW5kJyBmcm9tICdydHgnIHRvCgknaW50Jy4gCgpUdWUgRGVjIDIyIDEzOjU1OjQ0IDE5OTggIFRoZW9kb3JlIFBhcGFkb3BvdWxvIDxUaGVvZG9yZS5QYXBhZG9wb3Vsb0Bzb3BoaWEuaW5yaWEuZnI+CgoJKiBoYWxmcGljLmMgKGhhbGZfcGljX2VuY29kZSk6IERlbGV0ZSByZWR1bmRhbnQgY29kZS4KClR1ZSBEZWMgMjIgMTM6MDI6MjIgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAobWFpbik6IERlbGV0ZSBoYW5kbGluZyBvZiAtZE0gYXMgYSBwcmVwcm9jZXNzb3IKCW9wdGlvbi4KCk1vbiBEZWMgMjEgMTc6Mzk6MzggMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAobWFpbik6IERvbid0IGVtaXQgYW55IHdhcm5pbmdzIHdoZW4gdXNpbmcgLWRELCAtZE0sIG9yCgktZEksIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IuCgpTdW4gRGVjIDIwIDE2OjEzOjQ0IDE5OTggIEpvaG4gRi4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBIYW5kbGUgRGlnaXRhbCBVTklYIDUueCB0aGUgc2FtZSBhcyA0LnguCgkqIGkzODYvc29sMi5oOiBEZWZpbmUgTE9DQUxfTEFCRUxfUFJFRklYIGFzICIuIi4KClN1biBEZWMgMjAgMDc6Mzk6NTIgUFNUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgRGVjIDE5IDIyOjI0OjIyIFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IERlYyAxOSAyMTo0MTozMiBQU1QgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBEZWMgMTkgMDk6NTI6MjcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2VuYXR0ci5jIChmYXRhbCk6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCgkKCSogZ2VuYXR0cnRhYi5jIChmYXRhbCwgYXR0cl9wcmludGYsIGF0dHJfc3RyaW5nLCB3cml0ZV9hdHRyX3NldCwKIAl3cml0ZV91bml0X25hbWUsIHdyaXRlX2VsaWdpYmxlX2RlbGF5LCBleHBhbmRfdW5pdHMsCiAJbWFrZV9sZW5ndGhfYXR0cnMsIHdyaXRlX2F0dHJfY2FzZSwgZmluZF9hdHRyLAoJbWFrZV9pbnRlcm5hbF9hdHRyKTogTGlrZXdpc2UuCgkqIGdlbmNoZWNrLmMgKHRyZWVfY29kZXMpOiBMaWtld2lzZS4KCSogZ2VuY29kZXMuYyAoZmF0YWwpOiBMaWtld2lzZS4KCSogZ2VuY29uZmlnLmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbmVtaXQuYyAoZmF0YWwpOiBMaWtld2lzZS4KCSogZ2VuZXh0cmFjdC5jIChmYXRhbCwgd2Fsa19ydHgsIGNvcHlzdHIpOiBMaWtld2lzZS4KCSogZ2VuZmxhZ3MuYyAoZmF0YWwpOiBMaWtld2lzZS4KCSogZ2Vub3Bpbml0LmMgKGZhdGFsLCBvcHRhYnMsIGdlbl9pbnNuKTogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jIChmYXRhbCwgZXJyb3IsIHByZWRpY2F0ZXMpOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jIChmYXRhbCk6IExpa2V3aXNlLgoJKiBnZW5yZWNvZy5jIChmYXRhbCwgZGVjaXNpb24sIHByZWRfdGFibGUsIGFkZF90b19zZXF1ZW5jZSwKCXdyaXRlX3RyZWVfMSwgd3JpdGVfdHJlZSwgY2hhbmdlX3N0YXRlLCBjb3B5c3RyLCBpbmRlbnRzKTogTGlrZXdpc2UuCgpUaHUgRGVjIDE3IDE4OjIxOjQ5IDE5OTggIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSogY29uZmlndXJlLmluICh3aXRoLWZhc3QtZml4aW5jbHVkZXMpOiBGaXggd2hpdGVzcGFjZS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZml4aW5jbHVkZXMgKGNfYXNtLmgpOiBXcmFwIERpZ2l0YWwgVU5JWCBWNC4wQiBERUMgQyBzcGVjaWZpYwoJYXNtKCkgZXRjLiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gX19ERUNDLgoKVGh1IERlYyAxNyAxMzo1NzoyMyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogT25seSBlbWl0IGEgY2xvYmJlciBpZiB0aGUgdGFyZ2V0CglpcyBhIHBzZXVkbyByZWdpc3Rlci4KClRodSBEZWMgMTcgMTM6NTA6MjkgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGdjc2UuYzogSW5jbHVkZSBleHByLmggaW4gb3JkZXIgdG8gZ2V0IHRoZSBwcm90b3R5cGUgZm9yCglnZXRfY29uZGl0aW9uKCkgd2hpY2ggaXMgdXNlZCBpbiBkZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcygpLiAKClRodSBEZWMgMTcgMTU6NTg6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogaHdpbnQuaDogTmV3IGZpbGUgdG8gY29uc29saWRhdGUgSE9TVF9XSURFX0lOVCAoZXRjKSBtYWNyb3MuCgpUaHUgRGVjIDE3IDEyOjMxOjEyIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChJTlRFUk5BTF9DRkxBR1MpOiBBZGQgU0NIRURfQ0ZMQUdTLgoJKEFMTF9DRkxBR1MpOiBEZWxldGUgU0NIRURfQ0ZMQUdTLgoKMTk5OC0xMi0xNyAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTYwL2k5NjAubWQgKGV4dGVuZHFpaGkyKTogRml4IHR5cG8gKHVzYWdlICcsJyBpbnN0ZWFkIG9mCgknOycpLgoKMTk5OC0xMi0xNyAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBheG9uLmN5Z251cy5jb20+CgoJKiBpOTYwLm1kIChleHRlbmQqLCB6ZXJvX2V4dGVuZCopOiBEb24ndCBnZW5lcmF0ZSBydGwgdGhhdCBsb29rcwoJbGlrZSAoc3VicmVnOlNJIChyZWc6U0kgTikgMCksIGJlY2F1c2UgaXQncyB3cm9uZywgYW5kIGl0IGhpZGVzCglvcHRpbWl6YXRpb25zIGZyb20gdGhlIGNvbWJpbmVyLgoKVGh1IERlYyAxNyAwODoyNzowMyAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGNvbWJpbmVfZ2l2c191c2VkX2J5X290aGVyKTogRG9uJ3QgZGVwZW5kIG9uIG5fdGltZXNfc2V0LgoKV2VkIERlYyAxNiAxNzozMDozNSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEaXNhYmxlIG9wdGltaXplX3NpemUgaWYgYSBzcGVjaWZpYwoJb3B0aW1pemF0aW9uIGxldmVsIGlzIHJlcXVlc3RlZC4gIEFsd2F5cyBzZXQgb3B0aW1pemF0aW9uCglsZXZlbCB0byAyIGlmIC1PcyBpcyBzcGVjaWZpZWQuCgpXZWQgRGVjIDE2IDE2OjMzOjA0IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIG9iamMvbGFuZy1zcGVjcy5oOiBQYXNzIC1NRCwgLU1NRCBhbmQgLU1HIHRvIGNjMW9iaiBpZiBjb25maWd1cmVkIHdpdGgKCWNwcGxpYi4KCSogY3BwbGliLmMgKGNwcF9zdGFydF9yZWFkKTogSWYgaW5fZm5hbWUgaXMgbm90IGluaXRpYWxpemVkLCB0cnkgdG8KCWluaXRpYWxpemUgaXQgdXNpbmcgZm5hbWUuCgoxOTk4LTEyLTE2ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGRvX2luY2x1ZGUpOiBUcmVhdCAjaW5jbHVkZV9uZXh0IGluIHRoZQoJcHJpbWFyeSBzb3VyY2UgZmlsZSBhcyAjaW5jbHVkZSBwbHVzIHdhcm5pbmcuICBUcmVhdAoJI2luY2x1ZGVfbmV4dCBpbiBhIGZpbGUgaW5jbHVkZWQgYnkgYWJzb2x1dGUgcGF0aCBhcyBhbgoJZXJyb3IuICBmcCA9PSBDUFBfTlVMTF9CVUZGRVIgaXMgYSBmYXRhbCBpbmNvbnNpc3RlbmN5LgoKV2VkIERlYyAxNiAxMjoyODo1NCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjY2NwLmM6IERvbid0IGRlZmluZSBNSU4vTUFYIGFueW1vcmUuCgkqIGNwcGxpYi5jOiBMaWtld2lzZS4KCSogbWFjaG1vZGUuaDogTGlrZXdpc2UuCgkqIHN5c3RlbS5oOiBQcm92aWRlIGRlZmluaXRpb25zIGZvciBNSU4vTUFYLgoKVHVlIERlYyAxNSAyMzo0Nzo0MiAxOTk4ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PiAgCgoJKiBmaXgtaGVhZGVyLmM6IERvbid0IGRlZmluZSB4c3RyZHVwIGhlcmUuCgpXZWQgRGVjIDE2IDA1OjExOjA0IDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY29uc2VjX3NldHNfZ2l2KTogTmV3IGFyZ3VtZW50IGxhc3RfY29uc2VjX2luc24uCgkoc3RyZW5ndGhfcmVkdWNlKTogUHJvdmlkZSAvIHVzZSBpdC4KCldlZCBEZWMgMTYgMTc6MjQ6MDcgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5oIChsb29wX2luZm8pOiBOZXcgZmllbGQgJ3Z0b3AnLgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6ICBVc2UgbG9vcF9pbmZvLT52dG9wIHJhdGhlciB0aGFuCglzY2FubmluZyBsb29wIGZvciB2dG9wLgoJKiB1bnJvbGwuYyAoc3VidHJhY3RfcmVnX3Rlcm0sIGZpbmRfY29tbW9uX3JlZ190ZXJtKTogTmV3IGZ1bmN0aW9ucy4KCShsb29wX2l0ZXJhdGlvbnMpOiBVc2UgdGhlbSB0byBkZXRlcm1pbmUgaWYgbG9vcCBoYXMgYSBjb25zdGFudAogCW51bWJlciBvZiBpdGVyYXRpb25zLiAgU2V0IGxvb3BfaW5mby0+dnRvcC4gIERvbid0IHN1YnRyYWN0Cgljb21tb24gcmVnIHRlcm0gZnJvbSBpbml0aWFsX3ZhbHVlIGFuZCBmaW5hbF92YWx1ZSBpZiBoYXZlIGEKCWRvLXdoaWxlIGxvb3AuCgpUdWUgRGVjIDE1IDEzOjQ5OjU1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAyMDAubWQgKGFkZHNpMyBleHBhbmRlcik6IFVzZSAibm9ubWVtb3J5X29wZXJhbmQiIGZvciBvcGVyYW5kIDIuCgoJKiBtbjEwMzAwLm1kIChic2V0LCBiY2xyKTogT3BlcmFuZCAwIGlzIGEgcmVhZC93cml0ZSBvcGVyYW5kLgoKCSogbW4xMDIwMC5tZCAoYWJzc2YyLCBuZWdzZjIpOiBOZXcgZXhwYW5kZXJzLgoKCSogbW4xMDMwMC5tZCAoYWJzZGYyLCBhYnNzZjIsIG5lZ2RmMiwgbmVnc2YyKTogTmV3IGV4cGFuZGVycy4KClR1ZSBEZWMgMTUgMTE6NTU6MzAgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGludGVncmF0ZS5jIChjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IElmIGEgU1VCUkVHIGlzCglyZXBsYWNlZCBieSBhIENPTkNBVCB3aG9lcyBjb21wb25lbnRzIGRvIG5vdCBoYXZlIHRoZSBzYW1lCgltb2RlIGFzIHRoZSBvcmlnaW5hbCBTVUJSRUcsIHVzZSBhIG5ldyBTVUJSRUcgdG8gcmVzdG9yZSB0aGUKCW1vZGUuIAoKCSogZW1pdC1ydGwuYyAoc3VicmVnX3JlYWxwYXJ0X3ApOiBDb3BlIHdpdGggc3VicmVncyBjb250YWluaW5nCgltdWx0aXdvcmQgY29tcGxleCB2YWx1ZXMuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwYWxsb2MuYzogQWRkIHhzdHJkdXAgaGVyZS4KCSogY3BwbGliLmg6IFJlbW92ZSBzYXZlc3RyaW5nIHByb3RvdHlwZS4KCSogY3BwbGliLmM6IFJlbW92ZSBzYXZlc3RyaW5nIGZ1bmN0aW9uLiBzL3NhdmVzdHJpbmcveHN0cmR1cC8KCSAgdGhyb3VnaG91dC4gCgkqIGNwcGZpbGVzLmM6IHMvc2F2ZXN0cmluZy94c3RyZHVwLyB0aHJvdWdob3V0LgoKMTk5OC0xMi0xNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jOiBNYWtlIGFsbCBkaXJlY3RpdmUgaGFuZGxlcnMgcmVhZCB0aGVpciBvd24KICAgICAgICAgIGFyZ3VtZW50cy4KCSAgKHN0cnVjdCBkaXJlY3RpdmUpOiBSZW1vdmUgbGFzdCB0d28gYXJndW1lbnRzIGZyb20gRlVOQwogICAgICAgICAgbWVtYmVyIHByb3RvdHlwZS4gUmVtb3ZlIGBjb21tYW5kX3JlYWRzX2xpbmUnIG1lbWJlcgogICAgICAgICAgZW50aXJlbHkuCgkgIChkaXJlY3RpdmVfdGFibGUpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb25zIG9mCiAgICAgICAgICBjb21tYW5kX3JlYWRzX2xpbmUgZmxhZy4gIFByZXR0eS1wcmludC4KCSAgKGV2YWxfaWZfZXhwcmVzc2lvbiwgZG9fZGVmaW5lLCBkb19saW5lLCBkb19pbmNsdWRlLAogICAgICAgICAgZG9fdW5kZWYsIGRvX2Vycm9yLCBkb19wcmFnbWEsIGRvX2lkZW50LCBkb19pZiwgZG9feGlmZGVmLAogICAgICAgICAgZG9fZWxzZSwgZG9fZWxpZiwgZG9fc2NjcywgZG9fYXNzZXJ0LCBkb191bmFzc2VydCwKICAgICAgICAgIGRvX3dhcm5pbmcpOiBUYWtlIG9ubHkgdHdvIGFyZ3MuCgoJICAoY3BwX2RlZmluZSk6IENhbGwgZG9fZGVmaW5lIHdpdGggdHdvIGFyZ3MgYW5kIHRoZSB0ZXh0IHRvCgkgIGRlZmluZSBzdHVmZmVkIGludG8gYSBidWZmZXIuCgkgIChtYWtlX2Fzc2VydGlvbik6IENhbGwgZG9fYXNzZXJ0IHdpdGggdHdvIGFyZ3MuCgkgIChoYW5kbGVfZGlyZWN0aXZlKTogQ2FsbCBkb19saW5lIHdpdGggdHdvIGFyZ3MuIENhbGwKCSAga3QtPmZ1bmMgd2l0aCB0d28gYXJncy4gIFJlbW92ZSBjb21tYW5kX3JlYWRzX2xpbmUKCSAgcHJvY2Vzc2luZy4KCSAgKGRvX2RlZmluZSwgZG9fdW5kZWYsIGRvX2Vycm9yLCBkb193YXJuaW5nLCBkb19wcmFnbWEsCgkgIGRvX3NjY3MpOiBSZWFkIHRoZSByZXN0IG9mIHRoZSBsaW5lIGhlcmUuCgkgIChkb19pZGVudCk6IEdvYmJsZSByZXN0IG9mIGxpbmUsIGFzIGNjY3AgZG9lcy4KCSAgKGNwcF91bmRlZik6IE5ldyBmdW5jdGlvbi4KCSAgKGNwcF9zdGFydF9yZWFkKTogQ2FsbCBjcHBfdW5kZWYgaW5zdGVhZCBvZiBkb191bmRlZi4KCjE5OTgtMTItMTUgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBoYXNoLmggKHVuaW9uIGhhc2hfdmFsdWUpOiBSZW1vdmUgYGtleWRlZicgbWVtYmVyLCBhZGQgYQogICAgICAgICAgYHN0cnVjdCBoYXNobm9kZSAqYXNjaGFpbicgbWVtYmVyIGZvciAjYXNzZXJ0LiAgCgoJICAqIGNwcGxpYi5jIChzdHJ1Y3QgdG9rZW5saXN0X2xpc3QsIHN0cnVjdAogICAgICAgICAgYXNzZXJ0aW9uX2hhc2hub2RlKTogRGVsZXRlIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KICAgICAgICAgIChhc3NlcnRpb25faW5zdGFsbCwgYXNzZXJ0aW9uX2xvb2t1cCwgZGVsZXRlX2Fzc2VydGlvbiwKICAgICAgICAgIGNoZWNrX2Fzc2VydGlvbiwgY29tcGFyZV90b2tlbl9saXN0cywgcmV2ZXJzZV90b2tlbl9saXN0LAogICAgICAgICAgcmVhZF90b2tlbl9saXN0LCBmcmVlX3Rva2VuX2xpc3QpOiBEZWxldGUgZnVuY3Rpb25zLgogICAgICAgICAgKHBhcnNlX2Fzc2VydGlvbik6IE5ldyBmdW5jdGlvbi4gIAoJICAoY3BwX2NsZWFudXApOiBEb24ndCBkZXN0cm95IHRoZSBhc3NlcnRpb25faGFzaHRhYmxlLgoKICAgICAgICAgIChkb19hc3NlcnQpOiBHdXQgYW5kIHJld3JpdGUuICAjYXNzZXJ0IGZvbyAoYmFyKSBwbGFjZXMKICAgICAgICAgIGVudHJpZXMgZm9yIGAjZm9vJyBhbmQgYCNmb28oYmFyKScgaW4gdGhlIG1hY3JvIGhhc2ggdGFibGUsCiAgICAgICAgICB0eXBlIFRfQVNTRVJULiAgVGhlIHZhbHVlIHVuaW9uJ3MgYGFzY2hhaW4nIG1lbWJlciBpcyB1c2VkCiAgICAgICAgICB0byBjaGFpbiBhbGwgYW5zd2VycyBmb3IgYSBnaXZlbiBwcmVkaWNhdGUgdG9nZXRoZXIuCiAgICAgICAgICAoZG9fdW5hc3NlcnQpOiBBbHNvIHJld3JpdHRlbi4gIFRha2UgYW4gdW4tYXNzZXJ0ZWQKICAgICAgICAgIGFuc3dlciBvZmYgdGhlIGNoYWluIGZyb20gaXRzIHByZWRpY2F0ZSBhbmQgY2FsbAogICAgICAgICAgZGVsZXRlX21hY3JvIG9uIHRoZSBoYXNobm9kZSwgb3Igd2FsayBhIHByZWRpY2F0ZSBjaGFpbgogICAgICAgICAgY2FsbGluZyBkZWxldGVfbWFjcm8gb24gYWxsIHRoZSBlbnRyaWVzLgogICAgICAgICAgKGNwcF9yZWFkX2NoZWNrX2Fzc2VydGlvbik6IFNpbXBseSBjYWxsIHBhcnNlX2Fzc2VydGlvbiB0bwogICAgICAgICAgZ2V0IHRoZSBjYW5vbmljYWwgYXNzZXJ0aW9uIG5hbWUsIGFuZCBsb29rIHRoYXQgdXAgaW4gdGhlCiAgICAgICAgICBoYXNoIHRhYmxlLgoKCSogY3BwbGliLmggKEFTU0VSVElPTl9IQVNITk9ERSxBU1NFUlRJT05fSEFTSFNJWkUsYXNzZXJ0aW9uX2hhc2h0YWIpOgogCVJlbW92ZWQuCgoJKiBjcHBoYXNoLmMgKGluc3RhbGwpOiBVc2UgYmNvcHkgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBsb29wCiAgICAgICAgICB0byBjb3B5IHRoZSBtYWNybyBuYW1lLgoKCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBDb252ZXJ0IHRoZSByZXN1bHQgb2YKICAgICAgICAgIGNwcF9yZWFkX2NoZWNrX2Fzc2VydGlvbiB0byBhIGBzdHJ1Y3Qgb3BlcmF0aW9uJyBkaXJlY3RseTsKICAgICAgICAgIGRvbid0IGdvIHRocm91Z2ggcGFyc2VfbnVtYmVyLgoKVHVlIERlYyAxNSAxODoyNzozOSAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmggKHN0cnVjdCBpbmR1Y3Rpb24pOiBEZWxldGUgdGltZXNfdXNlZCBtZW1iZXIuCgkqIGxvb3AuYyAobl90aW1lc19zZXQpOiBSZW5hbWUgdG8gc2V0X2luX2xvb3AuICBDaGFuZ2VkIGFsbCB1c2Vycy4KCShuX3RpbWVzX3VzZWQpOiBSZW5hbWUgdG8gbl90aW1lc19zZXQuICBDaGFuZ2VkIGFsbCB1c2Vycy4KCShzY2FuX2xvb3ApOiBGcmVlIHJlZ19zaW5nbGVfdXNhZ2UgYmVmb3JlIHN0cmVuZ3RoIHJlZHVjdGlvbi4KCShyZWNvcmRfZ2l2LCBjb21iaW5lX2dpdnMpOiBSZW1vdmUgaGFuZGxpbmcgb2YgdGltZXNfdXNlZCBtZW1iZXIuCgkoY29tYmluZV9naXZzX3VzZWRfb25jZSk6IFJlbmFtZSB0bzoKCShjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcikgLiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KClR1ZSBEZWMgMTUgMDE6NDU6MjYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGdlbl9zdHJ1Y3Rfb3JfdW5pb25fdHlwZV9kaWUpOiBDaGVjayBBR0dSRUdBVEVfVFlQRV9QCglpbnN0ZWFkIG9mIFRSRUVfQ09ERV9DTEFTUyA9PSAndCcuCgkoZ2VuX3R5cGVfZGllKTogTGlrZXdpc2UuCgkoc2NvcGVfZGllX2Zvcik6IElnbm9yZSBGVU5DVElPTl9UWVBFICJzY29wZXMiLgoKTW9uIERlYyAxNCAxNjoyMzoyNyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWFsLmMgKGVuZGlhbik6IERpc2FibGUgbGFzdCBjaGFuZ2UgdW5sZXNzCglIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzIGdyZWF0ZXIgdGhhbiAzMi4KCk1vbiBEZWMgMTQgMTc6MTM6MzYgRVNUIDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIG91dHB1dC5oIChmb3JjZV9kYXRhX3NlY3Rpb24pOiBOZXcgcHJvdG90eXBlLgoJKiB2YXJhc20uYyAoZm9yY2VfZGF0YV9zZWN0aW9uKTogTmV3IGZ1bmN0aW9uIHRvIGZvcmNlIHRoZQoJZGF0YSBzZWN0aW9uLCByZWdhcmRsZXNzIG9mIHdoYXQgaW5fc2VjdGlvbiB0aGlua3MuCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogQ2FsbCBmb3JjZV9kYXRhX3NlY3Rpb24KCXNpbmNlIHZhcmFzbSBtYXkgbm90IHJlYWxpemUgd2UndmUgY2hhbmdlcyBzZWN0aW9ucy4KCk1vbiBEZWMgMTQgMTQ6MDk6MzQgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogRGVsZXRlIFJFR19SRVRWQUwgYW5kIFJFR19MSUJDQUxMIG5vdGVzCiAgICAgICAgICBhZnRlciBjb21wbGV0ZWluZyByZWxvYWQuCgoJKiBydGwudGV4aTogRG9jdW1lbnQgdGhhdCBSRUdfUkVUVkFMIGFuZCBSRUdfTElCQ0FMTCBhcmUKICAgICAgICAgIGRlbGV0ZWQgYWZ0ZXIgcmVsb2FkLgoKTW9uIERlYyAxNCAwMTozOToyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBydGwuaCAobXVsdGlwbGVfc2V0cyk6IEZpeCBwcm90b3R5cGUuCgkqIHJ0bGFuYWwuYyAobXVsdGlwbGVfc2V0cyk6IEZpeCByZXR1cm4gdHlwZS4KClN1biBEZWMgMTMgMTI6NDM6NTggUFNUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRGVjIDEzIDAxOjA1OjIyIFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKMTk5OC0xMi0xMyAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogcHJvdG9pemUuYyAoZnB1dHMpOiBXcmFwIGV4dGVybiBkZWNsYXJhdGlvbiBpbiAjaWZuZGVmIGZwdXRzLgoKU3VuIERlYyAxMyAwMDoyNDoxNCAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBydGwuaCAocmVjb21wdXRlX3JlZ191c2FnZSk6IEFkZCBzZWNvbmQgYXJndW1lbnQuCgkqIGZsb3cuYyAocmVjb21wdXRlX3JlZ191c2FnZSk6IExpa2V3aXNlLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFN1cHBseSBzZWNvbmQgYXJndW1lbnQgdG8KCXJlY29tcHV0ZV9yZWdfdXNhZ2UuCgoJKiByZWxvYWQxLmMgKGNvbXB1dGVfdXNlX2J5X3BzZXVkb3MpOiBBbGxvdyByZWdfcmVudW1iZXJbcmVnbm9dIDwgMAoJYWZ0ZXIgcmVsb2FkLgoKU2F0IERlYyAxMiAyMzozOToxMCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrL3QtbTY4a2VsZiAoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtY3B1MzIuCgkoTVVMVElMSUJfTUFUQ0hFUyk6IC1tNjgzMzIgbm93IHVzZXMgbWNwdTMyIGxpYnJhcmllcywgbm90IG02ODAwMC4KCShNVUxUSUxJQl9FWENFUFRJT05TKTogRG9uJ3QgYnVpbGQgNjg4ODEgbGlicmFyaWVzIGZvciBtNjgwMDAsCgltY3B1MzIgb3IgbTUyMDAuCgoJKiBpMzg2L25leHQuaCAoQVNNX09VVFBVVF9BTElHTik6IFVzZSAweDkwIGZvciBmaWxsIGNoYXJhY3Rlci4KCgkqIHJ0bGFuYWwuYyAobXVsdGlwbGVfc2V0cyk6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmggKG11bHRpcGxlX3NldHMpOiBEZWNsYXJlIGl0LgoJKiBsb2NhbC1hbGxvYy5jICh3aXBlX2RlYWRfcmVnKTogVXNlIGl0LgoJKiBnbG9iYWwuYyAoZ2xvYmFsX2NvbmZsaWN0cyk6IExpa2V3aXNlLgoKU2F0IERlYyAxMiAyMjoxMzowMiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZ2xvYmFsLmMgKHJlY29yZF9jb25mbGljdHMpOiBEb24ndCB1c2UgYW4gYXJyYXkgb2Ygc2hvcnRzIHRvCiAgICAgICAgc3RvcmUgYW4gYXJyYXkgb2YgaW50cy4KCShnbG9iYWxfY29uZmxpY3RzKTogTGlrZXdpc2UuCgpTYXQgRGVjIDEyIDE2OjQ5OjI0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9leHBhbmRfYmxvY2tfbW92ZSk6IG1vZGVfZm9yX3NpemUgZXhwZWN0cwoJYml0cywgbm90IGJ5dGVzLiAgSW5mZXIgZXh0cmEgYWxpZ25tZW50IGZyb20gYWRkcmVzc29mLgoKMTk5OC0xMi0xMSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAvc3lzdjQuaCAoQVNNX09VVFBVVF9BTElHTkVEX0xPQ0FMKTogUHV0IHNtYWxsIGRhdGEgaW4gdGhlCgkuc2JzcyBzZWN0aW9uLCBub3QgLnNkYXRhLgoKMTk5OC0xMi0xMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY2NjcC5jOiBEbyBub3QgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+IGhlcmU7IHRoaXMgaXMgYWxyZWFkeSBkb25lCglieSAic3lzdGVtLmgiLgoJKiBjb2xsZWN0Mi5jOiBMaWtld2lzZS4KCSogY3BwbGliLmg6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdjb3YuYzogTGlrZXdpc2UuCgkqIGdldHB3ZC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHRvcGxldi5jOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5oIChIT1NUX1dJREVfSU5UKTogR2V0IGRlZmluaXRpb24gZnJvbSAibWFjaG1vZGUuaCIKCWFuZCBkb24ndCB0cnkgdG8gZGVmaW5lIGl0IGhlcmUuCgkqIE1ha2VmaWxlLmluIChjcHBtYWluLm8pOiBEZXBlbmQgb24gbWFjaG1vZGUuaC4KCShjcHBsaWIubyk6IExpa2V3aXNlLgoJKGNwcGVycm9yLm8pOiBMaWtld2lzZS4KCShjcHBleHAubyk6IExpa2V3aXNlLgoJKGNwcGZpbGVzLm8pOiBMaWtld2lzZS4KCShjcHBoYXNoLm8pOiBMaWtld2lzZS4KCShjcHBhbGxvYy5vKTogTGlrZXdpc2UuCgkoZml4LWhlYWRlci5vKTogTGlrZXdpc2UuCgkoc2Nhbi1kZWNscy5vKTogTGlrZXdpc2UuCgpGcmkgRGVjIDExIDExOjAyOjQ5IDE5OTggIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogc2guYyAocHJpbnRfb3BlcmFuZCk6IGxvb2t1cCBpbnRlcnJ1cHRfaGFuZGxlciBhdHRyaWJ1dGUgaW5zdGVhZAoJb2YgcmVseWluZyBvbiBzdGF0aWMgdmFyaWFibGUuIAoJKiAoY2FsY19saXZlX3JlZ3MpOiBMaWtld2lzZS4KCSogKHNoX3ByYWdtYV9pbnNlcnRfYXR0cmlidXRlcyk6IENyZWF0ZSBpbnRlcnJ1cHRfaGFuZGxlcgoJYXR0cmlidXRlIGlmIGEgcHJhZ21hIHdhcyBzcGVjaWZpZWQKCSogKHNoX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBEb24ndCBzZXQgc3RhdGljIGZsYWcuCgkqIHNoLmggKFBSQUdNQV9JTlNFUlRfQVRUUklCVVRFUyk6IE5ldy4KCkZyaSBEZWMgMTEgMTI6NTY6MDcgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY29tYmluZSk6IFVzZSBCQVNJQ19CTE9DS19MSVZFX0FUX1NUQVJUCgl0byBkZXRlcm1pbmUgaWYgYSByZWdpc3RlciBpcyBsaXZlIGF0IGEganVtcCBkZXN0aW5hdGlvbi4KCUV2ZXJ5dGhpbmcgaXMgZGVhZCBhdCBhIEJBUlJJRVIuCgpUaHUgRGVjIDEwIDE2OjAyOjA2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChzaW1wbGlmeV91bmFyeV9vcGVyYXRpb24pOiBTaWduLWV4dGVuZCBjb25zdGFudHMgd2hlbgoJdGhleSBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgZm9yIHRoZSB0YXJnZXQuCgkqIHJlYWwuYyAoZW5kaWFuKTogU2lnbi1leHRlbmQgMzIgYml0IG91dHB1dCB2YWx1ZXMgb24gYSA2NCBiaXQKCWhvc3QuCgkqIG0zMnIvbTMyci5jIChtMzJyX2V4cGFuZF9wcm9sb2d1ZSk6IFN0b3JlIHByZXRlbmRfc2l6ZSBpbgoJSE9TVF9XSURFX0lOVCB0ZW1wb3JhcnkgYmVmb3JlIG5lZ2F0aW5nIGl0LgoJKiBtMzJyL20zMnIubWQgKG1vdnNpX2luc24rMSk6IFVzZSB+MHhmZmZmIGluc3RlYWQgb2YgMHhmZmZmMDAwMC4KClRodSBEZWMgMTAgMTU6MDU6NTkgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogb2JqYy9vYmpjLWFjdC5jIChsYW5nX2luaXRfb3B0aW9ucyk6IEVuY2xvc2UgY3BwbGliIHJlbGF0ZWQgY29kZSBpbgoJI2lmIFVTRV9DUFBMSUIuCgpUaHUgRGVjIDEwIDEzOjM5OjQ2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbGxlY3QyLmg6IE5ldyBoZWFkZXIgZmlsZSBmb3IgcHJvdG90eXBlcy4KCgkqIE1ha2VmaWxlLmluIChjb2xsZWN0Mi5vLCB0bGluay5vKTogRGVwZW5kIG9uIGNvbGxlY3QyLmguCgoJKiBjb2xsZWN0Mi5jOiBJbmNsdWRlIGNvbGxlY3QyLmguCgkqIHRsaW5rLmM6IExpa2V3aXNlLgoKV2VkIERlYyAgOSAyMzo1NToxMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmM6IFVwZGF0ZSBzb21lIGNvbW1lbnRzLgoKV2VkIERlYyAgOSAxNToyOToyNiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBvYmpjL29iamMtYWN0LmMgKGNwcF9pbml0aWFsaXplZCk6IFJlbW92ZWQuCgkobGFuZ19pbml0X29wdGlvbnMpOiBJbml0aWFsaXplIGNwcGxpYi4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBNb3ZlIGluaXRpYWxpemF0aW9uIG9mIGNwcGxpYiB0bwoJbGFuZ19pbml0X29wdGlvbnMuCgkqIGMtbGFuZy5jOiAocGFyc2Vfb3B0aW9ucyxwYXJzZV9pbik6IEFkZGVkLgoJKGxhbmdfaW5pdF9vcHRpb25zKTogSW5pdGlhbGl6ZWQgY3BwbGliIGhlcmUuCgkqIGMtZGVjbC5jIChwYXJzZV9vcHRpb25zLGNwcF9pbml0aWFsaXplZCk6IFJlbW92ZWQuCgkoY19kZWNvZGVfb3B0aW9uKTogTW92ZSBpbml0aWFsaXphdGlvbiBvZiBjcHBsaWIgdG8KCWxhbmdfaW5pdF9vcHRpb25zLgoKV2VkIERlYyAgOSAxOTozNjo1NyAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lLCByZWxvYWRfY29tYmluZV9ub3RlX3N0b3JlKToKCU1ha2UgU1RPUkVfUlVJRCBhbHdheXMgdmFsaWQuCgkocmVsb2FkX2NvbWJpbmUpOiBDaGVjayBpZiBCQVNFIGlzIGNsb2JiZXJlZCB0b28gZWFybHkuCgpXZWQgRGVjICA5IDA5OjUzOjU4IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRGlzcGxheSB0aGUgaW5zbiB0aGF0IGNhbm5vdCBiZQoJcmVsb2FkZWQuIAoKV2VkIERlYyAgOSAxMjoxNToyNiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjY2NwLmMgKGNyZWF0ZV9kZWZpbml0aW9uKTogRml4IGVuZCBvZiBidWZlciBsb2dpYy4KCldlZCBEZWMgIDkgMTA6MTU6NDUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXhjZXB0LmMgKGR1cGxpY2F0ZV9laF9oYW5kbGVycywgcmV0aHJvd19zeW1ib2xfbWFwKTogRnVuY3Rpb24KCXBvaW50ZXIgcGFyYW1ldGVycyBjaGFuZ2VkIHRvIHVzZSB0aGUgUEFSQU1TKCkgbWFjcm8uCgpXZWQgRGVjICA5IDA5OjEyOjQwIEVTVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHQuaCAoc3RydWN0IGhhbmRsZXJfaW5mbyk6IEFkZCBoYW5kbGVyX251bWJlciBmaWVsZC4KCSogZXhjZXB0LmMgKGdlbl9leGNlcHRpb25fbGFiZWwpOiBFSCBsYWJlbHMgbm8gbG9uZ2VyIG5lZWQgdG8gYmUKCW9uIHRoZSBwZXJtYW5lbnQgb2JzdGFjay4KCShnZXRfbmV3X2hhbmRsZXIpOiBTZXQgdGhlIGxhYmVsIG51bWJlciBmaWVsZC4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogUmVnZW5lcmF0ZSBoYW5kbGVyIGxhYmVsIHJlZmVyZW5jZSAKCWZyb20gdGhlIGxhYmVsIG51bWJlciBmaWVsZC4KCShpbml0X2VoKTogUmVtb3ZlIGEgYmxhbmsgbGluZS4KCSogaW50ZWdyYXRlLmMgKGdldF9sYWJlbF9mcm9tX21hcCk6IExhYmVscyBubyBsb25nZXIgbmVlZCB0byBiZQoJb24gdGhlIHBlcm1hbmVudCBvYnN0YWNrLgoKVHVlIERlYyAgOCAyMjowNDozMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpOTYwL2k5NjAuaCAoQ09OU1RfQ09TVFMsIGNhc2UgQ09OU1RfSU5UKTogQWNjZXB0IHBvd2VyMl9vcGVyYW5kCglvbmx5IHdoZW4gT1VURVJfQ09ERSBpcyBTRVQuCgpUdWUgRGVjICA4IDIyOjQ3OjE1IDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogSWYgc2Nhbl9zdGFydCBwb2ludHMgdG8gdGhlIGxvb3AgZXhpdAoJdGVzdCwgYmUgd2FyeSBvZiBzdWJ2ZXJzaXZlIHVzZSBvZiBnb3RvcyBpbnNpZGUgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzLgoJRG9uJ3Qgc2V0IG1heWJlX211bHRpcGxlIGZvciBhIGJhY2t3YXJkIGp1bXAgdGhhdCBkb2VzIG5vdAoJaW5jbHVkZSB0aGUgbGFiZWwgdW5kZXIgY29uc2lkZXJhdGlvbiBpbnRvIGl0cyByYW5nZS4KCSogdW5yb2xsLmMgKGJpdl90b3RhbF9pbmNyZW1lbnQpOiBNYWtlIHVzZSBvZiBtYXliZV9tdWx0aXBsZSBmaWVsZC4KClR1ZSBEZWMgIDggMjI6MzM6MTggMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZXhwbG93LmMgKHBsdXNfY29uc3RhbnRfd2lkZSk6IERvbid0IGltbWVkaWF0ZWx5IHJldHVybiB3aXRoCglyZXN1bHQgb2YgcmVjdXJzaXZlIGNhbGwuCgpUdWUgRGVjICA4IDE1OjMyOjU2IEVTVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBlaC1jb21tb24uaCAoc3RydWN0IGVoX2NvbnRleHQpOiBBZGQgdGFibGVfaW5kZXggZm9yIHJldGhyb3dzLgoKCSogcnRsLmggKGVudW0gcmVnX25vdGUpOiBBZGQgUkVHX0VIX1JFR0lPTiBhbmQgUkVHX0VIX1JFVEhST1cgcmVnIG5vdGVzLgoJKFNZTUJPTF9SRUZfTkVFRF9BREpVU1QpOiBOZXcgZmxhZyBpbmRpY2F0aW5nIHN5bWJvbCBuZWVkcyB0byBiZQoJcHJvY2Vzc2VkIHdoZW4gaW5saW5lZCBvciB1bnJvbGxlZCAoaWUgZHVwbGljYXRlZCBpbiBzb21lIHdheSkuCgoJKiBydGwuYyAocmVnX25vdGVfbmFtZSk6IEFkZCBzdHJpbmdzIGZvciBuZXcgcmVnX25vdGUgZW51bXMuCgoJKiBleHByLmggKHJldGhyb3dfbGliZnVuYyk6IE5ldyBsaWJyYXJ5IGRlY2wuCgoJKiBvcHRhYnMuYyAocmV0aHJvd19saWJmdW5jKTogSW5pdGlhbGl6ZS4KCgkqIGV4Y2VwdC5oIChzdHJ1Y3QgZWhfZW50cnkpOiBBZGQgbmV3IGZpZWxkICdyZXRocm93X2xhYmVsJy4KCShuZXdfZWhfcmVnaW9uX2VudHJ5KTogTm8gbG9uZ2VyIGV4cG9ydGVkIGZyb20gZXhjZXB0LmMuCgkoZHVwbGljYXRlX2hhbmRsZXJzKTogUmVuYW1lZCB0byBkdXBsaWNhdGVfZWhfaGFuZGxlcnMgYW5kIAoJZGlmZmVyZW50IHByb3RvdHlwZS4KCShyZXRocm93X3N5bWJvbF9tYXAsIHJldGhyb3dfdXNlZCk6IE5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCgkoZWhfcmVnaW9uX2Zyb21fc3ltYm9sKTogTmV3IGV4cG9ydGVkIGZ1bmN0aW9uLgoKCSogZXhjZXB0LmMgKGNyZWF0ZV9yZXRocm93X3JlZik6IE5ldyBmdW5jdGlvbiB0byBjcmVhdGUgYSBzaW5nbGUKCVNZTUJPTF9SRUYgZm9yIGEgcmV0aHJvdyByZWdpb24uICAKCShwdXNoX2VoX2VudHJ5KTogSW5pdGlhbGl6ZSBhIHJldGhyb3cgcmVmLgoJKGZ1bmNfZWhfZW50cnkpOiBBZGQgYSByZXRocm93X2xhYmVsIGZpZWxkLgoJKG5ld19laF9yZWdpb25fZW50cnkpOiBNYWtlIHN0YXRpYywgYW5kIGluaXRpYWxpemUgdGhlIHJldGhyb3cgZW50cnkuCgkoZHVwbGljYXRlX2VoX2hhbmRsZXJzKTogQ3JlYXRlIGEgbmV3IHJlZ2lvbiwgYW5kIHJlbWFwIGxhYmVscy9zeW1ib2xzLgoJKGVoX3JlZ2lvbl9mcm9tX3N5bWJvbCk6IEZpbmQgYW4gRUggcmVnaW9uIGJhc2VkIG9uIGl0cyByZXRocm93IHN5bWJvbC4KCShyZXRocm93X3N5bWJvbF9tYXApOiBHaXZlbiBhIGxhYmVsIG1hcCwgbWFwcyBhIHJldGhyb3cgc3ltYm9sIGZvciAKCWEgcmVnaW9uIGludG8gYW4gYXBwcm9wcmlhdGUgbmV3IHN5bWJvbC4KCShyZXRocm93X3VzZWQpOiBJbmRpY2F0ZSB3aGV0aGVyIGEgcmV0aHJvdyBzeW1ib2wgaGFzIGJlZW4gcmVmZXJlbmNlZC4KCShleHBhbmRfZWhfcmVnaW9uX2VuZCk6IERvbid0IGlzc3VlIGp1bXAgYXJvdW5kIGNvZGUgZm9yIG5ldy1leGNlcHRpb25zLgoJKGVuZF9jYXRjaF9oYW5kbGVyKTogRW1pdCBhIGJhcnJpZXIgZm9yIG5ldy1leGNlcHRpb25zIHNpbmNlIAoJY29udHJvbCBjYW4gbmV2ZXIgZHJvcCB0aHJvdWdoIHRoZSBlbmQgb2YgYSBjYXRjaCBibG9jay4KCShleHBhbmRfZW5kX2FsbF9jYXRjaCk6IG5ldy1leGNlcHRpb25zIG5ldmVyIGZhbGwgdGhyb3VnaCBhIGNhdGNoIAoJYmxvY2suCgkoZXhwYW5kX3JldGhyb3cpOiB1c2UgX19yZXRocm93IHJvdXRpbmUgZm9yIG5ldyBleGNlcHRpb25zLgoJKG91dHB1dF9leGNlcHRpb25fdGFibGVfZW50cnkpOiBHZW5lcmF0ZSByZXRocm93IGxhYmVscywgaWYgbmVlZGVkLgoJKG91dHB1dF9leGNlcHRpb25fdGFibGUpOiBHZW5lcmF0ZSBzdGFydCBhbmQgZW5kIHJldGhyb3cgbGFiZWxzLgoJKGluaXRfZWgpOiBDcmVhdGUgcmV0aHJvdyBzeW1ib2xzIGZvciBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0YWJsZS4KCShzY2FuX3JlZ2lvbik6IERvbid0IGVsaW1pbmF0ZSBFSCByZWdpb25zIHdoaWNoIGFyZSB0aGUgdGFyZ2V0cyBvZgoJcmV0aHJvd3MuCgoJKiBmbG93LmMgKG1ha2VfZWRnZXMpOiBBZGQgZGlmZmVyZW50IGVkZ2VzIGZvciByZXRocm93IGNhbGxzLCAKCWlkZW50aWZpZWQgYnkgaGF2aW5nIHRoZSBSRUdfRUhfUkVUSFJPVyByZWcgbGFiZWwuCgkoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IERvbid0IGRlbGV0ZSByZWdpb25zIG1hcmtlcnMgd2hpY2ggYXJlIAoJdGhlIHRhcmdldCBvZiBhIHJldGhyb3cuCgoJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lX2VoX2xhYmVsbWFwKTogTmV3IGNhbGxiYWNrIHJvdXRpbmUgdG8gCglhbGxvdyBzYXZlX2Zvcl9pbmxpbmVfY29weWluZyB0byBjYWxsIGR1cGxpY2F0ZV9laF9oYW5kbGVycy4KCShzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6IENhbGwgZHVwbGljYXRlX2VoX2hhbmRsZXJzIGluc3RlYWQgb2YKCWV4cG9zaW5nIGludGVybmFsIGRldGFpbHMgb2YgZXhjZXB0aW9uIHJlZ2lvbnMuCgkoY29weV9mb3JfaW5saW5lKTogQ2hlY2sgaWYgU1lNQk9MX1JFRnMgbmVlZCBhZGp1c3RtZW50LgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb25fZWhfbGFiZWxtYXApOiAgTmV3IGNhbGxiYWNrIHJvdXRpbmUgdG8gCglhbGxvdyBleHBhbmRfaW5saW5lX2Z1bmN0aW9uIHRvIGNhbGwgZHVwbGljYXRlX2VoX2hhbmRsZXJzLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIGR1cGxpY2F0ZV9laF9oYW5kbGVycyBpbnN0ZWFkIG9mCglleHBvc2luZyBpbnRlcm5hbCBkZXRhaWxzIG9mIGV4Y2VwdGlvbiByZWdpb25zLgoJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogQWRqdXN0IFNZTUJPTF9SRUZTIGlmIFNZTUJPTF9SRUZfTkVFRF9BREpVU1QKCWZsYWcgaXMgc2V0LgoKCSogbGliZ2NjMi5jIChmaW5kX2V4Y2VwdGlvbl9oYW5kbGVyKTogR2VuZXJhbGl6ZSB0byBlbmFibGUgaXQgdG8KCXBpY2sgdXAgcHJvY2Vzc2luZyB3aGVyZSBpdCBsZWZ0IG9mZiBsYXN0IHRpbWUgZm9yIGEgcmV0aHJvdy4KCShfX3Vud2luZGluZ19jbGVhbnVwKTogTmV3IGZ1bmN0aW9uLiBkZWJ1ZyBob29rIHdoaWNoIGlzIGNhbGxlZCBiZWZvcmUKCXVud2luZGluZyB3aGVuIF9fdGhyb3cgZmluZHMgdGhlcmUgaXMgbm90aGluZyBidXQgY2xlYW51cHMgbGVmdC4KCSh0aHJvd19oZWxwZXIpOiBDb21tb24gcGFydHMgb2YgX190aHJvdyBleHRyYWN0ZWQgb3V0IGZvciByZXVzZS4KCShfX3Rocm93KTogQ29tbW9uIHBhcnRzIG1vdmVkIHRvIHRocm93X2hlbHBlci4KCShfX3JldGhyb3cpOiBOZXcgZnVuY3Rpb24gZm9yIHBlcmZvcm1pbmcgcmV0aHJvd3MuCgpUdWUgRGVjICA4IDEzOjExOjA0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTogVHdlYWsgZGVjbGFyYXRpb24uCgpUdWUgRGVjICA4IDEwOjIzOjUyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjLWRlY2wuYyAoZmxhZ19pc29jOXgpOiBEZWZhdWx0IG9mZi4KCShjX2RlY29kZV9vcHRpb24pOiBLaWxsIC1zdGQ9Z251LCBhZGQgLXN0ZD1nbnU4OSBhbmQgLXN0ZD1nbnU5eC4KCSogY2NjcC5jIChwcmludF9oZWxwLCBtYWluKTogTGlrZXdpc2UuCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFVwZGF0ZSBmb3IgLXN0ZD1nbnUqLgoKVHVlIERlYyAgOCAwMToxNDo0NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoREVNQU5HTEVfSCk6IENoYW5nZSBsb2NhdGlvbiB0byBzaGFyZWQgZGVtYW5nbGUuaC4KCSogZGVtYW5nbGUuaDogRGVsZXRlZC4KCgkqIHJlbG9hZDEuYyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTogRGVjbGFyZS4KClR1ZSBEZWMgIDggMTE6NTg6NTEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BwbGliLmMgKGNvbnZlcnRfc3RyaW5nKTogVXNlIGAweDAwZmYnLCBub3QgYDB4MDBmZlUnLgoKVHVlIERlYyAgOCAwOToyODozNiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBkYnhvdXQuYzogSWYgVVNHIGlzIGRlZmluZWQgdXNlIGdzdGFiLmgsIGV2ZW4gaWYgSEFWRV9TVEFCX0ggaXMgc2V0LgoKMTk5OC0xMi0wOCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFRlc3QgZm9yIGF2YWlsYWJpbGl0eSBvZiBwdXRjX3VubG9ja2VkLCBmcHV0Y191bmxvY2tlZCwKCWFuZCBmcHV0c191bmxvY2tlZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBzeXN0ZW0uaDogSWYgdGhlICpfdW5sb2NrZWQgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdXNlIHRoZW0KCWluc3RlYWQgb2YgdGhlIGxvY2tlZCBjb3VudGVycGFydHMgYnkgZGVmaW5pbmcgbWFjcm9zLgoJKiBjb25maWcuaW46IFJlZ2VuZXJhdGVkLgoKVHVlIERlYyAgOCAwMDozNDowNSAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBpMzg2L2JzZC5oIChBU01fRklMRV9TVEFSVCk6IERvbid0IHVzZSBkdW1wX2Jhc2VfbmFtZSwgaXQgaXMKCXdyb25nIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkdW1wIHJlbGF0ZWQgdGhpbmdzLCBub3QKCWRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgaW5zdGVhZCBtYWluX2lucHV0X2ZpbGVuYW1lIHNob3VsZCBiZSB1c2VkLgoJQWxzbywgcmV1c2Ugb3V0cHV0X2ZpbGVfZGlyZWN0aXZlIGlmIHBvc3NpYmxlLgoJKiBpMzg2L2FpeDM4Nm5nLmggKEFTTV9GSUxFX1NUQVJUKTogTGlrZXdpc2UuCgkqIGkzODYvaXNjLmggKEFTTV9GSUxFX1NUQVJUKTogTGlrZXdpc2UuCgkqIGkzODYvd2luLW50LmggKEFTTV9GSUxFX1NUQVJUKTogTGlrZXdpc2UuCgkqIGkzODYvc3VuMzg2LmggKEFTTV9GSUxFX1NUQVJUKTogTGlrZXdpc2UuCgpNb24gRGVjICA3IDIzOjU2OjI4IDE5OTggICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWd1cmUuaW4gKG1pcHMqLSotbGludXgqKTogSGFuZGxlIGJpZyBhbmQgbGl0dGxlIGVuZGlhbgoJc3lzdGVtcy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIERlYyAgNyAyMzoxNDo1MSAxOTk4ICBNaWtlIFN0dW1wIDxtcnNAd3JzLmNvbT4KCgkqIGVtaXQtcnRsLmM6IEZpeCB0eXBvLgoKTW9uIERlYyAgNyAyMzowNzozOCAxOTk4ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IERvbid0IGRvIGFueXRoaW5nLCBpZiB3ZSdyZSBub3QKCWdlbmVyYXRpbmcgY29kZS4KCk1vbiBEZWMgIDcgMTU6Mjc6MDkgMTk5OCAgREogRGVsb3JpZSAgPGRqQGN5Z251cy5jb20+CgoJKiBtaXBzL21pcHMuaCAoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IEhhbmRsZSBUQVJHRVRfRU1CRURERURfREFUQS4KCUFkZCBjb21tZW50LgoJKiBtaXBzL21pcHMuYyAobWlwc19zZWxlY3Rfc2VjdGlvbik6IEFkZCBjb21tZW50LgoKTW9uIERlYyAgNyAxNzo1NTowNiAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBjY2NwLmMgKGlnbm9yZV9lc2NhcGVfZmxhZyk6IEFkZCBzdXBwb3J0IGZvciBcIGFzIGBuYXR1cmFsJwoJY2hhcmFjdGVycyBpbiBmaWxlIG5hbWVzIGluICNsaW5lIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCAjaW5jbHVkZQoJaGFuZGxpbmcuICBXZSBzdXBwb3J0IGVzY2FwZSBwcmNlc3NpbmcgaW4gdGhlICMgMSAiLi4uIiB2ZXJzaW9uIG9mCgl0aGUgY29tbWFuZC4gIFNlZSBhbHNvIHN1cHBvcnQgaW4gY3AvbGV4LmMuCgkoaGFuZGxlX2RpcmVjdGl2ZSk6IExpa2V3aXNlLgoJKGRvX2xpbmUpOiBMaWtld2lzZS4KCQoxOTk4LTEyLTA3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBVc2UgSVNBTFBIQSBhbmQgSVNBTE5VTQogICAgICAgICAgc28gaXQnbGwgd29yayBvbiBub24tQVNDSUkgcGxhdGZvcm1zLiAgQWx3YXlzIGNvbnNpZGVyICQgYW4KICAgICAgICAgIGlkZW50aWZpZXIgY2hhcmFjdGVyLiAgVGFrZSBubyBhcmd1bWVudHMuCgkgIChjcHBfcmVhZGVyX2luaXQpOiBDYWxsIGluaXRpYWxpemVfY2hhcl9zeW50YXggd2l0aCBubwogICAgICAgICAgYXJndW1lbnRzLgoJICAoY3BwX3N0YXJ0X3JlYWQpOiBEb24ndCBjYWxsIGluaXRpYWxpemVfY2hhcl9zeW50YXggYWdhaW4uCiAgICAgICAgICBDbGVhciBpc19pZGNoYXJbJyQnXSBhbmQgaXNfaWRzdGFydFsnJCddIGlmIG5vdAogICAgICAgICAgb3B0cy0+ZG9sbGFyc19pbl9pZGVudC4KCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX3JlYWRlcik6IFJlcGxhY2Ugdm9pZCAqZGF0YSBlbGVtZW50IGJ5CiAgICAgICAgICBjcHBfb3B0aW9ucyAqb3B0cy4gIFJlYXJyYW5nZSBlbGVtZW50cyB0byBtYWtlIGdkYiBwcmludG91dAogICAgICAgICAgbGVzcyBhbm5veWluZyAocHV0IGJ1ZmZlciBzdGFjayBhdCBlbmQpLgoJICAoQ1BQX09QVElPTlMpOiBHZXQgcmlkIG9mIG5vdy11bm5lY2Vzc2FyeSBjYXN0LgoKCSogY3BwbWFpbi5jOiBzL2RhdGEvb3B0cy8gd2hlbiBpbml0aWFsaXppbmcgY3BwX3JlYWRlcgogICAgICAgICAgc3RydWN0dXJlLgoJKiBjLWRlY2wuYzogTGlrZXdpc2UuCgkqIG9iamMvb2JqYy1hY3QuYzogTGlrZXdpc2UuCgkqIGZpeC1oZWFkZXIuYzogTGlrZXdpc2UuCgoxOTk4LTEyLTA3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmggKHN0cnVjdCBjcHBfYnVmZmVyKTogUmVwbGFjZSBkaXIgYW5kIGRsZW4gbWVtYmVycwoJd2l0aCBhIHN0cnVjdCBmaWxlX25hbWVfbGlzdCBwb2ludGVyLgoJKHN0cnVjdCBjcHBfcmVhZGVyKTogQWRkIHBvaW50ZXIgdG8gY2hhaW4gb2YgYGFjdHVhbAoJZGlyZWN0b3J5JyBpbmNsdWRlIHNlYXJjaHBhdGggZW50cmllcy4KCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBBZGQgKmFsbG9jIHBvaW50ZXIgZm9yIHRoZSBzYWtlIG9mCgl0aGUgYWN0dWFsLWRpcmVjdG9yeSBjaGFpbi4KCglNb3ZlIGRlZmluaXRpb24gb2YgSE9TVF9XSURFX0lOVCBoZXJlLgoJKGNwcF9wYXJzZV9lc2NhcGUpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4KCWNwcGV4cC5jLgoKCSogY3BwZmlsZXMuYyAoYWN0dWFsX2RpcmVjdG9yeSk6IE5ldyBmdW5jdGlvbi4KCShmaW5jbHVkZSk6IFVzZSBpdCB0byBpbml0aWFsaXplIHRoZSBidWZmZXIncyBhY3R1YWxfZGlyCgllbnRyeS4KCShmaW5kX2luY2x1ZGVfZmlsZSk6IFdlIGRvbid0IG5lZWQgdG8gZml4IHVwIG1heF9pbmNsdWRlX2xlbgoJaGVyZS4KCgkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogRG9uJ3QgYWxsb2NhdGUgYSBmaWxlX25hbWVfbGlzdCBvbgoJdGhlIGZseSBmb3IgY3VycmVudCBkaXJlY3RvcnkgIiIgaW5jbHVkZXMsIHVzZSB0aGUgb25lIHRoYXQncwoJYmVlbiBwcmVhbGxvY2F0ZWQgaW4gcGZpbGUtPmJ1ZmZlci0+YWN0dWFsX2Rpci4gIEhvaXN0IG91dAoJZHVwbGljYXRlIGNvZGUgZnJvbSB0aGUgc2VhcmNoX3N0YXJ0IHNlbGVjdGlvbiBsb2dpYy4KCShjcHBfcmVhZGVyX2luaXQpOiBJbml0aWFsaXplIHBmaWxlLT5hY3R1YWxfZGlycy4KCglSZW1vdmUgZGVmaW5pdGlvbiBvZiBIT1NUX1dJREVfSU5ULiAgQ2hhbmdlIGNhbGxzCgl0byBjcHBfcGFyc2VfZXNjYXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4gY3BwZXhwLmMgKG5vdGUKCWhhcmRjb2RlZCBNQVNLLCB3aGljaCBpcyBzYWZlIHNpbmNlIHRoaXMgaXMgdGhlIHNvdXJjZQoJY2hhcmFjdGVyIHNldCkuCgoJKiBjcHBleHAuYzogQnJpbmcgb3ZlciBjaGFuZ2VzIHRvIGNwcF9wYXJzZV9lc2NhcGUgZnJvbSBjY2NwLmMKCXRvIGhhbmRsZSB3aWRlIGNoYXJhY3RlciBjb25zdGFudHMgaW4gI2lmIGRpcmVjdGl2ZXMuICBUaGUKCWZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgSE9TVF9XSURFX0lOVCwgYW5kIHRha2VzIGEgdGhpcmQKCWFyZ3VtZW50IHdoaWNoIGlzIGEgYmluYXJ5IG1hc2sgZm9yIGFsbCBsZWdhbCB2YWx1ZXMgKDB4MDBmZgoJZm9yIDgtYml0IGBjaGFyJywgMHhmZmZmIGZvciAxNi1iaXQgYHdjaGFyX3QnLCBldGMuKSAgRGVmaW5lCglNQVhfQ0hBUl9UWVBFX01BU0sgYW5kIE1BWF9XQ0hBUl9UWVBFX01BU0suICBDaGFuZ2UgY2FsbGVycyBvZgoJY3BwX3BhcnNlX2VzY2FwZSB0byBtYXRjaC4gIFtGaXhlcyBjLXRvcnR1cmUvZXhlY3V0ZS93aWRlY2hhci0xLmNdCgpNb24gRGVjICA3IDE1OjM4OjI1IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEZpeCB0eXBvIGluIFVTRV9DUFBMSUIgc3BlYyBmb3IgY2MxLgoKTW9uIERlYyAgNyAxNTozODoyNSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgogICAgICAgICogYy1hdXgtaW5mby5jIChjb25jYXQpOiBXcmFwIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gIVVTRV9DUFBMSUIuCiAgICAgICAgKiBjcHBhbGxvYy5jOiBNb3ZlIGZ1bmN0aW9uIGB4Y2FsbG9jJyBmcm9tIGNwcGxpYi5jIHRvIGhlcmUuCiAgICAgICAgKiBjcHBsaWIuYzogTW92ZSBmdW5jdGlvbiBgeGNhbGxvYycgZnJvbSBoZXJlIHRvIGNwcGFsbG9jLmMuCgpNb24gRGVjICA3IDExOjMwOjQ5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBmaW5hbC5jIChvdXRwdXRfYXNtX25hbWUpOiBVc2UgdGFicyB0byBzZXBlcmF0ZSBjb21tZW50cyBmcm9tCglhc3NlbWJseSB0ZXh0LgoJCglJbmNsdWRlIGluc3RydWN0aW9uIGxlbmd0aHMgKGlmIGRlZmluZWQpIGluIG91dHB1dC4KCk1vbiBEZWMgIDcgMTA6NTM6MzggMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBGaXggaW5pdGlhbF92YWx1ZSBhbmQgaW5pdGlhbF9lcXVpdl92YWx1ZQoJaW4gdGhlIGxvb3BfaW5mbyBzdHJ1Y3R1cmUuCgkKTW9uIERlYyAgNyAxMTowNDo0MCAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KIAogICAgICAgICogY29uZmlndXJlLmluOiAgKGFybSotKi1lY29zLWVsZik6ICBOZXcgdGFyZ2V0LgogICAgICAgICogY29uZmlndXJlOiAgUmVnZW5lcmF0ZWQuCiAgICAgICAgKiBjb25maWcvYXJtL2VsZi5oIChBU01fV0VBS0VOX0xBQkVMKTogIERlZmluZS4KICAgICAgICAqIGNvbmZpZy9hcm0vZWNvcy1lbGYuaDogIE5ldyBmaWxlLgogICAgICAgICogY29uZmlnL2FybS91bmtub3duLWVsZi5oIChUQVJHRVRfVkVSU0lPTik6ICBDaGVjawogICAgICAgIGZvciByZWRlZmluaXRpb24uCiAKTW9uIERlYyAgNyAxNjoxNTo1MSAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5jIChvdXRwdXRfZmFyX2p1bXApOiBFbWl0IGJyYWYgb25seSBmb3IgVEFSR0VUX1NIMi4KClN1biBEZWMgNiAwNDoxOTo0NSBQU1QgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBEZWMgIDYgMDU6MTY6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLiAgVXBkYXRlIGZpZWxkcwoJYXMgbmVlZGVkLgoKU3VuIERlYyA2IDAzOjQwOjEzIFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIERlYyAgNiAwNzo0OToyOSAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGdjYy50ZXhpIChCdWcgUmVwb3J0aW5nKTogNDBLYiBpcyBhIHNvZnQgbGltaXQsIGxhcmdlcgoJY29tcHJlc3NlZCByZXBvcnRzIGFyZSBvayBhbmQgcHJlZmVycmVkIG92ZXIgVVJMcwoKU3VuIERlYyAgNiAwNzo0NTozMyAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGludm9rZS50ZXhpIChXYXJuaW5nIE9wdGlvbnMpOiBTb2Z0ZW4gdGhlIHRvbmUgb2YgLXBlZGFudGljCgpTdW4gRGVjICA2IDAwOjIwOjQ0IDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBBZGQgcHJvdG90eXBlLgoKCSogdW5yb2xsLmMgKGl0ZXJhdGlvbl9pbmZvKTogTWFrZSBpdCBzdGF0aWMuCgpTdW4gRGVjICA2IDAxOjE5OjQ2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGlhcy5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBBIHNlY29uZCBBTkRlZCBhZGRyZXNzCglkaXNhYmxlcyB0aGUgYWxpZ25lZCBhZGRyZXNzIG9wdGltaXphdGlvbi4KClNhdCBEZWMgIDUgMTg6NDg6MjUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2VtaXRfc2V0X2NvbnN0XzEpOiBGaXggcGFyZW50aGVzaXMgZXJyb3IKCWluIC1jIDw8IG4gY2FzZS4KClNhdCBEZWMgIDUgMTU6MTQ6NTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaTk2MC5oIChCT09MX1RZUEVfU0laRSk6IERlZmluZS4KClN1biBEZWMgIDYgMDA6Mjg6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAodmFsaWRfcGFyYWxsZWxfbG9hZF9zdG9yZSk6IEZsb2cgZnVuY3Rpb25hbGl0eQoJZnJvbSBvbGQgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSh2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc180KTogQ2hlY2sgdGhhdCBvcGVyYW5kcyBmb3IgNCBvcGVyYW5kCglwYXJhbGxlbCBpbnNucyBhcmUgdmFsaWQsIGV4Y2x1ZGluZyBsb2FkL3N0b3JlIGluc25zLgoJKiBjb25maWcvYzR4L2M0eC5oICh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKTogQWRkIHByb3RvdHlwZS4KCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZxZl9wYXJhbGxlbCwgKm1vdnFpX3BhcmFsbGVsKTogVXNlCgl2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlIGluc3RlYWQgb2YgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSgqYWJzcWYyX21vdnFmX2Nsb2JiZXIsICpmbG9hdHFpcWYyX21vdnFmX2Nsb2JiZXIsIAoJKm5lZ3FmMl9tb3ZxZl9jbG9iYmVyLCAqYWJzcWkyX21vdnFpX2Nsb2JiZXIsCgkqZml4cWZxaTJfbW92cWlfY2xvYmJlciwgKm5lZ3FpMl9tb3ZxaV9jbG9iYmVyLAoJKm5vdHFpX21vdnFpX2Nsb2JiZXIpOiBVc2UgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSgqc3VicWYzX21vdnFmX2Nsb2JiZXIsICphc2hscWkzX21vdnFpX2Nsb2JiZXIsCgkqYXNocnFpM19tb3ZxaV9jbG9iYmVyLCAqbHNocnFpM19tb3ZxaV9jbG9iYmVyLAoJKnN1YnFpM19tb3ZxaV9jbG9iYmVyKTogVXNlIHZhbGlkX3BhcmFsbGVsX29wZXJhbmRzXzUuCgpTYXQgRGVjICA1IDIzOjUyOjAxIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGl0ZXJhdGlvbl9pbmZvKTogRGVsZXRlIGV4dGVybi4KCkZyaSBEZWMgIDQgMjA6MTU6NTcgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogdG0udGV4aSAoU01BTExfUkVHSVNURVJfQ0xBU1NFUyk6IE1ha2UgZGVzY3JpcHRpb24gbWF0Y2ggcmVhbGl0eS4KCgkqIGZpbmFsLmMgKGNsZWFudXBfc3VicmVnX29wZXJhbmRzKTogRGVsZXRlIHNvbWUgdW51c2VkIGNvZGUuCgoJKiByZWNvZy5oIChNQVhfUkVDT0dfQUxURVJOQVRJVkVTKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBpbnNuX2FsdGVybmF0aXZlKTogTmV3IHN0cnVjdHVyZSBkZWZpbml0aW9uLgoJKHJlY29nX29wX2FsdCk6IERlY2xhcmUgdmFyaWFibGUuCgkocHJlcHJvY2Vzc19jb25zdHJhaW50cyk6IERlY2xhcmUgZnVuY3Rpb24uCgkqIHJlY29nLmMgKHJlY29nX29wX2FsdCk6IE5ldyB2YXJpYWJsZS4KCShleHRyYWN0X2luc24pOiBWZXJpZnkgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBpcyBpbiByYW5nZS4KCShwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogTmV3IGZ1bmN0aW9uLgoJKiByZWctc3RhY2suYzogSW5jbHVkZSByZWNvZy5oLgoJKGNvbnN0cmFpbl9hc21fb3BlcmFuZHMpOiBEZWxldGUuCgkoZ2V0X2FzbV9vcGVyYW5kX2xlbmd0aHMpOiBEZWxldGUuCgkoZ2V0X2FzbV9vcGVyYW5kX25faW5wdXRzKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZF9hc21fcmVnX2xpZmUpOiBEZWxldGUgT1BFUkFORFMsIENPTlNUUkFJTlRTLCBOX0lOUFVUUyBhbmQKCU5fT1VUUFVUUyBhcmdzLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCUNvbXB1dGUgbnVtYmVyIG9mIGlucHV0cyBhbmQgb3V0cHV0cyBoZXJlIGJ5IGNhbGxpbmcKCWdldF9hc21fb3BlcmFuZF9uX2lucHV0cy4KCUluc3RlYWQgb2YgY29uc3RyYWluX2FzbV9vcGVyYW5kcywgY2FsbCBleHRyYWN0X2luc24sCgljb25zdHJhaW5fb3BlcmFuZHMgYW5kIHByZXByb2Nlc3NfY29uc3RhaW50cy4gIFVzZSBpbmZvcm1hdGlvbgoJY29tcHV0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zIHRocm91Z2hvdXQuCgkocmVjb3JkX3JlZ19saWZlKTogRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4KCXJlY29yZF9hc21fcmVnX2xpZmUuCgkoc3Vic3RfYXNtX3N0YWNrX3JlZ3MpOiBEZWxldGUgT1BFUkFORFMsIE9QRVJBTkRfTE9DLCBDT05TVFJBSU5UUywKCU5fSU5QVVRTIGFuZCBOX09VVFBVVFMgYXJncy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglTaW1pbGFyIGNoYW5nZXMgYXMgaW4gcmVjb3JkX2FzbV9yZWdfbGlmZS4KCShzdWJzdF9zdGFja19yZWdzKTogTW92ZSBuX29wZXJhbmRzIGRlY2xhcmF0aW9uIGludG8gdGhlIGlmIHN0YXRlbWVudAoJd2hlcmUgaXQncyB1c2VkLgoJRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4gc3Vic3RfYXNtX3N0YWNrX3JlZ3MuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFZlcmlmeSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIGluCglyYW5nZS4KCSogTWFrZWZpbGUuaW4gKHJlZy1zdGFjay5vKTogRGVwZW5kIG9uIHJlY29nLmguCgpGcmkgRGVjICA0IDAyOjIzOjI0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX3ZlcnNpb25fY29kZSk6IEFyZ3VtZW50IGlzIGFuICJpbnQiLgoKRnJpIERlYyAgNCAwMToyOToyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGEyKi0qLSopOiBIYW5kbGUgbGlrZSBocHBhMS4xLSotKiBmb3Igbm93LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgRGVjICA0IDAxOjI5OjI4IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAobWlwc2VsLSotbGludXgqKTogTmV3IHRhcmdldC4KCSogbWlwcy9saW51eC5oOiBOZXcgZmlsZSwgYmFzZWQgb24gb3RoZXIgTGludXggdGFyZ2V0cy4KClRodSBEZWMgIDMgMTE6MTk6NTAgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogZ3Roci12eHdvcmtzLmggKF9fZWhkdG9yKTogRml4IG1lbW9yeSBsZWFrLiAgVGhlIGRlbGV0ZSBob29rCglydW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZWxldGVyLCBub3QgdGhlIGRlbGV0ZWUsIHNvIHdlIG11c3QKCXVzZSB0YXNrVmFyR2V0IHRvIGZpbmQgdGhlIGNvcnJlY3QgbWVtb3J5IHRvIGZyZWUuCgkoX19ndGhyZWFkX2tleV9jcmVhdGUpOiBJbml0aWFsaXplIHRoZSB0YXNrCgl2YXJpYWJsZSBzdWJzeXN0ZW0gc28gdGhhdCB0aGUgdGFzayB2YXJpYWJsZSBpcyBzdGlsbCBhY3RpdmUgd2hlbgoJdGhlIGRlbGV0ZSBob29rIGlzIHJ1bi4KCjE5OTgtMTItMDMgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmg6IFVzZSBvcHRpbWl6ZV9zaXplIGZvciBzcGFjZSBvcHRpbWl6YXRpb25zLgoJKiBwZHAxMS5jOiBMaWtld2lzZS4KCSogcGRwMTEubWQ6IExpa2V3aXNlLgoKCSogcGRwMTEuaCAoVEFSR0VUXzQwX1BMVVMpOiBGaXggdHlwby4KClRodSBEZWMgIDMgMTE6NDg6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBTbGlnaHRseSByZXR1bmUgaGV1cmlzdGljIHRvIHdpZGVuIAoJcXR5IGxpZmV0aW1lcy4KClRodSBEZWMgIDMgMjI6MzA6MTggMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogYWxpYXMuYyAoYWRkcl9zaWRlX2VmZmVjdF9ldmFsKTogTmV3IGZ1bmN0aW9uLgoJKG1lbXJlZnNfY29uZmxpY3RfcCk6IFVzZSBpdC4KCSogcnRsLmggKGFkZHJfc2lkZV9lZmZlY3RfZXZhbCk6IFByb3RvdHlwZSBpdC4KCjE5OTgtMTItMDIgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLm1kIChleHRlbmRzZmRmMik6IEZpeCBtb2RlIG1pc21hdGNoIGluIFNFVC4KCldlZCBEZWMgIDIgMTE6MjM6MDcgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IFdoZW4gZm9yY2UgY29uc3QgdG8gbWVtb3J5LCBwdXQgcmVzdWx0CglpbiBzdWJzdGVkX29wZXJhbmQgbm90ICpyZWNvZ19vcGVyYW5kX2xvYy4KCjE5OTgtMTItMDIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogYy1sZXguYzogRml4IGluZGVudGF0aW9uIGZyb20gbGFzdCBwYXRjaC4KCVJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLgoJKiByZWFsLmM6IExpa2V3aXNlLgoKV2VkIERlYyAgMiAxMDoxMToxMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGRlbGV0ZV9ibG9jayk6IENhbGwgc2V0X2xhc3RfaW5zbiBhZnRlciB3ZSBoYXZlIHJlc2V0CglORVhUX0lOU04gKGtlcHRfdGFpbCkuCgpXZWQgRGVjICAyIDAwOjQ3OjMxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKHRyYXBfaWYpOiBVc2UgIiQwIiBmb3IgdGhlIHZhbHVlIHplcm8uCgpUdWUgRGVjICAxIDIwOjQ5OjQ5IDE5OTggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoJCQkgIFN0ZXBoZW4gTCBNb3NoaWVyICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2Z1bmN0aW9uX25hbWUpOiBEZWNsYXJlIHByZWRlZmluaWVkIHZhcmlhYmxlCglgX19mdW5jX18nLgoKCSogYy1kZWNsLmMgKGZsYWdfaXNvYzl4KTogU2V0IHRvIDEgYnkgZGVmYXVsdC4KCShjX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLXN0ZD0gb3B0aW9uLiAgUmVtb3ZlIC1mbGFuZy1pc29jOXguCgkoZ3Jva2RlY2xhcmF0b3IpOiBBbHdheXMgZW1pdCB3YXJuaW5nIGFib3V0IGltcGxpY2l0IGludCBmb3IgSVNPIEMgOXguCgoJKiBjLXBhcnNlLmluOiBBbGxvdyBjb25zdHJ1Y3RvcnMgaW4gSVNPIEMgOXguCglSZXdyaXRlIGRlc2lnbmF0b3IgbGlzdCBoYW5kbGluZy4KCUFsbG93IFsqXSBwYXJhbWV0ZXJzLgoJRG9uJ3Qgd2FybiBhYm91dCBjb21tYSBhdCBlbmQgb2YgZW51bSBkZWZpbml0aW9uIGZvciBJU08gQyA5eC4KCgkqIGNjY3AuYyAoYzl4KTogTmV3IHZhcmlhYmxlLgoJKHJlc3RfZXh0ZW5zaW9uKTogTmV3IHZhcmlhYmxlLgoJKHByaW50X2hlbHApOiBEb2N1bWVudCBuZXcgLXN0ZD0gb3B0aW9uLgoJKG1haW4pOiBSZWNvZ25pemUgLXN0ZD0gb3B0aW9uLiAgU2V0IGM5eCBhcHByb3ByaWF0ZWx5LgoJKGNyZWF0ZV9kZWZpbml0aW9uKTogUmVjb2duaXplIElTTyBDIDl4IHZhcmFyZyBtYWNyb3MuCgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBBZGp1c3Qgc3BlY3MgZm9yIC1zdGQgb3B0aW9ucy4KCShvcHRpb25fbWFwKTogQWRkIC0tc3RkLgoJKGRpc3BsYXlfaGVscCk6IERvY3VtZW50IC1zdGQuCgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgLXN0ZCBhbmQgcmVtb3ZlCgktZmxhbmctaXNvYzl4LgogICAgICAgIAoJKiBjLWxleC5jICh5eWxleCk6IFJlY29nbml6ZSBoZXggRlAgY29uc3RhbnRzIGFuZCBjYWxsIFJFQUxfVkFMVUVfQVRPRgoJb3IgUkVBTF9WQUxVRV9IVE9GIGJhc2VkIG9uIGJhc2Ugb2YgdGhlIGNvbnN0YW50cy4KCSogZm9sZC1jb25zdC5jIChyZWFsX2hleF90b19mKTogTmV3IGZ1bmN0aW9uLiAgUmVwbGFjZW1lbnQgZnVuY3Rpb24KCWZvciBoZXggRlAgY29udmVyc2lvbiBpZiBSRUFMX0FSSVRITUVUSUMgaXMgbm90IGRlZmluZWQuCgkqIHJlYWwuYyAoYXNjdG9lZyk6IEFkZCBoYW5kbGluZyBvZiBoZXggRlAgY29uc3RhbnRzLgoJKiByZWFsLmg6IERlZmluZSBSRUFMX1ZBTFVFX0hUT0YgaWYgbmVjZXNzYXJ5IHVzaW5nIGVyZWFsX2F0b2Ygb3IKCXJlYWxfaGV4X3RvX2YuCgpUdWUgRGVjICAxIDE2OjQ1OjQ5IDE5OTggIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogbWlwcy5tZCAoZGl2bW9kc2k0KiwgZGl2bW9kZGk0KiwgdWRpdm1vZHNpNCosIHVkaXZtb2RkaTQpOiBBZGQKCS1tY2hlY2stcmFuZ2UtZGl2aXNpb24vLW1jaGVjay16ZXJvLWRpdmlzaW9uIGNoZWNraW5nLiAgQXZvaWQgYXMgbWFjcm8KCWV4cGFuc2lvbi4gIFVzZSBoaS9sbyBhcyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KCShkaXZfdHJhcCk6IE5ldy4KCShkaXZzaTMqLCBkaXZkaTMqLCBtb2RzaTMqLCBtb2RkaTMqLCB1ZGl2c2kzKiwgdWRpdmRpMyosIHVtb2RzaTMqLAoJdW1vZGRpMyopOiBBZGQgLW1jaGVjay1yYW5nZS1kaXZpc2lvbi8tbWNoZWNrLXplcm8tZGl2aXNpb24gY2hlY2tpbmcuCglBdm9pZCBhcyBtYWNybyBleHBhbnNpb24uICBVc2UgaGkvbG8gYXMgZGVzdGluYXRpb24gcmVnaXN0ZXIuIAoKCSogbWlwcy5oIChNQVNLX0NIRUNLX1JBTkdFX0RJVik6IE5ldy4KCShNQVNLX05PX0NIRUNLX1pFUk9fRElWKTogTmV3LgoJKEVMSU1JTkFCTEVfUkVHUyk6IEFkZGVkIEdQX1JFR19GSVJTVCArIDMxLgoJKENBTl9FTElNSU5BVEUsIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogQWxsb3cgZm9yIGdldHRpbmcKCXJldHVybiBhZGRyZXNzIGZvciBsZWFmIGZ1bmN0aW9ucyBvdXQgb2YgcjMxIHRvIHN1cHBvcnQKCWJ1aWx0aW5fcmV0dXJuX2FkZHJlc3MuIAoJClR1ZSBEZWMgIDEgMTU6MDM6MzAgMTk5OCAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IENhbGwgcmVnc19zZXRfYmV0d2Vlbl9wIHdpdGggUFJFVl9JTlNOKHgpLAoJTkVYVF9JTlNOKHgpIHRvIGNoZWNrIGluc24geC4KCQpUdWUgRGVjICAxIDE1OjIwOjQ0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAoZGVsZXRlX2Jsb2NrKTogQ2FsbCBzZXRfbGFzdF9pbnNuIGlmIHdlIGVuZCB1cCBkZWxldGluZyB0aGUKCWxhc3QgaW5zbiBpbiB0aGUgcnRsIGNoYWluLgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEbyBub3Qgc2V0IHJlbG9hZF9jb21wbGV0ZWQgb3Igc3BsaXQgaW5zbnMKCWhlcmUuICBJbnN0ZWFkLi4uCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IHJlbG9hZF9jb21wbGV0ZWQgYWZ0ZXIKCXJlbG9hZCByZXR1cm5zLiAgU3BsaXQgaW5zbnMgYWZ0ZXIgcmVsb2FkX2NzZSBoYXMgcnVuLgoKVHVlIERlYyAgMSAxMTo1NTowNCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogQWJvcnQgaWYgYmxvY2tfZGVwdGggZmFsbHMgYmVsb3cgMC4KClR1ZSBEZWMgIDEgMTA6MjM6MTYgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdC1hcm0tZWxmIChMSUJHQ0MyX0NGTEFHUyk6IERlZmluZSBpbmhpYml0X2xpYmMuCgpUdWUgRGVjICAxIDEwOjIyOjE4IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3Vua25vd24tZWxmLmggKEFTTV9PVVRQVVRfRFdBUkYyX0FERFJfQ09OU1QpOiBSZW1vdmUKCXVzZSBvZiB1c2VyLWxhYmVsX3ByZWZpeC4KClR1ZSBEZWMgIDEgMTc6NTg6MjYgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IENsZWFyIHNwaWxsX3JlZ19zdG9yZQoJd2hlbiBkb2luZyBhIG5ldyBub24taW5oZXJpdGVkIHJlbG9hZCBmcm9tIHRoZSBzYW1lIHBzZXVkby4KCgkqIGxvY2FsLWFsbG9jLmMgKGZ1bmN0aW9uX2ludmFyaWFudF9wKTogTmV3IGZ1bmN0aW9uLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogVXNlIGZ1bmN0aW9uX2ludmFyaWFudF9wIGluc3RlYWQgb2YgQ09OU1RBTlRfUAoJdG8gZGVjaWRlIGlmIGFuIGVxdWl2YWxlbmNlIHNob3VsZCBiZSByZWNvcmRlZC4KCSogcmVsb2FkMS5jIChudW1fZWxpbWluYWJsZV9pbnZhcmlhbnRzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShyZWxvYWQpOiBTZXQgaXQuICBVc2UgZnVuY3Rpb25faW52YXJpYW50X3AgaW5zdGVhZCBvZiBDT05TVEFOVF9QCgl0byBkZWNpZGUgaWYgYW4gZXF1aXZhbGVuY2Ugc2hvdWxkIGJlIHJlY29yZGVkLgoJVW5zaGFyZSBQTFVTLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBTa2lwIGluc25zIHRoYXQgb25seSBzZXQgYW4gZXF1aXZhbGVuY2UuCglUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50IHdoZW4gZGVjaWRpbmcKCWlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50Cgl3aGVuIGRlY2lkaW5nIGlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKGVsaW1pbmF0ZV9yZWdzKTogSGFuZGxlIG5vbi1jb25zdGFudCByZWdfZXF1aXZfY29uc3RhbnQuCgkqIHJ0bC5oIChmdW5jdGlvbl9pbnZhcmlhbnRfcCk6IERlY2xhcmUuCgpNb24gTm92IDMwIDAyOjAwOjA4IFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAzMCAwMDo0Mjo1OSBQU1QgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBOb3YgMjkgMjI6NTk6NDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGFkZF9uZXdfaGFuZGxlcik6IENvbXBsYWluIGFib3V0IGFkZGl0aW9uYWwgaGFuZGxlcnMKCWFmdGVyIG9uZSB0aGF0IGNhdGNoZXMgZXZlcnl0aGluZy4KClNhdCBOb3YgMjggMTA6NTY6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QpOiBGaXggdHlwby4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIE5vdiAyNyAxMjoyODo1NiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBsaWJpYmVydHkuaC4KCgkqIGMtYXV4LWluZm8uYzogUmVtb3ZlIHByb3RvdHlwZXMgZm9yIGNvbmNhdC9jb25jYXQzLiAgQ2hhbmdlCglmdW5jdGlvbiBgY29uY2F0JyBmcm9tIGZpeGVkIHBhcmFtZXRlcnMgdG8gdmFyaWFibGUgcGFyYW1ldGVycywKCWFzIGlzIGRvbmUgaW4gbGliaWJlcnR5LiAgQWxsIGNhbGxlcnMgb2YgY29uY2F0L2NvbmNhdDMKCWNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgYGNvbmNhdCcgd2l0aCB2YXJpYWJsZSBhcmdzLgoKCSogY2NjcC5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBjZXhwLnk6IExpa2V3aXNlLgoJKiBjb2xsZWN0Mi5jOiBMaWtld2lzZS4KCSogY29uZmlnLzE3NTBhLzE3NTBhLmg6IExpa2V3aXNlLgoJKiBjcHBhbGxvYy5jOiBMaWtld2lzZS4KCSogY3BwZXhwLmM6IExpa2V3aXNlLgoJKiBjcHBmaWxlcy5jOiBMaWtld2lzZS4KCSogY3BwaGFzaC5jOiBMaWtld2lzZS4KCSogY3BwbGliLmM6IExpa2V3aXNlLgoJKiBkeW4tc3RyaW5nLmM6IExpa2V3aXNlLgoJKiBmaXgtaGVhZGVyLmM6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdjb3YuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHIuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYzogTGlrZXdpc2UuCgkqIGdlbmNoZWNrLmM6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jOiBMaWtld2lzZS4KCSogZ2VuY29uZmlnLmM6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmM6IExpa2V3aXNlLgoJKiBnZW5leHRyYWN0LmM6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jOiBMaWtld2lzZS4KCSogZ2VuZ2VucnRsLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYzogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYzogTGlrZXdpc2UuCgkqIGdldHB3ZC5jOiBMaWtld2lzZS4KCSogaGFsZnBpYy5jOiBMaWtld2lzZS4KCSogaGFzaC5jOiBMaWtld2lzZS4KCSogbWlwcy10ZHVtcC5jOiBMaWtld2lzZS4gIFdyYXAgbWFsbG9jL3JlYWxsb2MvY2FsbG9jIHByb3RvdHlwZXMKCWluIE5FRURfREVDTEFSQVRJT05fKiBtYWNyb3MuCgoJKiBtaXBzLXRmaWxlLmM6IFJlbW92ZSB0aGluZ3MgbWFkZSByZWR1bmRhbnQgYnkgbGliaWJlcnR5LmggYW5kL29yCgljb25mb3JtIHRvIGxpYmliZXJ0eSBzdGFuZGFyZHMuCgkoZmF0YWwpOiBGaXggY29uc3QtaWZpY2F0aW9uIG9mIHZhcmlhYmxlIGBmb3JtYXQnIGluCgkhQU5TSV9QUk9UT1RZUEVTIGNhc2UuCgoJKiBwcmVmaXguYzogUmVtb3ZlIHRoaW5ncyBtYWRlIHJlZHVuZGFudCBieSBsaWJpYmVydHkuaCBhbmQvb3IKCWNvbmZvcm0gdG8gbGliaWJlcnR5IHN0YW5kYXJkcy4KCgkqIHByaW50LXJ0bC5jOiBSZW5hbWUgdmFyaWFibGUgYHNwYWNlcycgdG8gYHhzcGFjZXMnIHRvIGF2b2lkCgljb25mbGljdGluZyB3aXRoIGZ1bmN0aW9uIGBzcGFjZXMnIGZyb20gbGliaWJlcnR5LgoKCSogcHJvZmlsZS5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4KCSogcnRsLmg6IExpa2V3aXNlLgoJKiBzY2FuLmg6IExpa2V3aXNlLgoJKiB0bGluay5jOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IExpa2V3aXNlLgoJKiB0b3BsZXYuaDogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgpUaHUgTm92IDI2IDA4OjM4OjA2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogVW4tQU5TSS1meSBmdW5jdGlvbiBkZWZpbml0aW9uLgoKVGh1IE5vdiAyNiAyMzo0NTozNyAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBSRUFETUUuQzRYOiBVcGRhdGVkIFVSTHMuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2NvbmZsaWN0KTogRml4IHR5cG8uCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgpUaHUgTm92IDI2IDIzOjQwOjAzIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9ERUZBVUxUKTogRml4IHR5cG8uCgoxOTk4LTExLTI2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORklHX0xBTkdVQUdFUyk6IE5ldyBtYWNybyB0YWtpbmcgYWxsIGxhbmd1YWdlcwoJd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQuCgkoTEFOR1VBR0VTKTogVXNlICQoQ09ORklHX0xBTkdVQUdFUykgaW5zdGVhZCBvZiBAYWxsX2xhbmd1YWdlc0AKCShNYWtlZmlsZSk6IFBhc3MgYWN0dWFsIExBTkdVQUdFUyB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCB3aGVuCglyZS1jb25maWd1cmluZy4KCShjc3RhbXAtaCk6IExpa2V3aXNlLgoJKGNvbmZpZy5zdGF0dXMpOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoZW5hYmxlX2xhbmd1YWdlcyk6IEFkZCBuZXcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIKCSItLWVuYWJsZS1sYW5ndWFnZXM9bGFuZzEsbGFuZzIsLi4uIi4KCSgke3NyY2Rpcn0vKi9jb25maWctbGFuZy5pbik6IENoYW5nZSBoYW5kbGluZyB0byBjb25maWd1cmUgb25seQoJdGhvc2UgZGlyZWN0b3JpZXMsIHRoYXQgdGhlIHVzZXIgbWlnaHQgaGF2ZSBlbmFibGVkOyBkZWZhdWx0IHRvCgkiYWxsIiBleGlzdGluZyBsYW5ndWFnZXMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KClRodSBOb3YgMjYgMDA6MTk6MTkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJ0bGFuYWwuYyAocmVnc19zZXRfYmV0d2Vlbl9wKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAocmVnc19zZXRfYmV0d2Vlbl9wKTogUHJvdG90eXBlIGl0LgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBVc2UgaXQgaW5zdGVhZCBvZiBtb2RpZmllZF9iZXR3ZWVuX3AKCWluIHRoZSBTZXAgMiBjaGFuZ2UuCgpXZWQgTm92IDI1IDIzOjMyOjAyIDE5OTggIElhbiBEYWxsICA8SWFuLkRhbGxAZHN0by5kZWZlbmNlLmdvdi5hdT4KCQkJICBNYXR0aGlhcyBQZmFsbGVyICA8bGVvQGRhY2hhdS5tYXJjby5kZT4KCgkqIGludm9rZS50ZXhpIChPcHRpb24gU3VtbWFyeSwgTlMzMksgT3B0aW9ucyk6IGFkZCBkZXNjcmlwdGlvbgogCW9mIE5TMzJLIHNwZWNpZmljIG9wdGlvbnMuCgoJKiBuczMyay5tZCAodHN0ZGYsIGNtcGRmLCBtb3ZkZiwgdHJ1bmNkZnNmMiwgZml4ZGZxaTIsIGZpeGRmaGkyLAogCWZpeGRmc2kyLCBmaXh1bnNkZnFpMiwgZml4dW5zZGZoaTIsIGZpeHVuc2Rmc2kyLCBmaXhfdHJ1bmNkZnFpMiwKIAlmaXhfdHJ1bmNkZmhpMiwgZml4X3RydW5jZGZzaTIsIGFkZGRmMywgc3ViZGYzLCBtdWxkZjMsIGRpdmRmMywKIAluZWdkZjIsIGFic2RmMik6IFVzZSBsIGluc3RlYWQgb2YgZiBzaW5jZSB0aGUgZG91YmxlIGNsYXNzIGFuZAogCWZsb2F0IGNsYXNzIGFyZSBubyBsb25nZXIgdGhlIHNhbWUuCgkoY21wc2ksIHRydW5jc2lxaTIsIHRydW5jc2loaTIsIGFkZHNpMywgc3Vic2kzLCBtdWxzaTMsIHVtdWxzaWRpMywKIAlkaXZzaTMsIG1vZHNpMywgYW5kc2kzLCBpb3JzaTMsIHhvcnNpMywgbmVnc2kyLCBvbmVfY21wbHNpMiwKIAlhc2hsc2kzLCBhc2hsaGkzLCBhc2hscWkzLCByb3Rsc2kzLCByb3RsaGkzLCByb3RscWkzLCBhYnNzaTIsLi4uKToKIAl1c2UgImciIGluc3RlYWQgb2YgInJtbiIgc2luY2UgTEVHSVRJTUFURV9QSUNfT1BFUkFORCBoYXMgYmVlbgogCWZpeGVkLgoJKGNtcHNpLCBjbXBoaSwgY21wcWkpOiB1c2UgZ2VuZXJhbF9vcGVyYW5kIGluc3RlYWQgb2YKIAlub25faW1tZWRpYXRlX29wZXJhbmQuIFJlbW92ZXMgZXJyb25lb3VzIGFzc3VtcHRpb24gdGhhdCBjYW4ndAogCWNvbXBhcmUgY29uc3RhbnRzLgoJKG1vdnNmLCBtb3ZzaSwgbW92aGksIG1vdnFpLC4uLik6IE5ldyByZWdpc3RlciBudW1iZXJpbmcgc2NoZW1lLgoJKG1vdnNpLCBhZGRzaTMpOiBVc2UgTlMzMktfRElTUExBQ0VNRU5UX1AgaW5zdGVhZCBvZiBoYXJkIGNvZGVkCiAJY29uc3RhbnRzLgoJKG1vdnN0cnNpLCBtb3ZzdHJzaTEsIG1vdnN0cnNpMik6IGNvbXBsZXRlbHkgbmV3IGJsb2NrIG1vdmUKIAlzY2hlbWUuCgkoLi4uKTogUGF0dGVybnMgdG8gZXhwbG9pdCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb25zLgoJKHVkaXZtb2RzaTQsIHVkaXZtb2RzaV9pbnRlcm5hbDQsIHVkaXZtb2RoaTQsCiAJdWRpdm1vZGRpaGk0X2ludGVybmFsLCB1ZGl2bW9kcWk0LCB1ZGl2bW9kZGlxaTRfaW50ZXJuYWwpOiBuZXcKIAlwYXR0ZXJucyB0byBleHBsb2l0IGV4dGVuZGVkIGRpdmlkZSBpbnNucy4KCSh1ZGl2c2kzLCB1ZGl2aGkzLCB1ZGl2cWkzKTogcmVtb3ZlIHNpbmNlIHN1cGVyY2VkZWQgYnkgdWRpdm1vZHNpCglldGMgcGF0dGVybnMuCgoJKiBuczMyay5oIChGVU5DVElPTl9WQUxVRSwgTElCQ0FMTF9WQUxVRSk6IFVzZSBmMCBmb3IgY29tcGxleAogCWZsb2F0IHJldHVybiB2YWx1ZXMgYXMgd2VsbCBhcyBzaW1wbGUgc2NhbGFyIGZsb2F0cy4KCShUQVJHRVRfMzIzODEsIFRBUkdFVF9NVUxUX0FERCwgVEFSR0VUX1NXSVRDSEVTKToKIAlzdXBwb3J0IG5ldyBmbGFnIHRvIGRlbm90ZSAzMjM4MSBmcHUuCgkoT1ZFUlJJREVfT1BUSU9OUyk6IDMyMzgxIGlzIGEgc3RyaWN0IHN1cGVyc2V0IG9mIDMyMDgxLgoJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogZGlzYWJsZSBleHRyYSAzMjM4MSByZWdpc3RlcnMgaWYgbm90CiAJY29tcGxpbmcgZm9yIDMyMzgxLgoJKEZJUlNUX1BTRVVET19SRUdJU1RFUiwgRklYRURfUkVHSVNURVJTLCBDQUxMX1VTRURfUkVHSVNURVJTLAogCVJFR0lTVEVSX05BTUVTLCBBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTLCBPVVRQVVRfUkVHSVNURVJfTkFNRVMsCiAJUkVHX0FMTE9DX09SREVSLCBEQlhfUkVHSVNURVJfTlVNQkVSLCBSMF9SRUdOVU0sIEYwX1JFR05VTSwKIAlMMV9SRUdOVU0sIFNUQUNLX1BPSU5URVJfUkVHTlVNLCBGUkFNRV9QT0lOVEVSX1JFR05VTSwKIAlMT05HX0ZQX1JFR1NfUCwgQVJHX1BPSU5URVJfUkVHTlVNLCByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywKIAlSRUdfQ0xBU1NfQ09OVEVOVFMsIFNVQlNFVF9QLFJFR05PX1JFR19DTEFTUywKIAlSRUdfQ0xBU1NfRlJPTV9MRVRURVIsIEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSwKIAlSRUdOT19PS19GT1JfSU5ERVhfUCwgRlBfUkVHX1AsIFJFR19PS19GT1JfSU5ERVhfUCwKIAlSRUdfT0tfRk9SX0JBU0VfUCwgTUVNX1JFRyk6IG5ldyByZWdpc3RlciBzY2hlbWUgdG8gaW5jbHVkZSAzMjM4MQogCWZwdSByZWdpc3RlcnMgYW5kIHNwZWNpYWwgcmVnaXN0ZXIgY2xhc3NlcyBmb3IgbmV3IDMyMzgxCiAJaW5zdHJ1Y3Rpb25zIGRvdGYgYW5kIHBvbHlmLgoJKE1PREVTX1RJRUFCTEVfUCk6IEFsbG93IGFsbCBpbnRlZ2VyIG1vZGVzLCBub3RhYmx5IERJIGFuZCBTSSwgdG8KIAliZSB0aWVhYmxlLgoJKElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCwgUkVUVVJOX0FERFJfUlRYLAogCUlOQ09NSU5HX0ZSQU1FX1NQX09GRlNFVCk6IE5ldyBtYWNyb3MgaW4gY2FzZSBEV0FSRiBzdXBwb3J0IGlzCiAJcmVxdWlyZWQuCgkoU01BTExfUkVHSVNURVJfQ0xBU1NFUyk6IE1ha2UgZGVwZW5kYW50IG9uIC1tbXVsdC1hZGQgb3B0aW9uLgoJKE1PVkVfUkFUSU8pOiBTZXQgdG8gemVybyBiZWNhdXNlIG9mIHNtYXJ0IG1vdnN0cnNpIGltcGxpbWVudGF0aW9uLgoJKFJFR0lTVEVSX01PVkVfQ09TVCk6IG1vdmUgY29kZSB0byByZWdpc3Rlcl9tb3ZlX2Nvc3QgZnVuY3Rpb24gZm9yCgllYXNlIG9mIGNvZGluZyBhbmQgZGVidWdnaW5nLgoJKENMQVNTX0xJS0VMWV9TUElMTEVEX1ApOiBVbmRlciBuZXcgcmVnaXN0ZXIgc2NoZW1lIGNsYXNzCiAJTE9OR19GTE9BVF9SRUdPIGlzIGxpa2VseSBzcGlsbGVkIGJ1dCBub3QgY2F1Z2h0IGJ5IGRlZmF1bHQKIAlkZWZpbml0aW9uLgoJKENPTlNUQU5UX0FERFJFU1NfUCwgQ09OU1RBTlRfQUREUkVTU19OT19MQUJFTF9QKTogdXNlIG1hY3JvCiAJaW5zdGVhZCBvZiBoYXJkIGNvZGVkIG51bWJlcnMgaW4gcmFuZ2UgY2hlY2suCgkoQVNNX09VVFBVVF9MQUJFTFJFRl9BU19JTlQpOiBkZWxldGUgc2luY2UgdW51c2VkLgoJKC4uLik6IEFkZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbnMzMmsuYyBidXQgZGlzYWJsZSBiZWNhdXNlCglvZiBwcm9ibGVtcyB3aGVuIG5zMzJrLmggaXMgaW5jbHVkZWQgaW4gbWFjaGluZSBpbmRlcGVuZGFudCBmaWxlcy4KCQoJKiBuczMyay5jOiBpbmNsdWRlICJzeXN0ZW0uaCIsICJ0cmVlLmgiLCAiZXhwci5oIiwgImZsYWdzLmgiLgoJKG5zMzJrX3JlZ19jbGFzc19jb250ZW50cywgcmVnY2Fzc19tYXAsIG5zMzJrX291dF9yZWdfbmFtZXMsCiAJaGFyZF9yZWdub19tb2RlX29rLCBzZWNvbmRhcnlfcmVsb2FkX2NsYXNzLAogCXByaW50X29wZXJhbmQsIHByaW50X29wZXJhbmRfYWRkcmVzcyk6IG5ldyByZWdpc3RlciBzY2hlbWUgdG8KIAlpbmNsdWRlIDMyMzgxIGZwdSByZWdpc3RlcnMgYW5kIHNwZWNpYWwgcmVnaXN0ZXIgY2xhc3NlcyBmb3IgbmV3CiAJMzIzODEgaW5zdHJ1Y3Rpb25zIGRvdGYgYW5kIHBvbHlmLgoJKGdlbl9pbmRleGVkX2V4cHIpOiBNYWtlIHN0YXRpYyB0byBrZWVwIG5hbWVzcGFjZSBjbGVhbi4KCShjaGVja19yZWcpOiByZW1vdmUgc2luY2UgbmV2ZXIgY2FsbGVkLgoJKG1vdmVfdGFpbCwgZXhwYW5kX2Jsb2NrX21vdmUpOiBoZWxwZXIgZnVuY3Rpb25zIGZvciAibW92c3Ryc2kiCiAJYmxvY2sgbW92ZSBpbnNuLgoJKHJlZ2lzdGVyX21vdmVfY29zdCk6IEhlbHBlciBmdW5jdGlvbiBmb3IgUkVHSVNURVJfTU9WRV9DT1NUIG1hY3JvLgoJSW5jcmVhc2UgY29zdCBvZiBtb3ZlcyB3aGljaCBnbyB2aWEgbWVtb3J5LgoJKiBuZXRic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBTZXQgKG5ldykgMzIzODEgZnB1IGZsYWcuCgkoQ1BQX1BSRURFRklORVMpOiBub2xvbmdlciBwcmVkZWZpbmUgInVuaXgiLgoKCSogbnMzMmsubWQgKG1vdnNpLCBtb3ZzaSwgYWRkZGkzLCBzdWJkaTMsIHN1YnNpMywgc3ViaGkzLCBzdWJxaTMsLi4uKToKIAlSZW1vdmUgZXJyb25lb3VzICUkLiBwcmludF9vcGVyYW5kKCkgY2FuIHdvcmsgb3V0IGZyb20gdGhlIHJ0eCBpcwogCWFuIGltbWVkaWF0ZSBwcmVmaXggaXMgcmVxdWlyZWQuCgoJKiBuczMyay5oIChSRVRVUk5fUE9QU19BUkdTLCBWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFLAogCVZBTElEX01BQ0hJTkVfVFlQRV9BVFRSSUJVVEUsIENPTVBfVFlQRV9BVFRSSUJVVEVTLAogCVNFVF9ERUZBVUxUX1RZUEVfQVRUUklCVVRFUyk6IFN1cHBvcnQgZm9yIC1tcnRkIGNhbGxpbmcKIAljb252ZW50aW9uLgoJKExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCwgU1lNQk9MSUNfQ09OU1QpOiBDb3JyZWN0IGhhbmRsaW5nIG9mCiAJcGljIG9wZXJhbmRzLgoKCSogbnMzMmsuYyAoc3ltYm9saWNfcmVmZXJlbmNlX21lbnRpb25lZF9wLCBwcmludF9vcGVyYW5kKToKCUNvcnJlY3QgaGFuZGxpbmcgb2YgcGljIG9wZXJhbmRzLgoJKG5zMzJrX3ZhbGlkX2RlY2xfYXR0cmlidXRlX3AsIG5zMzJrX3ZhbGlkX3R5cGVfYXR0cmlidXRlX3AsCiAJbnMzMmtfY29tcF90eXBlX2F0dHJpYnV0ZXMsIG5zMzJrX3JldHVybl9wb3BzX2FyZ3MpOiBTdXBwb3J0IGZvcgoJLW1ydGQgY2FsbGluZyBjb252ZW50aW9uLgoKV2VkIE5vdiAyNSAyMzo0MjoyMCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAob3B0aW9uX21hcCk6IFJlY29nbml6ZSAtLW91dHB1dC1jbGFzcy1kaXJlY3RvcnkuCgpUaHUgTm92IDI2IDE4OjI2OjIxIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCiAJKiBsb29wLmggKHByZWNvbmRpdGlvbl9sb29wX3ApOiBBZGRlZCBuZXcgbW9kZSBhcmd1bWVudC4KCSogdW5yb2xsLmMgKHByZWNvbmRpdGlvbl9sb29wX3ApOiBMaWtld2lzZS4KCShhcHByb3hfZmluYWxfdmFsdWUpOiBGdW5jdGlvbiBkZWxldGVkIGFuZCBzdWJzdW1lZAogCWludG8gbG9vcF9pdGVyYXRpb25zLgoJKGxvb3BfZmluZF9lcXVpdl92YWx1ZSk6IE5ldyBmdW5jdGlvbi4KCShsb29wX2l0ZXJhdGlvbnMpOiBVc2UgbG9vcF9maW5kX2VxdWl2X3ZhbHVlIHRvIGZpbmQgaW5jcmVtZW50cwoJdG9vIGxhcmdlIHRvIGJlIGltbWVkaWF0ZSBjb25zdGFudHMuICBBbHNvIHVzZSBpdCB0byBmaW5kIHRlcm1zCgljb21tb24gdG8gaW5pdGlhbCBhbmQgZmluYWwgaXRlcmF0aW9uIHZhbHVlcyB0aGF0IGNhbiBiZSByZW1vdmVkLgoKVGh1IE5vdiAyNiAxODowNTowNCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBsb29wLmggKHN0cnVjdCBsb29wX2luZm8pOiBEZWZpbmUgbmV3IHN0cnVjdHVyZS4KCShwcmVjb25kaXRpb25fbG9vcF9wKTogQWRkZWQgcHJvdG90eXBlLgoJKHVucm9sbF9sb29wKTogQWRkZWQgbmV3IGFyZ3VtZW50IGxvb3BfaW5mbyB0byBwcm90b3R5cGUuCgkoZmluYWxfYml2X3ZhbHVlLCBmaW5hbF9naXZfdmFsdWUpOiBBZGRlZCBuZXcgYXJndW1lbnQgbl9pdGVyYXRpb25zCgl0byBwcm90b3R5cGUuCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRGVjbGFyZSBuZXcgc3RydWN0dXJlIGxvb3BfaXRlcmF0aW9uX2luZm8KCWFuZCBuZXcgcG9pbnRlciBsb29wX2luZm8uCgkobG9vcF9uX2l0ZXJhdGlvbnMpOiBSZXBsYWNlIGdsb2JhbCB2YXJpYWJsZSBieSBlbGVtZW50IGluIAoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KCShjaGVja19maW5hbF92YWx1ZSk6IE5ldyBhcmd1bWVudCBuX2l0ZXJhdGlvbnMuCgkoaW5zZXJ0X2JjdCk6IE5ldyBhcmd1bWVudCBsb29wX2luZm8uCgkobG9vcF91bnJvbGxfZmFjdG9yKTogUmVwbGFjZSBnbG9iYWwgYXJyYXkgYnkgZWxlbWVudCBpbiAKCWxvb3BfaW5mbyBzdHJ1Y3R1cmUuCgkobG9vcF9vcHRpbWl6ZSk6IFJlbW92ZSBjb2RlIHRvIGFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIAoJbG9vcF91bnJvbGxfZmFjdG9yX2FycmF5LgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6ICBObyBsb25nZXIgc3RhdGljIHNpbmNlCgl1c2VkIGJ5IGJyYW5jaCBvbiBjb3VudCBvcHRpbWl6YXRpb24uCgkocHJlY29uZGl0aW9uX2xvb3BfcCwgdW5yb2xsX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLgoJKGZpbmFsX2Jpdl92YWx1ZSwgZmluYWxfZ2l2X3ZhbHVlLCBmaW5kX3NwbGl0dGFibGVfcmVncyk6IE5ldwoJYXJndW1lbnQgbl9pdGVyYXRpb25zLgoJKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudCwgCglsb29wX2ZpbmFsX3ZhbHVlLCBsb29wX2NvbXBhcmlzb25fY29kZSwgbG9vcF91bnJvbGxfZmFjdG9yKTogCglSZXBsYWNlZCBnbG9iYWwgdmFyaWFibGVzIGJ5IGxvb3BfaW5mbyBzdHJ1Y3R1cmUuCgkobG9vcF91bnJvbGxfZmFjdG9yKTogUmVwbGFjZSBnbG9iYWwgYXJyYXkgYnkgZWxlbWVudCBpbgoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KClRodSBOb3YgMjYgMTc6NDk6MjkgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBVcGRhdGUgSlVNUF9MQUJFTCBmaWVsZCBvZiBqdW1wIGluc24KCXdoZW4gbG9vcCByZXZlcnNlZC4KCgkqIHVucm9sbC5jIChwcmVjb25kaXRpb25fbG9vcF9wKTogUmV0dXJuIGxvb3BfaW5pdGlhbF92YWx1ZQoJZm9yIGluaXRpYWxfdmFsdWUgaW5zdGVhZCBvZiBsb29wX2l0ZXJhdGlvbl92YXIuCgpUaHUgTm92IDI2IDE3OjE1OjM4IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiBGaXggbWlub3IgZm9ybWF0dGluZyBwcm9ibGVtcy4gIFVwZGF0ZSBkb2NzLgoJKCpiLCAqYl9yZXYsICpiX25vb3YsICpiX25vb3ZfcmV2LCAqZGIsIAoJZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybywgcnB0Yl9lbmQpOiBVc2UgYzR4X291dHB1dF9jYnJhbmNoCgl0byBvdXRwdXQgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlcy4KCShycHRzKTogRGVsZXRlLgoJKHJwdGJfdG9wKTogUHJvdmlkZSBhbHRlcm5hdGl2ZXMgdG8gdXNlIGFueSByZWdpc3RlciBvciBtZW1vcnkKCWZvciBsb29wIGNvdW50ZXIuCgkocnB0Yl9lbmQpOiAgRW1pdCB1c2Ugb2Ygb3BlcmFuZHMgcmF0aGVyIHRoYW4gYXNzaWduaW5nIHRoZW0KCWV4cGxpY2l0bHkgdG8gdGhlIFJTIGFuZCBSRSByZWdpc3RlcnMuCgpUaHUgTm92IDI2IDE2OjM3OjU5IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9tb2RpZmllZF9iZXR3ZWVuX3AsIGM0eF9tZW1fc2V0X3AsCiAJYzR4X21lbV9zZXRfcCwgYzR4X21lbV9tb2RpZmllZF9iZXR3ZWVuX3AsIGM0eF9pbnNuX21vdmVhYmxlX3AsCgljNHhfcGFyYWxsZWxfcGFjaywgYzR4X3BhcmFsbGVsX2ZpbmQsIGM0eF91cGRhdGVfaW5mb19yZWcsCgljNHhfdXBkYXRlX2luZm9fcmVncywgYzR4X2NvcHlfaW5zbl9hZnRlciwgYzR4X2NvcHlfaW5zbnNfYWZ0ZXIsIAoJYzR4X21lcmdlX25vdGVzLCBjNHhfcGFyYWxsZWxfcHJvY2VzcywgCgljNHhfY29tYmluZV9wYXJhbGxlbF9pbmRlcGVuZGVudCwgYzR4X2NvbWJpbmVfcGFyYWxsZWxfZGVwZW5kZW50LAoJYzR4X2NvbWJpbmVfcGFyYWxsZWwpOiBEZWxldGUuCgpUaHUgTm92IDI2IDE1OjE2OjA1IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IChjNHhfb3ZlcnJpZGVfb3B0aW9ucyk6IEZvciBjb21wYXRpYmlsaXR5Cgl3aXRoIG9sZCB0YXJnZXQgb3B0aW9ucyBjbGVhciBmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWcgaWYKCS1tbm8tcnB0YiBzcGVjaWZpZWQgYW5kIHNldCBmbGFnX2FyZ3VtZW50X2FsaWFzIGlzIC1tbm8tYWxpYXNlcwoJc3BlY2lmaWVkLgoJKGM0eF9vdXRwdXRfY2JyYW5jaCk6IEhhbmRsZSBhIHNlcXVlbmNlIG9mIGluc25zIHJhdGhlciB0aGFuIGEKIAlzaW5nbGUgaW5zbi4KCShjNHhfcnB0Yl9pbnNlcnQpOiBEbyBub3QgZW1pdCBhIFJQVEIgaW5zbiBpZiB0aGUgUkMgcmVnaXN0ZXIKCWhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgYXMgdGhlIGxvb3AgY291bnRlci4KCShjNHhfYWRkcmVzc19jb25mbGljdCk6IERvIG5vdCBhbGxvdyB0d28gdm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMuCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNCwgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSwKIAl2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc182KTogUmVqZWN0IHBhdHRlcm4gaWYgdGhlIHJlZ2lzdGVyIGRlc3RpbmF0aW9uCglvZiB0aGUgZmlyc3Qgc2V0IGlzIHVzZWQgYXMgcGFydCBvZiBhbiBhZGRyZXNzIGluIHRoZSBzZWNvbmQgc2V0LgoKVGh1IE5vdiAyNiAxNDo1NjozMiAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5oIChUQVJHRVRfREVGQVVMVCk6IEFkZCBQQVJBTEVMX01QWV9GTEFHLgoJKFRBUkdFVF9TTUFMTF9SRUdfQ0xBU1MpOiBTZXQgdG8gMCBzbyB0aGF0IFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMKCWlzIG5vIGxvbmdlciBlbmFibGVkIGlmIFBBUkFMTEVMX01QWV9GTEFHIHNldC4KCShIQVJEX1JFR05PX0NBTExfQ0xPQkJFUkVEKTogQWRkIHBhcmVudGhlc2VzIHRvIHJlbW92ZSBhbWJpZ3VpdHkuCgkoUkVHX0NMQVNTX0NPTlRFTlRTKTogQWRkIGJyYWNlcyBhcm91bmQgaW5pdGlhbGl6ZXJzLgoJKEhBVkVfTVVMVElQTEVfUEFDSyk6IERlZmluZS4KCShBU01fT1VUUFVUX0JZVEVfRkxPQVQpOiBVc2UgJWxmIGZvcm1hdCBzcGVjaWZpZXIgd2l0aCAKCVJFQUxfVkFMVUVfVE9fREVDSU1BTC4KCShBU01fT1VUUFVUX1NIT1JUX0ZMT0FUKTogVXNlICVsZiBmb3JtYXQgc3BlY2lmaWVyIHdpdGggCglSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwuCgkoYXIwX3JlZ19vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KCShhcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcnhfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShub3RfcmNfcmVnKTogTGlrZXdpc2UuCgkobm90X21vZGlmeV9yZWcpOiBMaWtld2lzZS4KCShjNHhfZ3JvdXAxX3JlZ19vcGVyYW5kKTogUmVtb3ZlIHByb3RvdHlwZS4KCShjNHhfZ3JvdXAxX21lbV9vcGVyYW5kKTogTGlrZXdpc2UuCgkoYzR4X2FyeF9yZWdfb3BlcmFuZCk6IExpa2V3aXNlLgoKV2VkIE5vdiAyNSAxOTowMjo1NSAxOTk4ICAoU3RlcGhlbiBMIE1vc2hpZXIpIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CgoJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBSZW1vdmUgZWFybGllciBjaGFuZ2UuCgkqIHJlYWwuYyAobWFrZV9uYW4pOiBNYWtlIFNJR04gYXJnIGFjdHVhbGx5IHNwZWNpZnkgdGhlIHNpZ24gYml0LgoKVGh1IE5vdiAyNiAxNDoxMjowNSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoYWRkcWkzKTogRW1pdCBhZGRxaTNfbm9jbG9iYmVyIHBhdHRlcm4KCWR1cmluZyByZWxvYWQuCgpXZWQgTm92IDI1IDIyOjA1OjI4IDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNvbmZpZy9zaC9saWIxZnVuY3MuYXNtIChfX191ZGl2c2kzX2k0KTogRG9uJ3Qgc3dpdGNoIHRvIHN6ID09IDEKCXVubGVzcyBGTU9WRF9XT1JLUyBpcyBkZWZpbmVkLgoKV2VkIE5vdiAyNSAyMDoxMTowNCAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdjbGFzcy5jIChpbml0X3JlZ19zZXRzKTogTW92ZSBjb2RlIHRoYXQgY2FsY3VsYXRlcyB0YWJsZXMKCWRlcGVuZGVudCBvbiByZWdfY2xhc3NfY29udGVudHMgZnJvbSBoZXJlLi4uCgkoaW5pdF9yZWdfc2V0c18xKTogVG8gaGVyZS4KCldlZCBOb3YgMjUgMTQ6NTQ6NDYgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCiAgICAgICAgKiBjcHBsaWIuaDogRGVsZXRlIHN0cnVjdCBpbXBvcnRfZmlsZS4gIEFkZCBpaGFzaCBlbGVtZW50IHRvCiAgICAgICAgc3RydWN0IGNwcF9idWZmZXIuICBEZWxldGUgZG9udF9yZXBlYXRfZmlsZXMgYW5kCiAgICAgICAgaW1wb3J0X2hhc2hfdGFibGUgZWxlbWVudHMgZnJvbSBjcHBfcmVhZGVyOyBjaGFuZ2UKICAgICAgICBhbGxfaW5jbHVkZV9maWxlcyB0byBhIGhhc2ggdGFibGUuICBEZWxldGUgYWxsIGZvb2Jhcl9pbmNsdWRlCiAgICAgICAgLyBsYXN0X2Zvb2Jhcl9pbmNsdWRlIGVsZW1lbnRzIGZyb20gc3RydWN0IGNwcF9vcHRpb25zOyBwdXQKICAgICAgICBiYWNrIGZvdXIgc3VjaDogcXVvdGVfaW5jbHVkZSwgYnJhY2tldF9pbmNsdWRlLAogICAgICAgIHN5c3RlbV9pbmNsdWRlLCBhZnRlcl9pbmNsdWRlLiAgUmVkbyBzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QKICAgICAgICBjb21wbGV0ZWx5LiAgQWRkIG5ldyBzdHJ1Y3R1cmUgdHlwZSBpbmNsdWRlX2hhc2guICBBZGQKICAgICAgICBwcm90b3R5cGVzIGZvciBtZXJnZV9pbmNsdWRlX2NoYWlucyBhbmQgaW5jbHVkZV9oYXNoLiAgQ2hhbmdlCiAgICAgICAgcHJvdG90eXBlcyBmb3IgZmluY2x1ZGUsIGZpbmRfaW5jbHVkZV9maWxlLCBhbmQKICAgICAgICBhcHBlbmRfaW5jbHVkZV9jaGFpbiB0byBtYXRjaCBjaGFuZ2VzIGJlbG93LgoKICAgICAgICAqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lLCBpbmNsdWRlX2hhc2gsCiAgICAgICAgcmVtYXBfZmlsZW5hbWUsIG1lcmdlX2luY2x1ZGVfY2hhaW5zKTogTmV3IGZ1bmN0aW9ucy4KICAgICAgICAoYWRkX2ltcG9ydCwgbG9va3VwX2ltcG9ydCwgb3Blbl9pbmNsdWRlX2ZpbGUpOiBSZW1vdmVkLgogICAgICAgIChJTk9fVF9FUSk6IERlZmluZSB0aGlzIChjb3BpZWQgZnJvbSBjY2NwLmMpLgogICAgICAgIChoYWNrX3Ztc19pbmNsdWRlX3NwZWNpZmljYXRpb24pOiBSZW1vdmUgYWxsIGNhbGxzIGFuZCAjaWYgMAogICAgICAgIG91dCB0aGUgZGVmaW5pdGlvbi4gIEl0IHdhcyBiZWluZyBjYWxsZWQgaW5jb3JyZWN0bHkgYW5kIGF0CiAgICAgICAgdGhlIHdyb25nIHRpbWVzLiAgVW50aWwgYSBWTVNpZSBjYW4gbG9vayBhdCB0aGlzLCBpdCdzIGJldHRlcgogICAgICAgIHRvIG5vdCBwcmV0ZW5kIHRvIHN1cHBvcnQgaXQuCiAgICAgICAgKGFwcGVuZF9pbmNsdWRlX2NoYWluKTogQ2hhbmdlIGNhbGxpbmcgY29udmVudGlvbjsgbm93IHRha2VzCiAgICAgICAgb25seSBvbmUgZGlyZWN0b3J5IGF0IGEgdGltZSwgYW5kIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlCiAgICAgICAgaXRzZWxmLgogICAgICAgIChyZWR1bmRhbnRfaW5jbHVkZV9wKTogUmV3cml0dGVuIC0gdGhpcyBpcyBub3cgdXNlZCBmb3IgYWxsCiAgICAgICAgaW5jbHVkZSByZWR1bmRhbmN5LCB3aGV0aGVyIGJ5ICNpZm5kZWYsICNpbXBvcnQsIG9yICNwcmFnbWEKICAgICAgICBvbmNlLiAgTG9va3MgdXAgdGhpbmdzIGluIHRoZSBpbmNsdWRlIGhhc2ggdGFibGUuCiAgICAgICAgKGZpbGVfY2xlYW51cCk6IERlY3JlbWVudCBwZmlsZS0+c3lzdGVtX2luY2x1ZGVfZGVwdGggaGVyZSBpZgogICAgICAgIGl0J3MgPjAuCiAgICAgICAgKGZpbmRfaW5jbHVkZV9maWxlKTogQ2FsbGluZyBjb252ZW50aW9uIGNoYW5nZWQ7IG5vdyBwYXNzZXMKICAgICAgICBhcm91bmQgYSBzdHJ1Y3QgaW5jbHVkZV9oYXNoIGluc3RlYWQgb2YgMyBzZXBhcmF0ZSBwYXJhbWV0ZXJzLgogICAgICAgIEd1dHMgcmlwcGVkIG91dCBhbmQgcmVwbGFjZWQgd2l0aCBuZXcgaW5jbHVkZV9oYXNoIG1lY2hhbmlzbS4KICAgICAgICAoZmluY2x1ZGUpOiBDYWxsaW5nIGNvbnZlbnRpb24gY2hhbmdlZCBhcyBmb3IKICAgICAgICBmaW5kX2luY2x1ZGVfZmlsZS4gIEVycm9yIGV4aXRzIHB1bGxlZCBvdXQtb2YtbGluZS4gIFJlZm9ybWF0LgogICAgICAgIChzYWZlX3JlYWQpOiBSZXR1cm4gYSBsb25nLCBub3QgYW4gaW50LgogICAgICAgIChkZXBzX291dHB1dCk6IERvbid0IHJlY3Vyc2UuCgogICAgICAgICogY3BwbGliLmMgKGlzX3N5c3RlbV9pbmNsdWRlKTogRGVsZXRlZC4KICAgICAgICAocGF0aF9pbmNsdWRlKTogRml4IHVwIGNhbGwgdG8gYXBwZW5kX2luY2x1ZGVfY2hhaW4uCiAgICAgICAgKGRvX2luY2x1ZGUpOiBGaXggdXAgY2FsbHMgdG8gZmluZF9pbmNsdWRlX2ZpbGUgYW5kIGZpbmNsdWRlLgogICAgICAgIENsZWFuIHVwIGRlcGVuZGVuY3kgb3V0cHV0IGEgYml0LiAgU2hvcnRlbiBvYm5veGlvdXNseSBsZW5ndGh5CiAgICAgICAgI2ltcG9ydCB3YXJuaW5nIG1lc3NhZ2UuICBEb24ndCBkZWNyZW1lbnQKICAgICAgICBwZmlsZS0+c3lzdGVtX2luY2x1ZGVfZGVwdGggaGVyZS4KICAgICAgICAoZG9fcHJhZ21hKTogVW5kZXJzdGFuZCB0aGUgaW5jbHVkZV9oYXNoIHN0cnVjdHVyZS4gIFJlZm9ybWF0LgogICAgICAgIChkb19lbmRpZik6IENvcnJlY3QgaGFuZGxpbmcgb2YgY29udHJvbCBtYWNyb3MuICBVbmRlcnN0YW5kCiAgICAgICAgdGhlIGluY2x1ZGVfaGFzaC4KICAgICAgICAoY3BwX3N0YXJ0X3JlYWQpOiBGaXggdXAgY2FsbHMgdG8gZmluY2x1ZGUuICBDYWxsCiAgICAgICAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMuCiAgICAgICAgKGNwcF9oYW5kbGVfb3B0aW9uKTogRml4IHVwIGNhbGxzIHRvIGFwcGVuZF9pbmNsdWRlX2NoYWluLgogICAgICAgIFVuZGVyc3RhbmQgdGhlIGZvdXIgcGFydGlhbCBpbmNsdWRlIGNoYWlucy4KICAgICAgICAoY3BwX2ZpbmlzaCk6IEFkZCBkZWJ1Z2dpbmcgY29kZSAoI2lmIDAtZWQgb3V0KSBmb3IgdGhlCiAgICAgICAgaW5jbHVkZV9oYXNoLgogICAgICAgIChjcHBfY2xlYW51cCk6IEZyZWUgdGhlIGluY2x1ZGVfaGFzaCwgbm90IHRoZSBpbXBvcnQgaGFzaCBhbmQKICAgICAgICB0aGUgYWxsX2luY2x1ZGUgYW5kIGRvbnRfcmVwZWF0IGxpc3RzIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KCldlZCBOb3YgMjUgMTE6MjY6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKG5vX25ld19wc2V1ZG9zKTogRGVmaW5lLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiAgU2V0IG5vX25ld19wc2V1ZG9zIGFzIG5lZWRlZC4KCSogZW1pdC1ydGwuYyAoZ2VuX3JlZ19ydHgpOiBBYm9ydCBpZiB3ZSB0cnkgdG8gY3JlYXRlIGEgbmV3IHBzZXVkbwoJaWYgbm9fbmV3X3BzZXVkb3MgaXMgc2V0LgoJKiBydGwuaCAobm9fbmV3X3BzZXVkb3MpOiBEZWNsYXJlIGl0LgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFVwZGF0ZSBjb21tZW50cy4KCSogbWQudGV4aTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKV2VkIE5vdiAyNSAxMToyNjoxNyAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWxvYWQxLmMgKHJlZ191c2VkX2luX2luc24pOiBSZW5hbWVkIGZyb20gcmVnX3VzZWRfYnlfcHNldWRvLgoJKGNob29zZV9yZWxvYWRfcmVncyk6IFJlbmFtZSBpdCBoZXJlIGFzIHdlbGwuICBXaGVuIGNvbXB1dGluZyBpdCwKCWFsc28gbWVyZ2UgaW4gdXNlZCBoYXJkcmVncy4KCjE5OTgtMTEtMjUgMDc6NTEgLTA1MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBnY2MuYzogU3BsaXQgb3V0IE9iamVjdGl2ZS1DIHNwZWNzIHRvLi4uCgkqIG9iamMvbGFuZy1zcGVjcy5oOiBoZXJlLiAoTmV3IGZpbGUuKSBNYWtlIHRoZSBzcGVjcyBjcHBsaWIKCWF3YXJlLgoKCSogYy1sZXguYyAoaW5pdF9wYXJzZSk6IEFsd2F5cyBpbml0aWFsaXplIHRoZSBmaWxlbmFtZSBnbG9iYWwuCgkqIG9iamMvb2JqYy1hY3QuYyAobGFuZ19pbml0KTogQWx3YXlzIGNhbGwgY2hlY2tfbmV3bGluZSBhdAoJYmVnaW5uaW5nIG9mIGZpbGUuCgpXZWQgTm92IDI1IDAwOjQ4OjI5IDE5OTggIEdyYWhhbSAgPGdyYWhhbXNAcmNwLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoJKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6IEFkZCBtaXNzaW5nIHBhcmFtZXRlciBkZWZpbml0aW9uLgoKCSoganVtcC5jIChqdW1wX29wdGltaXplKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCldlZCBOb3YgMjUgMDA6MDc6MTEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGdyYXBoLm8pOiBEZXBlbmQgb24gJChSVExfSCksIG5vdCBydGwuaC4KCgkqIGNzZS5jIChmb2xkX3J0eCk6IE1ha2UgYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nIG1vZGUgdGVzdHMgYmUKCXJ1bnRpbWUgc2VsZWN0YWJsZS4KCSogZXhwci5jIChtb3ZlX2J5X3BpZWNlcyk6IFNpbWlsYXJseS4KCShtb3ZlX2J5X3BpZWNlc18xLCBjbGVhcl9ieV9waWVjZXMsIGNsZWFyX2J5X3BpZWNlc18xKTogU2ltaWxhcmx5LgoJKiBmbG93LmMgKGZpbmRfYXV0b19pbmMpOiBTaW1pbGFybHkuCgkodHJ5X3ByZV9pbmNyZW1lbnQpOiBTaW1pbGFybHkuCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogU2ltaWxhcmx5LgoJKiByZWdjbGFzcy5jIChhdXRvX2luY19kZWNfcmVnX3ApOiBTaW1pbGFybHkuCgkqIHJlZ21vdmUuYyAodHJ5X2F1dG9faW5jcmVtZW50KTogU2ltaWxhcmx5LgoJKGZpeHVwX21hdGNoXzEpOiBTaW1pbGFybHkuCgkqIHJ0bC5oIChIQVZFX1BSRV9JTkNSRU1FTlQpOiBEZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCShIQVZFX1BSRV9ERUNSRU1FTlQpOiBTaW1pbGFybHkuCgkoSEFWRV9QT1NUX0lOQ1JFTUVOVCwgSEFWRV9QT1NUX0RFQ1JFTUVOVCk6IFNpbWlsYXJseS4KCSogQ29ycmVzcG9uZGluZyBjaGFuZ2VzIHRvIGFsbCB0YXJnZXQgaGVhZGVyIGZpbGVzLgoJKiB0bS50ZXhpOiBVcGRhdGUgZG9jcyBmb3IgYXV0b2luYyBhZGRyZXNzaW5nIG1vZGVzLgoKVHVlIE5vdiAyNCAyMDoyNDo1OSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKG02ODAyMC0qLWVsZiosIG02OGstKi1lbGYqKTogTmV3IHRhcmdldHMuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCSogY29uZmlnL2VsZm9zLmg6IE5ldyBmaWxlLgoJKiBjb25maWcvbTY4ay9tNjgwMjAtZWxmLmgsIGNvbmZpZy9tNjhrL202OGtlbGYuaCwKCWNvbmZpZy9tNjhrL3QtbTY4a2VsZjogTmV3IGZpbGUuCgkKVHVlIE5vdiAyNCAxMzo0MDowNiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoSE9TVF9BUik6IERlZmluZS4KCShIT1NUX0FSX0ZMQUdTLCBIT1NUX1JBTkxJQiwgSE9TVF9SQU5MSUJfVEVTVCk6IFNpbWlsYXJseS4KCShsaWJjcHAuYSk6IFVzZSB0aGUgaG9zdCB0b29scyBleHBsaWNpdGx5LgoJKFNUQUdFU1RVRkYpOiBBZGQgbGliY3BwLmEuCgpUdWUgTm92IDI0IDA5OjMzOjQ5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTMyci9tMzJyLm1kIChtb3ZzdHJzaV9pbnRlcm5hbCk6IERlc2NyaWJlIGNoYW5nZXMgbWFkZQoJdG8gc291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpc3RlcnMuCgpNb24gTm92IDIzIDIwOjI4OjAyIDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGxpYmdjYzIuYyAodG9wX2VsdCk6IFJlbW92ZSB0b3BfZWx0LCBpdCBpc24ndCB0aHJlYWQgc2FmZS4KCVRoZSBzdHJhdGVneSB3ZSBub3cgdXNlIGlzIHRvIHByZSBhbGxvY2F0ZSB0aGUgdG9wX2VsdCBhbG9uZwoJd2l0aCB0aGUgRUggY29udGV4dCBzbyB0aGF0IGVhY2ggdGhyZWFkIGhhcyBpdHMgb3duIHRvcF9lbHQuCglUaGlzIGlzIG5lY2Vzc2FyeSBhcyB0aGUgZHlubWFuaWMgY2xlYW51cCBjaGFpbiBpcyB1c2VkIG9uIHRoZQoJdG9wIGVsZW1lbnQgb2YgdGhlIHN0YWNrIGFuZCBlYWNoIHRocmVhZCBNVVNUIGhhdmUgaXRzIG93bi4KCShlaF9jb250ZXh0X3N0YXRpYyk6IExpa2V3aXNlLgoJKG5ld19laF9jb250ZXh0KTogTGlrZXdpc2UuCgkoX19zanRocm93KTogTGlrZXdpc2UuCgpNb24gTm92IDIzIDIwOjI1OjAzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGkzODYvbGludXguaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IFdyYXAgaW4gZG8uLi53aGlsZS4KCSogaTM4Ni5tZCAocHJvbG9ndWVfZ2V0X3BjKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCk1vbiBOb3YgMjMgMTc6MDU6NDAgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYveG0tY3lnd2luLmg6IFJlbmFtZSBjeWd3aW5fIHBhdGggZnVuY3MgYmFjayB0byBjeWd3aW4zMl8uCgpNb24gTm92IDIzIDE2OjQwOjAwIDE5OTggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKICAgICAgICAqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGdyYXBoLm8KICAgICAgICAoZ3JhcGgubyk6IE5ldyBkZXBlbmRlbmN5IGxpc3QuCiAgICAgICAgKiBmbGFncy5oOiBEZWNsYXJlIGR1bXBfZm9yX2dyYXBoIGFuZCBkZWZpbmUgZ3JhcGhfZHVtcF90eXBlcyB0eXBlLgogICAgICAgICogcHJpbnQtcnRsLmMgKGR1bXBfZm9yX2dyYXBoKTogRGVmaW5lIG5ldyB2YXJpYWJsZS4KICAgICAgICAocHJpbnRfcnR4KTogUmV3cml0ZSB0byBhbGxvdyB1c2UgaW4gZ3JhcGggZHVtcGluZyBmdW5jdGlvbnMuCiAgICAgICAgKiB0b3BsZXYuYzogRGVjbGFyZSBwcmludF9ydGxfZ3JhcGhfd2l0aF9iYiwgY2xlYW5fZ3JhcGhfZHVtcF9maWxlLAogICAgICAgIGZpbmlzaF9ncmFwaF9kdW1wX2ZpbGUuCiAgICAgICAgRGVmaW5lIGdyYXBoX2R1bXBfZm9ybWF0LgogICAgICAgIChjb21waWxlX2ZpbGUpOiBJZiBncmFwaCBkdW1waW5nIGlzIGVuYWJsZWQgYWxzbyBjbGVhciB0aGVzZSBmaWxlcy4KICAgICAgICBGaW5pc2ggZ3JhcGggZHVtcCBmaWxlcy4KICAgICAgICAocmVzdF9vZl9jb21waWxhdGlvbik6IEFsc28gZHVtcCBncmFwaCBpbmZvcm1hdGlvbiBpZiBlbmFibGVkLgogICAgICAgIChtYWluKTogUmVjb2duaXplIC1kdiB0byBlbmFibGVkIFZDRyBiYXNlZCBncmFwaCBkdW1waW5nLgogICAgICAgICogZ3JhcGguYzogTmV3IGZpbGUuICBHcmFwaCBkdW1waW5nIGZ1bmN0aW9ucy4KCk1vbiBOb3YgMjMgMTY6Mzk6MDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjb25maWd1cmUuaW46IExvb2sgZm9yIDxzeXMvc3RhdC5oPi4KICAgICAgICAqIHN5c3RlbS5oOiBJbmNsdWRlIGl0IGJlZm9yZSBzdWJzdGl0dXRlIFNfSVNSRUcgZGVmaW5pdGlvbnMuCgpNb24gTm92IDIzIDE3OjQwOjM3IDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvYWJpLmg6IFVzZSBBQklfTzY0LCBkdXBsaWNhdGluZyBBQklfMzIgdXNhZ2UuCgkqIGNvbmZpZy9taXBzL2lyaXM2Lmg6IFNhbWUuCgkqIGNvbmZpZy9taXBzL21pcHMubWQ6IFNhbWUuCgkqIGNvbmZpZy9taXBzL21pcHMuYzogU2FtZTsgYWxzbyBhZGQgIi1tYWJpPW82NCIgb3B0aW9uLgoJKiBjb25maWcvbWlwcy9taXBzLmg6IFNhbWU7IGFsc28gZGVmaW5lIEFCSV9PNjQuCgpNb24gTm92IDIzIDE3OjAyOjI3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqICBjb25maWd1cmUuaW46IFVzZSBBQ19QUkVSRVEoMi4xMi4xKS4KCk1vbiBOb3YgMjMgMTA6MTY6MzggMTk5OCAgIk1lbGlzc2EgTydOZWlsbCIgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBjY2NwLmMgKFNfSVNSRUcsIFNfSVNESVIpOiBEZWxldGUgZGVmaW5lcy4KCSogY3BwbGliLmMsIGdjYy5jOiBMaWtld2lzZS4KCSogc3lzdGVtLmggKFNfSVNSRUcsIFNfSVNESVIpOiBEZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCk1vbiBOb3YgMjMgMDk6NTM6NDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvY2FsLWFsbG9jLmMgKGxvY2FsX2FsbG9jKTogVXNlIG1hbGxvYyBub3QgYWxsb2NhIGZvcgoJcmVnX3F0eSwgcmVnX29mZnNldCwgcmVmX25leHRfaW5fcXR5LgoKTW9uIE5vdiAyMyAxNjo0Njo0NiAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBjYWxsZXItc2F2ZS5jIChpbnNlcnRfb25lX2luc24pOiBJbml0aWFsaXplIHRoZSBsaXZlX2JlZm9yZSBhbmQKCWxpdmVfYWZ0ZXIgcmVnaXN0ZXIgc2V0cy4KCglBZGQgU0g0IHN1cHBvcnQ6CgoJKiBjb25maWcvc2gvbGliMWZ1bmNzLmFzbSAoX19fbW92c3RyX2k0X2V2ZW4sIF9fX21vdnN0cl9pNF9vZGQpOiBEZWZpbmUuCgkoX19fbW92c3RyU0kxMl9pNCwgX19fc2RpdnNpM19pNCwgX19fdWRpdnNpM19pNCk6IERlZmluZS4KCSogc2guYyAocmVnX2NsYXNzX2Zyb21fbGV0dGVyLCByZWdub19yZWdfY2xhc3MpOiBBZGQgREZfUkVHUy4KCShmcF9yZWdfbmFtZXMsIGFzc2VtYmxlcl9kaWFsZWN0KTogTmV3IHZhcmlhYmxlcy4KCShwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBIYW5kbGUgU1VCUkVHcy4KCShwcmludF9vcGVyYW5kKTogQWRkZWQgJ28nIGNhc2UuCglEb24ndCB1c2UgYWRqX29mZnNldHRhYmxlX29wZXJhbmQgb24gUFJFX0RFQyAvIFBPU1RfSU5DLgoJTmFtZSBvZiBGUCByZWdpc3RlcnMgZGVwZW5kcyBvbiBtb2RlLgoJKGV4cGFuZF9ibG9ja19tb3ZlKTogRW1pdCBkaWZmZXJlbnQgY29kZSBmb3IgU0g0IGhhcmR3YXJlLgoJKHByZXBhcmVfc2NjX29wZXJhbmRzKTogVXNlIGVtaXRfc2ZfaW5zbiAvIGVtaXRfZGZfaW5zbiBhcyBhcHByb3ByaWF0ZS4KCShmcm9tX2NvbXBhcmUpOiBMaWtld2lzZS4KCShhZGRfY29uc3RhbnQpOiBOZXcgYXJndW1lbnQgbGFzdF92YWx1ZS4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgkoZmluZF9iYXJyaWVyKTogRG9uJ3QgdHJ5IEhJbW9kZSBsb2FkIGZvciBGUFVMX1JFRy4KCShtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IExpa2V3aXNlLgoJKHNmdW5jX3VzZXNfcmVnKTogQSBDTE9CQkVSIGNhbm5vdCBiZSB0aGUgYWRkcmVzcyByZWdpc3RlciB1c2UuCgkoZ2VuX2Zhcl9icmFuY2gpOiBFbWl0IGEgYmFycmllciBhZnRlciB0aGUgbmV3IGp1bXAuCgkoYmFycmllcl9hbGlnbik6IERvbid0IHRydXN0IGluc3RydWN0aW9uIGxlbmd0aHMgYmVmb3JlCglmaXhpbmcgdXAgcGNsb2Fkcy4KCShtYWNoaW5lX2RlcGVuZGVudF9yZW9yZyk6IEFkZCBzdXBwb3J0IGZvciBGSVJTVF9YRF9SRUcgLi4gTEFTVF9YRF9SRUcuCglVc2UgYXV0by1pbmMgYWRkcmVzc2luZyBmb3IgZnAgcmVnaXN0ZXJzIGlmIGRvdWJsZXMgbmVlZCB0bwoJYmUgbG9hZGVkIGluIHR3byBzdGVwcy4KCVNldCBzaF9mbGFnX3JlbW92ZV9kZWFkX2JlZm9yZV9jc2UuCgkocHVzaCk6IFN1cHBvcnQgZm9yIFRBUkdFVF9GTU9WRC4gIFVzZSBnZW5fcHVzaF9mcHVsIGZvciBmcHVsLgoJKHBvcCk6IFN1cHBvcnQgZm9yIFRBUkdFVF9GTU9WRC4gIFVzZSBnZW5fcG9wX2ZwdWwgZm9yIGZwdWwuCgkoY2FsY19saXZlX3JlZ3MpOiBTdXBwb3J0IGZvciBUQVJHRVRfRk1PVkQuICBEb24ndCBzYXZlIEZQU0NSLgoJU3VwcG9ydCBmb3IgRklSU1RfWERfUkVHIC4uIExBU1RfWERfUkVHLgoJKHNoX2V4cGFuZF9wcm9sb2d1ZSk6IFN1cHBvcnQgZm9yIEZJUlNUX1hEX1JFRyAuLiBMQVNUX1hEX1JFRy4KCShzaF9leHBhbmRfZXBpbG9ndWUpOiBMaWtld2lzZS4KCShzaF9idWlsdGluX3NhdmVyZWdzKTogVXNlIERGbW9kZSBtb3ZlcyBmb3IgZnAgcmVncyBvbiBTSDQuCgkoaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQpOiBUYWtlIFRBUkdFVF9BTElHTl9ET1VCTEUgaW50byBhY2NvdW50LgoJKGFyaXRoX3JlZ19vcGVyYW5kKTogRlBVTF9SRUcgaXMgT0sgZm9yIFNINC4KCShmcF9hcml0aF9yZWdfb3BlcmFuZCwgZnBfZXh0ZW5kZWRfb3BlcmFuZCkgTmV3IGZ1bmN0aW9ucy4KCSh0ZXJ0aWFyeV9yZWxvYWRfb3BlcmFuZCwgZnBzY3Jfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGNvbW11dGF0aXZlX2Zsb2F0X29wZXJhdG9yLCBub25jb21tdXRhdGl2ZV9mbG9hdF9vcGVyYXRvcik6IExpa2V3aXNlLgoJKGJpbmFyeV9mbG9hdF9vcGVyYXRvciwgZ2V0X2Zwc2NyX3J0eCwgZW1pdF9zZl9pbnNuKTogTGlrZXdpc2UuCgkoZW1pdF9kZl9pbnNuLCBleHBhbmRfc2ZfdW5vcCwgZXhwYW5kX3NmX2Jpbm9wKTogTGlrZXdpc2UuCgkoZXhwYW5kX2RmX3Vub3AsIGV4cGFuZF9kZl9iaW5vcCwgZXhwYW5kX2ZwX2JyYW5jaCk6IExpa2V3aXNlLgoJKGVtaXRfZnBzY3JfdXNlLCBtYXJrX3VzZSwgcmVtb3ZlX2RlYWRfYmVmb3JlX2NzZSk6IExpa2V3aXNlLgoJKiBzaC5oIChDUFBfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciAtbTQsIG00LXNpbmdsZSwgbTQtc2luZ2xlLW9ubHkuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBMaWtld2lzZS4KCShIQVJEX1NINF9CSVQsIEZQVV9TSU5HTEVfQklULCBTSDRfQklULCBGTU9WRF9CSVQpOiBEZWZpbmUuCgkoVEFSR0VUX0NBQ0hFMzIsIFRBUkdFVF9TVVBFUlNDQUxBUiwgVEFSR0VUX0hBUldBUkQpOiBEZWZpbmUuCgkoVEFSR0VUX0hBUkRfU0g0LCBUQVJHRVRfRlBVX1NJTkdMRSwgVEFSR0VUX1NINCwgVEFSR0VUX0ZNT1ZEKTogRGVmaW5lLgoJKHRhcmdldF9mbGFnKTogQWRkIC1tNCwgbTQtc2luZ2xlLCBtNC1zaW5nbGUtb25seSwgLW1mbW92ZC4KCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IElmIG9wdGltaXppbmcsIHNldCBmbGFnX29taXRfZnJhbWVfcG9pbnRlcgoJdG8gLTEgYW5kIHNoX2ZsYWdfcmVtb3ZlX2RlYWRfYmVmb3JlX2NzZSB0byAxLgoJKEFTU0VNQkxFUl9ESUFMRUNUKTogRGVmaW5lIHRvIGFzc2VtYmxlcl9kaWFsZWN0LgoJKGFzc2VtYmxlcl9kaWFsZWN0LCBmcF9yZWdfbmFtZXMpOiBEZWNsYXJlLgoJKE9WRVJSSURFX09QVElPTlMpOiBBZGQgY29kZSBmb3IgVEFSR0VUX1NINC4KCUhpZGUgbmFtZXMgb2YgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhY2Nlc3NpYmxlLgoJKENBQ0hFX0xPRyk6IFRha2UgVEFSR0VUX0NBQ0hFMzIgaW50byBhY2NvdW50LgoJKExPT1BfQUxJR04pOiBUYWtlIFRBUkdFVF9IQVJXQVJEIGludG8gYWNjb3VudC4KCShGSVJTVF9YRF9SRUcsIExBU1RfWERfUkVHLCBGUFNDUl9SRUcpOiBEZWZpbmUuCgkoRklSU1RfUFNFVURPX1JFR0lTVEVSOiBOb3cgNDkuCgkoRklYRURfUkVHSVNURVJTLCBDQUxMX1VTRURfUkVHSVNURVJTKTogSW5jbHVkZSB2YWx1ZXMgZm9yIHJlZ2lzdGVycy4KCShIQVJEX1JFR05PX05SRUdTKTogU3BlY2lhbCB0cmVhdG1lbnQgb2YgRklSU1RfWERfUkVHIC4uIExBU1RfWERfUkVHLgoJKEhBUkRfUkVHTk9fTU9ERV9PSyk6IFVwZGF0ZS4KCShlbnVtIHJlZ19jbGFzcyk6IEFkZCBERl9SRUdTIGFuZCBGUFNDUl9SRUdTLgoJKFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTLCBSRUdfQUxMT0NfT1JERVIpOiBMaWtld2lzZS4KCShTRUNPTkRBUllfT1VUUFVUX1JFTE9BRF9DTEFTUywgU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUyk6IFVwZGF0ZS4KCShDTEFTU19DQU5OT1RfQ0hBTkdFX1NJWkUsIERFQlVHX1JFR0lTVEVSX05BTUVTKTogRGVmaW5lLgoJKE5QQVJNX1JFR1MpOiBFaWdodCBmbG9hdGluZyBwb2ludCBwYXJhbWV0ZXIgcmVnaXN0ZXJzIG9uIFNINC4KCShCQVNFX1JFVFVSTl9WQUxVRV9SRUcpOiBTSDQgYWxzbyBwYXNzZXMgZG91YmxlIHZhbHVlcwoJaW4gZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLgoJKEdFVF9TSF9BUkdfQ0xBU1MpIExpa2V3aXNlLgoJQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyByZXR1cm5lZCBpbiBmbG9hdCByZWdpc3RlcnMuCgkoQkFTRV9BUkdfUkVHKTogQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyBwYXNzZXMgaW4gZmxvYXQgcmVnaXN0ZXJzLgoJKEZVTkNUSU9OX1ZBTFVFKTogQ2hhbmdlIG1vZGUgbGlrZSBQUk9NT1RFX01PREUgZG9lcy4KCShMSUJDQUxMX1ZBTFVFKTogUmVtb3ZlIHRyYWlsaW5nIHNlbWljb2xvbi4KCShST1VORF9SRUcpOiBSb3VuZCB3aGVuIGRvdWJsZSBwcmVjaXNpb24gdmFsdWUgaXMgcGFzc2VkIGluIGZsb2F0aW5nCglwb2ludCByZWdpc3RlcihzKS4KCShGVU5DVElPTl9BUkdfQURWQU5DRSk6IE5vIGNoYW5nZSB3YW50ZWQgZm9yIFNINCB3aGVuIHRoaW5ncyBhcmUKCXBhc3NlZCBvbiB0aGUgc3RhY2suCgkoRlVOQ1RJT05fQVJHKTogTGl0dGxlIGVuZGlhbiBhZGp1c3RtZW50IGZvciBTSDQgU0Ztb2RlLgoJKEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTKTogWmVybyBmb3IgU0g0LgoJKFRSQU1QT0xJTkVfQUxJR05NRU5UKTogVGFrZSBUQVJHRVRfSEFSV0FSRCBpbnRvIGFjY291bnQuCgkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRW1pdCBpY19pbnZhbGlkYXRlX2xpbmUgZm9yIFRBUkdFVF9IQVJXQVJELgoJKE1PREVfRElTUF9PS184KTogTm90IGZvciBTSDQgREZtb2RlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IE5vIGJhc2UgcmVnICsgaW5kZXggcmVnIGZvciBTSDQgREZtb2RlLgoJQWxsb3cgaW5kZXhlZCBhZGRyZXNzaW5nIGZvciBQU0ltb2RlIGFmdGVyIHJlbG9hZC4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBOb3QgZm9yIFNINCBERm1vZGUuCgkoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IEhhbmRsZSBTSDNFIFNGbW9kZS4KCURvbid0IGNoYW5nZSBTSDQgREZtb2RlIG5vciBQU0ltb2RlIFJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUy4KCShET1VCTEVfVFlQRV9TSVpFKTogNjQgZm9yIFNINC4KCShSVFhfQ09TVFMpOiBBZGQgUExVUyBjYXNlLgoJSW5jcmVhZSBjb3N0IG9mIEFTSElGVCwgQVNISUZUUlQsIExTSElGVFJUIGNhc2UuCgkoUkVHSVNURVJfTU9WRV9DT1NUKTogQWRkIGhhbmRsaW5nIG9mIFIwX1JFR1MsIEZQVUxfUkVHUywgVF9SRUdTLAoJTUFDX1JFR1MsIFBSX1JFR1MsIERGX1JFR1MuCgkoUkVHSVNURVJfTkFNRVMpOiBVc2UgZnBfcmVnX25hbWVzLgoJKGVudW0gcHJvY2Vzc29yX3R5cGUpOiBBZGQgUFJPQ0VTU09SX1NINC4KCShzaF9mbGFnX3JlbW92ZV9kZWFkX2JlZm9yZV9jc2UpOiBEZWNsYXJlLgoJKHJ0eF9lcXVhbF9mdW5jdGlvbl92YWx1ZV9tYXR0ZXJzLCBmcHNjcl9ydHgsIGdldF9mcHNjcl9ydHgpOiBEZWNsYXJlLgoJKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBiaW5hcnlfZmxvYXRfb3BlcmF0b3IsCgljb21tdXRhdGl2ZV9mbG9hdF9vcGVyYXRvciwgZnBfYXJpdGhfcmVnX29wZXJhbmQsIGZwX2V4dGVuZGVkX29wZXJhbmQsCglmcHNjcl9vcGVyYW5kLCBub25jb21tdXRhdGl2ZV9mbG9hdF9vcGVyYXRvci4KCShBREpVU1RfQ09TVCk6IFVzZSBkaWZmZXJlbnQgc2NhbGUgZm9yIFRBUkdFVF9TVVBFUlNDQUxBUi4KCShTSF9EWU5BTUlDX1NISUZUX0NPU1QpOiBDaGVhcGVyIGZvciBTSDQuCgkqIHNoLm1kIChhdHRyaWJ1dGUgY3B1KTogQWRkIHZhbHVlIHNoNC4KCShhdHRyYnV0ZXMgZm1vdmQsIGlzc3Vlcyk6IERlZmluZS4KCShhdHRyaWJ1dGUgdHlwZSk6IEFkZCB2YWx1ZXMgZGZwX2FyaXRoLCBkZnBfY21wLCBkZnBfY29udiwgZGZkaXYuCgkoZnVuY3Rpb24gdW5pdHMgbWVtb3J5LCBpbnQsIG1weSwgZnApOiBNYWtlIGRlcGVuZGVudCBvbiBpc3N1ZSByYXRlLgoJKGZ1bmN0aW9uIHVuaXRzIGlzc3VlLCBzaW5nbGVfaXNzdWUsIGxvYWRfc2ksIGxvYWQpOiBEZWZpbmUuCgkoZnVuY3Rpb24gdW5pdHMgbG9hZF9zdG9yZSwgZmRpdiwgZ3BfZnB1bCk6IERlZmluZS4KCShhdHRyaWJ1dGUgaGl0X3N0YWNrKTogUHJvdmlkZSBwcm9wZXIgZGVmYXVsdC4KCSh1c2Vfc2Z1bmNfYWRkcisxLCB1ZGl2c2kzKTogUHJlZGljYXRlZCBvbiAhIFRBUkdFVF9TSDQuCgkodWRpdnNpM19pNCwgdWRpdnNpM19pNF9zaW5nbGUsIGRpdnNpM19pNCwgZGl2c2kzX2k0X3NpbmdsZSk6IE5ldyBpbnNucy4KCSh1ZGl2c2kzLCBkaXZzaTMpOiBFbWl0IHNwZWNpYWwgcGF0dGVybnMgZm9yIFNINCBoYXJkd2FyZSwKCShtdWxzaTNfY2FsbCk6IE5vdyB1c2VzIG1hdGNoX29wZXJhbmQgZm9yIGZ1bmN0aW9uIGFkZHJlc3MuCgkobXVsc2kzKTogQWxzbyBlbWl0IGNvZGUgZm9yIFNIMSBjYXNlLiAgV3JhcCByZXN1bHQgaW4gUkVHX0xJQkNBTEwgLwoJUkVHX1JFVFZBTCBub3Rlcy4KCShwdXNoLCBwb3AsIHB1c2hfZSwgcG9wX2UpOiBOb3cgZGVmaW5lX2V4cGFuZHMuCgkocHVzaF9mcHVsLCBwdXNoXzQsIHBvcF9mcHVsLCBwb3BfNCwgaWNfaW52YWxpZGF0ZV9saW5lKTogTmV3IGV4cGFuZGVycy4KCShtb3ZzaV9pZSk6IEFkZGVkIHkvaSBhbHRlcm5hdGl2ZS4KCShpY19pbnZhbGlkYXRlX2xpbmVfaSwgbW92ZGZfaTQpOiBOZXcgaW5zbnMuCgkobW92ZGZfaTQrWzEyM10sIHJlbG9hZF9vdXRkZitbMTIzNDVdLCBtb3ZzaV95K1sxMl0pOiBOZXcgc3BsaXR0ZXJzLgoJKHJlbG9hZF9pbmRmLCByZWxvYWRfb3V0ZGYsIHJlbG9hZF9vdXRzZiwgcmVsb2FkX2luc2kpOiBOZXcgZXhwYW5kZXJzLgoJKG1vdmRmKTogQWRkIHNwZWNpYWwgY29kZSBmb3IgU0g0LgoJKG1vdnNmX2llLCBtb3ZzZl9pZSsxLCByZWxvYWRfaW5zZiwgY2FsbGkpOiBNYWtlIHVzZSBvZiBmcHNjciB2aXNpYmxlLgoJKGNhbGxfdmFsdWVpLCBjYWxsaSwgY2FsbF92YWx1ZSk6IExpa2V3aXNlLgoJKG1vdnNmKTogRW1pdCBuby1vcCBtb3ZlLgoJKG1vdl9ub3AsIG1vdnNpX3kpOiBOZXcgaW5zbnMuCgkoYmx0LCBzZ2UpOiBnZW5lcmFsaXplIHRvIGhhbmRsZSBERm1vZGUuCgkocmV0dXJuIHByZWRpY2F0ZSk6IENhbGwgZW1pdF9mcHNjcl91c2UgYW5kIHJlbW92ZV9kZWFkX2JlZm9yZV9jc2UuCgkoYmxvY2tfbW92ZV9yZWFsLCBibG9ja19sdW1wX3JlYWwpOiBQcmVkaWNhdGUgb24gISBUQVJHRVRfSEFSRF9TSDQuCgkoYmxvY2tfbW92ZV9yZWFsX2k0LCBibG9ja19sdW1wX3JlYWxfaTQsIGZwdV9zd2l0Y2gpOiBOZXcgaW5zbnMuCgkoZnB1X3N3aXRjaDAsIGZwdV9zd2l0Y2gxLCBtb3Zwc2kpOiBOZXcgZXhwYW5kZXJzLgoJKGZwdV9zd2l0Y2grWzEyXSwgZml4X3RydW5jc2ZzaTJfaTRfMisxKTogTmV3IHNwbGl0dGVycy4KCSh0b2dnbGVfc3opOiBOZXcgaW5zbi4KCShhZGRzZjMsIHN1YnNmMywgbXVsc2YzLCBkaXZzZjMpOiBOb3cgZGVmaW5lX2V4cGFuZHMuCgkoYWRkc2YzX2ksIHN1YnNmM19pLCBtdWxzZjNfaTQsIG11bHNmM19pZSwgZGl2c2YzX2kpOiBOZXcgaW5zbnMuCgkobWFjc2YzKTogTWFrZSB1c2Ugb2YgZnBzY3IgdmlzaWJsZS4gIERpc2FibGUgZm9yIFNINC4KCShmbG9hdHNpc2YyKTogTWFrZSB1c2Ugb2YgZnBzY3IgdmlzaWJsZS4KCShmbG9hdHNpc2YyX2k0KTogTmV3IGluc24uCgkoZmxvYXRzaXNmMl9pZSwgZml4c2ZzaSwgY21wZ3RzZl90LCBjbXBlcXNmX3QpOiBEaXNhYmxlIGZvciBTSDQuCgkoaWVlZV9jY21wZXFzZl90KTogTGlrZXdpc2UuCgkoZml4X3RydW5jc2ZzaTIpOiBFbWl0IGRpZmZlcmVudCBjb2RlIGZvciBTSDQuCgkoZml4X3RydW5jc2ZzaTJfaTQsIGZpeF90cnVuY3Nmc2kyX2k0XzIsIGNtcGd0c2ZfdF9pNCk6IE5ldyBpbnNucy4KCShjbXBlcXNmX3RfaTQsIGllZWVfY2NtcGVxc2ZfdF80KTogTmV3IGluc25zLgoJKG5lZ3NmMiwgc3FydHNmMiwgYWJzc2YyKTogTm93IGV4cGFuZGVycy4KCShhZGRkZjMsIHN1YmRmM2ksIG11bGRmMiwgZGl2ZGYzLCBmbG9hdHNpZGYyKTogTmV3IGV4cGFuZGVycy4KCShuZWdzZjJfaSwgc3FydHNmMl9pLCBhYnNzZjJfaSwgYWRkZGYzX2ksIHN1YmRmM19pKTogTmV3IGluc25zLgoJKG11bGRmM19pLCBkaXZkZjNfaSwgZmxvYXRzaWRmMl9pLCBmaXhfdHJ1bmNkZnNpMl9pKTogTmV3IGluc25zLgoJKGZpeF90cnVuY2Rmc2kyLCBjbXBkZiwgbmVnZGYyLCBzcXJ0ZGYyLCBhYnNkZjIpOiBOZXcgZXhwYW5kZXJzLgoJKGZpeF90cnVuY2Rmc2kyX2k0LCBjbXBndGRmX3QsIGNtcGVxZGZfdCwgaWVlZV9jY21wZXFkZl90KTogTmV3IGluc25zLgoJKGZpeF90cnVuY2Rmc2kyX2k0XzIrMSk6IE5ldyBzcGxpdHRlcnMuCgkobmVnZGYyX2ksIHNxcnRkZjJfaSwgYWJzZGYyX2ksIGV4dGVuZHNmZGYyX2k0KTogTmV3IGluc25zLgoJKGV4dGVuZHNmZGYyLCB0cnVuY2Rmc2YyKTogTmV3IGV4cGFuZGVycy4KCSh0cnVuY2Rmc2YyX2k0KTogTmV3IGluc24uCgkqIHQtc2ggKExJQjFBU01GVU5DUyk6IEFkZCBfbW92c3RyX2k0LCBfc2RpdnNpM19pNCwgX3VkaXZzaTNfaTQuCgkoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtNC1zaW5nbGUtb25seS9tNC1zaW5nbGUvbTQuCgkqIGZsb2F0LXNoLmg6IFdoZW4gdGVzdGluZyBmb3IgX19TSDNFX18sIGFsc28gdGVzdCBmb3IKCV9fU0g0X1NJTkdMRV9PTkxZX18gLgoJKiB2YS1zaC5oIChfX3ZhX2ZyZWcpOiBEZWZpbmUgdG8gZmxvYXQuCgkoX192YV9ncmVnLCBfX2ZhX2ZyZWcsIF9fZ251Y192YV9saXN0LCB2YV9zdGFydCk6CiAgICAgICAgRGVmaW5lIGZvciBfX1NINF9TSU5HTEVfT05MWV9fIGxpa2UgZm9yIF9fU0gzRV9fIC4KICAgICAgICAoX19QQVNTX0FTX0ZMT0FULCBfX1RBUkdFVF9TSDRfUCk6IExpa2V3aXNlLgoJKF9fUEFTU19BU19GTE9BVCk6IFVzZSBkaWZmZXJlbnQgZGVmaW5pdGlvbiBmb3IgX19TSDRfXyBhbmQKCSBfX1NINF9TSU5HTEVfXy4KCShUQVJHRVRfU0g0X1ApOiBEZWZpbmUuCgkodmFfYXJnKTogVXNlIGl0LgoKCSogc2gubWQgKG1vdmRmX2ssIG1vdnNmX2kpOiBUd2VhayB0aGUgY29uZGl0aW9uIHNvIHRoYXQKCWluaXRfZXhwcl9vbmNlIGlzIHNhdGlzZmllZCBhYm91dCB0aGUgZXhpc3RlbmNlIG9mIGxvYWQgLyBzdG9yZSBpbnNucy4KCgkqIHNoLm1kIChtb3ZzaV9pLCBtb3ZzaV9pZSwgbW92c2lfaV9sb3dwYXJ0LCBtb3ZzZl9pLCBtb3ZzZl9pZSk6CiAgICAgICAgY2hhbmdlIG0gY29uc3RyYWludCBpbiBzb3VyY2Ugb3BlcmFuZCB0byBtciAvIG1mIC4KCgkqIHZhLXNoLmggKF9fdmFfYXJnX3NoMSk6IFVzZSBfX2FzbSBpbnN0ZWFkIG9mIGFzbS4KCgkqIChfX1ZBX1JFRUYpOiBEZWZpbmUuCgkoX192YV9hcmdfc2gxKTogVXNlIGl0LgoKCSogdmEtc2guaCAodmFfc3RhcnQsIHZhX2FyZywgdmFfY29weSk6IEFkZCBwYXJlbnRlc2VzLgoKU3VuIE5vdiAyMiAyMTozNDowMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L2RndXguYyAoc3RydWN0IG9wdGlvbik6IEFkZCBuZXcgImRlc2NyaXB0aW9uIGZpZWxkIi4KCSogbTg4ay9tODhrLmMgKHN0cnVjdCBvcHRpb24pOiBMaWtld2lzZS4KClN1biBOb3YgMjIgMTY6MDc6NTcgUFNUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gTm92IDIyIDEzOjQwOjAyIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9wcm9maXRhYmxlX3ApOiBVc2UgcmV0dXJuIHZhbHVlIG9mIGZpbmRfbWF0Y2hlcwoJcHJvcGVybHkuCgpTdW4gTm92IDIyIDAyOjQ3OjM3IFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IE5vdiAyMSAyMjoxMjowOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRG8gbm90IGxvc2UgaWYgZWxpbWluYXRlX3JlZ3MgaXMgY2FsbGVkCgl3aXRob3V0IHJlbG9hZCBoYXZpbmcgYmVlbiBjYWxsZWQgZWFybGllci4KCgkqIHY4NTAuYyAoZXBfbWVtb3J5X29wZXJhbmQpOiBPZmZzZXRzIDwgMCBhcmUgbm90IHZhbGlkIGZvciBFUAoJYWRkcmVzc2luZyBtb2Rlcy4KCSh2ODUwX3Jlb3JnKTogU2ltaWxhcmx5LgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBBdm9pZCB1c2luZyBnZW5fYWRkMl9pbnNuLgoKU2F0IE5vdiAyMSAwMjoxODozOCAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBTdGFydCBvZiBsaWJjYWxsIG1pZ2h0IGJlIG5ldyBsb29wIHN0YXJ0LgoKRnJpIE5vdiAyMCAxMjoxNDoxNiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBoYXNoLmMgKGhhc2hfdGFibGVfaW5pdF9uKTogV3JhcCBwcm90b3R5cGUgYXJndW1lbnRzIGluIFBBUkFNUygpLgoKRnJpIE5vdiAyMCAwODozNDowMCAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZ1bmN0aW9uLmMgKG5vbmxvY2FsX2dvdG9faGFuZGxlcl9zbG90cyk6IFJlbmFtZWQgZnJvbQoJbm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3Q7IG5vdyBhbiBFWFBSX0xJU1QgY2hhaW4uCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvKTogQWRqdXN0IGZvciB0aGlzIGNoYW5nZS4KCShwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogTGlrZXdpc2UuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IExpa2V3aXNlLgoJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogTGlrZXdpc2UuCgkqIGV4cHIuaCAobm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3RzKTogUmVuYW1lIGl0cyBkZWNsYXJhdGlvbi4KCSogc3RtdC5jIChkZWNsYXJlX25vbmxvY2FsX2xhYmVsKTogTWFrZSBhIG5ldyBoYW5kbGVyIHNsb3QgZm9yIGVhY2gKCWxhYmVsLgoJKGV4cGFuZF9nb3RvKTogV2hlbiBkb2luZyBhIG5vbmxvY2FsIGdvdG8sIGZpbmQgY29ycmVzcG9uZGluZyBoYW5kbGVyCglzbG90IGZvciBpdC4gIERvbid0IHB1dCB0aGUgbGFiZWwgYWRkcmVzcyBpbiB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyLgoJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBCcmVhayBvdXQgbm9ubG9jYWwgZ290byBoYW5kbGluZyBjb2RlIGludG8KCXRocmVlIG5ldyBmdW5jdGlvbnMuCgkoZXhwYW5kX25sX2hhbmRsZXJfbGFiZWwsIGV4cGFuZF9ubF9nb3RvX3JlY2VpdmVyLAoJZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMsIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9lbmRfYmluZGluZ3MgYW5kIGFkYXB0ZWQgdG8gY3JlYXRlIG9uZSBoYW5kbGVyIHBlciBub25sb2NhbAoJbGFiZWwuCgkqIGZ1bmN0aW9uLmMgKGRlbGV0ZV9oYW5kbGVycyk6IERlbGV0ZSBpbnNuIGlmIGl0IHJlZmVyZW5jZXMgYW55IG9mCgl0aGUgbm9ubG9jYWwgZ290byBoYW5kbGVyIHNsb3RzLgoJKiBpOTYwLm1kIChub25sb2NhbF9nb3RvKTogQ29tbWVudCBvdXQgY29kZSB0aGF0IG1vZGlmaWVzCglzdGF0aWNfY2hhaW5fcnR4LgoJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IExpa2V3aXNlLgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OSk6IENvbW1lbnQgb3V0LgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OV9zcDY0KTogQ29tbWVudCBvdXQuCgpUaHUgTm92IDE5IDIzOjQ0OjM4IDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogZXhwci5jIChTVEFDS19CWVRFUyk6IERlbGV0ZSB1bnVzZWQgbWFjcm8uCgkqIGNhbGxzLmM6IFByb3ZpZGUgZGVmYXVsdCBmb3IgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLgoJKFNUQUNLX0JZVEVTKTogVXNlIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSwgbm90IFNUQUNLX0JPVU5EQVJZLgoJKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCgkoZW1pdF9saWJyYXJ5X2NhbGwpOiBMaWtld2lzZS4KCShlbWl0X2xpYnJhcnlfY2FsbF92YWx1ZSk6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCShTVEFDS19CWVRFUyk6IFVzZSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlksIG5vdCBTVEFDS19CT1VOREFSWS4KCSogZXhwbG93LmM6IFByb3ZpZGUgZGVmYXVsdCBmb3IgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLgoJKHJvdW5kX3B1c2gpOiBVc2UgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLCBub3QgU1RBQ0tfQk9VTkRBUlkuCgkoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IExpa2V3aXNlLgoJKiB0bS50ZXhpIChQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkpOiBEb2N1bWVudCBuZXcgbWFjcm8uCgkoU1RBQ0tfQk9VTkRBUlkpOiBVcGRhdGUgZGVzY3JpcHRpb24gdG8gcmVmbGVjdCB0aGUgbmV3IHNpdHVhdGlvbi4KClRodSBOb3YgMTkgMjI6MjA6NTEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYyAocmVsYXhfZGVsYXlfc2xvdHMpOiBXaGVuIG9wdGltaXppbmcgZm9yIGNvZGUgc2l6ZSwgaWYgYQoJcmV0dXJuIHdpdGggYSBmaWxsZWQgZGVsYXkgc2xvdCBpcyBmb2xsb3dlZCBieSBhIHJldHVybiB3aXRoIGFuCgl1bmZpbGxlZCBkZWxheSBzbG90LCBkZWxldGUgdGhlIGZpcnN0IHJldHVybiBhbmQgcmVlbWl0IHRoZSBpbnNuCgl0aGF0IHdhcyBwcmV2aW91c2x5IGluIGl0cyBkZWxheSBzbG90LgoKCSogaTg2MC5jIChzaW5nbGVfaW5zbl9zcmNfcCk6IEFkZCBtaXNzaW5nIHBhcmVucy4KCSogZ2luY2x1ZGUvbWF0aC0zMzAwLmg6IExpa2V3aXNlLgoKVGh1IE5vdiAxOSAyMDo1NTo1OSAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiByZWdjbGFzcy5jIChpbml0X3JlZ19zZXRzXzEpOiBBZGQgcHJvdG90eXBlLgoJKGluaXRfcmVnX21vZGVzKTogTGlrZXdpc2UuCgoxOTk4LTExLTE5IFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjLWNvbW1vbi5jOiBDaGFuZ2Ugd2FybmluZyBtZXNzYWdlcyB0byBzYXkgYGNvbXBhcmlzb24gaXMKCWFsd2F5cyB0cnVlJyBvciBgY29tcGFyaXNvbiBpcyBhbHdheXMgZmFsc2UnIGluc3RlYWQgb2YgdGhlCgljb25mdXNpbmcgYGlzIGFsd2F5cyAwJywgYGlzIGFsd2F5cyAxJy4KClRodSBOb3YgMTkgMTk6MDU6NDkgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwcmludC10cmVlLmMgKHByaW50X25vZGUpOiAgQWZ0ZXIgcHJpbnRpbmcgQkxPQ0sgb3IgQklORF9FWFBSLAoJYnJlYWsgaW5zdGVhZCBvZiByZXR1cm4gKHdoaWNoIGxvc2VzIGNsb3NpbmcgJz4nKS4KClRodSBOb3YgMTkgMTk6MzQ6MTMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5oIChMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBSZWplY3QgQ09OU1RfRE9VQkxFcyB0aGF0IGFyZSBub3QKCXN0YW5kYXJkIDM4NyBjb25zdGFudHMuCgoJKiBpMzg2Lm1kIChqdW1wKTogRXhwbGljaXRseSBzZXQgIm1lbW9yeSIgYXR0cmlidXRlLgoJKGluZGlyZWN0X2p1bXAsIHByb2xvZ3VlX3NldF9zdGFja19wdHIpOiBMaWtld2lzZS4KCShwcm9sb2d1ZV9nZXRfcGNfYW5kX3NldF9nb3QsIHBvcCk6IExpa2V3aXNlLgoJKGFsbG9jYXRlX3N0YWNrX3dvcmRlciwgYmxvY2thZ2UsIHJldHVybl9pbnRlcm5hbCk6IExpa2V3aXNlLgoJKHJldHVybl9wb3BfaW50ZXJuYWwsIG5vcCk6IExpa2V3aXNlLgoJKGVwaWxvZ3VlX3NldF9zdGFja19wdHIsIGxlYXZlKTogTGlrZXdpc2UuCgpUaHUgTm92IDE5IDE1OjQyOjU0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2NvZmYuaDogU2V0IFVTRVJfTEFCRUxfUFJFRklYIHRvICJfIi4KClRodSBOb3YgMTkgMjM6MjA6NTkgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfZm9yX3ZhbHVlX3ApOgoJRWFybHkgYXV0b19pbmMgcmVsb2FkcyBkb24ndCBjb25mbGljdCB3aXRoIG91dHB1dHMuCgpUaHUgTm92IDE5IDEyOjU4OjU1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgZG8gQUNfQ0hFQ0tfSEVBREVSUyh3YWl0Lmggc3lzL3dhaXQuaCkuCglJbnN0ZWFkIGNhbGwgQUNfSEVBREVSX1NZU19XQUlULgoKCSogY29sbGVjdDIuYzogRG9uJ3QgcHJvdmlkZSBkZWZhdWx0cyBmb3Igc3lzL3dhaXQuaCBtYWNyb3MuCgkqIGdjYy5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuICBBbHNvLCBkb24ndCBpbmNsdWRlIHN5cy93YWl0LmguCgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBzeXMvd2FpdC5oIGFuZCBwcm92aWRlIG1hY3JvIGRlZmF1bHRzLgoKMTk5OC0xMS0xOSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogTWFrZWZpbGUuaW4gKG1hbmRpcik6IFNldCB0byBAbWFuZGlyQC4KCShtYW4xZGlyKTogTmV3IHZhcmlhYmxlIHRvIGhvbGQgdGhlIGZvcm1lciB2YWx1ZSBvZiAkKG1hbmRpcikuCglSZXBsYWNlIGFsbCB1c2VzIG9mICQobWFuZGlyKSBieSAkKG1hbjFkaXIpLgoKV2VkIE5vdiAxOCAxNjozMToyOCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX2FkZHJlc3NfcGFydCk6IElmIGhhdmUgYSBDT05TVF9JTlQsIGNyZWF0ZQoJYSBuZXcgb25lIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGZvcmNlX2NvbnN0X21lbS4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogUGFzcyAmeCBpbnN0ZWFkIG9mIE5VTExfUFRSIGluCglmaW5kX3JlbG9hZHNfYWRkcmVzcyBjYWxsLgoKV2VkIE5vdiAxOCAyMjoxMzowMCAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBEb24ndCBnZW5lcmF0ZSBsb2FkLXN0b3JlIHBhaXIKCWlmIFRFTVAgaXMgaWRlbnRpY2FsIChhY2NvcmRpbmcgdG8gPT0pIHdpdGggVEFSR0VULgoKVHVlIE5vdiAxNyAyMjoyNToxNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6IFdoZW4gY29uc2lkZXJlZCByZWxvYWQKCWhhcyBhbiBvdXRwdXQsIG1hdGNoaW5nIGlucHV0cyBhcmUgbm90IHN1ZmZpY2llbnQgdG8gYXZvaWQgY29uZmxpY3QuCgpUdWUgTm92IDE3IDExOjUxOjE2IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBoYXNoLmggKGhhc2hfdGFibGVfa2V5KTogTmV3IHR5cGUuCgkoaGFzaF9lbnRyeSk6IENoYW5nZSBgc3RyaW5nJyBmaWVsZCB0byBnZW5lcmljIGBrZXknLgoJKGhhc2hfdGFibGUpOiBBZGQgYGNvbXAnIGFuZCBgaGFzaCcgZnVuY3Rpb25zLgoJKGhhc2hfdGFibGVfaW5pdCk6IFRha2UgdGhlbSBhcyBpbnB1dC4KCShoYXNoX3RhYmxlX2luaXRfbik6IExpa2V3aXNlLgoJKGhhc2hfbG9va3VwKTogTW9kaWZ5IGZvciBnZW5lcmljIGtleXMuCgkoaGFzaF9uZXdmdW5jKTogTGlrZXdpc2UuCgkoaGFzaF90cmF2ZXJzZSk6IExpa2V3aXNlLgoJKHN0cmluZ19oYXNoKTogTmV3IGZ1bmN0aW9uLgoJKHN0cmluZ19jb21wYXJlKTogTGlrZXdpc2UuCgkoc3RyaW5nX2NvcHkpOiBMaWtld2lzZS4KCSogaGFzaC5jIChoYXNoX3RhYmxlX2luaXRfbik6IE1vZGlmeSBmb3IgZ2VuZXJpYyBrZXlzLgoJKGhhc2hfdGFibGVfaW5pdCk6IExpa2V3aXNlLgoJKGhhc2hfbG9va3VwKTogTGlrZXdpc2UuCgkoaGFzaF9uZXdmdW5jKTogTGlrZXdpc2UuCgkoaGFzaF90cmF2ZXJzZSk6IExpa2V3aXNlLgoJKHN0cmluZ19oYXNoKTogU3BsaXQgb3V0IGZyb20gaGFzaF9sb29rdXAuCgkoc3RyaW5nX2NvbXBhcmUpOiBOZXcgZnVuY3Rpb24uCgkoc3RyaW5nX2NvcHkpOiBTcGxpdCBvdXQgZnJvbSBoYXNoX2xvb2t1cC4KCSogdGxpbmsuYyAoc3ltYm9sX2hhc2hfbmV3ZnVuYyk6IE1vZGlmeSBmb3IgbmV3IGludGVyZmFjZXMgdG8gaGFzaAoJdGFibGVzLgoJKHN5bWJvbF9oYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGZpbGVfaGFzaF9uZXdmdW5jKTogTGlrZXdpc2UuCgkoZmlsZV9oYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlZF9oYXNoX25ld2Z1bmMpOiBMaWtld2lzZS4KCShkZW1hbmdsZWRfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCSh0bGlua19pbnQpOiBMaWtld2lzZS4KCShyZWFkX3JlcG9fZmlsZSk6IExpa2V3aXNlLgoJKHJlY29tcGlsZV9maWxlcyk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX25ld19zeW1ib2xzKTogTGlrZXdpc2UuCgkoc2Nhbl9saW5rZXJfb3V0cHV0KTogTGlrZXdpc2UuCgkKVHVlIE5vdiAxNyAxNzoxMzo1MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmbG93LmMgKGluc25fZGVhZF9wKTogTmV3IGFyZ3VtZW50IE5PVEVTLiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KCk1vbiBOb3YgMTYgMTc6NTY6MDcgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKG91dHB1dF9taV90aHVuayk6IEltcHJvdmUgdGVzdCBmb3IgbG9jYWwgYnJhbmNoLgoKTW9uIE5vdiAxNiAxNzo1NjowNyAxOTk4ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByczYwMDAuYyAob3V0cHV0X21pX3RodW5rKTogQ29ycmVjdCB0ZXN0IGZvciBhZ2dyZWdhdGUgdmFsdWVzLgoKTW9uIE5vdiAxNiAyMTowMjo1MiAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCk6IERlbGV0ZS4KCUNoYW5nZWQgYWxsIGNhbGxlcnMgdG8gdXNlIHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCBpbnN0ZWFkLgoJKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6IEhhbmRsZSBtb3JlIHJlbG9hZCB0eXBlcy4KCUEgUkVMT0FEX0ZPUl9JTlBVVCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggaXRzCglSRUxPQURfRk9SX0lOUFVUX0FERFJFU1MgLyBSRUxPQURfRk9SX0lOUEFERFJfQUREUkVTUy4KCUFkZCBzcGVjaWFsIGNhc2UgZm9yIE9VVCA9PSBjb25zdDBfcnR4LgoJQWRkZWQgaWdub3JlX2FkZHJlc3NfcmVsb2FkcyBhcmd1bWVudC4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgpNb24gTm92IDE2IDAyOjIyOjI5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBEb24ndCBwZWR3YXJuIGFib3V0IHVuZGVmaW5lZCBzdGF0aWMKCWZ1bmN0aW9ucyBqdXN0IGJlY2F1c2Ugd2UgcGFzc2VkIC1XdW51c2VkLgoKTW9uIE5vdiAxNiAwNDo0MTo0MSAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFVuc2hhcmUgcnRsIGNyZWF0ZWQgYnkKCXN0b3JlX2JpdF9maWVsZC4KCk1vbiBOb3YgMTYgMDQ6MjM6MDYgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnbW92ZS5jIChyZWdtb3ZlX29wdGltaXplKTogRG9uJ3QgZG8gYW55dGhpbmcgYnV0CglvcHRpbWl6ZV9yZWdfY29weVsxMjNdIHdoZW4gZmxhZ19yZWdtb3ZlIGlzIG5vdCBzZXQuCgpTYXQgTm92IDE0IDE1OjA1OjA3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoYWRkc2kzLCBzdWJzaTMpOiBSZXZpc2UgNSBOb3YgY2hhbmdlIHRvIHN0b3JlIERJbW9kZQoJdmFsdWUgaW4gcGFyYWRveGljYWwgU0ltb2RlIHJlc3VsdCwgcmF0aGVyIHRoYW4gdHJ1bmNhdGluZyBtaWRwb2ludC4KCkZyaSBOb3YgMTMgMjI6MTk6MjMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKHJlZ19ub3RfZWxpbV9vcGVyYW5kKTogTmV3LgoJKiBhbHBoYS5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgaXQuCgkqIGFscGhhLm1kIChzNDhhZGRxLCBzNDhzdWJxIHBhdHRlcm5zKTogVXNlIGl0IGFzIHRoZSBwcmVkaWNhdGUKCWZvciB0aGUgbXVsdGlwbGljYW5kLgoKRnJpIE5vdiAxMyAyMjo1MDozNyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdnNmKTogUmVtb3ZlIGV4cGxpY2l0IHNlY29uZGFyeS1yZWxvYWQtbGlrZQoJZnVuY3Rpb25hbGl0eS4gIE9ubHkgdHJ1bmNhdGUgU0Ztb2RlIHN0b3JlIGlmIGluIEZQUi4KCShtb3ZzZiBzcGxpdHRlcnMpOiBDb21iaW5lIGNvbnN0X2RvdWJsZSBzcGxpdHRlcnMuCgkobW92c2ZfaGFyZGZsb2F0KTogQWRkIEdQUiBzdXBwb3J0LgoKRnJpIE5vdiAxMyAxMTowMjoxMSAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIHNwbGV0LmggKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogTmV3IHRvCglkZXByZWNhdGUgLW1saXZlLWcwIGFuZCAtbWJyb2tlbi1zYXZlcmVzdG9yZS4KCSogdC1zcGxldCAoTVVMVElMSUJfT1BUSU9OUyk6IExpa2V3aXNlLgoJCgkqIHNwYXJjLmMgKHNwYXJjX2ZsYXRfY29tcHV0ZV9mcmFtZV9zaXplKTogQ29ycmVjdGx5IGNhbGMgYXJnc19zaXplCglpbiBhIGxlYWYgZnVuY3Rpb24uICBDbGFyaWZ5IHRvdGFsX3NpemUvZXh0cmFfc2l6ZSByZWxhdGlvbnNoaXAuCgpUaHUgTm92IDEyIDE5OjIwOjU3IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBpMzg2L2N5Z3dpbjMyLmFzbTogRGVsZXRlLgoJKiBpMzg2L2N5Z3dpbi5hc206IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuYXNtLgoJKiBpMzg2L2N5Z3dpbjMyLmg6IERlbGV0ZS4KCSogaTM4Ni9jeWd3aW4uaDogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSBjeWd3aW4zMi5oLgoJKiBpMzg2L3QtY3lnd2luMzI6IERlbGV0ZS4KCSogaTM4Ni90LWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB0LWN5Z3dpbjMyLiAgSW5jbHVkZQoJY3lnd2luLmFzbSBpbnN0ZWFkIG9mIGN5Z3dpbjMyLmFzbS4gIFJlbW92ZSAiMzIiIGZyb20gY29tbWVudC4KCSogaTM4Ni94LWN5Z3dpbjMyOiBEZWxldGUuCgkqIGkzODYveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogaTM4Ni94bS1jeWd3aW4zMjogRGVsZXRlLgoJKiBpMzg2L3htLWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB4bS1jeWd3aW4zMi4gIFVzZSBuZXdseQoJcmVuYW1lZCBjeWd3aW5fIGZ1bmNzIGZvciBwYXRoIHRyYW5zbGF0aW9ucy4KCSogaTM4Ni93aW4zMi5oOiBEZWZpbmUgX19DWUdXSU5fXyB3aGVuIC1tY3lnd2luIGdpdmVuLgoJKiBpMzg2L3dpbm50LmM6IFJlbW92ZSAiMzIiIGZyb20gY29tbWVudCBhYm91dCBjeWd3aW4uCgkqIGkzODYvbWluZ3czMi5oOiBGaXggcmVmZXJlbmNlcyB0byBjeWd3aW4zMi5oIGluIGxpZ2h0IG9mIGFib3ZlLgoJKiByczYwMDAvY3lnd2luMzIuaDogRGVsZXRlLgoJKiByczYwMDAvY3lnd2luLmg6IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuaC4gIEFkZAoJLURfX0NZR1dJTl9fIHRvIENQUF9QUkVERUZJTkVTLgoJKiByczYwMDAveC1jeWd3aW4zMjogRGVsZXRlLgoJKiByczYwMDAveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogcnM2MDAwL3htLWN5Z3dpbjMyOiBEZWxldGUuCgkqIHJzNjAwMC94bS1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geG0tY3lnd2luMzIuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBjeWd3aW4qIGluc3RlYWQgb2YgY3lnd2luMzIuICBBY2NvdW50Cglmb3IgdGhlIHJlbmFtZSBvZiBjeWd3aW4tcmVsYXRlZCBjb25maWcgZmlsZXMgdG8gbG9zZSB0aGUgIjMyInMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYywgY29sbGVjdDIuYywgZ2NjLmMsIGdldHB3ZC5jLCBsaWJnY2MyLmMsIHByb3RvaXplLmMsCgl0b3BsZXYuYzogQ2hhbmdlIGFsbCByZWZzIHRvIF9fQ1lHV0lOMzJfXyB0byBfX0NZR1dJTl9fLgoKV2VkIE5vdiAxMSAxMjoyNToxOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQUdDKTogTmV3IG1hY3JvLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIC0tZW5hYmxlLWphdmEtZ2MgYXJndW1lbnQuICBTdWJzdAoJYEpBVkFHQycgdmFyaWFibGUuCgpUaHUgTm92IDEyIDAzOjMyOjE2IDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCglIYW5kbGUgZXF1aXZhbGVuY2VzIHRoYXQgaGF2ZSBiZWVuIG9ic2N1cmVkIGJ5IGdjc2U6CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEhhbmRsZSBlcXVpdmFsZW5jZXMgc2V0IHVwIGluIG11bHRpcGxlIHBsYWNlcy4KCSogbG9jYWwtYWxsb2MuYyAocmVnX2VxdWl2X2luaXRfaW5zbnMpOiBOZXcgdmFyaWFibGUuCgkobm9fZXF1aXYpOiBOZXcgZnVuY3Rpb24uCgkodXBkYXRlX2VxdWl2X3JlZ3MpOiBIYW5kbGUgZXF1aXZhbGVuY2VzIHNldCB1cCBpbiBtdWx0aXBsZSBwbGFjZXMuCglEb24ndCBpZ25vcmUgYW4gaW5zbiBqdXN0IGJlY2F1c2UgaXRzIGRlc3RpbmF0aW9uIGlzIGxpa2VseSB0byBiZQoJc3BpbGxlZC4KCldlZCBOb3YgMTEgMTM6NDY6MTMgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9laF9yZXR1cm4pOiBSZWFkZCBmb3JjZV9vcGVyYW5kIGNhbGwgbG9zdCBpbgoJU2VwdCAxNSBjaGFuZ2UuCgpUdWUgTm92IDEwIDE3OjA0OjExIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChMRUdJVElNSVpFX0FERFJFU1MpOiBBZGQgbWlzc2luZyBnb3RvIG9uIGxhc3QgY2FzZS4KCjE5OTgtMTEtMDkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGRieG91dC5jOiBDaGVjayBIQVZFX1NUQUJfSCBpbnN0ZWFkIG9mIEhBVkVfU1RBQlNfSC4KCk1vbiBOb3YgIDkgMjA6MTU6MTkgMTk5OCAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWdtb3ZlLmMgKHJlZ21vdmVfb3B0aW1pemUpOiBGaXggZXJyb3IgaW4gbGFzdCBjaGFuZ2UuCgpNb24gTm92ICA5IDE2OjM3OjUyIDE5OTggIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIG1pcHMuYyAoZnVuY3Rpb25fcHJvbG9ndWUpOiBXaGVuIFRBUkdFVF9NSVBTMTYsIGFkanVzdCB0aGUgcmVnaXN0ZXIKCW9mZnNldCBpbiB0aGUgLm1hc2sgcHNldWRvIHRvIGNvbXBlbnNhdGUgZm9yIGZyYW1lIHBvaW50ZXIgYWRqdXN0bWVudHMuCgkobWlwczE2X2ZwX2FyZ3MsIGJ1aWxkX21pcHMxNl9jYWxsX3N0dWIpOiBGb3IgbGl0dGxlIGVuZGlhbiwgZG8gbm90Cgl3b3JkIHN3YXAgYXJndW1lbnRzIG1vdmVkIHRvL2Zyb20gRlAgcmVnaXN0ZXJzLgoJKiBtaXBzMTYuUyAoREZSRVZDTVApOiBSZXZlcnNlIGFyZ3VtZW50cyB0byBPUENPREUuCgkKTW9uIE5vdiA5IDA5OjQ3OjA2IFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiA5IDAyOjE0OjE0IFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAgOSAwMzowNjoyNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKGRlbGV0ZV9vdXRwdXRfcmVsb2FkX2luc24pOiBJZiBhIHBzZXVkbyBpcyBzZXQgbXVsdGlwbGUKCXRpbWVzLCB0aGVuIGl0IGNhbiBub3QgYmUgY29tcGxldGVseSByZXBsYWNlZC4KCk1vbiBOb3YgIDkgMDA6Mzk6MDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChjYWxsLCBjYWxsX3ZhbHVlKSBbT1NGXTogQ29ycmVjdCBhbHQgMyBpbnNuIGxlbmd0aC4KClN1biBOb3YgIDggMTc6NTA6MzAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2Fuc2lkZWNsLmg6IFByZXBlbmQgYSAiRyIgdG8gdGhlIG1hY3JvIHdyYXBwaW5nIHRoaXMgZmlsZQoJKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlIG1hY3JvIHdyYXBwaW5nIGFuc2lkZWNsLmguKQoJSW5jbHVkZSBsaWJpYmVydHkncyBhbnNpZGVjbC5oLiAgUmVtb3ZlIGFsbCByZWR1bmRhbnQgZGVmaW5pdGlvbnMuCiAgCURlZmluZSB0aGUgUFJPVE8oKSBzdHlsZSBtYWNyb3MgaW4gdGVybXMgb2YgdGhlIFBBUkFNUygpIG9uZXMuCgoJCgkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90CglfX1NURENfXywgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KCgkqIGNjY3AuYyAoZXJyb3IpOiBMaWtld2lzZS4KCSh3YXJuaW5nKTogTGlrZXdpc2UuCgkoZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkod2FybmluZ193aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuKTogTGlrZXdpc2UuCgkocGVkd2Fybl93aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBjZXhwLnkgKGVycm9yKTogTGlrZXdpc2UuCgkocGVkd2Fybik6IExpa2V3aXNlLgoJKHdhcm5pbmcpOiBMaWtld2lzZS4KCgkqIGNvbGxlY3QyLmMgKGZhdGFsX3BlcnJvcik6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIGNvbWJpbmUuYyAoZ2VuX3J0eF9jb21iaW5lKTogTGlrZXdpc2UuCgoJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoJKGNwcF9mYXRhbCk6IExpa2V3aXNlLgoKCSogY3BwbGliLmMgKGNwcF9lcnJvcik6IExpa2V3aXNlLgoJKGNwcF93YXJuaW5nKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm4pOiBMaWtld2lzZS4KCShjcHBfZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3dhcm5pbmdfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaDogRG9uJ3QgZGVmaW5lIFBBUkFNUygpIG1hY3JvLgoKCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgoJKiBkb3ByaW50LmMgKGNoZWNraXQpOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sCiAJd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgoJKiBlbWl0LXJ0bC5jIChnZW5fcnR4KTogTGlrZXdpc2UuCgkoZ2VuX3J0dmVjKTogTGlrZXdpc2UuCgoJKiBmaW5hbC5jIChhc21fZnByaW50Zik6IExpa2V3aXNlLgoKCSogZml4LWhlYWRlci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgkoY3BwX2ZhdGFsKTogTGlrZXdpc2UuCgoJKiBnY2MuYyAoY29uY2F0KTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCShlcnJvcik6IExpa2V3aXNlLgoKCSogZ2VuYXR0ci5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuYXR0cnRhYi5jIChhdHRyX3J0eCk6IExpa2V3aXNlLgoJKGF0dHJfcHJpbnRmKTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbmNvZGVzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnZW5jb25maWcuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbmVtaXQuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbmV4dHJhY3QuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbmZsYWdzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnZW5vcGluaXQuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbm91dHB1dC5jIChmYXRhbCk6IExpa2V3aXNlLgoJKGVycm9yKTogTGlrZXdpc2UuCgoJKiBnZW5wZWVwLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnZW5yZWNvZy5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogaGFsZnBpYy5oOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sIHdoZW4KCWRlY2lkaW5nIHdoZXRoZXIgdG8gZGVjbGFyZSBgdHJlZV9ub2RlJyBhbmQgYHJ0eF9kZWYnLgoKCSogaGFzaC5oOiBEb24ndCBkZWZpbmUgc3R1ZmYgd2UgZ2V0IGZyb20gZ2Fuc2lkZWNsLmguCgoJKiBtaXBzLXRmaWxlLmM6IExpa2V3aXNlLiAgRGVmaW5lIF9fcHJvdG8oKSBpbiB0ZXJtcyBvZiBQQVJBTVMoKS4KCShmYXRhbCk6IFN3aXRjaCBvbiBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywgd2hlbiBkZWNpZGluZwoJd2hldGhlciB0byB1c2UgQU5TSSB2YXJpYWJsZSBhcmdzLgoJKGVycm9yKTogTGlrZXdpc2UuCgoJKiBwcmVmaXguYyAoY29uY2F0KTogTGlrZXdpc2UuCgoJKiBzY2FuLmg6IExpa2V3aXNlLgoKCSogc3lzdGVtLmg6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKGVycm9yX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKGVycm9yX3dpdGhfZGVjbCk6IExpa2V3aXNlLgoJKGVycm9yX2Zvcl9hc20pOiBMaWtld2lzZS4KCShlcnJvcik6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgkod2FybmluZ193aXRoX2ZpbGVfYW5kX2xpbmUpOiBMaWtld2lzZS4KCSh3YXJuaW5nX3dpdGhfZGVjbCk6IExpa2V3aXNlLgoJKHdhcm5pbmdfZm9yX2FzbSk6IExpa2V3aXNlLgoJKHdhcm5pbmcpOiBMaWtld2lzZS4KCShwZWR3YXJuKTogTGlrZXdpc2UuCgkocGVkd2Fybl93aXRoX2RlY2wpOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKHNvcnJ5KTogTGlrZXdpc2UuCgkocmVhbGx5X3NvcnJ5KTogTGlrZXdpc2UuCgoJKiB0b3BsZXYuaDogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90IF9fU1REQ19fLCB3aGVuIGRlY2lkaW5nCgl3aGV0aGVyIHRvIGRlY2xhcmUgYHRyZWVfbm9kZScgYW5kIGBydHhfZGVmJy4KCgkqIHRyZWUuYyAoYnVpbGQpOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sIHdoZW4KCWRlY2lkaW5nIHdoZXRoZXIgdG8gdXNlIEFOU0kgdmFyaWFibGUgYXJncy4KCShidWlsZF9udCk6IExpa2V3aXNlLgoJKGJ1aWxkX3BhcnNlX25vZGUpOiBMaWtld2lzZS4KClN1biBOb3YgOCAxMzoxMDo1NSBQU1QgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBOb3YgIDcgMjM6MzQ6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGxpYmNwcC5hKTogQ2hlY2sgUkFOTElCX1RFU1QgYmVmb3JlIHJ1bmluZyBSQU5MSUIuCgpTYXQgTm92ICA3IDIyOjI2OjE5IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGNvbGxlY3QyLmMgKG1haW4sIGNhc2UgJ2InKTogVXNlIGVsc2UgaWYuCgpTYXQgTm92ICA3IDE1OjM1OjI1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoaG9zdF94bV9maWxlLCBidWlsZF94bV9maWxlLCB4bV9maWxlLCB0bV9maWxlKToKCUFycmFuZ2UgdG8gaW5jbHVkZSBnYW5zaWRlY2wuaCBpbiB7aHR9Y29uZmlnLmggJiB0bS5oIGp1c3QKCWJlZm9yZSB0aGUgY29uZmlnLyBkaXJlY3RvcnkgaGVhZGVycy4KCSh0bV9maWxlX2xpc3QsIGhvc3RfeG1fZmlsZV9saXN0LCBidWlsZF94bV9maWxlX2xpc3QpOiBIYW5kbGUKICAgICAgICBnYW5zaWRlY2wuaCBpbiB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMuCgoJKiBNYWtlZmlsZS5pbiAoUlRMX0JBU0VfSCk6IERvbid0IGRlcGVuZCBvbiBnYW5zaWRlY2wuaC4KCShUUkVFX0gsIERFTUFOR0xFX0gsIFJFQ09HX0gsIFJFR1NfSCwgbGliZ2NjMi5hLCBzdG1wLW11bHRpbGliLAogCW1iY2hhci5vLCBjb2xsZWN0Mi5vLCBwZXhlY3V0ZS5vLCB2ZnByaW50Zi5vLCBzcGxheS10cmVlLm8sIGdjYy5vLAogCWdlbmNoZWNrLm8sIGNob29zZS10ZW1wLm8sIG1rc3RlbXAubywgbWtzdGVtcC5vLCBwcmVmaXgubywKIAlkeW4tc3RyaW5nLm8sIGNleHAubywgY2NjcC5vLCBjcHBtYWluLm8sIGNwcGxpYi5vLCBjcHBlcnJvci5vLAogCWNwcGV4cC5vLCBjcHBmaWxlcy5vLCBjcHBoYXNoLm8sIGNwcGFsbG9jLm8sIHNjYW4tZGVjbHMubyk6CiAJTGlrZXdpc2UuCgoJKiBjY2NwLmM6IERvbid0IGluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkqIGNleHAueTogTGlrZXdpc2UuCgkqIGNvbGxlY3QyLmM6IExpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5jOiBMaWtld2lzZS4KCSogY29uZmlnL3Y4NTAvdjg1MC5oOiBMaWtld2lzZS4KCSogY3BwYWxsb2MuYzogTGlrZXdpc2UuCgkqIGNwcGVycm9yLmM6IExpa2V3aXNlLgoJKiBjcHBleHAuYzogTGlrZXdpc2UuCgkqIGNwcGZpbGVzLmM6IExpa2V3aXNlLgoJKiBjcHBoYXNoLmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIGNwcG1haW4uYzogTGlrZXdpc2UuCgkqIGNwcHVscC5jOiBMaWtld2lzZS4KCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgkqIGRvcHJpbnQuYzogTGlrZXdpc2UuCgkqIGR5bi1zdHJpbmcuYzogTGlrZXdpc2UuCgkqIGVoLWNvbW1vbi5oOiBMaWtld2lzZS4KCSogZml4LWhlYWRlci5jOiBMaWtld2lzZS4KCSogZnJhbWUuYzogTGlrZXdpc2UuCgkqIGdjYy5jOiBMaWtld2lzZS4KCSogZ2Nvdi5jOiBMaWtld2lzZS4KCSogZ2VuLXByb3Rvcy5jOiBMaWtld2lzZS4KCSogZ2VuY2hlY2suYzogTGlrZXdpc2UuCgkqIGhhbGZwaWMuaDogTGlrZXdpc2UuCgkqIGhhc2guYzogTGlrZXdpc2UuCgkqIG1hY2htb2RlLmg6IExpa2V3aXNlLgoJKiBtYmNoYXIuYzogTGlrZXdpc2UuCgkqIHByZWZpeC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHJlY29nLmg6IExpa2V3aXNlLgoJKiBydGwuaDogTGlrZXdpc2UuCgkqIHNjYW4tZGVjbHMuYzogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgkqIHZhcnJheS5oOiBMaWtld2lzZS4KCQpTYXQgTm92ICA3IDExOjM3OjUzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2Lm1kIChjYWxsX3ZhbHVlX3BvcCk6IElmIHdlJ3JlIG5vdCBwb3BwaW5nIGFueXRoaW5nLAoJZGVmZXIgdG8gY2FsbF92YWx1ZS4KCShjYWxsX3BvcCk6IExpa2V3aXNlIGRlZmVyIHRvIGNhbGwuCgpTYXQgTm92ICA3IDAyOjQ5OjU2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2YpOiBDbGVhciBwdXJnZV9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzCglvbmx5IGFmdGVyIHByb2Nlc3NpbmcgdGhlIHdob2xlIGZ1bmN0aW9uLgoKU2F0IE5vdiAgNyAwMDo1NDo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IElmIHdlIGNhbiBub3QgcGVyZm9ybSBhIHBhcnRpY3VsYXIgZWxpbWluYXRpb24KCXdoZW4gd2UgdGhvdWdodCB3ZSBjb3VsZCBlYXJsaWVyLCB0aGVuIHdlIG11c3QgYWx3YXlzIGl0ZXJhdGUgdGhyb3VnaAoJdGhlIGxvb3AgYXQgbGVhc3Qgb25lIG1vcmUgdGltZS4KCkZyaSBOb3YgIDYgMTk6Mzc6MzMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFkZF9vcGVyYW5kKTogU2ltcGxpZnkgdGhlIENPTlNUX0lOVCBtYXRjaC4KCShzZXh0X2FkZF9vcGVyYW5kKTogQ29ycmVjdCB0eXBvIGluIGNvbXBhcmlzb24gYnkgdXNpbmcKCUNPTlNUX09LX0ZPUl9MRVRURVJfUC4KCSogYWxwaGEubWQgKHM/YWRkcSk6IFVzZSBzZXh0X2FkZF9vcGVyYW5kIHRvIGFsbG93IHRoZSBuZWdhdGl2ZQoJY29uc3RhbnQgYWx0ZXJuYXRpdmVzIHRvIGJlIGdlbmVyYXRlZC4KCShtdWxzaTMsIG11bGRpMywgdW11bGRpM19oaWdocGFydCk6IExvb3NlbiBjb25zdHJhaW50cyB0byBhbGxvdwoJc21hbGwgY29uc3RhbnRzLCBzaW5jZSB0aGUgaHcgaW5zdHJ1Y3Rpb25zIGRvLgoKRnJpIE5vdiAgNiAyMDoxNToxOSAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiAgV2hlbiByZXdyaXRpbmcgdGhlIFNFVF9ERVNUIG9mIGEKCXByZXZpb3VzIGluc24gdG8gc3RvcmUgZGlyZWN0bHkgaW50byBvdXIgcmVsb2FkIHJlZ2lzdGVyLCBtYWtlIHN1cmUKCXRoYXQgaWYgdGhlIHNvdXJjZSBvZiB0aGUgcHJldmlvdXMgaW5zbiBpcyBhIHJlbG9hZCByZWdpc3RlciwgaXRzCglzcGlsbF9yZWdfc3RvcmUgYW5kIHNwaWxsX3JlZ19zdG9yZWRfdG8gdmFsdWVzIGFyZSBjbGVhcmVkLgoKRnJpIE5vdiAgNiAxNjozNToxMCAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGZsb2F0dW5zc2lkZjJfaW50ZXJuYWwgc3BsaXR0ZXIpOiBVc2UgYmFzZSByZWdpc3RlcgoJb3BlcmFuZCwgbm90IGhhcmQtY29kZWQgU1AuCgpGcmkgTm92ICA2IDA0OjA3OjUzIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSoganVtcC5jIChjYWxjdWxhdGVfY2FuX3JlYWNoX2VuZCk6IEZpeCB0aGlua28uCgpGcmkgTm92ICA2IDAwOjE2OjA0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogRml4IHR5cG8uCgoJKiByb21wLmggKExFR0lUSU1JWkVfQUREUkVTUyk6IEZpeCB0eXBvLgoKRnJpIE5vdiAgNiAwMDoxMDowMCAxOTk4ICBKYW4gSHViaWNrYSAoaHViaWNrYUBmcmVlc29mdC5jeikKCgkqIGkzODYubWQgKGV4dGVuZHNpZGkyKTogVXNlICMgaW4gdGhlIG91dHB1dCB0ZW1wbGF0ZS4KCShleHRlbmRzaWRpIHNwbGl0dGVycyk6IE5ldyBzcGxpdHRlcnMuCgpUaHUgTm92ICA1IDExOjEzOjI3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFVzZSB1bmtub3duLWVsZi5oIGFzIHRtX2ZpbGUgZm9yIGFybS1lbGYKCWNvbmZpZ3VhcmlvbnMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KClRodSBOb3YgIDUgMDc6NTk6MDUgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBqdW1wLmMgKGluaXRfbGFiZWxfaW5mbywgZGVsZXRlX2JhcnJpZXJfc3VjY2Vzc29ycywKCW1hcmtfYWxsX2xhYmVscywgZGVsZXRlX3VucmVmZXJlbmNlZF9sYWJlbHMsCglkZWxldGVfbm9vcF9tb3ZlcywgY2FsY3VsYXRlX2Nhbl9yZWFjaF9lbmQpOiBOZXcgZnVuY3Rpb25zIGJyb2tlbgoJb3V0IG9mIGp1bXBfb3B0aW1pemUuCgkoanVtcF9vcHRpbWl6ZSk6IFVzZSB0aGVtLgoKVGh1IE5vdiAgNSAwNzo1Nzo0NSBFU1QgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9maXh1cF9yZWdpb25fZW5kKTogTWFrZSBzdXJlIG91dGVyIGNvbnRleHQgbGFiZWxzCglhcmUgbm90IGlzc3VlZCBpbiBhbiBpbm5lciBjb250ZXh0IGR1cmluZyBjbGVhbnVwcy4KClRodSBOb3YgIDUgMDQ6MDM6MDYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChhZGRzaTMsIHN1YnNpMyk6IE5vIG5ldyB0ZW1wb3JhcmllcyBvbmNlIGNzZSBpcwoJbm8gbG9uZ2VyIGV4cGVjdGVkLgoKVGh1IE5vdiAgNSAwMzoyOToxOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGFkZHNpMywgc3Vic2kzKTogRXhwYW5kIHRvIGEgREltb2RlIHRlbXBvcmFyeSBzbyBhcwoJdG8gZXhwb3NlIHRoaXMgbWlkcG9pbnQgdG8gQ1NFLgoKVGh1IE5vdiAgNSAwMzo0Mjo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGZfY29uc3RfaW50cmVnX3NwNjQpOiBFbmFibGUgYWdhaW4uCgpUaHUgTm92ICA1IDEwOjUzOjAxIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQnJpbmcgb3ZlciBnY2MyIGNoYW5nZSBvZiBOb3YgMTkgMTk5Ny4KCldlZCBOb3YgIDQgMjM6NDM6MDggMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgogICAgICAgICogdG9wbGV2LmMgKG91dHB1dF9sYW5nX2lkZW50aWZ5KTogTWFrZSBkZWZpbml0aW9uIGRlcGVuZGVudCBvbgoJQVNNX0lERU5USUZZX0xBTkdVQUdFLgoKICAgICAgICAqIHByaW50LXJ0bC5jIChzcGFjZXMpOiBNYWtlIHN0YXRpYy4KCldlZCBOb3YgIDQgMjI6MTY6MzYgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGV4dGVuZC50ZXhpOiBDbGFyaWZ5IHByb3BlciB1c2VzIGZvciByZWdpc3RlciBjbG9iYmVycyBpbiBhc21zLgoKV2VkIE5vdiAgNCAyMjoxNjozNiAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlY29nLmggKGVudW0gb3BfdHlwZSk6IERlZmluZS4KCShjb25zdHJhaW5fb3BlcmFuZHMpOiBBZGp1c3QgcHJvdG90eXBlLgoJKHJlY29nX29wX3R5cGUpOiBEZWNsYXJlIG5ldyB2YXJpYWJsZS4KCSogcmVjb2cuYyAocmVjb2dfb3BfdHlwZSk6IE5ldyB2YXJpYWJsZS4KCShpbnNuX2ludmFsaWRfcCk6IEFsbG93IG1vZGlmeWluZyBhbiBhc20gc3RhdGVtZW50IGFmdGVyIHJlbG9hZC4KCShleHRyYWN0X2luc24pOiBTZXQgdXAgcmVjb2dfb3BfdHlwZS4KCShjb25zdHJhaW5fb3BlcmFuZHMpOiBMb3NlIElOU05fQ09ERV9OVU0gYXJnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCURvbid0IGNvbXB1dGUgb3BlcmFuZCB0eXBlcywgdXNlIHJlY29nX29wX3R5cGUuCglVc2UgdGhlIGluZm9ybWF0aW9uIGNvbXB1dGVkIGJ5IGV4dHJhY3RfaW5zbiBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cwoJbWV0aG9kIG9mIGZpbmRpbmcgaXQgYnkgaW5zbiBjb2RlIG51bWJlci4KCSogY2FsbGVyLXNhdmUuYyAoaW5pdF9jYWxsZXJfc2F2ZSk6IFVzZSBleHRyYWN0X2luc24sIG5vdCBpbnNuX2V4dHJhY3QuCgkqIHJlb3JnLmMgKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogTGlrZXdpc2UuCgkoZ2VuX3JlbG9hZCk6IExpa2V3aXNlLgoJKGluY19mb3JfcmVsb2FkKTogTGlrZXdpc2UuCgkocmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyk6IExpa2V3aXNlLgoJVXNlIHRoZSBpbmZvcm1hdGlvbiBjb21wdXRlZCBieSBleHRyYWN0X2luc24gaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMKCW1ldGhvZCBvZiBmaW5kaW5nIGl0IGJ5IGluc24gY29kZSBudW1iZXIuCgkqIGdlbmF0dHJ0YWIuYyAod3JpdGVfYXR0cl9jYXNlKTogR2VuZXJhdGUgY2FsbCB0byBleHRyYWN0X2luc24sIG5vdAoJaW5zbl9leHRyYWN0LgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBVc2UgZXh0cmFjdF9pbnNuLCBub3QgaW5zbl9leHRyYWN0LgoJKGNsZWFudXBfb3BlcmFuZF9zdWJyZWdzKTogVXNlIGV4dHJhY3RfaW5zbiwgbm90IGluc25fZXh0cmFjdC4KCVVzZSB0aGUgaW5mb3JtYXRpb24gY29tcHV0ZWQgYnkgZXh0cmFjdF9pbnNuIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCgltZXRob2Qgb2YgZmluZGluZyBpdCBieSBpbnNuIGNvZGUgbnVtYmVyLgoJKiByZWdtb3ZlLmMgKGZpbmRfbWF0Y2hlcyk6IExpa2V3aXNlLiAgQ2hhbmdlIG1lYW5pbmcgb2YgdGhlIHJldHVybgoJdmFsdWUgdG8gYmUgbm9uemVybyBpZiB0aGUgb3B0aW1pemF0aW9uIGNhbiBiZSBwZXJmb3JtZWQsIHplcm8gaWYKCW5vdC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglTaG9ydGVuIHNvbWUgdmFyaWFibGUgbmFtZXMgdG8gZml4IGZvcm1hdHRpbmcgcHJvYmxlbXMuCgkocmVnbW92ZV9vcHRpbWl6ZSk6IFNob3J0ZW4gc29tZSB2YXJpYWJsZSBuYW1lcyB0byBmaXggZm9ybWF0dGluZwoJcHJvYmxlbXMuCglVc2UgdGhlIGluZm9ybWF0aW9uIGNvbXB1dGVkIGJ5IGV4dHJhY3RfaW5zbiBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cwoJbWV0aG9kIG9mIGZpbmRpbmcgaXQgYnkgaW5zbiBjb2RlIG51bWJlci4KCSogcmVnY2xhc3MuYyAoc2Nhbl9vbmVfaW5zbik6IExpa2V3aXNlLgoJKHJlY29yZF9yZWdfY2xhc3Nlcyk6IERvbid0IGNvbXB1dGUgb3BlcmFuZCB0eXBlcywgdXNlIHJlY29nX29wX3R5cGUuCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBMb3NlIENPTlNUUkFJTlRTMSB2YXJpYWJsZTsgdXNlCglyZWNvZ19jb25zdHJhaW50cyBpbnN0ZWFkLgoKV2VkIE5vdiAgNCAyMTozNzo0NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBydGwuaCAoZmxvdzJfY29tcGxldGVkKTogRGVjbGFyZS4KCSogZmxvdy5jIChmbG93Ml9jb21wbGV0ZWQpOiBEZWZpbml0aW9uLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFNldCBhbmQgY2xlYXIgZmxvdzJfY29tcGxldGVkCglhcyBuZWNlc3NhcnkuCgpXZWQgTm92ICA0IDE5OjE1OjM3IDE5OTggICJNZWxpc3NhIE8nTmVpbGwiIDxvbmVpbGxAY3Muc2Z1LmNhPgoKCSogTWFrZWZpbGUuaW4gKGxpYmNwcC5hKTogUmFubGliIGxpYmNwcC5hCgoJKiBjcHB1bHAuYyAodXNlcl9sYWJlbF9wcmVmaXgpOiBJbml0aWFsaXplLgoJCldlZCBOb3YgIDQgMTk6MDc6MDggMTk5OCAgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCiAgICAgICAgKiBmbG93LmMgKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IE1hcmsgdGhlIHN0YWNrIHBvaW50ZXIgYXMgbGl2ZQogICAgICAgIGF0IGEgUkVUVVJOIGlmIGN1cnJlbnRfZnVuY3Rpb25fc3BfaXNfdW5jaGFuZ2luZyBpcyBzZXQuCgpXZWQgTm92ICA0IDE4OjE2OjI5IDE5OTggSGVybWFuIEEuSi4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4gCgoJKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBGaXhlZCBlcnJvciBpbiBPY3QgMTAgcGF0Y2guCgpXZWQgTm92ICA0IDE1OjExOjE1IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBpMzg2L2N5Z3dpbjMyLmggKE1BU0tfV0lOMzIsIE1BU0tfQ1lHV0lOLCBNQVNLX1dJTkRPV1MsIE1BU0tfRExMLAoJVEFSR0VUX1dJTjMyLCBUQVJHRVRfQ1lHV0lOLCBUQVJHRVRfV0lORE9XUywgVEFSR0VUX0RMTCk6IE5ldy4KCShTVUJUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1uby1jeWd3aW4sIC1tY3lnd2luLCBhbmQgLW1kbGwgb3B0aW9ucy4KCShDUFBfUFJFREVGSU5FUyk6IERvbid0IGRlZmluZSBfX0NZR1dJTjMyX18gaGVyZS4KCShTVEFSVEZJTEVfU1BFQyk6IEhhbmRsZSAtbWRsbCwgLW1uby1jeWd3aW4gb3B0aW9ucy4KCShDUFBfU1BFQyk6IEhhbmRsZSAtbW5vLWN5Z3dpbiBvcHRpb24uICBEZWZpbmUgX19DWVdJTl9fIGluIGFkZGl0aW9uCgl0byBfX0NZR1dJTjMyX18uCgkoTElCX1NQRUMpOiBIYW5kbGUgLW1uby1jeWdpbncgb3B0aW9uLgoJKExJTktfU1BFQyk6IEhhbmRsZSAtbWRsbC4KCldlZCBOb3YgIDQgMjI6NTY6MTQgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZpeCB0ZXN0IGZvciB1c2FnZSBieSBvdGhlciByZWxvYWQKCXRvIGhhbmRsZSBzZWNvbmRhcnkgcmVsb2FkcyBwcm9wZXJseS4KCldlZCBOb3YgIDQgMTc6MjU6MTAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogcmVsb2FkMS5jIChFTElNSU5BQkxFX1JFR1MsIE5VTV9FTElNSU5BQkxFX1JFR1MpOiBJbnRyb2R1Y2UgYW4KIAlpbnRlcm1lZGlhdGUgc3RydWN0dXJlIHdoaWNoIGhhcyBleGFjdGx5IHRoZSBtZW1iZXJzIHByb3ZpZGVkIGJ5CiAJRUxJTUlOQUJMRV9SRUdTLiAgRGVmaW5lIE5VTV9FTElNSU5BQkxFX1JFR1MgaW4gdGVybXMgb2YgdGhlCiAJc3RhdGljIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCgkKCShpbml0X2VsaW1fdGFibGUpOiBYbWFsbG9jKCkgYHJlZ19lbGltaW5hdGUnLCBhbmQgaW5pdGlhbGl6ZSBpdAogCWZyb20gdGhlIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuICBEbyB0aGUgc2FtZSBhbmFsb2dvdXMgZml4IGluCiAJdGhlIGNhc2Ugd2hlcmUgRUxJTUlOQUJMRV9SRUdTIGlzIG5vdCBkZWZpbmVkLgoKVHVlIE5vdiAgMyAyMDo1MDowMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChTRUxFQ1RfU0VDVElPTik6IEZpeCB0aGlua28uCgpUdWUgTm92ICAzIDE3OjUxOjM2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogQ29tbWVudHMgb24gbGFzdCBjaGFuZ2UuCgpUdWUgTm92ICAzIDA3OjUxOjQzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uYyAoYWRkX2NvbnN0YW50KTogV2hlbiB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYW4gaXRlbSBpbiB0aGUKCXBvb2wsIGdldCB0aGUgbW9kZSBvZiB0aGUgaXRlbSBhZGRyZXNzZWQuCgoJKiBhcm0uYyAoZmluYWxfcHJlc2Nhbl9pbnNuIGNhc2UgSU5TTik6IElmIGFuIGluc24gZG9lc24ndCAKCWNvbnRhaW4gYSBTRVQgb3IgYSBQQVJBTExFTCwgZG9uJ3QgY29uc2lkZXIgaXQgZm9yIGNvbmRpdGlvbmFsCglleGVjdXRpb24uCgoJUmVzdG9yZSBBQkkgY29tcGF0aWJpbGl0eSBmb3IgTmV0QlNELgoJKiBhcm0vbmV0YnNkLmggKERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4pOiBPdmVycmlkZSBzZXR0aW5nIGluCglhcm0uaAoJKFJFVFVSTl9JTl9NRU1PUlkpOiBMaWtld2lzZS4KCk1vbiBOb3YgIDIgMTE6NDY6MTcgMTk5OCAgRG91ZyBFdmFucyAgPGRldmFuc0BjYW51Y2suY3lnbnVzLmNvbT4KCgkqIG0zMnIvbTMyci5jIChtMzJyX2V4cGFuZF9ibG9ja19tb3ZlKTogRml4IGJ5dGUgY291bnQgY29tcHV0YXRpb25zLgoJKG0zMnJfb3V0cHV0X2Jsb2NrX21vdmUpOiBSZXdyaXRlIGJ5dGVzIDwgNCBoYW5kbGluZy4KCk1vbiBOb3YgIDIgMTA6MTA6MzUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluOiBDYWxsIEFDX0ZVTkNfVkZPUksuCgoJKiBjb2xsZWN0Mi5jOiBEZWZpbmUgVkZPUktfU1RSSU5HIGFzIGEgcHJpbnRhYmxlIHN0cmluZyBmb3IKIAllcnJvciBtZXNzYWdlcyAoZWl0aGVyICJ2Zm9yayIgb3IgImZvcmsiLikgIElmIEhBVkVfVkZPUktfSCBpcwogCWRlZmluZWQsIGluY2x1ZGUgdmZvcmsuaC4gIElmIFZNUyBpcyBkZWZpbmVkLCBkZWZpbmUgdmZvcmsoKQoJYXBwcm9wcmlhdGVseS4gIFJlbW92ZSB2Zm9yayBjaGVjayBvbiBVU0csIHdlJ3JlIHVzaW5nIGF1dG9jb25mLgoJKGNvbGxlY3RfZXhlY3V0ZSk6IFBhc3MgVkZPUktfU1RSSU5HIHRvIGZhdGFsX3BlcnJvciBpbnN0ZWFkIG9mCgljaGVja2luZyBsb2NhbGx5IHdoYXQgc3RyaW5nIHRvIHBhc3MuCgkoc2Nhbl9wcm9nX2ZpbGUpOiBMaWtld2lzZS4KCShzY2FuX2xpYnJhcmllcyk6IExpa2V3aXNlLgoKCSogZ2NjLmM6IFJlbW92ZSB2Zm9yayBjaGVjayBvbiBVU0csIHdlJ3JlIHVzaW5nIGF1dG9jb25mLgoJQmVzaWRlcywgbm8gY2FsbHMgdG8gdmZvcmsvZm9yayBvY2N1ciBpbiB0aGlzIGZpbGUuCgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4KCk1vbiBOb3YgIDIgMDc6NTI6MjggMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjb25maWd1cmUuaW4gKERFRkFVTFRfTElOS0VSKTogcmVuYW1lZCBmcm9tIExECgkoREVGQVVMVF9BU1NFTUJMRVIpOiByZW5hbWVkIGZyb20gQVM7IHJldmVydGVkIFNjaHdhYidzIHBhdGNoCgkoZ2NjX2N2X2FzKTogdHJ5ICRERUZBVUxUX0FTU0VNQkxFUiBiZWZvcmUgJEFTCgkqIGNvbmZpZ3VyZTogcmVidWlsdAoKTW9uIE5vdiAgMiAwMTo0ODoxMCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIEJVR1M6IGZpeCB0aGUgcmVnZXhwIGZvciBgbW9yZScgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgbm9kZS4KCVJlcG9ydGVkIGJ5IEpvZXJnIFBpZXRzY2htYW5uICA8am9lcmdfcGlldHNjaG1hbm5AemtiLmNoPgoKCSogQlVHUzogYWRkZWQgbGluayB0byB0aGUgV1dXIEZBUQoKU3VuIE5vdiAxIDE4OjI3OjE1IFBTVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIE5vdiAgMSAxMTowNDozMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgogICAgICAgICogRnJvbSBDaHJpc3RpYW4gR2FmdG9uOgogICAgICAgICogaTM4Ni9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9faTM4Nl9fLgogICAgICAgICogc3BhcmMvbGludXguaCAoQ1BQX1BSRURFRklORVMpOiBBZGQgLURfX3NwYXJjX18uCiAgICAgICAgKiBzcGFyYy9saW51eDY0LmggKENQUF9QUkVERUZJTkVTKTogQWRkIC1EX19zcGFyY19fLgoKU2F0IE9jdCAzMSAyMTo0MjozOSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogQWxsb3cgYWxsIHR5cGUtcHVubmluZyB0aHJvdWdoCgl1bmlvbnMuICBEb24ndCBnZXQgY29uZnVzZWQgYWJvdXQgdGhlIHR5cGUgb2YgYSBiaXQtZmllbGQsIGRlc3BpdGUKCXRoZSBhbnRpY3Mgb2YgYnVpbGRfbW9kaWZ5X2V4cHIuCgpTYXQgT2N0IDMxIDIyOjM1OjI5IDE5OTggIEplYW4tUGllcnJlIFJhZGxleSA8anByQGpwci5jb20+CgoJKiBmaXhpbmMuc2NvOiBQYXJhbWF0ZXJpemUgI2luY2x1ZGVfbmV4dCB2YWx1ZXMuCgkqIGZpeGluYy9maXhpbmMuc2NvOiBMaWtld2lzZS4KClNhdCBPY3QgMzEgMjA6Mzk6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBObyBsb25nZXIgc2V0IHJlbG9hZF9jb21wbGV0ZWQuCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogU2V0IGl0IGhlcmUuICBQZXJmb3JtIGluc3RydWN0aW9uIHNwbGl0dGluZwoJYWZ0ZXIgcmVsb2FkIGhhcyBjb21wbGV0ZWQgaWYgd2Ugd2lsbCBiZSBydW5uaW5nIHRoZSBzY2hlZHVsZXIKCWFnYWluLgoKU2F0IE9jdCAzMSAxMjozMDowMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJbml0aWFsaXplIG1hcHBpbmdzIGZyb20gSU5TTl9VSUQgdG8KCUVIIHJlZ2lvbiBpZiBleGNlcHRpb25zIGFyZSBlbmFibGVkIGFuZCB3ZSdyZSBwZXJmb3JtaW5nIGNyb3NzCglqdW1wIG9wdGltaXphdGlvbnMuCgkoZmluZF9jcm9zc19qdW1wKTogRXhpdCBsb29wIGlmIHRoZSBpbnNucyBhcmUgaW4gZGlmZmVyZW50IEVIIHJlZ2lvbnMuCgpTYXQgT2N0IDMxIDEwOjAyOjQ4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkd2FyZjJvdXQuYyAob3V0cHV0X2NhbGxfZnJhbWVfaW5mbyk6IFVzZQoJQVNNX09VVFBVVF9EV0FSRl9ERUxUQTQgZm9yIHRoZSBDSUUgb2Zmc2V0IHRvIG1hdGNoIGZyYW1lLmMuCgpTYXQgT2N0IDMxIDEwOjIzOjE0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCglSZWluc3RhbGwgQXByIDI0dGggZml4LCBsb3N0IGR1cmluZyBNYXkgNnRoIGdjYzIgbWVyZ2U6CiAgICAgICAgKiBjLWNvbW1vbi5jIChjaGVja19mb3JtYXRfaW5mbyk6IERvbid0IGNoZWNrIGZvciB0aGUgJ3gnCglmb3JtYXQgY2hhcmFjdGVyIHR3aWNlLCBpbnN0ZWFkIGNoZWNrIGZvciAneCcgYW5kICdYJwoKRnJpIE9jdCAzMCAxNDo1MDoyNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGFzc2VtYmxlciBmZWF0dXJlcyk6IEFsc28gbWFrZSBnYXMgaXMgY29uZmlndXJlZCBpZgoJd2UgZmluZCBpdCBpbiB0aGUgc291Y2UgdHJlZS4KCkZyaSBPY3QgMzAgMTM6MjM6MjAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuYyAoaTM4Nl9jb21wX3R5cGVfYXR0cmlidXRlcyk6IENvbXBhcmUgd2hldGhlciB0aGUgCglhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLCBub3QgdGhlaXIgdHJlZSBub2Rlcy4KCkZyaSBPY3QgMzAgMTE6Mzk6NDcgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjb25maWd1cmUuaW4gKGd4eF9pbmNsdWRlX2Rpcik6IGJpdHRlbiBieSBhdXRvY29uZiBxdW90aW5nCgljaGFyYWN0ZXJzIDotKAoJKiBjb25maWd1cmU6IHJlYnVpbHQKCkZyaSBPY3QgMzAgMTA6NDM6MjkgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlndXJlLmluOiBJZ25vcmUgbm9uLWFic29sdXRlIHZhbHVlIGluICRBUy4KCkZyaSBPY3QgMzAgMDA6NTQ6MjUgMTk5OCAgUGV0ZXIgSmFrdWJlayA8cGpha0BzbmFmdS5kZT4KCgkqIG02OGsuaCAoSU5ESVJFQ1RBQkxFXzFfQUREUkVTU19QKTogRml4IHRoaW5rby4KCkZyaSBPY3QgMzAgMDA6NDI6MzQgMTk5OCAgTWFyayBFbGJyZWNodCA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKG1zZG9zZGpncHApOiBTZXQgZXhlZXh0IGFuZCB0YXJnZXRfYWxpYXMuCgpUaHUgT2N0IDI5IDIzOjU1OjQzIDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogZmxvdy5jIChYTk1BTExPQyk6IE5ldyBtYWNyby4KCShmbG93X2ludF9saXN0X2Jsb2NrcywgYmFzaWNfYmxvY2tfc3VjYywgYmFzaWNfYmxvY2tfcHJlZCk6IE5ldwoJc3RhdGljIHZhcmlhYmxlcy4KCShhZGRfZWRnZSwgYWRkX2VkZ2VfdG9fbGFiZWwpOiBOZXcgc3RhdGljIGZ1bmN0aW9ucy4KCShmcmVlX2JiX21lbW9yeSk6IE5ldyBmdW5jdGlvbi4KCShmbG93X2RlbGV0ZV9pbnNuKTogRGVsZXRlIGZ1bmN0aW9uLgoJKGJhc2ljX2Jsb2NrX2Ryb3BzX2luKTogRGVsZXRlIHZhcmlhYmxlLgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYmFzaWNfYmxvY2tfaGVhZCwKCWJhc2ljX2Jsb2NrX3N1Y2MuICBEb24ndCBhbGxvY2F0ZSBiYXNpY19ibG9ja19kcm9wc19pbi4KCUNhbGwgZnJlZV9iYl9tZW1vcnkgYXQgdGhlIGJlZ2lubmluZy4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgZG8gbXVsdGlwbGUgcGFzc2VzLgoJRGVsZXRlIGNvZGUgdG8gY29tcHV0ZSBiYXNpY19ibG9ja19kcm9wc19pbi4KCUFmdGVyIGNhbGxpbmcgbWFrZV9lZGdlcywgbWFyayBibG9ja3MgcmVhY2hlZCBieSBjdXJyZW50IGJsb2NrIGxpdmUuCglVcGRhdGUgdGVzdCBmb3IgdW5yZWFjaGFibGUgbGl2ZSBibG9ja3MuCgkobWFya19sYWJlbF9yZWYpOiBEZWxldGUgYXJncyBYLCBDSEVDS0RVUC4gIEFkZCBQUkVEIGFyZy4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJU2ltcGxpZnkgdG8gY2FsbCBhZGRfZWRnZV90b19sYWJlbCB3aGVuIGEgTEFCRUxfUkVGIGlzIGZvdW5kLgoJKG1ha2VfZWRnZXMpOiBTaW1wbGlmeSB0byBjYWxsIGFkZF9lZGdlX3RvX2xhYmVsIGluc3RlYWQgb2YKCW1hcmtfbGFiZWxfcmVmIG1vc3Qgb2YgdGhlIHRpbWUuCglDb21wdXRlIGhlcmUgd2hldGhlciBjb250cm9sIGRyb3BzIGludG8gdGhlIG5leHQgYmxvY2suCgkoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IFJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCURlbGV0ZSB1bnJlYWNoYWJsZSBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlci4KCUFmdGVyIGRlbGV0aW5nIGFsbCB1bnJlYWNoYWJsZSBibG9ja3MsIHJlbnVtYmVyIHRoZSByZW1haW5pbmcgb25lcwoJYW5kIHVwZGF0ZSBuX2Jhc2ljX2Jsb2Nrcy4KCShkZWxldGVfYmxvY2spOiBTcGVlZCB1cCBkZWxldGlvbiBhIGJpdC4KCURvbid0IHNldCBiYXNpY19ibG9ja19kcm9wc19pbiBmb3IgZGVsZXRlZCBibG9ja3MuCgkoZnJlZV9iYXNpY19ibG9ja192YXJzKTogRG9uJ3QgZnJlZSBiYXNpY19ibG9ja19kcm9wc19pbi4KCShsaWZlX2FuYWx5c2lzXzEpOiBVcGRhdGUgdG8gdXNlIG5ldyBlZGdlIHJlcHJlc2VudGF0aW9uLgoJKGR1bXBfZmxvd19pbmZvKTogRGVsZXRlIGNvZGUgdG8gcHJpbnQgYmFzaWMgYmxvY2sgaW5mbzsgY2FsbAoJZHVtcF9iYl9kYXRhIGluc3RlYWQuCgkoY29tcHV0ZV9wcmVkc19zdWNjcyk6IERlbGV0ZSBjb2RlIHRvIHJlY29tcHV0ZSBiYXNpY19ibG9ja19kcm9wc19pbgoJYW5kIHVpZF9ibG9ja19udW1iZXIuCglTaW1wbHkgY29weSB0aGUgcHJldmlvdXNseSBjb21wdXRlZCBjZmcuCgkoZHVtcF9iYl9kYXRhKTogTmV3IGFyZyBMSVZFX0lORk8uICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJUHJpbnQgcmVnaXN0ZXIgbGlmZXRpbWUgaW5mb3JtYXRpb24gaWYgTElWRV9JTkZPIGlzIG5vbnplcm8uCgkqIGJhc2ljLWJsb2NrLmggKGR1bXBfYmJfZGF0YSk6IEFkanVzdCBwcm90b3R5cGUuCgkqIGdjc2UuYyAoZ2NzZV9tYWluKTogVXBkYXRlIGNhbGwgdG8gZHVtcF9iYl9kYXRhLgoJKiBydGwuaCAoZnJlZV9iYl9tZW1vcnkpOiBEZWNsYXJlLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IENhbGwgZnJlZV9iYl9tZW1vcnkuCgoJKiByZWxvYWQxLmMgKHN0cnVjdCBlbGltX3RhYmxlKTogRGVsZXRlIE1BWF9PRkZTRVQgbWVtYmVyLgoJKHVwZGF0ZV9lbGltaW5hYmxlX29mZnNldHMpOiBEb24ndCBjb21wdXRlIGl0LgoJKHNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cyk6IERvbid0IGluaXRpYWxpemUgaXQuCglCcmVhayBvdXQgc29tZSBjb2RlIGludG8gc2V0X2luaXRpYWxfbGFiZWxfb2Zmc2V0cyBzbyB0aGUgcmVzdCBvZgoJdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gcmVsb2FkX2FzX25lZWRlZC4KCUFzc3VtZSB0aGF0IElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQgaXMgZGVmZWluZWQgd2hlbgoJRUxJTUlOQUJMRV9SRUdTIGlzbid0LgoJKHNldF9pbml0aWFsX2xhYmVsX29mZnNldHMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cy4KCShzZXRfb2Zmc2V0c19mb3JfbGFiZWwpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2Ygc2V0X2xhYmVsX29mZnNldHMKCWFuZCByZWxvYWRfYXNfbmVlZGVkLgoJKHJlbG9hZCk6IENhbGwgdGhlIHR3byBuZXcgZnVuY3Rpb25zLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBDYWxsIHNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cyBpbnN0ZWFkIG9mCglkdXBsaWNhdGluZyB0aGUgY29kZS4gIExpa2V3aXNlIGZvciBzZXRfb2Zmc2V0c19mb3JfbGFiZWwuCgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IEZpeCB0eXBvIGluIE9jdCAxNyBjaGFuZ2UuCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBFbnN1cmUgdGhhdCB3aGVuIHdlIHNldCByZWdfcmVsb2FkZWRfdmFsaWQgZm9yCglhbnkgaGFyZCByZWcsIHJlZ19yZWxvYWRlZF9kZWFkIGNvbnRhaW5zIHZhbGlkIGRhdGEuCgpUaHUgT2N0IDI5IDIyOjMwOjU0IDE5OTggIE1hcmN1cyBNZWlzc25lciA8TWFyY3VzLk1laXNzbmVyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogaTM4Ni5jIChpMzg2X2NvbXBfdHlwZV9hdHRyaWJ1dGVzKTogUmV0dXJuIG5vbnplcm8gZm9yIG1pc21hdGNoZWQKCSJzdGRjYWxsIiBhbmQgImNkZWNsIiBhdHRyaWJ1dGVzLgoKVGh1IE9jdCAyOSAxOTowNToxNyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBzY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogQWRkIGNvZGUgdG8gISBmb3VuZF9vcmlnX2Rlc3QgY2FzZSB0bwoJaGFuZGxlIGRlbGV0ZWQgbm8tb3AgbW92ZXMgb2YgaGFyZCByZWdpc3RlcnMuCgkqIGhhaWZhLXNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KClRodSBPY3QgMjkgMTg6MDc6NDcgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWlwcy5tZCAocmVsb2FkX3tpbixvdXR9e3NpLGRpfSk6IEVtaXQgYSBVU0Ugb2YgSElMTyBhdCB0aGUgZW5kCglvZiB0aGUgc2VxdWVuY2VzIHRvIHJlbG9hZCB0aGUgSElMTyByZWdpc3RlciB3aGljaCBkbyBub3QgYWN0dWFsbHkKCXJlZmVyZW5jZSBISUxPLgoKVGh1IE9jdCAyOSAxMjozOTozNSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChjX2dldF9hbGlhc19zZXQpOiBIYW5kbGUgQVJSQVlfUkVGIG9mIHVuaW9uIGZpZWxkLgoKVGh1IE9jdCAyOSAxNDoxMDoyMiBFU1QgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGVtaXRfZWhfY29udGV4dCk6IE1ha2UgdGhlIEVIIGNvbnRleHQgcmVnaXN0ZXIgc3RheSBhbGl2ZQoJYXQgLU8wIHNvIHN0dXBpZC5jIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkLgoKMTk5OC0xMC0yOSBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogRG8gbm90IHRyeSB0byBzcGxpdCBhIEJBUlJJRVIuCgpUaHUgT2N0IDI5IDAxOjMzOjU0IDE5OTggIEphbiBIdWJpY2thIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQ6IENoYW5nZSBpeDg2X2NwdSA9PSBQUk9DRVNTT1JfUEVOVElVTSB0byBUQVJHRVRfUEVOVElVTQoJKHplcm9fZXh0ZW5kc2lkaTIpOiBVc2UgIyBpbiBvdXRwdXQgdGVtcGxhdGUgYW5kIGhhbmRsZSBjb21wbGV0ZWx5IGJ5CglzcGxpdHMuCgkoemVyb19leHRlbmQgc3BsaXR0ZXJzKTogTmV3IGRlZmluZV9zcGxpdHMuCgkoYXNoaWZ0cnRfMzIpOiBOZXcgcGF0dGVybi4KCldlZCBPY3QgMjggMjI6NTg6MzUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChhcHBlbmRfcmFuZG9tX2NoYXJzKTogTmV3IGZuLgoJKGdldF9maWxlX2Z1bmN0aW9uX25hbWVfbG9uZyk6IFVzZSBpdC4KCldlZCBPY3QgMjggMjI6Mjc6MDUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChjYzEpOiBQdXQgQ19PQkpTLCBhbmQgdGhlbmNlIEBleHRyYV9jX29ianNAIGxhc3QuCgkoTElCQ1BQX09CSlMpOiBOZXcuICBBZGQgY3BwdWxwLm8uCgkoY3BwbWFpbiwgZml4LWhlYWRlcik6IERlcGVuZCBvbiBhbmQgdXNlIGxpYmNwcC5hLgoJKiBjb25maWd1cmUuaW4gKGV4dHJhX2Nfb2JqcywgZXh0cmFfY3h4X29ianMpOiBVc2UgbGliY3BwLmEgaW5zdGVhZAoJb2YgdGhlIGluZGl2aWR1YWwgb2JqZWN0IGZpbGVzLgoJKiBvYmpjL01ha2UtbGFuZy5pbiAoY2Mxb2JqKTogUHV0IE9CSkNfT0JKUywgYW5kIHRoZW5jZSBAZXh0cmFfY19vYmpzQCwKCWxhc3QuCgoJKiBjY2NwLmMgKHVzZXJfbGFiZWxfcHJlZml4KTogTmV3LgoJKG1haW4pOiBTZXQgaXQgb2ZmIC1mKmxlYWRpbmctdW5kZXJzY29yZS4KCShzcGVjaWFsX3N5bWJvbCk6IFVzZSBpdC4KCSogY3BwbGliLmMgKHNwZWNpYWxfc3ltYm9sKTogTGlrZXdpc2UuCgkoY3BwX2hhbmRsZV9vcHRpb24pOiBIYW5kbGUgLWYqbGVhZGluZy11bmRlcnNjb3JlLgoJKiBjcHB1bHAuYzogTmV3IGZpbGUuCgoJKiBvdXRwdXQuaCAodXNlcl9sYWJlbF9wcmVmaXgpOiBEZWNsYXJlIGl0LgoJKiBkd2FyZjJvdXQuYyAoQVNNX05BTUVfVE9fU1RSSU5HKTogUHJlcGVuZCB1c2VyX2xhYmVsX3ByZWZpeC4KCSogdG9wbGV2LmMgKGZfb3B0aW9ucywgbWFpbik6IEhhbmRsZSAtZipsZWFkaW5nLXVuZGVyc2NvcmUuCgoJKiBkZWZhdWx0cy5oIChBU01fT1VUUFVUX0xBQkVMUkVGKTogVXNlIGFzbV9mcHJpbnRmIGluc3RlYWQgb2YKCXJlZmVyZW5jaW5nIFVTRVJfTEFCRUxfUFJFRklYIGRpcmVjdGx5LgoJKiBjb25maWcvbmV4dHN0ZXAuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IExpa2V3aXNlLgoJKiBtMzJyL20zMnIuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IExpa2V3aXNlLgoJKiBmaW5hbC5jIChhc21fZnByaW50Zik6IFVzZSB1c2VyX2xhYmVsX3ByZWZpeCBpbnN0ZWFkLgoJKiBhcm0vdGh1bWIuYyAodGh1bWJfcHJpbnRfb3BlcmFuZCk6IExpa2V3aXNlLgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyAtZipsZWFkaW5nLXVuZGVyc2NvcmUgb24gdG8KCWNwcCB3aGVyZXZlciBhcHByb3ByaWF0ZS4KCldlZCBPY3QgMjggMjM6MDk6MjUgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogc2NvNS5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgT3BlblNlcnZlci0KCXNwZWNpZmljIGNvbXBpbGVyIHN3aXRjaGVzLgoKV2VkIE9jdCAyOCAyMTowNTo1MyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoYy1jb21tb24ubyk6IERlcGVuZCBvbiBjLXByYWdtYS5oLiAgVXNlICQoUlRMX0gpIGluc3RlYWQKCW9mIHJ0bC5oLgoKV2VkIE9jdCAyOCAyMDo1Mjo0NyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAoRVhUUkFfU1BFQ1MsIGV4dHJhX3NwZWNzKTogSW50cm9kdWNlIGFuIGludGVybWVkaWF0ZQogCXN0cnVjdHVyZSB3aGljaCBoYXMgZXhhY3RseSB0aGUgbWVtYmVycyBwcm92aWRlZCBieSBFWFRSQV9TUEVDUy4KICAJWG1hbGxvYygpIHRoZSByZWFsIGBleHRyYV9zcGVjcycsIGFuZCBpbml0aWFsaXplIGl0IGZyb20gdGhpcwoJaW50ZXJtZWRpYXRlIHN0cnVjdHVyZS4KCgkqIGFscGhhLmggKEVYVFJBX1NQRUNTKTogUmV2ZXJ0IGNoYW5nZSBmb3IgbWlzc2luZyBpbml0aWFsaXplcnMuCgoJKiBtaXBzLmggIChFWFRSQV9TUEVDUyk6IExpa2V3aXNlLgoKCSogc3BhcmMuaCAoRVhUUkFfU1BFQ1MpOiBMaWtld2lzZS4KCldlZCBPY3QgMjggMTY6NDY6MDcgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgogICAgCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogSW5zdGVhZCBvZiBhYm9ydGluZyB3aGVuIGEKCWJpdGZpZWxkIGluc2VydGlvbiBhcyBhIHJlcGxhY2VtZW50IGZvciAoTUVNIChBRERSRVNTT0YpKSBkb2VzIG5vdAoJd29yayBqdXN0IHB1dCB0aGUgQUREUkVTU09GIG9uIHN0YWNrLiAgT3RoZXJ3aXNlIHJlbWVtYmVyIGFsbCBzdWNoCglzdWNjZXNzZnVsbCByZXBsYWNlbWVudHMsIHNvIHRoYXQgZXhhY3RseSB0aGUgc2FtZSByZXBsYWNlbWVudHMKCWNhbiBiZSBtYWRlIG9uIHRoZSBSRUdfTk9URXMuICBSZW1vdmUgdGhlIHNwZWNpYWwgY2FzZSBmb3IgQ0FMTAoJaW5zbnMgYWdhaW4uCgkocHVyZ2VfYWRkcmVzc29mX3JlcGxhY2VtZW50cyk6IE5ldyB2YXJpYWJsZS4KCShwdXJnZV9hZGRyZXNzb2YpOiBDbGVhciBpdCBhdCBlbmQuCgoxOTk4LTEwLTI4IDE2OjEwIC0wNTAwCVphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJICogYy1sYW5nLmM6IERlY2xhcmUgZXh0ZXJuIGNoYXIgKnl5X2N1ciBpZiBVU0VfQ1BQTElCLgoJICAgKGxhbmdfaW5pdCk6IENhbGwgY2hlY2tfbmV3bGluZSBhbHdheXMuCgkgKiBjLWxleC5jIChpbml0X3BhcnNlKSBbVVNFX0NQUExJQj0xXTogQWZ0ZXIgY2FsbGluZwoJICAgY3BwX3N0YXJ0X3JlYWQsIHNldCB5eV9jdXIgYW5kIHl5X2xpbSB0byByZWFkIGZyb20KCSAgIHBhcnNlX2luLnRva2VuX2J1ZmZlciwgc28gdGhhdCB3ZSdsbCBzZWUgdGhlIGZpcnN0ICNsaW5lCgkgICBkaXJlY3RpdmUuCgkgKiBjcHBsaWIuYyAoY3BwX3N0YXJ0X3JlYWQpOiBmaW5jbHVkZSB0aGUgbWFpbiBpbnB1dCBmaWxlCgkgICBiZWZvcmUgcHJvY2Vzc2luZyAtaW5jbHVkZS8taW1hY3Jvcy4JIFByb2Nlc3MgLWltYWNyb3MgYW5kCgkgICAtaW5jbHVkZSBzZXBhcmF0ZWx5LCBhbmQgaGFuZGxlIC1pbmNsdWRlIGJ5IHN0YWNraW5nIGEKCSAgIGJ1ZmZlciBmb3IgdGhlIGZpbGUgaW4gcXVlc3Rpb24gYXMgaWYgaXQnZCBiZWVuICNpbmNsdWRlZC4KCSAqIHRvcGxldi5jIChkb2N1bWVudGVkX2xhbmdfb3B0aW9ucykgUmVjb2duaXplIC1IIHdoZW4KCSAgIFVTRV9DUFBMSUIgaXMgb24uCgoxOTk4LTEwLTI4IDE2OjA5IC0wNTAwCVphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJICogY3BwbGliLmM6IE1lcmdlIGRvX29uY2UgaW50byBkb19wcmFnbWEuICBCcmVhayBmaWxlIGhhbmRsaW5nCgkgICBjb2RlIG91dCBvZiBkb19pbmNsdWRlLgoJICAgTW92ZSBhcHBlbmRfaW5jbHVkZV9jaGFpbiwgZGVwc19vdXRwdXQsCgkgICBmaWxlX2NsZWFudXAsIHJlZHVuZGFudF9pbmNsdWRlX3AsIGltcG9ydF9oYXNoLAoJICAgbG9va3VwX2ltcG9ydCwgYWRkX2ltcG9ydCwgcmVhZF9maWxlbmFtZV9zdHJpbmcsIHJlYWRfbmFtZV9tYXAsCgkgICBvcGVuX2luY2x1ZGVfZmlsZSwgZmluY2x1ZGUsIHNhZmVfcmVhZCB0byBjcHBmaWxlcy5jLgoJICAgTW92ZSBwcm90b3R5cGVzIGZvciBkZXBzX291dHB1dCwgYXBwZW5kX2luY2x1ZGVfY2hhaW4sCgkgICBmaW5jbHVkZSB0byBjcHBsaWIuaC4gIE1vdmUgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QKCSAgIGZpbGVfbmFtZV9saXN0IHRoZXJlIGFsc28uCgoJICogY3BwZmlsZXMuYzogTmV3IGZpbGUuICBDb250YWlucyBhbGwgdGhlIGFib3ZlIGZ1bmN0aW9ucwoJICAgYnJva2VuIG91dCBvZiBjcHBsaWIuYzsgYWxzbyBoYWNrX3Ztc19pbmNsdWRlX3NwZWNpZmljYXRpb24KCSAgIGZyb20gY2NjcC5jIGFuZCBmaW5kX2luY2x1ZGVfZmlsZSwgYSBuZXcgZnVuY3Rpb24gYnJva2VuIG91dCBvZgoJICAgZG9faW5jbHVkZS4KCgkgKiBNYWtlZmlsZS5pbiAoY3BwbWFpbik6IERlcGVuZCBvbiBjcHBmaWxlcy5vLgoJICAgKGZpeC1oZWFkZXIpOiBMaWtld2lzZS4KCSAgIChjcHBmaWxlcy5vKTogTmV3IHRhcmdldC4KCSAqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtYy1jcHBsaWIpOiBBZGQgY3BwZmlsZXMubyB0bwoJICAgZXh0cmFfY19vYmpzLiAgQWRkIC4uL2NwcGZpbGVzLm8gdG8gZXh0cmFfY3h4X29ianMuCgpXZWQgT2N0IDI4IDE0OjA2OjQ5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmb3V0LmMgKGR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCk6IElmIERFQ0xfQ09OVEVYVCwgZG9uJ3QgYWJvcnQKCWlmIHBlbmRpbmdfdHlwZXMgaXMgbm9uLXplcm8uCgkoZHdhcmZvdXRfZmluaXNoKTogVmVyaWZ5IHBlbmRpbmdfdHlwZXMgaXMgemVybyBiZWZvcmUgZmluaXNoaW5nLgoKV2VkIE9jdCAyOCAxMDoyOTowOSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZXhwci5jIChjb252ZXJ0X21vdmUpOiBVc2Ugc2hpZnRzIHRvIHBlcmZvcm0gdGhlIG1vdmUgaWYgYQoJc3VpdGFibGUgZXh0ZW5kIHBhdHRlcm4gY2Fubm90IGJlIGZvdW5kLiAgQ29kZSB3cml0dGVuIGJ5CglSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQGN5Z251cy5jb20+LgoKV2VkIE9jdCAyOCAwMzo1OToyOSAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ2NsYXNzLmMgKHJlbnVtYmVyLCByZWdub19hbGxvY2F0ZWQpOiBOZXcgc3RhdGljIHZhcmlhYmxlcywgbW92ZWQKCW91dCBvZiBhbGxvY2F0ZV9yZWdfaW5mby4KCShhbGxvY2F0ZV9yZWdfaW5mbyk6IE1vdmUgdGhlc2UgdHdvIHZhcmlhYmxlcyBvdXRzaWRlIHRoZSBmdW5jdGlvbi4KCU1vdmUgY29kZSB0byBmcmVlIG1lbW9yeSBpbnRvIG5ldyBmdW5jdGlvbiBmcmVlX3JlZ19pbmZvLgoJKGZyZWVfcmVnX2luZm8pOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgYWxsb2NhdGVfcmVnX2luZm8uCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGZyZWVfcmVnX2luZm8sIG5vdCBhbGxvY2F0ZV9yZWdfaW5mby4KCSogcnRsLmggKGFsbG9jYXRlX3JlZ19pbmZvKTogRG9uJ3QgZGVjbGFyZS4KCShmcmVlX3JlZ19pbmZvKTogRGVjbGFyZS4KCgkqIGZpbmFsLmMgKGNsZWFudXBfc3VicmVnX29wZXJhbmRzKTogIEFTTV9JTlBVVHMgbmVlZCBubyB0cmVhdG1lbnQuCgpXZWQgT2N0IDI4IDAyOjM4OjEyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBUZW1wb3JhcmlseSByZXZlcnQgbGFzdCBjaGFuZ2UuCgpXZWQgT2N0IDI4IDAwOjAwOjM1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBQYXJlbnRoZXNpemUuCgoxOTk4LTEwLTI4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiByZWxvYWQxLmMgKGRlbGV0ZV9vdXRwdXRfcmVsb2FkKTogQXZvaWQgYW1iaWdvdXMgZWxzZS4KCldlZCBPY3QgMjggMDA6MTA6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgYWxsb2NhdGVfcmVnX2luZm8gdG8gZnJlZSByZWdpc3RlcgoJdGFibGUgbWVtb3J5LgoJKiBydGwuaCAoYWxsb2NhdGVfcmVnX2luZm8pOiBEZWNsYXJlLgoKCSogUFJPSkVDVFM6IFJlbW92ZSBlbnRyeSBmb3IgbG9jYWwgc3BpbGxpbmcuCgoJKiBmaW5hbC5jIChjbGVhbnVwX3N1YnJlZ19vcGVyYW5kcyk6IE5ldyBmdW5jdGlvbi4KCShmaW5hbF9zY2FuX2luc24pOiBVc2UgaXQuCgkoYWx0ZXJfc3VicmVnKTogQ2xlYXIgdGhlICJ1c2VkIiBmaWVsZCB3aGVuIHdlIHR1cm4gYSBTVUJSRUcgaW50bwoJYSBSRUcuCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogRGVsZXRlIENMT0JCRVIgaW5zbnMgYW5kIGFsc28gY2xlYW51cCBTVUJSRUcKCW9wZXJhbmRzIHdoZW4gcmVsb2FkIGhhcyBmaW5pc2hlZC4KCSogcmVsb2FkLmggKGNsZWFudXBfc3VicmVnX29wZXJhbmRzKTogRGVjbGFyZS4uCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogTm8gbG9uZ2VyIGRlbGV0ZSBDTE9CQkVSIGluc25zIGFmdGVyCglyZWxvYWQuICBIYW5kbGVkIGluIHJlbG9hZCBpdHNlbGYuCgpUdWUgT2N0IDI3IDIzOjMyOjM0IDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVsb2FkMS5jICh2ZXJpZnlfaW5pdGlhbF9vZmZzZXRzKTogTmV3IGZ1bmN0aW9uLgoJKHJlbG9hZCk6IENhbGwgaXQgYWZ0ZXIgcmVsb2FkX2FzX25lZWRlZC4gIEFsc28gdmVyaWZ5IHRoYXQgdGhlIGZyYW1lCglzaXplIHN0YXlzIGNvbnN0YW50IGR1cmluZyByZWxvYWRfYXNfbmVlZGVkLgoJKiBpMzg2LmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBVbmRvIEp1bCAyNiBjaGFuZ2UuCgoJKiByZWxvYWQuaCAoc3RydWN0IGluc25fY2hhaW4pOiBBZGQgbmVlZF9vcGVyYW5kX2NoYW5nZSBlbGVtZW50LgoJKiByZWxvYWQxLmMgKG5ld19pbnNuX2NoYWluKTogQ2xlYXIgaXQuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IFNldCBpdDsgZG9uJ3Qgb3ZlcmxvYWQgbmVlZF9yZWxvYWQuCgkocmVsb2FkX2FzX25lZWRlZCk6IFVzZSBpdC4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IFVzZSBCQVNFX1JFR19DTEFTUyBpbnN0ZWFkIG9mCglyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcyB0aHJvdWdob3V0LiAgU2ltaWxhciBmb3IgSU5ERVhfUkVHX0NMQVNTCglhbmQgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzLgoJKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBMaWtld2lzZS4KCSogcmVsb2FkLmggKHJlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzLAoJcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzKTogRG9uJ3QgZGVjbGFyZS4KCSogcmVsb2FkMS5jIChyZWdfb2xkX3JlbnVtYmVyLCBwc2V1ZG9fcHJldmlvdXNfcmVncywKCXBzZXVkb19mb3JiaWRkZW5fcmVncywgYmFkX3NwaWxsX3JlZ3NfZ2xvYmFsKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMuCgkodXNlZF9zcGlsbF9yZWdzKTogTm93IHN0YXRpYy4KCShyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcywgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzLAoJcmVnc19leHBsaWNpdGx5X3VzZWQsIGNvdW50ZWRfZm9yX2dyb3VwcywgY291bnRlZF9mb3Jfbm9uZ3JvdXBzLAoJYmFzaWNfYmxvY2tfbmVlZHMsIG1heF9uZWVkcywgZ3JvdXBfc2l6ZSwgZ3JvdXBfbW9kZSwgbWF4X2dyb3VwcywKCW1heF9ub25ncm91cHMsIG1heF9uZWVkc19pbnNuLCBtYXhfZ3JvdXBzX2luc24sIG1heF9ub25ncm91cHNfaW5zbiwKCWZvcmJpZGRlbl9yZWdzKToKCURlbGV0ZWQgdmFyaWFibGVzLgoJKGluaXRfcmVsb2FkKTogRGVsZXRlIGNvZGUgdG8gY29tcHV0ZSBiYXNlL2luZGV4IHJlZyBjbGFzc2VzLgoJKHJlbG9hZCk6IERlbGV0ZSB2YXJpYWJsZSBKLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGJhc2ljX2Jsb2NrX25lZWRzLgoJRG9uJ3QgY29tcHV0ZSByZWdzX2V4cGxpY2l0bHlfdXNlZC4KCUFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCBmcmVlIHJlZ19vbGRfcmVudW1iZXIsIHBzZXVkb19mb3JiaWRkZW5fcmVncywKCXBzZXVkb19wcmV2aW91c19yZWdzLgoJSW5pdGlhbGl6ZSBiYWRfc3BpbGxfcmVnc19nbG9iYWwuCglEb24ndCBjYWxsIG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCBoZXJlLgoJRG9uJ3QgaW5pdGlhbGl6ZSBzcGlsbF9yZWdfb3JkZXIgYW5kIG5fc3BpbGxzLgoJRG9uJ3QgZm9yYmlkIGV4cGxpY2l0bHkgdXNlZCByZWdzIHRvIGJlIHVzZWQgZm9yIHNwaWxsIHJlZ3MuCglDaGFuZ2UgbWFpbiBsb29wIHRvIGluZmluaXRlIGxvb3AsIHdpdGggZXhwbGljaXQgYnJlYWsgc3RhdGVtZW50cy4KCU1ha2UgU09NRVRISU5HX0NIQU5HRUQgdmFyaWFibGUgbG9jYWwgdG8gdGhhdCBsb29wLgoJRG9uJ3QgaW5pdGlhbGl6ZSBtYXhfbmVlZHMsIG1heF9ncm91cHMsIG1heF9ub25ncm91cHMsIG1heF9uZWVkc19pbnNuLAoJbWF4X2dyb3Vwc19pbnNuLCBtYXhfbm9uZ3JvdXBzX2luc24sIGdyb3VwX3NpemUsIGdyb3VwX21vZGUuCglNYWtlIHN1cmUgc3BpbGxlZF9zcGV1ZG9zIGlzIGNsZWFyZWQgYmVmb3JlIGNhbGxpbmcgc3BpbGxfaGFyZF9yZWcgb3IKCW5ld19zcGlsbF9yZWcuCglEb24ndCBjYWxsIGR1bXBfbmVlZHMuCglEZWxldGUgY29kZSB0byByZXNldCBwb3RlbnRpYWxfcmVsb2FkX3JlZ3MuCglEZWxldGUgY29kZSB0byB0ZXJtaW5hdGUgbG9vcCBjb25kaXRpb25hbCBvbiB0aGUgZ2xvYmFsIG5lZWRzIHZhcmlhYmxlcwoJc2hvd2luZyBubyBmdXJ0aGVyIG5lZWRzLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBSZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglJbml0aWFsaXplIHNvbWVoaW5nX25lZWRzX2VsaW1pbmF0aW9uIGhlcmUsIG5vdCBpbiByZWxvYWQuCglEZWxldGUgYXZvaWRfcmV0dXJuX3JlZyBrbHVkZ2UuCgkoY2FsY3VsYXRlX25lZWRzKTogTG9zZSBBVk9JRF9SRVRVUk5fUkVHIGFuZCBHTE9CQUwgYXJncywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJSW5pdGlhbGl6ZSB0aGUgZ3JvdXBfbW9kZSBhbmQgZ3JvdXBfc2l6ZSBlbGVtZW50cyBvZiB0aGUgYXJnIENIQUlOLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGJhc2ljX2Jsb2NrX25lZWRzLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglEZWxldGUgYXZvaWRfcmV0dXJuX3JlZyBrbHVkZ2UuCgkoZmluZF90d29yZWdfZ3JvdXApOiBMb3NlIEdMT0JBTCBhcmcsIHRha2UgQ0hBSU4gYXJnLCByZXR1cm4gdm9pZC4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCURlbGV0ZSBzcGVjaWFsIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMgY29kZS4KCURlbGV0ZSBzcGlsbF9mYWlsdXJlIGNvZGU7IG5vdyBpbiBuZXdfc3BpbGxfcmVnLgoJKGZpbmRfZ3JvdXApOiBMb3NlIEdMT0JBTCBhcmcsIHRha2UgQ0hBSU4gYXJnLCByZXR1cm4gdm9pZC4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShtYXliZV9tYXJrX3BzZXVkb19zcGlsbGVkKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShmaW5kX3JlbG9hZF9yZWdzKTogTG9zZSBHTE9CQUwgYXJnLCB0YWtlIENIQUlOIGFyZywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglDYWxsIG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCBoZXJlLCBub3QgaW4gcmVsb2FkLgoJSW5pdGlhbGl6ZSBzcGlsbF9yZWdfb3JkZXIgYW5kIG5fc3BpbGxzLgoJU2ltcGxpZnkgdGVzdCB3aGV0aGVyIGFuIGFzbSBpbnNuIGlzIGludm9sdmVkLgoJRGVsZXRlIHNwaWxsX2ZhaWx1cmUgY29kZTsgbm93IGluIG5ld19zcGlsbF9yZWcuCglDYWxsIG1heWJlX21hcmtfcHNldWRvX3NwaWxsZWQgZm9yIGV2ZXJ5dGhpbmcgbWFya2VkIGFzIGxpdmUgaW4KCUNIQUlOLiAgTWVyZ2UgQ0hBSU4ncyB1c2VkX3NwaWxsX3JlZ3MgaW50byB0aGUgZ2xvYmFsIHZhcmlhYmxlCgl1c2VkX3NwaWxsX3JlZ3MuCgkoZHVtcF9uZWVkcyk6IFRha2UgQ0hBSU4gYXJnLiAgTm8gbG9uZ2VyIHN0YXRpYywgdG8gcHJldmVudCB0aGUKCWNvbXBpbGVyIGZyb20gb3B0aW1pemluZyB0aGlzIGZ1bmN0aW9uIChub3cgdW51c2VkKSBhd2F5LgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkocG9zc2libGVfZ3JvdXBfcCk6IExvc2UgTUFYX0dST1VQUyBhcmcsIHRha2UgQ0hBSU4gYXJnLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShjb3VudF9wb3NzaWJsZV9ncm91cHMpOiBMb3NlIEdST1VQX1NJWkUsIEdST1VQX01PREUsIE1BWF9HUk9VUFMgYXJncywKCXRha2UgQ0hBSU4gYXJnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJKG5ld19zcGlsbF9yZWcpOiBMb3NlIE1BWF9ORUVEUywgTUFYX05PTkdST1VQUywgR0xPQkFMIGFyZ3MsIHRha2UKCUNIQUlOLCBOT05HUk9VUCBhcmdzLiAgUmV0dXJuIHZvaWQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJVmVyaWZ5IGNhbGxlciBpc24ndCB0cnlpbmcgdG8gc3BpbGwgYSBwc2V1ZG8uCglTaW1wbGlmeSB0ZXN0IGZvciBpbGxlZ2FsIHJlZywganVzdCB1c2UgYmFkX3NwaWxsX3JlZ3MuCglHZW5lcmF0ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCU1hcmsgc3BpbGxlZCByZWdpc3RlciBpbiBDSEFJTidzIHVzZWRfc3BpbGxfcmVncyBlbGVtZW50LgoJRG9uJ3QgY2FsbCBzcGlsbF9oYXJkX3JlZy4KCShzcGlsbF9oYXJkX3JlZyk6IExvc2UgR0xPQkFMIGFyZywgcmV0dXJuIHZvaWQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJTWFyayBzcGlsbGVkIGhhcmQgcmVncyBpbiBiYWRfc3BpbGxfcmVnc19nbG9iYWwuCglNYXJrIGFmZmVjdGVkIHBzZXVkb3MgaW4gc3BpbGxlZF9wc2V1ZG9zLCBidXQgZG9uJ3Qgc3BpbGwgdGhlbS4KCShpb3JfaGFyZF9yZWdfc2V0KTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShmaW5pc2hfc3BpbGxzKTogUmV0dXJuIGludC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglDb21wdXRlIHNwaWxsX3JlZ19vcmRlciwgbl9zcGlsbHMgYW5kIHNwaWxsX3JlZ3MgaGVyZS4gIEFsc28gdXBkYXRlCglyZWdzX2V2ZXJfbGl2ZSBmb3IgcmVncyB1c2VkIGFzIHNwaWxscy4KCUZvciBldmVyeSBwc2V1ZG8gaW4gc3BpbGxlZF9wc2V1ZG9zLCBzcGlsbCBpdCBhbmQgbWFyayB0aGUgcHJldmlvdXMKCWhhcmQgcmVnIGl0IGhhZCBpbiBwc2V1ZG9fcHJldmlvdXNfcmVncy4gIENvbXB1dGUgd2hpY2ggaGFyZCByZWdzCglhcnNldWRvKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBUYWtlIENIQUlOIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglJbml0aWFsaXplIGJhZF9zcGlsbF9yZWdzIGZyb20gYmFkX3NwaWxsX3JlZ3NfZ2xvYmFsLCB0aGVuIG1lcmdlIGFueQoJaGFyZCByZWdpc3RlcnMgZXhwbGljaXRseSB1c2VkIGFjcm9zcyB0aGUgY3VycmVudCBpbnNuIGludG8gdGhlIHNldC4KCUNvbXB1dGUgaGFyZF9yZWdfbl91c2VzIHRha2luZyBvbmx5IHBzZXVkb3MgbGl2ZSBhY3Jvc3MgdGhpcyBpbnNuCglpbnRvIGFjY291bnQuCglUd2VhayBzb3J0aW5nIG9mIHBvdGVudGlhbF9yZWxvYWRfcmVncy4KCShjb21wYXJlX3NwaWxsX3JlZ3MpOiBEZWxldGUgZnVuY3Rpb24uCgkocmVsb2FkX2FzX25lZWRlZCk6IERvbid0IHNvcnQgdGhlIHNwaWxsX3JlZ3MgYXJyYXksIGl0J3MgY29tcHV0ZWQKCWluIHByb3BlciBvcmRlciBpbiBmaW5pc2hfc3BpbGxzLgoJRGVsZXRlIGF2b2lkX3JldHVybl9yZWcga2x1ZGdlLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGJhc2ljX2Jsb2NrX25lZWRzLgoJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBNaW5vciBzcGVlZC9yZWFkYWJpbGl0eSB0d2Vha3MuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBMb3NlIEFWT0lEX1JFVFVSTl9SRUcgYXJnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCURlbGV0ZSBhdm9pZF9yZXR1cm5fcmVnIGtsdWRnZS4KCUluaXRpYWxpemUgcmVsb2FkX3JlZ191c2VkIGZyb20gQ0hBSU4ncyB1c2VkX3NwaWxsX3JlZ3MgZWxlbWVudC4KCURlbGV0ZSB1bnVzZWQgbGFiZWwgRkFJTC4KCShyZWxvYWRfY29tYmluZSk6IFJlcGxjZSByZWxvYWRfYWRkcmVzc19pbmRleF9yZWdfY2xhc3Mgd2l0aAoJSU5ERVhfUkVHUy4KCURvbid0IHVzZSB1c2VkX3NwaWxsX3JlZ3MgdG8gZGV0ZXJtaW5lIGluZm9ybWF0aW9uIGFib3V0IGxpZmV0aW1lIG9mCgloYXJkIHJlZ3MuCgpUdWUgT2N0IDI3IDEzOjE1OjAyIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgkKCSogdG9wbGV2LmMgKGRpc3BsYXlfaGVscCk6IElnbm9yZSBlbXB0eSB0YXJnZXQgc3BlY2lmaWMKCW9wdGlvbnMsIGFuZCBpZiAtVyBpcyBhbHNvIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHRoZW4KCWRpc3BsYXkgdW5kb2N1bWVudGVkIG9wdGlvbnMuCgoJKiBjb25maWcvYXJtL2FybS5jOiBVcGRhdGVkIHdpdGggY2hhbmdlcyBpbiBkZXZvIHNvdXJjZXMuCgkqIGNvbmZpZy9hcm0vYXJtLmg6IFVwZGF0ZWQgd2l0aCBjaGFuZ2VzIGluIGRldm8gc291cmNlcy4KCSogY29uZmlnL2FybS9saWIxZnVuY3MuYXNtOiBVcGRhdGVkIHdpdGggY2hhbmdlcyBpbiBkZXZvIHNvdXJjZXMuCgkqIGNvbmZpZy9hcm0vbGliMXRodW1iLmFzbTogQWRkIEVMRiBzdXBwb3J0LgoKVHVlIE9jdCAyNyAxNjoxMTo0MyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBjb2xsZWN0Mi5jIChhaXg2NF9mbGFnKTogTmV3IHZhcmlhYmxlLgoJKG1haW4sIGNhc2UgJ2InKTogUGFyc2UgaXQuCgkoR0NDX0NIRUNLX0hEUik6IG9iamVjdCBtYWdpYyBudW1iZXIgbXVzdCBtYXRjaCBtb2RlLgoJKHNjYW5fcHJvZ19maWxlKTogT25seSBjaGVjayBmb3Igc2hhcmVkIG9iamVjdCBpZiB2YWxpZCBoZWFkZXIuCglQcmludCBkZWJ1Z2dpbmcgaWYgaGVhZGVyL21vZGUgbWlzbWF0Y2guCgpUdWUgT2N0IDI3IDEwOjE1OjAyIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJQWRkZWQgc3VwcG9ydCBmb3IgYXJtLWVsZi1saW51eCBjb25maWd1cmF0aW9uLCBzdWJtaXR0ZWQgYnkgUGhpbGlwCglCbHVuZGVsbCA8cGJAbmV4dXMuY28udWs+LCBhbmQgaW50ZWdyYXRlZCB0aGlzIHdpdGggdGhlIGFybS1lbGYKCWNvZGUgZGV2ZWxvcGVkIGJ5IENhdGhlcmluZSBNb29yZSA8Y2xtQGN5Z251cy5jb20+LiAgVGhlIGZvbGxvd2luZwoJZmlsZXMgYXJlIGFmZmVjdGVkOiAKCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGFybS0qLWxpbnV4LWdudSwgYXJtdjItKi1saW51eCBhbmQgYXJtLSotZWxmCgl0YXJnZXRzLiAKCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCgkKCSogY29uZmlnL2FybS9hb3V0Lmg6IEFkZCBkZWZhdWx0IGRlZmluaXRpb25zIG9mIFJFR0lTVEVSX1BSRUZJWCwKCVVTRVJfTEFCRUxfUFJFRklYIGFuZCBMT0NBTF9MQUJFTF9QUkVGSVguICBNYWtlIG90aGVyIG1hY3JvCglkZWZpbml0aW9ucyBjb25kaXRpb25hbCBvbiB0aGVpciBub3QgaGF2aW5nIGJlZW4gYWxyZWFkeSBkZWZpbmVkLgoKCSogY29uZmlnL2FybS9saW4xZnVuY3MuYXNtOiBBZGQgRUxGIG9ubHkgbWFjcm9zIHRvIGdlbmVyYXRlIC5zaXplCglhbmQgLnR5cGUgZGlyZWN0aXZlcywgYW5kIGFkZCAiKFBMVCkiIHF1YWxpZmljYXRpb24gdG8gZnVuY3Rpb24KCWNhbGxzLgoKCSogY29uZmlnL2FybS9saW51eC5oOiBEZWxldGVkLiAgVGhpcyBmaWxlIGlzIG5vdyBzdXBlcmNlZWRlZCBieQoJZWl0aGVyIGxpbnV4LWVsZi5oIG9yIGxpbnV4LWFvdXQuaC4KCgkqIGNvbmZpZy9hcm0vbGludXgtZ2FzLmg6IERlZmluZSBgaW5oaWJpdF9saWJjJyBpZiBjcm9zcy1jb21waWxpbmcuCgkoQ0xFQVJfSU5TTl9DQUNIRSk6IE5ldyBtYWNybywgY3VycmVudGx5IGRpc2FibGVkIChhd2FpdGluZyBrZXJuZWwKCXN1cHBvcnQpLgoJTW92ZSBkZWZpbml0aW9ucyBmcm9tIG9sZCBsaW51eC5oIGZpbGUgaGVyZS4KCQoJKiBjb25maWcvYXJtL2VsZi5oOiBOZXcgZmlsZS4gIEdlbmVyaWMgQVJNL0VMRiBzdXBwb3J0LgoJCgkqIGNvbmZpZy9hcm0vbGludXgtYW91dC5oOiBOZXcgZmlsZS4gIFN1cHBvcnQgZm9yIExpbnV4IHdpdGggYS5vdXQuCgkKCSogY29uZmlnL2FybS9saW51eC1lbGYuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBMaW51eCB3aXRoIEVMRi4KCQoJKiBjb25maWcvYXJtL2xpbnV4LWVsZjI2Lmg6IE5ldyBmaWxlLiAgU3VwcG9ydCBmb3IgTGludXggd2l0aCBFTEYKCXVzaW5nIHRoZSAyNmJpdCBBUENTLgoJCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBPUydlcyBvdGhlcgoJdGhhbiBMaW51eCB3aXRoIEVMRi4KCgkqIGNvbmZpZy9hcm0vdC1hcm0tZWxmOiBOZXcgZmlsZS4gIG1ha2VmaWxlIGZyYWdtZW50IGZvciBhcm0tZWxmCglidWlsZHMuCgkKCSogY29uZmlnL2FybS9jb2ZmLmg6IEluY2x1ZGUgYW91dC5oIGZvciBiYXNpYyBhc3NlbWJsZXIgbWFjcm9zLgoJQWRkIHN1cHBvcnQgZm9yIC1tc3RydWN0dXJlX3NpemVfYm91bmRhcnk9PG4+IGNvbW1hbmQgbGluZSBvcHRpb24uCgkKCSogY29uZmlnL2FybS9hcm0uaDogQWRkIHN1cHBvcnQgZm9yIC1tc3RydWN0dXJlX3NpemVfYm91bmRhcnk9PG4+Cgljb21tYW5kIGxpbmUgb3B0aW9uLiAgTWFrZSBtYWNybyBkZWZpbml0aW9ucyBjb25kaXRpb25hbCBvbiB0aGVpcgoJbm90IGhhdmluZyBiZWVuIGFscmVhZHkgZGVmaW5lZC4gCgoJKiBjb25maWcvYXJtL2FybS5jOiBBZGQgc3VwcG9ydCBmb3IgLW1zdHJ1Y3R1cmVfc2l6ZV9ib3VuZGFyeT08bj4KCWNvbW1hbmQgbGluZSBvcHRpb24uCgoJClR1ZSBPY3QgMjcgMDg6NTY6NDYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZHdhcmZvdXQuYyAoQVNNX09VVFBVVF9EV0FSRl9TVFJJTkdfTkVXTElORSk6IEFTTV9PVVRQVVRfRFdBUkZfU1RSSU5HCgloYXMgYmVlbiBjaGFuZ2VkIHRvIG5vdCBpbmNsdWRlIGEgbmV3bGluZS4gVXNlIHRoaXMgbWFjcm8gaW5zdGVhZC4KCShvdXRwdXRfZW51bWVyYWxfbGlzdCwgY29uc3RfdmFsdWVfYXR0cmlidXRlLCBuYW1lX2F0dHJpYnV0ZSwKCWNvbXBfZGlyX2F0dHJpYnV0ZSwgcHJvdG90eXBlZF9hdHRyaWJ1dGUsIHByb2R1Y2VyX2F0dHJpYnV0ZSwKCWlubGluZV9hdHRyaWJ1dGUsIHB1cmVfb3JfdmlydHVhbF9hdHRyaWJ1dGUsIG91dHB1dF9pbmhlcml0YW5jZV9kaWUsCglkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wsIGdlbmVyYXRlX25ld19zZm5hbWVfZW50cnksCglnZW5lcmF0ZV9tYWNpbmZvX2VudHJ5LCBkd2FyZm91dF9pbml0LCBkd2FyZm91dF9maW5pc2gpOiBVc2UKCUFTTV9PVVRQVVRfRFdBUkZfU1RSSU5HX05FV0xJTkUgbWFjcm8uCgpNb24gT2N0IDI2IDEzOjM1OjAyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb21iaW5lLmMgKHN1YnN0KTogUHJvY2VzcyB0aGUgaW5wdXRzIHRvIGEgcGFyYWxsZWwgYXNtX29wZXJhbmRzCglvbmx5IG9uY2UuCgpNb24gT2N0IDI2IDEzOjMyOjMxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBBY2NlcHQgYD0nIG9yIGArJyBhdCBhbnkgcG9zaXRpb24uCgpNb24gT2N0IDI2IDEyOjUzOjE0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRtLnRleGkgKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBEb2N1bWVudC4KCk1vbiBPY3QgMjYgMDA6MzY6NTggUFNUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gT2N0IDI1IDIzOjM2OjUyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX2ZpeHVwKTogU2V0IGZpeHVwLT5iZWZvcmVfanVtcCB0byBhCglOT1RFX0lOU05fREVMRVRFRCBpbnN0ZWFkIG9mIGEgTk9URV9JTlNOX0JMT0NLX0JFRy4KClN1biBPY3QgMjUgMTU6NDk6NTcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHJlY29nLm8pOiBEZXBlbmQgb24gdG9wbGV2LmguCgkoaW5zbi1lbWl0Lm8pOiBEZXBlbmQgb24gcmVjb2cuaC4KCShpbnNuLXBlZXAubyk6IERlcGVuZCBvbiByZWNvZy5oIGFuZCBpbnNuLWNvbmZpZy5oLgoKCSogY29tYmluZS5jIChzaW1wbGlmeV9zZXQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzY3JhdGNoZXMnLgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogV3JhcCBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZXMgYHZsZW4nCiAJYW5kIGBpZHgnIGluIG1hY3JvIGNvbmRpdGlvbmFsIGNvbnRyb2xsaW5nIHRoZWlyIHVzZS4KCgkqIGdlbmVtaXQuYyAobWFpbik6IE1ha2UgdGhlIGdlbmVyYXRlZCBvdXRwdXQgZmlsZSBpbmNsdWRlCiAJcmVjb2cuaC4gIERvbid0IGhhdmUgaXQgZGVjbGFyZSBgaW5zbl9vcGVyYW5kX2NvbnN0cmFpbnQnLCBzaW5jZQogCXdlIGdldCBpdCBmcm9tIHJlY29nLmguCgoJKiBnZW5wZWVwLmMgKG1haW4pOiBNYWtlIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZpbGUgaW5jbHVkZQoJaW5zbi1jb25maWcuaCBhbmQgcmVjb2cuaC4KCgkqIHJlY29nLmM6IEluY2x1ZGUgdG9wbGV2LmguCgkoZXh0cmFjdF9pbnNuKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgcCcuCgoJKiByZWdjbGFzcy5jIChmaXhfcmVnaXN0ZXIpOiBBZGQgbWlzc2luZyBicmFjZXMgYXJvdW5kIGluaXRpYWxpemVyCglmb3IgYHdoYXRfb3B0aW9uJy4KCShhbGxvY2F0ZV9yZWdfaW5mbyk6IE1vdmUgdmFyaWFibGUgYGknIGludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzCgl1c2VkLiAgQ2hhbmdlIGl0cyB0eXBlIHRvIGBzaXplX3QnLgoKU3VuIE9jdCAyNSAxMzoxMDoxNSAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IFdoZW4gbWVyZ2luZyByZWxvYWRzLCBtYWtlIHN1cmUKCXRoYXQgcmVsb2FkX2luX3JlZyBhbmQgcmVsb2FkX2luIGFyZSBmcm9tIHRoZSBzYW1lIHJlbG9hZCBpbgoJYWxsIGNhc2VzLgoKU3VuIE9jdCAyNSAxMjowNzowMCAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3J0ZGxsLmggKENQUF9QUkVERUZJTkVTKTogRml4IHR5cG8uCgkqIGkzODYvbWluZ3czMi5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgoKRnJpIE9jdCAyMyAyMzo0MjowMyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBsb29wLmMgKGxvb3BfaGFzX3RhYmxlanVtcCk6IE5ldyB2YXJpYWJsZS4KCShwcmVzY2FuX2xvb3ApOiBTY2FuIGZvciBpdC4KCShpbnNlcnRfYmN0KTogUmVwbGFjZSBleHBsaWNpdCBzY2FuIHdpdGggdXNlIG9mIGl0LgoJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IFJlc3RvcmUgbG9vcCB2YXJpYWJsZSBqLgoJKHJlY29yZF9yZWdfY2xhc3Nlcyk6IERldGVyaW5lIG9wX3R5cGVzIG1vZGlmaWVycyBhbmQgaW5pdGlhbGl6ZQoJY2xhc3Nlc1tpXSBiZWZvcmUgbWF0Y2hpbmcgY29uc3RyYWludHMuICBIYW5kbGUgbWF0Y2hpbmcKCWNvbnN0cmFpbnRzIDUtOS4KCQpGcmkgT2N0IDIzIDEzOjU1OjQ4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG0zMnIvbTMyci5jIChnZW5fc3BsaXRfbW92ZV9kb3VibGUpOiBDYWxsIGFsdGVyX3N1YnJlZy4gIERlbGV0ZQoJc3VicmVnIHN1cHBvcnQuCgpGcmkgT2N0IDIzIDE2OjE5OjI0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG1pcHMuaCAoRVhUUkFfU1BFQ1MpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgpGcmkgT2N0IDIzIDE2OjA4OjM5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHNwYXJjLmggKEVYVFJBX1NQRUNTKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKHNwYXJjX2RlZmVyX2Nhc2VfdmVjdG9yKTogUHJvdmlkZSBhIHByb3RvdHlwZS4KCgkqIHN2cjQuaCAoQVNNX09VVFBVVF9BU0NJSSk6IENhc3QgU1RSSU5HX0xJTUlUIHRvIChsb25nKSB3aGVuCiAJY29tcGFyaW5nIGl0IHRvIHRoZSByZXN1bHQgb2YgYSBwb2ludGVyIHN1YnRyYWN0aW9uLgoKRnJpIE9jdCAyMyAxNTozNDoxNCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhbHBoYS5jIChvdmVycmlkZV9vcHRpb25zKTogVXNlIElTRElHSVQoKSwgbm90IGlzZGlnaXQoKS4gIENhc3QKCXRoZSBhcmd1bWVudCB0byAodW5zaWduZWQgY2hhcikuCgoJKiBhbHBoYS5oIChFWFRSQV9TUEVDUyk6IEFkZCBtaXNzaW5nIGluaXRpYWxpemVycy4KCShBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOiBFbnN1cmUgdGhlIGFyZ3VtZW50IG1hdGNoZXMgdGhlCglmb3JtYXQgc3BlY2lmaWVyLgoKRnJpIE9jdCAyMyAxMzoxMjozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXNfMSk6IEVuYWJsZSAicmVzY2FuIiBjb2RlIGFmdGVyIHJlbG9hZC4KCShwcm9wYWdhdGVfYmxvY2spOiBEZWxldGUgZGVhZCBjb2RlIGFmdGVyIHJlbG9hZC4KCgkqIHNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBSZXZlcnQgT2N0IDE5LCAxOTk4IGNoYW5nZS4gIEJyaW5ncwoJYmFjayBPY3QgMTUsIDE5OTggY2hhbmdlLiAgCgkqIGhhaWZhLXNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBEZWxldGUgQ0xPQkJFUiBpbnNucyBhZnRlciByZWxvYWQuCgoJKiBtbjEwMjAwLm1kICh0cnVuY2F0ZWQgc2hpZnQpOiBBY2NlcHQgY29uc3RhbnQgaW5wdXRzIHRvby4KCkZyaSBPY3QgMjMgMDQ6MDY6NTcgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIG1hY2htb2RlLmggKG1vZGVfbWFza19hcnJheSk6IE5vIGxvbmdlciBjb25zdC4KCSogcnRsLmMgKGluaXRfcnRsKTogRnVsbHkgaW5pdGlhbGl6ZSBpdCBpZiBFWFRSQV9DQ19NT0RFUyBkZWZpbmVkLgoKRnJpIE9jdCAyMyAxMToxOTowNiAxOTk4ICBNYXJ0aW4gdi4gTPZ3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGZyYW1lLmM6IFNvbWV3aGF0IGV4cGxhaW4gYEZERScuCglTdWdnZXN0ZWQgYnkgQnJlbmRhbiBLZWhvZQoKRnJpIE9jdCAyMyAwMDo1NjoxMSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHByLmMgKHBlbmRpbmdfY2hhaW4pOiBNb3ZlIHVwLgoJKHNhdmVfZXhwcl9zdGF0dXMpOiBEbyBzYXZlIHBlbmRpbmdfY2hhaW4uCgkocmVzdG9yZV9leHByX3N0YXR1cyk6IEFuZCByZXN0b3JlIGl0LgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBBZGQgcGVuZGluZ19jaGFpbi4KCjE5OTgtMTAtMjMgSGVybWFuIEEuSi4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogRml4ZWQgdGVzdCBmb3IgbW9zdGx5X3RydWVfanVtcC4gVGhlCglkaWQgbm90IG1hdGNoIHRoZSBjb2RlLgoKRnJpIE9jdCAyMyAwMDowNzowMSAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ2NsYXNzLmMgKHJlZ2NsYXNzKTogQnJlYWsgb3V0IHNvbWUgY29kZSBpbnRvIG5ldyBmdW5jdGlvbgoJc2Nhbl9vbmVfaW5zbiwgYW5kIGludG8gcmVnY2xhc3NfaW5pdC4KCShpbml0X2Nvc3QpOiBOZXcgc3RhdGljIHZhcmlhYmxlLCBtb3ZlZCBvdXQgb2YgcmVnY2xhc3MuCgkocmVnY2xhc3NfaW5pdCk6IEluaXRpYWxpemUgaXQgaGVyZSwgbm90IGluIC4KCShzY2FuX29uZV9pbnNuKTogTmV3IHN0YXRpYyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiByZWdjbGFzcy4KCSogcmVjb2cuYyAoYXBwbHlfY2hhbmdlX2dyb3VwKTogQnJlYWsgb3V0IHNvbWUgY29kZSBpbnRvIG5ldwoJZnVuY3Rpb24gaW5zbl9pbnZhbGlkX3AuCgkoaW5zbl9pbnZhbGlkX3ApOiBOZXcgc3RhdGljIGZuLCBicm9rZW4gb3V0IG9mIGFwcGx5X2NoYW5nZV9ncm91cC4KClRodSBPY3QgMjIgMjI6MzQ6NDIgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogV2hlbiByZXdyaXRlIFBPU1RfSU5DLCB2ZXJpZnkKCXJlZ19yZWxvYWRlZF9jb250ZW50cyBtYXRjaGVzIGluY3JlbWVudGVkIHBzZXVkby4KCgkqIHY4NTAvdjg1MC5jICh2ODUwX3Jlb3JnKTogQ2FsbCBhbHRlcl9zdWJyZWcuICBEZWxldGUgc3VicmVnIHN1cHBvcnQuCgpGcmkgT2N0IDIzIDExOjExOjU2IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHJ0bC5kZWYgKFBPU1RfTU9ESUZZLCBQUkVfTU9ESUZZKTogTmV3IGdlbmVyYWxpemVkIG9wZXJhdG9ycyBmb3IKICAJYWRkcmVzc2luZyBtb2RlcyB3aXRoIHNpZGUgZWZmZWN0cy4gIFRoZXNlIGFyZSBjdXJyZW50bHkKICAJcGxhY2Vob2xkZXJzIGZvciB0aGUgQzR4IHRhcmdldC4KClRodSBPY3QgMjIgMTY6NDY6MzUgMTk5OCAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBsb29wLmMgKGV4cHJlc3NfZnJvbSk6IE1ha2Ugc3VyZSB0aGF0IHdoZW4gZ2VuZXJhdGluZyBhIFBMVVMgb2YKCWEgUExVUywgYW55IGNvbnN0YW50IGV4cHJlc3Npb24gYXBwZWFycyBvbiB0aGUgb3V0ZXJtb3N0IFBMVVMuCgpUaHUgT2N0IDIyIDE1OjQ2OjIzIDE5OTggIFBlciBCb3RobmVyIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZGlzdGRpci1jdnMsIGRpc3RkaXItc3RhcnQpOiAgQ2xlYW4gdXAgc28gaXQKCXdvcmtzIGlmICIkKHNyY2RpcikiICE9ICIuIi4KCldlZCBPY3QgMjEgMTk6MjM6NTkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IElmIG5lZWQgdG8gYWRkIGEgU1VCUkVHLCB0aGVuIHJlbW92ZQoJZXhpc3RpbmcgU1VCUkVHIGlmIHdlIGNhbiwgb3RoZXJ3aXNlIGFib3J0LgoKV2VkIE9jdCAyMSAwOTo1ODo1MSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYy1jb21tb24uYyAoY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wpOiBEb24ndCBjcmFzaCB3aGVuCglgcmVzdHJpY3QnIGlzIGFwcGxpZWQgdG8gYSBub24tcG9pbnRlciB2YXJpYWJsZS4KCldlZCBPY3QgMjEgMDk6MTg6NTggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGludm9rZS50ZXhpOiBEb2N1bWVudCAtZmxhbmctaXNvYzl4LgoKCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgc3BsYXktdHJlZS5vLgoJKGMtY29tbW9uLm8pOiBEZXBlbmQgb24gcnRsLmguCgkoc3BsYXktdHJlZS5vKTogTGlzdCBkZXBlbmRlbmNpZXMgYW5kIHByb3ZpZGUgYnVpbGQgcnVsZS4KCQoJKiBydGwuaCAocmVjb3JkX2FsaWFzX3N1YnNldCk6IE5ldyBmdW5jdGlvbi4KCSogYWxpYXMuYzogSW5jbHVkZSBzcGxheS10cmVlLmguCgkoYWxpYXNfc2V0X2VudHJ5KTogTmV3IHR5cGUuCgkoQ0hFQ0tfQUxJQVNfU0VUU19GT1JfQ09OU0lTVEVOQ1kpOiBSZW1vdmUuCgkoRElGRkVSRU5UX0FMSUFTX1NFVFNfUCk6IFVzZSBtZW1faW5fZGlzam9pbnRfYWxpYXNfc2V0c19wLgoJKG1lbXNfaW5fZGlzam9pbl9hbGlhc19zZXRzX3ApOiBOZXcgZnVuY3Rpb24uCgkoYWxpYXNfc2V0X2NvbXBhcmUpOiBMaWtld2lzZS4KCShpbnNlcnRfc3Vic2V0X2NoaWxkcmVuKTogTGlrZXdpc2UuCgkoZ2V0X2FsaWFzX3NldF9lbnRyeSk6IExpa2V3aXNlLgoKCSogdHJlZS5oIChUWVBFX1JFU1RSSUNUKTogTmV3IG1hY3JvLgoJKFRZUEVfVU5RVUFMSUZJRUQpOiBOZXcgbWFuaWZlc3QgY29uc3RhbnQuCgkoVFlQRV9RVUFMX0NPTlNUKTogTGlrZXdpc2UKCShUWVBFX1FVQUxfVk9MQVRJTEUpOiBMaWtld2lzZS4KCShUWVBFX1FVQUxfUkVTVFJJQ1QpOiBMaWtld2lzZS4KCSh0cmVlX3R5cGUpOiBBZGQgcmVzdHJpY3RfZmxhZy4gIFJlZHVjZSBjb3VudCBvZiBmcmVlIGJpdHMuCgkoREVDTF9QT0lOVEVSX0FMSUFTX1NFVCk6IE5ldyBtYWNyby4KCShERUNMX1BPSU5URVJfQUxJQVNfU0VUX0tOT1dOX1ApOiBMaWtld2lzZS4KCSh0cmVlX2RlY2wpOiBBZGQgcG9pbnRlcl9hbGlhc19zZXQuCgkoYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfdHlwZV92YXJpYW50KTogRGVmaW5lIGluIHRlcm1zIG9mIGJ1aWxkX3F1YWxpZmllZF90eXBlLgoJKiB0cmVlLmMgKHNldF90eXBlX3F1YWxzKTogTmV3IGZ1bmN0aW9uLgoJKG1ha2Vfbm9kZSk6IEluaXRpYWxpemFlIERFQ0xfUE9JTlRFUl9BTElBU19TRVQuCgkoYnVpbGRfdHlwZV9hdHRyaWJ1dGVfdmFyaWFudCk6IFVzZSBidWlsZF9xdWFsaWZpZWRfdHlwZSBhbmQKCXNldF90eXBlX3F1YWxzLgoJKGJ1aWxkX3R5cGVfdmFyaWFudCk6IFJlbmFtZSwgYW5kIG1vZGlmeSwgdG8gYmVjb21lLi4uCgkoYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfY29tcGxleF90eXBlKTogVXNlIHNldF90eXBlX3F1YWxzLgoKCSogYy10cmVlLmggKENfVFlQRV9PQkpFQ1RfUCk6IE5ldyBtYWNyby4KCShDX1RZUEVfRlVOQ1RJT05fUCk6IExpa2V3aXNlLgoJKENfVFlQRV9JTkNPTVBMRVRFX1ApOiBMaWtld2lzZS4KCShDX1RZUEVfT0JKRUNUX09SX0lOQ09NUExFVEVfUCk6IExpa2V3aXNlLgoJKGNfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoY19idWlsZF90eXBlX3ZhcmlhbnQpOiBEZWZpbmUgaW4gdGVybXMgb2YgY19idWlsZF9xdWFsaWZpZWRfdHlwZS4KCShmbGFnX2lzb2M5eCk6IERlY2xhcmUuCgkqIGMtdHlwZWNrLmMgKHF1YWxpZnlfdHlwZSk6IFVzZSBjX2J1aWxkX3F1YWxpZmllZF90eXBlLgoJKGNvbW1vbl90eXBlKTogQ2hhbmdlIHRvIHVzZSBUWVBFX1FVQUxTLgoJKGNvbXB0eXBlcyk6IExpa2V3aXNlLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4KCSogYy1hdXgtaW5mby5jIChnZW5fdHlwZSk6IExpa2V3aXNlLiAgRGVhbCB3aXRoIGByZXN0cmljdCcuCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IERlZmluZS4KCShjX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZsYW5nLWlzb2M5eC4KCShncm9rZGVjbGFyYXRvcik6IFVwZGF0ZSB0byBoYW5kbGUgcmVzdHJpY3QuICBVc2UgVFlQRV9RVUFMUywKCWNfYnVpbGRfcXVhbGlmaWVkX3R5cGUsIGV0Yy4gIFVzZSBjX2FwcGx5X3R5cGVfcXVhbHNfdG9fZGVjbC4KCSogYy1sZXguYyAoaW5pdF9sZXgpOiBEZWFsIHdpdGggcmVzdHJpY3QuCgkoaW5pdF9sZXgpOiBEb24ndCB0cmVhdCByZXN0cmljdCBhcyBhIHJlc2VydmVkIHdvcmQgaW4KCS10cmFkaXRpb25hbCBtb2RlLCBvciB3aXRob3V0IC1mbGFuZy1pc29jOXguCgkqIGMtbGV4LmggKHJpZCk6IEFkZCBSSURfUkVTVFJJQ1QuCgkqIGMtcGFyc2UuZ3BlcmYgKHJlc3RyaWN0LCBfX3Jlc3RyaWN0LCBfX3Jlc3RyaWN0X18pOiBNYWtlCgllcXVpdmFsZW50IHRvIFJJRF9SRVNUUklDVC4KCSogYy1wYXJzZS5pbiAoVFlQRV9RVUFMKTogVXBkYXRlIGNvbW1lbnQuCgkqIGMtY29tbW9uLmM6IEluY2x1ZGUgcnRsLmguCgkoY19maW5kX2Jhc2VfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShjX2J1aWxkX3R5cGVfdmFyaWFudCk6IFJlbmFtZSwgYW5kIG1vZGlmeSwgdG8gYmVjb21lIC4uLgoJKGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wpOiBMaWtld2lzZS4KCShjX2dldF9hbGlhc19zZXQpOiBGb3IgSU5ESVJFQ1RfUkVGcywgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBmaW5kCglhIHBhcnRpY3VsYXIgYWxpYXMgc2V0IGZvciB0aGUgcmVmZXJlbmNlLgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgLWZsYW5nLWlzb2M5eC4KCldlZCBPY3QgMjEgMDk6MTU6MDYgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IERvY3VtZW50IGFybSBzcGVjaWZpYwoJY29tbWFuZCBsaW5lIHN3aXRjaGVzLgoKVHVlIE9jdCAyMCAxMDowNDo1MSAxOTk4ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIHJlbG9hZC5jIChsb2NfbWVudGlvbmVkX2luX3ApOiBBZGQgbWlzc2luZyBicmFjZXMgdG8gYmluZAoJZWxzZSB0byBjb3JyZWN0IGlmLgoKTW9uIE9jdCAxOSAxNjozNDowNSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAob3B0aW9uX21hcCk6IEFkZGVkIC0tY2xhc3NwYXRoIGFuZCAtLUNMQVNTUEFUSC4KClR1ZSBPY3QgMjAgMTA6NTk6MDIgMTk5OCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiByZWdjbGFzcy5jIChmaXhfcmVnaXN0ZXIpOiBBZGQgZXJyb3IgbWVzc2FnZS4KCSogaW52b2tlLnRleGkgKC1mY2FsbC11c2VkLVJFRywtZmNhbGwtc2F2ZWQtUkVHKTogTm90ZSB0aGUKCSAgbmV3IGVycm9yIG1lc3NhZ2UuCgpUdWUgT2N0IDIwIDEwOjEyOjE3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtZGVjbC5jICh3YXJuX21pc3Npbmdfbm9yZXR1cm4pOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGNfZGVjb2RlX29wdGlvbik6IENoZWNrIGZvciBuZXcgZmxhZ3MgLVd7bm8tfW1pc3Npbmctbm9yZXR1cm4uCgkoZmluaXNoX2Z1bmN0aW9uKTogSW1wbGVtZW50IG1pc3Npbmcgbm9yZXR1cm4gd2FybmluZy4KCgkqIGMtdHJlZS5oICh3YXJuX21pc3Npbmdfbm9yZXR1cm4pOiBEZWNsYXJlIGV4dGVybi4KCgkqIGludm9rZS50ZXhpOiBEb2N1bWVudCBuZXcgZmxhZ3MuCgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgZGVzY3JpcHRpb24uCgpUdWUgT2N0IDIwIDIyOjE2OjExIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9wYXJhbGxlbF9wcm9jZXNzKTogRGlzYWJsZSB1bnRpbCBCQ1QKCWxvb3Agb3B0aW1pemF0aW9uIHN0YWJsZSBmb3IgdGhlIEM0eC4KCShjNHhfcnB0Yl9pbmZvX3QsIGM0eF9kdW1wLCBjNHhfcnB0Yl9pbl9yYW5nZSwgYzR4X3JwdGJfdW5qdW1wZWRfbG9vcCwKCWM0eF9ycHRiX2ZpbmRfY29tcF9hbmRfanVtcCwgYzR4X3JwdGJfbG9vcF9pbmZvX2dldCwKCWM0eF9ycHRiX2VtaXRfaW5pdCwgYzR4X3JwdGJfcHJvY2Vzcyk6IERlbGV0ZWQgKHN1cGVyY2VkZWQgYnkgQkNUCglsb29wIG9wdGltaXphdGlvbikuCgkoYzR4X2FkZHJlc3NfY29uZmxpY3QpOiBCZSBtb3JlIHBhcmFub2lkIHdoZW4gcGFja2luZyBhIHZvbGF0aWxlCgltZW1yZWYgaW4gYSBwYXJhbGxlbCBsb2FkL3N0b3JlLgoKVHVlIE9jdCAyMCAyMTo1NjowNSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAocmVwZWF0X2Jsb2NrX3RvcCwgcmVwZWF0X2Jsb2NrX2VuZCwKIAlyZXBlYXRfYmxvY2tfZmlsbGVyKTogRGVsZXRlZC4KCSgqYXNobHFpM19zZXQsICphc2hycWkzX2NvbnN0X3NldCwgKmFzaHJxaTNfbm9uY29uc3RfY2xvYmJlcik6CiAJQ29uZGl0aW9uIGNvZGUgbm90IHNldCBpZiBkZXN0aW5hdGlvbiByZWdpc3RlciBmcm9tICdjJyBjbGFzcy4KCSgqc3ViYnFpM19jYXJyeV9jbG9iYmVyKTogRml4IHR5cG8uCgoxOTk4LTEwLTE4IEhlcm1hbiBBLkouIHRlbiBCcnVnZ2UgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiByZW9yZy5jIChzdGVhbF9kZWxheV9saXN0X2Zyb21fdGFyZ2V0KSBDaGVjayBmb3IgaW5zbnMgdGhhdAoJbW9kaWZ5IHRoZSBjb25kaXRpb24gY29kZXMgYW5kIGVmZmVjdCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBqdW1wCglpbiB0aGUgc2VxdWVuY2UuCgpTYXQgT2N0IDE3IDEzOjA5OjA5IDE5OTggIEdyYWhhbSAgPGdyYWhhbXNAcmNwLmNvLnVrPgoKCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBSZXBsYWNlIGNhbGwgdG8KICAgICAgICBlbWl0X2luc25zX2JlZm9yZSgpIHdpdGggZW1pdF9pbnNuX2JlZm9yZSgpLgoKTW9uIE9jdCAxOSAxOTozNDowMyAxOTk4ICBNaWtlIFN0dW1wIDxtcnNAd3JzLmNvbT4KCgkqIGxpYmdjYzIuYyAoX19wdXJlX3ZpcnR1YWwpOiBDYWxsIF9fdGVybWluYXRlIGluc3RlYWQgb2YgX2V4aXQuCgpNb24gT2N0IDE5IDEzOjI2OjI0IDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPiAKCgkqIGp1bXAuYyAoc2V0c19jYzBfcCk6IENvbXBpbGUgb25seSBpZiBIQVZFX2NjMC4KCk1vbiBPY3QgMTkgMTE6NDA6NTYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NzZS5jIChjb21wdXRlX2hhc2hfdGFibGUpOiBDb3JyZWN0bHkgaWRlbnRpZnkgaGFyZCByZWdzIHdoaWNoIGFyZQoJY2xvYmJlcmVkIGFjcm9zcyBjYWxscy4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQmUgbW9yZSBzZWxlY3RpdmUgYWJvdXQgd2hhdCBpbnZhcmlhbnRzIGFyZQoJbW92ZWQgb3V0IG9mIGEgbG9vcC4KCk1vbiBPY3QgMTkgMTA6NDY6NTggUERUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gT2N0IDE5IDExOjQwOjU2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxpYmdjYzIuYyAoZWhfY29udGV4dF9zdGF0aWMpOiBEbyBub3QgY2FsbCBtYWxsb2MgdG8gYWxsb2NhdGUgdGhlCglzdGF0aWMgZWhfY29udGV4dCBzdHJ1Y3R1cmUuCgpNb24gT2N0IDE5IDEwOjQ1OjQwIDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPiAKCgkqIGNvbWJpbmUuYyAocmVjb2dfZm9yX2NvbWJpbmUpOiBMb3NlIFBBRERFRF9TQ1JBVENIRVMgYXJnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkodHJ5X2NvbWJpbmUpOiBEb24ndCB1cGRhdGUgbWF4X3NjcmF0Y2guCgkqIGZsb3cuYyAobWF4X3NjcmF0Y2gsIG51bV9zY3JhdGNoKTogRGVsZXRlIHZhcmlhYmxlcy4KCShsaWZlX2FuYWx5c2lzXzEpOiBEb24ndCBpbml0aWFsaXplIG1heF9zY3JhdGNoLgoJKHByb3BhZ2F0ZV9ibG9jayk6IERvbid0IHVwZGF0ZSBtYXhfc2NyYXRjaC4KCShtYXJrX3NldF8xKTogRG9uJ3QgaW5jcmVtZW50IG51bV9zY3JhdGNoLgoJKiByZWdzLmggKG1heF9zY3JhdGNoKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoKTW9uIE9jdCAxOSAxMDoyODoxNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCk6IEhhY2suICBSZXR1cm4gMCBpZiBFUVVJVgoJaXMgbm9uemVyby4gIFRoaXMgaXMgdGVtcG9yYXJ5IQoKCSogc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IEhhbmRsZSBkZWF0aCBub3RlcyBtYWRlIGludmFsaWQgYnkKCWluc3RydWN0aW9uIHNwbGl0dGluZy4gIFBhcnRpYWxseSByZXZlcnRzIE9jdCAxNSwgMTk5OCBwYXRjaC4KCSogaGFpZmEtc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IExpa2V3aXNlLgoKU3VuIE9jdCAxOCAxNzozMToyNiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmdW5jdGlvbi5jICh1bmluaXRpYWxpemVkX3ZhcnNfd2FybmluZyk6IERvIG5vdCB3YXJuIGZvciBhIFZBUl9ERUNMCglpZiBpdCBoYXMgYSBub256ZXJvIERFQ0xfSU5JVElBTC4KClNhdCBPY3QgMTcgMjM6MTg6MDggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGZsb3cubyk6IERlcGVuZCBvbiByZWNvZy5oLgoKCSogY3BwbGliLmggKGRpcmVjdGl2ZV90YWJsZSk6IEFkZCBtaXNzaW5nIGluaXRpYWxpemllcnMuCgkoZmluY2x1ZGUpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgYnNpemUnIHRvIHNpemVfdC4KCQoJKiBjc2UuYyAocnR4X2Nvc3QpOiBNYXJrIHBhcmFtZXRlciBgb3V0ZXJfY29kZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogZHdhcmZvdXQuaCAoZHdhcmZvdXRfbGFiZWwpOiBXcmFwIHByb3RvdHlwZSBpbiBtYWNybyBSVFhfQ09ERS4KCgkqIGZpeC1oZWFkZXIuYyAobG9va3VwX3N0ZF9wcm90byk6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0bwoJYGludCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoY3BwX2ZpbGVfbGluZV9mb3JfbWVzc2FnZSk6IE1hcmsgcGFyYW1ldGVyIGBwZmlsZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShjcHBfZmF0YWwpOiBNYXJrIHBhcmFtZXRlciBgcGZpbGUnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGZsb3cuYzogSW5jbHVkZSByZWNvZy5oLgoJKHNiaXRtYXBfY29weSk6IENhc3QgYXJndW1lbnRzIDEgJiAyIG9mIGBiY29weScgdG8gKFBUUikuCgoJKiBmdW5jdGlvbi5jICh0aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zKTogTWFyayBwYXJhbWV0ZXIKCWBmJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChnZW5faW5zbik6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgZnVuY3Rpb25zIHRvCglgdW5zaWduZWQgY2hhcicuCgoJKiBoYWlmYS1zY2hlZC5jOiBJbmNsdWRlIHJlY29nLmguCgkoYmxvY2thZ2VfcmFuZ2UpOiBDYXN0IHJlc3VsdCBvZiBVTklUX0JMT0NLRUQgbWFjcm8gdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogbGliZ2NjMi5hIChfX3Rocm93KTogUmV2ZXJ0IEFUVFJJQlVURV9VTlVTRUQgY2hhbmdlIGZvciBub3cuCgoJKiBtaXBzLXRmaWxlLmMgKHBhcnNlX2VuZCk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGN0eXBlIGZ1bmN0aW9uIHRvCglgdW5zaWduZWQgY2hhcicuCgkocGFyc2VfZW50KTogTGlrZXdpc2UuCgkocGFyc2VfaW5wdXQpOiBMaWtld2lzZS4KCgkqIG9wdGFicy5jIChpbml0X2xpYmZ1bmNzKTogTGlrZXdpc2UuCgoJKiBwcm90b2l6ZS5jIChmaW5kX3JpZ2h0bW9zdF9mb3JtYWxzX2xpc3QpOiBMaWtld2lzZS4KCgkqIHJlY29nLmggKGNvbnN0X2RvdWJsZV9vcGVyYW5kKTogRml4IHR5cG8gaW4gcHJvdG90eXBlLgoKCSogdGxpbmsuYyAoc2Nhbl9saW5rZXJfb3V0cHV0KTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUKCWZ1bmN0aW9uIHRvIGB1bnNpZ25lZCBjaGFyJy4KCgkqIHRvcGxldi5jIChjaGVja19sYW5nX29wdGlvbik6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0bwoJYGludCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgpTYXQgT2N0IDE3IDEzOjA5OjA5IDE5OTggIEdyYWhhbSAgPGdyYWhhbXNAcmNwLmNvLnVrPgoKCSogZ2NzZS5jIChkdW1wX2N1aWRfdGFibGUpOiBDb3JyZWN0IHR5cG8uCgpTYXQgT2N0IDE3IDExOjAyOjQ3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZGlzcGxheV9oZWxwKTogUHJlcGVuZCAnLW0nIHRvIHRhcmdldCBzcGVjaWZpYwoJb3B0aW9ucy4gCgkoY2hlY2tfbGFuZ19vcHRpb24pOiBJZ25vcmUgdGV4dCBhZnRlciBlbmQgb2YgZmlyc3Qgd29yZCBvZiBhCglsYW5ndWFnZSBzcGVjaWZpYyBvcHRpb24uCgpTYXQgT2N0IDE3IDAyOjI2OjAzIDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPiAKCgkqIHJlbG9hZDEuYyAocmVnX3VzZWRfYnlfcHNldWRvKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBJbml0aWFsaXplIGl0LgoJVXNlIGl0IGluc3RlYWQgb2YgdGVzdGluZyBzcGlsbF9yZWdfb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYQoJcHNldWRvIGlzIGxpdmUgaW4gYSBoYXJkIHJlZ2lzdGVyIGFjcm9zcyB0aGUgY3VycmVudCBpbnNuLgoJRml4IGEgdHlwbyBpbiBhIHJlZmVyZW5jZSB0byByZWxvYWRfcmVnX3J0eC4KCgkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogUmVwbGFjZSBjb2RlIHRoYXQgY29tcHV0ZXMgYW5kIHVzZXMKCXJlZ3Nfc29tZXRpbWVzX2xpdmUgd2l0aCBzaW1wbGVyIGNvZGUgdGhhdCBqdXN0IHdhbGtzIHRoZSBzZXQgb2YKCWN1cnJlbnRseSBsaXZlIHJlZ2lzdGVycy4KCgkqIE1ha2VmaWxlLmluIChpbnNuLWV4dHJhY3Qubyk6IEZpeCBkZXBlbmRlbmNpZXMuCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IEdlbmVyYXRlIGluY2x1ZGVzIGZvciBpbnNuLWNvbmZpZy5oIGFuZAoJcmVjb2cuaC4KCURlbGV0ZSBnZW5lcmF0aW9uIG9mIGRlY2xhcmF0aW9ucyB3aGljaCBhcmUgbm93IGluIHJlY29nLmguCgkqIGdlbnJlY29nLmMgKG1haW4pOiBEZWxldGUgZ2VuZXJhdGlvbiBvZiBkZWZpbml0aW9ucyB3aGljaCBhcmUKCW5vdyBpbiByZWNvZy5jLgoJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IFVzZSBleHRyYWN0X2luc24gYW5kIHRoZSB2YXJpYWJsZXMKCWl0IHNldHMgdXAgaW5zdGVhZCBvZiBsb29raW5nIHVwIHZhbHVlcyBieSBpbnNuX2NvZGUuCgkqIHJlY29nLmMgKHJlY29nX29wZXJhbmQsIHJlY29nX29wZXJhbmRfbG9jLCByZWNvZ19kdXBfbG9jLAoJcmVjb2dfZHVwX251bSk6IERlZmluZSBoZXJlIGluc3RlYWQgb2YgZ2VuZXJhdGluZyB0aGUgZGVmaW5pdGlvbiBpbgoJZ2VucmVjb2cuYy4KCShyZWNvZ19uX29wZXJhbmRzLCByZWNvZ19uX2R1cHMsIHJlY29nX25fYWx0ZXJuYXRpdmVzLAoJcmVjb2dfb3BlcmFuZF9tb2RlLCByZWNvZ19jb25zdHJhaW50cywgcmVjb2dfb3BlcmFuZF9hZGRyZXNzX3ApOgoJTmV3IHZhcmlhYmxlcy4KCShleHRyYWN0X2luc24pOiBOZXcgZnVuY3Rpb24uCgkqIHJlY29nLmggKGV4dHJhY3RfaW5zbik6IERlY2xhcmUgZnVuY3Rpb24uCgkod2hpY2hfYWx0ZXJuYXRpdmUsIHJlY29nX25fb3BlcmFuZHMsIHJlY29nX25fZHVwcywKCXJlY29nX25fYWx0ZXJuYXRpdmVzLCByZWNvZ19vcGVyYW5kX21vZGUsIHJlY29nX2NvbnN0cmFpbnRzLAoJcmVjb2dfb3BlcmFuZF9hZGRyZXNzX3ApOiBEZWNsYXJlIHZhcmlhYmxlcy4KCSogcmVnY2xhc3MuYyAobl9vY2N1cnJlbmNlcyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkqIHJlbG9hZC5jIChuX29jY3VycmVuY2VzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKGZpbmRfcmVsb2Fkcyk6IFVzZSBleHRyYWN0X2luc24uCgkqIHJlbG9hZC5oIChuX29jY3VycmVuY2VzKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoKU2F0IE9jdCAxNyAwMToxNzo1MSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBGaXggdGVzdCBmb3Igd2hlbiB0byBjYWxsCgl1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzLgoKRnJpIE9jdCAxNiAyMDo0MDo1MCAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJRml4IGNvbnNpc3RlbmN5IHByb2JsZW1zIHdpdGggcmVnX2VxdWl2X3ttZW0sYWRkcmVzc307CglJbXByb3ZlIHJlbG9hZCBpbmhlcml0YW5jZTsKCgkqIHJlbG9hZC5jIChyZWxvYWRfb3V0X3JlZyk6IE5ldyB2YXJpYWJsZS4KCShsb2NfbWVudGlvbmVkX2luX3AsIHJlbW92ZV9hZGRyZXNzX3JlcGxhY2VtZW50cyk6IE5ldyBmdW5jdGlvbnMuCgkocmVtb3ZlX3JlcGxhY2VtZW50cyk6IERlbGV0ZWQuCgkocHVzaF9yZWxvYWQpOiBTZXQgcmVsb2FkX291dF9yZWdbaV0uCglXaGVuIG1lcmdpbmcsIGFsc28gc2V0IHJlbG9hZF97aW4sb3V0fV9yZWdbaV0sIGFuZCByZW1vdmUKCWR1cGxpY2F0ZSBhZGRyZXNzIHJlbG9hZHMuCgkoY29tYmluZV9yZWxvYWRzKTogQ29weSByZWxvYWRfb3V0X3JlZ1tpXS4KCShmaW5kX3JlbG9hZHMpOiBEbyBtYWtlX21lbWxvYyBzdWJzdGl0dXRpb24gYWxzbyB3aGVuCglyZWdfZXF1aXZfbWVtb3J5X2xvY1tyZWdub10gYW5kIG51bV9ub3RfYXRfaW5pdGlhbF9vZmZzZXQKCWFyZSBib3RoIG5vbnplcm8uCglJbmNsdWRlICpyZWNvZ19vcGVyYW5kX2xvYyBpbiBjb21tdXRhdGl2aXR5IG9wZXJhbmQgY2hhbmdlcy4KCUdlbmVyYXRlIG9wdGlvbmFsIG91dHB1dCByZWxvYWRzLgoJRGVsZXRlIHJlZmVyZW5jZSB0byBuX21lbWxvY3MuICBEb24ndCBzZXQgKnJlY29nX29wZXJhbmRfbG9jIGJlZm9yZQoJcHJvY2Vzc2luZyBvcGVyYW5kcy4gIENhbGwgbWFrZV9tZW1sb2MgaW4gcmVnX2VxdWl2X2FkZHJlc3MgY29kZS4KCVNldCAqcmVjb2dfb3BlcmFuZF9sb2Mgb25seSBhZnRlciBwcm9jZXNzaW5nIG9wZXJhbmRzLCBhbmQgb25seQoJaWYgcmVwbGFjZSBpcyB0cnVlLiAgUmV0dXJuIGEgdmFsdWUuCglXaGVuIGNoYW5naW5nIGFkZHJlc3MgcmVsb2FkIHR5cGVzIGZvciBvcGVyYW5kcyB0aGF0IGRpZG4ndCBnZXQKCXJlbG9hZGVkLCB1c2UgUkVMT0FEX0ZPUl9PUEFERFJfQUREUkVTUyBmb3IKCVJFTE9BRF9GT1JfSU5QQUREUl9BRERSRVNTIC8gUkVMT0FEX0ZPUl9PVVRBRERSX0FERFJFU1MgcmVsb2Fkcy4KCURvbid0IGVtaXQgVVNFcyBmb3IgcHNldWRvIFNVQlJFR3Mgd2hlbiBub3QgcmVwbGFjaW5nLgoJKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogRG8gbWFrZV9tZW1sb2Mgc3Vic3RpdHV0aW9uIGFsc28gd2hlbgoJcmVnX2VxdWl2X21lbW9yeV9sb2NbcmVnbm9dIGFuZCBudW1fbm90X2F0X2luaXRpYWxfb2Zmc2V0CglhcmUgYm90aCBub256ZXJvLgoJKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBMaWtld2lzZS4KCUNhbGwgbWFrZV9tZW1sb2MgaW4gcmVnX2VxdWl2X2FkZHJlc3MgY29kZS4KCShkZWJ1Z19yZWxvYWRfdG9fc3RyZWFtKTogQWRkIGNvZGUgdG8gb3V0cHV0IHJlbG9hZF9vdXRfcmVnLgoJKG1ha2VfbWVtbG9jKTogRGVsZXRlIGxvY2FsIHZhcmlhYmxlIGksIGlmZGVmZWQgb3V0IGNvZGUsIGFuZAoJcmVmZXJlbmNlcyB0byBtZW1sb2NzIGFuZCBuX21lbWxvY3MuCgkobWVtbG9jcywgbl9tZW1sb2NzKTogRGVsZXRlLgoJKHB1c2hfc2Vjb25kYXJ5X3JlbG9hZCk6IENsZWFyIHJlbG9hZF9vdXRfcmVnLgoJKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBQcm92aWRlIG1lbXJlZmxvYyBhcmd1bWVudCB0byBhbGwgY2FsbHMKCXRvIGZpbmRfcmVsb2Fkc19hZGRyZXNzLgoJSW4gQVVUT19JTkMgY29kZSwgaGFuZGxlIG5vbi1kaXJlY3RseSBhZGRyZXNzYWJsZSBlcXVpdmFsZW5jZXMgcHJvcGVybHkuCgkqIHJlbG9hZC5oIChyZWxvYWRfb3V0X3JlZywgbnVtX25vdF9hdF9pbml0aWFsX29mZnNldCk6IERlY2xhcmUuCgkoZmluZF9yZWxvYWRzKTogQWRkIHJldHVybiB0eXBlLgoJKHJlbW92ZV9hZGRyZXNzX3JlcGxhY2VtZW50cywgZGVhbGxvY2F0ZV9yZWxvYWRfcmVnKTogRGVjbGFyZS4KCSogcmVsb2FkMS5jIChudW1fbm90X2F0X2luaXRpYWxfb2Zmc2V0KTogTm8gbG9uZ2VyIHN0YXRpYy4KCShkZWxldGVfYWRkcmVzc19yZWxvYWRzLCBkZWxldGVfYWRkcmVzc19yZWxvYWRzXzEpOiBMaWtld2lzZS4KCShkZWFsbG9jYXRlX3JlbG9hZF9yZWcpOiBOZXcgZnVuY3Rpb24uCgkoc3BpbGxfcmVnX3N0b3JlZF90byk6IE5ldyBhcnJheS4KCShlbGltaW5hdGVfcmVncyk6IERvbid0IHN1YnN0aXR1dGUgZnJvbSByZWdfZXF1aXZfbWVtb3J5X2xvYy4KCShlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogTW92ZSBhc3NpZ25tZW50cyBvZiBwcmV2aW91c19vZmZzZXQgYW5kCgltYXhfb2Zmc2V0IGZpZWxkcywgYW5kIHJlY2FsY3VsYXRpb24gb2YgbnVtX25vdF9hdF9pbml0aWFsX29mZnNldAoJaW50byBuZXcgc3RhdGljIGZ1bmN0aW9uOgoJKHVwZGF0ZV9lbGltaW5hYmxlX29mZnNldHMpIC4KCShyZWxvYWRfYXNfbmVlZGVkKTogQ2FsbCB1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzcyBhZnRlciBjYWxsaW5nCglmaW5kX3JlbG9hZHMuCglDYWxsIGZvcmdldF9vbGRfcmVsb2Fkc18xIHdpdGggY29udGVudHMgb2YgcmVsb2FkZWQgYXV0b19pbmMKCWV4cHJlc3Npb25zIGlmIHRoZSBhY3R1YWwgYWRkcmVzc2luZyBjYW4ndCBiZSBjaGFuZ2VkIHRvIG1hdGNoIHRoZQoJYXV0b19pbmMuCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogRm9yIGluaGVyaXRhbmNlLCByZXBsYWNlCglyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3AgdGVzdCB3aXRoIHJlbG9hZF9yZWdfdXNlZF9hdF9hbGwgdGVzdCwgYW5kCglyZW1vdmUgc3RhbmQtYWxvbmUgcmVsb2FkX3JlZ191c2VkX2F0X2FsbCB0ZXN0LgoJVXNlIHJlbG9hZF9vdXRfcmVnIHRvIGRldGVybWluZSB3aGljaCByZWxvYWQgcmVncyBoYXZlIG91dHB1dCByZWxvYWRzLgoJVHJlYXQgcmVsb2FkX292ZXJyaWRlX2luIG1vcmUgc2ltaWxhciB0byBpbmhlcml0ZWQgcmVsb2Fkcy4KCUhhbmRsZSAoc3VicmVnIChyZWcuLi4gZm9yIGluaGVyaXRhbmNlLgoJRm9yIGZsYWdfZXhwZW5zaXZlX29wdGltaXphdGlvbnMsIGFkZCBhbiBleHRyYSBwYXNzIHRvIHJlbW92ZQoJdW5uZWNlc3NhcnkgcmVsb2FkcyBmcm9tIGtub3duIHdvcmtpbmcgaW5oZXJpdGFuY2UuCglEZWxldGUgb2Jzb2xldGUgY29kZSBmb3IgcHNldWRvcyByZXBsYWNlZCB3aXRoIE1FTXMuCglIYW5kbGUgaW5oZXJpdGFuY2UgZnJvbSBhdXRvX2luYyBleHByZXNzaW9ucy4KCShlbWl0X3JlbG9hZF9pbnNucyk6IElmIHJlbG9hZF9pbiBpcyBhIE1FTSwgc2V0IE9MRCB0byAKCXJlbG9hZF9pbl9yZWdbal0uCglEb24ndCByZWxvYWQgZGlyZWN0bHkgZnJvbSBvbGRlcXVpdjsgaWYgaXQncyBhIHBzZXVkbyB3aXRoIGEKCXN0YWNrIHNsb3QsIHVzZSByZWxvYWRfaW5bal0uCglDaGVjayB0aGF0IHJlbG9hZF9pbl9yZWdbal0gaXMgYSBNRU0gYmVmb3JlIHJlcGxhY2luZyByZWxvYWRfaW4KCWZyb20gcmVnX3JlbG9hZGVkX2NvbnRlbnRzLgoJSW5jbHVkZSBub24tc3BpbGwgcmVnaXN0ZXJzIGluIHJlbG9hZCBpbmhlcml0YW5jZSBwcm9jZXNzaW5nLgoJQWxzbyB0cnkgdG8gdXNlIHJlbG9hZF9vdXRfcmVnIHRvIHNldCBzcGlsbF9yZWdfc3RvcmUgLwoJcmVnX2xhc3RfcmVsb2FkX3JlZy4KCUluIGNvZGUgdG8gc2V0IG5ld19zcGlsbF9yZWdfc3RvcmUsIHVzZSBzaW5nbGVfc2V0IHRvIGZpbmQgb3V0IGlmCgl0aGVyZSBpcyBhIHNpbmdsZSBzZXQuCglBZGQgY29kZSB0aGF0IGFsbG93cyB0byBkZWxldGUgb3B0aW9uYWwgb3V0cHV0IHJlbG9hZHMuCglBZGQgY29kZSB0byBhbGxvdyBkZWxldGlvbiBvZiBvdXRwdXQgcmVsb2FkcyB0aGF0IHVzZSBubyBzcGlsbCByZWcuCglBdCB0aGUgZW5kLCBzZXQgcmVsb2FkX292ZXJyaWRlX2luIHRvIG9sZGVxdWl2LgoJQWxzbyBjYWxsIGRlbGV0ZV9vdXRwdXRfcmVsb2FkIGlmIHJlbG9hZF9vdXRfcmVnIGlzIGVxdWFsIHRvIG9sZAoJaW4gb2xkZXF1aXYgY29kZS4KCUFkZCBjb2RlIHRvIGNhbGwgZGVsZXRlX291dHB1dF9yZWxvYWQgZm9yIHN0b3JlcyB3aXRoIG5vIG1hdGNoaW5nIGxvYWQuCglTZXQgLyB1c2Ugc3BpbGxfcmVnX3N0b3JlZF90by4KICAgICAgICBIYW5kbGUgY2FzZSB3aGVyZSBzZWNvbmRhcnkgb3V0cHV0IHJlbG9hZCB1c2VzIGEgdGVtcG9yYXJ5LCBidXQKCWFjdHVhbCBzdG9yZSBpc24ndCBmb3VuZC4KCVdoZW4gbG9va2luZyBmb3IgYSBzdG9yZSBvZiBhIHZhbHVlIG5vdCBsb2FkZWQgaW4gb3JkZXIgdG8gY2FsbAoJZGVsZXRlX291dHB1dF9yZWxvYWQsIGNvdW50X29jY3VyZW5jZXMgc2hvdWxkIHJldHVybiAwIGZvciBubwoJbG9hZHM7IGJ1dCBkaXNjb3VudCBpbmhlcml0ZWQgaW5wdXQgcmVsb2FkaWxsX3JlZ19zdG9yZWRfdG8uCglEbyBjaGVja3MgZm9yIGV4dHJhIHVzZXMgb2YgUkVHLiAgQ2hhbmdlZCBhbGwKCWNhbGxlcnMuCglVc2UgZGVsZXRlX2FkZHJlc3NfcmVsb2Fkcy4KCShyZWxvYWQpOiBUYWtlIHJldHVybiB2YWx1ZSBvZiBmaW5kX3JlbG9hZHMgaW50byBhY2NvdW50LgoJSWYgYSBuby1vcCBzZXQgbmVlZHMgbW9yZSB0aGFuIG9uZSByZWxvYWQsIGRlbGV0ZSBpdC4KCShyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3ApOiBSRUxPQURfRk9SX0lOUFVUCgljYW4gaWdub3JlIFJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUyAvIFJFTE9BRF9GT1JfSU5QQUREUl9BRERSRVNTCglmb3IgdGhlIHNhbWUgb3BlcmFuZC4KCShjbGVhcl9yZWxvYWRfcmVnX2luX3VzZSk6IENoZWNrIGZvciBvdGhlciByZWxvYWRzIHRoYXQga2VlcCBhCglyZWdpc3RlciBpbiB1c2UuCgkocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogaGFuZGxlIFJFTE9BRF9GT1JfT1BFUkFORF9BRERSRVNTIC8KCVJFTE9BRF9GT1JfT1BBRERSX0FERFIuCglUYWtlIGludG8gYWNjb3VudCB3aGVuIGFuIGFkZHJlc3MgYWRkcmVzcyByZWxvYWQgaXMgb25seSBuZWVkZWQKCWZvciB0aGUgYWRkcmVzcyByZWxvYWQgd2UgYXJlIGNvbnNpZGVyaW5nLgoJKGNvdW50X29jY3VycmVuY2VzKTogVXNlIHJ0eF9lcXVhbF9wIGZvciBNRU1zLgoJKGluY19mb3JfcmVsb2FkKTogUmV0dXJuIGluc3RydWN0aW9uIHRoYXQgc3RvcmVzIGludG8gUkVMT0FEUkVHLgoJTmV3IGFyZ3VtZW50IHR3bywgSU4sIGFuZCBydHguICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMsIHJlbG9hZF9hc19uZWVkZWQpOgoJRG9uJ3QgY2xlYXIgYWZ0ZXJfY2FsbCBmb3IgYSBDTE9CQkVSLgoJS2VlcCB0cmFjayBvZiBob3cgbWFueSBoYXJkIHJlZ2lzdGVycyBuZWVkIHRvIGJlIGNvcGllZCBmcm9tCglhZnRlcl9jYWxsLCBhbmQgZG9uJ3QgY2xlYXIgYWZ0ZXJfY2FsbCBiZWZvcmUgd2UgaGF2ZSBzZWVuCgl0aGF0IG11Y2ggY29waWVzLCBvciB3ZSBzZWUgYSBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb24uCgpGcmkgT2N0IDE2IDEwOjU4OjIzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3NfMSk6IERvIG5vdCBkZWxldGUgdW5yZWFjaGFibGUgYmxvY2tzCglhZnRlciByZWxvYWQgaGFzIGNvbXBsZXRlZC4KCkZyaSBPY3QgMTYgMTc6MjY6MTAgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY3BwbGliLmMgKGNwcF9nZXRfdG9rZW4pOiBSZXBsYWNlIHdoaXRlc3BhY2UgdGhhdCBvY2N1cnMgYmV0d2VlbgoJYSBtYWNybyBuYW1lIGFuZCB0aGUgbmV4dCB0b2tlbiB3aXRoIGEgc2luZ2xlIGJsYW5rIGlmIHRoYXQgd2hpdGVzcGFjZQoJaXMgaW4gYSBtYWNybyBidWZmZXIgYW5kIHRoZSBuZXh0IHRva2VuIGlzIG5vdCAnKCcuCgpGcmkgT2N0IDE2IDE1OjQ0OjAyIDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjY2NwLmMgKHJlc2Nhbik6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcnRhY3RlcnMgZW5kaW5nIGluIGJhY2tzbGFzaC4KICAgICAgICAocmVzY2FuKTogRGl0dG8uCiAgICAgICAgKHNraXBfaWZfZ3JvdXApOiBEaXR0by4KICAgICAgICAoc2tpcF90b19lbmRfb2ZfY29tbWVudCk6IERpdHRvLgogICAgICAgIChtYWNhcmcxKTogRGl0dG8uCiAgICAgICAgKGRpc2NhcmRfY29tbWVudHMpOiBEaXR0by4KICAgICAgICAoY2hhbmdlX25ld2xpbmVzKTogRGl0dG8uCgpGcmkgT2N0IDE2IDE1OjI2OjI0IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjLWxleC5jICh5eWxleCk6IEZpeCB1bmFsaWduZWQgYWNjZXNzIG9mIHdjaGFyX3QuCgpGcmkgT2N0IDE2IDEwOjQ3OjUzIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgLS1oZWxwIGRvY3VtZW50YXRpb24uCgkoVEFSR0VUX09QVElPTlMpOiBBZGQgLS1oZWxwIGRvY3VtZW50YXRpb24uCgpGcmkgT2N0IDE2IDExOjQ5OjAxIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHJ0bC5oIChzZXRzX2NjMF9wKTogUmV2ZXJ0IE9jdCAxNCBBVFRSSUJVVEVfTk9SRVRVUk4gY2hhbmdlLgoKRnJpIE9jdCAxNiAwNzowODo0NiAxOTk4ICBCcnVjZSBLb3JiIDxrb3JiQGRhdGFkZXNpZ24uY29tPgoJCgkqIGZpeGluYy8qIE1vdmVkIGluIGZyb20gLi4vY29udHJpYiBkaXJlY3RvcnkgaW4gcHJlcGFyYXRpb24KCWZvciBpbnRlZ3JhdGluZyBpdCBpbnRvIHRoZSBub3JtYWwgYnVpbGQgcHJvY2Vzcy4gIEluIHBhcnRpY3VsYXIsCglmaXhpbmMvTWFrZWZpbGUuaW4gbXVzdCBiZSBjb25maWctZWQgaW50byB0aGUgYnVpbGQgZGlyZWN0b3J5CglhcyBmaXhpbmMvTWFrZWZpbGUuICBQcm9wb3NlZCBwYXRjaGVzIHRvIC4vTWFrZWZpbGUuaW4gYW5kCgkuL2NvbmZpZ3VyZS5pbiB3aWxsIGJlICJpbiB0aGUgbWFpbCIgbW9tZW50YXJpbHkuCgpGcmkgT2N0IDE2IDA4OjEzOjQ2IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bmV0LmNvbT4KCgkqIGNzZS5jIChjc2VfYmFzaWNfYmxvY2spOiBGaXh1cCBoYXNoIGZsdXNoaW5nIGxvb3Agc28gd2UgZG8gbm90CglhY2NpZGVudGx5IHdhbGsgaW50byB0aGUgZnJlZSBsaXN0LiAgQ29tbWVudCBob3cgdGhhdCBjYW4gaGFwcGVuLgoJKGludmFsaWRhdGUpOiBGaXggaW5kZW50YXRpb24uCgpUaHUgT2N0IDE1IDIzOjUzOjI5IDE5OTggQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgkJCSBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXNfMSk6IERvIG5vdCBjbG9iYmVyIHJlZ3NfZXZlcl9saXZlIGFmdGVyCglyZWxvYWQuICBOZXZlciBwZXJmb3JtIHJlc2NhbnMgb2YgdGhlIGluc24gY2hhaW4gYWZ0ZXIgcmVsb2FkLgoJKHByb3BhZ2F0ZV9ibG9jayk6IERvIG5vdCBkZWxldGUgaW5zbiBvciBjcmVhdGUgbmV3IGF1dG9pbmMgYWRkcmVzc2luZwoJbW9kZXMgYWZ0ZXIgcmVsb2FkLgoKCSoganVtcC5jIChqdW1wX29wdGltaXplKTogVW5jb25kaXRpb25hbGx5IHVzZSB0aGUgY29kZSB0aGF0IHdhcwoJcHJldmlvdXNseSBjb25kaXRpb25hbCBvbiBQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1AuCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogV2hlbiByZWxvYWRpbmcgaXMgZmluaXNoZWQsIGRlbGV0ZSBhbGwKCVJFR19ERUFEIGFuZCBSRUdfVU5VU0VEIG5vdGVzLgoJKGVtaXRfcmVsb2FkX2luc25zKTogRGVsZXRlIGFsbCBjb2RlIHRoYXQgd2FzIGNvbmRpdGlvbmFsIG9uCglQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1AuCgkobm9fbG9uZ2VyX2RlYWRfcmVncyk6IERlbGV0ZSB2YXJpYWJsZS4KCShyZWxvYWRfY3NlX2RlbGV0ZV9kZWF0aF9ub3Rlcyk6IERlbGV0ZSBmdW5jdGlvbi4KCShyZWxvYWRfY3NlX25vX2xvbmdlcl9kZWFkKTogRGVsZXRlIGZ1bmN0aW9uLgoJKHJlbG9hZF9jc2VfcmVnc18xKTogRGVsZXRlIGFsbCBjb2RlIHRvIGhhbmRsZSBkZWxldGlvbiBvZiBkZWF0aAoJbm90ZXMuCgkocmVsb2FkX2NzZV9ub29wX3NldF9wKTogTGlrZXdpc2UuCgkocmVsb2FkX2NzZV9zaW1wbGlmeV9zZXQpOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogTGlrZXdpc2UuCgkocmVsb2FkX2NzZV9tb3ZlMmFkZCk6IExpa2V3aXNlLgoJKiByZW9yZy5jICh1c2VkX3NwaWxsX3JlZ3MpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkobWF4X2xhYmVsX251bV9hZnRlcl9yZWxvYWQpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoZmluZF9kZWFkX29yX3NldF9yZWdpc3RlcnMpOiBEb24ndCBhc3N1bWUgdGhhdCBzcGlsbCByZWdzIGFyZQoJZGVhZCBhdCBhIENPREVfTEFCRUwuCgkqIHJ0bGFuYWwuYyAoZGVhZF9vcl9zZXRfcmVnbm9fcCk6IERlYXRoIG5vdGVzIGFyZSBhbHdheXMgYWNjdXJhdGUsCglldmVuIGFmdGVyIHJlbG9hZC4KCSogc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogTGlrZXdpc2UuCgkodXBkYXRlX2Zsb3dfaW5mbyk6IExpa2V3aXNlLgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplX2luc24pOiBMaWtld2lzZS4KCSh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgkqIHRtLnRleGkgKFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUCk6IERlbGV0ZSBkb2N1bWVudGF0aW9uLgoJKiB0b3BsZXYuYyAobWF4X2xhYmVsX251bV9hZnRlcl9yZWxvYWQpOiBEZWxldGUgdmFyaWFibGUuCgkocmVzdF9vZl9jb21waWxhdGlvbik6IERvbid0IHNldCBtYXhfbGFiZWxfbnVtX2FmdGVyX3JlbG9hZC4KCUNhbGwgbGlmZV9hbmFseXNpcyBhZnRlciByZWxvYWRfY3NlX3JlZ3MgaWYgb3B0aW1pemluZy4KCSogY29uZmlnL2dtaWNyby9nbWljcm8uaDogRGVsZXRlIGNvbW1lbnQgcmVmZXJyaW5nIHRvCglQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1AuCgkqIGNvbmZpZy9pMzg2L2kzODYuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9tODhrL204OGsuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9tMzJyL20zMnIuaCAoUFJFU0VSVkVfREVBVEhfSU5GT19SRUdOT19QKTogRGVsZXRlIGRlZmluaXRpb24uCgkqIGNvbmZpZy9zaC9zaC5oOiBMaWtld2lzZS4KClRodSBPY3QgMTUgMTk6NDg6NDEgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBSZXN0b3JlIG1hcmtpbmcgYmN0X3AgYXMKCUFUVFJJQlVURV9VTlVTRUQuCgkqIHJzNjAwMC5jIChvcHRpbWl6YXRpb25fb3B0aW9ucyk6IENoYW5nZSAjaWZkZWYgSEFJRkEgdG8KCUhBVkVfZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQuCgkoc21hbGxfZGF0YV9vcGVyYW5kKTogUmVtb3ZlIFRBUkdFVF9FTEYgY29uZGl0aW9uIGZvciBtYXJraW5nCglwYXJhbWV0ZXJzIEFUVFJJQlVURV9VTlVTRUQuCgkKVGh1IE9jdCAxNSAxMTo0NTo1MSAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcvaTM4Ni9zY281LmggKE1BWF9PRklMRV9BTElHTk1FTlQpOiAgRGVmaW5lLgoJKFNFTEVDVF9TRUNUSU9OKTogUmVzeW5jIHdpdGggc3ZyNC5oLgoKVGh1IE9jdCAxNSAxMjo0MjoxMyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFVuZG8gT2N0IDE0IGNoYW5nZSBtYXJraW5nIGJjdF9wCglBVFRSSUJVVEVfVU5VU0VELgoKVGh1IE9jdCAxNSAwMDo1Nzo1NSAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogVGVzdCBmb3IgbnVsbCB0cmVlIGJlZm9yZQoJZGVyZWZlcmVuY2luZyBUUkVFX0NPREUuCgpUaHUgT2N0IDE1IDE3OjM2OjQ4IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IENvbnZlcnQgdG8gdXNlIEdFTl9JTlQuCgkoYzR4X3BhcmFsbGVsX3Byb2Nlc3MpOiBSZXdvcmsgdG8gaGFuZGxlIG5ldyByZXBlYXQgbG9vcCBzdHJ1Y3R1cmUuCgoJKiBjb25maWcvYzR4L2M0eC5tZDogQ29udmVydCB0byB1c2UgR0VOX0lOVC4gCgkocnB0Yl9lbmQpOiBDb252ZXJ0IHRvIHVzZSBHRSB0ZXN0LiAgUmVwbGFjZSB1c2VzIHdpdGggY2xvYmJlcnMuCgkoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBMaWtld2lzZS4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFJFUEVBVF9CTE9DS19QUk9DRVNTKTogRGVsZXRlZCBob29rIG5vdyB0aGF0Cglsb29wLmMgaGFzIHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkuCgkocmNfcmVnX29wZXJhbmQpOiBOZXcgcHJvdG90eXBlLgoKCSogY29uZmlnL2M0eC90LWM0eDogQ2FuIG5vdyBidWlsZCBhbGwgZnJvbnQgZW5kcy4KCldlZCBPY3QgMTQgMjM6Mjc6MDggMTk5OCAgRGlkaWVyIEZPUlQgKGRpZGllci5mb3J0QGZlZGV4LmNvbSkKCgkqIGZpeGluY2x1ZGVzOiBGaXggdXAgcnBjL3tjbG50LHN2cix4ZHJ9LmggZm9yIFN1bk9TLgoKV2VkIE9jdCAxNCAyMjoxMzoyOCAxOTk4ICBKb2VsIFNoZXJyaWxsIChqb2VsQE9BUmNvcnAuY29tKQoKCSogTWFrZWZpbGUuaW4gKHN0bXAtZml4aW5jKTogRG8gbm90IGluc3RhbGwgYXNzZXJ0LmggaWYgbm90IGRlc2lyZWQuCgkqIGNvbmZpZy90LXJ0ZW1zOiBEbyBub3QgaW5zdGFsbCBhc3NlcnQuaCAtLSB1c2UgbmV3bGliJ3MuCgpXZWQgT2N0IDE0IDIxOjU3OjA4IDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNvbWJpbmUuYyAoY29tYmluZV9pbnN0cnVjdGlvbnMpOiBXaGVuIGZpbmlzaGVkLCBjYWxsIGluaXRfcmVjb2cuCgkqIHJlZ21vdmUuYyAob3B0aW1pemVfcmVnX2NvcHlfMyk6IFJlamVjdCB2b2xhdGlsZSBNRU1zLgoKV2VkIE9jdCAxNCAxNjoxMDoyMiAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jOiAgSWYgZmxhZ19zeW50YXhfb25seSwgZG9uJ3Qgb3BlbiBvciB3cml0ZSBhc3NlbWJsZXIgZmlsZS4KCldlZCBPY3QgMTQgMTM6MjY6MDUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BwYWxsb2MuYyAobWVtb3J5X2Z1bGwpOiBNYXJrIGZ1bmN0aW9uIHByb3RvdHlwZSB3aXRoCglBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiBkZW1hbmdsZS5oIChjb2xsZWN0X2V4aXQpOiBMaWtld2lzZS4KCgkqIGZpeC1oZWFkZXIuYyAodl9mYXRhbCwgZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChwZmF0YWxfd2l0aF9uYW1lLCBwZmF0YWxfcGV4ZWN1dGUsIGZhdGFsLCBmYW5jeV9hYm9ydCk6CglMaWtld2lzZS4KCgkqIGdjb3YuYyAocHJpbnRfdXNhZ2UpOiBMaWtld2lzZS4KCgkqIGdlbmF0dHIuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5hdHRydGFiLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuY29kZXMuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5jb25maWcuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5lbWl0LmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbmZsYWdzLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2Vub3Bpbml0LmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2Vub3V0cHV0LmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VucGVlcC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogbGliZ2NjMi5jIChfX2VwcmludGYsIF9fZGVmYXVsdF90ZXJtaW5hdGUsIF9fc2p0aHJvdywKCV9fc2pwb3BudGhyb3csIF9fdGhyb3cpOiBMaWtld2lzZS4KCgkqIG9iamMvb2JqYy1hY3QuYyAob2JqY19mYXRhbCk6IExpa2V3aXNlLgoKCSogcHJvdG9pemUuYyAodXNhZ2UsIGF1eF9pbmZvX2NvcnJ1cHRlZCwKCWRlY2xhcmVfc291cmNlX2NvbmZ1c2luZyk6IExpa2V3aXNlLgoKCSogcnRsLmMgKGR1bXBfYW5kX2Fib3J0KTogTGlrZXdpc2UuCgoJKiBydGwuaCAoc2V0c19jYzBfcCk6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKGZsb2F0X3NpZ25hbCwgcGlwZV9jbG9zZWQpOiBMaWtld2lzZS4KCQoxOTk4LTEwLTE0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBkd2FyZjJvdXQuYyAoZXhwYW5kX2J1aWx0aW5fZHdhcmZfcmVnX3NpemUpOiBMb29rIGF0IGFsbCByYW5nZXMKCXdoZW4gZ2VuZXJhdGluZyB0aGUgZGVjaXNpb24gdHJlZSBmb3IgdGhlIGdlbmVyYWwgY2FzZS4KCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRG9uJ3QgYWNjZXB0IG1vZGVzCgl3aWRlciB0aGF0IDEyIGJ5dGVzIGluIGZwdSByZWdzIG9yIHdpZGVyIHRoYW4gOCBieXRlIGluIGZwYSByZWdzLgoKV2VkIE9jdCAxNCAxMToxNDowMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoc2NoZWQubyk6IERlcGVuZCBvbiByZWNvZy5oLgoKCSogYWxpYXMuYyAoUkVHX0JBU0VfVkFMVUUpOiBDYXN0IHRoZSByZXN1bHQgb2YgUkVHTk8oKSBtYWNybyB0bwoJKHVuc2lnbmVkKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShmaW5kX2Jhc2VfdmFsdWUpOiBMaWtld2lzZS4KCShyZWNvcmRfYmFzZV92YWx1ZSk6IENhc3QgdmFyaWFibGUgYHJlZ25vJyB0byAodW5zaWduZWQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIENhc3QgdGhlIHJlc3VsdCBvZiBSRUdOTygpIG1hY3JvIHRvCgkodW5zaWduZWQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG1lbXJlZnNfY29uZmxpY3RfcCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlcyBgcl94JyBhbmQgYHJfeScgIHRvCgl1bnNpZ25lZC4KCShpbml0X2FsaWFzX2FuYWx5c2lzKTogQWRkIHVuc2lnbmVkIHZhcmlhYmxlIGB1aScuICBVc2UgaXQgYXMgbG9vcAoJdmFyaWFibGUgd2hlcmUgYW4gdW5zaWduZWQgaW5kZXggaXMgbmVlZGVkLgoKCSogY2FsbGVyLXNhdmUuYyAoaW5pdF9jYWxsZXJfc2F2ZSk6IENhc3QgYC0xJyB0byAoZW51bSBpbnNuX2NvZGUpCgliZWZvcmUgY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogY29sbGVjdDIuYzogQWRkIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBgZXJyb3InLCBgZmF0YWwnIGFuZAoJYGZhdGFsX3BlcnJvcicuICBNYWtlIHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHZhcmlhYmxlIGFyZ3VtZW50cwoJaW5zdGVhZCBvZiBmYWtpbmcgaXQgd2l0aCBhIGZpeGVkIG51bWJlciBvZiBhcmdzLgoJKHdyaXRlX2NfZmlsZV9zdGF0KTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gKHVuc2lnbmVkCgljaGFyKS4KCgkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IE1hcmsgcGFyYW1ldGVyIGBwcmVkJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGZpbmRfc3BsaXRfcG9pbnQpOiBDYXN0IHZhcmlhYmxlIGBzcmMnIHRvICh1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoc2ltcGxpZnlfcnR4KTogQ2FzdCAxIHRvICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBpbiBzaGlmdC4KCShzaW1wbGlmeV9sb2dpY2FsKTogTGlrZXdpc2UuCgkoZm9yY2VfdG9fbW9kZSk6IENhc3QgcmVzdWx0IG9mIElOVFZBTCgpIG1hY3JvIHRvICh1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBDYXN0IDEgdG8gKHVuc2lnbmVkCglIT1NUX1dJREVfSU5UKSBpbiBzaGlmdC4KCShzaW1wbGlmeV9hbmRfY29uc3RfaW50KTogQ2FzdCByZXN1bHQgb2YgSU5UVkFMKCkgbWFjcm8gdG8KCWB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShtZXJnZV9vdXRlcl9vcHMpOiBDYXN0IHZhcmlhYmxlIGNvbnN0MCB0byBgdW5zaWduZWQKCUhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3QgdGhlIHJlc3VsdCBvZgoJR0VUX01PREVfTUFTSygpIG1hY3JvLgoJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGMwJy4gIENhc3QgdmFyaWFibGUKCWBjb25zdF9vcCcgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3QKCW9uZS4gIENhc3QgYDEnIHRvIGB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyBpbiBzaGlmdC4gIENhc3QgdGhlCglyZXN1bHQgb2YgYEdFVF9NT0RFX01BU0soKS8yJyB0byBgSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLiAgQ2FzdCBgMScgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIGluIHNoaWZ0LiAgQ2FzdAoJcmVzdWx0IG9mIElOVFZBTCgpIG1hY3JvIHRvIGB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZGlzdHJpYnV0ZV9ub3Rlcyk6IFdyYXAgdmFyaWFibGUgYGNjMF9zZXR0ZXInIGluIG1hY3JvIGBIQVZFX2NjMCcuCgoJY29uZmlnL21pcHMvbWlwcy5jIChnZW5faW50X3JlbGF0aW9uYWwpOiBDYXN0IHJlc3VsdCBvZiBJTlRWQUwoKQoJbWFjcm8gdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG91dHB1dF9ibG9ja19tb3ZlKTogQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShmdW5jdGlvbl9hcmcpOiBDYXN0IEJJVFNfUEVSX1dPUkQgdG8gYHVuc2lnbmVkJyB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgkoc2F2ZV9yZXN0b3JlX2luc25zKTogQ2FzdCBgYmFzZV9vZmZzZXQnIHRvIGBsb25nJyB0byBtYXRjaCBmb3JtYXQKCXNwZWNpZmllciBpbiBmcHJpbnRmLgoKCSogY29uZmlnL21pcHMvbWlwcy5oIChQbW9kZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgUG1vZGUnIG1hY3JvCgl0byBgZW51bSBtYWNoaW5lX21vZGUnLgoKCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpbnNuJy4KCgkqIGdjYy5jICh0cmFuc2xhdGVfb3B0aW9ucyk6IE1vdmUgdmFyaWFibGVzIGBqJyBhbmQgYGsnIGludG8gdGhlCglzY29wZSBpbiB3aGljaCB0aGV5IGFyZSB1c2VkLiAgQ2hhbmdlIHRoZWlyIHR5cGVzIHRvIGBzaXplX3QnLgoJKHNldF9zcGVjKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoJKHJlYWRfc3BlY3MpOiBMaWtld2lzZS4KCShwcm9jZXNzX2NvbW1hbmQpOiBDYXN0IGBzaXplb2YnIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGRvX3NwZWNfMSk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCShoYW5kbGVfYnJhY2VzKTogQ2FzdCBib3RoIHNpZGVzIG9mIGA9PScgZXhwcmVzc2lvbiB0byBgbG9uZycgdG8KCWVuc3VyZSBzaWduIG1hdGNoaW5nLgoJKG1haW4pOiBDYXN0IHZhcmlhYmxlIGBpJyB0byBgaW50JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGdjb3YtaW8uaCAoX19mZXRjaF9sb25nKTogQ2hhbmdlIHR5cGUgb2YgcGFyYW1ldGVyIGBieXRlcycgZnJvbQoJaW50IHRvIHNpemVfdC4gIENhc3QgdmFyaWFibGUgYGknIHRvIHNpemVfdCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CglvbmUuCgoJKiBnZW5hdHRydGFiLmMgKGNvbnZlcnRfc2V0X2F0dHJfYWx0ZXJuYXRpdmUpOiBSZW1vdmUgdW51c2VkCglwYXJhbWV0ZXIgYGluc25fY29kZScuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNvbnZlcnRfc2V0X2F0dHIpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGFkZF90b19zZXF1ZW5jZSk6IENhc3QgcmVzdWx0IG9mIFhWRUNMRU4oKSBtYWNybyB0bwoJc2l6ZV90IHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLiAgTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBsZW4nLgoKCSogZ2xvYmFsLmMgKGdsb2JhbF9hbGxvYyk6IENhc3QgdmFyaWFibGUgYG1heF9yZWdubycgdG8gc2l6ZV90Cgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIExpa2V3aXNlIGZvciB2YXJpYWJsZSBgbWF4X2FsbG9jbm8nLgoKCSoganVtcC5jIChzZXRzX2NjMF9wKTogTWFyayBwYXJhbWV0ZXIgYHgnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGxvY2FsLWFsbG9jLmMgKHZhbGlkYXRlX2VxdWl2X21lbV9mcm9tX3N0b3JlKTogTWFyayBwYXJhbWV0ZXIKCWBzZXQnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShmaW5kX2ZyZWVfcmVnKTogQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCgkqIGxvb3AuYyAoY291bnRfbG9vcF9yZWdzX3NldCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGRlc3QnLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IE1hcmsgcGFyYW1ldGVyIGBiY3RfcCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGdldF9jb25kaXRpb24pOiBDYXN0IHZhcmlhYmxlIGBjb25zdF92YWwnIHRvIGB1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBDYXN0IHVuc2lnbmVkCglleHByZXNzaW9uIHRvIEhPU1RfV0lERV9JTlQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoaW5zZXJ0X2xvb3BfbWVtKTogTWFyayBwYXJhbWV0ZXIgYGRhdGEnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IENhc3QgdmFyaWFibGUgYG5yZWdzJyB0bwoJYHVuc2lnbmVkJyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHByb3RvaXplLmMgKGlzX2lkX2NoYXIpOiBDaGFuZ2UgdHlwZSBvZiBwYXJhbWV0ZXIgYGNoJyB0bwoJdW5zaWduZWQgY2hhci4KCShtdW5nZV9jb21waWxlX3BhcmFtcyk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gKGNvbnN0Cgl1bnNpZ25lZCBjaGFyKS4KCShwcm9jZXNzX2F1eF9pbmZvX2ZpbGUpOiBDYXN0IHZhcmlhYmxlIGBhdXhfaW5mb19zaXplJyB0byBpbnQgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGZvcndhcmRfdG9fbmV4dF90b2tlbl9jaGFyKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0bwoJYGNvbnN0IHVuc2lnbmVkIGNoYXInLgoJKGVkaXRfZm9ybWFsc19saXN0cyk6IExpa2V3aXNlLgoJKGZpbmRfcmlnaHRtb3N0X2Zvcm1hbHNfbGlzdCk6IExpa2V3aXNlLgoJKGFkZF9sb2NhbF9kZWNsKTogTGlrZXdpc2UuCgkoYWRkX2dsb2JhbF9kZWNscyk6IExpa2V3aXNlLgoJKGVkaXRfZm5fZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGRvX2NsZWFuaW5nKTogTGlrZXdpc2UuCgkoc2Nhbl9mb3JfbWlzc2VkX2l0ZW1zKTogTGlrZXdpc2UuCgkoZWRpdF9maWxlKTogQ2FzdCB2YXJpYWJsZSBgb3JpZ19zaXplJyB0byAoaW50KSB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgkobWFpbik6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYGNvbnN0IHVuc2lnbmVkIGNoYXInLgoKCSogcmVjb2cuYyAoY29uc3RfaW50X29wZXJhbmQpOiBNYXJrIHBhcmFtZXRlciBgbW9kZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBjJyB0bwoJYHVuc2lnbmVkIGNoYXInLiAgQ2FzdCBgY2hhcicgYXJyYXkgaW5kZXggdG8gYHVuc2lnbmVkIGNoYXInLgoKCSogcmVsb2FkLmMgKHB1c2hfc2Vjb25kYXJ5X3JlbG9hZCk6IENhc3QgYXJndW1lbnQgdG8KCVJFR19DTEFTU19GUk9NX0xFVFRFUigpIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCgkqIHJlbG9hZDEuYyAoY2FsY3VsYXRlX25lZWRzKTogQ2FzdCBgY2hhcicgYXJyYXkgaW5kZXggdG8KCWB1bnNpZ25lZCBjaGFyJy4KCShzZXRfbGFiZWxfb2Zmc2V0cyk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byB1bnNpZ25lZCBpbnQuCglDYXN0IHJlc3VsdCBvZiBYVkVDTEVOKCkgbWFjcm8gdG8gdW5zaWduZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdAoJb25lLgoJKG1hcmtfbm90X2VsaW1pbmFibGUpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgaScgdG8gdW5zaWduZWQuCgkob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogTGlrZXdpc2UuICBDYXN0IGBtYXhfcmVnbm8nIHRvIHVuc2lnbmVkCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShyZWxvYWRfYXNfbmVlZGVkKTogQ2FzdCBtYWNybyBOVU1fRUxJTUlOQUJMRV9SRUdTIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBIaWRlIHVudXNlZCBsYWJlbCBgZmFpbCcuCgkocmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyk6IENhc3QgYGNoYXInIGFycmF5IGluZGV4IHRvCglgdW5zaWduZWQgY2hhcicuCgkocmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IE1hcmsgcGFyYW1ldGVyIGBzZXQnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuICBDYXN0IFVOSVRTX1BFUl9XT1JEIHRvIHVuc2lnbmVkIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCShyZWxvYWRfY3NlX21vdmUyYWRkKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgc3JjMicuCgoJKiBzY2hlZC5jOiBJbmNsdWRlIHJlY29nLmguCgkoc2NoZWRfbm90ZV9zZXQpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgYicuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCShzcGxpdF9oYXJkX3JlZ19ub3Rlcyk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYG9yaWdfaW5zbicuCgkoYmxvY2thZ2VfcmFuZ2UpOiBDYXN0IHJlc3VsdCBvZiBVTklUX0JMT0NLRUQoKSBtYWNybyB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBzdHVwaWQuYyAoc3R1cGlkX2ZpbmRfcmVnKTogTWFyayBwYXJhbWV0ZXIgYGNoYW5nZXNfc2l6ZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIENhc3QgYHNpemVvZicgZXhwcmVzc2lvbiB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyCglgbG9vcF9lbmQnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KClR1ZSBPY3QgMTMgMjI6MTI6MTEgMTk5OCAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWxvYWQxLmMgKG1heWJlX2ZpeF9zdGFja19hc21zKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShyZWxvYWQpOiBDYWxsIGl0LgoKCSogcmVsb2FkLmggKGNvbXB1dGVfdXNlX2J5X3BzZXVkb3MpOiBEZWNsYXJlLgoKCSogcmVsb2FkMS5jIChzcGlsbGVkX3BzZXVkb3MsIGluc25zX25lZWRfcmVsb2FkKTogTmV3IHZhcmlhYmxlcy4KCShzb21ldGhpbmdfbmVlZHNfcmVsb2Fkcyk6IERlbGV0ZSB2YXJpYWJsZS4KCShmaW5pc2hfc3BpbGxzKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXB1dGVfdXNlX2J5X3BzZXVkb3MpOiBOZXcgZnVuY3Rpb24uCgoJKGRlbGV0ZV9jYWxsZXJfc2F2ZV9pbnNucyk6IExvc2UgYXJndW1lbnQgRklSU1QuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJVXNlIHRoZSByZWxvYWRfaW5zbl9jaGFpbiBpbnN0ZWFkIG9mIHdhbGtpbmcgdGhlIHJ0bCBkaXJlY3RseS4KCgkocmVsb2FkKTogQWxsb2NhdGUgYW5kIGZyZWUgc3BpbGxlZF9wc2V1ZG9zLgoJRW5zdXJlIHRoYXQgYWxsIGNhbGxzIG9mIHNwaWxsX2hhcmRfcmVnIGFyZSBmb2xsb3dlZCBieSBhIGNhbGwgdG8KCWZpbmlzaF9zcGlsbHMuCglVc2UgdGhlIGluc25zX25lZWRfcmVsb2FkIGxpc3QgaW5zdGVhZCBvZiBzb21ldGhpbmdfbmVlZHNfcmVsb2FkcwoJdG8gZmluZCBvdXQgaWYgcmVsb2FkX2FzX25lZWRlZCBtdXN0IGJlIGNhbGxlZC4KCUNsZWFyIHVudXNlZF9pbnNuX2NoYWlucyBhdCB0aGUgZW5kLgoKCShjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zKTogTG9zZSBGSVJTVCBwYXJhbWV0ZXIuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCURlbGV0ZSBjb2RlIHRvIGtlZXAgdHJhY2sgb2YgY3VycmVudCBiYXNpYyBibG9jay4KCVdhbGsgcmVsb2FkX2luc25fY2hhaW4gaW5zdGVhZCBvZiB0aGUgcnRsIHN0cnVjdHVyZS4gIEJ1aWxkIHRoZQoJaW5zbnNfbmVlZF9yZWxvYWQgY2hhaW4uCglSZW1lbWJlciB3aGljaCBpbnNucyBuZWVkIHJlbG9hZGluZy9lbGltaW5hdGlvbiBieSBzZXR0aW5nIHRoZQoJYXBwcm9wcmlhdGUgZmllbGRzIGluIHN0cnVjdCBpbnNuX2NoYWluLCBub3QgYnkgcHV0dGluZyBtb2RlcyBvbiB0aGUKCWluc24uCgoJKGNhbGN1bGF0ZV9uZWVkcyk6IExvc2UgVEhJU19CTE9DSyBhcmcuICBBY2NlcHQgYXJnIENIQUlOIGluc3RlYWQgb2YKCWFyZyBJTlNOLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCURlbGV0ZSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QgbmVlZHMuCglEb24ndCBzZXQgc29tZXRoaW5nX25lZWRzX3JlbG9hZHMuCglSZWNvcmQgaW5zbiBuZWVkcyBpbiB0aGUgQ0hBSU4gYXJndW1lbnQuCgoJKHNwaWxsX2hhcmRfcmVnKTogUmVjb3JkIHRoZSBhZmZlY3RlZCBwc2V1ZG9zIGluIHNwaWxsZWRfcHNldWRvcy4KCgkocmVsb2FkX2FzX25lZWRlZCk6IExvc2UgRklSU1QgYXJnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVdhbGsgdGhlIHJlbG9hZF9pbnNuX2NoYWluIGluc3RlYWQgb2YgdGhlIHJ0eCBzdHJ1Y3R1cmUuCglEZWxldGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgYmFzaWMgYmxvY2suCglSZW5hbWUgb25lIG9mIHRoZSBORVhUIHZhcmlhYmxlcyB0byBPTERfTkVYVC4KCgkoYWxsb2NhdGVfcmVsb2FkX3JlZyk6IEFjY2VwdCBhcmcgQ0hBSU4gaW5zdGVhZCBvZiBhcmcgSU5TTi4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKGNob29zZV9yZWxvYWRfcmVncyk6IExpa2V3aXNlLgoKCShlbWl0X3JlbG9hZF9pbnNucyk6IFJlcGxhY2UgSU5TTiBhbmQgQkIgYXJncyB3aXRoIGFyZyBDSEFJTi4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJCgkqIGNhbGxlci1zYXZlLmMgKE1PVkVfTUFYX1dPUkRTKTogTmV3IG1hY3JvLiAgVXNlIGl0IHRocm91Z2hvdXQKCWluc3RlYWQgb2YgKE1PVkVfTUFYIC8gVU5JVFNfUEVSX1dPUkQpIGNvbXB1dGF0aW9uLgoJKGhhcmRfcmVnc19saXZlLCBoYXJkX3JlZ3NfbmVlZF9yZXN0b3JlKTogRGVsZXRlIHZhcmlhYmxlcy4KCShuX3JlZ3Nfc2F2ZWQpOiBOb3cgc3RhdGljLgoJKHJlZmVyZW5jZWRfcmVncywgdGhpc19pbnNuX3NldHMpOiBOZXcgdmFyaWFibGVzLgoKCShzZXR1cF9zYXZlX2FyZWFzKTogUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQuCgoJKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKG1hcmtfcmVmZXJlbmNlZF9yZWdzKTogTmV3IGZ1bmN0aW9uLCBzaW1pbGFyIHRvIHRoZSBvbGQKCXJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzLCBidXQgbWFyayByZWdpc3RlcnMgaW4gcmVmZXJlbmNlZF9yZWdzLgoKCShjbGVhcl9yZWdfbGl2ZSk6IERlbGV0ZSBmdW5jdGlvbi4KCShtYXJrX3NldF9yZWdzKTogUmVuYW1lZCBmcm9tIHNldF9yZWdfbGl2ZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglPbmx5IG1hcmsgcmVnaXN0ZXJzIGluIHRoaXNfaW5zbl9zZXRzLgoKCShzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBSZXdvcmsgdGhpcyBmdW5jdGlvbiB0byB3YWxrIHRoZQoJcmVsb2FkX2luc25fY2hhaW4gaW5zdGVhZCBvZiB1c2luZyB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMgZGlyZWN0bHkuCglEZWxldGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyIGxpdmVzLCBjb21wdXRlIGxpdmUgcmVncyBvbiB0aGUKCWZseSBmcm9tIGluZm9ybWF0aW9uIGluIHRoZSBjaGFpbi4KCUluc3RlYWQgb2YgY2FsbGluZyByZXN0b3JlX3JlZmVyZW5jZWRfcmVncywgdXNlIG1hcmtfcmVmZXJlbmNlZF9yZWdzLAoJdGhlbiB3YWxrIHRoZSBzZXQgaXQgY29tcHV0ZXMgYW5kIGNhbGwgaW5zZXJ0X3Jlc3RvcmUgYXMgYXBwcm9wcmlhdGUuCgoJKGluc2VydF9yZXN0b3JlKTogTG9zZSBJTlNOIGFuZCBCTE9DSyBhcmdzLiAgQWRkIENIQUlOIGFyZy4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQuICBUZXN0IGhhcmRfcmVnc19zYXZlZCBpbnN0ZWFkIG9mCgloYXJkX3JlZ3NfbmVlZF9yZXN0b3JlLgoJKGluc2VydF9zYXZlKTogTG9zZSBJTlNOIGFuZCBCTE9DSyBhcmdzLiAgQWRkIENIQUlOIGFuZCBUT19TQVZFCglhcmdzLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVJlc3RydWN0dXJlIHRoZSBjb2RlIGEgYml0LiAgVXNlIFRPX1NBVkUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ3MgdG8KCXNhdmUgaW5zdGVhZCBvZiBtb3JlIGNvbXBsaWNhdGVkIHRlc3QuCgkoaW5zZXJ0X29uZV9hcmcpOiBMb3NlIElOU04gYW5kIEJMT0NLIGFyZ3MuICBBZGQgQ0hBSU4gYXJnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCglDcmVhdGUgYSBuZXcgaW5zbl9jaGFpbiBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgaW5zbiBhbmQgcGxhY2UgaXQKCWludG8gdGhlIGNoYWluLgoKCSogcnRsLnRleGk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIHRvIHJlZmxlY3QgdGhhdCByZWxvYWQgbm8gbG9uZ2VyCglwdXRzIG1vZGVzIG9uIHRoZSBpbnNucy4KCjE5OTgtMTAtMTQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogRm9yY2UgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEKCUNBTEwgaW5zbiB0byBtZW1vcnkuCgpXZWQgT2N0IDE0IDAwOjM4OjQwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oOiBEZWxldGUgZHVwbGljYXRlIHByb3RvdHlwZXMuICBBZGQgc29tZSBtaXNzaW5nCglwcm90b3R5cGVzLgoJKiBydGxhbmFsLmM6IChmb3JfZWFjaF9ydHgpOiBGb3JtYXR0aW5nIHR3ZWFrLgoKMTk5OC0xMC0xMyBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogcmVhbC5jIChlbWRub3JtIGFuZCBldG9hc2MpOiBEaXNhYmxlIHJvdW5kIHRvIGV2ZW4gZm9yIGM0eCB0YXJnZXQKCXRvIGJlIGNvbXBhdGlibGUgd2l0aCBUSSBjb21waWxlci4KCgkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgdmEtYzR4LmggdG8gZGVmaW5pdGlvbi4KClR1ZSBPY3QgMTMgMjM6MDM6MzcgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogRml4IHR5cG8gaW4gaW5lcXVhbGl0eTogZG8KCWJpdGZpZWxkIG9wdGltaXphdGlvbiBmb3IgZXF1YWwgbW9kZSBzaXplcy4KCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IERvbid0IHRha2Ugc3VicmVncyBvZiBzdWJyZWdzIGluCgl0aGUgbW92c3RyaWN0IGNhc2UuICBUaWR5IGEgcG90ZW50aWFsIHByb2JsZW0gaW4gdGhlIG11bHRpLXdvcmQgY2FzZS4KCShleHRyYWN0X2JpdF9maWVsZCk6IExpa2V3aXNlLgoKVHVlIE9jdCAxMyAyMjoxMjoxMSAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogRW1pdCBOT1BzIGFmdGVyIG5vcm1hbCBjYWxscyBpbiB0aGlzCiAgICAgICAgZnVuY3Rpb24uCiAgICAgICAgQ29tcHV0ZSBtYXhfdWlkX2Zvcl9mbG93IGJ5IGNhbGxpbmcgZ2V0X21heF91aWQgYWZ0ZXIgdGhlIHNjYW4uCiAgICAgICAgKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBEb24ndCBlbWl0IE5PUHMgaGVyZS4KClR1ZSBPY3QgMTMgMjI6MDU6NDkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFsaWFzLmMgKGJhc2VfYWxpYXNfY2hlY2spOiBBY2NlcHQgbmV3IGFyZ3MgZm9yIHRoZSBtb2RlcyBvZiB0aGUKCXR3byByZWZlcmVuY2VzLiAgVXNlIHRoZW0gdG8gZGV0ZXJtaW5lIGlmIGFuIEFORCBjYW4gb3ZlcmxhcC4gIFVwZGF0ZQoJYWxsIGNhbGxlcnMuCgkobWVtcmVmc19jb25mbGljdF9wKTogQXNzdW1lIHNpemVzIGFyZSBhbGlnbmVkLCBhbmQgdXNlcyB0aGVtCgl0byBkZXRlcm1pbmUgaWYgYW4gQU5EIGNhbiBvdmVybGFwLgoKVHVlIE9jdCAxMyAxNzo1MTowNCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTY4ay9tNjhrLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEZvciBGUCByZWdzLCBhZGQgUkVHTk8gPj0gMTYKCWNoZWNrLiAgQWRkIGNvbW1lbnQgdG8gZG9jdW1lbnQgcHJvYmxlbXMgd2l0aCBUQVJHRVRfU1VOX0ZQQSB2ZXJzaW9uCglvZiB0aGlzIG1hY3JvLgoJKiBjb25maWcvbTY4ay9tNjhrLm1kIChtb3Z4ZisxKTogU3VwcG9ydCAncicvJ3InIG1vdmVzLgoKVHVlIE9jdCAxMyAxNzo0NjoxOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZ2VuY2hlY2subyk6IERlcGVuZCBvbiBnYW5zaWRlY2wuaC4KCgkqIGMtY29tbW9uLmMgKHByaW50X2NoYXJfdGFibGUpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgkoc2Nhbl9jaGFyX3RhYmxlKTogTGlrZXdpc2UuCgkodGltZV9jaGFyX3RhYmxlKTogTGlrZXdpc2UuCgoJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogTWFyayBwYXJhbWV0ZXIgYGFyZ2MnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoZGVjbGFyZV9wYXJtX2xldmVsKTogTWFyayBwYXJhbWV0ZXIgYGRlZmluaXRpb25fZmxhZycgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIGMtbGV4LmMgKHJlYWRlc2NhcGUpOiBVc2UgYCh1bnNpZ25lZCkxJyBpbiBzaGlmdC4KCSh5eWxleCk6IExpa2V3aXNlLiAgQ2FzdCBgc2l6ZW9mJyB0byBhbiAoaW50KSB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgoJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYGZuZGVjbCcuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCShlbWl0X2NhbGxfMSk6IE1hcmsgcGFyYW1ldGVycyBgZm5kZWNsJyBhbmQgYGZ1bnR5cGUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoZXhwYW5kX2NhbGwpOiBDYXN0IHJlc3VsdCBvZiBNSU4oKSB0byAodW5zaWduZWQgaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBhbiB1bnNpZ25lZCB2YWx1ZS4KCgkqIGNjY3AuYyAocGNmaW5jbHVkZSk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBsaW1pdCcuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCShtYWtlX2RlZmluaXRpb24pOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgb3AnLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoY3JlYXRlX2RlZmluaXRpb24pOiBDYXN0IFJFU1RfRVhURU5TSU9OX0xFTkdUSCB0byAobG9uZykgd2hlbgoJY29tcGFyaW5nIGFnYWluc3QgdGhlIHJlc3VsdCBvZiBwb2ludGVyIGFyaXRobWV0aWMuCgoJKiBjb25maWcvbWlwcy9taXBzLmggKEZVTkNUSU9OX0FSR19CT1VOREFSWSk6IENhc3QgdG8gKHVuc2lnbmVkKQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBkd2FyZjJvdXQuYyAoZHdhcmYyb3V0X2ZyYW1lX2RlYnVnKTogQ2FzdCBSRUdOTygpIGFuZAogCUhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gdG8gKHVuc2lnbmVkKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CiAJb25lLgoJKG91dHB1dF9kaWUpOiBNb3ZlIHZhcmlhYmxlIGBpJyBpbnRvIHRoZSBzY29wZSBpbiB3aGljaCBpdCBpcwoJdXNlZC4gIENoYW5nZSBpdHMgdHlwZSB0byBgdW5zaWduZWQnLgoJKG91dHB1dF9kaWUpOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8gKGludCkgd2hlbiBwYXNzaW5nIGl0Cgl0byBBU01fT1VUUFVUX0FTQ0lJKCkuCgkob3V0cHV0X3B1Ym5hbWVzKTogTGlrZXdpc2UuCgkob3V0cHV0X2xpbmVfaW5mbyk6IExpa2V3aXNlLgoKCSogZW1pdC1ydGwuYyAoZ2xvYmFsX3J0bCk6IEFkZCBtaXNzaW5nIGluaXRpYWxpemVycy4KCgkqIGV4cGxvdy5jIChwcm9tb3RlX21vZGUpOiBNYXJrIHBhcmFtZXRlciBgZm9yX2NhbGwnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiBleHBtZWQuYyAoZXhwYW5kX3NoaWZ0KTogQ2FzdCB0aGUgcmVzdWx0IG9mIEdFVF9NT0RFX0JJVFNJWkUgdG8KIAlgdW5zaWduZWQgSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoc3ludGhfbXVsdCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBjb3N0JyB0byBpbnQuCgkoZW1pdF9zdG9yZV9mbGFnKTogVXNlIGAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMScgaW4gc2hpZnQuCgoJKiBleHByLmMgKGNvcHlfYmxrbW9kZV9mcm9tX3JlZyk6IENhc3QgQklUU19QRVJfV09SRCB0byAodW5zaWduZWQpCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShnZXRfaW5uZXJfcmVmZXJlbmNlKTogQ2hhbmdlIHZhcmlhYmxlIGBhbGlnbm1lbnQnIHRvIHVuc2lnbmVkLgoJKGV4cGFuZF9leHByKTogQ2FzdCB0aGUgcmVzdWx0IG9mIEdFVF9NT0RFX0FMSUdOTUVOVCB0byAodW5zaWduZWQKCWludCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZXhwYW5kX2J1aWx0aW5fc2V0am1wKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvIHNpemVfdC4KCgkqIGZvbGQtY29uc3QuYyAoZGl2X2FuZF9yb3VuZF9kb3VibGUpOiBDYXN0IEJBU0UgdG8KCShIT1NUX1dJREVfSU5UKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGdlbmNoZWNrLmM6IEluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkobWFpbik6IE1hcmsgcGFyYW1ldGVyIGBhcmd2JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBvcHRhYnMuYyAoZ2VuX2NvbmRfdHJhcCk6IE1hcmsgcGFyYW1ldGVycyBgY29kZScsIGBvcDInIGFuZAoJYHRjb2RlJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiByZWFsLmMgKGVkaXZtKTogQ2FzdCBjb25zdGFudCB2YWx1ZSB0byAodW5zaWduZWQgbG9uZykgaW4KCWV4cHJlc3Npb24gY29tcGFyZWQgYWdhaW5zdCBhbiB1bnNpZ25lZCB2YWx1ZS4KCgkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IENhc3QgQklUU19QRVJfV09SRCB0byAodW5zaWduZWQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShleHBhbmRfZW5kX2Nhc2UpOiBDYXN0IENBU0VfVkFMVUVTX1RIUkVTSE9MRCB0byAodW5zaWduZWQgaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBzdG9yLWxheW91dC5jIChtb2RlX2Zvcl9zaXplKTogQ2FzdCBNQVhfRklYRURfTU9ERV9TSVpFIHRvCgkodW5zaWduZWQgaW50KSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIExpa2V3aXNlIGZvcgoJR0VUX01PREVfQklUU0laRS4KCShzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogTGlrZXdpc2UuCgkoc2F2ZV9zdG9yYWdlX3N0YXR1cyk6IE1hcmsgcGFyYW1ldGVyIGBwJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocmVzdG9yZV9zdG9yYWdlX3N0YXR1cyk6IExpa2V3aXNlLgoJCgkqIHRvcGxldi5jIChkZWJ1Z19hcmdzKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXIuCgkoZl9vcHRpb25zKTogU3BlbGxpbmcgY29ycmVjdGlvbi4gIEFkZCBtaXNzaW5nIGluaXRpYWxpemVycy4KCShkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IExpa2V3aXNlLgoJKGRlYnVnX2VuZF9zb3VyY2VfZmlsZSk6IE1hcmsgcGFyYW1ldGVyIGBsaW5lbm8nIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogTWFyayBwYXJhbWV0ZXJzIGBhdHRyX2FyZ3MnLAoJYGRlY2wnIGFuZCBgdHlwZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogdmFyYXNtLmMgKGRlY29kZV9yZWdfbmFtZSk6IENhc3QgYHNpemVvZicgZXhwcmVzc2lvbiB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoYXNzZW1ibGVfdmFyaWFibGUpOiBNYXJrIHBhcmFtZXRlciBgdG9wX2xldmVsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGFzc2VtYmxlX2V4dGVybmFsX2xpYmNhbGwpOiBNYXJrIHBhcmFtZXRlciBgZnVuJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKG91dHB1dF9jb25zdGFudF9wb29sKTogTWFyayBwYXJhbWV0ZXJzIGBmbm5hbWUnIGFuZCBgZm5kZWNsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKVHVlIE9jdCAxMyAxMjo1MTowNCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvbGliMWZ1bmNzLmFzbSAoX3VkaXZzaTMpOiBBZGQgLnR5cGUgZGVjbGFyYXRpb24uCglSZXBsYWNlIHVzZSBvZiByNSB3aXRoIHVzZSBvZiByMTkuCgoJKiBjb25maWcvdjg1MC92ODUwLmggKExJTktfUE9JTlRFUl9SRUdOVU0pOiBEZWZpbmUuCgoJKiBjb25maWcvdjg1MC92ODUwLmMgKGNvbXB1dGVfcmVnaXN0ZXJfc2F2ZV9zaXplKTogQWxsb3cgZm9yIHRoZQoJZmFjdCB0aGF0IGhlbHBlciBmdW5jdGlvbnMgc2F2ZSBhbGwgcmVnaXN0ZXJzLCBub3QganVzdCB0aG9zZSB1c2VkCglieSB0aGUgZnVuY3Rpb24uCgkKCVJlcGxhY2UgY29uc3RhbnQgMzEgd2l0aCBtYWNybyBMSU5LX1BPSU5URVJfUkVHTlVNLgoKCSogY29uZmlnL3Y4NTAvdjg1MC5tZDogVXNlICdpbmRpcmVjdF9vcGVyYW5kJyByYXRoZXIgdGhhbgoJJ21lbW9yeV9vcGVyYW5kJyBmb3IgYml0IHRlc3Qvc2V0L2NsZWFyIHBhdHRlcm5zLgoKVHVlIE9jdCAxMyAxMTo0OToxNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtaXBzL2lyaXM2LmggKEFTTV9PVVRQVVRfV0VBS19BTElBUyk6IENhbGwgQVNNX0dMT0JBTElaRV9MQUJFTC4KCSogdmFyYXNtLmMgKGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uIGV0IGFsKTogRG9uJ3QgY2FsbAoJQVNNX0dMT0JBTElaRV9MQUJFTCBmb3Igd2VhayBzeW1ib2xzLgoKVHVlIE9jdCAxMyAxMTozNzo0NSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY3NlLmMgKGVxdWl2X2NvbnN0YW50KTogQ2hlY2sgZm9yIE5VTEwgcmV0dXJuIGZyb20KCWdlbl9sb3dwYXJ0X2lmX3Bvc3NpYmxlKCkuCgpUdWUgT2N0IDEzIDExOjI0OjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAyMDAubWQgKGFkZHNpMywgc3Vic2kzLCBuZWdzaTIpOiBPbmx5IGFsbG93IHJlZ2lzdGVyIG9wZXJhbmRzLgoKCSogY29sbGVjdDIuYyAobWFpbik6IFBhc3MgLUVMLy1FQiB0aHJvdWdoIHRvIHRoZSBjb21waWxlci4KCjE5OTgtMTAtMTIgSGVybWFuIEEuSi4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCQoJKiBleHByLmMgKHB1c2hfYmxvY2spOiBIYW5kbGUgdGFyZ2V0cyB3aGVyZSB0aGUgc3RhY2sgZ3Jvd3MKCXRvIGhpZ2hlciBhZGRyZXNzZXMsIGJ1dCBhcmdzIGdyb3cgdG8gbG93ZXIgYWRkcmVzc2VzIGFuZAoJQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIGlzIG5vdCBkZWZpbmVkLgoKVHVlIE9jdCAxMyAwODowMDo1MiAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjb25maWcvdjg1MC92ODUwLmMgKHByaW50X29wZXJhbmQpOiAgRXh0ZW5kIG1lYW5pbmcKICAgICAgICBvZiAnYycgb3BlcmFuZHMgdG8gc3VwcG9ydCAudnRpbmhlcml0LgoKVHVlIE9jdCAxMyAyMTozODozNSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jOiAgQ29udmVydCB0byBnZW5fcnR4X0ZPTy4KCUFkZGVkIEFUVFJJQlVURV9VTlVTRUQgdG8gdW51c2VkIGZ1bmN0aW9uIGFyZ3VtZW50cy4KCShyY19yZWdfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUuCgkoYzR4X3JwdGJfaW5zZXJ0KTogTmV3IGZ1bmN0aW9uLgoJKGM0eF9ycHRiX25vcF9wKTogUmVjb2duaXplIG1vZGlmaWVkIHJwdGJfdG9wIHBhdHRlcm4uCgkoYzR4X29wdGltaXphdGlvbl9vcHRpb25zKTogTmV3IGZ1bmN0aW9uLgoKCSogY29uZmlnL2M0eC9jNHgubWQ6IENvbnZlcnQgdG8gZ2VuX3J0eF9GT08uCgkgKGRlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50KTogTmV3IHBhdHRlcm4uCgkgKHJwdGJfdG9wKTogTW9kaWZpZWQgcGF0dGVybiB0byB3b3JrIHdpdGggQkNUIG9wdGltaXphdGlvbi4KCQoJKiBjb25maWcvYzR4L2M0eC5oIChSQ19SRUcpOiBOZXcgcmVnaXN0ZXIgY2xhc3MuCgkocmNfcmVnX29wZXJhbmQpOiBEZWZpbmUgcHJvdG90eXBlLgoJKElTX1JDX1JFRyk6IE5ldyBtYWNyby4KCShJU19SQ19PUl9QU0VVRE9fUkVHKTogTmV3IG1hY3JvLgoJKElTX1JDX09SX1BTRVVET19SRUdOTyk6IE5ldyBtYWNyby4KCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERlZmluZS4KCk1vbiBPY3QgMTIgMTk6NTc6MzQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29sbGVjdDIuYyAoZXh0cmFjdF9pbml0X3ByaW9yaXR5KTogTm8gcHJpb3JpdHkgaXMgNjU1MzUuCgpNb24gT2N0IDEyIDEyOjEwOjM3IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoJCgkqIE1ha2VmaWxlLmluIChidWlsZF90b29sZGlyKTogbmV3IHZhcmlhYmxlLCBzYW1lIGFzIG9sZAoJJCh0b29sZGlyKSwgYnV0IHdpdGhvdXQgZGVwZW5kaW5nIG9uICQobGliZGlyKS8kKHVubGlic3ViZGlyKQoJKEdDQ19GT1JfVEFSR0VUKTogYWRkIC1CJChidWlsZF90b29sZGlyKS9iaW4vCgkoYm9vdHN0cmFwLCBib290c3RyYXAyLCBib290c3RyYXAzLCBib290c3RyYXA0KTogZGl0dG8KCQoJKiBjb25maWd1cmUuaW4gKGd4eF9pbmNsdWRlX2Rpcik6IHNldCBkZWZhdWx0IGJhc2VkIG9uIHVubGlic3ViZGlyCgkqIE1ha2VmaWxlLmluICh0b29sZGlyKTogZGl0dG8KCShjY2NwLm8sIGNwcGxpYi5vKTogdXNlIHVubGlic3ViZGlyIGltcGxpY2l0bHkgdGhyb3VnaAoJZ3h4X2luY2x1ZGVfZGlyLCBpbmNsdWRlZGlyIGFuZCB0b29sZGlyCgkocHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogZGl0dG8KCQpNb24gT2N0IDEyIDEwOjUwOjQ0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5tZDogUmVwbGFjZSAocmVnIDI0KSB3aXRoIChyZWc6Q0MgMjQpLgoKCSogY29uZmlnL2FybS90aHVtYi5jICh0aHVtYl9vdmVycmlkZV9vcHRpb25zKTogQWRkIHdhcm5pbmcgYWJvdXQKCVBJQyBjb2RlIG5vdCBiZWluZyBzdXBwb3J0ZWQganVzdCB5ZXQuCgpTdW4gT2N0IDExIDE2OjQ5OjE1IEVEVCAxOTk4ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBmbG93LmM6IFVwZGF0ZSBjb21tZW50LgoJKG5vdGljZV9zdGFja19wb2ludGVyX21vZGlmaWNhdGlvbik6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zKTogVXNlIGl0LgoJKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IE1hcmsgdGhlIHN0YWNrIHBvaW50ZXIgYXMgYWxpdmUKCWF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIGlmIGN1cnJlbnRfZnVuY3Rpb25fc3BfaXNfdW5jaGFuZ2luZwoJaXMgc2V0LgoJKGxpZmVfYW5hbHlzaXNfMSk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX3NwX2lzX3VuY2hhbmdpbmcuCgkqIGZ1bmN0aW9uLmM6IERlZmluZSBpdC4KCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogSW5pdGlhbGl6ZSBpdC4KCSogb3V0cHV0Lmg6IERlY2xhcmUgaXQuCgkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzLCBkYnJfc2NoZWR1bGUpOiBNYXJrCgl0aGUgc3RhY2sgcG9pbnRlciBhcyBhbGl2ZSBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBpZgoJY3VycmVudF9mdW5jdGlvbl9zcF9pc191bmNoYW5naW5nIGlzIHNldC4KCSogaTM4Ni5jIChpeDg2X2VwaWxvZ3VlKTogT3B0aW1pemUgdGhlIHJlc3RvcmluZwoJb2YgdGhlIHN0YWNrIHBvaW50ZXIuCgpNb24gT2N0IDEyIDAxOjIyOjUzIFBEVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIE9jdCAxMSAyMzowNDozMCAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgogICAgICAgICogYy1wcmFnbWEuYyAoaGFuZGxlX3ByYWdtYV90b2tlbik6IElmIHBhc3NlZCBhIHRva2VuIGluc3RlYWQKICAgICAgICBvZiBhIHRyZWUsIHVzZSB0aGF0IGFzIHRoZSBwYWNrIHZhbHVlLgoKU3VuIE9jdCAxMSAxNDoyMToxNCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRml4IHByb3RvdHlwZS4KClN1biBPY3QgMTEgMDU6MDM6NDEgMTk5OCAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJKiB0cmVlLmggKERFQ0xfTk9fQ0hFQ0tfTUVNT1JZX1VTQUdFKTogTmV3IG1hY3Jvcy4KCShzdHJ1Y3QgdHJlZV9kZWNsKTogTmV3IGZpZWxkcyBub19jaGVja19tZW1vcnlfdXNhZ2UuCgkqIGMtY29tbW9uLmMgKGVudW0gYXR0cnMpOiBBZGQgQV9OT19DSEVDS19NRU1PUllfVVNBR0UuCgkoaW5pdF9hdHRyaWJ1dGVzKTogUmVnaXN0ZXIgaXQgYXMgYSBuZXcgYXR0cmlidXRlLgoJKGRlY2xfYXR0cmlidXRlcyk6IFNldCBmbGFncyBvbiBmdW5jdGlvbnMgZ2l2ZW4gdGhhdCBhdHRyaWJ1dGUuCgkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBNZXJnZSBuZXcgYXR0cmlidXRlLgoJKiBleHByLmggKGN1cnJlbnRfZnVuY3Rpb25fY2hlY2tfbWVtb3J5X3VzYWdlKTogRGVjbGFyZSBuZXcgdmFyLgoJKiBjYWxscy5jLCBleHByLmMsIGZ1bmN0aW9uLmMsIHN0bXQuYywgYWxwaGEuYywgY2xpcHBlci5jLCBtODhrLmMsCglwYS5jLCBzcGFyYy5jOiBSZXBsYWNlIHVzZXMgb2YgZmxhZ19jaGVja19tZW1vcnlfdXNhZ2Ugd2l0aAoJY3VycmVudF9mdW5jdGlvbl9jaGVja19tZW1vcnlfdXNhZ2UuCgkqIGZ1bmN0aW9uLmg6IEFkZCBmaWVsZCB0byBzdHJ1Y3QgZnVuY3Rpb24uCgkqIGZ1bmN0aW9uLmMgKGN1cnJlbnRfZnVuY3Rpb25fY2hlY2tfbWVtb3J5X3VzYWdlKTogRGVmaW5lIGl0LgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90bywgcG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFNhdmUgYW5kCglyZXN0b3JlIGl0LgoJKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IFNldCBpdCwgYmFzZWQgb24gZ2xvYmFsIGZsYWcgYW5kIGZ1bmN0aW9uCglhdHRyaWJ1dGUuCgoJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIFZBUl9ERUNMKTogSW4gbWVtb3J5LWNoZWNraW5nIGNvZGUsIGRvCgljaGVjayBub24tYXV0b21hdGljIHZhcmlhYmxlcywgdG8gcGVybWl0IGRldGVjdGlvbiBvZiB3cml0ZXMgdG8KCXJlYWQtb25seSBsb2NhdGlvbnMgaW4gZW1iZWRkZWQgc3lzdGVtcyB3aXRob3V0IG1lbW9yeSBtYW5hZ2VtZW50LgoJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogVXNlIEFSR1NfU0laRV9SVFggdG8gZ2V0IHNpemUgb2YgYXJndW1lbnQKCXdoZW4gZW1pdHRpbmcgY2hrcl9zZXRfcmlnaHRfbGliZnVuYyBjYWxsLCBldmVuIGlmIHRoZSBhcmd1bWVudCBpcwoJQkxLbW9kZSBvciB2YXJpYWJsZS1zaXplZDsgZG9uJ3QgYWJvcnQuCgoJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBDcmVhdGUgQ2hlY2tlciBhbmQgX19jeWdfcHJvZmlsZV8qCglzeW1ib2xzIGluIFBtb2RlLCBub3QgVk9JRG1vZGUuCgpTdW4gT2N0IDExIDAxOjAzOjA1IDE5OTggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBleHAuYzogV2hlbiBmb3JjaW5nIHVuc2lnbmVkIGNvbXBhcmlzb25zLCBjYXN0IGJvdGggc2lkZXMKCW9mIHRoZSBvcGVyYXRpb24uCgoJKiBjcHBoYXNoLmg6IE1vdmUgc3RhdGljIGRlY2xhcmF0aW9uIG9mIGhhc2h0YWJbXS4uLgoJKiBjcHBoYXNoLmM6IC4uLmhlcmUuCgoJKiBjcHBsaWIuYzogQ2FzdCBkaWZmZXJlbmNlIG9mIHR3byBwb2ludGVycyB0byBzaXplX3QgYmVmb3JlCgljb21wYXJpbmcgaXQgdG8gc2l6ZV90LiAgQ2FzdCBzaWduZWQgdG8gdW5zaWduZWQKCWJlZm9yZSBjb21wYXJpbmcgdG8gc2l6ZV90LiAoRklYTUU6IHN0cnVjdCBhcmdkYXRhIHNob3VsZCB1c2UKCXVuc2lnbmVkIGJ1ZmZlciBzaXplcy4pCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX3JlYWRlcik6IERlY2xhcmUgdG9rZW5fYnVmZmVyX3NpemUgYXMKCXVuc2lnbmVkIGludC4gKENQUF9XUklUVEVOKTogQ2FzdCByZXR1cm4gdmFsdWUgdG8gc2l6ZV90LgoJKENQUF9SRVNFUlZFKTogUGFyZW50aGVzaXplIE4gZm9yIGV2YWx1YXRpb24gb3JkZXIsIGNhc3QgdG8KCXNpemVfdCBiZWZvcmUgY29tcGFyaXNvbi4KClN1biBPY3QgMTEgMDA6MTU6MjkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IERlbGV0ZSAibGl2ZV9yZWFjaGFibGVfcCIgYXJndW1lbnQuCgkoZmluZF9iYXNpY19ibG9ja3NfMSk6IFNpbWlsYXJseS4KCSogb3V0cHV0LmggKGZpbmRfYmFzaWNfYmxvY2tzKTogRml4IHByb3RvdHlwZS4KCSogZ2NzZS5jLCB0b3BsZXYuYzogRG9uJ3QgcGFzcyAibGl2ZV9yZWFjaGFibGVfcCIgYXJndW1lbnQgdG8KCWZpbmRfYmFzaWNfYmxvY2tzIGFueW1vcmUuCgpTYXQgT2N0IDEwIDIyOjAwOjM0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgogICAgICAgICogYmFzaWMtYmxvY2suaCAoRVhFQ1VURV9JRl9TRVRfSU5fU0JJVE1BUCk6IE5ldyBtYWNyby4KICAgICAgICAoc2JpdG1hcF9mcmVlLCBzYml0bWFwX3ZlY3Rvcl9mcmVlKTogTmV3IG1hY3Jvcy4KICAgICAgICAqIG91dHB1dC5oIChydGxfZHVtcF9maWxlKTogRGVjbGFyZS4KClNhdCBPY3QgMTAgMTc6MDE6NDIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVnbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogSG9ub3IgVFJVTFlfTk9PUF9UUlVOQ0FUSU9OLgoKRnJpIE9jdCAgOSAyMjowODowNSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmcC1iaXQuYyAoU0Z0eXBlKTogRG9uJ3QgaW1wbGljaXRseSB1c2UgaW50IGluIGRlY2xhcmF0aW9uLgoJKERGdHlwZSk6IExpa2V3aXNlLgoJKF9mcGRpdl9wYXJ0cyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGB0bXAnLCBhbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGRpdmlkZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHRtcCcuCgkoc2lfdG9fZmxvYXQpOiBDYXN0IG51bWVyaWMgY29uc3RhbnQgdG8gKFNJdHlwZSkgYmVmb3JlIGNvbXBhcmluZwoJaXQgYWdhaW5zdCBvbmUuCgpGcmkgT2N0ICA5IDE2OjAzOjE5IDE5OTggIEdyYWhhbSAgPGdyYWhhbXNAcmNwLmNvLnVrPgoKCSogZmxvdy5jIChwcmludF9ydGxfd2l0aF9iYik6IENoYW5nZWQgdHlwZSBvZiBpbl9iYl9wIHRvIG1hdGNoIHVzZS4KCSogZ2NjLmMgKGFkZF9wcmVwcm9jZXNzb3Jfb3B0aW9uKTogQ29ycmVjdCB0eXBvIHdoZW4gYWxsb2NhdGluZwoJbWVtb3J5LCBzaXplb2YoKSBhcmd1bWVudCBoYWQgb25lIHRvbyBtYW55IGAqJy4KCShhZGRfYXNzZW1ibGVyX29wdGlvbik6IExpa2V3aXNlLgoJKGFkZF9saW5rZXJfb3B0aW9uKTogTGlrZXdpc2UuCgkqIGdjb3YuYyAob3V0cHV0X2RhdGEpOiBMaWtld2lzZS4KCSogbG9jYWwtYWxsb2MuYyAobWVtcmVmX3VzZWRfYmV0d2Vlbl9wKTogTGlrZXdpc2UuCgkodXBkYXRlX2VxdWl2X3JlZ3MpOiBMaWtld2lzZS4KCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBMaWtld2lzZS4KCSogcmVnLXN0YWNrLmMgKHJlY29yZF9hc21fcmVnX2xpZmUpOiBMaWtld2lzZS4KCShzdWJzdF9hc21fc3RhY2tfcmVnKTogTGlrZXdpc2UuCgkqIHJlb3JnLmMgKGRicl9zY2hlZHVsZSk6IExpa2V3aXNlLgoKRnJpIE9jdCAgOSAxNTo1Nzo1MSAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogQnJlYWsgb3V0IHNvbWUgZnVuY3Rpb25zLgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBMaWtld2lzZS4gIEFsc28gbW92ZSBzb21lIHZhcmlhYmxlcyBvdXQgYW5kCgltYWtlIHRoZW0gc3RhdGljLgoJUmVuYW1lIE5PTkxPQ0FMX0xBQkVMX0xJU1QgYXJnIHRvIE5PTkxPQ0FMX0xBQkVMUyBhbmQgaW5pdGlhbGl6ZQoJbmV3IHN0YXRpYyB2YXIgbm9ubG9jYWxfbGFiZWxfbGlzdCB3aXRoIGl0LgoJKGFjdGl2ZV9laF9yZWdpb24sIG5lc3RlZF9laF9yZWdpb24sIGxhYmVsX3ZhbHVlX2xpc3QsCglub25sb2NhbF9sYWJlbF9saXN0KTogTmV3IHN0YXRpYyB2YXJpYWJsZXMuCgkobWFrZV9lZGdlcywgZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2NrcywgZGVsZXRlX2Jsb2NrKTogTmV3IHN0YXRpYwoJZnVuY3Rpb25zLCBicm9rZW4gb3V0IG9mIGZpbmRfYmFzaWNfYmxvY2tzXzEuCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zLCBtYXJrX3JlZ3NfbGl2ZV9hdF9lbmQsIHNldF9ub29wX3AsCglub29wX21vdmVfcCk6IE5ldyBzdGF0aWMgZnVuY3Rpb25zLCBicm9rZW4gb3V0IG9mIGxpZmVfYW5hbHlzaXNfMS4KCkZyaSBPY3QgIDkgMTU6NDk6MjkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBQdW4gbm9uLWludGVncmFsIHN0cl9ydHggbW9kZXMuCglUYWtlIGV4dHJhIGNhcmUgZm9yIG9wMCBub3cgcG9zc2libHkgYmVpbmcgYSBzdWJyZWcuCgkoZXh0cmFjdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBSZXZlcnQgT2N0IDQgY2hhbmdlLiAgRHJvcAoJdGhlIHJlZyB0byBtZW1vcnkgaWYgdGhlcmUgaXMgbm8gZXF1YWwgc2l6ZWQgaW50ZWdyYWwgbW9kZS4KCSogc3Rvci1sYXlvdXQuYyAoaW50X21vZGVfZm9yX21vZGUpOiBOZXcgZnVuY3Rpb24uCgkqIG1hY2htb2RlLmg6IFByb3RvdHlwZSBpdC4KCkZyaSBPY3QgIDkgMTQ6MjY6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2xvYmFsLmMgKGJ1aWxkX2luc25fY2hhaW4pOiBWZXJpZnkgbm8gcmVhbCBpbnNucyBleGlzdCBwYXN0IHRoZQoJZW5kIG9mIHRoZSBsYXN0IGJhc2ljIGJsb2NrLCB0aGVuIGV4aXQgdGhlIGxvb3AuCgpGcmkgT2N0ICA5IDExOjQ0OjQ3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGxvb3AuYyAoaW5zZXJ0X2JjdCk6IEVuc3VyZSBsb29wX2l0ZXJhdGlvbl92YXIgbm9uLXplcm8gYmVmb3JlIHVzZS4KClRodSBPY3QgIDggMjE6NTk6NDcgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBDYWxsIElOSVRfRVhQQU5ERVJTLgoKVGh1IE9jdCAgOCAyMjowMzo0NSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoUlRYX0NPU1RTKTogQWRkIFBST0NFU1NPUl9QUEM2MDRlIGNhc2VzLgoKVGh1IE9jdCAgOCAxNzowMDoxOCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IENvcnJlY3RseSBkZXRlcm1pbmUgd2hlbiBhIGNhbGwKCWlzIHdpdGhpbiBhbiBleGNlcHRpb24gcmVnaW9uLgoKVGh1IE9jdCAgOCAxNzoxNTowNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAob3V0cHV0X2ZpbGVfZGlyZWN0aXZlKTogVXNlIERJUl9TRVBBUkFUT1IsIG5vdCAnLycuCgoJKiBjcHBsaWIuaDogUHJvdGVjdCBmcm9tIG11bHRpcGxlIGluY2x1c2lvbnMuCgkqIGNwcGxpYi5jOiBGaXggbWlub3IgZm9ybWF0dGluZyBwcm9ibGVtcy4KCgkqIGkzODYveG0tY3lnd2luMzIuaDogT25seSBkZWZpbmUgUE9TSVggaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZC4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFJldmVydCBhY2NpZGVudGFsIHBhdGNoLgoKCSogTWFrZWZpbGUuaW4gKGNwcGxpYi5vKTogVXNlIHVubGlic3ViZGlyLgoKVGh1IE9jdCAgOCAxMjo1MDo0NyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBBbGxvdyBjb21iaW5lIHdoZW4gZWl0aGVyIGNvbXBhcmUgaXMKCVZPSURtb2RlLgoKVGh1IE9jdCA4IDExOjMxOjAxIFBEVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKVGh1IE9jdCAgOCAxMjoyMToxNCAxOTk4ICBSaWNoYXJkIEZyaXRoLU1hY2RvbmFsZCA8cmljaGFyZEBicmFpbnN0b3JtLmNvLnVrPgoKCSogYy1sZXguYyAocmVtZW1iZXJfcHJvdG9jb2xfcXVhbGlmaWVycyk6IEhhbmRsZSBSSURfQllSRUYuCgkoaW5pdF9sZXgpOiBJbml0aWFsaXplIHJpZHBvaW50ZXJzW1JJRF9CWVJFRl0uCgkqIGMtbGV4LmggKGVudW0gcmlkKTogQWRkIFJJRF9CWVJFRi4KCSogYy1wYXJzZS5ncGVyZjogQWRkIFJJRF9CWVJFRiBhcyBhIHR5cGUgcXVhbGlmaWVyLgoJKiBvYmpjL29iamMtYWN0LmMgKGlzX29iamNfdHlwZV9xdWFsaWZpZXJzKTogSGFuZGxlIFJJRF9CWVJFRi4KCShlbmNvZGVfdHlwZV9xdWFsaWZpZXJzKTogU2ltaWxhcmx5CgkqIGMtZ3BlcmYuaDogUmVidWlsdC4KClRodSBPY3QgIDggMDU6NTY6MDAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogYy1jb21tb24uYyAodHlwZV9mb3JfbW9kZSk6IE9ubHkgcmV0dXJuIFRJdHlwZSBub2RlcyB3aGVuCglIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgkqIGMtZGVjbC5jIChpbnRUSV90eXBlX25vZGUsIHVuc2lnbmVkX2ludFRJX3R5cGVfbm9kZSk6IE9ubHkgZGVjbGFyZQoJd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBPbmx5IGNyZWF0ZSBUSXR5cGUgbm9kZXMgd2hlbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKiBjLXRyZWUuaCAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBPbmx5IGRlY2xhcmUKCXdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoKVGh1IE9jdCAgOCAwNTowNTozNCAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIHN0bXQuYyAobl9vY2N1cnJlbmNlcyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFZlcmlmeSB0aGF0IGFsbCBjb25zdHJhaW5zIG1hdGNoIGluIHRoZQoJbnVtYmVyIG9mIGFsdGVybmF0aXZlcy4KCVZlcmlmeSB0aGF0ICcrJyBvciAnPScgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gb3V0cHV0IGNvbnN0cmFpbnQuCglEb24ndCBhbGxvdyAnJicgZm9yIGlucHV0IG9wZXJhbmRzLgoJVmVyaWZ5IHRoYXQgJyUnIGlzbid0IHdyaXR0ZW4gZm9yIHRoZSBsYXN0IG9wZXJhbmQuCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBBYm9ydCBpZiBhbiBhc20gaXMgZm91bmQgd2l0aCBpbnZhbGlkCgljb25zdHJhaW50czsgYWxsIHBvc3NpYmxlIHByb2JsZW1zIG91Z2h0IHRvIGJlIGNoZWNrZWQgZm9yIGVhcmxpZXIuCgpUaHUgT2N0ICA4IDA0OjI2OjIwIDE5OTggIE1pY2hhZWwgSGF5ZXMgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogZmxhZ3MuaCAoZmxhZ19icmFuY2hfb25fY291bnRfcmVnKTogQWx3YXlzIGRlY2xhcmUgCgkqIHRvcGxldi5jIChmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWcpOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IEZpeCB0eXBvcy4KCgkqIHJlYWwuYyAoYzR4dG9lKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuICBBZGQgc29tZSBtaXNzaW5nIHBhcmVucy4KCSh0b2M0eCk6IFNpbWlsYXJseS4KClRodSBPY3QgIDggMDE6MjU6MjIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBDYWxjIHVwcGVyIGJvdW5kIGZvciBleHRyYSBub3BzIGluCgltYXhfdWlkc19mb3JfZmxvdy4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogQWRkIGEgbm9wIHRvIHRoZSBlbmQgb2YgYSBiYXNpYyBibG9jayB3aGVuCglhIHRyYWlsaW5nIGNhbGwgaW5zbiBkb2VzIG5vdCBoYXZlIGFibm9ybWFsIGNvbnRyb2wgZmxvdy4KCSogZ2NzZS5jIChwcmVfdHJhbnNwb3V0KTogTmV3IHZhcmlhYmxlLgoJKGFsbG9jX3ByZV9tZW0sIGZyZWVfcHJlX21lbSwgZHVtcF9wcmVfZGF0YSk6IEJvb2trZWVwaW5nIGZvciBpdC4KCShjb21wdXRlX3ByZV90cmFuc3BvdXQpOiBDYWxjdWxhdGUgaXQuCgkoY29tcHV0ZV9wcmVfcHBpbm91dCk6IFVzZSBpdCB0byBlbGltaW5hdGUgaW1wb3NzaWJsZSBwbGFjZW1lbnRzCglkdWUgdG8gYWJub3JtYWwgY29udHJvbCBmbG93IHRocm91Z2ggY2FsbHMuCgkoY29tcHV0ZV9wcmVfZGF0YSk6IENhbGwgY29tcHV0ZV9wcmVfdHJhbnNwb3V0LgoKV2VkIE9jdCAgNyAyMTo0MDoyNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zb2wyLXNsZC02NC5oIChBU01fQ1BVX1NQRUMpOiBGaXggdHlwby4KCldlZCBPY3QgIDcgMjE6MTk6NDYgMTk5OCAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLm1kICh0YWJsZWp1bXBfaW50ZXJuYWwzLCB0YWJsZWp1bXBfaW50ZXJuYWw0CglhbmQgbWF0Y2hpbmcgZGVmaW5lX2luc25zKTogVGFjayBvbiBhIGB1c2UnIG9mIHRoZSB0YWJsZSBsYWJlbCwgc28KCWZsb3cgYW5hbHlzaXMgd2lsbCByZWNvZ25pemUgYSB0YWJsZWp1bXAuCgpXZWQgT2N0ICA3IDE3OjMzOjM5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnY3NlLmMgKHByZV9pbnNlcnRfaW5zbik6IFR3ZWVrIHRvIG5vdGljZSB0aGF0IGNhbGxzIGRvIG5vdAoJYWx3YXlzIGVuZCBiYXNpYyBibG9ja3MgZm9yIGFibm9ybWFsIGVkZ2UgcmVhc29ucy4KCldlZCBPY3QgIDcgMTQ6NDA6NDMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYuaDogUmVtb3ZlIGRlZmluaXRpb24gb2YKCUhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCQoJKiBjb25maWcvaTM4Ni9nbzMyLmg6IEFkZCBkZWZpbml0aW9uIG9mCglIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgkKCSogY29uZmlnL2kzODYvd2luMzIuaDogQWRkIGRlZmluaXRpb24gb2YKCUhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCQoJKiBjb25maWcvaTM4Ni9jeWd3aW4zMi5oOiBBZGQgZGVmaW5pdGlvbiBvZgoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogYy1wcmFnbWEuYyAoaW5zZXJ0X3BhY2tfYXR0cmlidXRlcyk6IERvIG5vdCBpbnNlcnQKCWF0dHJpYnV0ZXMgdW5sZXNzICNwcmFnbWEgcGFjayhwdXNoLDxuPikgaXMgaW4gZWZmZWN0LgoKV2VkIE9jdCAgNyAxMjoxMDo0NiAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGVtaXRfZ3JvdXBfc3RvcmUpOiBIYW5kbGUgYSBQQVJBTExFTCBkZXN0aW5hdGlvbi4KCldlZCBPY3QgIDcgMTA6MDc6MjkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdjc2UuYyAocHJlX2luc2VydF9pbnNuKTogV2hlbiBhIGNhbGwgZW5kcyBhIGJiLCBpbnNlcnQKCXRoZSBuZXcgaW5zbnMgYmVmb3JlIHRoZSBhcmd1bWVudCByZWdzIGFyZSBsb2FkZWQuCgpXZWQgT2N0ICA3IDEyOjU1OjI2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChjLWdwZXJmLmgpOiBBZGQgLUwgS1ItQyAtRiAnLCAwLCAwJyBmbGFncyB0byBncGVyZi4KCShjLXBhcnNlLmdwZXJmKTogVXBkYXRlIGNvbW1lbnRzIGRlc2NyaWJpbmcgaW52b2NhdGlvbiBmbGFncy4KCShjLWdwZXJmLmgpOiBSZWdlbmVyYXRlIHVzaW5nIGdwZXJmIDIuNy4xICgxOTk4MTAwNiBlZ2NzKS4KCjE5OTgtMTAtMDcgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2FsbCBmcmVlIGJlZm9yZSBjbG9iYmVyaW5nIHRoZSBtZW1vcnkKCWxvY2F0aW9ucyBvciBjb25zdGFudHMgcG9pbnRlcnMuCgpXZWQgT2N0ICA3IDAyOjA1OjIwIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IFJld29yawoJZm9yIGVmZmljaWVuY3kgYnkgY2hlY2tpbmcgd2hldGhlciB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgY3VycmVudAoJc3RhY2sgcGVybWlzc2lvbiBhdCBhbGwuCgkoQVNNX09VVFBVVF9DT05TVFJVQ1RPUiwgQVNNX09VVFBVVF9ERVNUUlVDVE9SKTogRGVmaW5lLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogRW1pdAoJX19lbmFibGVfZXhlY3V0ZV9zdGFjayBsaWJjYWxsIGhlcmUgdG9vIGlmCglUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUgaXMgZGVmaW5lZC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IFNldCBUQVJHRVRfQVJDSDMyIHRvIGEgY29uc3RhbnQgaWYKCUlOX0xJQkdDQzIuCgpXZWQgT2N0ICA3IDAyOjI3OjUyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChEUklWRVJfREVGSU5FUyk6IFJlbW92ZSBsYXN0IGNoYW5nZS4KCQpXZWQgT2N0ICA3IDAxOjA4OjQzIDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSoganVtcC5jIChkdXBsaWNhdGVfbG9vcF9leGl0X3Rlc3QpOiBTdHJpcCBSRUdfV0FTXzAgbm90ZXMgb2ZmIGFsbAoJaW5zbnMgd2UncmUgZ29pbmcgdG8gY29weS4KCSogcmVnY2xhc3MuYyAocmVnX3NjYW5fbWFya19yZWZzKTogRG9uJ3QgdGVzdCBYIGZvciBOVUxMX1JUWC4KCgkqIGxvb3AuYyAoY291bnRfb25lX3NldCk6IEFkZCBwcm90b3R5cGUuCgoJKiBjYWxsZXItc2F2ZS5jIChyZXN0b3JlX3JlZmVyZW5jZWRfcmVncyk6IExvc2UgbW9kZSBhcmd1bWVudC4KCShpbnNlcnRfc2F2ZSk6IExvc2UgbW9kZSBhcmd1bWVudC4KCShpbnNlcnRfcmVzdG9yZSk6IExvc2UgbW9kZSBhcmd1bWVudC4KCShpbnNlcnRfb25lX2luc24pOiBMb3NlIG1vZGUgYXJndW1lbnQuCgkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKHNldHVwX3NhdmVfYXJlYXMpOiBUYWtlIG5vIGFyZ3VtZW50IGFuZCByZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJRG9uJ3QgdmVyaWZ5IHZhbGlkaXR5IG9mIG1lbW9yeSBhZGRyZXNzZXMuCgkqIHJlbG9hZC5oIChzZXR1cF9zYXZlX2FyZXMpOiBBZGp1c3QgcHJvdG90eXBlLgoJKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKGRlbGV0ZV9jYWxsZXJfc2F2ZV9pbnNucyk6IE5ldyBmdW5jdGlvbi4KCShjYWxsZXJfc2F2ZV9zcGlsbF9jbGFzcyk6IERlbGV0ZSB2YXJpYWJsZS4KCShjYWxsZXJfc2F2ZV9ncm91cF9zaXplKTogRGVsZXRlIHZhcmlhYmxlLgoJKHJlbG9hZCk6IENhbGwgc2V0dXBfc2F2ZV9hcmVhcyBhbmQgc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzCglpbiB0aGUgbWFpbiBsb29wLCBiZWZvcmUgY2FsbGluZyBjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zLgoJRG9uJ3QgY2FsbCBzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MgYWZ0ZXIgdGhlIGxvb3AuCglDYWxsIGRlbGV0ZV9jYWxsZXJfc2F2ZV9pbnNucyBhdCB0aGUgZW5kIG9mIGFuIGl0ZXJhdGlvbiBpZgoJc29tZXRoaW5nIGNoYW5nZWQuCglEZWxldGUgY29kZSB0byBtYW5hZ2UgY2FsbGVyX3NhdmVfc3BpbGxfY2xhc3MuCglFbWl0IHRoZSBmaW5hbCBub3RlIGJlZm9yZSBzZXR0aW5nIHJlbG9hZF9maXJzdF91aWQuCglTaW1wbGlmeSB0ZXN0IHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHJlbG9hZF9hc19uZWVkZWQgZ2V0cyBydW4uCgkoY2FsY3VsYXRlX25lZWRzKTogRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzLgoKVHVlIE9jdCAgNiAxNTo0MjoyNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29sbGVjdDIuYyAobWFpbik6IEluaXRpYWxpemUgbGRfZmlsZV9uYW1lLgoKVHVlIE9jdCAgNiAxNTo0NToxNSAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KIAogICAgICAgICogY29uZmlnL3NwYXJjL3N5c3Y0LmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogIERvbid0CiAgICAgICAgY2hlY2sgZm9yIGZsYWdfZnVuY3Rpb25fc2VjdGlvbnMuCgpUdWUgT2N0ICA2IDIwOjAyOjMxIDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNzZS5jIChpbnNlcnRfcmVncyk6IEZpeCBidWcgaW4gU2VwIDI0IGNoYW5nZS4KClR1ZSBPY3QgIDYgMTc6MDA6NDIgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZmxhZ3MuaCAoZmxhZ19kdW1wX3VubnVtYmVyZWQpOiBEZWNsYXJlLgoJKiB0b3BsZXYuYyAoZmxhZ19kdW1wX3VubnVtYmVyZWQpOiBEb24ndCBkZWNsYXJlLgoJKiBwcmludC1ydGwuYyAoZmxhZ3MuaCk6IEluY2x1ZGUuCgkocHJpbnRfcnRsX3NpbmdsZSk6IEFkZCByZXR1cm4gdmFsdWUuCgkqIHJ0bC5oIChwcmludF9ydGxfc2luZ2xlKTogVXBkYXRlIGRlY2xhcmF0aW9uLgoJKiBmbG93LmMgKGZsYWdfZHVtcF91bm51bWJlcmVkKTogRG9uJ3QgZGVjbGFyZS4KCShwcmludF9ydGxfd2l0aF9iYik6IFVzZSByZXR1cm4gdmFsdWUgb2YgcHJpbnRfcnRsX3NpbmdsZS4KClR1ZSBPY3QgIDYgMDE6MzY6MDAgMTk5OCAgQmVybmQgU2NobWlkdCA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBsb29wLmMgKGNvdW50X29uZV9zZXQpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCgljb3VudF9sb29wX3JlZ3Nfc2V0CgkoY291bnRfbG9vcF9yZWdzX3NldCk6IENhbGwgaXQuCgkqIGdsb2JhbC5jIChtYXJrX3JlZ19zdG9yZSk6IEhhbmRsZSBjbG9iYmVycyBoZXJlIGJ5IG5vdCBjYWxsaW5nCglzZXRfcHJlZmVyZW5jZS4KCShtYXJrX3JlZ19jbG9iYmVyKTogSnVzdCBjYWxsIG1hcmtfcmVnX3N0b3JlIGFmdGVyIGVuc3VyaW5nIFNFVFRFUgoJaXMgaW4gZmFjdCBhIGNsb2JiZXIuCgkqIGludGVncmF0ZS5jIChwcm9jZXNzX3JlZ19wYXJhbSk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJZXhwYW5kX2lubGluZV9mdW5jdGlvbi4KCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQ2FsbCBpdC4KCgoJKiBpMzg2Lm1kIChhZGRzaWRpM18xKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSB0ZW1wLgoJKGFkZHNpZGkzXzIpOiBMaWtld2lzZS4KCShjbHN0cnN0cnNpKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZSBhZGRyMS4KCgkqIHJ0bC5oOiBEb24ndCBkZWNsYXJlIGFueSBmdW5jdGlvbnMgYWxzbyBkZWNsYXJlZCBpbiByZWNvZy5oLgoKCSogTWFrZWZpbGUuaW4gKHN0dXBpZC5vKTogVXBkYXRlIGRlcGVuZGVuY2llcy4KCShnbG9iYWwubyk6IExpa2V3aXNlLgoKCSogZ2xvYmFsLmM6IEluY2x1ZGUgcmVsb2FkLmgKCShyZWdfYmVjb21lc19saXZlKTogTmV3IGZ1bmN0aW9uLgoJKHJlZ19kaWVzKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2luc25fY2hhaW4pOiBOZXcgZnVuY3Rpb24uCgkoZ2xvYmFsX2FsbG9jKTogQ2FsbCBidWlsZF9pbnNuX2NoYWluIGJlZm9yZSBjYWxsaW5nIHJlbG9hZC4KCgkqIHJlbG9hZC5oIChzdHJ1Y3QgbmVlZHMpOiBOZXcgc3RydWN0dXJlIGRlZmluaXRpb24uCgkoc3RydWN0IGluc25fY2hhaW4pOiBMaWtld2lzZS4KCShyZWxvYWRfaW5zbl9jaGFpbik6IERlY2xhcmUgdmFyaWFibGUuCgkobmV3X2luc25fY2hhaW4pOiBEZWNsYXJlIGZ1bmN0aW9uLgoKCgkqIHJlbG9hZDEuYyAocmVsb2FkX3N0YXJ0b2JqKTogTmV3IHZhcmlhYmxlLgoJKHJlbG9hZF9pbnNuX2NoYWluKTogTmV3IHZhcmlhYmxlLgoJKHVudXNlZF9pbnNuX2NoYWlucyk6IE5ldyB2YXJpYWJsZS4KCShuZXdfaW5zbl9jaGFpbik6IE5ldyBmdW5jdGlvbi4KCShpbml0X3JlbG9hZCk6IEluaXRpYWxpemUgcmVsb2FkX3N0YXJ0b2JqLCBub3QgcmVsb2FkX2ZpcnN0b2JqLgoJKHJlbG9hZCk6IEluaXRpYWxpemUgcmVsb2FkX2ZpcnN0b2JqLgoJQmVmb3JlIHJldHVybmluZywgZnJlZSBldmVyeXRoaW5nIG9uIHRoZSByZWxvYWRfb2JzdGFjay4KCgkqIHN0dXBpZC5jOiBJbmNsdWRlIGluc24tY29uZmlnLmgsIHJlbG9hZC5oIGFuZCBiYXNpYy1ibG9jay5oLgoJKHJlZ193aGVyZV9kZWFkX2NoYWluLCByZWdfd2hlcmVfYm9ybl9leGFjdCwgcmVnX3doZXJlX2Jvcm5fY2xvYmJlciwKCWN1cnJlbnRfY2hhaW4pOiBOZXcgdmFyaWFibGVzLgoJKHJlZ193aGVyZV9ib3JuKTogRGVsZXRlIHZhcmlhYmxlLgoJKFJFR19XSEVSRV9CT1JOKTogTmV3IG1hY3JvLgoJKGZpbmRfY2xvYmJlcmVkX3JlZ3MpOiBOZXcgZnVuY3Rpb24uCgkoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBEb24ndCBhbGxvY2F0ZS9mcmVlIHJlZ193aGVyZV9ib3JuLgoJQWxsb2NhdGUgYW5kIGZyZWUgcmVnX3doZXJlX2Jvcm5fZXhhY3QsIHJlZ193aGVyZV9ib3JuX2Nsb2JiZXIsCglyZWdfd2hlcmVfZGVhZF9jaGFpbi4KCVVzZSBSRUdfV0hFUkVfQk9STiBpbnN0ZWFkIG9mIHJlZ193aGVyZV9ib3JuLgoJV2hpbGUgcHJvY2Vzc2luZyB0aGUgaW5zbnMsIGJ1aWxkIHRoZSByZWxvYWRfaW5zbl9jaGFpbiB3aXRoCglpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlciBsaWZldGltZXMuCgkoc3R1cGlkX3JlZ19jb21wYXJlKTogVXNlIFJFR19XSEVSRV9CT1JOIGluc3RlYWQgb2YgcmVnX3doZXJlX2Jvcm4uCgkoc3R1cGlkX21hcmtfcmVmcyk6IFJlcGxhY2UgYXJnIElOU04gd2l0aCBhcmcgQ0hBSU4uICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCUNvbXB1dGUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGJpcnRoIGFuZCBkZWF0aCBvZiBwc2V1ZG8gcmVnaXN0ZXJzIGluCglyZWdfd2hlcmVfZGVhZF9jaGFpbiwgcmVnX3doZXJlX2Jvcm5fZXhhY3QgYW5kIHJlZ193aGVyZV9ib3JuX2Nsb2JiZXIuCglEZWxldGUgY29kZSB0byBzZXQgZWxlbWVudHMgb2YgcmVnX3doZXJlX2Jvcm4uCQoKTW9uIE9jdCAgNSAyMjozNDozMCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChHT1RPX0VYUFIpOiBNb2RpZmllZCBkb2N1bWVudGF0aW9uLgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRXhwYW5kIEdPVE9fRVhQUiBpbnRvIGEgZ290byBvciBhIGNvbXB1dGVkCiAJZ290by4KCk1vbiBPY3QgIDUgMjI6NDM6MzYgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogdW5yb2xsLmMgKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudAoJbG9vcF9maW5hbF92YWx1ZSwgbG9vcF9jb21wYXJpc29uX2NvZGUpOiBObyBsb25nZXIgc3RhdGljLgoJKHVucm9sbF9sb29wKTogRGVsZXRlIGxvb3Bfc3RhcnRfdmFsdWUgdXBkYXRlLgoJKiBsb29wLmggKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudCwKCWxvb3BfZmluYWxfdmFsdWUsIGxvb3BfY29tcGFyaXNvbl9jb2RlKTogRXh0ZXJuLgoJKGxvb3Bfc3RhcnRfdmFsdWUpOiBEZWxldGUgZXh0ZXJuLgoJKiBsb29wLmMgKGxvb3BfY2FuX2luc2VydF9iY3QsIGxvb3BfaW5jcmVtZW50LCBsb29wX3N0YXJ0X3ZhbHVlLAoJbG9vcF9jb21wYXJpc29uX3ZhbHVlLCBsb29wX2NvbXBhcmlzb25fY29kZSk6IERlbGV0ZS4KCShsb29wX29wdGltaXplKTogUmVtb3ZlIGluaXRpYWxpemF0aW9uIGZvciBkZWxldGVkIHZhcmlhYmxlcy4KCShzdHJlbmd0aF9yZWR1Y2UpOiBEZWxldGUgYW5hbHl6ZV9sb29wX2l0ZXJhdGlvbnMgY2FsbC4gIE9ubHkgY2FsbAoJaW5zZXJ0X2JjdCBpZiBmbGFnX2JyYW5jaF9jb3VudF9vbl9yZWcgc2V0LgoJKGFuYWx5emVfbG9vcF9pdGVyYXRpb25zKTogRGVsZXRlLgoJKGluc2VydF9iY3QpOiBSZW1vdmUgaXRlcmF0aW9uIGNvdW50IGNhbGN1bGF0aW9uLiAgTW92ZSBjaGVja3MgZm9yCgl2aWFibGUgQkNUIG9wdGltaXphdGlvbiB0byBoZXJlLiAgT2J0YWluIGl0ZXJhdGlvbiBjb3VudCBmcm9tCglsb29wX2l0ZXJhdGlvbnMgYW5kIGNvcnJlY3QgZm9yIHVucm9sbGluZy4gIENoZWNrIGZvciBlbm91Z2gKCWl0ZXJhdGlvbiB0byBiZSBiZW5lZmljaWFsLiAgQ29tbWVudCBvdXQgcnVudGltZSBpdGVyYXRpb24gY291bnQKCWNhc2UuCgkoaW5zZXJ0X2JjdCk6IFByaW50IGl0ZXJhdGlvbiBjb3VudCBpbiBkdW1wIGZpbGUuICBSZW1vdmUKCWxvb3BfdmFyX21vZGUgYW5kIHVzZSB3b3JkX21vZGUgZGlyZWN0bHkuCgoJKiByczYwMDAuaCAocHJvY2Vzc29yX3R5cGUpOiBBZGQgUFJPQ0VTU09SX1BQQzYwNGUuCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBpdC4KCShvcHRpbWl6YXRpb25fb3B0aW9ucyk6IEVuYWJsZSB1c2Ugb2YgZmxhZ19icmFuY2hfb25fY291bnRfcmVnLgoJKiByczYwMDAubWQgKGRlZmluZV9mdW5jdGlvbl91bml0KTogRGVzY3JpYmUgNjA0ZS4KCjE5OTgtMTAtMDUgSGVybWFuIEEuSi4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IENvcnJlY3RlZCB0aHJlc2hvbGQgY2FsY3VsYXRpb24gZm9yCgltb3ZlZF9vbmNlIHJlZ2lzdGVycy4KCk1vbiBPY3QgIDUgMjE6MTg6NDUgMTk5OCAgQmVybmQgU2NobWlkdCA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBsb29wLmMgKGNvbWJpbmVfZ2l2c19wKTogRml4IHRlc3QgZm9yIGlkZW50aWNhbCBnaXZzLgoKTW9uIE9jdCAgNSAxMDoxMToyOCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGdlbl9zdWJwcm9ncmFtX2RpZSk6IElmIGVycm9yY291bnQgbm9uemVybywgZG9uJ3QKCWNhbGwgYWJvcnQgaWYgdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkgZGVmaW5lZC4KCk1vbiBPY3QgIDUgMTA6MDI6MzYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBEbyBub3QgcmVwbGFjZSBUUlVOQ0FURSB3aXRoIGEgU1VCUkVHIGlmCgl0cnVuY2F0aW9uIGlzIG5vdCBhIG5vLW9wLgoKTW9uIE9jdCA1IDA5OjAyOjA0IFBEVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE9jdCA1IDA4OjE5OjU1IFBEVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE9jdCAgNSAwMTowNzoyMyAxOTk4ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgoKCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBEb24ndCB3aWRlbiBmb3IgY29tcHV0aW5nIHJlbWFpbmRlcgoJaWYgd2Ugc2VlbSB0byBoYXZlIGEgZGl2bW9kIHBhdHRlcm4gZm9yIG5lZWRlZCBtb2RlLgoKTW9uIE9jdCAgNSAwMTowMTo0MiAxOTk4ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PiAgCgoJKiBjcHBsaWIuYyAobWFjcm9leHBhbmQpOiBDb3JyZWN0IG9mZi1ieS1vbmUgZXJyb3IgaW4gaGFuZGxpbmcKCW9mIGVzY2FwZXMuCgpTdW4gT2N0ICA0IDIzOjU4OjMwIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb21iaW5lLmMgKGV4cGFuZF9maWVsZF9hc3NpZ25tZW50KTogRG9uJ3QgZG8gYml0d2lzZSBvcGVyYXRpb25zCglvbiBNT0RFX0ZMT0FUOyBwdW4gdG8gTU9ERV9JTlQgaWYgcG9zc2libGUuCgpTdW4gT2N0ICA0IDE4OjMzOjI0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCQkJICBzY290dCBzbnlkZXIgIDxzbnlkZXJAZDBzZ2lmLmZuYWwuZ292PgoKCSogdGxpbmsuYyAoc2Nhbl9saW5rZXJfb3V0cHV0KTogUmVjb2duaXplIGVycm9ycyBmcm9tIGlyaXggNi4yCglsaW5rZXIuICBSZWNvZ25pemUgbWFuZ2xlZCBuYW1lcyBpbiBxdW90ZXMuCgpTdW4gT2N0ICA0IDAyOjU4OjIwIDE5OTggIEpha3ViIEplbGluZWsgIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgoKICAgICAgICAqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoYXNobGRpMysxKTogTmFtZSBpdCBhc2hsZGkzX3NwNjQuCgkoYXNobHNpM19jb25zdDEsIGFzaGxkaTNfY29uc3QxKTogTmV3IGNvbWJpbmVyIHBhdHRlcm5zLgoJKGFzaHJzaTNfZXh0ZW5kLCBhc2hyc2kzX2V4dGVuZDIpOiBOZXcgY29tYmluZXIgcGF0dGVybnMuCgkobHNocnNpM19leHRlbmQsIGxzaHJzaTNfZXh0ZW5kMik6IERpdHRvLgoKU3VuIE9jdCAgNCAwMDoyMzowMCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogSWYgdHJ5aW5nIHRvIHRha2UgYSBzdWItd29yZAoJaW50ZWdyYWwgcGllY2Ugb2YgYSBmbG9hdGluZyBwb2ludCBtb2RlLCBwdXQgaXQgb24gdGhlIHN0YWNrLgoKU2F0IE9jdCAgMyAxOTowMTowMyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEvbGludXguaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgX19hbHBoYV9fIGZvciBpbWFrZS4KClNhdCBPY3QgIDMgMTQ6NDI6MTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogUFJPSkVDVFM6IFJlbW92ZSB0ZW1wbGF0ZSBmcmllbmRzLgoKCSogY29sbGVjdDIuYyAoc29ydF9pZHMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoKCSogdG0udGV4aSAoTUFUSF9MSUJSQVJZKTogRG9jdW1lbnQuCgkoTkVFRF9NQVRIX0xJQlJBUlkpOiBSZW1vdmUuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24sIGFzc2VtYmxlX3ZhcmlhYmxlLCB3ZWFrX2ZpbmlzaCwKCWFzc2VtYmxlX2FsaWFzKTogRG8gQVNNX0dMT0JBTElaRV9MQUJFTCBmb3Igd2VhayBzeW1ib2xzLCB0b28uCgpTYXQgT2N0ICAzIDE2OjE0OjQ0IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZHdhcmYyb3V0LmMgKGV4cGFuZF9idWlsdGluX2R3YXJmX3JlZ19zaXplKTogIEluaXRpYWxpemUKCWxhc3RfZW5kIHRvIDB4N2ZmZmZmZmYuCgpGcmkgT2N0ICAyIDE5OjE0OjIwIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBEbyBub3QgcGVyZm9ybSBlbmRpYW5uZXNzCgljb3JyZWN0aW9ucyBvbiBiaXRwb3MsIHdobyB3ZSBjYWxsIHdpbGwgZG8gaXQgZm9yIHVzLgoKRnJpIE9jdCAgMiAxMTo1MjozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5jIChXT1JEX1JFR19VU0VEKTogRml4IHR5cG8uCgkoaW5pdGlhbF9vZmZzZXQpOiBVc2UgV09SRF9SRUdfVVNFRC4KCgkqIGg4MzAwLmMgKGhhbmRsZV9wcmFnbWEpOiBGaXggdHlwby4KCkZyaSBPY3QgIDIgMTA6NTE6MzUgMTk5OCAgQmVybmQgU2NobWlkdCA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBjYWxsZXItc2F2ZS5jIChpbnNlcnRfc2F2ZV9yZXN0b3JlKTogQnJlYWsgdGhpcyBmdW5jdGlvbiB1cAoJaW50byBuZXcgZnVuY3Rpb25zIGluc2VydF9yZXN0b3JlLCBpbnNlcnRfc2F2ZSBhbmQgaW5zZXJ0X29uZV9pbnNuLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShpbnNlcnRfcmVzdG9yZSk6IE5ldyBmdW5jdGlvbiwgbW9zdGx5IGJyb2tlbiBvdXQgb2YKCWluc2VydF9zYXZlX3Jlc3RvcmUuCgkoaW5zZXJ0X3NhdmUpOiBMaWtld2lzZS4KCShpbnNlcnRfb25lX2luc24pOiBMaWtld2lzZS4KCShyZXN0b3JlX3JlZmVyZW5jZWRfcmVncyk6IE5ldyBhcmd1bWVudCBCTE9DSy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogRG9uJ3Qga2VlcCB0cmFjayBvZiBiYXNpYyBibG9jayBib3VuZGFyaWVzCglpbiB0aGlzIGZ1bmN0aW9uLCBkbyBpdCBpbiBpbnNlcnRfb25lX2luc24gaW5zdGVhZC4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogQnJlYWsgb3V0IHNvbWUgbW9yZSBwaWVjZXMgaW50byBzZXBhcmF0ZQoJZnVuY3Rpb25zLgoJKGR1bXBfbmVlZHMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgcmVsb2FkLgoJKHNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cyk6IExpa2V3aXNlLgoJKGluaXRfZWxpbV90YWJsZSk6IExpa2V3aXNlLgoJKHVwZGF0ZV9lbGltaW5hYmxlcyk6IExpa2V3aXNlLgoKCSogZ2xvYmFsLmMgKGdsb2JhbF9hbGxvYyk6IERlbGV0ZSBjb2RlIHRvIG1hbmFnZSB0aGUgc2NyYXRjaF9saXN0LgoJKiBsb2NhbC1hbGxvYy5jIChxdHlfc2NyYXRjaF9ydHgpOiBEZWxldGUuCgkoc2NyYXRjaF9ibG9jayk6IERlbGV0ZS4KCShzY3JhdGNoX2xpc3QpOiBEZWxldGUuCgkoc2NyYXRjaF9saXN0X2xlbmd0aCk6IERlbGV0ZS4KCShzY3JhdGNoX2luZGV4KTogRGVsZXRlLgoJKGFsbG9jX3F0eV9mb3Jfc2NyYXRjaCk6IERlbGV0ZS4KCShsb2NhbC1hbGxvYyk6IFVwZGF0ZSBpbml0aWFsaXphdGlvbiBvZiBtYXhfcXR5LgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIHRoZSBzY3JhdGNoIGxpc3QuCglEZWxldGUgY29kZSB0byBhbGxvY2F0ZS9pbml0aWFsaXplIHF0eV9zY3JhdGNoX3J0eC4KCShibG9ja19hbGxvYyk6IERvbid0IGFsbG9jYXRlIHF1YW50aXRpZXMgZm9yIHNjcmF0Y2hlcy4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSB0aGUgc2NyYXRjaCBsaXN0LgoJKiByZWdzLmggKHNjcmF0Y2hfbGlzdCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShzY3JhdGNoX2Jsb2NrKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKHNjcmF0Y2hfbGlzdF9sZW5ndGgpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogRGVsZXRlIGNvZGUgdG8gbWFuYWdlIHRoZSBzY3JhdGNoIGxpc3QuCgkoc3BpbGxfaGFyZF9yZWcpOiBMaWtld2lzZS4KCShtYXJrX3NjcmF0Y2hfbGl2ZSk6IERlbGV0ZS4KCgkqIHJlY29nLmMgKGFsdGVyX3N1YnJlZyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCjE5OTgtMTAtMDIgIEFuZHJlYXMgSmFlZ2VyICA8YWpAYXJ0aHVyLnJoZWluLW5lY2thci5kZT4KCgkqIE1ha2VmaWxlLmluIChjY2NwLm8pOiBGaXggdHlwbyBpbiBsYXN0IHBhdGNoLgoKRnJpIE9jdCAgMiAxNjoxMzoxMiAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB0LXNoIChMSUIxQVNNRlVOQ1MpOiBBZGQgX3NldF9mcHNjciAuCgkqIGNvbmZpZy9zaC9saWIxZnVuY3MuYXNtIChfX19zZXRfZnBzY3IpOiBBZGQuCgpGcmkgT2N0ICAyIDAyOjAxOjU5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcyk6IFJldHVybiBpbW1lZGlhdGVseSBpZiBwYXNzZWQgYQoJTlVMTF9SVFggYXMgYW4gYXJndW1lbnQuCgoJKiBNYWtlZmlsZS5pbiAodW5saWJzdWJkaXIpOiBEZWZpbmUuCgkoRFJJVkVSX0RFRklORVMpOiBVc2UgdW5saWJzdWJkaXIuCgkoY2NjcC5vLCBjcHBsaWIubywgcHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogU2ltaWxhcmx5LgoJKHN0bXAtZml4aW5jKTogU2ltaWxhcmx5LgoKVGh1IE9jdCAgMSAxOTo1ODozMCAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEFkZCB2YXJpYWJsZSBvbGRfbWF4X3VpZC4KCUF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB1cGRhdGUgYmFzaWNfYmxvY2tfZW5kLgoKVGh1IE9jdCAgMSAxNzo1ODoyNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IFVzZQoJRklSU1RfUFNFVURPX1JFR0lTVEVSIGFzIHVwcGVyIGJvdW5kIGZvciBsYXN0X2VuZCwgbm90IGFuCglhcmJpdHJhcnkgY29uc3RhbnQuCgpUaHUgT2N0ICAxIDE3OjU3OjE0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jOiBJbXByb3ZlIGludGVyd29ya2luZyBzdXBwb3J0LgoKVGh1IE9jdCAgMSAxODo0MzozNSAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IEZpeCB0ZXN0IGlmIHJlbG9hZF9yZWdfcnR4W3JdIHdhcwoJY29waWVkIGZyb20gcmVsb2FkX291dFtyXSAuCgpUaHUgT2N0ICAxIDE5OjIwOjA5IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZHdhcmYyb3V0LmMgKGV4cGFuZF9idWlsdGluX2R3YXJmX3JlZ19zaXplKTogRml4IHRvIHdvcmsKCXdpdGggbW9yZSB0aGFuIHRocmVlIHNpemUgcmFuZ2VzLgoKCSogZmxvdy5jIChzYml0bWFwX2NvcHkpOiBVc2UgYmNvcHkgdG8gY29weSBiaXRtYXAuCgoJKiBydGwuYyAobW9kZV9uYW1lKTogQWRkIGEgbnVsbCBzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCgkobW9kZV93aWRlcl9tb2RlKTogQ2hhbmdlIHR5cGUgdG8gdW5zaWduZWQgY2hhci4KCShtb2RlX21hc2tfYXJyYXkpOiBOZXcgdmFyaWFibGUuCiAJKGluaXRfcnRsKTogVXBkYXRlIGZvciBtb2RlX3dpZGVyX21vZGUgdHlwZSBjaGFuZ2UuCgoJKiBydGwuaCAobW9kZV93aWRlcl9tb2RlKTogQ2hhbmdlIHR5cGUgdG8gdW5zaWduZWQgY2hhci4KCShtb2RlX21hc2tfYXJyYXkpOiBEZWNsYXJlLgoJKEdFVF9NT0RFX01BU0spOiBVc2UgbW9kZV9tYXNrX2FycmF5LgoKVGh1IE9jdCAgMSAxNTo1NjowMSAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKSA6IEVuY2Fwc3VsYXRlIGNvZGUgaW50byAKCWNvcHlfYmxrbW9kZV9mcm9tX3JlZy4KCSogZXhwci5jIChjb3B5X2Jsa21vZGVfZnJvbV9yZWcpOiBOZXcgZnVuY3Rpb24uCgkqIGV4cHIuaCAoY29weV9ibGttb2RlX2Zyb21fcmVnKTogTmV3IGZ1bmN0aW9uLgoJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogV2UgY2FuIGlubGluZQoJdGhlc2Ugbm93LgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBVc2UgY29weV9ibGttb2RlX2Zyb21fcmVnCglpZiBuZWVkZWQuICBBdm9pZCBjcmVhdGluZyBCTEttb2RlIFJFR3MuCgkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBEb24ndCB0cnkgdG8gU1VCUkVHIGEgQkxLbW9kZQoJb2JqZWN0LgoKVGh1IE9jdCAgMSAxMDo0MjoyNyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvdjg1MC5jOiBBZGQgZnVuY3Rpb24gcHJvdG90eXBlcy4KCUFkZCBzdXBwb3J0IGZvciB2ODUwIHNwZWNpYWwgZGF0YSBhcmVhcy4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuaDogQWRkIHN1cHBvcnQgZm9yIHY4NTAgc3BlY2lhbCBkYXRhIGFyZWFzLgoJCgkqIGMtcHJhZ21hLmM6IEFkZCBzdXBwb3J0IGZvciBIQU5ETEVfUFJBR01BX1BBQ0sgYW5kCglIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgkocHVzaF9hbGlnbm1lbnQpOiBOZXcgZnVuY3Rpb246IENhY2hlIGFuIGFsaWdubWVudCByZXF1ZXN0ZWQKCWJ5IGEgI3ByYWdtYSBwYWNrKHB1c2gsPG4+KS4KCShwb3BfYWxpZ25tZW50KTogTmV3IGZ1bmN0aW9uOiBQb3AgYW4gYWxpZ25tZW50IGZyb20gdGhlCglhbGlnbm1lbnQgc3RhY2suCgkoaW5zZXJ0X3BhY2tfYXR0cmlidXRlcyk6IE5ldyBmdW5jdGlvbjogR2VuZXJhdGUgX19wYWNrZWRfXwoJYW5kIF9fYWxpZ25lZF9fIGF0dHJpYnV0ZXMgZm9yIG5ldyBkZWNscyB3aGlsc3QgYSAjcHJhZ21hIHBhY2sKCWlzIGluIGVmZmVjdC4gCgkoYWRkX3dlYWspOiBOZXcgZnVuY3Rpb246IENhY2hlIGEgI3ByYWdtYSB3ZWFrIGRpcmVjdGl2ZS4KCShoYW5kbGVfcHJhZ21hX3Rva2VuKTogRG9jdW1lbnQgY2FsbGluZyBjb252ZW50aW9ucy4gIEFkZAoJc3VwcG9ydCBmb3IgI3ByYWdtYSBwYWNrKHB1c2gsPG4+KSBhbmQgI3ByYWdtYSBwYWNrIChwb3ApLgoKCSogYy1wcmFnbWEuaDogSWYgSEFORExFX1NZU1ZfUFJBR01BIG9yIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUAoJYXJlIGRlZmluZWQgZW5hYmxlIEhBTkRMRV9QUkFHTUFfUEFDSy4KCU1vdmUgJ3N0cnVjdCB3ZWFrX3N5bXMnIGhlcmUgKGZyb20gdmFyYXNtLmMpLgoJQWRkIHByYWdtYSBzdGF0ZXMgZm9yIHB1c2ggYW5kIHBvcCBwcmFnbWFzLgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogQ2FsbCBQUkFHTUFfSU5TRVJUX0FUVFJJQlVURVMKCWlmIGl0IGlzIGRlZmluZWQuCgoJKiBjLWxleC5jOiBSZXBsYWNlIG9jY3VyYW5jZXMgb2YgSEFORExFX1NZU1ZfUFJBR01BIHdpdGgKCUhBTkRMRV9HRU5FUklDX1BSQUdNQVMuCgkKCSogdmFyYXNtLmM6IE1vdmUgZGVmaW5pdGlvbiBvZiAnc3RydWN0IHdlYWtfc3ltcycgaW50bwoJYy1wcmFnbWEuaC4gCgkoaGFuZGxlX3ByYWdtYV93ZWFrKTogRGVsZXRlZC4KCgkqIGNvbmZpZy9pMzg2L2kzODYuaDogRGVmaW5lIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGNvbmZpZy93aW5udC93aW4tbnQuaDogRGVmaW5lIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IEFkZCBpbnZvY2F0aW9uIG9mCglTRVRfREVGQVVMVF9ERUNMX0FUVFJJQlVURVMsIGlmIGRlZmluZWQuCgoJKiB0bS50ZXhpOiBSZW1vdmUgZGVzY3JpcHRpb24gb2Ygbm9uLWV4aXN0YW50IG1hY3JvCglTRVRfREVGQVVMVF9TRUNUSU9OX05BTUUuCgkKCShIQU5ETEVfU1lTVl9QUkFHTUEpOiBEb2N1bWVudC4KCShIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1ApOiBEb2N1bWVudC4KCldlZCBTZXAgMzAgMjI6Mjc6NTMgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlnLnN1YjogUmVjb2duaXplIGlbMzQ1NjddODYtcGMtdWRrIGFzIG5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZS5pbjogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L3QtdWRrOiBOZXcgZmlsZS4KCSogY29uZmlnL2kzODYvdWRrLmg6IE5ldyBmaWxlLgoKV2VkIFNlcCAzMCAxOTozMzowNyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZW9yZy5jIChjaGVja19hbm51bF9saXN0X3RydWVfZmFsc2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KCShzdGVhbF9kZWxheV9saXN0X2Zyb21fdGFyZ2V0KTogQWRkIG1pc3NpbmcgInVzZWRfYW5udWwiIHZhcmlhYmxlLgoJKHRyeV9tZXJnZV9kZWxheV9pbnNucyk6IENsb3NlIG91dCBoYWxmIGZvcm1lZCBjb21tZW50LgoKV2VkIFNlcCAzMCAxOToxMzoyMCAxOTk4IFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+ICAKCgkqIGNwcGxpYi5jIChtYWNyb2V4cGFuZCk6IElmIGFyZy0+cmF3X2JlZm9yZSBvcgoJYXJnLT5yYXdfYWZ0ZXIsIHJlbW92ZSBhbnkgbm8tcmVleHBhbnNpb24gZXNjYXBlIGF0IHRoZQoJYmVnaW5uaW5nIG9mIHRoZSBwYXN0ZWQgdG9rZW4uICBDb3JyZWN0IGhhbmRsaW5nIG9mIHdoaXRlc3BhY2UKCW1hcmtlcnMgYW5kIG5vLXJlZXhwYW5kIG1hcmtlcnMgYXQgdGhlIGVuZCBpZiBhcmctPnJhd19hZnRlci4KCgkqIHRvcGxldi5jIChkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IFJlY29nbml6ZSAtaW5jbHVkZSwKCS1pbWFjcm9zLCAtaXdpdGhwcmVmaXgsIC1pd2l0aHByZWZpeGJlZm9yZS4KCSogY3BwbGliLmMgKGNwcF9zdGFydF9yZWFkKTogUHJvY2VzcyAtaW1hY3JvcyBhbmQgLWluY2x1ZGUKCXN3aXRjaGVzIGF0IHRoZSBzYW1lIHRpbWUgYW5kIGluIGNvbW1hbmQtbGluZSBvcmRlciwgYWZ0ZXIKCWluaXRpYWxpemluZyB0aGUgZGVwZW5kZW5jeS1vdXRwdXQgY29kZS4gIEVtaXQgcHJvcGVybHkgbmVzdGVkCgkjbGluZSBkaXJlY3RpdmVzIGZvciB0aGVtLiAgRW1pdCBhICNsaW5lIGZvciB0aGUgbWFpbiBmaWxlCgliZWZvcmUgcHJvY2Vzc2luZyB0aGVzZSBzd2l0Y2hlcywgYW5kIGRvbid0IGRvIGl0IGFnYWluCglhZnRlcndhcmQuCgpXZWQgU2VwIDMwIDE4OjAzOjIyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFVzZSBiaXRmaWVsZCBtYW5pcHVsYXRpb24KCXJvdXRpbmVzIHRvIGhhbmRsZSBtZW0gbW9kZSA8IHJlZyBtb2RlLgoKV2VkIFNlcCAzMCAxODo0MzozMiAxOTk4ICBIZXJtYW4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4gCgoJKiByZW9yZy5jICh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBBY2NvdW50IGZvciByZXNvdXJjZXMgcmVmZXJlbmNlZAoJaW4gZWFjaCBpbnN0cnVjdGlvbiBpbiBJTlNOJ3MgZGVsYXkgbGlzdCBiZWZvcmUgdHJ5aW5nIHRvIGVsaW1pbmF0ZQoJdXNlbGVzcyBpbnN0cnVjdGlvbnMuICBTaW1pbGFybHkgd2hlbiBsb29raW5nIGF0IGEgdHJpYWwgaW5zbidzIGRlbGF5CglzbG90cy4KCiAgICAgICAgKiByZW9yZy5jIChjaGVja19hbm51bF9saXN0X3RydWVfZmFsc2UpOiBOZXcgZnVuY3Rpb24uCiAgICAgICAgKHN0ZWFsX2RlbGF5X2xpc3RfZnJvbV97dGFyZ2V0LGZhbGx0aHJvdWdofSk6IENhbGwgaXQgYW5kIGFsc28KICAgICAgICByZWZpbmUgdGVzdHMgZm9yIHdoZW4gd2UgbWF5IGFubnVsIGlmIGFscmVhZHkgZmlsbGVkIGEgc2xvdC4KICAgICAgICAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IExpa2V3aXNlLgogICAgICAgIChkZWxldGVfZnJvbV9kZWxheV9zbG90KTogUmV0dXJuIG5ld2x5LWNyZWF0ZWQgdGhyZWFkLgogICAgICAgICh0cnlfbWVyZ2VfZGVsYXlfaXNucyk6IFVzZSBpdHMgbmV3IHJldHVybiB2YWx1ZS4KCldlZCBTZXAgMzAgMTg6Mjk6MjYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBVc2UgYSB2YW5pbGxhIGxvb3AgcmV2ZXJzYWwgaWYgdGhlIGJpdiBpcwoJdXNlZCB0byBjb21wdXRlIGEgZ2l2IG9yIGFzIHNvbWUgb3RoZXIgbm9uLWNvdW50aW5nIHVzZS4KCldlZCBTZXAgMzAgMTg6MTk6MjcgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogcmVncy5oIChIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQpOiAgTmV3IG1hY3JvLgoJKiBsb2NhbC1hbGxvYy5jIChmaW5kX2ZyZWVfcmVnKTogVXNlIGl0LgoJKiBnbG9iYWwuYyAoZmluZF9yZWcpOiBMaWtld2lzZS4KCSogdG0udGV4aTogRG9jdW1lbnQgSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVELgoKCSogcmVncy5oIChIQVJEX1JFR05PX0NBTExFUl9TQVZFX01PREUpOiBOZXcgbWFjcm8uCgkqIGNhbGxlci1zYXZlLmMgKGluaXRfY2FsbGVyX3NhdmUpOiBVc2UgaXQuCgkqIHRtLnRleGk6IERvY3VtZW50IEhBUkRfUkVHTk9fQ0FMTEVSX1NBVkVfTU9ERS4KCldlZCBTZXAgMzAgMTI6NTc6MzAgMTk5OCBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PiAgCgoJKiBjb25maWd1cmUuaW46IEFkZCAtLWVuYWJsZS1jcHBsaWIgb3B0aW9uIHdoaWNoIHVzZXMgY3BwbGliCglmb3IgY3BwLCBidXQgZG9lc24ndCBsaW5rIGNwcGxpYiBpbnRvIGNjMS4gIE1ha2UgaGVscCB0ZXh0CgljYXBpdGFsaXphdGlvbiBjb25zaXN0ZW50LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgU2VwIDMwIDEwOjA5OjM5IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBmdW5jdGlvbi5jIChnZW5fbWVtX2FkZHJlc3NvZik6IElmIHRoZSBhZGRyZXNzIFJFRyBpcwoJUkVHX1VTRVJWQVJfUCBtYWtlIHRoZSBuZXcgUkVHIGJlIHNvIGFsc28uCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQXBwbHkgRGVNb3JnYW4ncyBsYXdzIGFuZCBhZGQgZG9jdW1lbnRhdGlvbgoJaW4gYW4gYXR0ZW1wdCB0byBjbGFyaWZ5IHNsaWdodGx5LgoKV2VkIFNlcCAzMCAwOTo1Nzo0MCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogSGFuZGxlIENPTVBPTkVOVF9SRUYsIEJJVF9GSUVMRF9SRUYgQVJSQVlfUkVGCglhbmQgSU5ESVJFQ1RfUkVGIGluIGNvZGUgdG8gY2hlY2sgTUFYX0lOVEVHRVJfQ09NUFVUQVRJT05fTU9ERS4KCldlZCBTZXAgMzAgMTA6MTM6MzkgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgogICAgICAgICogdG9wbGV2LmM6ICBGaXggbGFzdCBwYXRjaC4KClR1ZSBTZXAgMjkgMjA6MDM6MTggMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbG9vcC5jIChnZXRfY29uZGl0aW9uKTogRml4IHR5cG8gaW4gTWF5IDkgY2hhbmdlLgoKVHVlIFNlcCAyOSAxMToxMTozOCBFRFQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogaW52b2tlLnRleGkgKC1mZXhjZXB0aW9ucyk6IE1lcmdlIDIgZGlmZmVyZW50IGRlc2NyaXB0aW9ucy4KCk1vbiBTZXAgMjggMjI6MDg6NTIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogU3BlbGxpbmcgY29ycmVjdGlvbnMuCgpNb24gU2VwIDI4IDE5OjQxOjI0IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluOiBuZXcgZmxhZ3MgLS13aXRoLWxkIGFuZCAtLXdpdGgtYXMsIGVxdWl2YWxlbnQKCXRvIHNldHRpbmcgTEQgYW5kIEFTIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRlc3Qgd2hldGhlcgoJc3BlY2lmaWVkIGFyZ3VtZW50cyBhcmUgR05VIGNvbW1hbmRzLCBhbmQgcmVwb3J0IHRoZW0gd2l0aAoJY2hlY2tpbmcgbWVzc2FnZXMuICBVc2UgdGhlIHNwZWNpZmllZCBBUyBmb3IgY29uZmlndXJlCgl0ZXN0cyB0b28uCgkqIGNvbmZpZ3VyZTogZGl0dG8KCSogYWNjb25maWcuaDogYWRkIERFRkFVTFRfQVNTRU1CTEVSIGFuZCBERUZBVUxUX0xJTktFUgoJKiBjb25maWcuaW46IGRpdHRvCgkqIGdjYy5jIChmaW5kX2FfZmlsZSk6IHdoZW4gbG9va2luZyBmb3IgYGFzJyBhbmQgYGxkJywgcmV0dXJuCgl0aGUgREVGQVVMVCBwcm9ncmFtIGlmIGl0IGV4aXN0cwoJKiBjb2xsZWN0Mi5jIChtYWluKTogdXNlIERFRkFVTFRfTElOS0VSIGlmIGl0IGV4aXN0cwoKCSogZ2NjLmMgKGZpbmRfYV9maWxlKTogdGhlIHRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBhIGZ1bGwKCXBhdGhuYW1lIHdhcyByZXZlcnNlZAoKTW9uIFNlcCAyOCAxNzozNDozNSAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogT25seSBkZWZpbmUgb24gRUxGIHN5c3RlbXMuCgkqIHJzNjAwMC5jIChvdXRwdXRfbWlfdGh1bmspOiBBbHdheXMgdXNlIGEgcmF3IGp1bXAgZm9yIG5vdy4KCk1vbiBTZXAgMjggMTQ6MjQ6MDMgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHRyZWUuaCAoVFlQRV9CSU5GTyk6IERvY3VtZW50LgoKTW9uIFNlcCAyOCAxMjo1NTo0OSAxOTk4ICAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBpMzg2LWNvZmYuaCAoZGJ4Y29mZi5oKTogQWRkZWQuCgpNb24gU2VwIDI4IDEyOjUxOjAwIDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKICAgICAgICAqIHRvcGxldi5jOiAgZml4IGJhZCBwYXRjaCBhcm91bmQgZmxhZ19kYXRhX3NlY3Rpb25zLgoKTW9uIFNlcCAyOCAxMDozMjoyOCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBVc2UgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzIGFuZCAKIAlyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcyB3aGVuIHNldHRpbmcKCWNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzLiAgKFBhdGNoIGdlbmVyYXRlZCBieSBKaW0gV2lsc29uOgoJd2lsc29uQGN5Z251cy5jb20pLgoKTW9uIFNlcCAyOCAwNzo0MzozNCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogVGlnaHRlbiBzbGlnaHRseSBmb3IgRlVOQ1RJT05fVFlQRXMKCWFuZCBBUlJBWV9UWVBFcy4gIFRpZHkgdXAuICBJbXByb3ZlIHN1cHBvcnQgZm9yIHR5cGUtcHVubmluZy4gCgkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBBZGQgYWxpYXNfc2V0IHBhcmFtZXRlci4gIFNldCB0aGUKCU1FTV9BTElBU19TRVQgYWNjb3JkaW5nbHksIGlmIHRoZSB0YXJnZXQgaXMgYSBNRU0uCgkoZXhwYW5kX2Fzc2lnbm1lbnQpOiBVc2UgaXQuCgkoc3RvcmVfY29uc3RydWN0b3JfZmllbGQpOiBQYXNzIDAuCgkoZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KCk1vbiBTZXAgMjggMDc6NTQ6MDMgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CiAKICAgICAgICAqIGZsYWdzLmg6ICBBZGQgZmxhZ19kYXRhX3NlY3Rpb25zLgogICAgICAgICogdG9wbGV2LmM6ICBBZGQgb3B0aW9uIC1mZGF0YS1zZWN0aW9ucy4gIEFkZCBmbGFnX2RhdGFfc2VjdGlvbnMuCiAgICAgICAgKGNvbXBpbGVfZmlsZSk6ICBFcnJvciBpZiBmbGFnX2RhdGFfc2VjdGlvbnMgbm90IHN1cHBvcnRlZC4KICAgICAgICAqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6ICBIYW5kbGUgZmxhZ19kYXRhX3NlY3Rpb25zLgogICAgICAgICogY29uZmlnL3N2cjQuaDogIE1vZGlmeSBwcmVmaXhlcyBmb3IgVU5JUVVFX1NFQ1RJT05fTkFNRS4KICAgICAgICAqIGNvbmZpZy9taXBzL2VsZi5oOiAgTGlrZXdpc2UuCiAgICAgICAgKiBjb25maWcvbWlwcy9lbGY2NC5oOiAgTGlrZXdpc2UuCiAgICAgICAgKiBpbnZva2UudGV4aTogIERlc2NyaWJlIC1mZGF0YS1zZWN0aW9ucy4KIApNb24gU2VwIDI4IDA0OjE1OjQ0IDE5OTggIENyYWlnIEJ1cmxleSAgPGJ1cmxleUBtZWxhbmdlLmdudS5vcmc+CgoJKiBpbnZva2UudGV4aSAoLWZmbG9hdC1zdG9yZSk6IENsYXJpZnkgdGhhdCB0aGlzIG9wdGlvbgoJZG9lcyBub3QgYWZmZWN0IGludGVybWVkaWF0ZSByZXN1bHRzIC0tIG9ubHkgdmFyaWFibGVzLgoKTW9uIFNlcCAyOCAwNDoxMTozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjcHAudGV4aTogVXBkYXRlIGZvciBGb3J0cmFuIHVzYWdlIGZyb20gQ3JhaWcuCgpGcmkgU2VwIDI1IDIyOjA5OjQ3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChmdW5jdGlvbl9hcmdfYm91bmRhcnkpOiBSZXZlcnQgYWNjaWRlbnRhbCBjaGFuZ2Ugb24KCVNlcHRlbWJlciAxOC4KCkZyaSBTZXAgMjUgMjA6MzA6MDAgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IERlY2xhcmUsIGNhbGwgb3V0cHV0X21pX3RodW5rLgoJKG91dHB1dF9taV90aHVuayk6IERlY2xhcmUuCgoJKiByczYwMDAuYyAob3V0cHV0X21pX3RodW5rKTogRnVuY3Rpb24gdG8gY3JlYXRlIHRodW5rcyBmb3IgTUkuCgkob3V0cHV0X2Z1bmN0aW9uX3Byb2ZpbGVyKTogVXNlIHIxMiBmb3IgdGVtcCwgaW5zdGVhZCBvZiByMTEgc28KCXRoYXQgd2UgcHJlc2VydmUgdGhlIHN0YXRpYyBjaGFpbiByZWdpc3Rlci4KCQpGcmkgU2VwIDI1IDE0OjE4OjMzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHNkYm91dC5jIChzZGJvdXRfb25lX3R5cGUpOiBEb24ndCBsb29rIGF0IFRZUEVfQklORk8gZmllbGQgb2YgZW51bXMuCgpGcmkgU2VwIDI1IDE5OjMwOjE5IDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmMgKGdlbl9zaGxfc2V4dCk6IEZpeCBjYXNlIDUuCgpGcmkgU2VwIDI1IDE3OjM1OjIzIDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmUpOiBSZS1hZGQgbGluZSB0aGF0IGdvdCBhY2NpZGVudGFsbHkgbG9zdC4KCkZyaSBTZXAgMjUgMTA6NDM6NDcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IEZvciAhX19TVERDX18gY2FzZSwgYXZvaWQKIAlhY2Nlc3NpbmcgdmFyaWFibGVzIHVudGlsIHRoZXkgYXJlIGluaXRpYWxpemVkIHZpYSB2YV9hcmcoKS4KClRodSBTZXAgMjQgMjI6MTI6MTYgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lKTogSW5pdGlhbGl6ZSBzZXQgYmVmb3JlIHVzaW5nLgoKVGh1IFNlcCAyNCAxODo1MzoyMCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZGJvdXQuYyAoc2Rib3V0X2ZpZWxkX3R5cGVzKTogRG9uJ3QgZW1pdCB0aGUgdHlwZXMgb2YgZmllbGRzIHdlCgl3b24ndCBiZSBlbWl0dGluZy4KClRodSBTZXAgMjQgMTc6MDU6MzAgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChpbnN2KTogQWRkIGNvbW1lbnQuICBJbiBDT05TVF9JTlQgY2FzZSwgYW5kCglvcGVyYW5kMyB3aXRoIG1hc2sgYmVmb3JlIHVzaW5nIGl0LiAgUGF0Y2ggcHJvdmlkZWQgYnkgSmltIFdpbHNvbi4KClRodSBTZXAgMjQgMTU6MDg6MDggMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoZnVuY3Rpb25fdmFsdWUpOiBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mCglQUk9NT1RFX01PREUgZm9yIEFSQ0g2NC4KCShlbGlnaWJsZV9mb3JfZXBpbG9ndWVfZGVsYXkpOiBBbGxvdyBESW1vZGUgb3BlcmF0aW9ucyBpbiBkZWxheQoJc2xvdCBvZiBhIHJldHVybiBmb3IgQVJDSDY0LgoKVGh1IFNlcCAyNCAyMjoxNzo1NCAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAoc3FydHNmMik6IEZpeCBtb2RlIG9mIHNxcnQuCgpUaHUgU2VwIDI0IDIxOjQ4OjUxIDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogQWxzbyB0cnkgaW5oZXJpdGFuY2Ugd2hlbgoJcmVsb2FkX2luIGlzIGEgc3RhY2sgc2xvdCBvZiBhIHBzZXVkbywgZXZlbiBpZiB3ZSBhbHJlYWR5IGdvdCBhCglyZWxvYWQgcmVnLgoKVGh1IFNlcCAyNCAyMToyMjozOSAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2VfcmVnc18xKTogUmVuYW1lZCBmcm9tIHJlbG9hZF9jc2VfcmVncy4KCShyZWxvYWRfY3NlX3JlZ3MpOiBOZXcgZnVuY3Rpb24gYm9keTogY2FsbCByZWxvYWRfY3NlX3JlZ3NfMSwKCXJlbG9hZF9jb21iaW5lLCByZWxvYWRfY3NlX21vdmUyYWRkLgoJV2hlbiBkb2luZyBleHBlbnNpdmVfb3B0aW1pemF0aW9ucywgY2FsbCByZWxvYWRfY3NlX3JlZ3NfMSBhCglzZWNvbmQgdGltZSBhZnRlciByZWxvYWRfY3NlX21vdmUyYWRkLgoJKHJlbG9hZF9jb21iaW5lLCByZWxvYWRfY29tYmluZV9ub3RlX3N0b3JlKTogTmV3IGZ1bmN0aW9ucy4KCShyZWxvYWRfY29tYmluZV9ub3RlX3VzZSk6IE5ldyBmdW5jdGlvbi4KCShyZWxvYWRfY3NlX21vdmUyYWRkLCBtb3ZlMmFkZF9ub3RlX3N0b3JlKTogTmV3IGZ1bmN0aW9ucy4KClRodSBTZXAgMjQgMTg6NDg6NDMgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEluIGNvZGUgdG8gcHJvbW90ZSBSRUxPQURfRk9SX1hfQUREUl9BRERSCglyZWxvYWRzIHRvIFJFTE9BRF9GT1JfWF9BRERSRVNTIHJlbG9hZHMsIHRlc3QgZm9yIHJlbG9hZCBzaGFyaW5nLgoKCVByb3Blcmx5IGtlZXAgdHJhY2sgb2YgZmlyc3QgUkVMT0FEX0ZPUl9YX0FERFJFU1MgYWxzbyBmb3IKCW1vcmUgdGhhbiAzIHN1Y2ggcmVsb2Fkcy4KCglJZiB0aGVyZSBpcyBub3QgbW9yZSB0aGFuIG9uZSBSRUxPQURfRk9SX1hfQUREUkVTUywgZG9uJ3QgY2hhbmdlCglSRUxPQURfRk9SX1hfQUREUl9BRERSIHJlbG9hZC4KClRodSBTZXAgMjQgMTc6NDU6NTUgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IFdoZW4gaW5pdGlhbGl6aW5nIGEgZmllbGQgdGhhdCBpcyBzbWFsbGVyCgl0aGFuIGEgd29yZCwgYXQgdGhlIHN0YXJ0IG9mIGEgd29yZCwgdHJ5IHRvIHdpZGVuIGl0IHRvIGEgZnVsbCB3b3JkLgoKCSogY3NlLmMgKGNzZV9pbnNuKTogV2hlbiB3ZSBhcmUgYWJvdXQgdG8gY2hhbmdlIGEgcmVnaXN0ZXIsCglyZW1vdmUgYW55IGludmFsaWQgcmVmZXJlbmNlcyB0byBpdC4KCgkocmVtb3ZlX2ludmFsaWRfc3VicmVnX3JlZnMpOiBOZXcgZnVuY3Rpb24uCgkobWVudGlvbl9yZWdzKTogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIFNVQlJFR3MuCgkoaW5zZXJ0X3JlZ3MpOiBEb24ndCBzdHJpcCBTVUJSRUcgZm9yIGNhbGwgdG8gbWVudGlvbl9yZWdzLgoJQ2hlY2sgaWYgcmVnX3RpY2sgbmVlZHMgdG8gYmUgYnVtcGVkIHVwIGJlZm9yZSB0aGF0IGNhbGwuCgkobG9va3VwX2FzX2Z1bmN0aW9uKTogVHJ5IHRvIG1hdGNoIGtub3duIHdvcmRfbW9kZSBjb25zdGFudHMgd2hlbgoJbG9va2luZyBmb3IgYSBub3Jyb3dlciBjb25zdGFudC4KCShjYW5vbl9oYXNoKTogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIFNVQlJFR3MuCgpUaHUgU2VwIDI0IDAxOjM1OjM0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IERlZmluZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjNjRfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogSWYgdGhhdCBpcwoJZGVmaW5lZCwgZW1pdCBsaWJjYWxsIHRvIF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2suICBBbHNvIGZpeCBvcGNvZGVzCglhbmQgb2Zmc2V0cyBpbiBhY3R1YWwgc3RhY2sgdHJhbXBvbGluZSBjb2RlIHNvIHRoZXkgbWF0Y2ggdGhlCgljb21tZW50YXJ5IGFuZCBhY3R1YWxseSB3b3JrLgoKVGh1IFNlcCAyNCAwMToxOTowMiAxOTk4ICBKYWt1YiBKZWxpbmVrICA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZ3VyZS5pbiAoc3BhcmN2OS0qLXNvbGFyaXMpOiBVc2UgdC1zb2wyIGFuZCB0LXNvbDItNjQgZm9yCgl0bWFrZV9maWxlLgoJKHNwYXJjNjQtKi1saW51eCk6IFVzZSB0LWxpbnV4IGFuZCBzcGFyYy90LWxpbnV4NjQgZm9yCgl0bWFrZV9maWxlLiAgU2V0IGV4dHJhX3BhcnRzIHRvIG5lZWRlZCBjcnQgb2JqZWN0cy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBjb25maWcvc3BhcmMvbGludXg2NC5oIChTUEFSQ19CSV9BUkNIKTogRGVmaW5lLgoJKFRBUkdFVF9ERUZBVUxUKTogU2V0IGlmIGRlZmF1bHQgaXMgdjkgb3IgdWx0cmEuCgkoU1RBUlRGSUxFX1NQRUMzMiwgU1RBUlRGSUxFX1NQRUM2NCk6IE5ldyBtYWNyb3MuCgkoU1RBUlRGSUxFX1NQRUMpOiBTZXQgdG8gdGhvc2UgdXBvbiBTUEFSQ19CSV9BUkNILgoJKEVOREZJTEVfU1BFQzMyLCBFTkRGSUxFX1NQRUM2NCwgRU5ERklMRV9TUEVDKTogTGlrZXdpc2UuCgkoU1VCVEFSR0VUX0VYVFJBX1NQRUNTLCBMSU5LX0FSQ0gzMl9TUEVDLCBMSU5LX0FSQ0g2NF9TUEVDLAoJTElOS19TUEVDLCBMSU5LX0FSQ0hfU1BFQyk6IExpa2V3aXNlLgoJKFRBUkdFVF9WRVJTSU9OKTogRGVmaW5lLgoJKE1VTFRJTElCX0RFRkFVTFQpOiBEZWZpbmUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChDUFBfQ1BVX0RFRkFVTFRfU1BFQyk6IFJlYXJyYW5nZSBzbyB0aGF0CgltaXhlZCAzMi82NCBiaXQgY29tcGlsZXJzIGJhc2VkIHVwb24gU1BBUkNfQklfQVJDSCB3b3JrLgoJKENQUF9DUFU2NF9ERUZBVUxUX1NQRUMsIENQUF9DUFUzMl9ERUZBVUxUX1NFQyk6IERlZmluZQoJYXBwcm9wcmlhdGVseS4KCShUQVJHRVRfU1dJVENIRVMpOiBBbGxvdyBwdHIzMi9wdHI2NCBvcHRpb25zIG9uY2UgbW9yZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX292ZXJyaWRlX29wdGlvbnMpOiBJZiBhcmNoIGFuZAoJcG9pbnRlciBzaXplIGRpc2FncmVlLCBlbWl0IGRpYWdub3N0aWMgYW5kIGZpeCBpdCB1cC4gIElmCglTUEFSQ19CSV9BUkNIIGFuZCBUQVJHRVRfQVJDSDMyLCBzZXQgY21vZGVsIHRvIENNXzMyLiAgVHVybiBvZmYKCVY4UExVUyBpbiA2NC1iaXQgbW9kZS4KCSogY29uZmlnL3NwYXJjL3QtbGludXg2NDogTmV3IGZpbGUuCgkqIGNvbmZpZy9zcGFyYy90LXNvbDItNjQ6IE5ldyBmaWxlLgoJKiBjb25maWcvc3BhcmMvdC1zb2wyOiBBZGp1c3QgYnVpbGQgcnVsZXMgdG8gdXNlIE1VTFRJTElCX0NGTEFHUy4KCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKFNQQVJDX0JJX0FSQ0gpOiBEZWZpbmUuCgkoQVNNX0NQVTMyX0RFRkFVTFRfU1BFQywgQVNNX0NQVTY0X0RFRkFVTFRfU1BFQywKCUNQUF9DUFUzMl9ERUZBVUxUX1NQRUMsIENQUF9DUFU2NF9ERUZBVUxUX1NQRUMpOiBEZWZpbmUuCgkoQVNNX1NQRUMsIENQUF9DUFVfU1BFQyk6IFNldCBhcHByb3ByaWF0ZWx5IGJhc2VkIHVwb24gdGhvc2UuCgkoU1RBUlRGSUxFX1NQRUMzMiwgU1RBUlRGSUxFX1NQRUMzMiwgU1RBUlRGSUxFX0FSQ0hfU1BFQyk6CglEZWZpbmUuCgkoU1RBUlRGSUxFX1NQRUMpOiBTZXQgYXBwcm9yaWF0ZWx5IGJhc2VkIHVwb24gdGhvc2UuCgkoQ1BQX0NQVV9ERUZBVUxUX1NQRUMsIEFTTV9DUFVfREVGQVVMVF9TUEVDKTogU2V0IGJhc2VkIHVwb24KCWRpc3Bvc2l0aW9uIG9mIERFRkFVTFRfQVJDSDMyX1AuCgkoTElOS19BUkNIMzJfU1BFQywgTElOS19BUkNINjRfU1BFQyk6IERlZmluZS4KCShMSU5LX0FSQ0hfU1BFQywgTElOS19BUkNIX0RFRkFVTFRfU1BFQyk6IFNldCBiYXNlZCB1cG9uIHRob3NlLgoJKENDMV9TUEVDLCBNVUxUSUxJQl9ERUZBVUxUUyk6IFNldCBiYXNlZCB1cG9uIERFRkFVTFRfQVJDSDMyX1AuCgkoTURfU1RBUlRGSUxFX1BSRUZJWCk6IFNldCBjb3JyZWN0bHkgYmFzZWQgdXBvbiBTUEFSQ19CSV9BUkNILgoJKiBjb25maWcvc3BhcmMveG0tc3lzdjQtNjQuaCAoSE9TVF9CSVRTX1BFUl9MT05HKTogT25seSBzZXQgb24KCWFyY2g2NC92OS4KCSogY29uZmlnL3NwYXJjL3htLXNwNjQuaCAoSE9TVF9CSVRTX1BFUl9MT05HKTogTGlrZXdpc2UuCgkKV2VkIFNlcCAyMyAyMjozMjozMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcnRsLmggKGluaXRfdmlydHVhbF9yZWdzKTogTmV3IGZ1bmN0aW9uLgoJKiBlbWl0LXJ0bC5jIChpbml0X3ZpcnR1YWxfcmVncyk6IERlZmluZS4KCShpbnNuX2VtaXQpOiBVc2UgaXQuCgkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6IExpa2V3aXNlLgoKV2VkIFNlcCAyMyAxNjoyMjowMSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5oOiBUaGUgZm9sbG93aW5nIHBhdGNoZXMgd2VyZSBtYWRlIGJ5IEppbSBXaWxzb246CgkoZW51bSByZWdfY2xhc3MpOiBBZGQgTk9OQVJHX0xPX1JFR1Mgc3VwcG9ydC4KCShSRUdfQ0xBU1NfTkFNRVMsIFJFR19DTEFTU19DT05URU5UUywgUkVHTk9fUkVHX0NMQVNTLAoJUFJFRkVSUkVEX1JFTE9BRF9DTEFTUywgU0VDT05EQVJZX1JFTE9BRF9DTEFTUyk6IExpa2V3aXNlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERpc2FibGUgUkVHK1JFRyBhZGRyZXNzZXMgYmVmb3JlIHJlbG9hZAoJY29tcGxldGVzLiAgUmUtZW5hYmxlIEhJbW9kZSBSRUcrT0ZGU0VUIGFkZHJlc3Nlcy4KCShMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogRGVmaW5lLgoKCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkKTogQWRkIGNvbW1lbnQgZnJvbSBKaW0gV2lsc29uLiAKCldlZCBTZXAgMjMgMTM6MjY6MDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGdldF9hbGlnbmVkX21lbSk6IFJldmVydCBTZXAgMjAgY2hhbmdlLgogICAgICAgIChhbHBoYV9zZXRfbWVtZmxhZ3MsIGFscGhhX3NldF9tZW1mbGFnc18xKTogTGlrZXdpc2UuCgkoYWxwaGFfYWxpZ25faW5zbnMpOiBQcm9wZXJseSBjYWxjdWxhdGUgaW5pdGlhbCBvZmZzZXQgd3J0IG1heF9hbGlnbi4KCldlZCBTZXAgMjMgMTA6NDU6NDQgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5jIChmaW5kX2JhcnJpZXIpOiBSZXZlcnQgY2hhbmdlIG9mIEFwciAyMy4gIEhhbmRsZSB0YWJsZQoJanVtcHMgYXMgYSBzaW5nbGUgZW50aXR5LCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzaXplIG9mIHRoZQoJdGFibGUuCgpUdWUgU2VwIDIyIDE1OjEzOjM0IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKFNXSVRDSF9FWFBSKTogTmV3IHRyZWUgbm9kZSBkZWZpbml0aW9uLgoKTW9uIFNlcCAyMSAyMzo0MDozOCBQRFQgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMjEgMjI6MzE6MTQgUERUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDIxIDIyOjQ4OjA5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGlbMzQ1NjddODYtKi1vcGVuYnNkKiBhbmQgaGFuZGxlIGl0IGxpa2UKCU5ldEJTRC4KCk1vbiBTZXAgMjEgMjI6MDU6MjggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogUmV2ZXJ0IHRoaXMgcGF0Y2guCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEbyBub3QgcmVwbGFjZSBhIHBzZXVkbyB3aXRoCgkoTUVNIChyZWdfZXF1aXZfYWRkcikpIGluIHRoZSBpbml0aWFsaXppbmcgaW5zbiBmb3IgdGhlCglwc2V1ZG8uCgpNb24gU2VwIDIxIDIwOjE5OjQxIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRGlzYWJsZSB0cmFja2luZyBDQyBhY3Jvc3MgYnJhbmNoZXMuCgpNb24gU2VwIDIxIDE3OjE1OjI2IEVEVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleHByLmggKGVoX3J0aW1lX21hdGNoX2xpYmZ1bmMpOiBOZXcgZXh0ZXJuIGRlY2xhcmF0aW9uLgoJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBTZXQgZWhfcnRpbWVfbWF0Y2hfbGliZnVuYy4KCSogZXhjZXB0LmMgKHN0YXJ0X2NhdGNoX2hhbmRsZXIpOiBVc2UgZWhfcnRpbWVfbWF0Y2hfbGliZnVuYy4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogQWx3YXlzIHJldHVybiAwIGlmIHRoZSBtYXRjaGVyIGlzCglOVUxMLiBPbmx5IGluY2x1ZGUgPHN0ZGlvLmg+IGlmIGluaGliaXRfbGliYyBpcyBub3QgZGVmaW5lZC4KCk1vbiBTZXAgMjEgMTQ6MTA6NTEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTa2lwIGNvbXBpbGluZyBhbnl0aGluZyB3aXRoCglERUNMX0VYVEVSTkFMIHNldCwgbm90IGp1c3QgaWYgaXQgaGFzIERFQ0xfSU5MSU5FIGFzIHdlbGwuCgpNb24gU2VwIDIxIDEzOjUxOjA1IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBEZWxldGUgY2hlY2sgZm9yIGluX2xpYmNhbGxfYmxvY2sgd2hlbgoJcHJldl9jb2RlIGlzIGEgQ0FMTF9JTlNOLiAgQ2hhbmdlIGNoZWNrIGZvciBSRUdfUkVUVkFMIG5vdGUgdG8KCXVzZSBpbl9saWJjYWxsX2Jsb2NrLgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBEZWxldGUgY2hlY2sgZm9yIGluX2xpYmNhbGxfYmxvY2sgd2hlbiBwcmV2X2NvZGUKCWlzIGEgQ0FMTF9JTlNOLiAgSWYgQ0FMTF9JTlNOIGFuZCBpbl9saWJjYWxsX2Jsb2NrLCB0aGVuIGNoYW5nZSBjb2RlCgl0byBJTlNOLgoKTW9uIFNlcCAyMSAxNDowMjoyMyAxOTk4CgoJKiBpMzg2Lmg6IChUQVJHRVRfU1dJVENIRVMpIEltcHJvdmUgZG9jIGZvciBhbGlnbi1kb3VibGUuICBGaXgKCXR5cG8gaW4gbm8tZmFuY3ktbWF0aC0zODcgZGVzY3JpcHRpb24uCgpNb24gU2VwIDIxIDA5OjI3OjE4IFBEVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAyMSAwOToyNDo0OSAxOTk4ICAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBpMzg2LWNvZmYuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogQWRkZWQuCgpNb24gU2VwIDIxIDA5OjE0OjQ5IDE5OTggICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBpMzg2Lmg6IChUQVJHRVRfU1dJVENIRVMpIEFkZCBkZXNjcmlwdGlvbiBmaWVsZHMgZm9yIGZsYWdzIAoJZG9jdW1lbnRlZCBpbiBpbnN0YWxsLnRleGkuCgkoVEFSR0VUX09QVElPTlMpIExpa2V3aXNlLgoKTW9uIFNlcCAyMSAwMTozOTowMyBQRFQgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMjEgMDE6NTM6MDUgMTk5OCAgRmVsaXggTGVlICA8ZmxlZUBjeWdudXMuY29tPgoKCSogYy1sZXguYyAoaW5pdF9sZXgpOiBVc2UgZ2V0ZW52ICgiTEFORyIpLCBub3QgR0VUX0VOVklST05NRU5UICgpLgoJKiBjY2NwLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGNjY3AuYywgY29sbGVjdDIuYywgY3BwbGliLmMsIGdjYy5jLCBjb25maWcvaTM4Ni94bS1jeWd3aW4zMi5oOgoJUmVuYW1lIEdFVF9FTlZJUk9OTUVOVCB0byBHRVRfRU5WX1BBVEhfTElTVCwgYW5kIGZpeCBzb21lCgltYWNyby11c2UgYnVncy4KCk1vbiBTZXAgMjEgMDA6NTI6MTIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTElCUyk6ICBMaW5rIGluIGxpYmliZXJ0eS5hLgoJKiBjLWNvbW1vbi5jLCBnY2MuYywgdG9wbGV2LmM6ICBSZXBsYWNlIChzb21lKSBiY29weSBjYWxscyBieSBtZW1jcHkuCgpTdW4gU2VwIDIwIDIzOjI4OjExIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQWNjZXB0IGEgbmV3IGFyZyBmb3IgdGhlIGJiLiAgVXNlCglpdCB0byB1cGRhdGUgYmIgYm91bmRhcmllcy4gIFVwZGF0ZSBjYWxsZXIuCgkqIGZ1bmN0aW9uLmMgKHJlcG9zaXRpb25fcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX25vdGVzKTogVXBkYXRlCgliYiBib3VuZGFyaWVzIHdydCB0aGUgbW92ZWQgbm90ZS4KClN1biBTZXAgMjAgMjA6NTc6MDIgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoJCgkqIGNvbmZpZ3VyZS5pbiAoaSo4Ni0qLXN5c3Y1Kik6IFVzZSBmaXhpbmMuc3ZyNCB0byBwYXRjaCBieXRlb3JkZXIKCXByb2JsZW1zLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgpTdW4gU2VwIDIwIDE5OjAxOjUxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9zcl9hbGlhc19zZXQpOiBOZXcgdmFyaWFibGUuCgkob3ZlcnJpZGVfb3B0aW9ucyk6IFNldCBpdC4KCShhbHBoYV9leHBhbmRfcHJvbG9ndWUsIGFscGhhX2V4cGFuZF9lcGlsb2d1ZSk6IFVzZSBpdC4KCShtb2RlX21hc2tfb3BlcmFuZCk6IEZpeCBzaWduZWQtdW5zaWduZWQgY29tcGFyaXNpb24gd2FybmluZy4KCShhbHBoYV9leHBhbmRfYmxvY2tfbW92ZSk6IExpa2V3aXNlLgoJKHByaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCShnZXRfYWxpZ25lZF9tZW0pOiBVc2UgY2hhbmdlX2FkZHJlc3MuCgkoYWxwaGFfc2V0X21lbWZsYWdzLCBhbHBoYV9zZXRfbWVtZmxhZ3NfMSk6IFNldCB0aGUgYWxpYXMgc2V0LgoJKGFscGhhZXY0X2luc25fcGlwZSwgYWxwaGFldjRfbmV4dF9ncm91cCk6IE5ldyBmdW5jdGlvbnMuCgkoYWxwaGFldjRfbmV4dF9ub3AsIGFscGhhZXY1X25leHRfbm9wKTogTmV3IGZ1bmN0aW9ucy4KCShhbHBoYV9hbGlnbl9pbnNucyk6IFJlbWFkZSBmcm9tIG9sZCBhbHBoYWV2NV9hbGlnbl9pbnNucwoJdG8gaGFuZGxlIG11bHRpcGxlIHByb2Nlc3NvcnMuCgkoYWxwaGFfcmVvcmcpOiBDYWxsIGFscGhhX2FsaWduX2luc25zIGZvciBib3RoIGV2NCBhbmQgZXY1LgoJKiBvdXRwdXQuaCAobGFiZWxfdG9fYWxpZ25tZW50KTogUHJvdG90eXBlLgoKICAgICAgICAqIHRyZWUuYyAobmV3X2FsaWFzX3NldCk6IE5ldyBmdW5jdGlvbi4KICAgICAgICAqIHRyZWUuaCAobmV3X2FsaWFzX3NldCk6IERlY2xhcmUgaXQuCiAgICAgICAgKiBjLWNvbW1vbi5jIChjX2dldF9hbGlhc19zZXQpOiBVc2UgaXQuCgpTdW4gU2VwIDIwIDEyOjM1OjU1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBZZXQgYW5vdGhlciBDT05EX0VYUFIgYnVnOiB3aGVuIGZvbGRpbmcgCgl0byBhbiBBQlMgZXhwciwgY29udmVydCBhbiB1bnNpZ25lZCBpbnB1dCB0byBzaWduZWQuCgkKU3VuIFNlcCAyMCAxMjoxNDo0NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBGaXggYW5vdGhlciB0eXBlIGluIENPTkRfRVhQUiBoYW5kbGluZyBjb2RlLgoKMTk5OC0wOS0yMCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlndXJlLmluOiBBZGQgc3VwcG9ydCBmb3IgYzR4IHRhcmdldHMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBTZXAgMjAgMDA6MDA6NTEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBJZiBhbiBpbnNuIGlzIGEgY2MwIHVzZXIsIG9ubHkKICAgICAgICBkZWxldGUgaXQgaWYgd2UgY2FuIGFsc28gZGVsZXRlIHRoZSBjYzAgc2V0dGVyLgoKU3VuIFNlcCAyMCAwMDoyMjoyMyAxOTk4ICBNaWNoYWVsIFRpZW1hbm4gIDxtaWNoYWVsQGltcGFjdC50aWVtYW5uLm9yZz4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEZpeCB0eXBvIGluIENPTkRfRVhQUiBoYW5kbGluZyBjb2RlLgoJKGludmVydF90cnV0aHZhbHVlKTogRW5hYmxlIHRydXRodmFsdWUgaW52ZXJzaW9uIGZvcgoJZmxvYXRpbmctcG9pbnQgb3BlcmFuZHMgaWYgLWZmYXN0LW1hdGguCgpTYXQgU2VwIDE5IDIzOjU4OjA3IDE5OTggIE1lbGlzc2EgTydOZWlsbCA8b25laWxsQGNzLnNmdS5jYT4KCQkJIAoJKiBjb25maWd1cmUuaW46IERpc2FibGUgY29sbGVjdDIgZm9yIG5leHRzdGVwLiAgSW5zdGVhZCB1c2UKCWNydGJlZ2luL2NydGVuZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBjb25maWcvbmV4dHN0ZXAuaCAoU1RBUlRGSUxFX1NQRUMpOiBBZGQgY3J0YmVnaW4uCgkoRU5ERklMRV9TUEVDKTogRGVmaW5lLgoJKE9CSkVDVF9GT1JNQVRfTUFDSE8pOiBEZWZpbmUuCgkoRUhfRlJBTUVfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCgkqIGNydHN0dWZmLmM6IEhhbmRsZSBNQUNITy4KClN1biBTZXAgMjAgMDA6MjQ6MjQgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlnL2kzODYvc2NvNS5oIChUQVJHRVRfTUVNX0ZVTkNUSU9OUyk6ICBEZWZpbmUuCgoxOTk4LTA5LTE5ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgoKCSogZnAtYml0LmMgKHBhY2tfZCk6IERvIG5vdCBjbGVhciBTSUdOIHdoZW4gZnJhY3Rpb24gaXMgMC4KCShfZnBhZGRfcGFydHMpOiBHZXQgc2lnbiByaWdodCBmb3IgMC4KCjE5OTgtMDktMTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogQWRkIHN1cHBvcnQgZm9yIEM0eCB0YXJnZXQuCgkqIGdpbmNsdWRlL3N0ZGFyZ3MuaDogTGlrZXdpc2UuCgpTYXQgU2VwIDE5IDEyOjA1OjA5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9yZXR1cm5fYWRkcik6IFNFVCBzaG91bGQgYmUgVk9JRG1vZGUuCgkoYWxwaGFfZW1pdF9zZXRfbG9uZ19jb25zdCk6IFJld3JpdGUgdG8gYmUgY2FsbGFibGUgZnJvbSByZWxvYWQKCWFuZCAzMi1iaXQgaG9zdHMuCgkoYWxwaGFfZXhwYW5kX2VwaWxvZ3VlKTogVXBkYXRlIGZvciBhbHBoYV9lbWl0X3NldF9sb25nX2NvbnN0LgoJKiBhbHBoYS5tZCAobW92ZGkpOiBMaWtld2lzZS4KClNhdCBTZXAgMTkgMDc6MzM6MzYgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5jIChhZGRfY29uc3RhbnQpOiBOZXcgcGFyYW1ldGVyIGFkZHJlc3Nfb25seSwgY2hhbmdlIGNhbGxlci4KCVNldCBpdCBub24temVybyBpZiB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYW4gaXRlbSBpbiB0aGUgcG9vbC4KCShhcm1fcmVvcmcpOiBIYW5kbGUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0aGUgYWRkcmVzcyBvZiBhbiBpdGVtIGluCgl0aGUgcG9vbC4KCgkqIGFybS5jIChiYWRfc2lnbmVkX2J5dGVfb3BlcmFuZCk6IENoZWNrIGJvdGggYXJtcyBvZiBhIHN1bSBpbgoJYSBtZW1vcnkgYWRkcmVzcy4KCSogYXJtLm1kIChzcGxpdHMgZm9yICpleHRlbmRxaWhpX2luc24gYW5kICpleHRlbmRxaXNpX2luc24pOiBIYW5kbGUKCW1lbW9yeSBhZGRyZXNzZXMgdGhhdCBhcmUgbm90IGluIHN0YW5kYXJkIGNhbm9uaWNhbCBmb3JtLgoKU2F0IFNlcCAxOSAwMTowMDozMiAxOTk4ICBNaWNoYWVsIEhheWVzICAobXBoQGVsZWMuY2FudGVyYnVyeS5hYy5ueikKCgkqIFJFQURNRS5DNFg6IE5ldyBmaWxlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGM0eCBwb3J0cy4KCSogZ2luY2x1ZGUvdmEtYzR4Lmg6IE5ldyBmaWxlIGZvciBjNHggdmFyYXJncyBzdXBwb3J0LgoJKiBjb25maWcvYzR4OiBOZXcgZGlyZWN0b3J5IHdpdGggYzR4IHBvcnQgZmlsZXMuCgpGcmkgU2VwIDE4IDIyOjUyOjA1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEbyBub3QgcmVwbGFjZSBhIHBzZXVkbyB3aXRoIAoJKE1FTSAocmVnX2VxdWl2X2FkZHIpKSBpbiB0aGUgaW5pdGlhbGl6aW5nIGluc24gZm9yIHRoZQoJcHNldWRvLgoKRnJpIFNlcCAxOCAyMzo1MDo1NiAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFNldCBiY3RfcCBvbiBzZWNvbmQgY2FsbCB0bwoJbG9vcF9vcHRpbWl6ZS4KCSogbG9vcC5jIChsb29wX29wdGltaXplLCBzY2FuX2xvb3AsIHN0cmVuZ3RoX3JlZHVjZSk6IE5ldyBhcmd1bWVudAoJYmN0X3AuCgkoc3RyZW5ndGhfcmVkdWNlKTogT25seSBjYWxsIGFuYWx5emVfbG9vcF9pdGVyYXRpb25zIGFuZAoJaW5zZXJ0X2JjdCBpZiBiY3RfcCBzZXQuCgkoY2hlY2tfZGJyYV9sb29wKTogRml4IHR5cG8uCgkoaW5zZXJ0X2JjdCk6IFVzZSB3b3JkX21vZGUgaW5zdGVhZCBvZiBTSW1vZGUuCgkoaW5zdHJ1bWVudF9sb29wX2JjdCk6IExpa2V3aXNlLiAgRG8gbm90IGRlbGV0ZSBpdGVyYXRpb24gY291bnQKCWNvbmRpdGlvbiBjb2RlIGdlbmVyYXRpb24gaW5zbi4gIEluaXRpYWxpemUgaXRlcmF0aW9uIGNvdW50IGJlZm9yZQoJbG9vcCBzdGFydC4KCSogcnRsLmggKGxvb3Bfb3B0aW1pemUpOiBVcGRhdGUgcHJvdG90eXBlLgoKCSogZ2luY2x1ZGUvdmEtcHBjLmggKHZhX2FyZyk6IGxvbmdsb25nIHR5cGVzIGluIG92ZXJmbG93IGFyZWEgYXJlCglub3QgZG91Ymxld29yZCBhbGlnbmVkLgoKCSogcnM2MDAwLmMgKG9wdGltaXphdGlvbl9vcHRpb25zKTogTmV3IGZ1bmN0aW9uLgoJKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBPbmx5IGNhbGwgdHJ1ZV9yZWdudW0gZm9yIFBTRVVET19SRUdzLgoJKiByczYwMDAuaCAoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBEZWZpbmUuCgkoUkVHX0FMTE9DX09SREVSKTogQWxsb2NhdGUgaGlnaGVzdCBudW1iZXJlZCBjb25kaXRpb24gcmVnc2l0ZXJzCglmaXJzdDsgY3IxIGNhbiBiZSB1c2VkIGZvciBGUCByZWNvcmQgY29uZGl0aW9uIGluc25zLgoKRnJpIFNlcCAxOCAwOTo0NDo1NSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL20zMnIvbTMyci5oIChtMzJyX2Jsb2NrX2ltbWVkaWF0ZV9vcGVyYW5kKTogQWRkIHRvCglQUkVESUNBVEVfQ09ERVMuCgoJKiBjb25maWcvbTMyci9tMzJyLm1kOiBBZGQgIm1vdnN0cnNpIiBhbmQgIm1vdnN0cnNpX2ludGVybmFsIgoJcGF0dGVybnMuCgoJKiBjb25maWcvbTMyci9tMzJyLmMgKG0zMnJfcHJpbnRfb3BlcmFuZCk6IEFkZCAncycgYW5kICdwJwoJb3BlcmF0b3JzLgoJKGJsb2NrX21vdmVfY2FsbCk6IE5ldyBmdW5jdGlvbjogQ2FsbCBhIGxpYnJhcnkgcm91dGluZSB0byBjb3B5IGEKCWJsb2NrIG9mIG1lbW9yeS4KCShtMzJyX2V4cGFuZF9ibG9ja19tb3ZlKTogTmV3IGZ1bmN0aW9uOiBFeHBhbmQgYSAibW92c3Ryc2kiCglwYXR0ZXJuIGludG8gYSBzZXF1ZW5jZSBvZiBpbnNucy4KCShtMzJyX291dHB1dF9ibG9ja19tb3ZlKTogTmV3IGZ1bmN0aW9uOiBFeHBhbmQgYQoJIm1vdnN0cnNpX2ludGVybmFsIiBwYXR0ZXJuIGludG8gYSBzZXF1ZW5jZSBvZiBhc3NlbWJsZXIgb3Bjb2Rlcy4KCShtMzJyX2Jsb2NrX2ltbWVkaWF0ZV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uOiBSZXR1cm4gdHJ1ZSBpZiB0aGUKCVJUTCBpcyBhbiBpbnRlZ2VyIGNvbnN0YW50LCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTUFYX01PVkVfQllURVMuCgkKVGh1IFNlcCAxNyAxNjo0MjoxNiBFRFQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0YXJ0X2NhdGNoX2hhbmRsZXIpOiBJc3N1ZSAnZmF0YWwnIGluc3RlYWQgb2YgJ2Vycm9yJyBhbmQKCXJlLWFsaWduIHNvbWUgY29kZS4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogZnByaW50ZiBhIHJ1bnRpbWUgZXJyb3IuIFVzZSA8c3RkaW8uaD4uCgpUaHUgU2VwIDE3IDEyOjI0OjMzIDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlZ21vdmUuYyAoY29weV9zcmNfdG9fZGVzdCk6IENoZWNrIHRoYXQgbW9kZXMgbWF0Y2guCgpXZWQgU2VwIDE2IDIyOjEwOjQyIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZy9pMzg2L3NjbzUuaCAoU1VQUE9SVFNfV0VBSyk6IFRydWUgb25seSBpZiB0YXJnZXRpbmcgRUxGLgoKV2VkIFNlcCAxNiAxNToyNDo1NCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogUmVzcGVjdCBhbiBleGlzdGluZyBjbGFzcwoJbmFycm93ZXIgdGhhbiBGTE9BVF9SRUdTLgoKV2VkIFNlcCAxNiAxNzo1MTowMCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNwcGxpYi5jOiByZW1vdmVkIE9MRF9HUExVU1BMVVNfSU5DTFVERV9ESVIKCSogY2NjcC5jOiBkaXR0bwoJKiBNYWtlZmlsZS5pbiAob2xkX2d4eF9pbmNsdWRlX2Rpcik6IHJlbW92ZWQKCldlZCBTZXAgMTYgMTI6Mjk6MjIgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zaC9zaC5oOiBVcGRhdGUgZGVmaW5pdGlvbiBvZiBIQU5ETEVfUFJBR01BIHRvIG1hdGNoCgluZXcgc3BlY2lmaWNhdGlvbi4KCgkqIGNvbmZpZy9zaC9zaC5jIChoYW5kbGVfcHJhZ21hKTogUmVuYW1lIHRvIHNoX2hhbmRsZV9wcmFnbWEoKS4KCShzaF9oYW5kbGVfcHJhZ21hKTogQ2hhbmdlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBtYXRjaCBuZXcKCXNwZWNpZmljYXRpb24gZm9yIEhBTkRMRV9QUkFHTUEuIAoKV2VkIFNlcCAxNiAxMjo0MzoxOSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnZW4tcHJvdG9zLmMgKHBhcnNlX2ZuX3Byb3RvKTogQ2FzdCBhcmd1bWVudCBvZiBJU0FMTlVNIHRvCglgdW5zaWduZWQgY2hhcicuCgkobWFpbik6IE1hcmsgcGFyYW1ldGVyIGBhcmdjJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCglXaGVuIGdlbmVyYXRpbmcgb3V0cHV0LCBpbml0aWFsaXplIG1pc3Npbmcgc3RydWN0IG1lbWJlciB0byB6ZXJvLgoKV2VkIFNlcCAxNiAxNDo0Nzo0MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKGNvcHlfc3JjX3RvX2Rlc3QpOiBEb24ndCBjb3B5IGlmIHRoYXQgcmVxdWlyZXMKCShhKSBuZXcgcmVnaXN0ZXIocykuCgpXZWQgU2VwIDE2IDAxOjI5OjEyIDE5OTggIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogZ2xvYmFsLmMgKHJlZ19hbGxvY25vKTogTm93IHN0YXRpYy4KCSogcmVsb2FkMS5jIChyZWdfYWxsb2Nubyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBUYWtlIG5vIGFyZ3VtZW50cy4gIERvbid0IHRyZWF0IHJlZ3MKCWFsbG9jYXRlZCBieSBnbG9iYWwgZGlmZmVyZW50bHkgdGhhbiB0aG9zZSBhbGxvY2F0ZWQgYnkgbG9jYWwtYWxsb2MuCgpXZWQgU2VwIDE2IDAxOjA5OjAxIDE5OTggIEthbWlsIElza3JhICA8aXNrcmFAc3R1ZGVudC51Y2kuYWdoLmVkdS5wbD4KCgkqIG02OGsvbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBSZXZlcnNlIE5PX0FERFNVQl9RCgljb25kaXRpb24sIGZpeCBmb3JtYXQgc3RyaW5ncy4KCShvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBMaWtld2lzZS4KCgkqIG02OGsvbTY4ay5jOiBEb24ndCBpbmNsdWRlIDxzdGRsaWIuaD4gZGlyZWN0bHkuCgpXZWQgU2VwIDE2IDAwOjMwOjU2IDE5OTggIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CgoJKiBnY3NlLmM6IE5ldyBkZWZpbml0aW9uIE5FVkVSX1NFVCBmb3IgcmVnX2ZpcnN0X3NldCwgcmVnX2xhc3Rfc2V0LAoJbWVtX2ZpcnN0X3NldCwgbWVtX2xhc3Rfc2V0OyBiZWNhdXNlIDAgY2FuIGJlIGEgQ1VJRC4KCShvcHJzX3VuY2hhbmdlZF9wKTogVXNlIG5ldyBkZWZpbml0aW9uLgoJKHJlY29yZF9sYXN0X3JlZ19zZXRfaW5mbyk6IExpa2V3aXNlLgoJKHJlY29yZF9sYXN0X21lbV9zZXRfaW5mbyk6IExpa2V3aXNlLgoJKGNvbXB1dGVfaGFzaF90YWJsZSk6IExpa2V3aXNlLgoKVHVlIFNlcCAxNSAyMjo1OTo1MiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAuYyAob3V0cHV0X2VwaWxvZ3VlKTogSGFuZGxlIENoaWxsLgoKCSogbW4xMDIwMC5oIChBU01fT1VUUFVUX0RXQVJGMl9BRERSX0NPTlNUKTogRGVmaW5lLgoJKiBtbjEwMzAwLmggKEFTTV9PVVRQVVRfRFdBUkYyX0FERFJfQ09OU1QpOiBEZWZpbmUuCgoJKiBjb21iaW5lLmMgKG1ha2VfZXh0cmFjdGlvbik6IElmIG5vIG1vZGUgaXMgc3BlY2lmaWVkIGZvcgoJYW4gb3BlcmFuZCBvZiBpbnN2LCBleHR2LCBvciBleHR6diwgZGVmYXVsdCBpdCB0byB3b3JkX21vZGUuCgkoc2ltcGxpZnlfY29tcGFyaXNvbik6IFNpbWlsYXJseS4KCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IFNpbWlsYXJseS4KCShleHRyYWN0X2JpdF9maWVsZCk6IFNpbWlsYXJseS4KCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZ3NfMSk6IFNpbWlsYXJseS4KCSogcmVjb2cuYyAodmFsaWRhdGVfcmVwbGFjZV9ydHhfMSk6IFNpbWlsYXJseS4KCSogbWlwcy5tZCAoZXh0diwgZXh0enYsIGluc3YgZXhwYW5kZXJzKTogRGVmYXVsdCBtb2RlcyBmb3IgbW9zdAoJb3BlcmFuZHMuICBIYW5kbGUgVEFSR0VUXzY0QklULgoJKG1vdmRpX3VsZCwgbW92ZGlfdXNkKTogTmV3IHBhdHRlcm5zLgoKCSogcGEuYyAoZW1pdF9tb3ZlX3NlcXVlbmNlKTogRG8gbm90IHJlcGxhY2UgYSBwc2V1ZG8gd2l0aCBpdHMKCWVxdWl2YWxlbnQgbWVtb3J5IGxvY2F0aW9uIHVubGVzcyB3ZSBoYXZlIGJlZW4gcHJvdmlkZWQgYSBzY3JhdGNoCglyZWdpc3Rlci4gIFNpbWlsYXJseSBkbyBub3QgY2FsbCBmaW5kX3JlcGxhY2VtZW50IHVubGVzcyBhCglzY3JhdGNoIHJlZ2lzdGVyIGhhcyBiZWVuIHByb3ZpZGVkLgoKVHVlIFNlcCAxNSAxOToyMzowMSAxOTk4ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBpMzg2LmggKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBGb3Igc3RhbmRhcmQgMzg3IGNvbnN0YW50cywKICAgICAgICByZXR1cm4gRkxPQVRfUkVHUy4KClR1ZSBTZXAgMTUgMTk6MDk6MDYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHRyZWUuaCAoQlVJTFRfSU5fQ0FMTEVSX1JFVFVSTl9BRERSRVNTKTogVW51c2VkLiAgS2lsbC4KCShCVUlMVF9JTl9GUCwgQlVJTFRfSU5fU1AsIEJVSUxUX0lOX1NFVF9SRVRVUk5fQUREUl9SRUcpOiBLaWxsLgoJKEJVSUxUX0lOX0VIX1NUVUJfT0xELCBCVUlMVF9JTl9FSF9TVFVCLCBCVUlMVF9JTl9TRVRfRUhfUkVHUyk6IEtpbGwuCgkoQlVJTFRfSU5fRUhfUkVUVVJOLCBCVUlMVF9JTl9EV0FSRl9DRkEpOiBOZXcuCgkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVwZGF0ZSBhY2NvcmRpbmdseS4KCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IExpa2V3aXNlLgoKCSogcnRsLmggKGdsb2JhbF9ydGwpOiBBZGQgY2ZhIGVudHJ5LgoJKHZpcnR1YWxfY2ZhX3J0eCwgVklSVFVBTF9DRkFfUkVHTlVNKTogTmV3LgoJKExBU1RfVklSVFVBTF9SRUdJU1RFUik6IFVwZGF0ZS4KCSogZW1pdC1ydGwuYyAoZ2xvYmFsX3J0bCk6IEFkZCBjZmEgZW50cnkuCgkoaW5pdF9lbWl0KTogSW5pdGlhbGl6ZSBpdC4KCSogZnVuY3Rpb24uYyAoY2ZhX29mZnNldCk6IE5ldy4KCShpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3MpOiBJbml0aWFsaXplIGl0LgoJKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xKTogSW5zdGFudGlhdGUgdmlydHVhbF9jZmFfcnR4LgoJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBDYWxsIGV4cGFuZF9laF9yZXR1cm4uCgkqIHRtLnRleGkgKEFSR19QT0lOVEVSX0NGQV9PRkZTRVQpOiBOZXcuCgoJKiBleGNlcHQuYyAoY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsKTogS2lsbC4KCShjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsKTogTGlrd2lzZTsgdXBkYXRlIGFsbCByZWZlcmVuY2VzLgoJKGV4cGFuZF9idWlsdGluX3NldF9yZXR1cm5fYWRkcl9yZWcpOiBLaWxsLgoJKGV4cGFuZF9idWlsdGluX2VoX3N0dWJfb2xkLCBleHBhbmRfYnVpbHRpbl9laF9zdHViKTogS2lsbC4KCShleHBhbmRfYnVpbHRpbl9zZXRfZWhfcmVncyk6IEtpbGwuCgkoZWhfcmVncyk6IFByb2R1Y2UgYSB0aGlyZCByZWcgZm9yIHRoZSBhY3R1YWwgaGFuZGxlciBhZGRyZXNzLgoJKGVoX3JldHVybl9jb250ZXh0LCBlaF9yZXR1cm5fc3RhY2tfYWRqdXN0KTogTmV3LgoJKGVoX3JldHVybl9oYW5kbGVyLCBlaF9yZXR1cm5fc3R1Yl9sYWJlbCk6IE5ldy4KCShpbml0X2VoX2Zvcl9mdW5jdGlvbik6IEluaXRpYWxpemUgdGhlbS4KCShleHBhbmRfYnVpbHRpbl9laF9yZXR1cm4sIGV4cGFuZF9laF9yZXR1cm4pOiBOZXcuCgkqIGV4Y2VwdC5oOiBVcGRhdGUgcHJvdG90eXBlcy4KCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogVXBkYXRlIHJlZmVyZW5jZXMgdG8gdGhlIHN0dWIgbGFiZWwuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEtpbGwgc3R1YiBsYWJlbCBlbGVtZW50cy4KCgkqIGxpYmdjYzIuYyAoaW5fcmVnX3dpbmRvdyk6IEZvciBSRUdfU0FWRURfUkVHLCBjaGVjayB0aGF0IHRoZQoJcmVnaXN0ZXIgbnVtYmVyIGlzIG9uZSB0aGF0IHdvdWxkIGJlIGluIHRoZSBwcmV2aW91cyB3aW5kb3cuCglQcm92aWRlIGEgZHVtbXkgZGVmaW5pdGlvbiBmb3Igbm9uLXdpbmRvd2VkIHRhcmdldHMuCgkoZ2V0X3JlZ19hZGRyKTogTmV3IGZ1bmN0aW9uLgoJKGdldF9yZWcsIHB1dF9yZWcsIGNvcHlfcmVnKTogVXNlIGl0LgoJKF9fdGhyb3cpOiBSZWx5IG9uIGluX3JlZ193aW5kb3csIG5vdCBJTkNPTUlOR19SRUdOTy4gIEtpbGwgc3R1YgoJZ2VuZXJhdGluZyBjb2RlIGFuZCB1c2UgX19idWlsdGluX2VoX3JldHVybi4gIFVzZSBfX2J1aWx0aW5fZHdhcmZfY2ZhLgoKCSogYWxwaGEuYyAoYWxwaGFfZWhfZXBpbG9ndWVfc3Bfb2ZzKTogTmV3LgoJKGFscGhhX2luaXRfZXhwYW5kZXJzKTogSW5pdGlhbGl6ZSBpdC4KCShhbHBoYV9leHBhbmRfZXBpbG9ndWUpOiBVc2UgaXQuCgkqIGFscGhhLmg6IERlY2xhcmUgaXQuCgkqIGFscGhhLm1kIChlaF9lcGlsb2d1ZSk6IE5ldy4KCgkqIG02OGguaCAoQVJHX1BPSU5URVJfQ0ZBX09GRlNFVCk6IE5ldy4KCSogc3BhcmMuaCAoQVJHX1BPSU5URVJfQ0ZBX09GRlNFVCk6IE5ldy4KClR1ZSBTZXAgMTUgMTk6MzE6NTggMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBpOTYwLmggKENPTlNUX0NPU1RTKTogRml4IHRoaW5rby4gIFRlc3QgZmxhZywgbm90IHRoZSBjb25zdGFudAoJZmxhZyBiaXQgbWFzay4KClR1ZSBTZXAgMTUgMTQ6MTA6NTQgRURUIDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5oIChzdHJ1Y3QgZWhfZW50cnkpOiBBZGQgZmFsc2VfbGFiZWwgZmllbGQuCgkoZW5kX2NhdGNoX2hhbmRsZXIpOiBBZGQgcHJvdG90eXBlLgoJKiBleGNlcHQuYyAocHVzaF9laF9lbnRyeSk6IFNldCBmYWxzZV9sYWJlbCBmaWVsZCB0byBOVUxMX1JUWC4KCShzdGFydF9jYXRjaF9oYW5kbGVyKTogV2hlbiB1c2luZyBvbGQgc3R5bGUgZXhjZXB0aW9ucywgaXNzdWUKCXJ1bnRpbWUgdHlwZW1hdGNoIGNvZGUgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgaGFuZGxlci4KCShlbmRfY2F0Y2hfaGFuZGxlcik6IE5ldyBmdW5jdGlvbiwgZ2VuZXJhdGVzIGxhYmVsIGFmdGVyIGhhbmRsZXIKCWlmIG5lZWRlZCBieSBvbGRlciBzdHlsZSBleGNlcHRpb25zLgoJKGV4cGFuZF9zdGFydF9hbGxfY2F0Y2gpOiBObyBuZWVkIHRvIGNoZWNrIGZvciBuZXcgc3R5bGUgZXhjZXB0aW9ucy4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogT25seSBvdXRwdXQgdGhlIGZpcnN0IGhhbmRsZXIgbGFiZWwKCWZvciBvbGQgc3R5bGUgZXhjZXB0aW9ucy4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogTmV3IHJvdXRpbmUgdG8gbHVtcCBydW50aW1lIG1hdGNoaW5nCgltZWNoYW5pc20gaW50byBvbmUgZnVuY3Rpb24sIGlmIGEgcnVudGltZSBtYXRjaGVyIGlzIHByb3ZpZGVkLgoKVHVlIFNlcCAxNSAxMzo1Mzo1OSBFRFQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogY29uZmlnL2k5NjAvaTk2MC5oIChTTE9XX0JZVEVfQUNDRVNTKTogQ2hhbmdlIGRlZmluaXRpb24gdG8gMS4KClR1ZSBTZXAgMTUgMDk6NTk6MDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGludGVncmF0ZS5jIChjb3B5X2RlY2xfbGlzdCk6IEZpeCB0eXBvLgoKVHVlIFNlcCAxNSAwNDoxODo1MiAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGZfY29uc3RfaW50cmVnX3NwMzIpOiBGaXggbGVuZ3RoCglhdHRyaWJ1dGUuCgpNb24gU2VwIDE0IDE0OjAyOjUzIFBEVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAxNCAxMDozMzo1NiBQRFQgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMTQgMDk6NTE6MDUgUERUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gU2VwIDEzIDIyOjEwOjE4IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogaW52b2tlLnRleGkgKEMgRGlhbGVjdCBPcHRpb25zKTogUHV0IGJhY2sgbWlzc2luZyBAZW5kIGl0ZW1pemUuCgpNb24gU2VwIDE0IDAyOjMzOjQ2IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluOiByZW1vdmUgdXNhZ2Ugb2YgYCEnIHRvIG5lZ2F0ZSB0aGUgcmVzdWx0IG9mIGEKCWNvbW1hbmQ7IHNvbWUgY29tbW9uIHNoZWxscyBkbyBub3Qgc3VwcG9ydCBpdAoKU3VuIFNlcCAxMyAxOToxNzozNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogaW4gc3BhcmM5LXNvbDIgY29uZmlnLCB1c2UgJ2lmIHRlc3QnIG5vdAoJYnJhY2tldHMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGNvbmZpZy9zcGFyYy9zb2wyLXNsZC02NC5oIChTUEFSQ19ERUZBVUxUX0NNT0RFTCk6IENoYW5nZSB0bwoJQ01fTUVEQU5ZLgoJKENQUF9DUFVfU1BFQyk6IERvIG5vdCBkZWZpbmUgX0xQNjQsIGhlYWRlciBmaWxlcyBkbyB0aGlzLgoJKENQUF9DUFVfREVGQVVMVF9TUEVDKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zb2wyLmggKElOSVRfU1VCVEFSR0VUX09QVEFCUyk6IEdldCB0aGUgbmFtZXMgcmlnaHQKCWZvciBhcmNoNjQgbGliZnVuY3MuCgkKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmUpOiBBbGxvdyBhbnkgbW9kZQoJZm9yIG9wZXJhbmQgemVyby4KClN1biBTZXAgMTMgMDk6MTE6NTkgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWNjb25maWcuaCAoTkVFRF9ERUNMQVJBVElPTl9TVFJTSUdOQUwpOiBQcm92aWRlIGEgc3R1Yi4KCgkqIGNvbGxlY3QyLmM6IERvbid0IGRlY2xhcmUgYHN5c19zaWdsaXN0JyBoZXJlLgoJKG15X3N0cnNpZ25hbCk6IFByb3RvdHlwZSBhbmQgZGVmaW5lIG5ldyBmdW5jdGlvbi4gIFVzZSBpdCBpbgoJcGxhY2Ugb2YgYHN5c19zaWdsaXN0JyBoYWNrcy4KCgkqIG1pcHNfdGZpbGUuYzogIExpa2V3aXNlLgoKCSogY29uZmlndXJlLmluIChBQ19DSEVDS19GVU5DUyk6IENoZWNrIGZvciBzdHJzaWduYWwuCgkoR0NDX05FRURfREVDTEFSQVRJT05TKTogTGlrZXdpc2UuCgoJKiBzeXN0ZW0uaCAoc3Ryc2lnbmFsKTogUHJvdG90eXBlIGl0LCBpZiBuZWNlc3NhcnkuCgkoc3lzX3NpZ2xpc3QpOiBEZWNsYXJlIGl0LCBpZiBuZWNlc3NhcnkuCgpTdW4gU2VwIDEzIDA0OjM3OjI4IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogbG9vcC5jIChtb3ZlX21vdmFibGVzKTogV2hpbGUgcmVtb3ZpbmcgaW5zbiBzZXF1ZW5jZXMsIHByZXNlcnZlCgl0aGUgbmV4dCBwb2ludGVyIG9mIHRoZSBtb3N0IHJlY2VudGx5IGRlbGV0ZWQgaW5zbiB3aGVuIHdlIHNraXAKCW92ZXIgYSBOT1RFLgoKU3VuIFNlcCAxMyAwODoxMzozOSAxOTk4ICBCZW4gRWxsaXN0b24gIDxiamVAY3lnbnVzLmNvbT4KCgkqIG9iamMvY29uZmlnLWxhbmcuaW46IERvIG5vdCBvdXRwdXQgdGhlIG5hbWUgb2YgdGhlIHNlbGVjdGVkCgl0aHJlYWQgZmlsZSB3aGVuIGJ1aWxkaW5nIHRoZSBmcm9udC1lbmQuICBUaGUgTWFrZWZpbGUgZm9yIHRoZQoJcnVudGltZSBsaWJyYXJ5IHdpbGwgZG8gdGhpcy4KCgkqIG9iamMvTWFrZS1sYW5nLmluOiBEbyBub3QgYnVpbGQgdGhlIHJ1bnRpbWUgbGlicmFyeSBvciBpbnN0YWxsCgl0aGUgT2JqZWN0aXZlIEMgaGVhZGVyIGZpbGVzLiAgVGhlIE1ha2VmaWxlIGZvciB0aGUgcnVudGltZQoJbGlicmFyeSB3aWxsIGRvIHRoaXMuCgoJKiBvYmpjL01ha2VmaWxlLmluIChhbGwuaW5kaXJlY3QpOiBPbmx5IGJ1aWxkIHRoZSBmcm9udC1lbmQuCgkoY29tcGlsZXIpOiBSZW5hbWUgdG8gYGZyb250ZW5kJy4KCShvYmotcnVudGltZSk6IFJlbW92ZSB0YXJnZXQuCgkoY29weS1oZWFkZXJzKTogTGlrZXdpc2UuCgkoY2xlYW4pOiBObyBuZWVkIHRvIHJlbW92ZSBgbGlib2JqYy5hJyBhbnkgbG9uZ2VyLgoKU2F0IFNlcCAxMiAxMTozNzoxOSAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oICh7QVNNLENQUH1fQ1BVX1NQRUMpOiBBZGQgc3VwcG9ydCBmb3IgYWxsIG1hY2hpbmVzCglzdXBwb3J0ZWQgd2l0aCAtbWNwdT14eHguCgpGcmkgU2VwIDExIDIzOjU1OjU0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogZmxvdy5jIChtYXJrX3NldF8xKTogUmVjb2duaXplIG11bHRpLXJlZ2lzdGVyIHN0cnVjdHVyZSByZXR1cm4KCXZhbHVlcyBpbiBDQUxMIGluc25zLgoJKG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UuCgkoY291bnRfcmVnX3NldHNfMSk6IExpa2V3aXNlLgoJKGNvdW50X3JlZ19yZWZlcmVuY2VzKToJTGlrZXdpc2UuCgkqIHJ0bGFuYWwuYyAobm90ZV9zdG9yZXMpOiBMaWtld2lzZS4KCShyZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCk6IExpa2V3aXNlLgoJKiBoYWlmYS1zY2hlZC5jIChjaGVja19saXZlXzEpOiBMaWtld2lzZS4KCSh1cGRhdGVfbGl2ZV8xKTogTGlrZXdpc2UuCgkoc2NoZWRfYW5hbHl6ZV8xKTogTGlrZXdpc2UuCgkoc2NoZWRfbm90ZV9zZXQpOiBMaWtld2lzZS4KCShiaXJ0aGluZ19pbnNuX3ApOiBMaWtld2lzZS4KCShhdHRhY2hfZGVhdGhzKTogTGlrZXdpc2UuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdmRmX2NvbnN0X2ludHJlZ19zcDY0KTogRGlzYWJsZS4KCgpGcmkgU2VwIDExIDIyOjU3OjU1IDE5OTggIEVyaWMgRHVtYXpldCAgPGR1bWF6ZXRAY29zbW9zYmF5LmNvbT4KCgkqIGNvbmZpZy9pMzg2L3NjbzUuaCAoQVNNX1dFQUtFTl9MQUJFTCk6IERlZmluZWQgYXMgaW4gc3ZyNC5oLgoKVGh1IFNlcCAxMCAyMjowMjowNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGdsaW1pdHMuaCAoX19MT05HX01BWF9fKTogUmVjb2duaXplIF9fc3BhcmN2OSB0b28uCgpUaHUgU2VwIDEwIDIxOjE5OjEwIDE5OTggIEpha3ViIEplbGluZWsgIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgoKCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIEdBUyBzdWJzZWN0aW9uIC0xIHN1cHBvcnQuCgkqIGFjY29uZmlnLmggKEhBVkVfR0FTX1NVQlNFQ1RJT05fT1JERVJJTkcpOiBBZGQuCgkqIGNvbmZpZ3VyZSBjb25maWcuaW46IFJlYnVpbHQuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChDQVNFX1ZFQ1RPUl9NT0RFKTogRm9yIFY5IGZsYWdfcGljLCB1c2UKCVNJbW9kZSBpcyBzdWJzZWN0aW9uIC0xIHdvcmtzLCBlbHNlIHVzZSBESW1vZGUuCgkoQVNNX09VVFBVVF9BRERSX1ZFQ19TVEFSVCwgQVNNX09VVFBVVF9BRERSX1ZFQ19FTkQpOiBEZWZpbmUgaWYKCXN1YnNlY3Rpb24gLTEgd29ya3MuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19vdXRwdXRfYWRkcl92ZWMsCglzcGFyY19vdXRwdXRfYWRkcl9kaWZmX3ZlYyk6IFVzZSB0aGVtIGlmIGRlZmluZWQuCgpUaHUgU2VwIDEwIDEwOjQ2OjAxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmggKERFQ0xfT1JJR0lOKTogTmV3IG1hY3JvLgoJKiBpbnRlZ3JhdGUuYyAoY29weV9hbmRfc2V0X2RlY2xfYWJzdHJhY3Rfb3JpZ2luKTogTmV3IGZ1bmN0aW9uLgoJKGNvcHlfZGVjbF9saXN0KTogVXNlIGl0LgoJKGludGVncmF0ZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IExpa2V3aXNlLgoJKiBkd2FyZjJvdXQuYyAoZGVjbF91bHRpbWF0ZV9vcmlnaW4pOiBTaW1wbGlmeS4KCSogZHdhcmZvdXQuYyAoZGVjbF91bHRpbWF0ZV9vcmlnaW4pOiBMaWtld2lzZS4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFVzZSBERUNMX09SSUdJTi4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoKVGh1IFNlcCAxMCAwODowMTozMSAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKG91dHB1dF9lcGlsb2cpOiBBZGQgSmF2YSBzdXBwb3J0LgoKVGh1IFNlcCAxMCAxNDo0ODo1OSAxOTk4ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogaW52b2tlLnRleGkgKEMrKyBEaWFsZWN0IE9wdGlvbnMpOiBEb2N1bWVudCAtZmhvbm9yLXN0ZC4KClRodSBTZXAgMTAgMDE6Mzg6MDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVnLXN0YWNrLmMgKHN0cmFpZ2h0ZW5fc3RhY2spOiBEbyBub3RoaW5nIGlmIHRoZSB2aXJ0dWFsIHN0YWNrIGlzCgllbXB0eSBvciBoYXMgYSBzaW5nbGUgZW50cnkuCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE9wZW4gdXAgdGhlIGR1bXAgZmlsZSBmb3IgcmVnLXN0YWNrCgliZWZvcmUgY2FsbGluZyByZWdfdG9fc3RhY2suCgpUaHUgU2VwIDEwIDAwOjAzOjM0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYWV2NV9pbnNuX3BpcGUpOiBBYm9ydCBvbiBkZWZhdWx0IGNhc2UuCgkoYWxwaGFldjVfbmV4dF9ncm91cCk6IFN3YWxsb3cgQ0xPQkJFUnMgYW5kIFVTRXMuCgoJKiBjLXRyZWUuaCAod2Fybl9sb25nX2xvbmcpOiBEZWNsYXJlIGl0LgoKV2VkIFNlcCAgOSAyMzozMTozNiAxOTk4ICAoU3RlcGhlbiBMIE1vc2hpZXIpIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CgoJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBEaXNhYmxlIG9wdGltaXphdGlvbiBvZgoJaW5pdGlhbGl6ZWQgZmxvYXQtaW50IHVuaW9uIGlmIHRoZSB2YWx1ZSBpcyBhIE5hTi4KCldlZCBTZXAgIDkgMjM6MDA6NDggMTk5OCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGMtbGV4LmMgKHJlYWxfeXlsZXgpOiBEb24ndCB3YXJuIGFib3V0IGxvbmcgbG9uZyBjb25zdGFudHMgaWYgCgl3ZSdyZSBhbGxvd2luZyBsb25nIGxvbmcKCldlZCBTZXAgIDkgMjE6NTg6NDEgMTk5OCAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBleGNlcHQuaCAoY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsKTogRGVjbGFyZS4KCShjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsKTogRGVjbGFyZS4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTmV3IG1lbWJlcnMgZWhfc3R1Yl9sYWJlbCBhbmQKCWVoX29sZF9zdHViX2xhYmVsLgoJKiBleGNlcHQuYyAoY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsKTogTmV3IHZhcmlhYmxlLgoJKGN1cnJlbnRfZnVuY3Rpb25fZWhfb2xkX3N0dWJfbGFiZWwpOiBOZXcgdmFyaWFibGUuCgkoaW5pdF9laF9mb3JfZnVuY3Rpb24pOiBDbGVhciB0aGVtLgoJKHNhdmVfZWhfc3RhdHVzKTogU2F2ZSB0aGVtLgoJKHJlc3RvcmVfZWhfc3RhdHVzKTogUmVzdG9yZSB0aGVtLgoJKGV4cGFuZF9idWlsdGluX2VoX3N0dWIpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsLgoJKGV4cGFuZF9idWlsdGluX2VoX3N0dWJfb2xkKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fZWhfb2xkX3N0dWJfbGFiZWwuCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3NfMSk6IFdoZW4gaGFuZGxpbmcgYSBSRUdfTEFCRUwgbm90ZSwgZG9uJ3QKCW1ha2UgYW4gZWRnZSBmcm9tIHRoZSBibG9jayB0aGF0IGNvbnRhaW5zIGl0IHRvIHRoZSBibG9jayBzdGFydGluZwoJd2l0aCB0aGUgbGFiZWwgaWYgdGhpcyBsYWJlbCBpcyBvbmUgb2YgdGhlIGVoIHN0dWIgbGFiZWxzLgoJSWYgZWggc3R1YiBsYWJlbHMgZXhpc3QsIHNob3cgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIGxhc3QgYmxvY2sKCWluIHRoZSBmdW5jdGlvbi4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogQnJlYWsgb3V0IHNldmVyYWwgc3Vicm91dGluZXMgYW5kIG1ha2Ugc29tZQoJdmFyaWFibGVzIGdsb2JhbC4KCShjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHJlbG9hZC4KCShjYWxjdWxhdGVfbmVlZHMpOiBMaWtld2lzZS4KCShmaW5kX3JlbG9hZF9yZWdzKTogTGlrZXdpc2UuCgkoZmluZF9ncm91cCk6IExpa2V3aXNlLgoJKGZpbmRfdHdvcmVnX2dyb3VwKTogTGlrZXdpc2UuCgkoc29tZXRoaW5nX25lZWRzX3JlbG9hZHMpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLCBmb3JtZXJseSBpbiByZWxvYWQuCgkoc29tZXRoaW5nX25lZWRzX2VsaW1pbmF0aW9uKTogTGlrZXdpc2UuCgkoY2FsbGVyX3NhdmVfc3BpbGxfY2xhc3MpOiBMaWtld2lzZS4KCShjYWxsZXJfc2F2ZV9ncm91cF9zaXplKTogTGlrZXdpc2UuCgkobWF4X25lZWRzKTogTGlrZXdpc2UuCgkoZ3JvdXBfc2l6ZSk6IExpa2V3aXNlLgoJKG1heF9ncm91cHMpOiBMaWtld2lzZS4KCShtYXhfbm9uZ3JvdXBzKTogTGlrZXdpc2UuCgkoZ3JvdXBfbW9kZSk6IExpa2V3aXNlLgoJKG1heF9uZWVkc19pbnNuKTogTGlrZXdpc2UuCgkobWF4X2dyb3Vwc19pbnNuKTogTGlrZXdpc2UuCgkobWF4X25vbmdyb3Vwc19pbnNuKTogTGlrZXdpc2UuCgkoZmFpbHVyZSk6IExpa2V3aXNlLgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IEZvciBNRU1zLCBwcmludCBNRU1fQUxJQVNfU0VULgoKV2VkIFNlcCAgOSAxMzoxNDo0MSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChsb2FkX21lbXMpOiBDb3B5IHJ0eCBmb3Igb3V0cHV0IG1lbS4KCldlZCBTZXAgIDkgMTU6MTY6NTggMTk5OCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBtaXBzL2FiaTY0LmggKExPTkdfTUFYX1NQRUMpOiBEb24ndCBzZXQgTE9OR19NQVggZm9yCgltaXBzMSBvciBtaXBzMiBlaXRoZXIuCgpXZWQgU2VwICA5IDEyOjMxOjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKHBhX3Jlb3JnKTogTmV3IG1hcmtpbmcgc2NoZW1lIGZvciBqdW1wcyBpbnNpZGUgc3dpdGNoCgl0YWJsZXMuCgkocGFfYWRqdXN0X2luc25fbGVuZ3RoKTogVXBkYXRlIHRvIHdvcmsgd2l0aCBuZXcgbWFya2luZyBzY2hlbWUKCWZvciBqdW1wcyBpbnNpZGUgc3dpdGNoIHRhYmxlcy4gCgkqIHBhLm1kIChzd2l0Y2hfanVtcCk6IFJlbW92ZSBwYXR0ZXJuLgoJKGp1bXApOiBIYW5kbGUganVtcHMgaW5zaWRlIGp1bXAgdGFibGVzLgoKCSogTWFrZWZpbGUuaW4gKHByb2ZpbGUubyk6IERlcGVuZCBvbiBpbnNuLWNvbmZpZy5oCgpXZWQgU2VwICA5IDA5OjM2OjUxIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGlyaXM2LmggKERXQVJGMl9VTldJTkRfSU5GTyk6IFVuZGVmLgoKV2VkIFNlcCAgOSAwMTozMjowMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCglBZGQgcHJlbGltaW5hcnkgbmF0aXZlIHNwYXJjdjkgU29sYXJpcyBzdXBwb3J0LgoJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBzcGFydjktKi1zb2xhcmlzMioKCSogY29uZmlndXJlOiByZWJ1aWx0CgkqIGNvbmZpZy5zdWI6IFJlY29nbml6ZSBzcGFyY3Y5IGp1c3QgbGlrZSBzcGFyYzY0LgoJKiBjb25maWcvc3BhcmMvc29sMi1jMS5hc20gY29uZmlnL3NwYXJjL3NvbDItY2kuYXNtCgljb25maWcvc3BhcmMvc29sMi1jbi5hc206IE1hY3JvaXplIHNvIGl0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbgoJMzItYml0IGFuZCA2NC1iaXQgU29sYXJpcyBzeXN0ZW1zLgoJKiBjb25maWcvc3BhcmMvdC1zb2wyOiBBc3NlbWJsZSB0aG9zZSB3aXRoIGNwcC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFRBUkdFVF9DUFVfc3BhcmN2OSk6IE5ldyBhbGlhcyBmb3IgdjkuCgkoKlRGKl9MSUJDQUxMKTogSWYgQVJDSDY0IHVzZSBWOSBuYW1lcy4KCSogY29uZmlnL3NwYXJjL3t4bS1zeXN2NC02NCxzb2wyLXNsZC02NH0uaDogTmV3CWZpbGVzLgoKV2VkIFNlcCAgOSAwMTowNzozMCAxOTk4ICBKYWt1YiBKZWxpbmVrICA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChUQVJHRVRfQ01fTUVETUlEKTogRml4IGRvY3VtZW50YXRpb24uCgkoQ0FTRV9WRUNUT1JfTU9ERSk6IFNldCB0byBTSW1vZGUgZXZlbiBpZiBQVFI2NCwgd2hlbiBNRURMT1cgYW5kCglub3QgZG9pbmcgcGljLgoJKEFTTV9PVVRQVVRfQUREUl97VkVDLERJRkZ9X0VMVCk6IENoZWNrIENBU0VfVkVDVE9SX01PREUgbm90CglQbW9kZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kICh0YWJsZWp1bXApOiBMaWtld2lzZSwgYW5kIHNpZ24gZXh0ZW5kIG9wMAoJdG8gUG1vZGUgaWYgQ0FTRV9WRUNUT1JfTU9ERSBpcyBzb21ldGhpbmcgZWxzZS4KCldlZCBTZXAgIDkgMDA6MTA6MzEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcHJlZml4LmMgKHVwZGF0ZV9wYXRoKTogQ29ycmVjdGx5IGhhbmRsZSBjYXNlcyB3aGVyZSBQQVRIIGlzCglhIHN1YnN0cmluZyBvZiB0aGUgYnVpbHRpbiBwcmVmaXgsIGJ1dCBzcGVjaWZpZXMgYSBkaWZmZXJlbnQKCWRpcmVjdG9yeSBsb2NhdGlvbi4KClR1ZSBTZXAgIDggMjM6NDY6MDQgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGV4cHIuYzogQ29ycmVjdGVkIGNvbW1lbnQgYWJvdXQgd2hhdCBNT1ZFX1JBVElPIGRvZXMuCgkqIGNvbmZpZy9hbHBoYS9hbHBoYS5oOiBEaXR0by4KCSogY29uZmlnLzE3NTBhLzE3NTBhLmg6IERpdHRvLgoJKiBjb25maWcvY2xpcHBlci9jbGlwcGVyLmg6IERpdHRvLgoJKiBjb25maWcvaTM4Ni9pMzg2Lmg6IERpdHRvLgoKVHVlIFNlcCAgOCAyMjo1NjoxMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKG02OGstbmV4dC1uZXh0c3RlcDMqKTogVXNlIGNvbGxlY3QyLgoJU2ltaWxhcmx5IGZvciB4ODYgTmVYVCBjb25maWd1cmF0aW9ucy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIFNlcCAgOCAwMTozODo1NyAxOTk4ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogY29uZmlndXJlLmluOiBEb24ndCBhc3N1bWUgc3JjZGlyIGlzIC4uLi9nY2MKCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU2F0IFNlcCAgNSAxNjozNDozNCBFRFQgMTk5OCAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZ2xvYmFsLmM6IFVwZGF0ZSBjb21tZW50cy4KCShnbG9iYWxfYWxsb2MpOiBBc3NpZ24gYWxsb2NhdGlvbi1udW1iZXJzCglldmVuIGZvciByZWdpc3RlcnMgYWxsb2NhdGVkIGJ5IGxvY2FsX2FsbG9jIGluIGNhc2UKCXRoZXkgYXJlIGxhdGVyIHNwaWxsZWQgYW5kIHJldHJ5X2dsb2JhbF9hbGxvYyBpcyBjYWxsZWQuCgkobWFya19yZWdfc3RvcmUsIG1hcmtfcmVnX2Nsb2JiZXIsCgltYXJrX3JlZ19jb25mbGljdHMsIG1hcmtfcmVnX2RlYXRoKTogQWx3YXlzIHJlY29yZCBhCgljb25mbGljdCB3aXRoIGEgcHNldWRvIHJlZ2lzdGVyIGV2ZW4gaWYgaXQgaGFzIGJlZW4KCWFzc2lnbmVkIHRvIGEgaGFyZCByZWdpc3Rlci4KCShkdW1wX2NvbmZsaWN0cyk6IERvbid0IGxpc3QgcHNldWRvIHJlZ2lzdGVycyBhbHJlYWR5IGFzc2lnbmVkIHRvCglhIGhhcmQgcmVnaXN0ZXIgYXMgbmVlZGluZyB0byBiZSBhbGxvY2F0ZWQsIGJ1dCBkbyBsaXN0IHRoZWlyCgljb25mbGljdHMuCgkqIGxvY2FsLWFsbG9jLmM6IFVwZGF0ZSBjb21tZW50LgoKTW9uIFNlcCAgNyAyMzozODowMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBib2d1cyBHQ0NfRVhFQ19QUkVGSVggYW5kIExJQlJBUllfUEFUSC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIFNlcCAgNyAyMjo0MTo0NiAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IEZpeCBuYW1lIGZvciBlYzYwM2UsIHRvIGFkZAoJbWlzc2luZyAnYycuCgkqIHQtcHBjY29tbSAoTVVMVElMSUJfTUFUQ0hFU19GTE9BVCk6IEFkZCBzdXBwb3J0IGZvciAtbWNwdT14eHgKCWZvciBhbGwgdGFyZ2V0cyB0aGF0IHNldCAtbXNvZnQtZmxvYXQuCgpNb24gU2VwICA3IDIzOjMwOjA3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5jIChwcmludF9zd2l0Y2hfdmFsdWVzKTogTWFrZSBzdGF0aWMgdG8gbWF0Y2ggcHJvdG90eXBlLgoKTW9uIFNlcCAgNyAxOToxMzo1OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IElmIHdlIGFyZSB1bmFibGUgdG8gZmluZCB0aGUgImduYXRiaW5kIiBwcm9ncmFtLAoJdGhlbiBkbyBub3QgY29uZmlndXJlIHRoZSBhZGEgc3ViZGlyLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTdW4gU2VwIDYgMTQ6MDM6NTggUERUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gU2VwIDYgMTM6Mjg6MDcgUERUIDE5OTggSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gU2VwICA2IDA4OjU0OjE0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluICh0b3BsZXYubyk6IERlcGVuZCBvbiAkKEVYUFJfSCkuCgkoaW5zbi1leHRyYWN0Lm8sIGluc24tYXR0cnRhYi5vKTogRGVwZW5kIG9uIHRvcGxldi5oLgoKCSogZ2Fuc2lkZWNsLmg6IERlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiBnZW5hdHRydGFiLmM6IEhhdmUgaW5zbi1hdHRydGFiLmMgaW5jbHVkZSB0b3BsZXYuaC4KCgkqIGdlbmV4dHJhY3QuYzogSGF2ZSBpbnNuLWV4dHJhY3QuYyBpbmNsdWRlIHRvcGxldi5oLgoKCSogcnRsLmg6IERvbid0IHByb3RvdHlwZSBgZmF0YWxfaW5zbl9ub3RfZm91bmQnIGFuZCBgZmF0YWxfaW5zbicuCgoJKiB0b3BsZXYuYzogSW5jbHVkZSBleHByLmguCiAgCShyZWFsbHlfc29ycnksIGZhbmN5X2Fib3J0KTogUmVtb3ZlIHByb3RvdHlwZXMuCgkoc2V0X3RhcmdldF9zd2l0Y2gpOiBBZGQgYXJndW1lbnQgaW4gcHJvdG90eXBlLgoJKHZmYXRhbCk6IE1hcmsgcHJvdG90eXBlIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoJKHZfcmVhbGx5X3NvcnJ5KTogTGlrZXdpc2UuCgkocHJpbnRfdmVyc2lvbiwgcHJpbnRfc2luZ2xlX3N3aXRjaCwgcHJpbnRfc3dpdGNoX3ZhbHVlcyk6IE1ha2UKCXN0YXRpYyBhbmQgYWRkIHByb3RvdHlwZSBhcmd1bWVudHMuCgkoZGVjbF9wcmludGFibGVfbmFtZSk6IEFkZCBwcm90b3R5cGUgYXJndW1lbnRzLgoJKGxhbmdfZXhwYW5kX2V4cHJfdCk6IE5ldyB0eXBlZGVmLgoJKGxhbmdfZXhwYW5kX2V4cHIpOiBEZWNsYXJlIGFzIGEgbGFuZ19leHBhbmRfZXhwcl90LgoJKGluY29tcGxldGVfZGVjbF9maW5hbGl6ZV9ob29rKTogQWRkIHByb3RvdHlwZSBhcmd1bWVudC4KCShkZWNsX25hbWUpOiBNYXJrIHZhcmlhYmxlIGB2ZXJib3NpdHknIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShib3RjaCk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgcycuCgkocmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uKTogTWFyayB2YXJpYWJsZXMgYHR5cGUnIGFuZCBgdG9wbGV2JwoJd2l0aCBBVFRSSUJVVEVfVU5VU0VEIGlmIG5vbmUgb2YgREJYX0RFQlVHR0lOR19JTkZPLAoJWENPRkZfREVCVUdHSU5HX0lORk8gb3IgU0RCX0RFQlVHR0lOR19JTkZPIGFyZSBkZWZpbmVkLgoJKGRpc3BsYXlfaGVscCk6IE1ha2UgdmFyaWFibGUgYGknIGFuIGB1bnNpZ25lZCBsb25nJy4KCShtYWluKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYGVudnAnLgoJQ2FzdCBhc3NpZ25tZW50IHRvIGBsYW5nX2V4cGFuZF9leHByJyB0byBhIGBsYW5nX2V4cGFuZF9leHByX3QnLgoJQ2FzdCAtMSB3aGVuIGNvbXBhcmluZyBpdCB3aXRoIGEgYHNpemVfdCcuCgoJKiB0b3BsZXYuaCAoZmF0YWwsIGZhdGFsX2lvX2Vycm9yLCBwZmF0YWxfd2l0aF9uYW1lKTogTWFyawoJcHJvdG90eXBlIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoJKGZhdGFsX2luc25fbm90X2ZvdW5kLCBmYXRhbF9pbnNuLCByZWFsbHlfc29ycnksCglwdXNoX2Zsb2F0X2hhbmRsZXIsIHBvcF9mbG9hdF9oYW5kbGVyKTogQWRkIHByb3RvdHlwZXMuCgkoZmFuY3lfYWJvcnQpOiBNYXJrIHByb3RvdHlwZSB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShkb19hYm9ydCwgYm90Y2gpOiBBZGQgcHJvdG90eXBlcy4KCQpTYXQgU2VwICA2IDEyOjA1OjE4IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZmluYWwuYyAoZmluYWwpOiBJZiBhIGxhYmVsIGlzIHJlYWNoZWQgb25seSBmcm9tIGEgc2luZ2xlIGp1bXAsCgljYWxsIE5PVElDRV9VUERBVEVfQ0Mgb24gdGhlIGp1bXAgYW5kIGl0cyBwcmVkZWNlc3NvciBiZWZvcmUKCWVtaXR0aW5nIHRoZSBpbnNuIGFmdGVyIHRoZSBsYWJlbC4KCQoJKiBpMzg2Lmg6IEFkZCBBTUQgSzYgc3VwcG9ydC4KCUNoYW5nZSBUQVJHRVRfKiBtYWNyb3MgdG8gdXNlIHRhYmxlIGxvb2t1cC4KCShJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBJbXByb3ZlIHRyYW1wb2xpbmUgY29kZS4KCShBREpVU1RfQ09TVCk6IENoYW5nZSBkZWZpbml0aW9uIHRvIGNhbGwgZnVuY3Rpb24gaW4gaTM4Ni5jLgoJKElTU1VFX1JBVEUpOiBEZWZpbmUgYXMgMiBmb3IgYW55dGhpbmcgbmV3ZXIgdGhhbiBhbiA4MDQ4Ni4KCSogaTM4Ni5jOiBBZGQgQU1EIEs2IHN1cHBvcnQuCglBZGQgY29uc3RhbnRzIGZvciBmZWF0dXJlIHRlc3RzIHVzZWQgYnkgVEFSR0VUXyogbWFjcm9zLgoJKHNwbGl0X2RpKTogSWYgYmVmb3JlIHJlbG9hZCwgY2FsbCBnZW5fbG93cGFydCBhbmQgZ2VuX2hpZ2hwYXJ0LgoJKHg4Nl9hZGp1c3RfY29zdCk6IE5ldyBmdW5jdGlvbi4KCShwdXRfanVtcF9jb2RlKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X29wZXJhbmQpOiBOZXcgY29kZXMgJ0QnIGFuZCAnZCcuCgkqIGkzODYubWQ6IE5ldyBpbnNuIHR5cGVzLiAgTmV3IGluc24gYXR0cmlidXRlICJtZW1vcnkiLgoJUmVkZWZpbmUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIHRvIHVzZSBuZXcgdHlwZXMgYW5kIGFkZCBBTUQgSzYKCXN1cHBvcnQuICBFeHBsaWNpdGx5IHNldCB0eXBlIG9mIG1vc3QgaW5zbnMuCgkobW92ZSBpbnNucyk6IEs2IHByZWZlcnMgbW92bCAkMCxyZWcgdG8geG9ybCByZWcscmVnLiAgUGVudGl1bQoJUHJvIGFuZCBLNiBwcmVmZXIgbW92bCAkMSxyZWcgdG8gaW5jbCByZWcuCgkoYWRkZGkzLCBzdWJkaTMpOiBTZXQgY2Nfc3RhdHVzLgoJKERJbW9kZSBzaGlmdCBwYXR0ZXJucyk6IENoYW5nZSBsYWJlbCBjb3VudGVycyBmcm9tIEhPU1RfV0lERV9JTlQKCXRvIGludDsgeDg2IGNhbid0IGhhdmUgbW9yZSB0aGFuIDJeMzEgREltb2RlIHNoaWZ0cyBwZXIJZmlsZS4KCShzZXRjYyk6IENvbWJpbmUgYWxsIHNldGNjIHBhdHRlcm5zLiAgQWxsb3cgd3JpdGluZyBtZW1vcnkuCglDb21iaW5lIGFsbCBqdW1wIHBhdHRlcm5zIHVzaW5nIG1hdGNoX29wZXJhdG9yLgoJKCpiemVybyk6IE5hbWUgcGF0dGVybi4gIEVtaXQgbXV0bGlwbGUgc3RvcyBpbnN0cnVjdGlvbnMgd2hlbiB0aGF0CglpcyBmYXN0ZXIgdGhhbiByZXAgc3Rvcy4KCSh4b3JkaTMsIGFuZGRpMywgaW9yZGkzKTogU2ltcGxpZnkgREltb2RlIGxvZ2ljYWwgcGF0dGVybnMgYW5kCglhZGQgZGVmaW5lX3NwbGl0LgoKU3VuIFNlcCAgNiAxMToxNzoyMCAxOTk4ICBEYXZlIExvdmUgIDxkLmxvdmVAZGwuYWMudWs+CgoJKiBjb25maWcvbTY4ay94LW5leHQgKEJPT1RfTERGTEFHUyk6IERlZmluZSBzdWl0YWJseSBmb3IgZjc3MQoJbGlua2luZy4KClNhdCBTZXAgIDUgMjI6MDU6MjUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX3JhX2V2ZXJfa2lsbGVkKTogSW5zcGVjdCB0aGUgdG9wbW9zdCBzZXF1ZW5jZSwKCW5vdCB3aGF0ZXZlciB3ZSdyZSBnZW5lcmF0aW5nIG5vdy4KCgkqIGFscGhhLmMgKHNldF9mcmFtZV9yZWxhdGVkX3AsIEZSUCk6IE5ldy4KCShhbHBoYV9leHBhbmRfcHJvbG9ndWUpOiBNYXJrIGZyYW1lIHJlbGF0ZWQgaW5zbnMuCgkoYWxwaGFfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UsIGJ1dCB3aXRoIGEgbnVsbCBGUlAuCgkqIGFscGhhLmggKElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCk6IE5ldy4KCSogYWxwaGEubWQgKGV4Y2VwdGlvbl9yZWNlaXZlcik6IE5ldy4KCSogYWxwaGEvY3J0YmVnaW4uYXNtICguZWhfZnJhbWUpOiBOZXcgYmVnaW5uaW5nLgoJKF9fZG9fZnJhbWVfc2V0dXAsIF9fZG9fZnJhbWVfdGFrZWRvd24pOiBOZXcuCgkqIGFscGhhL2NydGVuZC5hc20gKC5laF9mcmFtZSk6IE5ldyBlbmRpbmcuCgkqIGFscGhhL2VsZi5oIChEV0FSRjJfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCgkoQVNNX1NQRUMpOiBEb24ndCBlbWl0IGJvdGggZHdhcmYyIGFuZCBtZGVidWcuCgkoQVNNX0ZJTEVfU1RBUlQpOiBEb24ndCBlbWl0IC5maWxlIGZvciBkd2FyZjIuCgoJKiBydGwuaCAoZW51bSByZWdfbm90ZSk6IEFkZCBSRUdfRlJBTUVfUkVMQVRFRF9FWFBSLgoJKiBydGwuYyAocmVnX25vdGVfbmFtZSk6IExpa2V3aXNlLgoJKiBydGwudGV4aSAoUkVHX05PVEVTKTogTGlrZXdpc2UuCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZnJhbWVfZGVidWcpOiBVc2UgaXQuICBSZWNvZ25pemUgYSBzdG9yZQoJd2l0aG91dCBhbiBvZmZzZXQuCgpTYXQgU2VwICA1IDE0OjQ3OjE3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2LmggKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBTdGFuZGFyZCBmcCBjb25zdGFudHMgbG9hZCB0byBUT1MuCgkqIGkzODYubWQgKG1vdnNmLCBtb3ZkZiwgbW92eGYpOiBWYWxpZGF0ZSBtZW1vcnkgYWRkcmVzcyByZXR1cm5lZAoJZnJvbSBmb3JjZV9jb25zdF9tZW0uICBLaWxsIHVzZWxlc3MgUkVHX0VRVUFMIHNldHRpbmcgY29kZS4KClNhdCBTZXAgIDUgMTQ6MjM6MzEgMTk5OCAgVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgoKCSogbTY4ay5tZCAoemVyb19leHRlbmRzaWRpMik6IEZpeCB0eXBvLgoKU2F0IFNlcCAgNSAxMzo0MDoyNCAxOTk4ICBLcmlzdGVyIFdhbGZyaWRzc29uICA8Y2F0b0BkZi5sdGguc2U+CgoJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgcmVmZXJlbmNlcyB0byB0aGUgcmVtb3ZlZCBmaWxlCgkqIGNvbmZpZy94bS1uZXRic2QuaC4gVXNlICR7Y3B1X3R5cGV9L3htLW5ldGJzZC5oIGZvcgoJKiBhcm0qLSotbmV0YnNkKiBhbmQgbnMzMmstKi1uZXRic2QqLgoJKiBjb25maWcvaTM4Ni94bS1uZXRic2QuaDogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBmaWxlLgoJKiBjb25maWcvbTY4ay94bS1uZXRic2QuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy94bS1uZXRic2QuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9taXBzL3htLW5ldGJzZC5oOiBMaWtld2lzZS4KClNhdCBBdWcgMjkgMTM6MzI6NTggMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbjMyLmggKEJJR0dFU1RfQUxJR05NRU5UKTogRGVmaW5lLgoJKFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMpOiBEZWZpbmUgdG8gYmUgMC4KCgkqIGkzODYvY3lnd2luMzIuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBEb24ndCBjaGVjayBmb3IKCWZvciBleGFjdCBzZWN0aW9uIGF0dHJpYnV0aW9ucy4KCgkqIGkzODYvbWluZ3czMi5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCBfX01TVkNSVF9fIGZvciBtc3ZjCglydW50aW1lLgoJKiBpMzg2L2NydGRsbC5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZS4KClNhdCBTZXAgIDUgMDM6MjM6MDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbTY4ay5tZCAoNTIwMCBtb3ZxaSk6IERvIG5vdCBhbGxvdyBieXRlIHNpemVkIG1lbW9yeSByZWZlcmVuY2VzCgl1c2luZyBhZGRyZXNzIHJlZ3MuCgkqIG02OGsuYyAob3V0cHV0X21vdmVfcWltb2RlKTogRG8gbm90IHVzZSBieXRlIHNpemVkIG9wZXJhdGlvbnMgb24KCWFkZHJlc3MgcmVnaXN0ZXJzLgoKICAgICAgICAqIE1ha2VmaWxlLmluIChwZXhlY3V0ZS5vKTogVXNlIHBleGVjdXRlLmMgZnJvbSBsaWJpYmVydHkuICBQcm92aWRlCglleHBsaWNpdCBydWxlcyBmb3IgYnVpbGRpbmcuICBTaW1pbGFybHkgZm9yIGFsbG9jYSwgdmZwcmludGYsCgljaG9vc2UtdGVtcCBhbmQgbWtzdGVtcCwgZ2V0b3B0LCBnZXRvcHQxLCBhbmQgb2JzdGFjay4KCShJTkNMVURFUyk6IEFkZCAkKHNyY2RpcikvLi4vaW5jbHVkZS4KICAgICAgICAqIHBleGVjdXRlLmMsIGFsbG9jYS5jLCB2ZnByaW50Zi5jLCBjaG9vc2UtdGVtcC5jLCBta3N0ZW1wLmM6IERlbGV0ZS4KCSogZ2V0b3B0LmgsIGdldG9wdC5jIGdldG9wdDEuYywgb2JzdGFjay5jLCBvYnN0YWNrLmg6IExpa2V3aXNlLgoKRnJpIFNlcCAgNCAxMTo1Nzo1MCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZG9fc3BlY18xKTogW2Nhc2UgJ28nXSBBY2NvdW50IGZvcgoJbGFuZ19zcGVjaWZpY19leHRyYV9vdXRmaWxlcy4KCShtYWluKTogQ29ycmVjdGx5IGNsZWFyIGFsbCBzbG90cyBpbiBvdXRmaWxlcyBmb3IKCWxhbmdfc3BlY2lmaWNfZXh0cmFfb3V0ZmlsZXMuICBTZXQgaW5wdXRfZmlsZV9udW1iZXIgYmVmb3JlCgljYWxsaW5nIGxhbmdfc3BlY2lmaWNfcHJlX2xpbmsuCgpGcmkgU2VwICA0IDEwOjM3OjA3IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogRml4IEpVTVBfTEFCRUwgZmllbGQgYWZ0ZXIgZm9yX2VhY2hfcnR4IGNhbGwuCgpGcmkgU2VwICA0IDAyOjAxOjA1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKG91dHB1dF9kb3VibGVfaW50KTogSW4gYWxsIFY5IHN5bWJvbGljCgljYXNlcywgdXNlIHh3b3JkLgoJKHNwYXJjX291dHB1dF9kZWZlcnJlZF9jYXNlX3ZlY3RvcnMpOiBJZiBubyB3b3JrIHRvIGRvLCByZXR1cm4uCglGaXggdGhpbmtvIGluIFNlcHQgMSBjaGFuZ2UuCgoxOTk4LTA5LTAzICBTTCBCYXVyICA8c3RldmVAYWx0YWlyLnhlbWFjcy5vcmc+CgoJKiBNYWtlZmlsZS5pbjogYWRkIHNlbWljb2xvbiBpbiBCSVNPTiBkZWZpbml0aW9uIGZvciBwb3J0YWJpbGl0eS4KClRodSBTZXAgIDMgMTM6MzQ6NDEgMTk5OCAgVG9vbiBNb2VuZSAgPHRvb25AbW9lbmUuaW5kaXYubmx1dWcubmw+CgoJKiBjb25maWcvbmV4dHN0ZXAuYyAoaGFuZGxlX3ByYWdtYSk6IENvcnJlY3QgbmFtZSBvZiB0aGlyZAoJYXJndW1lbnQuCgpUdWUgU2VwICAxIDExOjMwOjMzIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTMyci9tMzJyLm1kOiBDaGFuZ2UgKHJlZzpDQyAxNykgdG8gKHJlZzpTSSAxNykuCgkqIGNvbmZpZy9tMzJyL20zMnIuaDogTWFrZSByZWdpc3RlciAxNyBiZSBmaXhlZC4KCSogY29uZmlnL20zMnIvbTMyci5jOiBVc2UgU0ltb2RlIGZvciBjYyBvcGVyYXRpb25zLgoKVGh1IFNlcCAgMyAxODoxNzozNCAxOTk4IEJlbmphbWluIEtvc25payAgPGJrb3pAY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpIChXYXJuaW5nIE9wdGlvbnMpOiBBZGQgLVdub24tdGVtcGxhdGUtZnJpZW5kCiAJZG9jdW1lbnRhdGlvbi4KClRodSBTZXAgIDMgMTg6MTY6MTYgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBBZGQgLW1jcHU9ezQwMSxlNjAzZX0uCgpUaHUgU2VwICAzIDE4OjA1OjE2IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAobW92c2YpOiBEaXNhYmxlIGV4cGxpY2l0IHNlY29uZGFyeS1yZWxvYWQtbGlrZQoJZnVuY3Rpb25hbGl0eSBpZiBUQVJHRVRfUE9XRVJQQzY0LgoJKG1vdmRmKTogUmVtb3ZlIFRBUkdFVF9QT1dFUlBDNjQgZXhwbGljaXQgc2Vjb25kYXJ5LXJlbG9hZC1saWtlCglmdW5jdGlvbmFsaXR5LgoKVGh1IFNlcCAgMyAxMTo0MTo0MCAxOTk4ICBSb2JlcnQgTGlwZSAgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogZml4aW5jLnNjbzogQm9ycm93IGNvZGUgdG8gd3JhcCAnYm9vbCcgdHlwZWRlZnMgZnJvbSB0aW5mby5oCglhbmQgdGVybS5oIGZyb20gZml4aW5jLndyYXAuCgpUaHUgU2VwICAzIDA5OjQ3OjMxIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFjbG9jYWwubTQgKEdDQ19IRUFERVJfU1RSSU5HKTogTmV3IG1hY3JvIHRvIGRldGVjdCBpZiBpdCBpcwogCXNhZmUgdG8gaW5jbHVkZSBib3RoIHN0cmluZy5oIGFuZCBzdHJpbmdzLmggdG9nZXRoZXIuCiAgCShHQ0NfTkVFRF9ERUNMQVJBVElPTik6IFRlc3QgU1RSSU5HX1dJVEhfU1RSSU5HUyB3aGVuIGRlY2lkaW5nCiAJd2hpY2ggaGVhZGVycyB0byBzZWFyY2ggZm9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gIENvbnRpbnVlIHRvCiAJcHJlZmVyIHN0cmluZy5oIG92ZXIgc3RyaW5ncy5oIHdoZW4gYm90aCBhcmUgbm90IGFjY2VwdGFibGUuCgoJKiBhY2NvbmZpZy5oIChTVFJJTkdfV0lUSF9TVFJJTkdTKTogQWRkIHN0dWIuCgoJKiBjb25maWd1cmUuaW46IENhbGwgR0NDX0hFQURFUl9TVFJJTkcuCgoJKiBzeXN0ZW0uaDogVGVzdCBTVFJJTkdfV0lUSF9TVFJJTkdTIHdoZW4gZGVjaWRpbmcgd2hpY2ggaGVhZGVycwogCXRvIGluY2x1ZGUuICBDb250aW51ZSB0byBwcmVmZXIgc3RyaW5nLmggb3ZlciBzdHJpbmdzLmggd2hlbiBib3RoCiAJYXJlIG5vdCBhY2NlcHRhYmxlLgoKV2VkIFNlcCAgMiAyMzo1NjoyOSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChvdXRwdXRfZG91YmxlX2ludCk6IElmIFY5IGFuZCBNRURMT1csIGRvCglub3QgYXNzdW1lIHRvcCAzMi1iaXRzIG9mIHN5bWJvbGljIGFkZHJlc3NlcyBhcmUgemVybyBpZgoJZmxhZ19waWMuCgpUaHUgU2VwICAzIDAwOjIzOjIxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnaW5jbHVkZS92YS1hbHBoYS5oOiBQcm90ZWN0IGVudGlyZSBzZWNvbmQgcG9ydGlvbiBvZiB0aGUKCWZpbGUgYWdhaW5zdCBkb3VibGUgaW5jbHVzaW9uLgoKVGh1IFNlcCAgMyAwMDozNzo1NSAxOTk4ICBPdmlkaXUgUHJlZGVzY3UgIDxvdmlkaXVAYXJhY25ldC5jb20+CgoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEJvZWhtJ3MgZ2FyYmFnZSBjb2xsZWN0b3IuCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIC0tZW5hYmxlLW9iamMtZ2MuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogTWFrZWZpbGUuaW4gKENIRUNLX1RBUkdFVFMpOiBBZGQgY2hlY2stb2JqYy4KCShjaGVjay1vYmpjKTogTmV3IHJ1bGUuCgkqIG9iamMvTWFrZS1sYW5nLmluOiBCdWlsZCBhIGRpZmZlcmVudCBPYmplY3RpdmUtQyBsaWJyYXJ5IHRoYXQKIAlydW5zIHdpdGggdGhlIEJvZWhtJ3MgY29sbGVjdG9yLgoJKiBvYmpjL2VuY29kaW5nLmMgKG9iamNfcm91bmRfYWNjX3NpemVfZm9yX3R5cGVzKTogTmV3IGZ1bmN0aW9uLgoJKiBvYmpjL2VuY29kaW5nLmM6IENvcnJlY3RseSBjb21wdXRlIHRoZSBzaXplIG9mIGNvbXBvdW5kIHR5cGVzIGluCiAJdGhlIHByZXNlbmNlIG9mIGJpdGZpZWxkcy4gU2tpcCB0aGUgdmFyaWFibGUgbmFtZSBvZiB0aGUgdHlwZSBpZgogCWFueS4gQWRkZWQgc3VwcG9ydCBmb3IgbG9uZyBsb25nLgoJKiBvYmpjL2VuY29kaW5nLmggKF9DX0dDSU5WSVNJQkxFKTogTmV3IHNwZWNpZmllci4KCShfRl9HQ0lOVklTSUJMRSk6IE5ldyBtYXNrLgoJKiBvYmpjL2djLmM6IE5ldyBmaWxlLiBDb21wdXRlIHRoZSB0eXBlIG1lbW9yeSBtYXNrIGFzc29jaWF0ZWQgd2l0aAoJYSBjbGFzcyBiYXNlZCBvbiB0aGUgcnVudGltZSBpbmZvcm1hdGlvbi4KCSogb2JqYy9taXNjLmM6IEFkZGVkIHRoZSBob29rcyB0aGF0IHVzZSB0aGUgQm9laG0ncyBjb2xsZWN0b3IKIAlhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCSogb2JqYy9vYmpjLWFjdC5jIChidWlsZF9jbGFzc190ZW1wbGF0ZSk6IEdlbmVyYXRlIGEgbmV3IGNsYXNzCiAJbWVtYmVyIChnY19vYmplY3RfdHlwZSkgdG8gaG9sZCB0aGUgY2xhc3MnIHR5cGUgbWVtb3J5IG1hc2suCgkoYnVpbGRfc2hhcmVkX3N0cnVjdHVyZV9pbml0aWFsaXplcik6IEluaXRpYWxpemUgdGhlIG5ldyBtZW1iZXIgdG8KCU5VTEwuCgkoZW5jb2RlX2NvbXBsZXRlX2JpdGZpZWxkKTogTmV3IGZ1bmN0aW9uLiBHZW5lcmF0ZSB0aGUgbmV3CiAJZW5jb2RpbmcuCgkoZW5jb2RlX2ZpZWxkX2RlY2wpOiBHZW5lcmF0ZSB0aGUgbmV3IGVuY29kaW5nIG9ubHkgZm9yIHRoZSBHTlUKCXJ1bnRpbWUuCgkqIG9iamMvb2JqYy1hcGkuaCAoX0NfTE5HX0xORywgX0NfVUxOR19MTkcpOiBOZXcgc3BlY2lmaWVycyBmb3IgdGhlCglsb25nIGxvbmcgdHlwZXMuCgkoY2xhc3NfZ2V0X2djX29iamVjdF90eXBlKTogTmV3IGZ1bmN0aW9uIHRvIG1hcmsgYSBwb2ludGVyIGluc3RhbmNlCgl2YXJpYWJsZSBhcyBhIHdlYWsgcG9pbnRlci4KCSogb2JqYy9vYmpjLWZlYXR1cmVzLnRleGk6IE5ldyBmaWxlLgoJKiBvYmpjL29iamMuaCAoZ2Nfb2JqZWN0X3R5cGUpOiBOZXcgY2xhc3MgbWVtYmVyLgoJKiBvYmpjL29iamVjdHMuYyAoY2xhc3NfY3JlYXRlX2luc3RhbmNlKTogQ3JlYXRlIGEgdHlwZWQgbWVtb3J5CiAJb2JqZWN0IHdoZW4gY29tcGlsZWQgd2l0aCBCb2VobSdzIGNvbGxlY3RvciBzdXBwb3J0LgoJKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX2luaXRfaW5zdGFsbF9kdGFibGUpOiBDYWxsCiAJX19vYmpjX3NlbmRfaW5pdGlhbGl6ZSBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGluaXRpYWxpemUgZmxhZy4KCShfX29iamNfc2VuZF9pbml0aWFsaXplKTogQ2FsbCBfX29iamNfZ2VuZXJhdGVfZ2NfdHlwZV9kZXNjcmlwdGlvbgogCXRvIGdlbmVyYXRlIHRoZSBjbGFzcyB0eXBlIG1lbW9yeSBtYXNrLiBSZXdyaXRlIHRoZSBjb2RlIHRoYXQKIAlzZW5kcyB0aGUgK2luaXRpYWxpemUgc28gdGhhdCBpdCBpcyBjYWxsZWQgb25seSBvbmNlIChidWcgcmVwb3J0CiAJYW5kIGZpeCBmcm9tIFJvbmFsZCBQaWpuYWNrZXIgPFJvbmFsZC5QaWpuYWNrZXJAYmVzdC5tcy5waGlsaXBzLmNvbT4pLgoJKiB0ZXN0c3VpdGUvb2JqYzogTmV3IHRlc3RzdWl0ZSBmb3IgT2JqZWN0aXZlLUMgdHlwZSBlbmNvZGluZy4KCSogdGVzdHN1aXRlL2xpYi9vYmpjLXRvcnR1cmUuZXhwOiBOZXcgZmlsZS4KCSogdGVzdHN1aXRlL2xpYi9vYmpjLmV4cDogTmV3IGZpbGUuCgpXZWQgU2VwICAyIDE0OjQ3OjM2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluIGlmL3RoZW4vZWxzZSB0cmFuc2Zvcm1hdGlvbnMsIGFkZAoJYW5vdGhlciBjYWxsIHRvIG1vZGlmaWVkX2JldHdlZW5fcCBmb3IgdGhlIGp1bXAgaW5zbi4KCldlZCBTZXAgIDIgMTQ6MTY6NDkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4LWhlYWRlci5jIChzeW1saW5rKTogVHJlYXQgbGlrZSByZWFkbGluay4KCldlZCBTZXAgIDIgMTk6MzA6MDYgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZHdhcmZvdXQuYyAoZnVuZGFtZW50YWxfdHlwZV9jb2RlKTogRW5jb2RlIDMyIGJpdCBmbG9hdHMvZG91YmxlcwoJYXMgRlRfZmxvYXQuCgpXZWQgU2VwICAyIDEwOjA2OjA3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbmV4dHN0ZXAuaDogICAgVXBkYXRlIEhBTkRMRV9QUkFHTUEgbWFjcm8uCgkqIGNvbmZpZy9oODMwMC9oODMwMC5oOiBVcGRhdGUgSEFORExFX1BSQUdNQSBtYWNyby4KCSogY29uZmlnL2k5NjAvaTk2MC5oOiAgIFVwZGF0ZSBIQU5ETEVfUFJBR01BIG1hY3JvLgoJCgkqIGNvbmZpZy9uZXh0c3RlcC5jIChoYW5kbGVfcHJhZ21hKTogVGFrZSB0aHJlZSBhcmd1bWVudHMsIGFzIHBlcgoJdGhlIG5ldyBIQU5ETEVfUFJBR01BIG1hY3JvIHNwZWNpZmljYXRpb24uCgkqIGNvbmZpZy9oODMwMC9oODMwMC5jIChoYW5kbGVfcHJhZ21hKTogVGFrZSB0aHJlZSBhcmd1bWVudHMsIGFzCglwZXIgdGhlIG5ldyBIQU5ETEVfUFJBR01BIG1hY3JvIHNwZWNpZmljYXRpb24uCgkqIGNvbmZpZy9pOTYwL2k5NjAuYyAocHJvY2Vzc19wcmFnbWEpOiBUYWtlIHRocmVlIGFyZ3VtZW50cywgYXMKCXBlciB0aGUgbmV3IEhBTkRMRV9QUkFHTUEgbWFjcm8gc3BlY2lmaWNhdGlvbi4KCldlZCBTZXAgIDIgMDk6MjU6MjkgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKGNoZWNrX25ld2xpbmUpOiAgQ2FsbCBIQU5ETEVfUFJBR01BIGJlZm9yZQoJSEFORExFX1NZU1ZfUFJBR01BIGlmIGJvdGggYXJlIGRlZmluZWQuICBHZW5lcmF0ZSB3YXJuaW5nIG1lc3NhZ2VzCglpZiB1bmtub3duIHByYWdtYXMgYXJlIGVuY291bnRlcmVkLgoJKGhhbmRsZV9zeXN2X3ByYWdtYSk6IEludGVycHJldCByZXR1cm4gY29kZSBmcm9tCgloYW5kbGVfcHJhZ21hX3Rva2VuICgpLiAgUmV0dXJuIHN1Y2Nlc3MvZmFpbHVyZSBpbmRpY2F0aW9uIHJhdGhlcgoJdGhhbiBuZXh0IHVucHJvY2Vzc2VkIGNoYXJhY3Rlci4gCgkocHJhZ21hX2dldGMpOiBOZXcgZnVuY3Rpb246IHJldHJpZXZlcyBjaGFyYWN0ZXJzIGZyb20gdGhlCglpbnB1dCBzdHJlYW0uICBEZWZpbmVkIHdoZW4gSEFORExFX1BSQUdNQSBpcyBlbmFibGVkLgoJKHByYWdtYV91bmdldGMpOiBOZXcgZnVuY3Rpb246IHJlcGxhY2VzIGNoYXJhY3RlcnMgYmFjayBpbnRvIHRoZQoJaW5wdXQgc3RyZWFtLiAgRGVmaW5lZCB3aGVuIEhBTkRMRV9QUkFHTUEgaXMgZW5hYmxlZC4KCQoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogUmV0dXJuIHN1Y2Nlc3MvZmFpbHVyZSBzdGF0dXMKCW9mIHRoZSBwYXJzZS4KCQoJKiBjLXByYWdtYS5oOiBDaGFuZ2UgcHJvdG90eXBlIG9mIGhhbmRsZV9wcmFnbWFfdG9rZW4oKS4KCgkqIHZhcmFzbS5jOiAoaGFuZGxlX3ByYWdtYV93ZWFrKTogT25seSBjcmVhdGUgdGhpcyBmdW5jdGlvbiBpZgoJSEFORExFX1BSQUdNQV9XRUFLIGlzIGRlZmluZWQuCgoJKiBjLWNvbW1vbixjIChkZWNsX2F0dHJpYnV0ZXMpOiBJZiBkZWZpbmVkIGNhbGwgdGhlIGV4cHJlc3Npb24KCWNvbnRhaW5lZCB3aXRoaW4gdGhlIElOU0VSVF9BVFRSSUJVVEVTIG1hY3JvIGJlZm9yZSBhZGRpbmcKCWF0dHJpYnV0ZXMgdG8gYSBkZWNsLgoKCSogdG0udGV4aSAoSEFORExFX1BSQUdNQSk6IERvY3VtZW50IHRoZSBuZXcgdmVyaW9uIG9mCglIQU5ETEVfUFJBR01BLCB3aGljaCB0YWtlcyB0aHJlZSBhcmd1bWVudHMuCgkoSU5TRVJUX0FUVFJJQlVURVMpOiBEb2N1bWVudCB0aGlzIG5ldyBtYWNyby4gIAoKCSogTEFOR1VBR0VTOiBEb2N1bWVudCB0aGUgbmV3IHZlcnNpb24gb2YgSEFORExFX1BSQUdNQSBhbmQgdGhlCgluZXcgSU5TRVJUX0FUVFJJQlVURVMgbWFjcm8uCgpXZWQgU2VwICAyIDAyOjAzOjIzIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkZik6IE9ubHkgZ2VuZXJhdGUgc3BlY2lhbCBSVEwgZm9yCglMQUJFTF9SRUZzIHdoZW4gUElDLgoJKG1vdmVfbGFiZWxfZGkpOiBSZW1vdmUKCShtb3ZkaV9waWNfbGFiZWxfcmVmLCBtb3ZkaV9oaWdoX3BpY19sYWJlbF9yZWYsCgltb3ZkaV9sb19zdW1fcGljX2xhYmVsX3JlZik6IE5ldyBwYXR0ZXJucyBmb3IgNjQtYml0IGxhYmVsCglyZWZlcmVuY2VzIHdoZW4gUElDLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQsCglBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBEb24ndCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBNRURMT1csCglvdXRwdXQgYW4gLnh3b3JkIGZvciBhbGwgNjQtYml0IGNhc2VzLgoJClR1ZSBTZXAgIDEgMTU6NTU6MTcgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoZmluYWxpemVfcGljKTogRG9uJ3Qgb3V0cHV0IGFyYml0cmFyeQoJYWxpZ25tZW50LCB1c2UgRlVOQ1RJT05fQk9VTkRBUlkgaW5zdGVhZC4KCShzcGFyY19vdXRwdXRfZGVmZXJyZWRfY2FzZV92ZWN0b3JzKTogTGlrZXdpc2UuCgpNb24gQXVnIDMxIDE3OjI1OjQxIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZzZl9jb25zdF9pbnRyZWcpOiBLaWxsIHdhcm5pbmcuCgkobW92dGZfaW5zbl9zcDY0LCBtb3Z0Zl9ub19lX2luc25fc3A2NCk6IFJlb3JkZXIgYWx0ZXJuYXRpdmVzLgoKTW9uIEF1ZyAzMSAxMzo1Nzo1NSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEvdmFfbGlzdC5oOiBOZXcgZmlsZS4KCSogYWxwaGEveC1hbHBoYSAoRVhUUkFfSEVBREVSUyk6IE5ldy4gIEFkZCB2YV9saXN0LmguCgpNb24gQXVnIDMxIDE0OjU1OjAyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE5FV1M6IEFkZCBTQ08gT3BlbnNlcnZlciBhbmQgVW5peHdhcmUgNyBub3Rlcy4KCgkqIE5FV1M6IEZpeCB0eXBvcy4KCk1vbiBBdWcgMzEgMTU6NDI6MTggMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogdmFyYXNtLmMgKGNvbXBhcmVfY29uc3RhbnRfMSk6IEhhbmRsZSBSQU5HRV9FWFBSLgoJKHJlY29yZF9jb25zdGFudF8xKTogSGFuZGxlIFJBTkdFX0VYUFIuCgpNb24gQXVnIDMxIDEwOjU0OjAzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogTk9URV9JTlNOX0xJVkUgaGFzIGFuIHJ0eCBub3QgYSBiaXRtYXAuCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emUpOiBIYW5kbGUgTk9URV9JTlNOX1JBTkdFX1NUQVJUCglhbmQgTk9URV9JTlNOX1JBTkdFX0VORCBzcGVjaWFsbHkuCgkocmVlbWl0X25vdGVzKTogTGlrZXdpc2UuCgpNb24gQXVnIDMxIDEwOjE4OjUyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHNwYXJjLmMgKFRNQVNLLCBVTUFTSyk6IFVzZSBgKHVuc2lnbmVkKTEnIG5vdCBgMVUnLgoJKHVsdHJhc3BhcmNfc2NoZWRfaW5pdCk6IFJlbW92ZSB1bm5lZWRlZCAmLgoKTW9uIEF1ZyAzMSAxMDo0NzoxNiAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoVEFSR0VUX1NXSVRDSEVTKTogRG9uJ3QgcmVtb3ZlIE1BU0tfNjgwNDAKCWZvciBtNjgwMjAtNjAsIHRvIHByZXZlbnQgdGhlIHVzZSBvZiBmaW50cnouCgpTdW4gQXVnIDMwIDIyOjE3OjIwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjb25maWd1cmUuaW46IElmIHRoZSBuYXRpdmUgY29tcGlsZXIgaXMgR0NDIHVzZSAkKFdBUk5fQ0ZMQUdTKSAKCWV2ZW4gaW4gc3RhZ2UxLiAKCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgoKU3VuIEF1ZyAzMCAyMjoxNTo0MSAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjb25maWd1cmUuaW4gKGd4eF9pbmNsdWRlX2Rpcik6IENoYW5nZWQgdG8KCScke3ByZWZpeH0vaW5jbHVkZS9nKysnLSR7bGlic3RkY3h4X2ludGVyZmFjZX0uCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBBdWcgMzAgMjA6MTk6NDMgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDaGFuZ2UgIj4iIHRvICI+PSIgbWFraW5nIE1PVkVfUkFUSU8gdXNlCgljb25zaXN0ZW50LgoJKiB0bS50ZXhpIChDb3N0cyk6IFNheSBNT1ZFX1JBVElPIGlzIG51bWJlciBvZiBtZW0tbWVtIG1vdmUKCSpzZXF1ZW5jZXMqICpiZWxvdyogd2hpY2ggc2NhbGFyIG1vdmVzIHdpbGwgYmUgdXNlZC4KClN1biBBdWcgMzAgMTc6MTg6NDMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29sbGVjdDIuYyAobWt0ZW1wKTogRGVsZXRlIHVudXNlZCBkZWNsYXJhdGlvbi4KCgkqIGNvbmZpZy94bS1uZXRic2QuaDogUmVtb3ZlIHVubmVjZXNzYXJ5IGZpbGUuCgkqIGNvbmZpZy8qL3htLW5ldGJzZC5oOiBEbyBub3QgaW5jbHVkZSB0aGUgZ2VuZXJpYyB4bS1uZXRic2QuaAoJZmlsZSBhbnltb3JlLCBpdCBpcyBub3QgbmVlZGVkLgoKU3VuIEF1ZyAzMCAxNjowNTo0NSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBJc3N1ZSBhbiBlcnJvciBvbiBjb252ZXJzaW9ucyB0bwoJaW5jb21wbGV0ZSB0eXBlcy4KClN1biBBdWcgMzAgMTY6NDc6MjAgMTk5OCAgTWFydGluIHZvbiBMdndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgbGFuZ190cmVlX2ZpbGVzIGFuZCBnZW5jaGVjay5oLgoJKiBjb25maWd1cmUuaW46IEdlbmVyYXRlIHRoZW0uCgkqIGdlbmNoZWNrLmM6IEluY2x1ZGUgZ2VuY2hlY2suaC4KClNhdCBBdWcgMjkgMjE6Mzg6MjQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHBpY19sb19zdW1fZGksIHBpY19zZXRoaV9kaSk6IFJlbmFtZSB0bwoJbW92ZGlfbG9fc3VtX3BpYyBhbmQgbW92ZGlfaGlnaF9waWMgYW5kIG1ha2UgdmlzaWJsZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBGb3IgLWZQSUMsCgllbWl0IHRoZXNlIHdoZW4gUG1vZGUgaXMgbm90IFNJbW9kZS4KCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAoU1BBUkNfREVGQVVMVF9DTU9ERUwpOiBNYWtlIENNX01FRExPVy4KClNhdCBBdWcgMjkgMTQ6NTk6MzIgMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbjMyLmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRG9uJ3QgZW1pdAoJLmxpbmtvbmNlIGRpcmVjdGl2ZSBhZnRlciB0aGUgZmlyc3QgdGltZS4KClNhdCBBdWcgMjkgMTI6Mzk6NTYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKICAgICAgICAqIG02OGsubWQgKGJlcTBfZGkpOiBHZW5lcmF0ZSBjb3JyZWN0IChhbmQgbW9yZSBlZmZpY2llbnQpIGNvZGUgd2hlbgogICAgICAgIHRoZSBjbG9iYmVyZWQgb3BlcmFuZCBvdmVybGFwcyB3aXRoIGFuIGlucHV0LgogICAgICAgIChibmUwX2RpKTogU2ltaWxhcmx5LgoKCSogTWFrZWZpbGUuaW4gKElOU1RBTEwpOiBSZW1vdmUgIi0tbm8taGVhZGVyIiBhcmd1bWVudC4KCiAgICAgICAgKiBORVdTOiBWYXJpb3VzIHVwZGF0ZXMuCgpGcmkgQXVnIDI4IDE5OjAwOjQ0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGFyaXRoX29wZXJhbmQsIGNvbnN0NjRfb3BlcmFuZCwKCWNvbnN0NjRfaGlnaF9vcGVyYW5kLCBhcml0aF9kb3VibGVfNDA5Nl9vcGVyYW5kKTogTWFyayBtb2RlIGFzCgl1bnVzZWQuCgkoY3JlYXRlX3NpbXBsZV9mb2N1c19iaXRzKTogUmVtb3ZlIHVudXNlZCBhcmcgaGlnaGVzdF9iaXRfc2V0LCBhbGwKCWNhbGxlcnMgY2hhbmdlZC4KCShzcGFyY19lbWl0X3NldF9jb25zdDY0KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgoJKHNwYXJjX3NwbGl0ZGlfbGVnaXRpbWF0ZSk6IExpa2V3aXNlIGZvciBhZGRyX3BhcnQuCgkodWx0cmFfY29kZV9mcm9tX21hc2spOiBMaWtld2lzZSBmb3IgbWFzay4KCSh1bHRyYV9jbW92ZV9yZXN1bHRzX3JlYWR5X3ApOiBGaXh1cCBlbnRyeSBtb2R1bG8gY2FsYy4gYW5kCglyZXZlcnNlIHJldHVybiB2YWx1ZXMgc28gaXQgbWF0Y2hlcyB1c2FnZSBhbmQgY29tbWVudHMuCgkodWx0cmFfZmx1c2hfcGlwZWxpbmUpOiBMaWtld2lzZS4KCSh1bHRyYV9mcG1vZGVfY29uZmxpY3RfZXhpc3RzKTogTGlrZXdpc2UsIHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCXRoaXNfdHlwZSwgYW5kIGFsbG93IGxvYWRzIGFuZCBzdG9yZXMgb2YgZGlmZmVyaW5nIEZQIG1vZGVzIGFzCgl0aGV5IGRvIG5vdCBjcmVhdGUgYSBjb25mbGljdC4KCSh1bHRyYV9maW5kX3R5cGUpOiBJbml0aWFsaXplIGZwbW9kZSB0byBTRm1vZGUsIGZpeAoJcGFyZW50aGVzaXphdGlvbiB0aGlua29zIGluIGxhcmdlIGNvbmRpdGlvbmFsLgoJKHVsdHJhc3BhcmNfc2NoZWRfaW5pdCk6IE1hcmsgZHVtcCBhbmQgc2NoZWRfdmVyYm9zZSBhcyB1bnVzZWQuCglJbml0IGZyZWVfc2xvdF9tYXNrIGFmdGVyIHVsdHJhX2N1cl9oaXN0IGlzIHJlc2V0LCBub3QgYmVmb3JlLgoJKHVsdHJhc3BhcmNfcmVzY2FuX3BpcGVsaW5lX3N0YXRlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSB1Y29kZS4KCSh1bHRyYXNwYXJjX3NjaGVkX3Jlb3JkZXIpOiBEb24ndCBiemVybyBjdXJyZW50IHBpcGVsaW5lIHN0YXRlLAoJdXNlIHVsdHJhX2ZsdXNoX3BpcGVsaW5lIGluc3RlYWQsIHRoZW4gcmUtaW5pdCBncm91cCBwb2ludGVyLgoJRml4IHN0YXRlbWVudCB3aXRoIG5vIGVmZmVjdC4gIElmIG5vIHByb2dyZXNzIG1hZGUgaW4sIGFuZCBubwoJaW5zdHJ1Y3Rpb25zIHNjaGVkdWxlZCBhdCBhbGwsIGFkdmFuY2UgdG8gbmV3IHBpcGVsaW5lIGN5Y2xlIGVsc2UKCXdlIGdldCBpbnRvIGFuIGVuZGxlc3MgbG9vcC4KCSh1bHRyYXNwYXJjX2FkanVzdF9jb3N0KTogUmVtb3ZlIHByZXZpb3VzIGFyZy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEFESlVTVF9DT1NUKTogVXBkYXRlIHRvIHJlZmxlY3QgdGhhdC4KCQpGcmkgQXVnIDI4IDEzOjUyOjM1IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHNwYXJjLm1kIChESW1vZGUsIERGbW9kZSwgVEZtb2RlIHNwbGl0cyk6IERlbGV0ZSBzZWxmX3JlZmVyZW5jZQoJY29kZS4gIFVzZSByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCB0byBkZXRlY3Qgd2hlbiBzb3VyY2UgYW5kCglkZXN0aW5hdGlvbiBvdmVybGFwLgoJKG5lZ3RmMl9ub3R2OSsxKTogVXNlIERGbW9kZSBpbnN0ZWFkIG9mIFNGbW9kZSBpbiBsYXN0IHR3byBvcGVyYW5kcy4KCjE5OTgtMDgtMjggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFBhc3MgQ09NUEFSSVNPTl9WQUxVRSwgbm90CglDT01QQVJJU09OX1ZBTCwgaW50byBpbnZhcmlhbnRfcC4KCkZyaSBBdWcgMjggMTU6MTM6MjUgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKICAgICAgICAqIHJlZ21vdmUuYyAocmVnY2xhc3NfY29tcGF0aWJsZV9wKTogTmV3IGZ1bmN0aW9uLgogICAgICAgIChyZWdtb3ZlX29wdGltaXplKTogVXNlIGl0LgoKICAgICAgICBVc2UgTlJFR1MgcGFyYW1ldGVyIGluc3RlZCBvZiBjYWxsaW5nIG1heF9yZWdfbnVtLgoKICAgICAgICAoZml4dXBfbWF0Y2hfMSk6IERvbid0IHVzZSBjb2RlID0gTUlOVVMgd2hlbiBsYXRlciB0aWVpbmcgd2l0aAogICAgICAgIGEgaGFyZCByZWdpc3RlciBpcyBsaWtlbHkuCgpGcmkgQXVnIDI4IDE0OjU0OjA3IDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRml4IGNhbGN1bGF0aW9uIG9mIEZJTkFMX1ZBTFVFIHdoZW4KCUNPTVBBUklTT05fVkFMIHdhcyBub3JtYWxpemVkLgoKVGh1IEF1ZyAyNyAyMDoxMDo0NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFRoZSBsb29wIGVuZGluZyBjb21wYXJpc29uIHZhbHVlCgltdXN0IGJlIGFuIGludmFyaWFudCBvciB3ZSBjYW4gbm90IHJldmVyc2UgdGhlIGxvb3AuCgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IENvdW50IGRvd24gZnJvbSBtYXhfcmVnX251bSAtIDEgdG8KCUZJUlNUX1BTRVVET19SRUdJU1RFUiB0byBhdm9pZCBjYWxsaW5nIG1heF9yZWdfbnVtIGVhY2ggaXRlcmF0aW9uCglvZiB0aGUgbG9vcC4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IExpa2V3aXNlLgoKCSogaTM4Ni5jIChwcmludF9vcGVyYW5kKTogUmVtb3ZlIG9ic29sZXRlICdjJyBkb2NzLgoKV2VkIEF1ZyAyNiAxNzoxMzozNyAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBndGhyLmg6IERvY3VtZW50IF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OLgoJKiBmcmFtZS5jIChpbml0X29iamVjdF9tdXRleCk6IE5ldyBmdW5jdGlvbi4KCShpbml0X29iamVjdF9tdXRleF9vbmNlKTogTGlrZXdpc2UuCgkoZmluZF9mZGUpOiBDYWxsIGl0LgoJKF9fcmVnaXN0ZXJfZnJhbWVfaW5mbyk6IExpa2V3aXNlLgoJKF9fcmVnaXN0ZXJfZnJhbWVfaW5mb190YWJsZSk6IExpa2V3aXNlLgoJKF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvKTogTGlrZXdpc2UuCgpUaHUgQXVnIDI3IDE1OjE0OjE4IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbik6IEZpeCB0aGlua28gaW4gbGFzdCBjaGFuZ2UuCgpUaHUgQXVnIDI3IDE2OjM0OjUxIDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRW5hYmxlIGNvZGUgZm9yIHJldmVyc2FsCglvZiBzb21lIGxvb3BzIHdpdGhvdXQgYSBrbm93biBjb25zdGFudCBsb29wIGVuZC4KCldlZCBBdWcgMjYgMTg6Mzg6MTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBoYWlmYS1zY2hlZC5jIChsYXN0X2Nsb2NrX3Zhcik6IE5ldy4KICAgICAgICAoc2NoZWR1bGVfYmxvY2spOiBJbml0aWFsaXplIGl0LgogICAgICAgIChzY2hlZHVsZV9pbnNuKTogVXNlIGl0IHRvIGZpbGwgaW5zbiBtb2RlcyB3aXRoIGlzc3VlIGluZm9ybWF0aW9uLgoKCSogYWxwaGEuYyAoYWxwaGFfaGFuZGxlX3RyYXBfc2hhZG93cyk6IFJlbW92ZSBkby1ub3RoaW5nIGV4aXQuCglUYWcgdHJhcGIgYW5kIG5leHQgaW5zbiB3aXRoIFRJbW9kZS4KCShhbHBoYWV2NV9pbnNuX3BpcGUsIGFscGhhZXY1X25leHRfZ3JvdXAsIGFscGhhZXY1X2FsaWduX2luc25zKTogTmV3LgoJKGFscGhhX3Jlb3JnKTogQWRkIGNvbmRpdGlvbmFsIGZvciBhbHBoYV9oYW5kbGVfdHJhcF9zaGFkb3dzLgoJSW52b2tlIGFscGhhZXY1X2FsaWduX2luc25zIGFzIGFwcHJvcHJpYXRlLgoJKiBhbHBoYS5oIChMQUJFTF9BTElHTl9BRlRFUl9CQVJSSUVSKTogV2FzIEFMSUdOX0xBQkVMX0FGVEVSX0JBUlJJRVIuCgkoTURfU0NIRURfVkFSSUFCTEVfSVNTVUUpOiBOZXcuCgkqIGFscGhhLm1kIChhdHRyIHR5cGUpOiBBZGQgbXVsdGkuCgkoZGVmaW5lX2FzbV9hdHRyaWJ1dGVzKTogTmV3LgoJKHByb2xvZ3VlX3N0YWNrX3Byb2JlX2xvb3AsIGJ1aWx0aW5fc2V0am1wX3JlY2VpdmVyKTogU2V0IHR5cGUgbXVsdGkuCgkoYXJnX2hvbWUpOiBMaWtld2lzZS4KCShmbm9wLCB1bm9wLCByZWFsaWduKTogTmV3LgoKV2VkIEF1ZyAyNiAxNTo1NTo0MSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpcmlzNS5oIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBVbmRlZi4KCSogaXJpczVnYXMuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lLgoKCSogY29uZmlndXJlLmluIChwb3dlcnBjLWlibS1haXg0LlsxMl0qKTogQ2hhbmdlIGZyb20gNC5bMTJdLiouCgkocnM2MDAwLWlibS1haXg0LlsxMl0qKTogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVnbmVyYXRlLgoKV2VkIEF1ZyAyNiAwOTozMDo1OSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5jICh0aHVtYl9leGl0KTogRG8gbm90IG1vdmUgYTQgaW50byBsciBpZiBpdAoJYWxyZWFkeSBjb250YWlucyB0aGUgcmV0dXJuIGFkZHJlc3MuCgpXZWQgQXVnIDI2IDEyOjU3OjA5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogVXNlIGJpdGZpZWxkIGluc3RydWN0aW9ucyB0byBleHRyYWN0L2RlcG9zaXQKCXdvcmQgc2l6ZWQgaHVua3Mgd2hlbiBsb2FkaW5nIHVuYWxpZ25lZCBhcmdzIGludG8gcmVnaXN0ZXJzLgoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogT25seSBjcmVhdGUgc2NoZWR1bGluZwoJYmFycmllcnMgZm9yIExPT1AsIEVIIGFuZCBTRVRKTVAgbm90ZXMgb24gdGhlIGxvb3Bfbm90ZXMgbGlzdC4KCgkqIG1uMTAzMDAuaCAoUlRYX0NPU1RTKTogSGFuZGxlIFVESVYgYW5kIFVNT0QgdG9vLgoKV2VkIEF1ZyAyNiAxNjozNTozNyAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEFkZCBzb21lIGNvZGUgdGhhdCB3b3VsZCBhbGxvdyByZXZlcnNhbAoJb2Ygc29tZSBsb29wcyB3aXRob3V0IGEga25vd24gY29uc3RhbnQgbG9vcCBlbmQgaWYgaXQgd2VyZSBlbmFibGVkLgoKV2VkIEF1ZyAyNiAxMTowODo0NCAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIG1pcHMubWQgKGxzaHJzaTNfaW50ZXJuYWwyKzIpOiBGaXggdHlwZS1vLgoKV2VkIEF1ZyAyNiAxMDo1MzowMyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBzdGRhcmcuaC92YXJhcmdzLmgsIG1ha2Ugc3VyZSB0aGV5IGFyZSBvcmRlcmVkCiAJY29ycmVjdGx5IHdpdGggcmVnYXJkcyB0byBzdGRpby5oLgoJCgkqIGNhbGxzLmM6IFJlbW92ZSBzdGRhcmcuaC92YXJhcmdzLmguCgkqIGNjY3AuYzogTGlrZXdpc2UuCgkqIGNleHAueTogTGlrZXdpc2UuCgkqIGNvbWJpbmUuYzogTGlrZXdpc2UuCgkqIGNwcGVycm9yLmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4KCSogZG9wcmludC5jOiBMaWtld2lzZS4KCSogZW1pdC1ydGwuYzogTGlrZXdpc2UuCgkqIGZpbmFsLmM6IExpa2V3aXNlLgoJKiBmaXgtaGVhZGVyLmM6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHIuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYzogTGlrZXdpc2UuCgkqIGdlbmNvZGVzLmM6IExpa2V3aXNlLgoJKiBnZW5jb25maWcuYzogTGlrZXdpc2UuCgkqIGdlbmVtaXQuYzogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYzogTGlrZXdpc2UuCgkqIGdlbmZsYWdzLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYzogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYzogTGlrZXdpc2UuCgkqIG1pcHMtdGZpbGUuYzogTGlrZXdpc2UuCgkqIHByZWZpeC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHJlZ21vdmUuYzogTGlrZXdpc2UuCgkqIHRvcGxldi5jOiBMaWtld2lzZS4KCSogdHJlZS5jOiBMaWtld2lzZS4KCldlZCBBdWcgMjYgMDU6MDk6MjcgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IElmIG5vdAoJVEFSR0VUX0ZQVSwgdHVybiBvZmYgVEFSR0VUX1ZJUy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBuby12aXMuCgkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWxsb3cgU0YvREYgbW9kZSB6ZXJvIHdoZW4gVEFSR0VUX1ZJUy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZzaV9pbnNuKTogVXNlIGZ6ZXJvcyBub3QgZnplcm8uCgkobW92ZGlfaW5zbl9zcDY0KTogQWRkIFZJUyBmemVybyBhbHRlcm5hdGl2ZS4KCShjbGVhcl9zZiwgY2xlYXJfZGYpOiBOZXcgVklTIHBhdHRlcm5zLgoJKG1vdnNmLCBtb3ZkZiBleHBhbmRlcnMpOiBBbGxvdyBmcF96ZXJvX29wZXJhbmQgZmxhdCBvdXQgd2hlbgoJVEFSR0VUX1ZJUy4KCShvbmVfY21wbGRpMl9zcDY0KTogUHJvdmlkZSBuZXcgZm5vdDEgVklTIGFsdGVybmF0aXZlLgoJClR1ZSBBdWcgMjUgMTA6NTc6NDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGxvb3AuYyAobl90aW1lc19zZXQsIG5fdGltZXNfdXNlZCwgbWF5X25vdF9vcHRpbWl6ZSwKCXJlZ19zaW5nbGVfdXNhZ2UpOiBDb252ZXJ0IHRvIHZhcnJheXMuICBBbGwgdXNlcyBjaGFuZ2VkLgoJKGluc2VydF9sb29wX21lbSk6IFJldHVybiBhIHZhbHVlLgoJKHNjYW5fbG9vcCk6IFR3ZWFrIEFWT0lEX0NDX01PREVfQ09QSUVTIGNvZGUuCgkobG9hZF9tZW1zX2FuZF9yZWNvdW50X2xvb3BfcmVnc19zZXQpOiBMaWtld2lzZS4gIEdyb3cgdGhlIGFycmF5cywgaWYKCW5lY2Vzc2FyeS4KClR1ZSBBdWcgMjUgMjM6NTc6MTIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogRnJvbSBBbGV4YW5kcmU6CgkqIGNvbmZpZ3VyZS5pbjogRG8gbm90IHNldCB0aHJlYWRfZmlsZSB0byAiaXJpeCIgc2luY2Ugbm8gc3VjaAoJc3VwcG9ydCBleGlzdHMgeWV0LgoKCSogc3BhcmMubWQgKGZsb2F0IGFicy9uZWcgc3BsaXRzKTogQ2hlY2sgcmVsb2FkX2NvbXBsZXRlZCBiZWZvcmUKCWNhbGxpbmcgYWx0ZXJfc3VicmVnLgoKVHVlIEF1ZyAyNSAxOToxNzo1OSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19hYnNuZWdmbG9hdF9zcGxpdF9sZWdpdGltYXRlKTogTmV3CglmdW5jdGlvbi4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IERlY2xhcmUgaXQuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZmxvYXQgYWJzL25lZyBzcGxpdHMpOiBVc2UgaXQuCgkoYWxsIG90aGVyIHNwbGl0cyk6IEhhbmRsZSBTVUJSRUdzIHByb3Blcmx5IHdoZXJlIG5lY2Vzc2FyeS4KCSh1bm5hbWVkICgxPDx4KS0xIFY4UExVUyBwYXR0ZXJuKTogRGlzYWJsZSBmb3Igbm93LgoKVHVlIEF1ZyAyNSAxOTo0ODo0NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZW9yZy5jIChmaWxsX3NpbXBsZV9kZWxheV9zbG90cyk6IERvIG5vdCBhYm9ydCBpZiB3ZSBlbmNvdW50ZXIKCWFuIGluc24gb24gdGhlIHVuZmlsbGVkX3Nsb3RzX2xpc3QgdGhhdCBoYXMgbm8gZGVsYXkgc2xvdHMuCgkoZmlsbF9lYWdlcl9kZWxheV9zbG90cyk6IFNpbWlsYXJseS4KClR1ZSBBdWcgMjUgMTM6MzU6MjAgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuYyAobW92c2lfc291cmNlX29wZXJhbmQpOiBUcmVhdCBDT05TVEFOVF9QX1JUWAoJYXMgYW4gb3JkaW5hcnkgb3BlcmFuZC4KClR1ZSBBdWcgMjUgMTI6NTQ6NTcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jICh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IERvbid0IGFwcGx5IGF0dHJpYnV0ZXMgdG8gYm90aAoJZGVjbCBhbmQgdHlwZS4KClR1ZSBBdWcgMjUgMTI6MjM6MjAgUERUIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgogICAgICAgICogcmVsb2FkLmMgKG9wZXJhbmRzX21hdGNoX3ApOiBIYW5kbGUgcnR2ZWNzLgoKICAgICAgICAqIGkzODYuYyAobGVnaXRpbWF0ZV9waWNfYWRkcmVzc19kaXNwX3ApOiBOZXcuCiAgICAgICAgKGxlZ2l0aW1hdGVfYWRkcmVzc19wKTogVXNlIGl0LgogICAgICAgIChsZWdpdGltaXplX3BpY19hZGRyZXNzKTogVXNlIHVuc3BlY3MgdG8gcmVwcmVzZW50IEBHT1QgYW5kIEBHT1RPRkYuCiAgICAgICAgSGFuZGxlIGNvbnN0YW50IHBvb2wgc3ltYm9scyBqdXN0IGxpa2Ugc3RhdGljcy4KICAgICAgICAoZW1pdF9waWNfbW92ZSk6IFVzZSBQbW9kZSBub3QgU0ltb2RlIGZvciBjbGFyaXR5LgogICAgICAgIChvdXRwdXRfcGljX2FkZHJfY29uc3QpIFtTWU1CT0xfUkVGXTogUmVtb3ZlIEBHT1QgYW5kIEBHT1RPRkYgaGFja3MuCiAgICAgICAgW1VOU1BFQ106IE5ldywgaGFuZGxpbmcgd2hhdCB3ZSBraWxsZWQgYWJvdmUuCiAgICAgICAgW1BMVVNdOiBEZXRlY3QgYW5kIGFib3J0IG9uIGludmFsaWQgc3ltYm9sIGFyaXRobWV0aWMuCiAgICAgICAgKiBpMzg2LmggKENPTlNUQU5UX0FERFJFU1NfUCk6IFJlbW92ZSBISUdILgoKVHVlIEF1ZyAyNSAxMjowMjoyMyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYWxpYXMuYzogSW5jbHVkZSBvdXRwdXQuaC4KCShESUZGRVJFTlRfQUxJQVNfU0VUU19QKTogRG9uJ3QgdHJlYXQgYWxpYXMgc2V0cyBhcwoJZGlmZmVyZW50IGlmIHdlJ3JlIGluIGEgdmFyYXJncyBmdW5jdGlvbi4KCSogTWFrZWZpbGUuaW4gKGFsaWFzLm8pOiBEZXBlbmQgb24gb3V0cHV0LmgKCQpUdWUgQXVnIDI1IDE5OjIwOjEyIDE5OTggIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmggKEdJVl9TT1JUX0NSSVRFUklPTik6IERlbGV0ZS4KClR1ZSBBdWcgMjUgMTM6MTk6NDYgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBVc2UgeG1hbGxvYy9mcmVlIGluc3RlYWQgb2YgYWxsb2NhLgoJKiBzdHVwaWQuYyAoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBEaXR0by4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEaXR0by4KClR1ZSBBdWcgMjUgMDU6NDg6MTggMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoYXJpdGhfNDA5Nl9vcGVyYW5kLCBhcml0aF9hZGRfb3BlcmFuZCwKCWFyaXRoX2RvdWJsZV80MDk2X29wZXJhbmQsIGFyaXRoX2RvdWJsZV9hZGRfb3BlcmFuZCk6IE5ldwoJcHJlZGljYXRlcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCB0aGVtLCBkZWNsYXJlIHRoZW0uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoYWRkZGkzLCBhZGRzaTMsIHN1YmRpMywgc3Vic2kzKTogVXNlCgl0aGVtIHRvIHRyYW5zZm9ybSBhZGQvc3ViIDQwOTYgaW50byBhZGQvc3ViIC00MDk2LgoKTW9uIEF1ZyAyNCAyMzozMTowMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQWxsb2NhdGUgc29tZSBzbG9wIHRvIGhhbmRsZSBwc2V1ZG9zCglnZW5lcmF0ZWQgYnkgbW92ZV9tb3ZhYmxlcy4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IEhvbm9yIEFWT0lEX0NDX01PREVfQ09QSUVTCgloZXJlIHRvby4KCk1vbiBBdWcgMjQgMTk6NDU6NDAgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKERFQ0xfUkVTVUxUKTogQ29ycmVjdCBkb2N1bWVudGF0aW9uLgoKVHVlIEF1ZyAyNSAwMToxNToyNyAxOTk4ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCk6IE5ldyBhcmd1bWVudCBFUVVJVjsgIENoYW5nZWQKCWFsbCBjYWxsZXJzLiAgQWJvcnQgZm9yIFJFTE9BRF9GT1JfSU5TTi4gIFJFTE9BRF9GT1JfT1VUQUREUl9BRERSOgoJY29uZmxpY3RzIHdpbGwgYWxsIFJFTE9BRF9GT1JfT1VUUFVUIHJlbG9hZHMuCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2VfcmVnc18xKTogV2hlbiBkZWxldGluZyBhIG5vLW9wIG1vdmUgdGhhdAoJbG9hZHMgdGhlIGZ1bmN0aW9uIHJlc3VsdCwgc3Vic3RpdHV0ZSB3aXRoIGEgVVNFLgoKTW9uIEF1ZyAyNCAxNToyMDoxOSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogVXNlIFRBUkdFVF9QT1dFUlBDNjQKCXdoZW4gdGVzdGluZyBMRUdJVElNQVRFX0lOREVYRURfQUREUkVTU19QIERGbW9kZSBhbmQgREltb2RlLgoJKExFR0lUSU1JWkVfQUREUkVTUyk6IFVzZSBUQVJHRVRfUE9XRVJQQzY0IGZvciBJTkRFWEVEIGZpeHVwLgoJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCwgY2FzZSAnTCcpOiBBZGQgVU5JVFNfUEVSX1dPUkQsIG5vdCA0LgoJKHByaW50X29wZXJhbmQsIGNhc2VzICdPJyBhbmQgJ1QnKTogRml4IHR5cG9zIGluIGxvc3NhZ2Ugc3RyaW5ncy4KCSogcnM2MDAwLm1kIChmaXhfdHJ1bmNkZnNpMl9zdG9yZSk6IFJlbW92ZSAldyBmcm9tIG5vbi1DT05TVF9JTlQKCW9wZXJhbmQuIAoJKG1vdmRmX3NvZnRmbG9hdDMyLCBtb3ZkZl9oYXJkZmxvYXQ2NCwgbW92ZGZfc29mdGZsb2F0NjQpOiBDaGFuZ2UKCSdvJyB0byAnbScgZm9yIEdQUiB2YXJpYW50IGNvbnN0cmFpbnRzLgoKTW9uIEF1ZyAyNCAxMDoyNTo0NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgogICAgICAgICogbG9vcC5jIChzY2FuX2xvb3ApOiBIb25vciBBVk9JRF9DQ19NT0RFX0NPUElFUy4KCgkqIGg4MzAwLmggKFNUUklQX05BTUVfRU5DT0RJTkcpOiBGaXggdHlwby4KCgkqIHNwYXJjLm1kIChURm1vZGUgc3BsaXRzKTogVXNlIHJlZ19vdmVybGFwX21lbnRpb25lZF9wIHRvIGRldGVjdAoJd2hlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvdmVybGFwLgoKCSogc3RtdC5jIChlbWl0X2Nhc2Vfbm9kZXMpOiBDaGFuZ2UgcnR4X2Z1bmN0aW9uIHRvIHJ0eF9mbiB0byBhdm9pZAoJY2xhc2ggd2l0aCBnbG9iYWwgdHlwZS4KCk1vbiBBdWcgMjQgMDA6NTM6NTMgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZml4aW5jLmlyaXg6IEFkZCBjdXJzZXMuaCBoYW5kbGluZyBmcm9tIGZpeGluYy53cmFwLgoKCSogYy1jb21tb24uYyAoY29tYmluZV9zdHJpbmdzKTogQWxzbyBzZXQgVFJFRV9SRUFET05MWS4KCUNoYW5nZSB3YXJuX3dyaXRlX3N0cmluZ3MgdG8gZmxhZ19jb25zdF9zdHJpbmdzLgoJKiBjLWRlY2wuYywgYy10cmVlLmg6IExpa2V3aXNlLgoKU3VuIEF1ZyAyMyAxODozOToxMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19lbWl0X3NldF9jb25zdDMyKTogSWYgb3V0cHV0dGluZyBhCglDT05TVF9JTlQsIG5vdCBhIHN5bWJvbGljIHJlZmVyZW5jZSwgZG9uJ3QgdXNlIGEgSElHSC9MT19TVU0KCXNlcXVlbmNlLCB1c2UgU0VUL0lPUiBpbnN0ZWFkIHNvIENTRSBjYW4gc2VlIGl0LgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdmhpX2NvbnN0NjRfc3BlY2lhbCwKCW1vdnNpX2NvbnN0NjRfc3BlY2lhbCk6IE5ldyBwYXR0ZXJucyBuZWNlc3NpdGF0ZWQgYnkgdGhhdCBjaGFuZ2UuCgkobW92aGlfaGlnaCk6IFJlbW92ZS4KCShtb3ZoaV9sb19zdW0pOiBDaGFuZ2UgdG8gbWF0Y2ggYW4gSU9SLgoJKG1vdmRmX2luc25fc3AzMik6IFRlc3QgVEFSR0VUX1Y5IG5vdCBUQVJHRVRfQVJDSDY0LgoJKG1vdmRmX2luc25fdjlvbmx5KTogTmV3IHBhdHRlcm4gZm9yIHdoZW4gVjkgYnV0IG5vdCBBUkNINjQuCgkobW92ZGZfaW5zbl9zcDY0KTogVGVzdCBib3RoIFRBUkdFVF9WOSBhbmQgVEFSR0VUX0FSQ0g2NC4KCShtb3ZkZiBzcGxpdHMpOiBBbGxvdyB3aGVuIG5vdCBWOSBvciB3aGVuIG5vdCBBUkNINjQgYW5kIGludGVnZXIKCXJlZ2lzdGVycyBhcmUgaW52b2x2ZWQuCgkoc25lc2lfemVyb19leHRlbmQgc3BsaXQpOiBSZW1vdmUgcmVsb2FkX2NvbXBsZXRlZCB0ZXN0LgoJKHVubmFtZWQgcGx1cyBhbmQgbWludXMgemVyb19leHRlbmQgc2lkaSBzcGxpdHMpOiBBZGQgaXQuCgpTdW4gQXVnIDIzIDExOjU2OjA4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBleHRlbmQudGV4aTogUmVtb3ZlIGRlc2NyaXB0aW9uIG9mIGV4dGVuc2lvbiB0byBleHBsaWNpdAoJaW5zdGFudGlhdGlvbiB0aGF0IGlzIG5vdyBlbmRvcnNlZCBieSBzdGFuZGFyZCBDKysuCgpTdW4gQXVnIDIzIDA5OjM5OjA5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL2FyYy9hcmMuYyAoYXJjX2luaXRpYWxpemVfcGljKTogUmVtb3ZlLgoJKiBjb25maWcvYXJjL2FyYy5oIChJTklUSUFMSVpFX1BJQyk6IFNpbWlsYXJseSwgdGhpcyByb3V0aW5lIGRvZXMKCW5vdGhpbmcgb24gYW55IHBsYXRmb3JtIGFuZCBpcyBpbnZva2VkIGJ5IG5vLW9uZSwgaXQgZG9lcyBub3QgZXZlbgoJYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoSU5JVElBTElaRV9QSUMpOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGluaXRpYWxpemVfcGljKTogTGlrZXdpc2UuCgkoZmluZF9hZGRyX3JlZyk6IFJlbW92ZSB0aGlzIGFzIHdlbGwsIG5vIGxvbmdlciByZWZlcmVuY2VkIGFmdGVyCglteSByZXdyaXRlLgoKU3VuIEF1ZyAyMyAwMDoxNzoxNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWNvZy5jICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF9ncm91cCk6IE5ldyBmdW5jdGlvbi4KCSogcmVjb2cuaCAodmFsaWRhdGVfcmVwbGFjZV9ydHhfZ3JvdXApOiBEZWNsYXJlIGl0LgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzMpOiBJZiBhbnkgc3Vic3RpdHV0aW9uIGZhaWxzLCB0aGVuIHVuZG8KCXRoZSBlbnRpcmUgZ3JvdXAgb2Ygc3Vic3RpdHV0aW9ucy4KClNhdCBBdWcgMjIgMjM6MzE6MDAgMTk5OCAgS2xhdXMtR2VvcmcgQWRhbXMgIChLbGF1cy1HZW9yZy5BZGFtc0BjaGVtaWUudW5pLWthcmxzcnVoZS5kZSkKCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogRml4IGluaXRpYWxpemVycy4KCkZyaSBBdWcgMjEgMjM6MDc6NDYgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKFRGbW9kZSBzcGxpdHMpOiBIYW5kbGUgZGVzdGluYXRpb24KCXJlZ2lzdGVycyBiZWluZyByZWZlcmVuY2VkIGluIHRoZSBhZGRyZXNzIGNvcnJlY3RseS4KCgkqIGV4cG1lZC5jIChtYWtlX3RyZWUpIFtDT05TVF9JTlRdOiBTaWduIGV4dGVuZCBldmVuIGlmCglUUkVFX1VOU0lHTkVELCB3aGVuIGJpdHNpemUgb2YgdHlwZSdzIG1vZGUgaXMgbGFyZ2VyIHRoYW4KCUhPU1RfQklUU19QRVJfV0lERV9JTlQuCgpGcmkgQXVnIDIxIDE5OjMxOjMxIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoTEFCRUxFRF9CTE9DS19FWFBSLCBFWElUX0JMT0NLX0VYUFIpOiBOZXcgdHJlZSBub2Rlcy4KICAJKiB0cmVlLmggKExBQkVMRURfQkxPQ0tfTEFCRUwsIExBQkVMRURfQkxPQ0tfQk9EWSwKIAlFWElUX0JMT0NLX0xBQkVMRURfQkxPQ0ssIEVYSVRfQkxPQ0tfUkVUVVJOLCBMT09QX0VYUFJfQk9EWSk6IE5ldwogCW1hY3Jvcy4KCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBMQUJFTEVEX0JMT0NLX0VYUFIgYW5kCiAJRVhJVF9CTE9DS19FWFBSLgoKVGh1IEF1ZyAyMCAxOTo0Mzo0NCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5jIChoODMwMF9lbmNvZGVfbGFiZWwpOiBVc2UgJyYnIGZvciB0aW55IGRhdGEgaXRlbXMuCgkqIGg4MzAwLmggKFRJTllfREFUQV9OQU1FX1ApOiBMaWtld2lzZS4KCShTVFJJUF9OQU1FX0VOQ09ESU5HKTogSGFuZGxlICcmJy4KCgkqIG1uMTAyMDAuaCAoUkVHX09LX0ZPUl9JTkRFWF9QKTogRG8gbm90IGNoZWNrIHRoZSBtb2RlIG9mIHRoZQoJcmVnaXN0ZXIgKGl0IGNvdWxkIGJlIGFjY2Vzc2VkIHZpYSBhbiBvdXRlciBTVUJSRUcpLgoJKFJFR19PS19GT1JfQkFTRV9QKTogTGlrZXd3aXNlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IENvbnNpc3RlbnRseSB1c2UgUkVHTk9fT0tfRk9SX0JBU0VfUC4KCgkqIHJlbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogQWJvcnQgaW5zdGVhZCBvZiBzaWxlbnRseSBnZW5lcmF0aW5nCglib2d1cyBydGwuCgoJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3ApOiBEbyBub3QgY29uc2lkZXIgUExVUyBjb21tdXRhdGl2ZS4KClRodSBBdWcgMjAgMTc6MzU6MjAgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnRmX2luc25fc3AzMik6IEFsbCBtZW1vcnkgb3BlcmFuZHMKCW11c3QgYmUgb2Zmc2V0dGFibGUgc28gdGhlIHNwbGl0cyBjYW4gYmUgbWFkZS4KClRodSBBdWcgMjAgMTM6NTY6NTMgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni93aW5udC5jOiBJbmNsdWRlIHN5c3RlbS5oLCBub3Qgc3RkaW8uaCB0byBnZXQKCXN5cy9wYXJhbS5oIHB1bGxlZCBpbiBiZWZvcmUgcnRsLmggaW4gY2FzZSB0aGUgc3lzdGVtIGRlZmluZXMgTUlOCglhbmQgTUFYLgoKVGh1IEF1ZyAyMCAxMzo0NDoyMCAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdnFpLCBtb3ZoaSk6IEFkZCBDT05TVEFOVF9QX1JUWC4KClRodSBBdWcgMjAgMTM6MTU6MTEgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBDb21wdXRlIFRZUEVfU0laRV9VTklUIGNvcnJlY3RseSBmb3IKCWFycmF5cyBvZiBiaXRzLgoJKiBjcHBsaWIuYyAoY3BwX2RlZmluZSk6IEhhbmRsZSBtYWNyb3Mgd2l0aCBwYXJhbWV0ZXJzLgoKV2VkIEF1ZyAxOSAyMTozMzoxOSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAocnM2MDAwX291dHB1dF9sb2FkX3RvY190YWJsZSk6IFVzZSBsZCBmb3IgNjQtYml0LgoJKG91dHB1dF90b2MpOiBVc2Ugc2luZ2xlIFRPQyBzbG90IG9yIGxsb25nIG1pbmltYWwtdG9jIGZvciBERm1vZGUKCWFuZCBESW1vZGUgNjQtYml0LiAgVXNlIGxsb25nIGZvciBtaW5pbWFsLXRvYyBTRm1vZGUgYW5kCglTWU1CT0xfUkVGIC8gTEFCRUxfUkVGIDY0LWJpdC4KCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBVc2UgbGxvbmcgZm9yIHByb2ZpbGVyIGxhYmVsIGFuZCBsZCB0bwoJbG9hZCA2NC1iaXQgbGFiZWwgYWRkcmVzcy4KCldlZCBBdWcgMTkgMTc6NTI6MjcgMTk5OCAgTmljayBDbGlmdG9uICAobmlja2NAY3lnbnVzLmNvbSkKCiAgICAgICAgKiBjb25maWcvYXJtL3RodW1iLm1kIChleHRlbmRxaXNpMl9pbnNuKTogQ29wZSB3aXRoIFJFRyArCiAgICAgICAgT0ZGU0VUIGFkZHJlc3NpbmcuCgpXZWQgQXVnIDE5IDE0OjEzOjMxIFBEVCAxOTk4IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKV2VkIEF1ZyAxOSAxMzoxMDozMCBQRFQgMTk5OCBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCldlZCBBdWcgMTkgMTM6MDY6NDcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29sbGVjdDIuYyAoZXh0cmFjdF9pbml0X3ByaW9yaXR5KTogVXNlIGF0b2kgaW5zdGVhZCBvZiBzdHJ0b3VsLgoKV2VkIEF1ZyAxOSAxMzo1MTozNSAxOTk4ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogdG0udGV4aSAoTWlzYyk6IEZpeCB0eXBvICJ0ZWgiLgoKCSogdG0udGV4aSAoUElDKTogRml4IHR5cG8gIlBQSUMiLgoKCSogdG0udGV4aSAoQ2FsbGVyIFNhdmVzKTogU2F5IHRoYXQgREVGQVVMVF9DQUxMRVJfU0FWRVMgaGFzIG5vCgllZmZlY3Qgd2hlbiAtTzIgYW5kIGhpZ2hlci4KCSogaW52b2tlLnRleGkgKE9wdGltaXplIE9wdGlvbnMpOiBMaWtld2lzZSBmb3IgLWZjYWxsZXItc2F2ZXMuCgoxOTk4LTA4LTE5ICBNaWNoYWVsIEhheWVzICA8bWljaGFlbGhAb25nYW9uZ2EuY2hjaC5jcmkubno+CgoJKiByZWdjbGFzcy5jOiBDaGFuZ2VkIHJlZ2lzdGVyIHNldCBkb2N1bWVudGF0aW9uIHRvIGJlIGNvbnNpc3RlbnQKCXdpdGggR0NDIGJlaGF2aW91ci4KCgkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKSBSZW1vdmVkIHJlZHVuZGFudCB0ZXN0IGZvcgoJY2FsbF9maXhlZF9yZWdzLgoKV2VkIEF1ZyAxOSAxMzoyODo0MSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcnRsLmggKHJ0eF9mdW5jdGlvbik6IE5ldyB0eXBlLgoJKGZvcl9lYWNoX3J0eCk6IE5ldyBmdW5jdGlvbi4KCSogcnRsYW5hbC5jIChmb3JfZWFjaF9ydHgpOiBEZWZpbmUgaXQuCgkKCSogcmVjb2cuYyAoY2hhbmdlX3QpOiBOZXcgdHlwZS4KCShjaGFuZ2Vfb2JqZWN0cywgY2hhbmdlX29sZF9jb2RlcywgY2hhbmdlX2xvY3MsIGNoYW5nZV9vbGRzKToKCVJlcGxhY2Ugd2l0aCAuLi4KCShjaGFuZ2VzKTogTmV3IHZhcmlhYmxlLgoJKHZhbGlkYXRlX2NoYW5nZSk6IER5bmFtaWNhbGx5IGFsbG9jYXRlIHJvb20gZm9yIG1vcmUgY2hhbmdlcywgaWYKCW5lY2Vzc2FyeS4gIFVzZXMgY2hhbmdlcyBhcnJheSBpbnN0ZWFkIG9mIGNoYW5nZV9vYmplY3RzLCBldGMuCgkoYXBwbHlfY2hhbmdlX2dyb3VwKTogIFVzZSBjaGFuZ2VzIGFycmF5IGluc3RlYWQgb2YKCWNoYW5nZV9vYmplY3RzLCBldGMuCgkKCSogbG9vcC5jIChsb29wX21lbV9pbmZvKTogTmV3IHR5cGUuCgkobG9vcF9tZW1zKTogTmV3IHZhcmlhYmxlLgoJKGxvb3BfbWVtc19pZHgpOiBMaWtld2lzZS4KCShsb29vcF9tZW1zX2FsbG9jYXRlZCk6IExpa2V3aXNlLgoJKHNjYW5fbG9vcCk6IFJlbW92ZSBucmVncyBwYXJhbWV0ZXIuCgkobmV4dF9pbnNuX2luX2xvb3ApOiBOZXcgZnVuY3Rpb24uCgkobG9hZF9tZW1zX2FuZF9yZWNvdW50X2xvb3BfcmVnc19zZXQpOiBMaWtld2lzZS4KCShsb2FkX21lbXMpOiBMaWtld2lzZS4KCShpbnNlcnRfbG9vcF9tZW0pOiBMaWtld2lzZS4KCShyZXBsYWNlX2xvb3BfbWVtKTogTGlrZXdpc2UuCgkocmVwbGFjZV9sYWJlbCk6IExpa2V3aXNlLgoJKElOU05fSU5fUkFOR0VfUCk6IE5ldyBtYWNyby4KCShsb29wX29wdGltaXplKTogRG9uJ3QgcGFzcyBtYXhfcmVnX251bSgpIHRvIHNjYW5fbG9vcC4KCShzY2FuX2xvb3ApOiBSZW1vdmUgbnJlZ3MgcGFyYW1ldGVyLCBjb21wdXRlIGl0IGFmdGVyIGFueSBuZXcKCXJlZ2lzdGVycyBhcmUgY3JlYXRlZCBieSBsb2FkX21lbXMuICBVc2UgSU5TTl9JTl9SQU5HRV9QIGFuZAoJbmV4dF9pbnNuX2luX2xvb3AgcmF0aGVyIHRoYW4gZXhwYW5kaW5nIHRoZW0gaW5saW5lLiAgQ2FsbAoJbG9hZF9tZW1zIHRvIGxvYWQgbWVtb3J5IGludG8gcHNldWRvcywgaWYgYXBwcm9wcmlhdGUuCgkocHJlc2Nhbl9sb29wKTogRmlndXJlIG91dCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUganVtcHMgZnJvbSB0aGUKCWxvb3AgdG8gdGFyZ2V0cyBvdGhlciB0aGFuIHRoZSBsYWJlbCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlCglsb29wLiAgQ2FsbCBpbnNlcnRfbG9vcF9tZW0gdG8gbm90aWNlIGFsbCB0aGUgTUVNcyB1c2VkIGluIHRoZQoJbG9vcCwgaWYgaXQgY291bGQgYmUgc2FmZSB0byBwdWxsIE1FTXMgaW50byBSRUdzIGZvciB0aGUgZHVyYXRpb24KCW9mIHRoZSBsb29wLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IFVzZSBuZXh0X2luc25faW5fbG9vcC4gIFR3ZWFrIGNvbW1lbnRzLgoKV2VkIEF1ZyAxOSAwODoyOTo0NCAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFybV9vdmVycmlkZV9vcHRpb25zKTogUmVtb3ZlIGxpZSBhYm91dCBpZ25vcmluZyBQSUMgZmxhZy4KCldlZCBBdWcgMTkgMDc6MDg6MTUgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoZmluYWxpemVfcGljKTogQ2hlY2sgZm9yIHRoZSBjb3JyZWN0Cglub25sb2NhbF9nb3RvX3JlY2VpdmVyIFVOU1BFQyBudW1iZXIuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobm9ubG9jYWxfZ290b19yZWNlaXZlcik6IEFkZCBjb21tZW50CgltYWtpbmcgbm90ZSBvZiB0aGlzIGRlcGVuZGVuY3kgZXhpc3RpbmcgaW4gc3BhcmMuYwoJKG5lZ3RmMl9ub3R2OSBzcGxpdCk6IEdpdmUgTkVHIFNGbW9kZS4KCShuZWdzZjIpOiBGaXggaW5zbiBvdXRwdXQgc3RyaW5nLgoJClR1ZSBBdWcgMTggMTI6NDA6MjcgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IElzc3VlIGFuIGVycm9yIGlmIHRoZSBhcmd1bWVudAoJdG8gYWxpYXMgaXMgbm90IGEgc3RyaW5nLgoKVHVlIEF1ZyAxOCAxMDozMzozMCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplKTogUHV0IGFsbCBKVU1QX0lOU05zIG9uIHRoZSBsYXN0CglwZW5kaW5nIG1lbW9yeSBmbHVzaCBsaXN0LgoKCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogQWxsb3cgY29tYmluaW5nIGluc25zIHdpdGggUkVHX1JFVFZBTAoJbm90ZXMuCgkodHJ5X2NvbWJpbmUpOiBBbGxvdyBjb21iaW5pbmcgaW5zbnMgd2l0aCBSRUdfTElCQ0FMTCBub3Rlcy4KCgkqIGV4cHIuYyAoZW1pdF9ibG9ja19tb3ZlKTogRG8gbm90IGNhbGwgbWVtY3B5IGFzIGEgbGliY2FsbAoJaW5zdGVhZCBidWlsZCB1cCBhIENBTExfRVhQUiBhbmQgY2FsbCBpdCBsaWtlIGFueSBvdGhlcgoJZnVuY3Rpb24uCgkoY2xlYXJfc3RvcmFnZSk6IFNpbWlsYXJseSBmb3IgbWVtc2V0LgoKCSogcmVnbW92ZS5jIChmaXh1cF9tYXRjaF8yKTogRG8gbm90IGNhbGwgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AKCW9uIG5vdGVzLgoKCSogTWFrZWZpbGUuaW4gKGNwbHVzLWRlbS5vKTogUHJvdmlkZSBleHBsaWNpdCBydWxlcyBmb3IgYnVpbGRpbmcKCWNwbHVzLWRlbS5vCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBVcGRhdGUgUkVHX05fQ0FMTFNfQ1JPU1NFRAoJYW5kIFJFR19MSVZFX0xFTkdUSCBhcyBzdWNjZXNzZnVsIHN1YnN0aXR1dGlvbnMgYXJlIG1hZGUuCgpUdWUgQXVnIDE4IDA3OjE1OjI3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jICh1bHRyYV9maW5kX3R5cGUpOiBBZGQgZW1wdHkgc2VtaWNvbG9uCglzdGF0ZW1lbnQgYWZ0ZXIgZW5kIG9mIGxvb3AgbGFiZWwuCgpUdWUgQXVnIDE4IDA3OjEzOjI3IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHVsdHJhX3R5cGVzX2F2YWlsKTogTmV3IHZhcmlhYmxlLgoJKHVsdHJhX2J1aWxkX3R5cGVzX2F2YWlsKTogTmV3IGZ1bmN0aW9uIHRvIHJlY29yZCBtYXNrIG9mIGluc24KCXR5cGVzIGluIHJlYWR5IGxpc3QgYXQgdGhpcyBjeWNsZS4KCSh1bHRyYXNwYXJjX3NjaGVkX3Jlb3JkZXIpOiBDYWxsIGl0LgoJKHVsdHJhX2ZpbmRfdHlwZSk6IFVzZSBpdCB0byBxdWlja2VuIHRoZSBzZWFyY2guICBBbHNvIHNpbXBsaWYKCWRlcGVuZGVuY3kgY2hlY2ssIGRvbid0IHVzZSBydHhfZXF1YWxfcCBiZWNhdXNlIHdlIGtub3cgZXhhY3RseQoJd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IuCgpUdWUgQXVnIDE4IDAzOjIwOjUzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmggKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOiBSZXR1cm4gTk9fUkVHUyBpZiBjb21waWxpbmcKCWZvciBhcmNoaXRlY3R1cmUgdjQuCgpNb24gQXVnIDE3IDIxOjI2OjM4IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChzbHR1LCBzZ2V1KTogRG9uJ3QgRkFJTCwgY2FsbAoJZ2VuX2NvbXBhcmVfcmVnLgoJKG1vdnNmX2NvbnN0X2ludHJlZywgbW92c2ZfY29uc3RfaGlnaCwgbW92c2ZfY29uc3RfbG8sCgltb3ZkZl9jb25zdF9pbnRyZWcgYW5kIGhlbHBlciBzcGxpdHMpOiBOZXcgcGF0dGVybnMgdG8gbW92ZSBmbG9hdAoJY29uc3RhbnRzIGludG8gaW50ZWdlciByZWdpc3RlcnMuCgkobmVndGYyLCBuZWdkZjIsIGFic3RmMiwgYWJzZGYyKTogUmV3b3JrIHVzaW5nIG5ldyBwYXR0ZXJucyBhbmQKCXNwbGl0cy4KCk1vbiBBdWcgMTcgMTE6NDY6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogRnJvbSBHcmFoYW0KCSogdHJlZS5jIChidWlsZF9pbmRleF90eXBlKTogQ29weSBUWVBFX1NJWkVfVU5JVCBmcm9tIHNpemV0eXBlCgl0byBpdHlwZS4KCSogYy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogQ29weSBUWVBFX1NJWl9VTklUIGZyb20gZW51bXR5cGUgdG8gdGVtLgoKCSogcnM2MDAwLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBGb3IgVEFSR0VUX0VMRiwgaW5kaWNhdGUgdGhhdAoJYSBCQVNFX1JFR1MgcmVnaXN0ZXIgaXMgbmVlZGVkIGFzIGFuIGludGVybWVkaWF0ZSB3aGVuIGNvcHlpbmcKCWEgc3ltYm9saWMgdmFsdWUgaW50byBhbnkgcmVnaXN0ZXIgY2xhc3Mgb3RoZXIgdGhhbiBCQVNFX1JFR1MuCgoJKiBleHByLmMgKG1vdmVfYnlfcGllY2VzKTogTm8gbG9uZ2VyIHN0YXRpYy4gIFJlbW92ZSBwcm90b3R5cGUuCgkqIHJ0bC5oIChtb3ZlX2J5X3BpZWNlcyk6IEFkZCBleHRlcm4gcHJvdG90eXBlLgoJKiBtaXBzLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogSGFuZGxlIGFsaWduZWQgc3RyYWlnaHQgbGluZSBjb3B5IGJ5CgljYWxsaW5nIG1vdmVfYnlfcGllY2VzLgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEFsbG93IGFzc2lnbm1lbnRzIGZyb20gVEltb2RlIFBBUk1fREVDTHMKCWFuZCBWQVJfREVDTHMuCgpNb24gQXVnIDE3IDEwOjI4OjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9lbmRfbG9vcCk6IFRpZHkuICBBbGxvdyB1bmNvbmRpdGlvbmFsCglqdW1wcyBvdXQgb2YgdGhlIGxvb3AgdG8gYmUgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBleGl0IHRlc3QuCgpNb24gQXVnIDE3IDEwOjA2OjExIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCQkJICBKZWZmIExhdyA8bGF3QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY3BsdXMtZGVwLm8pOiBVc2UgY3BsdXMtZGVtLmMgZnJvbSBsaWJpYmVydHkuCgkqIGNwbHVzLWRlbS5jOiBEZWxldGUuCgoJKiBNYWtlZmlsZS5pbiAoZm9sZC1jb25zdC5vKTogZGVwZW5kIG9uICQoUlRMX0gpLgoKCSogZm9sZC1jb25zdC5jOiBJbmNsdWRlIHJ0bC5oIHRvIGdldCB0aGUgcHJvdG90eXBlIGZvcgogCWBzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZScuCgoJKiBsb29wLmMgKGV4cHJlc3NfZnJvbV8xKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdG1wJy4KCShjb21iaW5lX2dpdnMpOiBjYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBiemVybyB0byBjaGFyICouCgoJKiB0b3BsZXYuYyAoZGlzcGxheV9oZWxwKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbG9va2luZ19mb3Jfc3RhcnQnLgoKCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVtb3ZlIHVubmVlZGVkICYuCgoJKiBhbHBoYS5oIChhbHBoYV9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBQcm92aWRlIHByb3RvdHlwZS4KCQoJKiBleGNlcHQuYyAoc2V0X2V4Y2VwdGlvbl9sYW5nX2NvZGUsIHNldF9leGNlcHRpb25fdmVyc2lvbl9jb2RlKToKCUNoYW5nZSBwYXJhbWV0ZXIgZnJvbSBgc2hvcnQnIHRvIGBpbnQnIHRvIGF2b2lkIHVzaW5nIGEgZ2NjCglleHRlbnNpb24uCgoJKiBleGNlcHQuaCAoc2V0X2V4Y2VwdGlvbl9sYW5nX2NvZGUsIHNldF9leGNlcHRpb25fdmVyc2lvbl9jb2RlKToKCUxpa2V3aXNlIGZvciBwcm90b3R5cGVzLgoKCSogZmxvdy5jIChjb3VudF9yZWdfcmVmZXJlbmNlcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGByZWdubycKCWFuZCBgaScuCgoJKiBnY3NlLmMgKGhhc2hfc2Nhbl9pbnNuKTogRGVjbGFyZSBwYXJhbWV0ZXIgYGluX2xpYmNhbGxfYmxvY2snLgoKCSogcHJlZml4LmMgKHRyYW5zbGF0ZV9uYW1lKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBhbGxvY2EnLgoKCSogdmFycmF5LmggKFZBUlJBWV9GUkVFKTogUmVpbXBsZW1lbnQgYXMgYSBgZG8td2hpbGUoMCknIHN0YXRlbWVudC4KCk1vbiBBdWcgMTcgMDk6MjM6NDIgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmM6IEluY2x1ZGUgInN5c3RlbS5oIiBpbnN0ZWFkIG9mIDxzdGRpby5oPi4KCUluY2x1ZGUgInRvcGxldi5oIi4KCSh2YWxpZF9kYmNjX2NvbXBhcmlzb25fcCk6IE1hcmsgbW9kZSBhcmd1bWVudCBhcyB1bnVzZWQuCgkoc3ltYm9saWNfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBMaWtld2lzZS4KCShjb25zdF91aW50MzJfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGNvbnN0X3NpbnQzMl9vcGVyYW5kKTogTGlrZXdpc2UuCgkqIHNjaGVkLmMgWyFJTlNOX1NDSEVEVUxJTkddOiBEZWZpbmUgb25seSBkdW1teSBmdW5jdGlvbgoJc2NoZWR1bGVfaW5zbnMgYW5kIGNvbW1lbnQgb3V0IHJlc3Qgb2YgZmlsZS4KCgkqIG02OGsuYyAob3V0cHV0X21vdmVfc2ltb2RlX2NvbnN0KTogVXNlIHN1YmwgdG8gbW92ZSBhIHplcm8gaW50byBhbgoJYWRkcmVzcyByZWdpc3Rlci4KCShvdXRwdXRfbW92ZV9baHFdaW1vZGUpOiBMaWtld2lzZS4KCk1vbiBBdWcgMTcgMDk6MTU6NDcgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKG1haW4pOiBFbmFibGUgLWZzdHJpY3QtYWxpYXNpbmcgZm9yIC1PMiBhbmQgYWJvdmUuCgkqIGludm9rZS50ZXhpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgpNb24gQXVnIDE3IDAyOjAzOjU1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWdjbGFzcy5jIChhbGxvY2F0ZV9yZWdfaW5mbyk6IFJlc3BlY3QgTUlOIHdoZW4gY2xlYXJpbmcgZGF0YS4KClN1biBBdWcgMTYgMTc6Mzc6MDYgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAodWx0cmFfY29kZV9mcm9tX21hc2ssCgl1bHRyYV9jbW92ZV9yZXN1bHRzX3JlYWR5X3AsIHVsdHJhX2ZwbW9kZV9jb25mbGljdF9leGlzdHMsCgl1bHRyYV9maW5kX3R5cGUsIHVsdHJhX3NjaGVkdWxlX2luc24sIHVsdHJhX2ZsdXNoX3BpcGVsaW5lLAoJdWx0cmFzcGFyY19zY2hlZF9pbml0LCB1bHRyYXNwYXJjX3ZhcmlhYmxlX2lzc3VlLAoJdWx0cmFfcmVzY2FuX3BpcGVsaW5lX3N0YXRlLCB1bHRyYXNwYXJjX3NjaGVkX3Jlb3JkZXIpOiBOZXcKCWZ1bmN0aW9ucyB0byBkZXNjcmliZSBVbHRyYVNQQVJDIHBpcGVsaW5lIGV4YWN0bHkgdG8gSGFpZmEuCgkodWx0cmFzcGFyY19hZGp1c3RfY29zdCk6IEluZGljYXRlIElNVUwgdHlwZSBpbnNucyBoYXZlIHplcm8gY29zdCwKCWFzIHRoZXJlIGlzIG5vdGhpbmcgdGhlIHNjaGVkdWxlciBjYW4gZG8gYWJvdXQgaXQuICBJbmRpY2F0ZSB0aGF0CglSRUdfREVQX09VVFBVVCdzIGNvbGxpZGUuICBGaXh1cCBmb3JtYXR0aW5nLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoUlRYX0NPU1RTKTogRml4dXAgaW50ZWdlciBtdWx0aXBseSBhbmQKCWRpdmlkZSBjb3N0cyBvbiBVbHRyYSBmb3IgREltb2RlLgoJKE1EX1NDSEVEX0lOSVQsIE1EX1NDSEVEX1JFT1JERVIsIE1EX1NDSEVEX1ZBUklBQkxFX0lTU1VFKToKCURlZmluZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChpZXVfdW5uYW1lZCBmdW5jdGlvbiB1bml0KTogUmVuYW1lIHRvCglpZXVOIGFuZCBhZGQgY2FsbF9ub19kZWxheV9zbG90IHRvIHR5cGUgbGlzdC4KCShjdGkgZnVuY3Rpb24gdW5pdCk6IE5ldyB1bml0IGZvciBicmFuY2hlcyBvbiBVbHRyYVNQQVJDLgoJKHN1YngvYWRkeCBpbnNucyk6IFNldCB0eXBlIHRvIG1pc2MuCgkoc2lkaSB6ZXJvL3NpZ24gZXh0ZW5zaW9uIGluc25zIG9uIGFyY2g2NCk6IFNldCB0eXBlIHRvIHNoaWZ0LgoJKHNpZ25fZXh0ZW5kaGlkaTJfaW5zbik6IFNldCB0eXBlIHRvIHNsb2FkLgoKU3VuIEF1ZyAxNiAxMzo1MjowMCAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAocnM2MDAwX3N0YWNrX2luZm8pOiBVc2UgaWYgPT0gMCBmb3Igc2l6ZXMuCgkob3V0cHV0X2VwaWxvZyk6IFVzZSBpZiAhPSAwIGZvciBvZmZzZXQuCgkocnM2MDAwX2ZhdGFsX2JhZF9hZGRyZXNzKTogUHJlcGFyZSBmb3IgSW50bC4KCSogcnM2MDAwLmggKHJzNjAwMF9mYXRhbF9iYWRfYWRkcmVzcyk6IERlY2xhcmUuCgkqIHJzNjAwMC5tZCAobW92c2ZjYywgbW92ZGZjYyk6IFVzZSBlbHNlIGlmLgoJKGVsZl9oaWdoKTogVXNlIHtsaXV8bGlzfS4KCShlbGZfbG93KTogVXNlIHtjYWx8bGF9LiAgUmVtb3ZlICVhIHRlbXBsYXRlIGZyb20gb2xkIG1uZW1vbmljcy4KCShtb3ZzaSk6IFVzZSByczYwMDBfZmF0YWxfYmFkX2FkZHJlc3MuCgkKU3VuIEF1ZyAxNiAwMTo1MzoyMSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogUmVqZWN0IGVxdWl2YWxlbmNlcyBzZXBhcmF0ZWQKCWJ5IGEgdm9sYXRpbGUgaW5zdHJ1Y3Rpb24uCgpTdW4gQXVnIDE2IDAwOjIxOjQ0IDE5OTggRnJhbnogU2lybCA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgogICAgICAgICogcnM2MDAwL2xpbnV4LmggKENQUF9PU19ERUZBVUxUX1NQRUMpOiBEZWZpbmUuCgpTYXQgQXVnIDE1IDIwOjUxOjM1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAobW92c2ljYyk6IEZpeCBtb2RlIG1pc21hdGNoLgoKU2F0IEF1ZyAxNSAyMDoyMjozMyAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjb25maWcvYWxwaGEvYWxwaGEuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IEhhbmRsZSBhZ2dyZWdhdGVkCglyZXR1cm4gdHlwZS4KCSogY29uZmlnL2FscGhhL3dpbi1udC5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogTGlrZXdpc2UuCgpTYXQgQXVnIDE1IDA4OjM5OjQ5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZzaV9sb19zdW1fcGljX2xhYmVsX3JlZyk6IFJlbW92ZQoJd3JpdGUtb25seSBtb2RpZmllciBmcm9tIG9wZXJhbmQgMSBjb25zdHJhaW50LgoKU2F0IEF1ZyAxNSAwNjoyODoxOSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMSk6IElmCgllbWl0dGluZyBhIFhPUiBvZiAtMSBhdCB0aGUgZW5kLCBlbWl0IGEgTk9UIGluc3RlYWQgZm9yIGNvbWJpbmUncwoJc2FrZS4KCShzcGFyY19lbWl0X3NldF9jb25zdDY0KTogTGlrZXdpc2UsIGFsc28gd2hlbiBjb21wdXRpbmcgdHJhaWxpbmcKCWJpdHMgZG8gbm90IG5lZ2F0ZSBsb3dfYml0cyBhbmQgbWFrZSBmYXN0X2ludCBhbiBpbnQuCgpGcmkgQXVnIDE0IDIxOjA3OjAzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoYWRkX2xhYmVsX25vdGVzKTogRG8gbm90IGlnbm9yZSByZWZlcmVuY2VzIHRvIGxhYmVscwoJYmVmb3JlIGRpc3BhdGNoIHRhYmxlcy4gIE1pcnJvcnMgQXByIDggY2hhbmdlIHRvIG1hcmtfanVtcF9sYWJlbC4KCSogZ2NzZS5jIChhZGRfbGFiZWxfbm90ZXMpOiBTaW1pbGFybHkuCgoJKiBwYS5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogU3RyaXAgbmFtZSBlbmNvZGluZy4KCgkqIG02OGsubWQgKGFkZGRpX2RpbHNocjMyKTogT25lIG9mIHRoZSBvcGVyYW5kcyBtdXN0IGJlIGEgcmVnaXN0ZXIuCgkoYWRkZGlfZGlzaGwzMik6IFNpbWlsYXJseS4KCkZyaSBBdWcgMTQgMTQ6MTI6NTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaTM4Ni5oIChNT0RFU19USUVBQkxFX1ApOiBSZW9yZ2FuaXplIHRvIHNodXQgdXAgd2FybmluZ3MuCgkqIGFsaWFzLmMgKG1lbXJlZnNfY29uZmxpY3RfcCk6IEFkZCBicmFjZXMgdG8gc2h1dCB1cCB3YXJuaW5ncy4KCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IEFkZCBwYXJlbnMgdG8gc2h1dCB1cCB3YXJuaW5ncy4KCkZyaSBBdWcgMTQgMTI6NTg6MjEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazIsCglzcGFyY19lbWl0X3NldF9jb25zdDY0X2xvbmd3YXksIGNvbnN0NjRfaXNfMmluc25zLAoJY3JlYXRlX3NpbXBsZV9mb2N1c19iaXRzLCBzcGFyY19lbWl0X3NldF9jb25zdDY0KTogRml4IG1vcmUgYnVncwoJaW4gNjQtYml0IGNvbnN0YW50IGZvcm1hdGlvbi4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChzbmVzaV96ZXJvX2V4dGVuZCBzcGxpdCk6IEdlbmVyYXRlCglydGwgZm9yIGFkZHggbm90IHN1YnguCgkoZGVmaW5lX2luc24gbW92ZGlfY29uc3Q2NF9zcGVjaWFsKTogTWFrZSBhdmFpbGFibGUgZXZlbiB3aGVuCglIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzIG5vdCA2NC4KCShtb3ZkaV9sb19zdW1fc3A2NF9jaW50LCBtb3ZkaV9oaWdoX3NwNjRfY2ludCk6IFJlbW92ZS4KCShsb3N1bV9kaV9tZWRsb3csIHNldGhtLCBzZXRsbyk6IE1ha2Ugb3AyIHN5bWJvbGljX29wZXJhbmQuCgkoY21wX3NpcWlfdHJ1bmNfc2V0LCBjbXBfZGlxaV90cnVuY19zZXQpOiBFbmNhcHN1bGF0ZSBib3RoCglpbnN0YW5jZXMgb2Ygb3BlcmFuZCAxIGluc2lkZSBhIFFJIHN1YnJlZy4KCSh4b3JkaTNfc3A2NF9kYmwpOiBSZW1vdmUgJyUnIGNvbnN0cmFpbnQgZm9yIG9wMS4KCShvbmVfY21wbGRpMl9zcDY0KTogRml4IG91dHB1dCBzdHJpbmcuCgkob25lX2NtcGxzaTJfbm90X2xpdmVnMCk6IFJld3JpdGUgdG8gcmVtb3ZlIHVubmVlZGVkIGV4dHJhCglhbHRlcm5hdGl2ZSBjYXNlLgoJKHVubmFtZWQgYXJjaDY0IGFzaGlmdCBESSk6IFRydW5jYXRlIHNoaWZ0IGNvdW50IGlmIGdyZWF0ZXIgdGhhbgoJNjMsIG5vdCAzMS4KCkZyaSBBdWcgMTQgMjE6NTI6NTMgMTk5OCAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZXhwci5jIChzdG9yZV9leHByKTogRG9uJ3Qgb3B0aW1pemUgYXdheSBsb2FkLXN0b3JlIHBhaXIKCXdoZW4gZWl0aGVyIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBoYXZlIGEgc2lkZSBlZmZlY3QuCgpGcmkgQXVnIDE0IDE2OjUwOjEwIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogRmF0YWwgZXJyb3IgaWYgdGhlIG1vZGVzIG9mIHRoZQoJb3BlcmFuZHMgb2YgU0VUIGFyZSBpbmNvbXBhdGlibGUuCgoJKiBhbHBoYS5tZDogRml4IG1heCBhbmQgbWluIHBhdHRlcm5zIHNvIG1vZGVzIG9mIFNFVCBvcGVyYW5kcyBtYXRjaC4KCkZyaSBBdWcgMTQgMTI6MjI6NTUgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBBdm9pZCBbWyBieSB1c2luZyB0ZXN0IGFuZCBjaGFuZ2VxdW90ZS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKRnJpIEF1ZyAxNCAwMToyMjozMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIHJ0bC5kZWYgKENPTlNUQU5UX1BfUlRYKTogRml4IHR5cG8gaW4gc3RyaW5nIG5hbWUuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHNlcWRpX3NwZWNpYWxfdHJ1bmMsIHNuZWRpX3NwZWNpYWxfdHJ1bmMsCglzZXFzaV9zcGVjaWFsX2V4dGVuZCwgc25lc2lfc3BlY2lhbF9leHRlbmQsIHNuZXNpX3plcm9fZXh0ZW5kIGFuZAoJc3BsaXQsIHNuZWRpX3plcm9fdHJ1bmMgYW5kIHNwbGl0LCBzZXFzaV96ZXJvX2V4dGVuZCBhbmQgc3BsaXQsCglzZXFkaV96ZXJvX3RydW5jIGFuZCBzcGxpdCwgcGljX2xvX3N1bV9kaSwgcGljX3NldGhpX2RpLAoJbW92ZGlfY2Nfc3A2NF90cnVuYywgbW92ZGlfY2NfcmVnX3NwNjRfdHJ1bmMsIGFkZHhfZXh0ZW5kX3NwMzIgYW5kCglzcGxpdCwgYWRkeF9leHRlbmRfc3A2NCwgc3VieF9leHRlbmRfc3A2NCwgc3VieF9leHRlbmQgYW5kIHNwbGl0KToKCUZpeCBtaXNtYXRjaGluZyBtb2RlcyBpbiBTRVQgb3BlcmFuZHMuCgkoY29uZGl0aW9uYWwgbW92ZSBwYXR0ZXJucyk6IEZpeCBmb3JtYXR0aW5nLgoJKHVubmFtZWQgc3VieCBhcmNoNjQgcGF0dGVybik6IFJlbW92ZSBkdXBsaWNhdGUgaW5zbi4KCQpGcmkgQXVnIDE0IDAwOjM0OjM0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGNvbnN0NjRfb3BlcmFuZCwgY29uc3Q2NF9oaWdoX29wZXJhbmQpOgoJR2V0IGl0IHJpZ2h0IHdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyBub3QgNjQuCgkoaW5wdXRfb3BlcmFuZCk6IEZpeHVwIHRlc3QgZm9yIHdoYXQgd2UgYWNjZXB0IGZvciBjb25zdGFudAoJaW50ZWdlcnMuCgkoc3BhcmNfZW1pdF9zZXRfY29uc3QzMiwgc3BhcmNfZW1pdF9zZXRfc3ltYm9saWNfY29uc3Q2NCk6IEdpdmUKCXNldCBWT0lEbW9kZS4KCShzYWZlX2NvbnN0REkpOiBSZW1vdmUuCgkoc3BhcmNfZW1pdF9zZXRfc2FmZV9ISUdINjQsIGdlbl9zYWZlX1NFVDY0LCBnZW5fc2FmZV9PUjY0LAoJZ2VuX3NhZmVfWE9SNjQpOiBOZXcgZnVuY3Rpb25zLgoJKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2sxLCBzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMiwKCXNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfbG9uZ3dheSwgc3BhcmNfZW1pdF9zZXRfY29uc3Q2NCk6IFVzZQoJdGhlbS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfaW5zbiB4b3JkaTNfc3A2NF9kYmwpOiBPbmx5IG1ha2UKCWF2YWlsYWJsZSB3aGVuIEhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgbm90IDY0LgoJKGRlZmluZV9pbnNuIG1vdmRpX3NwNjRfZGJsLCBtb3ZkaV9jb25zdDY0X3NwZWNpYWwpOiBMaWtld2lzZSBhbmQKCW1vdmUgYmVmb3JlIG1vdmRpX2luc25fc3A2NCBwYXR0ZXJuLgoJKGRlZmluZV9pbnNuIG1vdmRpX2xvX3N1bV9zcDY0X2RibCwgbW92ZGlfaGlnaF9zcDY0X2RibCk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBzZXRoaV9kaV9tZWRsb3csIHNldGg0NCwgc2V0bTQ0LCBzZXRoaCk6IFVzZQoJc3ltYm9saWNfb3BlcmFuZCBhcyBwcmVkaWNhdGUgZm9yIHNlY29uZCBvcGVyYW5kLgoJKERJbW9kZSBtaW51cyBzcGxpdCBvbiBhcmNoMzIsIG5lZ3NpMiBleHBhbmRlciwgb25lX2NtcGxzaTIKCWV4cGFuZGVyKTogR2l2ZSBzZXQgVk9JRG1vZGUuCgkKRnJpIEF1ZyAxNCAwMTo0NTowNiAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luMzIgKERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4pOiBEZWZpbmUuCgpGcmkgQXVnIDE0IDAxOjQwOjIxIDE5OTggIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CgoJKiByczYwMDAvbGludXguaCAoTElOS19TUEVDKTogUGFzcyAtRyBhcmdzIHRvIHRoZSBsaW5rZXIuCgpGcmkgQXVnIDE0IDAxOjIzOjIzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0vbmV0YnNkLmggKFRBUkdFVF9ERUZBVUxUKTogRGVmYXVsdCBpbmNsdWRlcyBzb2Z0d2FyZSBmbG9hdGluZyAKCXBvaW50LgoJKENQUF9GTE9BVF9ERUZBVUxUX1NQRUMpOiBSZS1kZWZpbmUgYWNjb3JkaW5nbHkuCgpGcmkgQXVnIDE0IDAxOjE5OjA4IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGluc3RhbGwudGV4aTogVmFyaW91cyBTQ08gT3BlblNlcnZlciB0d2Vha3MuCgpUaHUgQXVnIDEzIDIwOjE0OjQwIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IEhhbmRsZSBhbm90aGVyIGNhc2Ugd2hlbgoJZWxpbWluYXRpbmcgdGhlIGZyYW1lIHBvaW50ZXIgdG8gdGhlIGhhcmQgZnJhbWUgcG9pbnRlci4gIEFkZAoJbWlzc2luZwllcC0+dG9fcnR4IGNoZWNrIHRvIG9uZSBleGlzdGluZyBjYXNlLgoKCSogbWlwcy9taXBzLm1kIChtb3ZoaV9pbnRlcm5hbDIrMik6IEZpeCB0eXBvIG1lbTpTSSAtPiBtZW06SEkuCgpUaHUgQXVnIDEzIDE3OjA4OjExIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuaDogRGUtY29uZGl0aW9uYWxpemUgaW5pdF9wcmlvcml0eSBjb2RlLgoKCSogbWlwcy5oIChOTV9GTEFHUyk6IENoYW5nZSBmcm9tIC1CcCB0byAtQm4uCgkqIGNvbGxlY3QyLmMgKE5NX0ZMQUdTKTogQ2hhbmdlIGZyb20gLXAgdG8gLW4uCgoJKiBjb25maWd1cmUuaW46IFR1cm4gb24gY29sbGVjdDIgZm9yIG1pcHN0eDM5LWVsZi4KCUhhbmRsZSB1c2VfY29sbGVjdDI9bm8gcHJvcGVybHkuCgoJKiBjLWNvbW1vbi5jOiBEZS1jb25kaXRpb25hbGl6ZSBpbml0X3ByaW9yaXR5IGNvZGUuCgkqIGNvbGxlY3QyLmMgKGV4dHJhY3RfaW5pdF9wcmlvcml0eSwgc29ydF9pZHMpOiBOZXcgZm5zLgoJKG1haW4pOiBDYWxsIHNvcnRfaWRzLgoJTW92ZSBzZXF1ZW5jZV9udW1iZXIgdG8gZmlsZSBzY29wZS4KCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIC0tZW5hYmxlLWluaXQtcHJpb3JpdHkuCgkqIGMtY29tbW9uLmMgKGF0dHJzKTogQWRkIEFfSU5JVF9QUklPUklUWS4KCShpbml0X2F0dHJpYnV0ZXMsIGRlY2xfYXR0cmlidXRlcyk6IExpa2V3aXNlLgoJKiB0cmVlLmggKERFRkFVTFRfSU5JVF9QUklPUklUWSwgTUFYX0lOSVRfUFJJT1JJVFkpOiBOZXcgbWFjcm9zLgoJKiB0cmVlLmMgKGdldF9maWxlX2Z1bmN0aW9uX25hbWVfbG9uZyk6IFNwbGl0IG91dC4uLgoJKGdldF9maWxlX2Z1bmN0aW9uX25hbWUpOiAuLi5mcm9tIGhlcmUuCgpUaHUgQXVnIDEzIDE2OjA5OjUzIDE5OTggIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXhwci5jIChzYWZlX2Zyb21fcCk6IENoYW5nZSBjb2RlIHRvIEVSUk9SX01BUksgb25seSB3aGVuIG5vdAoJYWNjZXNzaW5nIG5vZGVzLgoKVGh1IEF1ZyAxMyAxNToyNDo0OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZGlzcGxheV9oZWxwKTogQWRkIGJyYWNlcyB0byBzaHV0IHVwIHdhcm5pbmdzLgoJKiB0cmVlLmMgKHNpbXBsZV9jc3RfZXF1YWwpOiBMaWtld2lzZS4KCgkqIGZvbGQtY29uc3QuYyAobm9uX2x2YWx1ZSk6IERvbid0IGRlYWwgd2l0aCBudWxsIHBvaW50ZXIgCgljb25zdGFudHMgaGVyZS4KCShmb2xkLCBjYXNlIENPTVBPVU5EX0VYUFIpOiBXcmFwIGEgY29uc3RhbnQgMCBpbiBhIE5PUF9FWFBSLgoKCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IEFsbG93IGNvbnZlcnNpb24gb2YgMAoJb2YgYW55IHNpemUgdG8gYSBwb2ludGVyLgoKVGh1IEF1ZyAxMyAxMjo1MzoxMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpMzg2L3dpbm50LmMgKGkzODZfcGVfYXNtX2ZpbGVfZW5kKTogQ2hlY2sgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRC4KCldlZCBBdWcgMTIgMTc6MjU6MTggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5jIChSRUdfU0FWRV9CWVRFUyk6IE9ubHkgcmVzZXJ2ZSBzcGFjZSBmb3IgcmVnaXN0ZXJzCgl3aGljaCB3aWxsIGJlIHNhdmVkLgoJKiBtbjEwMzAwLm1kIChwcm9sb2d1ZSBpbnNuKTogT25seSBzYXZlIHJlZ2lzdGVycyB3aGljaCBuZWVkIHNhdmluZy4KCShlcGlsb2d1ZSBpbnNuKTogU2ltaWxhcmx5LgoKCSogbW4xMDMwMC5jLCBtbjEwMzAwLmgsIG1uMTAzMDAubWQ6IFJlbW92ZSAiZ2xvYmFsIHplcm8gcmVnaXN0ZXIiCglvcHRpbWl6YXRpb25zLgoKV2VkIEF1ZyAxMiAxMjozOToxNiAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogU2V0IFNZTUJPTF9SRUZfRkxBRyBmb3IKCVZBUl9ERUNMJ3MgaW4gZ3AgYWRkcmVzc2FibGUgc2VjdGlvbnMuCgpUdWUgQXVnIDExIDIzOjAyOjMxIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogc3BhcmMuYzogQ2hhbmdlIHJldHVybiA8ZXhwPiB0byA8ZXhwPjsgcmV0dXJuOyBpbiBmdW5jdGlvbnMKIAlyZXR1cm5pbmcgdm9pZC4KCSogc3BhcmMubWQ6IEFkZCBlbXB0eSBzZW1pY29sb24gc3RhdGVtZW50IGFmdGVyIGZpbmFsIGxhYmVsIGluCgltb3ZlIGV4cGFuZGVycy4KClR1ZSBBdWcgMTEgMjI6NDI6MDEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGRlZmluZV9pbnNuIGFkZHhfZXh0ZW5kKTogUmVuYW1lIHRvCglhZGR4X2V4dGVuZF9zcDY0LCBvbmx5IGFsbG93IHdoZW4gVEFSR0VUX0FSQ0g2NC4KCShkZWZpbmVfaW5zbiBhZGR4X2V4dGVuZF9zcDMyIGFuZCBzcGxpdCk6IFZlcnNpb24gdGhhdCB3b3JrcyB3aGVuCglub3QgVEFSR0VUX0FSQ0g2NC4KCShkZWZpbmVfaW5zbiBzdWJ4X2V4dGVuZCk6IExpa2V3aXNlLgoJKGRlZmluZV9zcGxpdCBhZGRkaTMgYW5kIHN1YmRpMyB3aXRoIHplcm8gZXh0ZW5zaW9uKTogRml4dXAgYW5kCgljb3JyZWN0IGJ1Z3Mgd2hlbiBub3QgVEFSR0VUX0FSQ0g2NC4KClR1ZSBBdWcgMTEgMTY6MDQ6MzQgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBleGNlcHQuYyAoc2V0X2V4Y2VwdGlvbl9sYW5nX2NvZGUsIHNldF9leGNlcHRpb25fdmVyc2lvbl9jb2RlKToKCVVzZSBwcm90b3R5cGUtc3R5bGUgZGVmaW5pdGlvbiBpZiBfX1NURENfXywgdG8gbWF0Y2ggZGVjbGFyYXRpb24KCWluIGV4Y2VwdC5oLgoKCSogZ2VuZW1pdC5jOiBDaGFuZ2UgRkFJTCBhbmQgRE9ORSBtYWNyb3Mgbm90IHRvIHVzZSBsb29wcy4KClR1ZSBBdWcgMTEgMTI6Mjc6MDMgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKEFTTV9PVVRQVVRfRFdBUkZfQUREUl9DT05TVCk6IFVzZQoJQVNNX09VVFBVVF9EV0FSRjJfQUREUl9DT05TVCBpZiBkZWZpbmVkLgoKCSogbWlwcy9taXBzLm1kIChyZWxvYWRfb3V0c2kpOiBVc2UgTTE2X1JFR19QIHdoZW4gVEFSR0VUX01JUFMxNi4KClR1ZSBBdWcgMTEgMTg6MTI6NTMgMTk5OCAgRGF2ZSBMb3ZlICA8ZC5sb3ZlQGRsLmFjLnVrPgoKCSogUkVBRE1FLmc3NzogVXBkYXRlIGZyb20gQ3JhaWcuCgpUdWUgQXVnIDExIDA0OjQ2OjAxIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2VtaXRfc2V0X2NvbnN0MzIpOiBJTlRWQUwgaXMgb2YKCXR5cGUgSE9TVF9XSURFX0lOVC4KCShzYWZlX2NvbnN0REkgc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazEsCglzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMiwgc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9sb25nd2F5LAoJYW5hbHl6ZV82NGJpdF9jb25zdGFudCwgY29uc3Q2NF9pc18yaW5zbnMsCgljcmVhdGVfc2ltcGxlX2ZvY3VzX2JpdHMpOiBGaXggc29tZSBidWdzIHdoZW4gY29tcGlsZWQgb24gcmVhbAoJNjQtYml0IGhvc3RzLgoJKGZ1bmN0aW9uX2FyZ19yZWNvcmRfdmFsdWVfMywgZnVuY3Rpb25fYXJnX3JlY29yZF92YWx1ZV8yLAoJZnVuY3Rpb25fYXJnX3JlY29yZF92YWx1ZSk6IEFkZCBmdWxseSBwcm90b3R5cGVkIGZvcndhcmQgZGVjbHMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZGVmaW5lX2luc24gY21wc2lfaW5zbl9zcDMyKTogUmVuYW1lIGJhY2sKCXRvIGNtcHNpX2luc24gYW5kIHVzZSBvbiBib3RoIDY0IGFuZCAzMiBiaXQgdGFyZ2V0cy4KCShkZWZpbmVfaW5zbiBjbXBzaV9pbnNuX3NwNjQpOiBSZW1vdmUuCgkoZGVmaW5lX2V4cGFuZCB6ZXJvX2V4dGVuZHNpZGkyKTogQWxsb3cgZm9yIDMyLWJpdCB0YXJnZXQgdG9vLgoJKGRlZmluZV9pbnNuIHplcm9fZXh0ZW5kc2lkaTJfaW5zbik6IFJlbmFtZSB0bwoJemVyb19leHRlbmRzaWRpMl9pbnNuX3NwNjQuCgkoZGVmaW5lX2luc24gemVyb19leHRlbmRzaWRpMl9pbnNuX3NwMzIpOiBOZXcgcGF0dGVybiBhbmQKCWFzc29zY2lhdGVkIGZvcmNlZCBzcGxpdCBmb3IgaXQuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoY29uc3Q2NF9vcGVyYW5kLCBjb25zdDY0X2hpZ2hfb3BlcmFuZCk6CglOZXcgcHJlZGljYXRlcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IERlY2xhcmUgdGhlbS4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgdGhlbS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkaV9sb19zdW1fc3A2NF9kYmwsCgltb3ZkaV9oaWdoX3NwNjRfZGJsLCB4b3JkaTNfc3A2NF9kYmwpOiBVc2UgdGhlbS4KCk1vbiBBdWcgMTAgMjI6NTc6MjQgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGRlZmluZV9pbnNuIGp1bXApOiBPdXRwdXQgYmEscHQgbm90IGIscHQKCWluIHY5IGNhc2UgYXMgdGhlIGxhdHRlciBtYWtlcyB0aGUgU29sYXJpcyBhc3NlbWJsZXIgY3Jhc2guCgpNb24gQXVnIDEwIDIyOjM5OjA5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGlucHV0X29wZXJhbmQpOiBEbyBub3QgYWNjZXB0IGEgTE9fU1VNIE1FTQoJZm9yIFRGbW9kZSB3aGVuICF2OS4gIFdlIHJlcXVpcmUgb2Zmc2V0dGFibGUgbWVtb3J5IGFkZHJlc3Nlcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEFMVEVSX0hBUkRfU1VCUkVHKTogSGFuZGxlIFRGbW9kZSB0bwoJREZtb2RlIHJlZ2lzdGVyIG51bWJlciBjb252ZXJzaW9ucy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfc3BsaXQgREZtb2RlIG1vdmVzKTogSWYgcmVnaXN0ZXIKCWlzIGEgU1VCUkVHIGRvIGFsdGVyX3N1YnJlZyBvbiBpdCBiZWZvcmUgdXNpbmcuCgkoZGVmaW5lX2V4cGFuZCBtb3Z0Zik6IEZpeHVwIGNvbW1lbnQgYWJvdXQgYWxpZ25tZW50IG9uIHY5LgoJKGRlZmluZV9zcGxpdCBURm1vZGUgbW92ZXMpOiBEb24ndCB1c2UgZ2VuX3toaWdoLGxvd31wYXJ0LCBjcmVhdGUKCWV4cGxpY2l0IFNVQlJFR3MgaW5zdGVhZC4KCk1vbiBBdWcgMTAgMTk6MDI6NTUgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBNYWtlZmlsZS5pbiAobWJjaGFyLm8pOiBEZXBlbmQgb24gbWJjaGFyLmMuCgpNb24gQXVnIDEwIDA0OjI4OjEzIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgkKCVJld3JpdGUgU3BhcmMgYmFja2VuZCBmb3IgYmV0dGVyIGNvZGUgZ2VuZXJhdGlvbiBhbmQKCWltcHJvdmVkIHNwYXJjNjQgc3VwcG9ydC4KCSogY29uZmlnL3NwYXJjL3NwNjQtZWxmLmg6IFNldCBKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04gdG8KCXplcm8uCgkqIGNvbmZpZy9zcGFyYy9zeXN2NC5oOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHY4cGx1c19yZWdjbXBfcCwgc3BhcmNfb3BlcmFuZCwKCW1vdmVfb3BlcmFuZCwgdjhwbHVzX3JlZ2NtcF9vcCwgZW1pdF9tb3ZlX3NlcXVlbmNlLAoJc2luZ2xlbW92ZV9zdHJpbmcsIGRvdWJsZW1vdmVfc3RyaW5nLCBtZW1fYWxpZ25lZF84LAoJb3V0cHV0X21vdmVfZG91YmxlLCBvdXRwdXRfbW92ZV9xdWFkLCBvdXRwdXRfZnBfbW92ZV9kb3VibGUsCgltb3ZlX3F1YWRfZGlyZWN0aW9uLCBvdXRwdXRfZnBfbW92ZV9xdWFkLCBvdXRwdXRfc2NjX2luc24pOgoJUmVtb3ZlLgoJKHNtYWxsX2ludF9vcl9kb3VibGUpOiBOZXcgcHJlZGljYXRlLgoJKGdlbl9jb21wYXJlX3JlZyk6IFJlbW92ZSBUQVJHRVRfVjhQTFVTIGNtcGRpX3Y4cGx1cyBlbWlzc2lvbi4KCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogRW1pdCBtb3ZzaV97aGlnaCxsb19zdW19X3BpYyBpbnN0ZWFkIG9mCglvbGQgcGljX3tzZXRoaSxsb19zdW19X3NpIHBhdHRlcm5zLgoJKG1lbV9taW5fYWxpZ25tZW50KTogTmV3IGdlbmVyaWMgZnVuY3Rpb24gdG8gcmVwbGFjZQoJbWVtX2FsaWduZWRfOCwgd2hpY2ggdXNlcyBSRUdOT19QT0lOVEVSX0FMSUdOIGluZm9ybWF0aW9uIHdoZW4KCWF2YWlsYWJsZSBhbmQgY2FuIHRlc3QgZm9yIGFyYml0cmFyeSBhbGlnbm1lbnRzLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoc2F2ZV9yZWdzLCByZXN0b3JlX3JlZ3MsIGJ1aWxkX2JpZ19udW1iZXIsCglvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsIG91dHB1dF9jYnJhbmNoLCBvdXRwdXRfcmV0dXJuLAoJc3BhcmNfZmxhdF9zYXZlX3Jlc3RvcmUsIHNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlLAoJc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBQcmV0dGlmeQoJaW5zbiBvdXRwdXQuCgkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UgYW5kIGFkZCBjb2RlIHRvIG91dHB1dAoJZGVmZXJyZWQgY2FzZSB2ZWN0b3JzLgoJKG91dHB1dF92OWJyYW5jaCk6IExpa2V3aXNlLCBhZGQgbmV3IGFyZyBJTlNOIGFuZCB1c2UgaXQgdG8gdGFjawoJb24gYnJhbmNoIHByZWRpY3Rpb24gc2V0dGluZ3MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHByaW50X29wZXJhbmQpOiBMaWtld2lzZSBhbmQgb3V0cHV0ICVsNDQgZm9yIExPX1NVTXMgd2hlbgoJVEFSR0VUX0NNX01FRE1JRC4KCShzcGFyY19zcGxpdGRpX2xlZ2l0aW1hdGUpOiBOZXcgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIERJbW9kZQoJc3BsaXRzIGNhbiBiZSBydW4gcHJvcGVybHkgd2hlbiAhYXJjaDY0LgoJKHNwYXJjX2luaXRpYWxpemVfdHJhbXBvbGluZSwgc3BhcmM2NF9pbml0aWFsaXplX3RyYW1wb2xpbmUpOgoJUmVmb3JtYXQgZXhhbXBsZSBjb2RlIGluIGNvbW1lbnRzLgoJKHNldF9leHRlbmRzKTogUmVtb3ZlIFVOU1BFQy92OHBsdXNfY2xlYXJfaGlnaCBjYXNlLgoJKHNwYXJjX2FkZHJfZGlmZl9saXN0LCBzcGFyY19hZGRyX2xpc3QpOiBOZXcgc3RhdGljcyB0byBrZWVwIHRyYWNrCglvZiBkZWZlcnJlZCBjYXNlIHZlY3RvcnMgd2UgbmVlZCB0byBvdXRwdXQuCgkoc3BhcmNfZGVmZXJfY2FzZV92ZWN0b3IpOiBSZWNvcmQgYSBjYXNlIHZlY3Rvci4KCShzcGFyY19vdXRwdXRfYWRkcl92ZWMsIHNwYXJjX291dHB1dF9hZGRyX2RpZmZfdmVjLAoJc3BhcmNfb3V0cHV0X2RlZmVycmVkX2Nhc2VfdmVjdG9ycyk6IE5ldyBmdW5jdGlvbnMgdG8gb3V0cHV0IHRoZW0uCgkoc3BhcmNfZW1pdF9zZXRfY29uc3QzMik6IE5ldyBmdW5jdGlvbiB0byBmb3JtIDMyLWJpdCBjb25zdGFudHMgaW4KCXJlZ2lzdGVycyB3aGVuIHRoYXQgcmVxdWlyZXMgbW9yZSB0aGFuIG9uZSBpbnN0cnVjdGlvbi4KCShzYWZlX2NvbnN0REksIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2sxLAoJc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazIsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfbG9uZ3dheSwKCWFuYWx5emVfNjRiaXRfY29uc3RhbnQsIGNvbnN0NjRfaXNfMmluc25zLAoJY3JlYXRlX3NpbXBsZV9mb2N1c19iaXRzLCBzcGFyY19lbWl0X3NldF9jb25zdDY0KTogTmV3IGZ1bmN0aW9ucwoJd2hpY2ggZG8gdGhlIHNhbWUgZm9yIDY0LWJpdCBjb25zdGFudHMgd2hlbiBhcmNoNjQuCgkoc3BhcmNfZW1pdF9zZXRfc3ltYm9saWNfY29uc3Q2NCk6IE5ldyBmdW5jdGlvbiB0byBlbWl0IGFkZHJlc3MKCWxvYWRpbmcgZm9yIGFsbCBjb2RlIG1vZGVscyBvbiB2OS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRG8gbm90IG1ha2UKCSVnMSBmaXhlZCB3aGVuIGFyY2g2NCwgdW5maXggJWcwIHdoZW4gVEFSR0VUX0xJVkVfRzAuCgkoQUxURVJfSEFSRF9TVUJSRUcpOiBGaXggdGhpbmtvLCByZXR1cm4gUkVHTk8gKyAxIG5vdCAxLgoJKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MsIFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTKTogRml4CglpbmFjY3VyYWNpZXMgaW4gY29tbWVudHMsIGFkZCBzeW1ib2xpYyBhbmQgdGV4dF9zZWdtZW50IG9wZXJhbmRzCgl3aGVuIFRBUkdFVF9DTV9NRURBTlkgYW5kIFRBUkdFVF9DTV9FTUJNRURBTlkgcmVzcGVjdGl2ZWx5LiAgVXNlCglHRU5FUkFMX1JFR1MgaW4gdGhlc2UgY2FzZXMgYXMgYSB0ZW1wIFJFRyBpcyBuZWVkZWQgdG8gbG9hZCB0aGVzZQoJYWRkcmVzc2VzIGludG8gYSByZWdpc3RlciBwcm9wZXJseS4KCShFWFRSQV9DT05TVFJBSU5UKTogRG9jdW1lbnQgbW9yZSBhY2N1cmF0ZWx5LCByZW1vdmUgUSBjYXNlIGFzIGl0CglpcyBubyBsb25nZXIgdXNlZC4KCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBBbGxvdyBURm1vZGUgZm9yIExPX1NVTSBvbiB2OSBzaW5jZSBmcAoJcXVhZHMgYXJlIGd1YXJlbnRlZWQgdG8gaGF2ZSAxNi1ieXRlIGFsaWdubWVudC4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBGb3IgU1lNQk9MX1JFRiwgQ09OU1QsIGFuZCBMQUJFTF9SRUYgdXNlCgljb3B5X3RvX3N1Z2dlc3RlZF9yZWcgaW5zdGVhZCBvZiBleHBsaWNpdCBMT19TVU0gYW5kIEhJR0guCgkoQVNNX09VVFBVVF9BRERSX1ZFQywgQVNNX09VVFBVVF9BRERSX0RJRkZfVkVDKTogTmV3IG1hY3JvcyBmb3IKCWRlZmVycmVkIGNhc2UgdmVjdG9yIGltcGxlbWVudGF0aW9uLgoJKEFTTV9PVVRQVVRfQUREUl9WRUNfRUxUKTogVXNlIGZwdXRjIHRvIG91dHB1dCBuZXdsaW5lLgoJKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IFBhcmVudGhlc2l6ZSBMQUJFTCBpbiBtYWNybyBjYWxscy4KCUdlbmVyYXRlICJpbnRlcm5hbCBsYWJlbCAtIGxhYmVsIiBpbnN0ZWFkIG9mICJsYWJlbCAtIDFiIi4KCShQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBGb3IgTE9fU1VNIHVzZSAlbDQ0IG9uIFRBUkdFVF9DTV9NRURNSUQuCgkoUFJFRElDQVRFX0NPREVTKTogUmVtb3ZlIHNwYXJjX29wZXJhbmQsIG1vdmVfb3BlcmFuZCwKCXY4cGx1c19yZWdjbXBfb3AuICBBZGQgc21hbGxfaW50X29yX2RvdWJsZSwgaW5wdXRfb3BlcmFuZCwgYW5kCgl6ZXJvX29wZXJhbmQuCgkoZG91YmxlbW92ZV9zdHJpbmcsIG91dHB1dF9ibG9ja19tb3ZlLCBvdXRwdXRfZnBfbW92ZV9kb3VibGUsCglvdXRwdXRfZnBfbW92ZV9xdWFkLCBvdXRwdXRfbW92ZV9kb3VibGUsIG91dHB1dF9tb3ZlX3F1YWQsCglvdXRwdXRfc2NjX2luc24sIHNpbmdsZW1vdmVfc3RyaW5nLCBtZW1fYWxpZ25lZF84LCBtb3ZlX29wZXJhbmQsCglzcGFyY19vcGVyYW5kLCB2OHBsdXNfcmVnY21wX29wLCB2OHBsdXNfcmVnY21wX3ApOiBSZW1vdmUgZXh0ZXJucy4KCShzcGFyY19lbWl0X3NldF9jb25zdDMyLCBzcGFyY19lbWl0X3NldF9jb25zdDY0LAoJc3BhcmNfZW1pdF9zZXRfc3ltYm9saWNfY29uc3Q2NCwgaW5wdXRfb3BlcmFuZCwgemVyb19vcGVyYW5kLAoJbWVtX21pbl9hbGlnbm1lbnQsIHNtYWxsX2ludF9vcl9kb3VibGUpOiBBZGQgZXh0ZXJucy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kOiBEb2N1bWVudCB0aGUgbWFueSB1c2VzIG9mIFVOU1BFQyBhbmQKCVVOU1BFQ19WT0xBVElMRSBpbiB0aGlzIGJhY2tlbmQuCgkoZGVmaW5lX2Z1bmN0aW9uX3VuaXQgaWV1KTogUmVuYW1lIHRvIGlldV91bm5hbWVkLiAgQWRkIG1vdmUgYW5kCgl1bmFyeSB0byB0eXBlcyB3aGljaCBleGVjdXRlIGluIGl0LgoJKGRlZmluZV9mdW5jdGlvbl91bml0IGlldV9zaGlmdCk6IFJlbmFtZSB0byBpZXUwLgoJKGRlZmluZV9mdW5jdGlvbl91bml0IGlldTEpOiBOZXcsIGV4ZWN1dGVzIGNvbXBhcmUsIGNhbGwsIGFuZAoJdW5jb25kX2JyYW5jaCB0eXBlIGluc25zLgoJKGRlZmluZV9mdW5jdGlvbl91bml0cyBmb3IgdHlwZSBmZGl2cywgZmRpdmQsIGZzcXJ0KTogVGhlc2UKCWV4ZWN1dGUgaW4gdGhlIGZwdSBtdWx0aXBseSB1bml0IG5vdCB0aGUgYWRkZXIgb24gVWx0cmFTcGFyYy4KCShkZWZpbmVfZXhwYW5kIGNtcGRpKTogRGlzYWxsb3cgVEFSR0VUX1Y4UExVUy4KCShkZWZpbmVfaW5zbiBjbXBzaV9pbnNuKTogUmVuYW1lIHRvIGNtcHNpX2luc25fc3AzMi4KCShkZWZpbmVfaW5zbiBjbXBzaV9pbnNuX3NwNjQpOiBOZXcsIHNhbWUgYXMgc3AzMiB2YXJpYW50IGV4Y2VwdCBpdAoJYWxsb3dzIHRoZSBhcml0aF9kb3VibGVfb3BlcmFuZCBwcmVkaWNhdGUgYW5kIHJISSBjb25zdHJhaW50IHdoZW4KCVRBUkdFVF9BUkNINjQuCgkoZGVmaW5lX2luc24gY21wZGlfc3A2NCwgY21wc2ZfZnBlLCBjbXBkZl9mcGUsIGNtcHRmX2ZwZSwKCWNtcHNmX2ZwLCBjbXBkZl9mcCwgY21wdGZfZnAsIHNsdHVfaW5zbiwgbmVnX3NsdHVfaW5zbiwKCW5lZ19zbHR1X21pbnV4X3gsIG5lZ19zbHR1X3BsdXNfeCwgc2dldV9pbnNuLCBuZWdfc2dldV9pbnNuLAoJc2x0dV9wbHVzX3gsIHNsdHVfcGx1c194LCBzbHR1X3BsdXNfeF9wbHVzX3ksIHhfbWludXNfc2x0dSwKCXNnZXVfcGx1c194LCB4X21pbnVzX3NnZXUsIG1vdnFpX2NjX3NwNjQsIG1vdmhpX2NjX3NwNjQsCgltb3ZzaV9jY19zcDY0LCBtb3ZkaV9jY19zcDY0LCBtb3ZzZl9jY19zcDY0LCBtb3ZkZl9jY19zcDY0LAoJbW92dGZfY2Nfc3A2NCwgbW92cWlfY2NfcmVnX3NwNjQsIG1vdmhpX2NjX3JlZ19zcDY0LAoJbW92c2lfY2NfcmVnX3NwNjQsIG1vdmRpX2NjX3JlZ19zcDY0LCBtb3ZzZl9jY19yZWdfc3A2NCwKCW1vdmRmX2NjX3JlZ19zcDY0LCBtb3Z0Zl9jY19yZWdfc3A2NCwgemVyb19leHRlbmRoaXNpMl9pbnNuLAoJY21wX3NpcWlfdHJ1bmMsIGNtcF9zaXFpX3RydW5jX3NldCwgc2lnbl9leHRlbmRoaXNpMl9pbnNuLAoJc2lnbl9leHRlbmRxaWhpMl9pbnNuLCBzaWduX2V4dGVuZHFpc2kyX2luc24sCglzaWduX2V4dGVuZHFpZGkyX2luc24sIHNpZ25fZXh0ZW5kaGlkaTJfaW5zbiwKCWV4dGVuZHNmZGYyLCBleHRlbmRzZnRmMiwgZXh0ZW5kZGZ0ZjIsIHRydW5jZGZzZjIsIHRydW5jdGZzZjIsCgl0cnVuY3RmZGYyLCBmbG9hdHNpc2YyLCBmbG9hdHNpZGYyLCBmbG9hdHNpdGYyLCBmbG9hdGRpc2YyLAoJZmxvYXRkaWRmMiwgZmxvYXRkaXRmMiwgZml4X3RydW5jc2ZzaTIsIGZpeF90cnVuY2Rmc2kyLAoJZml4X3RydW5jdGZzaTIsIGZpeF90cnVuY3NmZGkyLCBmaXhfdHJ1bmNkZmRpMiwgZml4X3RydW5jdGZkaTIsCglhZGRkaTNfc3A2NCwgYWRkc2kzLCBjbXBfY2N4X3BsdXMsIGNtcF9jY19wbHVzX3NldCwgc3ViZGlfc3A2NCwKCXN1YnNpMywgY21wX21pbnVzX2NjeCwgY21wX21pbnVzX2NjeF9zZXQsIG11bHNpMywgbXVsZGkzLAoJbXVsZGkzX3Y4cGx1cywgY21wX211bF9zZXQsIG11bHNpZGkzLCBtdWxzaWRpM192OHBsdXMsCgljb25zdF9tdWxzaWRpM192OHBsdXMsIG11bHNpZGkzX3NwMzIsIGNvbnN0X211bHNpZGkzLAoJc211bHNpM19oaWdocGFydF92OHBsdXMsIHVubmFtZWQgc3VicmVnIG11bHQsCgljb25zdF9zbXVsc2kzX2hpZ2hwYXJ0X3Y4cGx1cywgc211bHNpM19oaWdocGFydF9zcDMyLAoJY29uc3Rfc211bHNpM19oaWdocGFydCwgdW11bHNpZGkzX3Y4cGx1cywgdW11bHNpZGkzX3NwMzIsCgljb25zdF91bXVsc2lkaTMsIGNvbnN0X3VtdWxzaWRpM192OHBsdXMsIHVtdWxzaTNfaGlnaHBhcnRfdjhwbHVzLAoJY29uc3RfdW11bHNpM19oaWdocGFydF92OHBsdXMsIHVtdWxzaTNfaGlnaHBhcnRfc3AzMiwKCWNvbnN0X3VtdWxzaTNfaGlnaHBhcnQsIGRpdnNpMywgZGl2ZGkzLCBjbXBfc2Rpdl9jY19zZXQsIHVkaXZzaTMsCgl1ZGl2ZGkzLCBjbXBfdWRpdl9jY19zZXQsIHNtYWNzaSwgc21hY2RpLCB1bWFjZGksIGFuZGRpM19zcDY0LAoJYW5kc2kzLCBhbmRfbm90X2RpX3NwNjQsIGFuZF9ub3Rfc2ksIGlvcmRpM19zcDY0LCBpb3JzaTMsCglvcl9ub3RfZGlfc3A2NCwgb3Jfbm90X3NpLCB4b3JkaTNfc3A2NCwgeG9yc2kzLCB4b3Jfbm90X2RpX3NwNjQsCgl4b3Jfbm90X3NpLCBjbXBfY2NfYXJpdGhfb3AsIGNtcF9jY3hfYXJpdGhfb3AsCgljbXBfY2NfYXJpdGhfb3Bfc2V0LCBjbXBfY2N4X2FyaXRoX29wX3NldCwgY21wX2NjeF94b3Jfbm90LAoJY21wX2NjX3hvcl9ub3Rfc2V0LCBjbXBfY2N4X3hvcl9ub3Rfc2V0LCBjbXBfY2NfYXJpdGhfb3Bfbm90LAoJY21wX2NjeF9hcml0aF9vcF9ub3QsIGNtcF9jY19hcml0aF9vcF9ub3Rfc2V0LAoJY21wX2NjeF9hcml0aF9vcF9ub3Rfc2V0LCBuZWdkaTJfc3A2NCwgY21wX2NjX25lZywgY21wX2NjeF9uZWcsCgljbXBfY2Nfc2V0X25lZywgY21wX2NjeF9zZXRfbmVnLCBvbmVfY21wbGRpMl9zcDY0LCBjbXBfY2Nfbm90LAoJY21wX2NjeF9ub3QsIGNtcF9jY19zZXRfbm90LCBjbXBfY2N4X3NldF9ub3QsIGFkZHRmMywgYWRkZGYzLAoJYWRkc2YzLCBzdWJ0ZjMsIHN1YmRmMywgc3Vic2YzLCBtdWx0ZjMsIG11bGRmMywgbXVsc2YzLAoJbXVsZGYzX2V4dGVuZCwgbXVsdGYzX2V4dGVuZCwgZGl2dGYzLCBkaXZkZjMsIGRpdnNmMywgbmVndGYyLAoJbmVnZGYyLCBuZWdzZjIsIGFic3RmMiwgYWJzZGYyLCBhYnNzZjIsIHNxcnR0ZjIsIHNxcnRkZjIsIHNxcnRzZjIsCglhc2hsc2kzLCBhc2hsZGkzLCB1bm5hbWVkIERJIGFzaGlmdCwgY21wX2NjX2FzaGlmdF8xLAoJY21wX2NjX3NldF9hc2hpZnRfMSwgYXNocnNpMywgYXNocmRpMywgdW5uYW1lZCBESSBhc2hpZnRydCwKCWFzaHJkaTNfdjhwbHVzLCBsc2hyc2kzLCBsc2hyZGkzLCB1bm5hbWVkIERJIGxzaGlmdHJ0LAoJbHNocmRpM192OHBsdXMsIHRhYmxlanVtcF9zcDMyLCB0YWJsZWp1bXBfc3A2NCwgY2FsbF9hZGRyZXNzX3NwMzIsCgljYWxsX3N5bWJvbGljX3NwMzIsIGNhbGxfYWRkcmVzc19zcDY0LCBjYWxsX3N5bWJvbGljX3NwNjQsCgljYWxsX2FkZHJlc3Nfc3RydWN0X3ZhbHVlX3NwMzIsIGNhbGxfc3ltYm9saWNfc3RydWN0X3ZhbHVlX3NwMzIsCgljYWxsX2FkZHJlc3NfdW50eXBlZF9zdHJ1Y3RfdmFsdWVfc3AzMiwKCWNhbGxfc3ltYm9saWNfdW50eXBlZF9zdHJ1Y3RfdmFsdWVfc3AzMiwgY2FsbF92YWx1ZV9hZGRyZXNzX3NwMzIsCgljYWxsX3ZhbHVlX3N5bWJvbGljX3NwMzIsIGNhbGxfdmFsdWVfYWRkcmVzc19zcDY0LAoJY2FsbF92YWx1ZV9zeW1ib2xpY19zcDY0LCBicmFuY2hfc3AzMiwgYnJhbmNoX3NwNjQsCglmbHVzaF9yZWdpc3Rlcl93aW5kb3dzLCBnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmUsCglnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmVfdjksIGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OV9zcDY0LAoJZmx1c2gsIGFsbCBsZGQvc3RkIHBlZXBob2xlcywgcmV0dXJuX3FpLCByZXR1cm5faGksIHJldHVybl9zaSwKCXJldHVybl9hZGRzaSwgcmV0dXJuX2RpLCByZXR1cm5fYWRkZGksIHJldHVybl9zZiwgYWxsIGNhbGwranVtcAoJcGVlcGhvbGVzLCB0cmFwLCB1bm5hbWVkIHRyYXAgaW5zbnMpOiBQcmV0dGlmeSBvdXRwdXQgc3RyaW5ncy4KCShkZWZpbmVfaW5zbiBhbmRkaTNfc3AzMiwgYW5kX25vdF9kaV9zcDMyLCBpb3JkaTNfc3AzMiwKCW9yX25vdF9kaV9zcDMyLCB4b3JkaTNfc3AzMiwgeG9yX25vdF9kaV9zcDMyLCBvbmVfY21wbGRpMik6CglMaWtld2lzZSBhbmQgZm9yY2UgKyBpbXBsZW1lbnQgc3BsaXRzIGZvciBpbnRlZ2VyIGNhc2VzLgoJKGRlZmluZV9pbnNuIHJldHVybl9zZl9ub19mcHUpOiBMaWtld2lzZSBhbmQgYWxsb3cgdG8gbWF0Y2ggd2hlbgoJbm8tZnB1IGJlY2F1c2Ugb2Ygb3VyIHN1YnJlZyBTRm1vZGUgc3BsaXRzLgoJKGRlZmluZV9pbnNuIHplcm9fZXh0ZW5kcWloaTIsIHplcm9fZXh0ZW5kcWlzaTJfaW5zbiwKCXplcm9fZXh0ZW5kcWlkaTJfaW5zbiwgemVyb19leHRlbmRoaWRpMl9pbnNuLAoJemVyb19leHRlbmRzaWRpMl9pbnNuLCBzaWduX2V4dGVuZHNpZGkyX2luc24pOiBMaWtld2lzZSBhbmQgdXNlCglpbnB1dF9vcGVyYW5kIGZvciBzZWNvbmQgb3BlcmFuZC4KCShjbXBfbWludXNfY2MsIGNtcF9taW51c19jY19zZXQpOiBMaWtld2lzZSBhbmQgdXNlCglyZWdfb3JfMF9vcGVyYW5kIGZvciBvcGVyYW5kIDIgc28gbmV3IHNwbGl0cyBjYW4gdXNlIGl0LgoJKGNtcF96ZXJvX2V4dGVuZHFpc2kyLCBjbXBfemVyb19leHRlbmRxaXNpMl9zZXQsIGNtcF9jY19wbHVzLAoJY21wX2NjX3hvcl9ub3QpOiBMaWtld2lzZSBhbmQgZG9uJ3QgZm9yZ2V0IHRvIGNoZWNrIFRBUkdFVF9MSVZFX0cwCgl0b28uCgkoY21wX3plcm9fZXh0cmFjdCwgY21wX3plcm9fZXh0cmFjdF9zcDY0KTogTGlrZXdpc2UgYW5kIGFsbG93CglDT05TVF9ET1VCTEVzIGZvciBvcGVyYW5kIDIuCgkoZGVmaW5lX2luc24gbW92ZV9sYWJlbF9kaSk6IExpa2V3aXNlIGFuZCBsYWJlbCBkaXN0YW5jZQoJb3B0aW1pemF0aW9uIGJlY2F1c2UgaXQgbm8gbG9uZ2VyIHdvcmtzIHdpdGggbmV3IGRlZmVycmVkIGNhc2UKCXZlY3RvciBzY2hlbWUuICBUbyBiZSByZXZpc2l0ZWQuCgkoZGVmaW5lX2luc24geF9taW51c195X21pbnVzX3NsdHUsIHhfbWludXNfc2x0dV9wbHVzX3kpOiBMaWtld2lzZQoJYW5kIGFsbG93IHJlZ19vcl8wX29wZXJhbmQgYW5kIEogY29uc3RyYWludCBmb3Igc2Vjb25kIG9wZXJhbmQuCgkoZGVmaW5lX2luc24ganVtcCk6IFNldCBicmFuY2ggcHJlZGljdCB0YWtlbiBvbiBWOS4KCShkZWZpbmVfaW5zbiB0YWJsZWp1bXApOiBFbWl0IExBQkVMX1JFRiArIFBMVVMgbWVtb3J5IGFkZHJlc3MgZm9yCgluZXcgZGVmZXJyZWQgY2FzZSB2ZWN0b3Igc2NoZW1lLgoJKGRlZmluZV9pbnNuIHBpY190YWJsZWp1bXBfMzIsIHBpY190YWJsZWp1bXBfNjQpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gbmVnZGkyX3NwMzIpOiBGb3JjZSArIGltcGxlbWVudCBzcGxpdHMuCgkoZGVmaW5lX2luc24gbmVnc2kyLCBvbmVfY21wbHNpMik6IFJlbmFtZSB0byBuZWdzaTJfbm90X2xpdmVnMCBhbmQKCW9uZV9jbXBsc2kyX25vdF9saXZlZzAgcmVzcGVjdGl2ZWx5LCBhbmQgY3JlYXRlCWV4cGFuZGVyIG9mIG9yaWdpbmFsCgluYW1lcyB3aGljaCBlbWl0IHNwZWNpYWwgcnRsIGZvciBUQVJHRVRfTElWRV9HMC4KCShkZWZpbmVfaW5zbiBjbXBkaV92OHBsdXMsIHNjY19zaSwgc2NjX2RpKTogUmVtb3ZlLgoJKGRlZmluZV9pbnNuIHNlcSwgc25lLCBzbHQsIHNnZSwgc2xlLCBzbHR1LCBzZ2V1KTogRG9uJ3QgZG8KCWdlbl9jb21wYXJlX3JlZywgRkFJTCBpbnN0ZWFkLgoJKGRlZmluZV9pbnNuIHNndHUsIHNsZXUpOiBMaWtld2lzZSBhbmQgY2hlY2sgZ2VuX3MqKCkgcmV0dXJuCgl2YWx1ZXMgd2hlbiB0cnlpbmcgdG8gcmV2ZXJzZSBjb25kaXRpb24gY29kZXMsIGlmIHRoZXkgRkFJTCB0aGVuCglkbyBsaWtld2lzZS4KCShkZWZpbmVfaW5zbiBzbmVzaV96ZXJvLCBuZWdfc25lc2lfemVybywgc25lc2lfemVyb19leHRlbmQsCglzbmVkaV96ZXJvLCBuZWdfc25lZGlfemVybywgc25lZGlfemVyb190cnVuYywgc2Vxc2lfemVybywKCW5lZ19zZXFzaV96ZXJvLCBzZXFzaV96ZXJvX2V4dGVuZCwgc2VxZGlfemVybywgbmVnX3NlcWRpX3plcm8sCglzZXFkaV96ZXJvX3RydW5jLCB4X3BsdXNfaV9uZV8wLCB4X21pbnVzX2lfbmVfMCwgeF9wbHVzX2lfZXFfMCwKCXhfbWludXNfaV9lcV8wKTogQWRkIG5ldyBzcGxpdHMgdG8gcGVyZm9ybSB0aGVzZSBtdWx0aS1pbnNuIGNhc2VzLAoJc2V0IG91dHB1dCBzdHJpbmcgdG8gIyB0byBpbmRpY2F0ZSB0aGV5IGFyZSBtYW5kYXRvcnkgc3BsaXRzLgoJKGRlZmluZV9pbnNuIHBpY19sb19zdW1fc2ksIHBpY19zZXRoaV9zaSwgcGljX2xvX3N1bV9kaSwKCXBpY19zZXRoaV9kaSwgbW92ZV9waWNfbGFiZWxfc2kpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gbW92c2lfbG93X3N1bSwgbW92c2lfaGlnaCwgbW92c2lfbG9fc3VtX3BpYywKCW1vdnNpX2hpZ2hfcGljLCBtb3ZzaV9waWNfbGFiZWxfcmVnKTogTmV3IHBhdHRlcm5zIHRvIHRha2UgdGhlaXIKCXBsYWNlLgoJKGRlZmluZV9leHBhbmQgbW92c2lfcGljX2xhYmVsX3JlZiwgZGVmaW5lX2luc24KCW1vdnNpX2hpZ2hfcGljX2xhYmVsX3JlZiwgbW92c2lfbG9fc3VtX3BpY19sYWJlbF9yZWYpOiBOZXcKCWV4cGFuZGVyIGFuZCBpbnNucyB0byBoYW5kbGUgUElDIGxhYmVsIHJlZmVyZW5jZXMgYW5kIGRlZmVycmVkCgljYXNlIHZlY3RvcnMuCgkoZGVmaW5lX2luc24gZ2V0X3BjX3ZpYV9yZHBjKTogQ29tbWVudCBvdXQgYXMgaXQgaXMgbm8gbG9uZ2VyCgl1c2VkLgoJKGRlZmluZV9leHBhbmQgbW92cWksIG1vdmhpLCBtb3ZzaSwgbW92ZGksIG1vdnNmLCBtb3ZkZiwgbW92dGYpOgoJUmV3cml0ZSB0byBub3QgdXNlIGVtaXRfbW92ZV9zZXF1ZW5jZSwgbWFrZSB1c2Ugb2YgbmV3IGNvbnN0YW50Cglmb3JtYXRpb24gY29kZSwgYW5kIG5ldyBzcGxpdHMgZm9yIGFsbCBtdWx0aS1pbnNuIGNhc2VzLgoJKGRlZmluZV9pbnNuIG1vdnFpX2luc24pOiBSZW1vdmUgc2V0aGkgY2FzZSwgaXQgY2FuIG5ldmVyIGhhcHBlbi4KCVVzZSByZWdfb3JfemVyb19vcGVyYW5kIGluc3RlYWQgb2YgY29uc3QwX3J0eCBleHBsaWNpdCB0ZXN0LAoJdXNlIGlucHV0X29wZXJhbmQgaW5zdGVhZCBvZiBtb3ZlX29wZXJhbmQgZm9yIHNvdXJjZSwgYW5kIHVzZQoJZ2VuZXJhbF9vcGVyYW5kIG5vdyBmb3IgZGVzdC4KCShkZWZpbmVfaW5zbiBtb3ZoaV9pbnNuKTogU2ltaWxhciBidXQgbGVhdmUgc2V0aGkgY2FzZS4KCShkZWZpbmVfaW5zbiBsb19zdW1fcWksIHN0b3JlX3FpLCBzdG9yZV9oaSk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBzZXRoaV9oaSBsb19zdW1faGkpOiBSZW5hbWUgdG8gbW92aGlfaGlnaCBhbmQKCW1vdmhpX2xvX3N1bSByZXNwZWN0aXZlbHksIHByZXR0aWZ5IG91dHB1dCBzdHJpbmcuCgkoZGVmaW5lX2luc24gbW92c2lfemVyb19saXZlZzApOiBOZXcgcGF0dGVybiB0byBwdXQgemVybyBpbnRvIGEKCXJlZ2lzdGVyIHdoZW4gbmVlZGVkIG9uIFRBUkdFVF9MSVZFX0cwLgoJKGRlZmluZV9pbnNuIG1vdnNpX2luc24pOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGFuZCBpbnB1dF9vcGVyYW5kCglmb3IgZGVzdCBhbmQgc3JjIHJlc3BlY3RpdmVseS4gIFNpbXBsaWZ5IGFwcGxpY2FiaWxpdHkgdGVzdC4KCVByZXR0aWZ5IG91dHB1dCBzdHJpbmdzLCBhbmQgYWRkIGNsciBhbHRlcm5hdGl2ZSBmb3IgSgoJY29uc3RyYWludC4KCShkZWZpbmVfaW5zbiBtb3ZkaV9zcDMyX3Y5LCBtb3ZkaV9zcDMyLCBkZWZpbmVfc3BsaXRzIGZvcgoJZGVwcmVjYXRlZCBzdGQgYW5kIHJlZy1yZWcgREkgbW92ZXMpOiBSZW1vdmUgYW5kLi4uCgkoZGVmaW5lX2luc24gbW92ZGlfaW5zbl9zcDMyLCBtb3ZkaV9pbnNuX3NwNjQpOiBSZXBsYWNlIHdpdGggbmV3CglpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGZvcmNlZCBzcGxpdHMgZm9yIGFsbCBub24tc2luZ2xlIGluc24KCWNhc2VzLgoJKGRlZmluZV9zcGxpdCBESSBtb3ZlIGNhc2VzIG9uICFhcmNoNjQpOiBOZXcgc3BsaXRzIHRvIGhhbmRsZSBhbGwKCXNpdHVhdGlvbnMgb2YgNjQtYml0IGRvdWJsZSByZWdpc3RlciBESW1vZGUgb24gMzJiaXQsIGFuZAoJdW5hbGlnbmVkIHJlZ2lzdGVycyBhbmQgbWVtb3J5IGFkZHJlc3NlcyBmb3IgYWxsIHN1YnRhcmdldHMuCgkoZGVmaW5lX2luc24gbW92c2ZfY29uc3RfaW5zbiwgbW92ZGZfY29uc3RfaW5zbiwgc3RvcmVfc2YpOgoJUmVtb3ZlLgoJKGRlZmluZV9pbnNuIG1vdnNmX2luc24sIG1vdnNmX25vX2ZfaW5zbik6IFVzZSBnZW5lcmFsX29wZXJhbmQgYW5kCglpbnB1dF9vcGVyYW5kIGZvciBkZXN0IGFuZCBzcmMgcmVzcGVjdGl2ZWx5LCBwcmV0dGlmeSBvdXRwdXQKCXN0cmluZ3MuCgkoZGVmaW5lX2luc24gbW92ZGZfaW5zbiwgbW92ZGZfbm9fZV9pbnNuLCBzdG9yZV9kZiwKCW1vdnRmX2NvbnN0X2luc24sIG1vdnRmX2luc24sIG1vdnRmX25vX2VfaW5zbiwgc3RvcmVfdGYpOiBSZW1vdmUKCWFuZC4uLgoJKGRlZmluZV9pbnNuIG1vdmRmX2luc25fc3AzMiwgbW92ZGZfbm9fZV9pbnNuX3NwMzIsCgltb3ZkZl9pbnNuX3NwNjQsIG1vdmRmX25vX2VfaW5zbl9zcDY0LCBtb3Z0Zl9pbnNuLAoJbW92dGZfbm9fZV9pbnNuX3NwMzIsIG1vdnRmX2luc25faHFfc3A2NCwgbW92dGZfaW5zbl9zcDY0LAoJbW92dGZfbm9fZV9pbnNuX3NwNjQpIFJlcGxhY2Ugd2l0aCBuZXcKCWltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgZm9yY2VkIHNwbGl0cyBmb3IgYWxsIG5vbi1zaW5nbGUgaW5zbgoJY2FzZXMuCgkoZGVmaW5lX3NwbGl0IERGIG1vdmUgY2FzZXMpOiBOZXcgc3BsaXRzIGluIHNpbWlsYXIgdmVpbiB0byBESQoJbW92ZSBjb3VudGVycGFydHMuCgkoZGVmaW5lX2luc24gc2V0aGlfZGlfbWVkbG93LCBzZXRoaV9kaV9tZWRpdW1fcGljLAoJc2V0aGlfZGlfZW1ibWVkYW55X2RhdGEsIHNldGhpX2RpX2VtYm1lZGFueV90ZXh0LCBzZXRoaV9kaV9zcDY0LAoJbW92ZGlfc3A2NF9pbnNuKTogUmVtb3ZlIG9sZCB2OSBjb2RlIG1vZGVsIGFuZCBjb25zdGFudCBsb2FkaW5nCglzdXBwb3J0IGluc25zIGFuZC4uCgkoZGVmaW5lX2luc24gcGljX2xvX3N1bV9kaSwgcGljX3NldGhpX2RpLAoJc2V0aGlfZGlfbWVkbG93X2VtYm1lZGFueV9waWMsIHNldGhpX2RpX21lZGxvdywgbG9zdW1fZGlfbWVkbG93LAoJc2V0aDQ0LCBzZXRtNDQsIHNldGw0NCwgc2V0aGgsIHNldGxtLCBzZXRobSwgc2V0bG8sCgllbWJtZWRhbnlfc2V0aGksIGVtYm1lZGFueV9sb3N1bSwgZW1ibWVkYW55X2Jyc3VtLAoJZW1ibWVkYW55X3RleHR1aGksIGVtYm1lZGFueV90ZXh0aGksIGVtYm1lZGFueV90ZXh0dWxvLAoJZW1ibWVkYW55X3RleHRsbywgbW92ZGlfbG9fc3VtX3NwNjRfY2ludCwgbW92ZGlfbG9fc3VtX3NwNjRfZGJsLAoJbW92ZGlfaGlnaF9zcDY0X2NpbnQsIG1vdmRpX2hpZ2hfc3A2NF9kYmwpOiBSZXBsYWNlIHdpdGggbmV3CglzY2hlbWUsIHVzaW5nIHVuc3BlY3MsIHNlY29uZGFyeSByZWxvYWRzLCBhbmQgb25lIHRvIG9uZSBzcGFyYwoJaW5zbiB0byBydGwgaW5zbiBtYXBwaW5nIGZvciBiZXR0ZXIgc2NoZWR1bGluZyBhbmQgY29kZSBnZW4uCgkoZGVmaW5lX2V4cGFuZCByZWxvYWRfaW5kaSwgcmVsb2FkX291dGRpKTogUmVsb2FkIGhlbHBlcnMgZm9yCglNRURBTlkgYW5kIEVNQk1FREFOWSBzeW1ib2wgYWRkcmVzcyBsb2FkaW5nIGNhc2VzIHdoaWNoIHJlcXVpcmUgYQoJdGVtcG9yYXJ5IHJlZ2lzdGVyLgoJKGRlZmluZV9leHBhbmQgbW92c2ljYyk6IFJlbW92ZSB2OHBsdXNfcmVnY21wIGNhc2VzLgoJKGRlZmluZV9pbnNuIG1vdmRpX2NjX3NwNjRfdHJ1bmMsIG1vdmRpX2NjX3JlZ19zcDY0X3RydW5jLAoJY21wX3plcm9fZXh0ZW5kcWlkaTIsIGNtcF96ZXJvX2V4dGVuZHFpZGkyX3NldCwgY21wX3FpZGlfdHJ1bmMsCgljbXBfZGlxaV90cnVuY19zZXQpOiBOZXcgcGF0dGVybnMgdXNlZCBieSBzb21lIG9mIHRoZSBuZXcgc2NjCglzcGxpdHMgb24gYXJjaDY0LgoJKGRlZmluZV9pbnNuIHhvcmRpM19zcDY0X2RibCk6IE5ldyBwYXR0ZXJuIHVzZWQgZm9yIGNvbnN0YW50Cglmb3JtYXRpb24gd2hlbiBjcm9zc2luZyBmcm9tIDMyLWJpdCB0YXJnZXRzLgoJKGRlZmluZV9pbnNuIG1vdnNpX2NjX3JlZ192OHBsdXMsIHY4cGx1c19jbGVhcl9oaWdoLCBhbmQgaGVscGVyCglzcGxpdCk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBhZGR4LCBzdWJ4KTogTWFrZSB2aXNpYmxlIGFuZCBwcmV0dGlmeS4KCShkZWZpbmVfaW5zbiBhZGRkaTNfaW5zbl9zcDMyKTogTGlrZXdpc2UgYW5kIGZvcmNlIHNwbGl0LgoJKGRlZmluZV9pbnNuIGFkZHhfZXh0ZW5kLCBzdWJ4X2V4dGVuZCwgdW5uYW1lZCk6IE5ldyBwYXR0ZXJucyBmb3IKCTY0Yml0IHNjYyBzcGxpdCB1c2FnZS4KCShkZWZpbmVfaW5zbiB1bm5hbWVkIHBsdXNESSB6ZXJvX2V4dGVuZCwgdW5uYW1lZCBtaW51c0RJCgl6ZXJvX2V4dGVuZCwgc3ViZGkzKTogRm9yY2UgYW5kIGltcGxlbWVudCBzcGxpdHMuCgkKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3Qgb3V0cHV0IGxhYmVscyBpZiB0YXJnZXQKCXNwZWNpZmllcyBBU01fT1VUUFVUX0FERFJfe0RJRkZ9X1ZFQy4gIERvIHRoZXNlIG1hY3JvIG9wZXJhdGlvbnMKCWluc3RlYWQuCgkKCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogV2hlbiB0YWtpbmcgb24gQlJfUFJFRCBub3RlcyBhdCB0aGUgZW5kLAoJZG9uJ3QgZm9yZ2V0IHRvIHdhbGsgaW5zaWRlIFNFUVVFTkNFU3MgdG9vIGFzIHRoZXNlIGFyZSB3aGF0IHRoZQoJZGVsYXkgc2xvdCBzY2hlZHVsZXIgd2lsbCBjcmVhdGUuCgkKTW9uIEF1ZyAxMCAwMToyMTowMSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGV4dHhsKzEsKzIpOiBOZXcgcGF0dGVybnMgdG8gd29yayBhcm91bmQKCWNvbWJpbmUgbG9zc2FnZS4KClNhdCBBdWcgIDggMTk6MjA6MjIgMTk5OCBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKCgkqIHJzNjAwMC5jIChyczYwMDBfYWxsb2NhdGVfc3RhY2tfc3BhY2UpIEZpeCB0eXBvIHdoaWNoCgljYXVzZWQgYmFkIGFzc2VtYmx5IGNvZGUgdG8gYmUgZ2VuZXJhdGVkLgoKU2F0IEF1ZyAgOCAxODo1MzoyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBuZXRic2QuaDogRml4IHR5cG8uCgpNb24gQXVnICAzIDAwOjA2OjQyIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4gCgoJKiBjb25maWcuc3ViOiBGaXggdHlwby4KClN1biBBdWcgIDIgMjI6Mzk6MDggMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGludm9rZS50ZXhpIChFbnZpcm9ubWVudCBWYXJpYWJsZXMpOiBUeXBvOiBDaGFuZ2UgImFzY3BlY3RzIgoJaW50byAiYXNwZWN0cyIuCgkoUnVubmluZyBQcm90b2l6ZSk6IFR5cG86IENoYW5nZSAidGhlciIgaW50byAib3RoZXIiLgoKU3VuIEF1ZyAgMiAwMDo0Mjo1MCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L25ldGJzZC5oOiBVbmRvIHByZXZpb3VzIGNoYW5nZSB0byBEV0FSRjJfVU5XSU5EX0lORk8uCgkqIG02OGsvbmV0YnNkLmg6IExpa2V3aXNlLgoJKiBuczMyay9uZXRic2QuaDogTGlrZXdpc2UuCgkqIHNwYXJjL25ldGJzZC5oOiBMaWtld2lzZS4KClNhdCBBdWcgIDEgMTc6NTk6MzAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBnaW5jbHVkZS92YS1hbHBoYS5oICh2YV9saXN0KTogVXNlIGEgdHlwZWRlZiwgbm90IGEgZGVmaW5lLgogICAgICAgICogZ2luY2x1ZGUvdmEtY2xpcHBlci5oICh2YV9saXN0KTogTGlrZXdpc2UuCgpGcmkgSnVsIDMxIDIwOjIyOjAyIDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogSWYgYmlnIGVuZGlhbiBhbmQgLU9zLCB1c2UKCWxvYWQvc3RvcmUgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zIHVubGVzcyB1c2VyIG92ZXJyaWRlcy4KCkZyaSBKdWwgMzEgMTc6MDg6NTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbnMzMmsvbmV0YnNkLmg6IEZpeCB0eXBvLgoKRnJpIEp1bCAzMSAxMDoyMzo1NSAxOTk4ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGNhbnVjay5jeWdudXMuY29tPgoKCSogbTMyci9tMzJyLmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBBbHdheXMgb3V0cHV0IGxpbmUgbnVtYmVyCglsYWJlbHMgd2l0aCAuZGVidWdzeW0gaWYgbm8gcGFyYWxsZWwgaW5zbnMuCgpUaHUgSnVsIDMwIDE5OjE1OjUzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoZnAgY21wKTogUmVwbGljYXRlIHBhdHRlcm5zIGZvciBBTFBIQV9UUF9JTlNOLgoJKGZjbW92KTogUmVtb3ZlIEFMUEhBX1RQX0lOU04gcGF0dGVybnMgLS0gZmNtb3YgZG9lc24ndCB0cmFwLgoKVGh1IEp1bCAzMCAxOTo1MDoxNSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAveC1haXg0MyAoQVJfRk9SX1RBUkdFVF9GTEFHUyk6IERlbGV0ZS4KCShBUl9GT1JfVEFSR0VUKTogRGVmaW5lLgoKVGh1IEp1bCAzMCAxMjoyOToxMiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZHluLXN0cmluZy5oOiBOZXcgZmlsZS4KCSogZHluLXN0cmluZy5jOiBMaWtld2lzZS4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgZHluLXN0cmluZy5vLgoJKGR3YXJmMm91dC5vKTogQWRkIGR5bi1zdHJpbmcuaCBkZXBlbmRlbmN5LgoJKGR5bi1zdHJpbmcubyk6IExpc3QgZGVwZW5kZW5jaWVzLgoJKiBkd2FyZjJvdXQuYzogSW5jbHVkZSBkeW4tc3RyaW5nLmguCgkoQVNNX05BTUVfVE9fU1RSSU5HKTogVXNlIGR5bl9zdHJpbmdfYXBwZW5kLCByYXRoZXIgdGhhbiBzdHJjcHkuCgkoYWRkcl9jb25zdF90b19zdHJpbmcpOiBUYWtlIGEgZHluX3N0cmluZ190LCBub3QgYSBjaGFyKiBhcyBhCglwcm90b3R5cGUuICBVc2UgZHluX3N0cmluZ19hcHBlbmQgcmF0aGVyIHRoYW4gc3RyY2F0LCB0aHJvdWdob3V0LgoJKGFkZHJfdG9fc3RyaW5nKTogVXNlIGR5bl9zdHJpbmdfdC4KClRodSBKdWwgMzAgMTM6MDg6MDcgMTk5OCAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJRnVuY3Rpb24gZW50cnkvZXhpdCBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uOgoJKiBleHByLmggKHByb2ZpbGVfZnVuY3Rpb25fZW50cnlfbGliZnVuYywKCXByb2ZpbGVfZnVuY3Rpb25fZXhpdF9saWJmdW5jKTogRGVjbGFyZSBuZXcgdmFyaWFibGVzLgoJKiBvcHRhYnMuYzogRGVmaW5lIHRoZW0gaGVyZS4KCShpbml0X29wdGFicyk6IEluaXRpYWxpemUgdGhlbS4KCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9kZWNsKTogTmV3IGZsYWcKCW5vX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdC4KCShERUNMX05PX0lOU1RSVU1FTlRfRlVOQ1RJT05fRU5UUllfRVhJVCk6IE5ldyBhY2Nlc3NvciBtYWNyby4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1lcmdlIGl0LgoJKiBjLWNvbW1vbi5jIChlbnVtIGF0dHJzKTogTmV3IHZhbHVlIEFfTk9fSU5TVFJVTUVOVF9GVU5DVElPTi4KCShpbml0X2F0dHJpYnV0ZXMpOiBVc2UgaXQgZm9yICJub19pbnN0cnVtZW50X2Z1bmN0aW9uIi4KCShkZWNsX2F0dHJpYnV0ZXMpOiBIYW5kbGUgaXQsIGZvciBmdW5jdGlvbnMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgoJY29tcGlsZWQuICBTZXQgZGVjbCBmbGFnLgoJKiBmbGFncy5oIChmbGFnX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdCk6IERlY2xhcmUgbmV3Cgl2YXJpYWJsZS4KCSogdG9wbGV2LmMgKGZsYWdfaW5zdHJ1bWVudF9mdW5jdGlvbl9lbnRyeV9leGl0KTogRGVmaW5lIGl0IGhlcmUuCgkoZl9vcHRpb25zKTogTmV3IG9wdGlvbiAiaW5zdHJ1bWVudC1mdW5jdGlvbnMiLgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBOZXcgZmllbGQgaW5zdHJ1bWVudF9lbnRyeV9leGl0LgoJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uX2luc3RydW1lbnRfZW50cnlfZXhpdCk6IE5ldwoJdmFyaWFibGUuCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvLCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogU2F2ZSBhbmQKCXJlc3RvcmUuCgkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0IGN1cnJlbnRfIHZhcmlhYmxlLCBtYXliZSBlbWl0IHJldHVybgoJbGFiZWwgYW5kIGVudHJ5IHByb2ZpbGUgY2FsbC4KCShleHBhbmRfZnVuY3Rpb25fZW5kKTogTWF5YmUgZW1pdCBleGl0IHByb2ZpbGUgY2FsbC4KClRodSBKdWwgMzAgMDA6NTg6MzQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5tZCAobW92cWkpOiBXaGVuIG9wdGltaXppbmcgYSBsb2FkIG9mIChjb25zdF9pbnQgMSkgaW50byBhCglOT05fUUlfUkVHX1AsIHByZXRlbmQgdGhlIHJlZ2lzdGVyIGlzIFNJbW9kZS4KCldlZCBKdWwgMjkgMjM6NDk6MjMgMTk5OCAgVG9kZCBWaWVybGluZyA8dHZAbmV0YnNkLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogVXNlIHhtLW5ldGJzZC5oIGFzIHRoZSBOZXRCU0QgeG0gZmlsZSAobm90IHhtLXNpZ2xpc3QpLgoJQWNjZXB0IGFybTMyIGFzIGFybSwgbTY4azRrIGFzIG02OGssIG1pcHNsZSBhcyBtaXBzLWRlYywgYW5kIGFueQoJbWFudWZhY3R1cmVyIGlkIGZvciBuczMyay4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KCSogY29uZmlnL25ldGJzZC5oOiBXaGVuIHVzaW5nIEFTTV9XRUFLRU5fTEFCRUwsIG1ha2UgaXQgZ2xvYmFsIHRvby4KCSogY29uZmlnL3QtbmV0YnNkOiBEb24ndCBjb21waWxlIGxpYmdjYzEtdGVzdCBhcyB0aGUgZm5zIGFyZSBpbiBsaWJjLgoJKiBjb25maWcvaTM4Ni9uZXRic2QuaDogVW5kZWZpbmUgRFdBUkYyX1VOV0lORF9JTkZPLCBub3QgZGVmaW5lIGFzIDAuCgkqIGNvbmZpZy9tNjhrL25ldGJzZC5oOiBTYW1lLgoJKiBjb25maWcvbnMzMmsvbmV0YnNkLmg6IFNhbWUuCgkqIGNvbmZpZy9zcGFyYy9uZXRic2QuaDogU2FtZS4KCldlZCBKdWwgMjkgMjI6Mzk6MjEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogRG8gbm90IGFib3J0IGZvciBhbiBVTlJPTExfTU9EVUxPCglvciBVTlJPTExfQ09NUExFVEVMWSBsb29wIHRoYXQgc3RhcnRzIHdpdGggYSBqdW1wIHRvIGl0cwoJZXhpdCBjb2RlLgoKV2VkIEp1bCAyOSAyMjoxODoxNCAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAvcnM2MDAwLm1kIChhYnNkaTIgZGVmaW5lX3NwbGl0KTogU3dhcCBvcGVyYW5kcyBvZiBNSU5VUy4KCSogcnM2MDAwL3JzNjAwMC5jIChtYXNrNjRfb3BlcmFuZCk6IFVzZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5ULgoJKHByaW50X29wZXJhbmQsIGNhc2UgJ0InKTogRG9uJ3QgZmFsbCB0aHJvdWdoLgoJKHByaW50X29wZXJhbmQsIGNhc2UgJ1MnKTogQ29ycmVjdCBtYXNrIGJlZ2luL2VuZCBjb21wdXRhdGlvbi4KCVVzZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5ULgoJKiByczYwMDAvcnM2MDAwLmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIF9MT05HX0xPTkcuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBHUFIxMyBmaXhlZCBpZiBUQVJHRVRfNjRCSVQuCgkqIHJzNjAwMC9haXg0MS5oIChDUFBfUFJFREVGSU5FUyk6IFNhbWUuCgkqIHJzNjAwMC9haXg0My5oIChDUFBfUFJFREVGSU5FUyk6IFNhbWUuCgpXZWQgSnVsIDI5IDExOjQ3OjEwIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3RodW1iLm1kIChleHRlbmRxaXNpMl9pbnNuKTogUmVtb3ZlIGVhcmx5Y2xvYmJlcgoJY29uc3RyYWludCBmcm9tIHNlY29uZCBhbHRlcm5hdGl2ZS4KClR1ZSBKdWwgMjggMjM6Mjk6MDQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBGaXggLS13aXRob3V0Ly0tZGlzYWJsZSBjYXNlcyBmb3IgbG9jYWwtcHJlZml4LCAKCWd4eC1pbmNsdWRlLWRpciBhbmQgY2hlY2tpbmcuCgpUdWUgSnVsIDI4IDIyOjAxOjIzIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlndXJlLmluIChlbmFibGVfaGFpZmEpOiBTZXQgYnkgZGVmYXVsdCBmb3Igc3BhcmM2NCB0b28uCgljb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgSnVsIDI4IDIzOjI5OjA0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGkzODYvY3lnd2luMzIuaCAoVkFMSURfTUFDSElORV9UWVBFX0FUVFJJQlVURSk6IE5ldyBtYWNyby4KCSogaTM4Ni93aW5udC5jIChhc3NvY2lhdGVkX3R5cGUpOiBOZXcgZm4uCgkoaTM4Nl9wZV92YWxpZF90eXBlX2F0dHJpYnV0ZV9wKTogTmV3IGZuLgoJKGkzODZfcGVfY2hlY2tfdnRhYmxlX2ltcG9ydGV4cG9ydCk6IFJlbW92ZS4KCShpMzg2X3BlX2RsbGV4cG9ydF9wKTogVXNlIGFzc29jaWF0ZWRfdHlwZS4KCShpMzg2X3BlX2RsbGltcG9ydF9wKTogTGlrZXdpc2UuCgoJRnJvbSBBbnRvbmlvIE0uIE8uIE5ldG8gPGFubWVuZGVzQGNydXplaXJvbmV0LmNvbS5icj46CgkqIGkzODYuYyAoaTM4Nl92YWxpZF90eXBlX2F0dHJpYnV0ZV9wKTogQWxzbyBhY2NlcHQKCWF0dHJpYnV0ZXMgZm9yIE1FVEhPRF9UWVBFcy4KClR1ZSBKdWwgMjggMjM6MTc6MzkgMTk5OCAgUGV0ZXIgR2Vyd2luc2tpIDxwZXRlckBnZXJ3aW5za2kuZGU+CgoJKiB0cmVlLmMgKGJ1aWxkX3JhbmdlX3R5cGUpOiBDb3B5IFRZUEVfU0laRV9VTklULgoKVHVlIEp1bCAyOCAyMjozMToxMiAxOTk4ICBDcmFpZyBCdXJsZXkgIDxidXJsZXlAZ251Lm9yZz4KCgkqIGdjYy5jOiBGaXggY29tbWVudGFyeSBkZXNjcmliaW5nICVnLCAldSwgJVUsIGFuZCAlTy4KCgkqIGdjYy5jIChkb19zcGVjXzEpOiBGaXggaGFuZGxpbmcgb2YgJWclTyBhbmQgJVUlTyB0byBwcmV2ZW50Cgl0aGVtIGZyb20gZ2VuZXJhdGluZyBhIG5ldyBiYXNlIG5hbWUgZm9yIGVhY2ggb2NjdXJlbmNlIG9mCglhIHNwZWNpZmljIHN1ZmZpeC4KCjE5OTgtMDctMjggIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogRW5hYmxlIHN1YnNpdHV0aW9uIGluc2lkZSBsaWJjYWxsIG9ubHkgZm9yIFJFRywKCVNVQlJFRywgTUVNLgoJKiBydGxhbmFsLmMgKHJlcGxhY2VfcnR4KTogUHJvaGliaXQgcmVwbGFjZXMgaW4JQ09OU1RfRE9VQkxFLiAKCgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogTmV3IHR5cGUuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IEFkZCB0eXBlX2tpbmRfdCBwYXJhbWV0ZXIuICBSZWx5CglvbiB0aGlzIHBhcmFtdGVyLCByYXRoZXIgdGhhbiBkZW1hbmdsaW5nIHRoZSB0eXBlIGFnYWluLgoJKGRlbWFuZ2xlX2ludGVncmFsX3ZhbHVlKTogUGFzcyB0a19pbnRlZ3JhbC4KCShkZW1hbmdsZV90ZW1wbGF0ZV86IFBhc3MgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZG9fdHlwZS4KCShkb190eXBlKTogUmV0dXJuIGEgdHlwZV9raW5kX3QuICBQYXNzIHRrX2ludGVncmFsIHRvCglkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheSBib3VuZHMuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogTGlrZXdpc2UuCgkKTW9uIEp1bCAyNyAwMDo1NDo0MSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHNpbXBsZV9jc3RfZXF1YWwsIGNhc2UgQ09OU1RSVUNUT1IpOiBPSyBpZiB0aGUgZWx0cyBhcmUKCWlkZW50aWNhbC4KCk1vbiBKdWwgMjcgMjI6MTg6MzYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAobW92ZV9vcGVyYW5kKTogQWNjZXB0IENPTlNUQU5UX1BfUlRYLgoKTW9uIEp1bCAyNyAxNzoxODo1MiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IEhhbmRsZSBhcnJheXMgb2YgYml0cywgZm9yIENoaWxsLgoKCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogSGFuZGxlIHplcm8tYmFzZWQsIHVuc2lnbmVkLCBhcnJheQoJaW5kZXggY29udmVyc2lvbi4KCk1vbiBKdWwgMjcgMTQ6NTE6MzMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5oIChERUJVR0dFUl9BVVRPX09GRlNFVCk6IERlZmluZS4KCShERUJVR0dFUl9BUkdfT0ZGU0VUKTogTGlrZXdpc2UuCgoJKiBtbjEwMzAwLm1kIChtb3ZzZik6IFJlbW92ZSBsYXN0IGNoYW5nZS4gIE5vdCBuZWVkZWQuCgpNb24gSnVsIDI3IDE0OjIyOjM2IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogRml4IGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwgYW5kCglzdHJpbmcgbGl0ZXJhbCBsb29wcy4KCk1vbiBKdWwgMjcgMTE6NDM6NTQgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBsb25nbG9uZy5oIChjb3VudF9sZWFkaW5nX3plcm9zKTogU3BhcmNsaXRlIHNjYW4gaW5zdHJ1Y3Rpb24gd2FzCgliZWluZyBpbnZva2VkIGluY29ycmVjdGx5LgoKCSogaTM4Ni5jIChpeDg2X3Byb2xvZ3VlKTogQWRkZWQgU1VCVEFSR0VUX1BST0xPR1VFIGludm9jYXRpb24uCgkqIGkzODYvY3lnd2luMzIuaCAoU1RBUlRGSUxFX1NQRUMsIExJQl9TUEVDLCBTVUJUQVJHRVRfUFJPTE9HVUUpOiAKCUFkZCAtcGcgc3VwcG9ydC4gCgkqIGkzODYvd2luMzIuaDogTmV3IGZpbGUuICBIeWJyaWQgbWluZ3czMi5oL2N5Z3dpbjMyLmggY29uZmlndXJhdGlvbi4KCSogY29uZmlndXJlLmluOiBBZGRlZCBpWzM0NTY3XTg2LSotd2luMzIKCSogY29uZmlnLnN1YjogRGl0dG8uCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCQpTdW4gSnVsIDI2IDAxOjExOjEyIDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGkzODYuaCAoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCk6IFJldHVybiAwIHdoZW4gZWxpbWluYXRpbmcKCXRoZSBmcmFtZSBwb2ludGVyIGFuZCBjb21waWxpbmcgUElDIGNvZGUgYW5kIHJlbG9hZCBoYXMgbm90IGNvbXBsZXRlZC4KCgkqIGkzODYuYyAob3V0cHV0X3RvX3JlZyk6IEFkZCBjb2RlIHRvIGVtdWxhdGUgbm9uLXBvcHBpbmcgREltb2RlCgljYXNlLgoKU3VuIEp1bCAyNiAwMTowMTozMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWdtb3ZlLmMgKHJlZ21vdmVfb3B0aW1pemUpOiBGaXggdHlwbyBpbml0aWFsaXppbmcgcmVnbW92ZV9iYl9oZWFkLgoKU2F0IEp1bCAyNSAyMzoyOToyMyAxOTk4ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1pbmZvKTogT25seSB0cnkgdG8gdXBkYXRlIHRoZSBpbmZvCglkaXJlY3RvcnkgZmlsZSBpZiBpdCBleGlzdHMgaW4gdGhlIGZpcnN0IHBsYWNlLgoKRnJpIEp1bCAyNCAxODo1ODozNyAxOTk4ICBLbGF1cyBFc3BlbmxhdWIgIDxrZXNwZW5sYUBzdHVkZW50LmluZm9ybWF0aWsudW5pLXVsbS5kZT4KCgkqIHJzNjAwMC5oIChBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOiBEZWxldGUuCgpGcmkgSnVsIDI0IDE0OjIwOjI2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAzMDAubWQgKG1vdnFpLCBtb3ZoaSwgbW92c2ksIG1vdnNmKTogQ29ycmVjdGx5IGhhbmRsZQoJQ09OU1RfRE9VQkxFIHNvdXJjZS4KCkZyaSBKdWwgMjQgMTE6MTc6MDQgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdGh1bWIuYyAodGh1bWJfcHJpbnRfb3BlcmFuZCk6IERlY29kZSAlXyBpbiBhc20KCXN0cmluZ3MgYXMgdGhlIGluc2VydGlvbiBvZiBVU0VSX0xBQkVMX1BSRUZJWC4KCSogY29uZmlnL2FybS90aHVtYi5oIChQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEX1ApOiBBY2NlcHQgXyBhcyBhCgl2YWxpZCBjb2RlLgoJKiBjb25maWcvYXJtL3RodW1iLm1kOiBVc2UgJV8gYXMgYSBwcmVmaXggdG8gZ2NjIGxpYnJhcnkgZnVuY3Rpb24KCWNhbGxzLiAKClRodSBKdWwgMjMgMTg6NTM6MjAgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZGJ4b3V0LmMgKGRieG91dF9yYW5nZV90eXBlKTogT25seSBjYWxsIGRieG91dF90eXBlX2luZGV4IGZvcgoJYWxyZWFkeSBkZWZpbmVkIHR5cGUuCgpUaHUgSnVsIDIzIDEzOjQ5OjQxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoY2hlY2tfbWF4X2ludGVnZXJfY29tcHV0YXRpb25fbW9kZSk6IEFsbG93IGNvbnZlcnNpb25zCglvZiBjb25zdGFudCBpbnRlZ2VycyB0byBNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFLgoJKGV4cGFuZF9leHByKTogTGlrZXdpc2UuCgpUaHUgSnVsIDIzIDExOjEyOjA2IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEV4cGFuZCBSRVRVUk5fRVhQUi4KClRodSBKdWwgMjMgMTE6MDA6MjkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9maW5pc2gpOiBDYWxsIHN0cmlwYXR0cmlidXRlcyBvbiBURVhUX1NFQ1RJT04uCgpXZWQgSnVsIDIyIDE5OjEwOjAwIDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKICAgICAgICAqIGR3YXJmMm91dC5jIChvdXRwdXRfYXJhbmdlcyk6ICBDYWxsIHN0cmlwYXR0cmlidXRlcwogICAgICAgIGZvciBURVhUX1NFQ1RJT04gcmVmZXJlbmNlcy4KICAgICAgICAob3V0cHV0X2xpbmVfaW5mbyk6IExpa2V3aXNlLgoKV2VkIEp1bCAyMiAxNDowODo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIHByb2ZpbGUuYyAoYnJhbmNoX3Byb2IpOiBDYWxsIGFsbG9jYXRlX3JlZ19pbmZvIGFmdGVyIG91dHB1dHRpbmcKCXByb2ZpbGUgcnRsIGluIGluc3RydW1lbnRfYXJjcy4KCldlZCBKdWwgMjIgMTI6NDc6NDkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZml4aW5jLmlyaXggKG1hdGguaCk6IEluc3RhbGwgd3JhcHBlciBpbnN0ZWFkIG9mIGNvcHlpbmcuCgpXZWQgSnVsIDIyIDEyOjM3OjE0IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoRVhQUl9XSVRIX0ZJTEVfTE9DQVRJT04pOiBEZWZpbmVkIGFzIGFuICdlJyBleHByZXNzaW9uCiAJc28gV0ZMIGFyZSBleHBhbmRlZCBjb3JyZWN0bHkgd2hlbiBjb250YWluZWQgaW4gYSBDT01QT1VORF9FWFBSLgoJKiB0cmVlLmggKEVYUFJfV0ZMX0VNSVRfTElORV9OT1RFKTogQ2hhbmdlIG1hY3JvIG5vdCB0byB1c2UKIAlsYW5nX2ZsYWdfMC4gQWRkZWQgZG9jdW1lbnRhdGlvbiBpbiB0aGUgZmxhZyB0YWJsZS4KClR1ZSBKdWwgMjEgMjM6Mjg6MzUgMTk5OCAgS2xhdXMgS2FlbXBmIDxra2FlbXBmQHJtaS5kZT4KCgkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IEZpeCB2YXggYyBzdHlsZSBpbmNsdWRlIGhhbmRsaW5nLgoKVHVlIEp1bCAyMSAxMzoyODoxOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IFVzZSBkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheXMuCgpTdW4gSnVsIDEyIDAxOjI3OjA1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZvbGQtY29uc3QuYyAobm9uX2x2YWx1ZSk6IERvbid0IGRlYWwgd2l0aCBudWxsIHBvaW50ZXIgCgljb25zdGFudHMgaGVyZS4KCShmb2xkLCBjYXNlIENPTVBPVU5EX0VYUFIpOiBXcmFwIGEgY29uc3RhbnQgMCBpbiBhIE5PUF9FWFBSLgoKVHVlIEp1bCAyMSAxNTo0OTozMSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIENPTlNUQU5UX1BfUlRYLgoJKiByczYwMDAubWQgKG1vdnNpLCBtb3ZkaSk6IEFkZCBDT05TVEFOVF9QX1JUWC4KCSogcnM2MDAwLmMgKHNob3J0X2NpbnRfb3BlcmFuZCk6IEFkZCBDT05TVEFOVF9QX1JUWC4KCSh1X3Nob3J0X2NpbnRfb3BlcmFuZCk6IFNhbWUuCgkocmVnX29yX2NpbnRfb3BlcmFuZCk6IFNhbWUuCgkobG9naWNhbF9vcGVyYW5kKTogU2FtZS4KCShpbnB1dF9vcGVyYW5kKTogU2FtZS4KCShyZWdfb3Jfc2hvcnRfb3BlcmFuZCk6IFVzZSB1X3Nob3J0X2NpbnRfb3BlcmFuZC4KClR1ZSBKdWwgMjEgMDg6NTY6NDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChmaXhfdHJ1bmNkZnNpMiwgZml4X3RydW5jc2ZzaTIpOiBSZW1vdmUgdGhlIGRlZmluZV9leHBhbmRzLAoJYnV0IGtlZXAgdGhlIGluc25zIGFuZCBzcGxpdHMuICBBZGp1c3Qgc28gd2hlbiB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb24KCWlzIG1lbW9yeSwgdXNlIGN2dHFsLgoKVHVlIEp1bCAyMSAwODo1NTowOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChyZWdub191bmluaXRpYWxpemVkKTogRml4ZWQgcmVncyBhcmUgbmV2ZXIgdW5pbml0aWFsaXplZC4KClR1ZSBKdWwgMjEgMDA6MzE6MDEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NjLmMgKGRvX3NwZWMpOiBDYWxsICJlcnJvciIgbm90ICJ3YXJuaW5nIi4KCgkqIGNvbmZpZ3VyZS5pbjogRml4IG1pbm9yIHByb2JsZW1zIHdpdGggZ2FzIGZlYXR1cmUgZGV0ZWN0aW9uIGNvZGUuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGdjYy5jIChkb19zcGVjKTogSXNzdWUgYSB3YXJuaW5nIGZvciAnJVtdJyB1c2FnZS4KCgkqIFVuZG8gdGhpcyBjaGFuZ2UuCgkqIGdjYy5jOiBEZWxldGUgJVtzcGVjXSBzdXBwb3J0LgoJKGRvX3NwZWNfMSwgY2FzZSAnKCcpOiBMaWtld2lzZS4KCShkb19zcGVjXzEsIGNhc2UgJ1snKTogQ2FsbCBlcnJvci4KCk1vbiBKdWwgMjAgMjI6MzQ6MTcgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmggKENQUF9TUEVDKTogVGlkeS4gIEhvb2sgdG8gY3BwX2NwdSBhbmQgY3BwX3N1YnRhcmdldC4KCShDUFBfU1VCVEFSR0VUX1NQRUMpOiBEZWZhdWx0IHRvIGVtcHR5IHN0cmluZy4KCShDUFBfQU1fKiwgQ1BQX0lNXyosIENQUF9DUFVfKiwgQ1BQX0NQVV9TUEVDKTogTmV3LgoJKEVYVFJBX1NQRUNTLCBTVUJUQVJHRVRfRVhUUkFfU1BFQ1MpOiBOZXcuCgkqIGFscGhhL2VsZi5oIChMRF9TUEVDKTogVXNlICUoZWxmX2R5bmFtaWNfbGlua2VyKS4KCSogYWxwaGEvbGludXgtZWxmLmggKFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IE5ldy4KCShMSUJfU1BFQyk6IFRpZHkuCgkqIGFscGhhL2xpbnV4LmggKENQUF9QUkVERUZJTkVTKTogVGlkeS4KCSogYWxwaGEvbmV0YnNkLWVsZi5oIChTVUJUQVJHRVRfRVhUUkFfU1BFQ1MpOiBOZXcuCgkqIGFscGhhL25ldGJzZC5oIChDUFBfUFJFREVGSU5FUyk6IFRpZHkuCgkqIGFscGhhL29zZi5oIChDUFBfUFJFREVGSU5FUyk6IFJlbW92ZSBiaXRzIHN1YnN1bWVkIGJ5IENQUF9DUFVfU1BFQy4KCSogYWxwaGEvd2luLW50LmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCgkqIGFscGhhL3ZzZi5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgoJKENQUF9TVUJUQVJHRVRfU1BFQyk6IE5ldy4gIERvIHRoaXMgaW5zdGVhZCBvZiBvdmVycmlkaW5nIENQUF9TUEVDLgoJKiBhbHBoYS92eHdvcmtzLmg6IExpa2V3aXNlLgoKTW9uIEp1bCAyMCAyMjo1MTo1NyAxOTk4ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCgkqIG1pcHMubWQgKHJlbG9hZF9vdXRzaSk6IEFkZGVkIG1pc3NpbmcgUkVHTk8gY2FsbC4KCShzbXVsc2kzX2hpZ2hwYXJ0LCB1bXVsc2kzX2hpZ2hwYXJ0KTogUHJvdmlkZSBwcm90b3R5cGUgZm9yCglmdW5jdGlvbiBwb2ludGVyLgoJKG11bF9hY2NfZGksIG11bF9hY2NfNjRiaXRfZGkpOiBEb24ndCB1c2UgbWF0Y2hfb3BfZHVwLCB1c2UKCWFub3RoZXIgbWF0Y2hfb3BlcmF0b3IgYW5kIGNvbXBhcmUgdGhlIGNvZGVzLgoKCSogbWlwcy5oIChNQVNLX0RFQlVHX0UsIE1BU0tfREVCVUdfSSk6IFNldCB0byB6ZXJvLgoKCSogTUlQUyBtdWx0aXBseSBwYXR0ZXJuIGZpeGVzOgoJKiBtaXBzLmggKGVudW0gcmVnX2NsYXNzLCBSRUdfQ0xBU1NfTkFNRVMsIFJFR19DTEFTU19DT05URU5UUyk6CglBZGQgdW5pb24gY2xhc3NlcyBmb3IgSEksIExPLCBvciBISUxPIHBsdXMgZ2VuZXJhbCByZWdpc3RlcnMuCgkoR0VORVJBVEVfTUFERCk6IERlbGV0ZWQuCgkqIG1pcHMubWQgKG11bHNpM19tdWx0Myk6IERvbid0IGRpc3BhcmFnZSBvdXRwdXQtTE8gYWx0ZXJuYXRpdmUuCglBZGQgVEFSR0VUX01BRCB0byBjb25kaXRpb24uCgkobXVsc2kzKTogVGVzdCBIQVZFX211bHNpM19tdWx0Mywgbm90IHNwZWNpZmljIGZsYWdzLgoJKG11bF9hY2Nfc2kpOiBFeHBhbmQgR0VORVJBVEVfTUFERCBoZXJlOyBpdCdzIHRoZSBvbmx5IHVzZS4gIFVzZQoJIipkIiBmb3IgYWNjdW11bGF0b3IsIHRvIGdpdmUgcHJlZmVyZW5jZSB0byBMTyBpbml0aWFsbHkgYnV0IG5vdAoJZHVyaW5nIHJlbG9hZC4KCk1vbiBKdWwgMjAgMTY6MTY6MzggMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChlbmFibGVfY19tYmNoYXIpOiBOZXcgY29uZmlndXJlIG9wdGlvbi4KCShleHRyYV9jcHBfb2Jqcyk6IEFsd2F5cyBhdmFpbGFibGUgbm93LgoKCSogY2V4cC55IChtYmNoYXIuaCk6ICNpbmNsdWRlIGl0LgoJKHl5bGV4KTogSGFuZGxlIE11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFscy4KCgkqIGNjY3AuYyAobWJjaGFyLmgpOiAjaW5jbHVkZSBpdC4KCShtYWluKTogU2V0IGNoYXJhY3RlciBzZXQgYmFzZWQgb24gTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCShyZXNjYW4pOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gY29tbWVudHMuCgkoc2tpcF9pZl9ncm91cCk6IFNlZSBhYm92ZS4KCSh2YWxpZGF0ZV9lbHNlKTogU2VlIGFib3ZlLgoJKHNraXBfdG9fZW5kX29mX2NvbW1lbnQpOiBTZWUgYWJvdmUuCgkobWFjYXJnMSk6IFNlZSBhYm92ZS4KCShkaXNjYXJkX2NvbW1lbnRzKTogU2VlIGFib3ZlLgoJKHJlc2Nhbik6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBzdHJpbmcgYW5kIGNoYXJhY3RlciBsaXRlcmFscy4KCShjb2xsZWN0X2V4cGFuc2lvbik6IFNlZSBhYm92ZS4KCShza2lwX3F1b3RlZF9zdHJpbmcpOiBTZWUgYWJvdmUuCgkobWFjcm9leHBhbmQpOiBTZWUgYWJvdmUuCgkobWFjYXJnMSk6IFNlZSBhYm92ZS4KCShkaXNjYXJkX2NvbW1lbnRzKTogU2VlIGFib3ZlLgoJKGNoYW5nZV9uZXdsaW5lcyk6IFNlZSBhYm92ZS4KCgkqIGMtbGV4LmMgKG1iY2hhci5oKTogI2luY2x1ZGUgaXQuCgkoR0VUX0VOVklST05NRU5UKTogTmV3IG1hY3JvLgoJKGluaXRfbGV4KTogU2V0IGNoYXJhY3RlciBzZXQgYmFzZWQgb24gTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCSh5eWxleCk6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbHMuCgkoeXlsZXgpOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gc3RyaW5nIGxpdGVyYWxzLgoKCSogTWFrZWZpbGUuaW4gKG1iY2hhci5vKTogTmV3IHRhcmdldC4KCShjY2NwJChleGVleHQpKTogQGV4dHJhX2NwcF9vYmpzQCBpcyBhbHdheXMgYXZhaWxhYmxlLgoJKGNwcG1haW4kKGV4ZWV4dCkpOiBAZXh0cmFfY3BwX29ianNAIGlzIGFsd2F5cyBhdmFpbGFibGUuCgoJKiBtYmNoYXIuW2NoXTogTmV3IGZpbGVzIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyIGhhbmRsaW5nLgoKTW9uIEp1bCAyMCAwMToxMToxMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFdoZW4gc2ltcGxpZnlpbmcgbm9vcCBtb3ZlcyBhbmQKCVBVU0hfUk9VTkRJTkcsIGZpeCB0aGlua28gc28gd2UgdXNlIHNhbWUgY3JpdGVyaW9uIGZvciBpZGVudGlmeWluZwoJdGhlIFBVU0hlcyB0byByZXdyaXRlIGluIHNlY29uZCBsb29wIGFzIHdlIGRpZCBpbiB0aGUgZmlyc3QuCgpTdW4gSnVsIDE5IDA4OjIzOjUzIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9uZXN0ZWRfYXJncyk6IE1ha2UgZnVuY3Rpb24gZGVmaW5pdGlvbgoJc3RhdGljIHRvIG1hdGNoIHRoZSBwcm90b3R5cGUuCgpGcmkgSnVsIDE3IDE0OjU4OjQ0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGxvY2EuYzogUmVzcGVjdCBVU0VfQ19BTExPQ0EuCgkqIGdlbmNoZWNrLmMgKHhtYWxsb2MpOiBJZ25vcmUgX19HTlVDX18gZm9yIGRlZmluaXRpb24uCgkqIGdlbmdlbnJ0bC5jICh4bWFsbG9jKTogTGlrZXdpc2UuCgpGcmkgSnVsIDE3IDE0OjE4OjE0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmggKHN0cnVjdCBpbmR1Y3Rpb24pOiBBZGQgbm9fY29uc3RfYWRkdmFsLgoJKiBsb29wLmMgKHRoZV9tb3ZhYmxlcywgcmVnX2FkZHJlc3NfY29zdCk6IE5ldyB2YXJpYWJsZXMuCgkoaW5pdF9sb29wKTogSW5pdCByZWdfYWRkcmVzc19jb3N0LgoJKGxvb3Bfb3B0aW1pemUpOiBDYWxsIGVuZF9hbGlhc19hbmFseXNpcy4KCShzY2FuX2xvb3ApOiBJbml0IHRoZV9tb3ZhYmxlcy4KCShyZWNvcmRfZ2l2KTogSW5pdCBpbmR1Y3Rpb24tPm5vX2NvbnN0X2FkZHZhbC4KCShiYXNpY19pbmR1Y3Rpb25fdmFyKSBbUExVU106IFVzZSBydHhfZXF1YWxfcCBpbnN0ZWFkIG9mID09LgoJW1JFR106IFJlYXJyYW5nZSBsb29wIHNlYXJjaCB0ZXN0IHRvIGNhdGNoIG1vcmUgY2FzZXMuCgkoZ2VuZXJhbF9pbmR1Y3Rpb25fdmFyKTogUmV0dXJuIHN1Y2Nlc3Mgbm90IGJlbmVmaXQ7IHRha2UgYW4gZXh0cmEKCWFyZ3VtZW50IGZvciB0aGF0LiAgQ2hhbmdlIGFsbCBjYWxsZXJzLgoJKHNpbXBsaWZ5X2dpdl9leHByKSBbUExVU106IEFsd2F5cyBjb21iaW5lIGludmFyaWFudHMuICBVc2Ugc2dlX3BsdXMuCglbTVVMVF06IFVzZSBydHhfZXF1YWxfcCBpbnN0ZWFkIG9mID09LiAgQ29tYmluZSBzaW1wbGUgaW52YXJpYW50cy4KCVtkZWZhdWx0XTogU2VhcmNoIHRoZV9tb3ZhYmxlcyBmb3IgYWRkaXRpb25hbCBjb21iaW5hdGlvbnMuCgkoc2dlX3BsdXNfY29uc3RhbnQsIHNnZV9wbHVzKTogTmV3IGZ1bmN0aW9ucy4KCShleHByZXNzX2Zyb21fMSk6IE5ldyBmdW5jdGlvbi4KCShleHByZXNzX2Zyb20pOiBBbHdheXMgZGVmaW5lLiAgUmV3cml0ZSB1c2luZyBleHByZXNzX2Zyb21fMS4KCShjb21iaW5lX2dpdnNfcCk6IEhhbmRsZSBtb3JlIGNhc2VzLiAgSWdub3JlIGFkZHJlc3MgY29zdC4KCShjbXBfY29tYmluZV9naXZzX3N0YXRzKTogTmV3IGZ1bmN0aW9uLgoJKGNvbWJpbmVfZ2l2c191c2VkX29uY2UsIGNvbWJpbmVfZ2l2c19iZW5lZml0X2Zyb20pOiBOZXcgZnVuY3Rpb25zLgoJKGNvbWJpbmVfZ2l2cyk6IFJld3JpdGUgdG8gZG8gYmVzdC1maXQgY29tYmluYXRpb24uCgoJKiBmb2xkLWNvbnN0LmMgKG9wZXJhbmRfZXF1YWxfcCk6IEhhbmRsZSBSVExfRVhQUi4KCShmb2xkKTogRG8gYSBjb21wbGV0ZSAoQSpDKSsoQipDKSBhc3NvY2lhdGlvbiBjaGVjay4KCkZyaSBKdWwgMTcgMTE6MjE6NTUgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnNfaW5zbnMpOiBIYW5kbGUgQ0xPQkJFUiBvZiBhIENPTkNBVC4KCkZyaSBKdWwgMTcgMTE6NDg6NTUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5jIChNT0RFU19USUVBQkxFX1ApOiBGaXggdHlwby4KCkZyaSBKdWwgMTcgMDM6MjY6MTIgMTk5OCAgUmloY2FyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIHRyZWUuYyAodmFsaWRfbWFjaGluZV9hdHRyaWJ1dGUpOiBPbmx5IGNyZWF0ZSBhIG5ldyB0eXBlIHZhcmlhbnQgaWYKCXRoZXJlIGlzIGEgZGVjbCB0byB1c2UgaXQuCgpUaHUgSnVsIDE2IDE0OjQ4OjA0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZG9fc3BlY18xKTogQ29wZSB3aXRoICVnLyV1LyVVIG9wdGlvbnMgd2hpY2ggZG8gbm90IGhhdmUKCWEgc3VmZml4LgoKRnJpIEp1bCAxNyAwMzoyNDo0MCAxOTk4ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogZXh0ZW5kLnRleGkgKEV4cGxpY2l0IFJlZyBWYXJzKTogVHlwbzogY2hhbmdlICJtYXkgZGVsZXRlZCIgaW50byAibWF5CgliZSBkZWxldGVkIiAKClRodSBKdWwgMTYgMTQ6NDg6NDcgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5jIChjb3VudF90c3RfaW5zbnMpOiBOZXcgYXJnIG9yZWdfY291bnRwLiAgQ2FsbGVycyBjaGFuZ2VkLgoJU2ltcGxpZnkgdGVzdHMgZm9yIGNsZWFyaW5nIGFuIGFkZHJlc3MgcmVnaXN0ZXIuCgkoZXhwYW5kX3Byb2xvZ3VlKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKCSogbW4xMDMwMC5tZCAobW92WFggcGF0dGVybnMpOiBNYWtlIHN1cmUgdGhlIGRlc3RpbmF0aW9uIGlzIGFuCglBRERSRVNTX1JFRyB3aGVuIHN1YnN0aXR1dGluZyAiemVyb19hcmVnIiBmb3IgKGNvbnN0X2ludCAwKS4KCShsb2dpY2FsIHBhdHRlcm5zKTogU3BsaXQgaW50byBleHBhbmRlcnMgKyBwYXR0ZXJucwoJKHplcm8gYW5kIHNpZ24gZXh0ZW5zaW9uIHBhdHRlcm5zKTogU2ltaWxhcmx5LgoJKHNoaWZ0IHBhdHRlcm5zKTogU2ltaWxhcmx5LgoKVGh1IEp1bCAxNiAwMToxNzo0NCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChlbWl0X2l2X2FkZF9tdWx0KTogU2NhbiB0aGUgZW50aXJlIGluc24gbGlzdCBnZW5lcmF0ZWQKCWZvciB0aGUgc2VxdWVuY2UsIHJlY29yZGluZyBiYXNlIHZhbHVlcy4KCldlZCBKdWwgMTUgMTA6NDk6NTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoQ1BQX0NQVV9TUEVDKTogUmVtb3ZlIC1Bc3lzdGVtKHVuaXgpLgoKVHVlIEp1bCAxNCAxNDoxNTozMCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZ2NjLmM6IFJlbW92ZSBBTlNJLUMgaXNtIGZyb20gLS1oZWxwIGNvZGUuCgoJKiB0b3BsZXYuYzogU3VwcG9ydCAtLWhlbHAgd2l0aCBVU0VfQ1BQTElCLgoKVHVlIEp1bCAxNCAxNDo0NjowOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJld29yayBnYXMgZmVhdHVyZSBjb2RlIHRvIHdvcmsgd2l0aCBzeW1saW5rIGJhc2VkCglzb3VyY2UgdHJlZXMuCgoJKiBleHRlbmQudGV4aTogQ2xhcmlmeSBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGxvY2FsIHZhcmlhYmxlcwoJYXNzaWduZWQgdG8gZXhwbGljaXQgcmVnaXN0ZXJzLgoKCSogbW4xMDMwMC5tZCAobXVsc2kpOiBUdXJuIGludG8gZXhwYW5kZXIgKyBwYXR0ZXJuLgoKCSogbW4xMDMwMC5tZCAobW92c2ksIG1vdnNmLCBtb3ZkaSwgbW92ZGYpOiBSZW1vdmUgIngiIGZyb20gSSAtPiBhCglhbHRlcm5hdGl2ZS4KClR1ZSBKdWwgMTQgMDc6NDE6NTkgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS90Y29mZi5oIChVU0VSX0xBQkVMX1BSRUZJWCk6IE1ha2UgaXQgZW1wdHkgdG8gbWF0Y2ggY29mZi5oLgoKVHVlIEp1bCAxNCAwMzowMjo0NCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgYWdhaW4gdG8gZGlzdGluZ3Vpc2ggbWFpbmxpbmUgdHJlZSBmcm9tIHRoZQoJZWdjcy0xLjEgYnJhbmNoLgoKU2VlIENoYW5nZUxvZy4wIGZvciBlYXJsaWVyIGNoYW5nZXMuCgpMb2NhbCBWYXJpYWJsZXM6CmFkZC1sb2ctdGltZS1mb3JtYXQ6IGN1cnJlbnQtdGltZS1zdHJpbmcKRW5kOgo=