TW9uIEFwciAgNyAwMjowNjoyMiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS4xCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IERlZmluZSAmIHVzZSB0aGUgJChHTE9CKSB2YXJpYWJsZSBzbwoJdGhhdCBpdCdzIHJlbW92ZWQgY29ycmVjdGx5IGZyb20gYnVpbGQuc2guaW4gd2hlbiBpdCdzIGJ1aWx0LgoKCSogY29uZmlndXJlLmluOiBPbiBTb2xhcmlzIHdlIGNhbiB1c2UgdGhlIGtzdGF0XyooKSBmdW5jdGlvbnMgdG8KCWdldCBsb2FkIGF2ZXJhZ2VzIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIHBlcm1pc3Npb25zLiAgQWRkIGEKCWNoZWNrIGZvciAtbGtzdGF0IHRvIHNlZSBpZiB3ZSBoYXZlIGl0LgoKCSogZ2V0bG9hZGF2Zy5jIChnZXRsb2FkYXZnKTogVXNlIEhBVkVfTElCS1NUQVQgaW5zdGVhZCBvZiBTVU41IGFzCgl0aGUgdGVzdCB0byBlbmFibGUga3N0YXRfb3BlbigpLCBldGMuIHByb2Nlc3NpbmcuCgpGcmkgQXByICA0IDIwOjIxOjE4IDE5OTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiA8bG90cz46IEZpeGVzIHRvIHdvcmsgaW4gdGhlIERKR1BQIERPUyBlbnZpcm9ubWVudC4KCk1vbiBNYXIgMzEgMDI6NDI6NTIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBBZGRlZCBuZXcgZnVuY3Rpb24gJCh3b3JkbGlzdCkuCgoJKiBtYWtlLnRleGluZm8gKEZpbGVuYW1lIEZ1bmN0aW9ucyk6IERvY3VtZW50ICQod29yZGxpc3QpIGZ1bmN0aW9uLgoKCSogdnBhdGguYyAoYnVpbGRfdnBhdGhfbGlzdHMpOiBDb25zdHJ1Y3QgdGhlIEdQQVRIIHZhcmlhYmxlCglpbmZvcm1hdGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIgd2UgdXNlZCB0byBjb25zdHJ1Y3QgVlBBVEguCgkoZ3BhdGhfc2VhcmNoKTogTmV3IGZ1bmN0aW9uIHRvIHNlYXJjaCBHUEFUSC4KCgkqIG1ha2UuaDogRGVjbGFyZSB0aGUgbmV3IGZ1bmN0aW9uLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBDYWxsIGl0LCBhbmQga2VlcCBWUEFUSCBpZiBpdCdzIGZvdW5kLgoKCSogbWFrZS50ZXhpbmZvIChTZWFyY2ggQWxnb3JpdGhtKTogRG9jdW1lbnQgR1BBVEggdmFyaWFibGUuCgpTdW4gTWFyIDMwIDIwOjU3OjE2IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFpbi5jIChoYW5kbGVfbm9uX3N3aXRjaF9hcmd1bWVudCk6IERlZmluZWQgdGhlIE1BS0VDTURHT0FMUwoJdmFyaWFibGUgdG8gY29udGFpbiB0aGUgdXNlciBvcHRpb25zIHBhc3NlZCBpbiBvbiB0aGUgY21kIGxpbmUuCgoJKiBtYWtlLnRleGluZm8gKEdvYWxzKTogRG9jdW1lbnQgTUFLRUNNREdPQUxTIHZhcmlhYmxlLgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBQcmludCBhIHdhcm5pbmcgaWYgd2UgZGV0ZWN0IGEgY2xvY2sgc2tldwoJZXJyb3IsIHJhdGhlciB0aGFuIGZhaWxpbmcuCgoJKiBtYWluLmMgKG1haW4pOiBJZiB3ZSByZWJ1aWxkIGFueSBtYWtlZmlsZXMgYW5kIG5lZWQgdG8gcmUtZXhlYywKCWFkZCAiLW88bWtmaWxlPiIgb3B0aW9ucyBmb3IgZWFjaCBtYWtlZmlsZSByZWJ1aWx0IHRvIGF2b2lkCglpbmZpbml0ZSBsb29waW5nLgoKRnJpIE1hciAyOCAxNToyNjowNSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVHJhY2sgd2hldGhlciB0aGUgbGFzdAoJYXJnIGluIHRoZSBjbWQgc3RyaW5nIHdhcyBlbXB0eSBvciBub3QgKFJvbGFuZCkuCgkoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IElmIHRoZSBzaGVsbCBsaW5lIGlzIGVtcHR5LAoJZG9uJ3QgZG8gYW55dGhpbmcgKFJvbGFuZCkuCgoJKiBnbG9iL2dsb2IuaCxnbG9iL2dsb2IuYyxnbG9iL2ZubWF0Y2guYyxnbG9iL2ZubWF0Y2guaDogSW5zdGFsbAoJdGhlIGxhdGVzdCBjaGFuZ2VzIGZyb20gdGhlIEdMSUJDIHZlcnNpb24gb2YgZ2xvYiAoVWxyaWNoIERyZXBwZXIpLgoKCSogZ2V0bG9hZGF2Zy5jLG1ha2Utc3Rkcy50ZXhpOiBOZXcgdmVyc2lvbiAoUm9sYW5kKS4KCgkqIChBTEwpOiBDaGFuZ2VkIFdJTjMyIHRvIFczMiBvciBXSU5ET1dTMzIgKFJNUykuCgpNb24gTWFyIDI0IDE1OjMzOjM0IDE5OTcgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiBSRUFETUUuVzMyOiBEZXNjcmliZSBwcmVsaW1pbmFyeSBGQVQgc3VwcG9ydC4KCgkqIGJ1aWxkX3czMi5iYXQ6IFVzZSBhIHZhcmlhYmxlIGZvciB0aGUgZmluYWwgZXhlIG5hbWUuCgoJKiBkaXIuYyAoZmluZF9kaXJlY3RvcnkpOiBXMzI6IEZpbmQgdGhlIGZpbGVzeXN0ZW0gdHlwZS4KCShkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcCk6IFczMjogZm9yIEZBVCBmaWxlc3lzdGVtcywgYWx3YXlzCglyZWhhc2ggc2luY2UgRkFUIGRvZXNuJ3QgY2hhbmdlIGRpcmVjdG9yeSBtdGltZSBvbiBjaGFuZ2UuCgoJKiBtYWluLmMgKGhhbmRsZV9ydW50aW1lX2V4Y2VwdGlvbnMpOiBXMzI6IEFkZCBhbgogCVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlciBzbyB0aGF0IHdoZW4gbWFrZSBib21icyBkdWUgdG8gXkMgb3IgYQogCWJ1ZywgaXQgd29uJ3QgY2F1c2UgYSBHVUkgcmVxdWVzdG9yIHRvIHBvcCB1cCB1bmxlc3MgZGVidWcgaXMKIAl0dXJuZWQgb24uCgkobWFpbik6IENhbGwgaXQuCgpNb24gTWFyIDI0IDAwOjU3OjM0IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogY29uZmlndXJlLmluLCBjb25maWcuaC5pbiwgY29uZmlnLmFtaSwgY29uZmlnLmgtdm1zLCBjb25maWcuaC53MzI6CiAJQ2hlY2sgZm9yIG1lbW1vdmUoKSBmdW5jdGlvbi4KCgkqIG1ha2UuaCAoYmNvcHkpOiBJZiBtZW1tb3ZlKCkgYXZhaWxhYmxlLCBkZWZpbmUgYmNvcHkoKSB0byB1c2UgaXQuCglPdGhlcndpc2UganVzdCB1c2UgYmNvcHkoKS4gIERvbid0IHVzZSBtZW1jcHkoKTsgaXQncyBub3QgZ3VhcmFudGVlZAoJdG8gaGFuZGxlIG92ZXJsYXBwaW5nIG1vdmVzLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRml4IHNvbWUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMKCShyZXBvcnRlZCBieSBQdXJpZnkpLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBVc2UgYmNvcHkoKSBub3QKCXN0cmNweSgpOyBzdHJjcHkoKSBpc24ndCBndWFyYW50ZWVkIHRvIGhhbmRsZSBvdmVybGFwcGluZyBtb3Zlcy4KCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgaW5zdGFsbC1pbmZvIG9wdGlvbiBgYC0taW5mb2RpcicnIHRvCglgYC0taW5mby1kaXInJyBmb3IgdXNlIHdpdGggbmV3IHRleGluZm8uCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiAkKGJhc2VuYW1lKSBhbmQgJChzdWZmaXgpIHNob3VsZAoJb25seSBzZWFyY2ggZm9yIHN1ZmZpeGVzIGFzIGZhciBiYWNrIGFzIHRoZSBsYXN0IGRpcmVjdG9yeSAoZS5nLiwKCW9ubHkgdGhlIGZpbmFsIGZpbGVuYW1lIGluIHRoZSBwYXRoKS4KClN1biBNYXIgMjMgMDA6MTM6MDUgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWtlLnRleGluZm86IEFkZCBAZGlyY2F0ZWdvcnkvQGRpcmVudHJ5IGluZm9ybWF0aW9uLgoJKFRvcCk6IFJlbW92ZSBwcmV2aW91cyByZWZlcmVuY2UgdG8gKGRpcikgKGZyb20gUk1TKS4KCShTdGF0aWMgVXNhZ2UpOiBBZGQgImFsbDoiIHJ1bGUgdG8gZXhhbXBsZS4KCShBdXRvbWF0aWMgRGVwZW5kZW5jaWVzKTogZml4IC5kIGZpbGUgY3JlYXRpb24gZXhhbXBsZS4KCgkqIEluc3RhbGwgVlBBVEgrIHBhdGNoOgoKCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IEFkZCBpbiBobmFtZSBmaWVsZCB0byBzdG9yZSB0aGUgaGFzaGVkCiAgICAgICAgZmlsZW5hbWUsIGFuZCBhIGZsYWcgdG8gcmVtZW1iZXIgaWYgd2UncmUgdXNpbmcgdGhlIHZwYXRoIGZpbGVuYW1lCglvciBub3QuICBSZW5hbWVkIGEgZmV3IGZ1bmN0aW9ucyBmb3IgbW9yZSBjbGFyaXR5LgoKCSogZmlsZS5jIChsb29rdXBfZmlsZSxlbnRlcl9maWxlLGZpbGVfaGFzaF9lbnRlcik6IFN0b3JlIGZpbGVuYW1lcwoJaW4gdGhlIGhhc2ggdGFibGUgYmFzZWQgb24gdGhlaXIgImhhc2ggbmFtZSIuICBXZSBjYW4gY2hhbmdlIHRoaXMKCXdoaWxlIGtlZXBpbmcgdGhlIG9yaWdpbmFsIHRhcmdldCBpbiAibmFtZSIuCgkocmVoYXNoX2ZpbGUpOiBSZW5hbWVkIGZyb20gInJlbmFtZV9maWxlIiB0byBiZSBtb3JlIGFjY3VyYXRlLgoJQ2hhbmdlcyB0aGUgaGFzaCBuYW1lLCBidXQgbm90IHRoZSB0YXJnZXQgbmFtZS4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogTW9kaWZ5IC1kIG91dHB1dCBmb3IgbW9yZSBkZXRhaWxlZAogCVZQQVRIIGluZm8uICBJZiB3ZSBkb24ndCBuZWVkIHRvIHJlYnVpbGQsIHVzZSB0aGUgVlBBVEggbmFtZS4KCShmX210aW1lKTogRG9uJ3Qgc2VhcmNoIGZvciB2cGF0aCBpZiB3ZSdyZSBpZ25vcmluZyBpdC4gIENhbGwKIAlyZW5hbWVkIGZ1bmN0aW9uIHJlaGFzaF9maWxlLiAgQ2FsbCBuYW1lX210aW1lIGluc3RlYWQgb2YKIAlmaWxlX210aW1lLCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gc2luY2UgdGhlIGZpbGUgd2Fzbid0CiAJYWN0dWFsbHkgcmVuYW1lZC4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogaWYgd2UgZmluZCBhbiBpbXBsaWNpdCBmaWxlIGluCglWUEFUSCwgc2F2ZSB0aGUgb3JpZ2luYWwgbmFtZSBub3QgdGhlIFZQQVRIIG5hbWUuCgoJKiBtYWtlLnRleGluZm8gKERpcmVjdG9yeSBTZWFyY2gpOiBBZGQgYSBzZWN0aW9uIG9uIHRoZSBuZXcgVlBBVEgKCWZ1bmN0aW9uYWxpdHkuCgpTdW4gRGVjICAxIDE4OjM2OjA0IDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogZGlyLmMgKGZpbGVfZXhpc3RzX3AsIGZpbGVfaW1wb3NzaWJsZSwgZmlsZV9pbXBvc3NpYmxlX3ApOiBJZgoJZGlybmFtZSBpcyBlbXB0eSByZXBsYWNlIGl0IGJ5IHRoZSBuYW1lIG9mIHRoZSByb290IGRpcmVjdG9yeS4KCU5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayAoeWV0KSBmb3IgVzMyLCBBbWlnYSwgb3IgVk1TLgoKVHVlIE9jdCAwOCAxMzo1NzowMyAxOTk2ICBSb2IgVHVsbG9oICA8dHVsbG9oQHRpdm9saS5jb20+CgoJKiBtYWluLmMgKG1haW4pOiBXMzIgYnVnIGZpeCBmb3IgUEFUSCB2YXJzLgoKVHVlIFNlcCAxNyAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGZpbGVkZWYuaCAoTkVXX01USU1FKTogRG9uJ3QgYXNzdW1lIHRoYXQgdGltZV90IGlzIGEgc2lnbmVkCiAJMzItYml0IHF1YW50aXR5LgoKCSogbWFrZS5oOiAoQ0hBUl9CSVQsIElOVEVHRVJfVFlQRV9TSUdORUQsIElOVEVHRVJfVFlQRV9NQVhJTVVNLAogCUlOVEVHRVJfVFlQRV9NSU5JTVVNKTogTmV3IG1hY3Jvcy4KClR1ZSBBdWcgMjcgMDE6MDY6MzQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAYmFhbHBlcmF6aW0uZnJvYi5jb20+CgoJKiBWZXJzaW9uIDMuNzUgcmVsZWFzZWQuCgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBQcmludCBvdXQgYnVnLXJlcG9ydGluZyBhZGRyZXNzLgoKTW9uIEF1ZyAyNiAxOTo1NTo0NyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBiYWFscGVyYXppbS5mcm9iLmNvbT4KCgkqIG1haW4uYyAocHJpbnRfZGF0YV9iYXNlKTogRG9uJ3QgZGVjbGFyZSBjdGltZTsgaGVhZGVycyBkbyBpdCBmb3IgdXMKIAlhbHJlYWR5LgoKU3VuIEp1bCAyOCAxNTozNzowOSAxOTk2ICBSb2IgVHVsbG9oICh0dWxsb2hAdGl2b2xpLmNvbSkKCgkqIHczMi9wYXRoc3R1ZmYuYzogVHVybmVkIGNvbnZlcnRfdnBhdGhfdG9fdzMyKCkgaW50byBhCglyZWFsIGZ1bmN0aW9uLiBUaGlzIHdhcyBkb25lIHNvIHRoYXQgVlBBVEggY291bGQgY29udGFpbgoJd2hpdGUgc3BhY2Ugc2VwYXJhdGVkIHBhdGhuYW1lcy4gUGxlYXNlIG5vdGUgdGhhdCBkaXJlY3RvcnkKCXBhdGhzIChpbiBWUEFUSC92cGF0aCBjb250ZXh0KSBjb250YWluaW5nIHdoaXRlIHNwYWNlIGFyZSBub3QKCXN1cHBvcnRlZCAoanVzdCBhcyB0aGV5IGFyZSBub3QgdW5kZXIgVW5peCkuIFNlZSBSRUFETUUuVzMyCglmb3Igc3VnZ2VzdGlvbnMuCgoJKiB3MzIvaW5jbHVkZS9wYXRoc3R1ZmYuaDogQWRkZWQgcHJvdG90eXBlIGZvciB0aGUgbmV3CglmdW5jdGlvbiBjb252ZXJ0X3ZwYXRoX3RvX3czMi4gRGVsZXRlZCBtYWNybyBmb3Igc2FtZS4KCgkqIFJFQURNRS5XMzI6IEFkZGVkIHNvbWUgbm90ZXMgYWJvdXQgd2h5IEkgY2hvc2Ugbm90IHRvIHRyeQoJYW5kIHN1cHBvcnQgcGF0aG5hbWVzIHdoaWNoIGNvbnRhaW4gd2hpdGUgc3BhY2UgYW5kIHNvbWUKCXdvcmthcm91bmQgc3VnZ2VzdGlvbnMuCgpUaHUgSnVsIDI1IDE5OjUzOjMxIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBHTlVtYWtlZmlsZSAobWtkZXAtbm9saWIpOiBVc2UgLU1NIG9wdGlvbiB1bmNvbmRpdGlvbmFsbHkuCgoJKiBWZXJzaW9uIDMuNzQuNy4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IEJhY2sgdXAgUCB0byBwb2ludCBhdCBudWxsIHRlcm1pbmF0b3IKCXdoZW4ga2lsbGluZyBmaW5hbCBzcGFjZSBhbmQgZGFzaCBiZWZvcmUgc2V0dGluZyBNRkxBR1MuCgoJRnJvbSBSb2JlcnQgSG9laG5lIDxyb2JlcnQuaG9laG5lQE1hdGhlbWF0aWsuVFUtQ2hlbW5pdHouREU+OgoJKiBkaXIuYyBbX19NU0RPU19fXSBbREpHUFAgPiAxXTogSW5jbHVkZSA8bGliYy9kb3Npby5oPiBhbmQgZGVmaW4KCWBfX29wZW5kaXJfZmxhZ3MnIGluaXRpYWxpemVkIHRvIDAuCglbX19NU0RPU19fXSAoZG9zaWZ5KSBbREpHUFAgPiAxXTogUmV0dXJuIG5hbWUgdW5jaGFuZ2VkIGlmIF9VU0VfTEZOLgoJKGZpbmRfZGlyZWN0b3J5KSBbX19NU0RPU19fICYmIERKR1BQID4gMV06IElmIF9VU0VfTEdOLCBzZXQKCV9fb3BlbmRpcl9mbGFncyB0byBfX09QRU5ESVJfUFJFU0VSVkVfQ0FTRS4KCgkqIHZtc2Z1bmN0aW9ucy5jICh2bXNfc3RhdCk6IGBzeXMkZGFzc2duIChEZXZDaGFuKTsnIGFkZGVkIGJ5IGtrYWVtcGYuCgoJKiBHTlVtYWtlZmlsZSAodzMyZmlsZXMpOiBBZGQgTk1ha2VmaWxlLgoKCSogTk1ha2VmaWxlIChMREZMQUdTX2RlYnVnKTogVmFsdWUgZml4ZWQgYnkgdHVsbG9oLgoKU2F0IEp1bCAyMCAxMjozMjoxMCAxOTk2ICBLbGF1cyBL5G1wZiAoa2thZW1wZkBwcm9naXMuZGUpCgoJKiByZW1ha2UuYyAoZl9tdGltZSkgW1ZNU106IEFkZCBtaXNzaW5nIGBpZicgY29uZGl0aW9uYWwgZm9yIGZ1dHVyZQoJbW9kdGltZSBjaGVjay4KCSogY29uZmlnLmgtdm1zLCBtYWtlZmlsZS52bXMsIHJlYWRtZS52bXMsIHZtc2lmeS5jOiBVcGRhdGUgYWRkcmVzcy4KClNhdCBKdWwgMjAgMDU6Mjk6NDMgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVxdWlyZSBhdXRvY29uZiAyLjEwIG9yIGxhdGVyLgoKRnJpIEp1bCAxOSAxNjo1NzoyNyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjYuCgoJKiBHTlVtYWtlZmlsZSAodzMyZmlsZXMpOiBOZXcgdmFyaWFibGUuCgkoZGlzdGZpbGVzKTogQWRkIGl0LgoJKiB3MzI6IFVwZGF0ZWQgYnkgUm9iIFR1bGxvaC4KCgkqIG1ha2VmaWxlLnZtcyAoTE9BRExJQkVTKTogRml4IHR5cG8uCgpTdW4gSnVsIDE0IDEyOjU5OjI3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEZpeCB1cCAjZWxzZSwgI2VuZGlmcy4KCgkqIGNvbmZpZ2guZG9zOiBEZWZpbmUgSEFWRV9ESVJFTlRfSCBpbnN0ZWFkIG9mIERJUkVOVC4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogRG9uJ3QgY29tcGFyZSBNVElNRSB0byBOT1cgaWYgTVRJTUUgPT0gLTEuCgoJKiBWZXJzaW9uIDMuNzQuNS4KCgkqIG1haW4uYyAobWFpbik6IEV4aXQgd2l0aCBzdGF0dXMgMiB3aGVuIHVwZGF0ZV9nb2FsX2NoYWluIHJldHVybnMgMi4KClNhdCBKdW4gMjIgMTQ6NTY6MDUgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIF9zeXNfc2lnbGlzdC4KCSogbWFrZS5oIFtIQVZFX19TWVNfU0lHTElTVF06IERvbid0IHRlc3QgdGhpczsganVzdCBwdW50IGlmIHRoZXJlIGlzCglubyBzdHJzaWduYWwgb3Igc3lzX3NpZ2xpc3QuCgoJKiByZWFkLmMgKGNvbmRpdGlvbmFsX2xpbmUpOiBTdHJpcCB3cyBpbiBgaWZlcSAoYSAsIGIpJyBzbyBpdCBpcyB0aGUKCXNhbWUgYXMgYGlmZXEgKGEsIGIpJy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3QgY2FsbCBkaWUgaWYgaGFuZGxpbmdfZmF0YWxfc2lnbmFsLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBBbGxvdyByZW5hbWluZyA6OiB0byA6IHdoZW4gbGF0dGVyIGlzCglub24tdGFyZ2V0LCBvciA6IHRvIDo6IHdoZW4gZm9ybWVyIGlzIG5vbi10YXJnZXQuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBDYWxsIGJsb2NrX3NpZ3MuCgkoYmxvY2tfc2lncyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiBzdGFydF9qb2JfY29tbWFuZC4KCShyZWFwX2NoaWxkcmVuKTogQmxvY2sgZmF0YWwgc2lnbmFscyBhcm91bmQgcmVtb3ZpbmcgZGVhZCBjaGlsZCBmcm9tCgljaGFpbiBhbmQgYWRqdXN0aW5nIGpvYl9zbG90c191c2VkLgoJKiBqb2IuaDogRGVjbGFyZSBibG9ja19zaWdzLgoKCSogcmVtb3RlLXN0dWIuYyAocmVtb3RlX3NldHVwLCByZW1vdGVfY2xlYW51cCk6IE5ldyAoZW1wdHkpIGZ1bmN0aW9ucy4KCSogbWFpbi5jIChtYWluKTogQ2FsbCByZW1vdGVfc2V0dXAuCgkoZGllKTogQ2FsbCByZW1vdGVfY2xlYW51cC4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogUXVpZXNjZW50IHZhbHVlIG9mIHNoZWxsX2Z1bmN0aW9uX3BpZCBpcwoJemVybywgbm90IC0xLgoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogQWRkIDk2IHRvIGNvcHlyaWdodCB5ZWFycy4KClNhdCBKdW4gMTUgMjA6MzA6MDEgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiByZWFkLmMgKGZpbmRfY2hhcl91bnF1b3RlKTogQXZvaWQgY2FsbGluZyBzdHJsZW4gb24gZXZlcnkgY2FsbAoJanVzdCB0byB0aHJvdyBhd2F5IHRoZSB2YWx1ZSBtb3N0IG9mIHRoZSB0aW1lLgoKU3VuIEp1biAgMiAxMjoyNDowMSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogUHJlcGVuZCAnLScgdG8gQVJHVlsxXSBpZiBpdCBjb250YWlucwoJbm8gJz0nLCByZWdhcmRsZXNzIG9mIEFSR0MuCgkoZGVmaW5lX21ha2VmbGFncyk6IEVsaWRlIGxlYWRpbmcgJy0nIGZyb20gTUFLRUZMQUdTIHZhbHVlIGlmIGZpcnN0Cgl3b3JkIGlzIHNob3J0IG9wdGlvbiwgcmVnYXJkbGVzcyBvZiBXT1JEUy4KCldlZCBNYXkgMjIgMTc6MjQ6NTEgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIG1ha2VmaWxlLnZtczogU2V0IExPQURMSUJFUy4KCSogbWFrZWZpbGUuY29tIChsaW5rX3VzaW5nX2xpYnJhcnkpOiBGaXggdHlwby4KCldlZCBNYXkgMTUgMTc6Mzc6MjYgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChwcmludF9kaXJfZGF0YV9iYXNlKTogVXNlICVsZCBkZXYgYW5kIGlubyBhbmQgY2FzdCB0aGVtIHRvCglsb25nLgoKV2VkIE1heSAxNSAxMDoxNDoxNCBDRFQgMTk5NiAgUm9iIFR1bGxvaCAgPHR1bGxvaEB0aXZvbGkuY29tPgoKCSogZGlyLmM6IFczMiBkb2VzIG5vdCBzdXBwb3J0IGlub2RlLiBGb3Igbm93LCBmdWxseSBxdWFsaWZpZWQKCXBhdGhuYW1lIGFsb25nIHdpdGggc3RfbXRpbWUgd2lsbCBiZSBrZXlzIGZvciBmaWxlcy4KCUZpeGVkIHByb2JsZW0gd2hlcmUgdnBhdGggY2FuIGJlIGNvbmZ1c2VkIHdoZW4gZmlsZXMKCWFyZSBhZGRlZCB0byBhIGRpcmVjdG9yeSBhZnRlciB0aGUgZGlyZWN0b3J5IGhhcyBhbHJlYWR5IGJlZW4KCXJlYWQgaW4uIFRoZSBjb2RlIG5vdyBhdHRlbXB0cyB0byByZXJlYWQgdGhlIGRpcmVjdG9yeSBpZiBpdAoJZGlzY292ZXJzIHRoYXQgdGhlIGRhdGVzdGFtcCBvbiB0aGUgZGlyZWN0b3J5IGhhcyBjaGFuZ2VkIHNpbmNlCglpdCB3YXMgY2FjaGVkIGJ5IG1ha2UuIFRoaXMgcHJvYmxlbSBvbmx5IHNlZW1zIHRvIG9jY3VyIG9uIFczMgoJcmlnaHQgbm93IHNvIGl0IGlzIGx1bXBlZCB1bmRlciBwb3J0ICNpZmRlZiBXSU5ET1dTMzIuCgoJKiBmdW5jdGlvbi5jOiBXMzI6IGNhbGwgc3VicHJvYyBsaWJyYXJ5IChDcmVhdGVQcm9jZXNzKCkpIGluc3RlYWQgb2YKCWZvcmsvZXhlYy4KCgkqIGpvYi5jOiBXMzI6IEFkZGVkIHRoZSBjb2RlIHRvIGRvIGZvcmsvZXhlYy93YWl0cGlkIHN0eWxlIHByb2Nlc3NpbmcKCW9uIFczMiBzeXN0ZW1zIHZpYSBjYWxscyB0byBzdWJwcm9jIGxpYnJhcnkuCgoJKiBtYWluLmM6IFczMjogU2V2ZXJhbCB0aGluZ3MgYWRkZWQgaGVyZS4gRmlyc3QsIHRoZXJlIGlzIGNvZGUKCWZvciBkZWFsaW5nIHdpdGggUEFUSCBhbmQgU0hFTEwgZGVmYXVsdHMuIE1ha2UgdHJpZXMgdG8gZmlndXJlCglvdXQgaWYgdGhlIHVzZXIgaGFzICVQQVRIJSBzZXQgaW4gdGhlIGVudmlyb25tZW50IGFuZCBzZXRzIGl0IHRvCgklUGF0aCUgaWYgaXQgaXMgbm90IHNldCBhbHJlYWR5LiBNYWtlIGFsc28gbG9va3MgdG8gc2VlIGlmIHNoLmV4ZQoJaXMgYW55d2hlcmUgdG8gYmUgZm91bmQuIENvZGUgcGF0aCB0aHJvdWdoIGpvYi5jIHdpbGwgY2hhbmdlCgliYXNlZCBvbiBleGlzdGVuY2Ugb2YgYSB3b3JraW5nIEJvdXJuZSBzaGVsbC4gVGhlIGNoZWNraW5nIGZvcgoJZGVmYXVsdCBzaGVsbCBpcyBkb25lIHR3aWNlOiBvbmNlIGJlZm9yZSBtYWtlZmlsZXMgYXJlIHJlYWQgaW4KCWFuZCBhZ2FpbiBhZnRlci4gRmFsbCBiYWNrIHRvIE1TRE9TIHN0eWxlIGV4ZWN1dGlvbiBtb2RlIGlmIG5vIHNoLmV4ZQoJaXMgZm91bmQuIEFsc28gYWRkZWQgc29tZSBkZWJ1ZyBzdXBwb3J0IHRoYXQgYWxsb3dzIHVzZXIgdG8gcGF1c2UgbWFrZQoJd2l0aCAtRCBzd2l0Y2ggYW5kIGF0dGFjaCBhIGRlYnVnZ2VyLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvcgoJZGVidWdnaW5nIHJlY3Vyc2l2ZSBjYWxscyB0byBtYWtlIHdoZXJlIHByb2JsZW1zIGFwcGVhciBvbmx5IGluIHRoZQoJc3ViLW1ha2UuCgoJKiBtYWtlLmg6IFczMjogQSBmZXcgbWFjcm9zIGFuZCBoZWFkZXIgZmlsZXMgZm9yIFczMiBzdXBwb3J0LgoKCSogbWlzYy5jOiBXMzI6IEFkZGVkIGEgZnVuY3Rpb24gZW5kX29mX3Rva2VuX3czMigpIHRvIGFzc2lzdAoJaW4gcGFyc2luZyBjb2RlIGluIHJlYWQuYy4KCgkqIHJlYWQuYzogVzMyOiBGaXhlcyBzaW1pbGFyIHRvIE1TRE9TIHdoaWNoIGFsbG93IGNvbG9uIHRvCglhcHBlYXIgaW4gZmlsZW5hbWVzLiBVc2Ugb2YgY29sb24gaW4gZmlsZW5hbWVzIHdvdWxkIG90aGVyd2lzZQoJY29uZnVzZSBtYWtlLgoKCSogcmVtYWtlLmM6IFczMjogQWRkZWQgaW5jbHVkZSBvZiBpby5oIHRvIGVsaW1pbmF0ZSBjb21waWxlcgoJd2FybmluZ3MuIEFkZGVkIHNvbWUgY29kZSB0byBkZWZhdWx0IExJQkRJUiBpZiBpdCBpcyBub3Qgc2V0CglvbiBXMzIuCgoJKiB2YXJpYWJsZS5jOiBXMzI6IEFkZGVkIHN1cHBvcnQgZm9yIGRldGVjdGluZyBQYXRoL1BBVEgKCWFuZCBjb252ZXJ0aW5nIHRoZW0gdG8gc2VtaWNvbG9uIHNlcGFyYXRlZCBsaXN0cyBmb3IgbWFrZSdzCglpbnRlcm5hbCB1c2UuIE5ldyBmdW5jdGlvbiBzeW5jX1BhdGhfZW52aXJvbm1lbnQoKQoJd2hpY2ggaXMgY2FsbGVkIGluIGpvYi5jIGFuZCBmdW5jdGlvbi5jIGJlZm9yZSBjcmVhdGluZyBhIG5ldwoJcHJvY2Vzcy4gQ2FsbGVyIG11c3Qgc2V0IFBhdGggaW4gZW52aXJvbm1lbnQgc2luY2Ugd2UgZG9uJ3QKCWhhdmUgZm9yaygpIHRvIGRvIHRoaXMgZm9yIHVzLgoKCSogdnBhdGguYzogVzMyOiBBZGRlZCBkZXRlY3Rpb24gZm9yIGZpbGVuYW1lcyBjb250YWluaW5nCglmb3J3YXJkIG9yIGJhY2t3YXJkIHNsYXNoZXMuCgoJKiBOTWFrZWZpbGU6IFczMjogVmlzdWFsIEMgY29tcGF0aWJsZSBtYWtlZmlsZSBmb3IgdXNlIHdpdGggbm1ha2UuCglVc2UgdGhpcyB0byBidWlsZCBHTlUgbWFrZSB0aGUgZmlyc3QgdGltZSBvbiBXaW5kb3dzIE5UIG9yIFdpbmRvd3MgOTUuCgoJKiBSRUFETUUuVzMyOiBXMzI6IENvbnRhaW5zIHNvbWUgaGVscGZ1bCBub3Rlcy4KCgkqIGJ1aWxkX3czMi5iYXQ6IFczMjogSWYgeW91IGRvbid0IGxpa2Ugbm1ha2UsIHVzZSB0aGlzIHRoZSBmaXJzdAoJdGltZSB5b3UgYnVpbGQgR05VIG1ha2Ugb24gV2luZG93cyBOVCBvciBXaW5kb3dzIDk1LgoKCSogY29uZmlnLmguVzMyOiBXMzIgdmVyc2lvbiBvZiBjb25maWcuaAoKCSogc3VicHJvYy5iYXQ6IFczMjogQSBiYXQgZmlsZSB1c2VkIHRvIGJ1aWxkIHRoZQoJc3VicHJvYyBsaWJyYXJ5IGZyb20gdGhlIHRvcC1sZXZlbCBOTWFrZWZpbGUuIE5lZWRlZCBiZWNhdXNlCglXSW5kb3dzIDk1IChubWFrZSkgZG9lc24ndCBhbGxvdyB5b3UgdG8gY2QgaW4gYSBtYWtlIHJ1bGUuCgoJKiB3MzIvaW5jbHVkZS9kaXJlbnQuaAoJKiB3MzIvY29tcGF0L2RpcmVudC5jOiBXMzI6IG9wZW5kaXIsIHJlYWRkaXIsIGNsb3NlZGlyLCBldGMuCgoJKiB3MzIvaW5jbHVkZS9wYXRoc3R1ZmYuaDogVzMyOiB1c2VkIGJ5IGZpbGVzIG5lZWRlZCBmdW5jdGlvbnMKCWRlZmluZWQgaW4gcGF0aHN0dWZmLmMgKHByb3RvdHlwZXMpLgoKCSogdzMyL2luY2x1ZGUvc3ViX3Byb2MuaDogVzMyOiBwcm90b3R5cGVzIGZvciBzdWJwcm9jLmxpYiBmdW5jdGlvbnMuCgoJKiB3MzIvaW5jbHVkZS93MzJlcnIuaDogVzMyOiBwcm90b3R5cGVzIGZvciB3MzJlcnIuYy4KCgkqIHczMi9wYXRoc3R1ZmYuYzogVzMyOiBGaWxlIGFuZCBQYXRoL1BhdGggY29udmVyc2lvbiBmdW5jdGlvbnMuCgoJKiB3MzIvc3VicHJvYy9idWlsZC5iYXQ6IFczMjogYnVpbGQgc2NyaXB0IGZvciBzdWJwcm9jIGxpYnJhcnkKCWlmIHlvdSBkb24ndCB3aXNoIHRvIHVzZSBubWFrZS4KCgkqIHczMi9zdWJwcm9jL05NYWtlZmlsZTogVzMyOiBWaXN1YWwgQyBjb21wYXRpYmxlIG1ha2VmaWxlIGZvciB1c2UKCXdpdGggbm1ha2UuIFVzZWQgdG8gYnVpbGQgc3VicHJvYyBsaWJyYXJ5LgoKCSogdzMyL3N1YnByb2MvbWlzYy5jOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzdXBwb3J0IGNvZGUKCSogdzMyL3N1YnByb2MvcHJvYy5oOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzdXBwb3J0IGNvZGUKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogVzMyOiBzdWJwcm9jIGxpYnJhcnkgc291cmNlIGNvZGUKCSogdzMyL3N1YnByb2MvdzMyZXJyLmM6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoKTW9uIE1heSAxMyAxNDozNzo0MiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjQuCgoJKiBHTlVtYWtlZmlsZSAodm1zZmlsZXMpOiBGaXggdHlwby4KCgkqIEdOVW1ha2VmaWxlIChhbWlnYWZpbGVzKTogQWRkIGFtaWdhLmguCgpTdW4gTWF5IDEyIDE5OjE5OjQzIDE5OTYgIEFhcm9uIERpZ3VsbGEgICA8ZGlndWxsYUBmaC1rb25zdGFuei5kZT4KCgkqIGRpci5jOiBOZXcgZnVuY3Rpb246IGFtaWdhZnkoKSB0byBmb2xkIGZpbGVuYW1lcwoJQ2hhbmdlcyBIQVNIKCkgdG8gSEFTSEkoKSB0byBmb2xkIGZpbGVuYW1lcyBvbiBBbWlnYS4KCVN0cmluZ2NvbXBhcmVzIHVzZSBzdHJpZXEoKSBpbnN0ZWFkIG9mIHN0cmVxKCkKCVRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiBBbWlnYSBpcyAiIiBpbnN0ZWFkIG9mICIuIgoJKiBmaWxlLmM6IExpa2V3aXNlLgoKCSogYW1pZ2EuYzogTmV3IGZ1bmN0aW9uIHdpbGRjYXJkX2V4cGFuc2lvbigpLiBBbGxvd3MgdG8gdXNlCglBbWlnYSB3aWxkY2FyZHMgd2l0aCAkKHdpbGRjYXJkICkKCgkqIGFtaWdhLmg6IE5ldyBmaWxlLiBQcm90b3R5cGVzIGZvciBhbWlnYS5jCgoJKiBmdW5jdGlvbi5jOiBVc2Ugc3BlY2lhbCBmdW5jdGlvbiB3aWxkY2FyZF9leHBhbnNpb24oKSBmb3IKCSQod2lsZGNhcmQgKSB0byBhbGxvdyBBbWlnYSB3aWxkY2FyZHMKCVRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiBBbWlnYSBpcyAiIiBpbnN0ZWFkIG9mICIuIgoKCSogam9iLmM6IE5vIFBpcGVzIG9uIEFtaWdhLCB0b28KCShsb2FkX3Rvb19oaWdoKSBOZWl0aGVyIG9uIEFtaWdhCglFTlYgdmFyaWFibGUgb24gQW1pZ2EgYXJlIGluIGEgc3BlY2lhbCBkaXJlY3RvcnkgYW5kIGFyZSBub3QKCXBhc3NlZCBhcyB0aGlyZCBhcmd1bWVudCB0byBtYWluKCkuCgoJKiBqb2IuaDogTm8gZW52cCBvbiBBbWlnYQoKCSogbWFrZS5oOiBBZGRlZCBIQVNISSgpLiBUaGlzIGlzIHRoZSBzYW1lIGFzIEhBU0goKSBidXQgY29udmVydHMKCWl0J3Mgc2Vjb25kIHBhcmFtZXRlciB0byBsb3dlcmNhc2Ugb24gQW1pZ2EgdG8gZm9sZCBmaWxlbmFtZXMuCgoJKiBtYWluLmM6IChtYWluKSwgdmFyaWFibGUuYyBDaGFuZ2VkIGhhbmRsaW5nIG9mIEVOVi12YXJzLiBNYWtlCglzdG9yZXMgbm93IHRoZSBuYW1lcyBvZiB0aGUgdmFyaWFibGVzIG9ubHkgYW5kIHJlYWRzIHRoZWlyIGNvbnRlbnRzCgl3aGVuIHRoZXkgYXJlIGFjY2Vzc2VkIHRvIHJlZmxlY3QgdGhhdCB0aGVzZSB2YXJpYWJsZXMgYXJlIHJlYWxseQoJZ2xvYmFsIChpZS4gdGhleSBDQU4gY2hhbmdlIFdISUxFIG1ha2UgcnVucyAhKSBUaGlzIGhhbmRsaW5nIGlzCgltYWRlIGluIGxvb2t1cF92YXJpYWJsZSgpCgoJKiBNYWtlZmlsZS5hbWk6IHJlbmFtZWQgZmlsZS5oIHRvIGZpbGVkZXAuaAoJVXBkYXRlZCBkZXBlbmRlbmNpZXMKCgkqIHJlYWQuYzogImZpbmRfc2VtaWNvbG9uIiBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgYnV0IG5ldmVyIGRlZmluZWQuCglObyBkaWZmZXJlbmNlIGJldHdlZW4gTWFrZWZpbGUgYW5kIG1ha2VmaWxlIG9uIEFtaWdhOyBhZGRlZAoJU01ha2VmaWxlIHRvICpkZWZhdWx0X21ha2VmaWxlc1tdLgoJKHJlYWRfbWFrZWZpbGUpIFNBUy9DIHdhbnQncyB0d29fY29sb24gYW5kIHBhdHRlcm5fcGVyY2VudCBiZSBzZXQKCWJlZm9yZSB1c2UuCglUaGUgY3VycmVudCBkaXJlY3Rvcnkgb24gQW1pZ2EgaXMgIiIgaW5zdGVhZCBvZiAiLiIKCVN0cmFuZ2UgI2VuZGlmIG1vdmVkLgoKCSogUkVBRE1FLkFtaWdhOiB1cGRhdGVkIGZlYXR1cmUgbGlzdAoKCSogU01ha2VmaWxlOiBVcGRhdGVkIGRlcGVuZGVuY2llcwoKCSogdmFyaWFibGUuYzogSGFuZGxpbmcgb2YgRU5WIHZhcmlhYmxlIGhhcHBlbnMgaW5zaWRlIGxvb2t1cF92YXJpYWJsZSgpCgpTYXQgTWF5IDExIDE3OjU4OjMyIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENvdW50IHBhcmVucyBpbiBsaHMgdmFyaWFibGUKCXJlZnMgdG8gYXZvaWQgc2VlaW5nID0vOj0vKz0gaW5zaWRlIGEgcmVmLgoKVGh1IE1heSAgOSAxMzo1NDo0OSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbU0lHUVVJVF06IE1ha2UgU0lHUVVJVCBjaGVjawoJY29uZGl0aW9uYWwuCgoJKiBtYWluLmMgKG1haW4pOiBVc2UgdW5zaWduZWQgZm9yIGZyZWFkIHJldHVybi4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBVc2UgYGludCcgZm9yIGNoYXIgYXJnIHRvIGF2b2lkIHdpZGVuaW5nCgljb25mbGljdCBpc3N1ZXMuCgkqIGRlcC5oOiBGaXggcHJvdG90eXBlLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKSBbX0FNSUdBXTogRml4IHNvbWUgdHlwb3MuCgkocGF0c3Vic3RfZXhwYW5kKTogTWFrZSBsZW4gdmFycyB1bnNpZ25lZC4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgQW1pZ2FET1Mgc3VwcG9ydCBmaWxlcy4KCShkaXN0ZmlsZXMpOiBBZGQgJChhbWlnYWZpbGVzKS4KCShhbWlnYWZpbGVzKTogTmV3IHZhcmlhYmxlLgoKVGh1IE5vdiAgNyAxMDoxODoxNiAxOTk1ICBBYXJvbiBEaWd1bGxhICAgPGRpZ3VsbGFAZmgta29uc3RhbnouZGU+CgoJKiBBZGRlZCBBbWlnYSBzdXBwb3J0IGluIGNvbW1hbmRzLmMsIGRpci5jLCBmdW5jdGlvbi5jLAoJam9iLmMsIG1haW4uYywgbWFrZS5oLCByZWFkLmMsIHJlbWFrZS5jCgkqIGNvbW1hbmRzLmM6IEFtaWdhIGhhcyBuZWl0aGVyIFNJR0hVUCBub3IgU0lHUVVJVAoJKiBkaXIuYzogQW1pZ2EgaGFzIGZpbGVuYW1lcyB3aXRoIFVwcGVyLSBhbmQgTG93ZXJjYXNlLAoJYnV0ICJGaWxlTmFtZSIgaXMgdGhlIHNhbWUgYXMgImZpbGVuYW1lIi4gQWRkZWQgc3RyaWVxKCkKCXdoaWNoIGlzIHVzZSB0byBjb21wYXJlIGZpbGVuYW1lcy4gVGhpcyBpcyBsaWtlIHN0cmVxKCkKCW9uIGFsbCBvdGhlciBzeXN0ZW1zLiBBbHNvIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMKCSIuIiB1bmRlciBBbWlnYURPUy4KCSogZnVuY3Rpb24uYzogT24gQW1pZ2EsIHRoZSBlbnZpcm9ubWVudCBpcyBub3QgcGFzc2VkIGFzIGVudnAsCgl0aGVyZSBhcmUgbm8gcGlwZXMgYW5kIEFtaWdhIGNhbid0IGZvcmsuIFVzZSBteSBvd24gZnVuY3Rpb24KCXRvIGNyZWF0ZSBhIG5ldyBjaGlsZC4KCSogam9iLmM6IGRlZmF1bHRfc2hlbGwgaXMgIiIgKFRoZSBzeXN0ZW0gYXV0b21hdGljYWxseSBjaG9vc2VzCglhIHNoZWxsIGZvciBtZSkuIEhhdmUgdG8gdXNlIHRoZSBzYW1lIHdvcmthcm91bmQgYXMgTVNET1MgZm9yCglydW5uaW5nIGJhdGNoIGNvbW1hbmRzLiBBZGRlZCBIQVZFX1NZU19QQVJBTV9ILiBOT0ZJTEUgaXNuJ3QKCWtub3duIG9uIEFtaWdhLiBDbG9uZWQgY29kZSB0byBydW4gY2hpbGRyZW4gZnJvbSBNU0RPUy4gT3duCgl2ZXJzaW9uIG9mIHNoX2NoYXJzW10gYW5kIHNoX2NtZHNbXS4gTm8gZHVwMigpIG9yIGR1cCgpIG9uIEFtaWdhLgoJKiBtYWluLmM6IEZvcmNlIHN0YWNrIHRvIDIwMDAwIGJ5dGVzLiBSZWFkIGVudmlyb25tZW50IGZyb20gRU5WOgoJZGV2aWNlLiBPbiBBbWlnYSwgZXhlY19jb21tYW5kKCkgZG9lcyByZXR1cm4sIHNvIEkgZXhpdCgpCglhZnRlcndhcmRzLgoJKiBtYWtlLmg6IEFkZGVkIHN0cmllcSgpIHRvIGNvbXBhcmUgZmlsZW5hbWVzLgoJKiByZWFkLmM6IEFtaWdhIG5lZWRzIHNwZWNpYWwgZXh0ZW5zaW9uIHRvIGhhdmUgcGFzc3dkLiBPbmx5CglvbmUgaW5jbHVkZS1kaXIuICJNYWtlZmlsZSIgYW5kICJtYWtlZmlsZSIgYXJlIHRoZSBzYW1lLgoJQWRkZWQgIlNNYWtlZmlsZSIuICBBZGRlZCBzcGVjaWFsIGNvZGUgdG8gaGFuZGxlIGRldmljZSBuYW1lcyAoeHh4OikKCWFuZCAiLi8iIGluIHJ1bGVzLgoJKiByZW1ha2UuYzogT25seSBvbmUgbGliLWRpci4gQW1pZ2EgbGluay1saWJzIGFyZSBuYW1lZCAiJXMubGliIgoJaW5zdGVhZCBvZiAibGliJXMuYSIuCgkqIG1haW4uYywgcnVsZS5jLCB2YXJpYWJsZS5jOiBBdm9pZCBmbG9hdHMgYXQgYWxsIGNvc3RzLgoJKiB2cGF0aC5jOiBHZXQgcmlkIG9mIGFzIG1hbnkgYWxsb2NhKClzIGFzIHBvc3NpYmxlLgoKVGh1IE1heSAgOSAxMzoyMDo0MyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogR3JvayBgc2luY2x1ZGUnIGFzIGFsaWFzIGZvciBgLWluY2x1ZGUnLgoKV2VkIE1hciAyMCAwOTo1MjoyNyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogR05VbWFrZWZpbGUgKHZtc2ZpbGVzKTogTmV3IHZhcmlhYmxlLgoJKGRpc3RmaWxlcyk6IEluY2x1ZGUgJCh2bXNmaWxlcykuCgpUdWUgTWFyIDE5IDIwOjIxOjM0IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJTWVyZ2VkIFZNUyBwb3J0IGZyb20gS2xhdXMgS2FlbXBmIDxra2FlbXBmQGRpZHltdXMucm1pLmRlPi4KCSogbWFrZS5oIChQQVJBTVMpOiBOZXcgbWFjcm8uCgkqIGNvbmZpZy5oLXZtczogTmV3IGZpbGUuCgkqIG1ha2VmaWxlLmNvbTogTmV3IGZpbGUuCgkqIG1ha2VmaWxlLnZtczogTmV3IGZpbGUuCgkqIHJlYWRtZS52bXM6IE5ldyBmaWxlLgoJKiB2bXNkaXIuaDogTmV3IGZpbGUuCgkqIHZtc2Z1bmN0aW9ucy5jOiBOZXcgZmlsZS4KCSogdm1zaWZ5LmM6IE5ldyBmaWxlLgoJKiBmaWxlLmg6IFJlbmFtZWQgdG8gZmlsZWRlZi5oIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggVk1TIHN5c3RlbSBoZHIuCgkqIGFyLmM6IEFkZGVkIHByb3RvdHlwZXMgYW5kIGNoYW5nZXMgZm9yIFZNUy4KCSogY29tbWFuZHMuYzogTGlrZXdpc2UuCgkqIGNvbW1hbmRzLmg6IExpa2V3aXNlLgoJKiBkZWZhdWx0LmM6IExpa2V3aXNlLgoJKiBkZXAuaDogTGlrZXdpc2UuCgkqIGRpci5jOiBMaWtld2lzZS4KCSogZXhwYW5kLmM6IExpa2V3aXNlLgoJKiBmaWxlLmM6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jOiBMaWtld2lzZS4KCSogaW1wbGljaXQuYzogTGlrZXdpc2UuCgkqIGpvYi5jOiBMaWtld2lzZS4KCSogam9iLmg6IExpa2V3aXNlLgoJKiBtYWluLmM6IExpa2V3aXNlLgoJKiBtYWtlLmg6IExpa2V3aXNlLgoJKiBtaXNjLmM6IExpa2V3aXNlLgoJKiByZWFkLmM6IExpa2V3aXNlLgoJKiByZW1ha2UuYzogTGlrZXdpc2UuCgkqIHJlbW90ZS1zdHViLmM6IExpa2V3aXNlLgoJKiBydWxlLmM6IExpa2V3aXNlLgoJKiBydWxlLmg6IExpa2V3aXNlLgoJKiB2YXJpYWJsZS5jOiBMaWtld2lzZS4KCSogdmFyaWFibGUuaDogTGlrZXdpc2UuCgkqIHZwYXRoLmM6IExpa2V3aXNlLgoJKiBjb21wYXRNYWtlZmlsZSAoc3Jjcyk6IFJlbmFtZSBmaWxlLmggdG8gZmlsZWRlZi5oLgoKU2F0IEF1ZyAxOSAyMzoxMTowMCAxOTk1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogRm9yIGEgc2Vjb25kYXJ5IGZpbGUsIHRyeSBpbXBsaWNpdCBhbmQKCWRlZmF1bHQgcnVsZXMgaWYgYXBwcm9wcmlhdGUuCgpXZWQgQXVnICAyIDA0OjI5OjQyIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBJZiBhbiBpbnRlcm1lZGlhdGUgZmlsZSBleGlzdHMsCglkbyBjb25zaWRlciBpdHMgYWN0dWFsIGRhdGUuCgpTdW4gSnVsIDMwIDAwOjQ5OjUzIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuaCAoc3RydWN0IGZpbGUpOiBOZXcgZmllbGQgYHNlY29uZGFyeScuCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogQ2hlY2sgZm9yIC5JTlRFUk1FRElBVEUgYW5kIC5TRUNPTkRBUlkuCgkocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBEb24ndCBkZWxldGUgLlNFQ09OREFSWSBmaWxlcy4KClNhdCBNYXIgIDIgMTY6MjY6NTIgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNzKTogQWRkIGdldG9wdC5oOyBwcmVwZW5kICQoc3JjZGlyKS8gdG8gZ2V0b3B0Ki4KCkZyaSBNYXIgIDEgMTI6MDQ6NDcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4zLgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBNb3ZlIGZ1dHVyZSBtb2R0aW1lIGNoZWNrIGJlZm9yZSBGSUxFIGlzCgljbG9iYmVyZWQgYnkgOjogbG9vcC4KCgkqIGRpci5jOiBVc2UgY2Fub25pY2FsIGNvZGUgZnJvbSBhdXRvY29uZiBtYW51YWwgZm9yIGRpcmVudCBpbmNsdWRlLgoJW19EX05BTUxFTl06IFJlZGVmaW5lIE5BTUxFTiB1c2luZyB0aGlzLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVXNlIE5BTUxFTiBtYWNyby4KCShyZWFkX2RpcnN0cmVhbSkgW19ESVJFTlRfSEFWRV9EX05BTUxFTl06IE9ubHkgc2V0IGRfbmFtbGVuICNpZiB0aGlzLgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2guCgpXZWQgRmViIDI4IDAzOjU2OjIwIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBSZW1vdmUgKyBwcmVmaXggZnJvbSBSQ1MgY21kcy4KCShkZWZhdWx0X3ZhcmlhYmxlcyk6IFB1dCArIHByZWZpeCBpbiAkKENIRUNLT1VULHYpIHZhbHVlIGluc3RlYWQuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IENoZWNrIGZvciBmdXR1cmUgdGltZXN0YW1wczsgZ2l2ZSBlcnJvciBhbmQgbWFyawoJZmlsZSBhcyAiZmFpbGVkIHRvIHVwZGF0ZSIuCgpGcmkgSmFuIDEyIDE4OjA5OjM2IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYzogRG9uJ3QgZGVjbGFyZSB1bmJsb2NrX3NpZ3M7IGpvYi5oIGFscmVhZHkgZG9lcy4KClNhdCBKYW4gIDYgMTY6MjQ6NDQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGFjY29uZmlnLmggKEhBVkVfU1lTQ09ORl9PUEVOX01BWCk6ICN1bmRlZiByZW1vdmVkLgoKCSogam9iLmMgKE5HUk9VUFNfTUFYKTogRG9uJ3QgdHJ5IHRvIGRlZmluZSB0aGlzIG1hY3JvLgoKRnJpIERlYyAyMiAxODo0NDo0NCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKEdFVE9QVCwgR0VUT1BUX1NSQywgR0xPQik6IFZhcmlhYmxlcyByZW1vdmVkLgoJKG9ianMsIHNyY3MpOiBJbmNsdWRlIHRoZWlyIHZhbHVlcyBoZXJlIGluc3RlYWQgb2YgcmVmZXJlbmNlcy4KClRodSBEZWMgMTQgMDY6MjE6MjkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4yLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBDYWxsIHVuYmxvY2tfc2lncyBhZnRlciBzdGFydF9qb2JfY29tbWFuZC4KClRodSBEZWMgMTQgMDc6MjI6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZHVhbGl0eS5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChkaXJfc2V0dXBfZ2xvYik6IERvbid0IHVzZSBsc3RhdDsgZ2xvYiBuZXZlciBjYWxscyBpdCBhbnl3YXkuCglBdm9pZCAmIGJlZm9yZSBmdW5jdGlvbiBuYW1lcyB0byBzaWxlbmNlIGJvZ3VzIHN1bm9zNCBjb21waWxlci4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGNoZWNrIGZvciBgc3lzY29uZiAoX1NDX09QRU5fTUFYKScuCgpUdWUgRGVjIDEyIDAwOjQ4OjQyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuMS4KCgkqIGRpci5jIChyZWFkX2RpcnN0cmVhbSk6IEZpeCBicmFpbm86IGZpbGwgaW4gdGhlIGJ1ZmZlciB3aGVuIG5vdAoJcmVhbGxvY2F0aW5nIGl0IQoKTW9uIERlYyAxMSAyMjoyNjoxNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWlzYy5jIChjb2xsYXBzZV9jb250aW51YXRpb25zKTogRml4IHNraXBwaW5nIG9mIHRyYWlsaW5nIFxzIHNvCglpdCBjYW4gbmV2ZXIgZGVyZWZlcmVuY2UgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgoKCSogcmVhZC5jIChmaW5kX3NlbWljb2xvbik6IEZ1bmN0aW9uIHJlbW92ZWQuCgkocmVhZF9tYWtlZmlsZSk6IERvbid0IHVzZSBmaW5kX3NlbWljb2xvbiBvciByZW1vdmVfY29tbWVudHMgZm9yCglydWxlIGxpbmVzLiAgVXNlIGZpbmRfY2hhcl91bnF1b3RlIGRpcmVjdGx5IGFuZCBoYW5kbGUgcXVvdGVkIGNvbW1lbnRzCglwcm9wZXJseS4KCgkqIGRlZmF1bHQuYzogUmVtb3ZlIGFsbCBbTV9YRU5JWF0gY29kZS4KCgkqIGRpci5jIFtIQVZFX0RfTkFNTEVOXTogRGVmaW5lIHRoaXMgZm9yIF9fR05VX0xJQlJBUllfXyA+IDEuCgkoRF9OQU1MRU4pOiBNYWNybyByZW1vdmVkLgoJKEZBS0VfRElSX0VOVFJZKTogTmV3IG1hY3JvLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVGVzdCBIQVZFX0RfTkFNTEVOIGluc3RlYWQgb2YgdXNpbmcKCURfTkFNTEVOLgoJKHJlYWRfZGlyc3RyZWFtKTogUmV0dXJuIGEgc3RydWN0IGRpcmVudCAqIGZvciBuZXcgZ2xvYiBpbnRlcmZhY2UuCgkoaW5pdF9kaXIpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGRpcl9zZXR1cF9nbG9iKTogTmV3IGZ1bmN0aW9uLgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBjYWxsIGluaXRfZGlyLgoJKiByZWFkLmMgKG11bHRpX2dsb2IpOiBDYWxsIGRpcl9zZXR1cF9nbG9iIG9uIG91ciBnbG9iX3QgYW5kIHVzZQoJR0xPQl9BTFRESVJGVU5DIGZsYWcuCgoJKiBtaXNjLmMgKHNhZmVfc3RhdCk6IEZ1bmN0aW9uIHJlbW92ZWQuCgkqIHJlYWQuYywgY29tbWFuZHMuYywgcmVtYWtlLmMsIHZwYXRoLmM6IFVzZSBwbGFpbiBzdGF0IGluc3RlYWQgb2YKCXNhZmVfc3RhdC4KClNhdCBOb3YgMjUgMjA6MzU6MTggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIFtIQVZFX1VOSU9OX1dBSVRdOiBJbmNsdWRlIHN5cy93YWl0LmguCgoJKiBtYWluLmMgKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IE1hZGUgZ2xvYmFsLgoJUHJpbnQgZW50ZXJpbmcgbXNnIG9ubHkgb25jZS4KCSogbWFrZS5oIChsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBEZWNsYXJlIGl0LgoJKiBtaXNjLmMgKG1lc3NhZ2UpOiBUYWtlIG5ldyBhcmcgUFJFRklYLiAgUHJpbnQgIm1ha2U6ICIgb25seSBpZgoJbm9uemVyby4gIENhbGwgbG9nX3dvcmtpbmdfZGlyZWN0b3J5LgoJKiByZW1ha2UuYzogUGFzcyBuZXcgYXJnIGluIGBtZXNzYWdlJyBjYWxscy4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUGFzcyBuZXcgYXJnIHRvIGBtZXNzYWdlJzsgZml4CglpbnZlcnRlZCB0ZXN0IGluIHRoYXQgY2FsbC4KClR1ZSBOb3YgMjEgMTk6MDE6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFVzZSBgbWVzc2FnZScgdG8gcHJpbnQgdGhlIGNvbW1hbmQsCglhbmQgY2FsbCBpdCB3aXRoIG51bGwgaWYgdGhlIGNvbW1hbmQgaXMgc2lsZW50LgoJKiByZW1ha2UuYyAodG91Y2hfZmlsZSk6IFVzZSBtZXNzYWdlIGluc3RlYWQgb2YgcHJpbnRmLgoKVHVlIE9jdCAxMCAxNDo1OTozMCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IEJhcmYgaWYgTkFNRSBpcyAiIi4KClNhdCBTZXAgIDkgMDY6MzM6MjAgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAd2hpei1iYW5nLmdudS5haS5taXQuZWR1PgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IElnbm9yZSB1bmxpbmsgZmFpbHVyZSBpZiBpdCBpcyBFTk9FTlQuCgpUaHUgQXVnIDE3IDE1OjA4OjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciBnZXRkdGFibGVzaXplLgoJKiBqb2IuYyAoZ2V0ZHRhYmxlc2l6ZSk6IFJlbW92ZSBkZWNscyBhbmQgbWFjcm9zLgoKVGh1IEF1ZyAxMCAxOToxMDowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogT21pdCBjb21tYW5kIGxpbmUgdmFyaWFibGUKIAlkZWZpbml0aW9ucyBmcm9tIE1GTEFHUyB2YWx1ZS4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKSBbQUlBTUFHXTogQ2hlY2sgZm9yIHplcm8gTUVNQkVSX09GRlNFVCwKIAlpbmRpY2F0aW5nIGEgdmFsaWQsIGJ1dCBlbXB0eSwgYXJjaGl2ZS4KCk1vbiBBdWcgIDcgMTU6NDA6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGVfcCk6IENvcnJlY3RseSByZXNldCBGSUxFTkFNRSB0byBuYW1lCiAJd2l0aGluIGRpcmVjdG9yeSBiZWZvcmUgaGFzaCBzZWFyY2guCgoJKiBqb2IuYyAoY2hpbGRfZXJyb3IpOiBEbyBub3RoaW5nIGlmIElHTk9SRUQgdW5kZXIgLXMuCgoJKiBqb2IuYyAoZXhlY19jb21tYW5kKTogQ29ycmVjdGx5IHVzZSBBUkdWWzBdIGZvciBzY3JpcHQgbmFtZSB3aGVuCiAJcnVubmluZyBzaGVsbCBkaXJlY3RseS4KClR1ZSBBdWcgIDEgMTQ6Mzk6MTQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChjaGlsZF9leGVjdXRlX2pvYik6IENsb3NlIFNURElOX0ZEIGFuZCBTVERPVVRfRkQgYWZ0ZXIKIAlkdXAnaW5nIGZyb20gdGhlbS4gIERvbid0IHRyeSB0byBjbG9zZSBhbGwgZXhjZXNzIGRlc2NyaXB0b3JzOwogCWdldGR0YWJsZXNpemUgbWlnaHQgcmV0dXJuIGEgaHVnZSB2YWx1ZS4gIEFueSBvcGVuIGRlc2NyaXB0b3JzIGluCiAJdGhlIHBhcmVudCBzaG91bGQgaGF2ZSBGRF9DTE9FWEVDIHNldC4KCShzdGFydF9qb2JfY29tbWFuZCk6IFNldCBGRF9DTE9FWEVDIGZsYWcgb24gQkFEX1NURElOIGRlc2NyaXB0b3IuCgpUdWUgSnVuIDIwIDAzOjQ3OjE1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IFByb3Blcmx5IGFwcGVuZCBkZWZhdWx0IG1ha2VmaWxlcwogCXRvIHRoZSBlbmQgb2YgdGhlIGByZWFkX21ha2VmaWxlcycgY2hhaW4uCgpGcmkgTWF5IDE5IDE2OjM2OjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQgcmVsZWFzZWQuCgpXZWQgTWF5IDEwIDE3OjQzOjM0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzMuMy4KClR1ZSBNYXkgIDkgMTc6MTU6MjMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpL21ha2UuaW5mbyk6IE1ha2Ugc3VyZSAkJGRpciBpcyBzZXQgaW4KIAlpbnN0YWxsLWluZm8gY21kLgoKV2VkIE1heSAgMyAxNTo1NjowNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChwcmludF9maWxlKTogR3JvayB1cGRhdGVfc3RhdHVzIG9mIDEgZm9yIC1xLgoKVGh1IEFwciAyNyAxMjozOTozNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjczLjIuCgpXZWQgQXByIDI2IDE3OjE1OjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogRml4IGludmVydGVkIHRlc3QgdG8gYmFpbCB1bmRlcgogCS1uIGZvciBzaWduYWwgY2FzZS4gIEJhaWwgdW5kZXIgLXEgb3IgLXQuCglTa2lwIGZpbGVzIHdpdGggdXBkYXRlX3N0YXR1cz09LTEuCgoJKiBqb2IuYyAoam9iX25leHRfY29tbWFuZCk6IFNraXAgZW1wdHkgbGluZXMuCgkobmV3X2pvYik6IERvbid0IHRlc3QgdGhlIHJldHVybiBvZiBqb2JfbmV4dF9jb21tYW5kLgoJSnVzdCBsZXQgc3RhcnRfd2FpdGluZ19qb2IgaGFuZGxlIHRoZSBjYXNlIG9mIGVtcHR5IGNvbW1hbmRzLgoKV2VkIEFwciAxOSAwMzoyNTo1NCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZnVuY3Rpb24uYyBbX19NU0RPU19fXTogSW5jbHVkZSA8ZmNudGwuaD4uICBGcm9tIERKIERlbG9yaWUuCgoJKiBWZXJzaW9uIDMuNzMuMS4KClNhdCBBcHIgIDggMTQ6NTM6MjQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFNldCBGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8KIAlpZiBpdCdzIC0xLgoKV2VkIEFwciAgNSAwMDoyMDoyNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjczIHJlbGVhc2VkLgoKVHVlIE1hciAyOCAxMzoyNTo0NiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogRml4ZWQgYnJhaW5vIGluIGFzc2VydC4KCgkqIFZlcnNpb24gMy43Mi4xMy4KCk1vbiBNYXIgMjcgMDU6Mjk6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYzogQXZvaWQgc3RyaW5nIGluIGFzc2VydCBleHByZXNzaW9uLiAgU29tZSBzeXN0ZW1zIGFyZSBicm9rZW4uCgpGcmkgTWFyIDI0IDAwOjMyOjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBIYW5kbGUgMSBhbmQgMiByZXR1cm5zIGZyb20gdXBkYXRlX2dvYWxfY2hhaW4KIAltYWtlZmlsZSBydW4gcHJvcGVybHkuCgoJKiBWZXJzaW9uIDMuNzIuMTIuCgoJKiBtYWluLmMgKGhhbmRsZV9ub25fc3dpdGNoX2FyZ3VtZW50KTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCiAJZGVjb2RlX3N3aXRjaGVzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFNldCBvcHRpbmQgdG8gMCB0byByZWluaXRpYWxpemUgZ2V0b3B0LCBub3QgdG8gMS4KCVdoZW4gZ2V0b3B0X2xvbmcgcmV0dXJucyBFT0YsIGJyZWFrIHRoZSBsb29wIGFuZCBoYW5kbGUgcmVtYWluaW5nIGFyZ3MKIAl3aXRoIGEgc2ltcGxlIHNlY29uZCBsb29wLgoKCSogcmVtYWtlLmMgKHJlbWFrZV9maWxlKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMiBpbnN0ZWFkIG9mIDEgZm9yCiAJbm8gcnVsZSB0byBtYWtlLiAgTWVudGlvbiBwYXJlbnQgKGRlcGVuZGVudCkgaW4gZXJyb3IgbWVzc2FnZS4KCSh1cGRhdGVfZmlsZV8xKTogSGFuZGxlIEZJTEUtPnVwZGF0ZV9zdGF0dXMgPT0gMiBpbiAtZCBwcmludG91dC4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kLCByZWFwX2NoaWxkcmVuKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMgogCWluc3RlYWQgb2YgMSBmb3IgZmFpbGVkIGNvbW1hbmRzLgoKVHVlIE1hciAyMSAxNjoyMzozOCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHNlYXJjaF9wYXRoKTogRnVuY3Rpb24gcmVtb3ZlZCAod2FzIGFscmVhZHkgI2lmIDAnZCBvdXQpLgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSBBQ19UWVBFX0dFVEdST1VQUzsgbm90aGluZyBuZWVkcyBpdCBhbnkgbW9yZS4KCkZyaSBNYXIgMTcgMTU6NTc6NDAgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5iYXQ6IFdyaXRlIEBDUFBGTEFHU0AgdHJhbnNsYXRpb24uCgpNb24gTWFyIDEzIDAwOjQ1OjU5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogUmVhcnJhbmdlZCBgbChhIGIpJyAtPiBgbChhKSBsKGIpJyBsb29wCiAJdG8gbm90IHNraXAgdGhlIGVsdCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYGwoLi4uJy4KCkZyaSBNYXIgMTAgMTM6NTY6NDkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4xMS4KCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBNYWtlIHNlY29uZCBhcmcgYSBzdHJpbmcgb2Ygc3RvcAogCWNoYXJzIGluc3RlYWQgb2YgYSBzaW5nbGUgc3RvcCBjaGFyLiAgU3RvcCB3aGVuIGFueSBjaGFyIGluIHRoZQogCXN0cmluZyBpcyBoaXQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGZpbmRfc2VtaWNvbG9uKTogUGFzcyBzdG9wIGNoYXJzICIjOyIgdG8gb25lIGZpbmRfY2hhcl91bnF1b3RlIGNhbGwsCglpbnN0ZWFkIG9mIHVzaW5nIHR3byBjYWxscy4gIElmIHRoZSBtYXRjaCBpcyBub3QgYSA7IGJ1dCBhICMsCiAJcmV0dXJuIHplcm8uCgkqIG1pc2MuYzogQ2hhbmdlZCBmaW5kX2NoYXJfdW5xdW90ZSBjYWxsZXJzIGhlcmUgdG9vLgoKCSogVmVyc2lvbiAzLjcyLjEwLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlLCBwYXJzZV9maWxlX3NlcSk6IEZpeCB0eXBvIF9fTVNfRE9TX18gLT4KIAlfX01TRE9TX18uCgoJKiBHTlVtYWtlZmlsZSAoZ2xvYmZpbGVzKTogQWRkIGdsb2IvY29uZmlndXJlLmJhdC4KCShkaXN0ZmlsZXMpOiBBZGQgY29uZmlnaC5kb3MsIGNvbmZpZ3VyZS5iYXQuCgpXZWQgTWFyICA4IDEzOjEwOjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJRml4ZXMgZm9yIE1TLURPUyBmcm9tIERKIERlbG9yaWUuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSwgcGFyc2VfZmlsZV9zZXEpIFtfX01TX0RPU19fXTogRG9uJ3Qgc2VlIDoKIAlhcyBzZXBhcmF0b3IgaW4gIkM6XC4uLiIuCgkqIGNvbmZpZ2guZG9zIChTVERDX0hFQURFUlMpOiBEZWZpbmUgb25seSBpZiB1bmRlZmluZWQuCgkoSEFWRV9TWVNfUEFSQU1fSCk6IERvbid0IGRlZmluZSB0aGlzLgoJKEhBVkVfU1RSRVJST1IpOiBEZWZpbmUgdGhpcy4KCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtfX01TRE9TX19dOiBGaXggdHlwb3MuCgoJKiBWZXJzaW9uIDMuNzIuOS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogUmVzZXQgb3B0aW5kIHRvIDEgaW5zdGVhZCBvZiAwLgoKVHVlIE1hciAgNyAxNzozMTowNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSWYgbm9uLW9wdGlvbiBhcmcgaXMgIi0iLCBpZ25vcmUgaXQuCgpNb24gTWFyICA2IDIzOjU3OjM4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuOC4KCldlZCBGZWIgMjIgMjE6MjY6MzYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi43LgoKVHVlIEZlYiAyMSAyMjoxMDo0MyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogUGFzcyBtaXNzaW5nIGFyZyB0byB0bXBuYW0uCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzdHJzaWduYWwuCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IFVzZSBzdHJzaWduYWwuCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgc2lnbmFtZV9pbml0ICNpZmRlZiBIQVZFX1NUUlNJR05BTC4KCgkqIG1pc2MuYyAoc3RyZXJyb3IpOiBGaXggc3dhcHBlZCBhcmdzIGluIHNwcmludGYuCgpNb24gRmViIDEzIDExOjUwOjA4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW4gKENGTEFHUywgTERGTEFHUyk6IERvbid0IHNldCB0aGVzZSB2YXJpYWJsZXMuCgpGcmkgRmViIDEwIDE4OjQ0OjEyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgOTUgdG8gY29weXJpZ2h0IHllYXJzLgoKCSogVmVyc2lvbiAzLjcyLjYuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZW1lbWJlciB0byBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlCiAJdW5kZXIgLW4gd2hlbiBub3QgcmVjdXJzaW5nLiAgVG8gZG8gdGhpcywgY29uc29saWRhdGUgdGhhdCBjb2RlCiAJdW5kZXIgdGhlIGVtcHR5IGNvbW1hbmQgY2FzZSBhbmQgZ290byB0aGVyZSBmb3IgdGhlIC1uIGNhc2UuCgpUdWUgRmViICA3IDEzOjM2OjAzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlLmggWyEgU1REQ19IRUFERVJTXTogRG9uJ3QgZGVjbGFyZSBxc29ydC4gIFN1biBoZWFkZXJzCiAJZGVjbGFyZSBpdCBpbnQuCgpNb24gRmViICA2IDE3OjM3OjAxIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGb3IgYm9ndXMgbGluZSBzdGFydGluZyB3aXRoIHRhYiwgaWdub3JlCiAJaXQgaWYgYmxhbmsgYWZ0ZXIgcmVtb3ZpbmcgY29tbWVudHMuCgoJKiBtYWluLmM6IENhc3QgcmVzdWx0cyBvZiBgYWxsb2NhJyB0byBgY2hhciAqJy4KCSogZXhwYW5kLmM6IExpa2V3aXNlLgoKU3VuIEZlYiAgNSAxODozNTo0NiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjUuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBta3RlbXAuCgkqIG1haW4uYyAobWFpbikgWyEgSEFWRV9NS1RFTVBdOiBVc2UgdG1wbmFtIGluc3RlYWQgb2YgbWt0ZW1wLgoKCSogY29uZmlndXJlLmluIChtYWtlX2N2X3N5c2NvbmZfb3Blbl9tYXgpOiBOZXcgY2hlY2sgZm9yIGBzeXNjb25mCiAJKF9TQ19PUEVOX01BWCknLgoJKiBhY2NvbmZpZy5oOiBBZGRlZCAjdW5kZWYgSEFWRV9TWVNDT05GX09QRU5fTUFYLgoJKiBqb2IuYyBbSEFWRV9TWVNDT05GX09QRU5fTUFYXSAoZ2V0ZHRhYmxlc2l6ZSk6IERlZmluZSBhcyBtYWNybwogCXVzaW5nIHN5c2NvbmYuCgpGcmkgSmFuIDI3IDA0OjQyOjA5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IFdoZW4gIU1VU1RfTUFLRSwgZG9uJ3Qgc2V0CiAJRklMRS0+dXBkYXRlX3N0YXR1cyB0byB6ZXJvIGJlZm9yZSBjYWxsaW5nIG5vdGljZV9maW5pc2hlZF9maWxlLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogVG91Y2ggb25seSB3aGVuIEZJTEUtPnVwZGF0ZV9zdGF0dXMgaXMgemVyby4KCShyZW1ha2VfZmlsZSk6IFNldCBGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8gYWZ0ZXIgbm90IGNhbGxpbmcKCWV4ZWN1dGVfZmlsZV9jb21tYW5kIGFuZCBkZWNpZGluZyB0byB0b3VjaCBpbnN0ZWFkLgoKVGh1IEphbiAyNiAwMToyOTozMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWJ1Z19zaWduYWxfaGFuZGxlcik6IE5ldyBmdW5jdGlvbjsgdG9nZ2xlcyBkZWJ1Z19mbGFnLgoJKG1haW4pOiBIYW5kbGUgU0lHVVNSMSB3aXRoIHRoYXQuCgpNb24gSmFuIDE2IDE1OjQ2OjU2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogUmVtb3ZlIEluZm8gZmlsZXMuCgpTdW4gSmFuIDE1IDA4OjIzOjA5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuNC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFNhdmUgYW5kIHJlc3RvcmUgZW52aXJvbiBhcm91bmQgdmZvcmsKICAgICAgICBjYWxsLgoJKHNlYXJjaF9wYXRoKTogRnVuY3Rpb24gI2lmIDAnZCBvdXQuCgkoZXhlY19jb21tYW5kKTogVXNlIGV4ZWN2cCBpbnN0ZWFkIG9mIHNlYXJjaF9wYXRoLgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IFJld3JvdGUgY29tcHV0ZWQgdmFyaWFibGUgbmFtZSBhbmQKCXN1YnN0aXR1dGlvbiByZWZlcmVuY2UgaGFuZGxpbmcgdG8gYmUgc2ltcGxlci4gIEZpcnN0IGV4cGFuZCB0aGUKCWVudGlyZSB0ZXh0IGJldHdlZW4gdGhlIHBhcmVucyBpZiBpdCBjb250YWlucyBhbnkgJHMsIHRoZW4gZXhhbWluZQoJdGhlIHJlc3VsdCBvZiB0aGF0IGZvciBzdWJ0aXR1dGlvbiByZWZlcmVuY2VzIGFuZCBkbyBubyBmdXJ0aGVyCglleHBhbnNpb24gd2hpbGUgcGFyc2luZyB0aGVtLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBIYW5kbGUgIiBxdW90aW5nIHRvbywKCXdoZW4gbm8gYmFja3NsYXNoLCAkIG9yIGAgY2hhcmFjdGVycyBhcHBlYXIgaW5zaWRlIHRoZSBxdW90ZXMuCgoJKiBjb25maWd1cmUuaW4gKHVuaW9uIHdhaXQgY2hlY2spOiBJZiBXRVhJVFNUQVRVUyBhbmQgV1RFUk1TSUcgYXJlCiAgICAgICAgZGVmaW5lZCwganVzdCB1c2UgaW50LgoKVHVlIEphbiAxMCAwNjoyNzoyNyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19faHB1eF06IFJlbW92ZSBzcGVjaWFsCglkZWZpbml0aW9uIG9mIEFSRkxBR1MuICBFeGlzdGVuY2Ugb2YgdGhlIGBmJyBmbGFnIGlzIG5vdAoJY29uc2lzdGVudCBhY3Jvc3MgSFBVWCB2ZXJzaW9uczsgYW5kIG9uZSBtaWdodCBiZSB1c2luZyBHTlUgYXIKCWFueXdheS4KCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IERvbid0IHJlbW92ZSBJbmZvIGZpbGVzLgoKCSogY29tcGF0TWFrZWZpbGUgKGNoZWNrKTogUmVtb3ZlIGdyYXR1aXRvdXMgdGFyZ2V0IGRlY2xhcmF0aW9uLgoKU2F0IEphbiAgNyAxMTozODoyMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKEVUQUdTLCBDVEFHUyk6IERvbid0IHVzZSAtdC4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKSBbY3JheV06IFN1YnRyYWN0IDEgbGlrZSBbX19ocHV4XS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRm9yIC0taGVscCwgcHJpbnQgdXNhZ2UgdG8gc3Rkb3V0LgoKTW9uIERlYyAgNSAxMjo0MjoxOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjMuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IERvIHNldF9jb21tYW5kX3N0YXRlIChGSUxFLAoJY3Nfbm90X3N0YXJ0ZWQpIG9ubHkgaWYgb2xkIHN0YXRlIHdhcyBkZXBzX3J1bm5pbmcuCgpNb24gTm92IDI4IDE0OjI0OjAzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBVc2Ugc2V0X2NvbW1hbmRfc3RhdGUuCgoJKiBidWlsZC50ZW1wbGF0ZSAoQ1BQRkxBR1MpOiBOZXcgdmFyaWFibGUuCgkocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCBmcm9tIEAuLi5ALgoJKGNvbXBpbGF0aW9uIGxvb3ApOiBQYXNzICRDUFBGTEFHUyB0byBjb21waWxlci4KCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IE1ha2UgaXQgZXhlY3V0YWJsZS4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgY29uZmlndXJlLmluLCBjb25maWd1cmUuCgoJKiBWZXJzaW9uIDMuNzIuMi4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogRG9uJ3Qgd3JpdGUgZ2xvYi9NYWtlZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfU1lNQk9MKTogVXNlIEFDX0RFRklORV9VTlFVT1RFRC4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIHJhbmxpYi4KClR1ZSBOb3YgMjIgMjI6NDI6NDAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IE9ubHkgbWFyayBhbHNvX21ha2UncyBhcwoJdXBkYXRlZCBpZiByZWFsbHkgcmFuIGNtZHMuCgpUdWUgTm92IDE1IDA2OjMyOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IFB1dCBkbmxzIGJlZm9yZSByYW5kb20gd2hpdGVzcGFjZS4KClN1biBOb3YgMTMgMDU6MDI6MjUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZSwgc2V0IGZyb20gQENQUEZMQUdTQC4KCShSQU5MSUIpOiBWYXJpYWJsZSByZW1vdmVkLgoJKHByZWZpeCwgZXhlY19wcmVmaXgpOiBTZXQgdGhlc2UgZnJvbSBALi4uQC4KCSguYy5vKTogVXNlICQoQ1BQRkxBR1MpLgoJKGdsb2IvbGliZ2xvYi5hKTogRG9uJ3QgcGFzcyBkb3duIHZhcmlhYmxlcyB0byBzdWItbWFrZS4KCWdsb2IvTWFrZWZpbGUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgYnkgY29uZmlndXJlLgoJKGRpc3RjbGVhbik6IFJlbW92ZSBjb25maWcubG9nIGFuZCBjb25maWcuY2FjaGUgKGF1dG9jb25mIHN0dWZmKS4KCk1vbiBOb3YgIDcgMTM6NTg6MDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGFjY29uZmlnLmg6IEFkZCAjdW5kZWYgSEFWRV9VTklPTl9XQUlULgoJKiBjb25maWd1cmUuaW46IENvbnZlcnRlZCB0byBBdXRvY29uZiB2Mi4KCSogZGlyLmM6IFRlc3QgSEFWRV9ESVJFTlRfSCwgSEFWRV9TWVNfRElSX0gsIEhBVkVfTkRJUl9IIGluc3RlYWQKCW9mIERJUkVOVCwgU1lTRElSLCBORElSLgoJKiBidWlsZC5zaC5pbiAocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCB0aGVzZSBmcm9tIEAuLi5ALgoJKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLCBzZXQgZnJvbSBAQ1BQRkxBR1NALgoJKGNvbXBpbGluZyBsb29wKTogUGFzcyAkQ1BQRkxBR1MgYmVmb3JlICRDRkxBR1MuCgkqIGluc3RhbGwuc2g6IEZpbGUgcmVuYW1lZCB0byBpbnN0YWxsLXNoLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogV2hlbiBubyBmbGFncywgc2V0IFdPUkRTIHRvIHplcm8uCgpTdW4gTm92ICA2IDE4OjM0OjAxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuMS4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFRlcm1pbmF0ZSBwcm9wZXJseSB3aGVuIEZMQUdTVFJJTkcgaXMKICAgICAgICBlbXB0eS4KCkZyaSBOb3YgIDQgMTY6MDI6NTEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4KClR1ZSBOb3YgIDEgMDE6MTg6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS41LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogV2hlbiBBUkdWIGlzIG5pbCwgb25seSBzZXQKCXVwZGF0ZV9zdGF0ZSBhbmQgY2FsbCBub3RpY2VfZmluaXNoZWRfZmlsZSBpZiBqb2JfbmV4dF9jb21tYW5kCglyZXR1cm5zIHplcm8uCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBDYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGZvciBlbXB0eQogICAgICAgIGNvbW1hbmQgbGluZS4KClRodSBPY3QgMjcgMDI6MDI6NDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogU2V0IENPTU1BTkRTX1NJTEVOVCBmb3IgLlNJTEVOVCwgbm90CiAgICAgICAgQ09NTUFORFNfTk9FUlJPUi4KCldlZCBPY3QgMjYgMDI6MTQ6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS40LgoKVHVlIE9jdCAyNSAyMjo0OToyNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBTZXQgY29tbWFuZF9mbGFncyBiaXRzIGluIGFsbCA6OiBlbnRyaWVzLgoKTW9uIE9jdCAyNCAxODo0Nzo1MCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFrZS5oIChwb3NpeF9wZWRhbnRpYyk6IERlY2xhcmUgaXQuCgkqIG1haW4uYyAobWFpbik6IE1vdmUgY2hlY2tzIC5JR05PUkUsIC5TSUxFTlQsIC5QT1NJWCB0bwogICAgICAgIHNuYXBfZGVwcy4KCSogZmlsZS5jIChzbmFwX2RlcHMpOiBDaGVjayAuSUdOT1JFLCAuU0lMRU5ULCAuUE9TSVggaGVyZSBpbnN0ZWFkCglvZiBpbiBtYWluLiAgSWYgLklHTk9SRSBoYXMgZGVwcywgT1IgQ09NTUFORFNfTk9FUlJPUiBpbnRvIHRoZWlyCgljb21tYW5kX2ZsYWdzIGFuZCBkb24ndCBzZXQgLWkuICBMaWtld2lzZSAuU0lMRU5ULgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBJbiBGTEFHUyBpbml0aWFsaXphdGlvbiwgT1IgaW4KCUNISUxELT5maWxlLT5jb21tYW5kX2ZsYWdzLgoJKiBmaWxlLmggKHN0cnVjdCBmaWxlKTogTmV3IG1lbWJlciBgY29tbWFuZF9mbGFncycuCgpTdW4gT2N0IDE2IDAxOjAxOjUxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKHN3aXRjaGVzKTogQnVtcCBmbGFnIHZhbHVlcyBmb3IgLS1uby1wcmludC1kaXJlY3RvcnkgYW5kCgktLXdhcm4tdW5kZWZpbmVkLXZhcmlhYmxlcywgc28gbmVpdGhlciBpcyAxICh3aGljaCBpbmRpY2F0ZXMgYQoJbm9ub3B0aW9uIGFyZ3VtZW50KS4KClNhdCBPY3QgMTUgMjM6Mzk6NDggMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IEFkZCBtaXNzaW5nIGNvZGUgaW4gLklHTk9SRSB0ZXN0LgoKTW9uIE9jdCAxMCAwNDowOTowMyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgK0QgYW5kICtGLgoKU2F0IE9jdCAgMSAwNDowNzo0OCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIGhpZGRlbiBhdXRvbWF0aWMgdmFyaWFibGUgd2l0aCBjb21tYW5kCgl2YXJzLCBhbmQgTUFLRU9WRVJSSURFUyB0byBhIHJlZmVyZW5jZSB0byB0aGF0LgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBJZiBwb3NpeF9wZWRhbnRpYywgd3JpdGUgYSByZWZlcmVuY2UgdG8gdGhhdAoJaW5zdGVhZC4KClRodSBTZXAgMjkgMDA6MTQ6MjYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAocG9zaXhfcGVkYW50aWMpOiBOZXcgdmFyaWFibGUuCgkobWFpbik6IFNldCBwb3NpeF9wZWRhbnRpYyBpZiAuUE9TSVggaXMgYSB0YXJnZXQuCglGaXggLklHTk9SRSBhbmQgLlNJTEVOVCBjaGVja3MgdG8gcmVxdWlyZSBpc190YXJnZXQuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBEZWZpbmUgbmV3IGF1dG9tYXRpYyB2YXJpYWJsZQoJJCssIGxpa2UgJF4gYnV0IGJlZm9yZSBjYWxsaW5nIHVuaXF1aXplX2RlcHMuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IENhbGwgZGVsZXRlX2NoaWxkX3RhcmdldHMgZm9yIG5vbi1zaWduYWwKCWVycm9yIGlmIC5ERUxFVEVfT05fRVJST1IgaXMgYSB0YXJnZXQuCgpUdWUgU2VwIDI3IDAxOjU3OjE0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzEuMy4KCk1vbiBTZXAgMjYgMTg6MTY6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3QgY2hhbmdlIEMtPmZpbGUtPmNvbW1hbmRfc3RhdGUgd2hlbgoJZHlpbmcuICBUZXN0IGl0IG9ubHkgYWZ0ZXIgY2FsbGluZyBzdGFydF9qb2JfY29tbWFuZCBmb3IgYSBuZXcKCWNvbW1hbmQgbGluZS4gIFdoZW4gbm8gbW9yZSBjbWRzLCBqdXN0IHNldCBDLT5maWxlLT51cGRhdGVfc3RhdHVzLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogV2hlbiB0aGUgbGFzdCBsaW5lIGlzIGVtcHR5IG9yIHVuZGVyIC1uLCBzZXQKCUMtPmZpbGUtPnVwZGF0ZV9zdGF0dXMuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBHcm9rIGNzX25vdF9zdGFydGVkIGFmdGVyIHN0YXJ0X2pvYl9jb21tYW5kCglhcyBzdWNjZXNzLgoJKG5ld19qb2IpOiBTZXQgQy0+ZmlsZS0+dXBkYXRlX3N0YXR1cyB3aGVuIHRoZXJlIGFyZSBubyBjbWRzLgoJKGpvYl9uZXh0X2NvbW1hbmQpOiBXaGVuIG91dCBvZiBsaW5lcywgZG9uJ3Qgc2V0CglDSElMRC0+ZmlsZS0+dXBkYXRlX3N0YXR1cyBvciBDSElMRC0+ZmlsZS0+Y29tbWFuZF9zdGF0ZS4KCgkqIG1haW4uYyAocXVvdGVfYXNfd29yZCk6IFJlbmFtZWQgZnJvbSBzaGVsbF9xdW90ZS4gIFRha2UgbmV3IGFyZzsKCWlmIG5vbnplcm8sIGFsc28gZG91YmxlICRzLgoJKG1haW4pOiBEZWZpbmUgTUFLRU9WRVJSSURFUyBmcm9tIGNvbW1hbmRfdmFyaWFibGVzIGhlcmUuCgkoZGVmaW5lX21ha2VmbGFncyk6IERvbid0IHVzZSBjb21tYW5kX3ZhcmlhYmxlcyBoZXJlOyBpbnN0ZWFkIHdyaXRlIGEKCXJlZmVyZW5jZSAkKE1BS0VPVkVSUklERVMpIGluIE1BS0VGTEFHUy4gIE1ha2UgdmFycyByZWN1cnNpdmUuCgoJKiBkaXIuYyBbX19NU0RPU19fXTogRml4ZWQgdHlwby4KCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBSZXNldCBFWElTVFMgd2hlbiBzdGF0IGZhaWxzLgoKU2F0IFNlcCAxMCAwMzowMTozNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmM6IEluY2x1ZGUgPGFzc2VydC5oPiBhbmQgdXNlIGFzc2VydCBpbnN0ZWFkIG9mIHByaW50ZnMKICAgICAgICBhbmQgYWJvcnQuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IExvb3AgdW50aWwgb3B0aW5kIGhpdHMgQVJHQywgbm90IGp1c3QKCXVudGlsIGdldG9wdF9sb25nIHJldHVybnMgRU9GLiAgSW5pdGlhbGl6ZSBDIHRvIHplcm8gYmVmb3JlIGxvb3A7CglpbiBsb29wIGlmIEMgaXMgRU9GLCBzZXQgb3B0YXJnIGZyb20gQVJHVltvcHRpbmQrK10sIGVsc2UgY2FsbAoJZ2V0b3B0X2xvbmcuCgkoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSB2YXJpYWJsZV9leHBhbmQgaW5zdGVhZCBvZgoJYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZC4gIEFsbG9jYXRlIGEgZnJlc2ggYnVmZmVyIHRvIGNvcHkgc3BsaXQKCXdvcmRzIGludG87IHNjYW4gY2hhcmFjdGVycyBieSBoYW5kIHRvIGJyZWFrIHdvcmRzIGFuZAoJZGViYWNrc2xhc2hpZnkuCgkoc2hlbGxfcXVvdGUpOiBOZXcgZnVuY3Rpb24uCgkoZGVmaW5lX21ha2VmbGFncyk6IEFsbG9jYXRlIGRvdWJsZWQgc3BhY2UgZm9yIHN3aXRjaCBhcmdzLCBhbmQgY29tbWFuZAoJdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlczsgdXNlIHNoZWxsX3F1b3RlIHRvIHF1b3RlIHRob3NlIHRoaW5ncy4KCkZyaSBTZXAgIDkgMDE6Mzc6NDcgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS4yLgoKCSogYWNjb25maWcuaDogQWRkIEhBVkVfU1lTX1NJR0xJU1QgYW5kIEhBVkVfX1NZU19TSUdMSVNULgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBUaGUgbm9uLW9wdGlvbiByZXR1cm4gZnJvbSBnZXRvcHQgaXMKCTEsIG5vdCAwLgoJKGNvbW1hbmRfdmFyaWFibGVzKTogTmV3IHR5cGUgYW5kIHZhcmlhYmxlLgoJKGRlY29kZV9zd2l0Y2hlcywgZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IEFmdGVyIG1ha2luZyBhIHZhcmlhYmxlCglkZWZpbml0aW9uLCByZWNvcmQgdGhlIHN0cnVjdCB2YXJpYWJsZSBwb2ludGVyIGluIHRoZQoJY29tbWFuZF92YXJpYWJsZXMgY2hhaW4uCgkoZGVmaW5lX21ha2VmbGFncyk6IElmIEFMTCwgd3JpdGUgdmFyaWFibGUgZGVmaW5pdGlvbnMgZm9yCgljb21tYW5kX3ZhcmlhYmxlcy4KCgkqIG1haW4uYyAob3RoZXJfYXJncyk6IFZhcmlhYmxlIHJlbW92ZWQuCgkoZ29hbHMsIGxhc3Rnb2FsKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMgKG1vdmVkIGZyb20gYXV0byBpbiBtYWluKS4KCShtYWluKTogRG9uJ3QgcHJvY2VzcyBPVEhFUl9BUkdTIGF0IGFsbC4KCURvbid0IHNldCB2YXJpYWJsZSBNQUtFT1ZFUlJJREVTIGF0IGFsbDsgZGVmaW5lIE1BS0UgdG8ganVzdAogICAgICAgICQoTUFLRV9DT01NQU5EKS4KCShpbml0X3N3aXRjaGVzKTogUHJlcGVuZCBhIC0ge3JldHVybiBpbiBvcmRlcn0gaW5zdGVhZCBvZiBhICsKCXtyZXF1aXJlIG9yZGVyfS4KCShkZWNvZGVfc3dpdGNoZXMpOiBEb24ndCBzZXQgT1RIRVJfQVJHUyBhdCBhbGwuCglHcm9rICdcMCcgcmV0dXJuIGZyb20gZ2V0b3B0X2xvbmcgYXMgbm9uLW9wdGlvbiBhcmd1bWVudDsgdHJ5Cgl2YXJpYWJsZSBkZWZpbml0aW9uIGFuZCAoaWYgIUVOVikgZW50ZXIgZ29hbCB0YXJnZXRzIGhlcmUuCgkoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSBhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kIHRvIHN0b3JlIHZhbHVlLgoJVXNlIGZpbmRfbmV4dF90b2tlbiB0byBzaW1wbGlmeSB3b3JkLXNwbGl0dGluZyBsb29wLiAgRG9uJ3QKCXByZXBlbmQgYSBkYXNoIHRvIHVuaW50ZXJwcmV0ZWQgdmFsdWUuICBJbnN0ZWFkLCBpZiBzcGxpdCBpbnRvCglvbmx5IG9uZSB3b3JkLCB0cnkgdmFyaWFibGUgZGVmaW5pdGlvbiBhbmQgZmFpbGluZyB0aGF0IHByZXBlbmQgYQoJZGFzaCB0byB0aGUgd29yZCBhbmQgcGFzcyBpdCB0byBkZWNvZGVfc3dpdGNoZXMgYXMgYSBzaW5nbGUgYXJnLgoKV2VkIFNlcCAgNyAwMzowMjo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogT25seSByZWNoZWNrIG1vZHRpbWVzIGlmCglGSUxFLT5jb21tYW5kX3N0YXRlIHdhcyBjc19ydW5uaW5nIG9uIGVudHJ5IChtZWFuaW5nIHRoZSBjb21tYW5kcwoJYWN0dWFsbHkganVzdCByYW4pLgoJKHVwZGF0ZV9maWxlXzEpOiBXaGVuZXZlciB3ZSBzZXQgRklMRS0+dXBkYXRlX3N0YXR1cywgY2FsbAoJbm90aWNlX2ZpbmlzaGVkX2ZpbGUgaW5zdGVhZCBvZiBqdXN0IHNldF9jb21tYW5kX3N0YXRlLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBXaGVuZXZlciB3ZSBzZXQKCUNISUxELT5maWxlLT51cGRhdGVfc3RhdHVzLCBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGluc3RlYWQgb2YKCWp1c3Qgc2V0X2NvbW1hbmRfc3RhdGUuCgpUdWUgU2VwICA2IDE5OjEzOjU0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1PgoKCSogZGVmYXVsdC5jOiBBZGQgbWlzc2luZyAiLgoKCSogam9iLmM6IENoYW5nZWQgYWxsIGFzc2lnbm1lbnRzIG9mIGNvbW1hbmRfc3RhdGUgbWVtYmVycyB0byBjYWxscwoJdG8gc2V0X2NvbW1hbmRfc3RhdGUuCgkqIHJlbWFrZS5jOiBMaWtld2lzZS4KCSogZmlsZS5jIChzZXRfY29tbWFuZF9zdGF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogZmlsZS5oOiBEZWNsYXJlIHNldF9jb21tYW5kX3N0YXRlLgoKCSogbWFpbi5jIChpbml0X3N3aXRjaGVzKTogUHV0IGEgKyBmaXJzdCBpbiBvcHRpb25zLgoKTW9uIEp1bCAyNSAxODowNzo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCU1lcmdlIE1TRE9TL0dPMzIgcG9ydCBmcm9tIERKIERlbG9yaWUgPGRqQGN0cm9uLmNvbT4uCgkqIHZwYXRoLmM6IENoYW5nZWQgYWxsIHVzZXMgb2YgJzonIHRvIFBBVEhfU0VQQVJBVE9SX0NIQVIuCgkqIG1haW4uYyAoZGlyZWN0b3J5X2JlZm9yZV9jaGRpcik6IE5ldyB2YXJpYWJsZSwgbW92ZWQgb3V0IG9mIG1haW4KICAgICAgICAod2FzIGxvY2FsKS4KCShtYWluKSBbX19NU0RPU19fXTogTG9vayBmb3IgXCBvciA6IHRvIGRlbGltaXQgbGFzdCBjb21wb25lbnQgb2YKCVBST0dSQU0uICBEb24ndCBmcm9iIEFSR1ZbMF0gYmVmb3JlIHNldHRpbmcgTUFLRV9DT01NQU5EIHZhcmlhYmxlLgoJKGRpZSk6IENoYW5nZSBiYWNrIHRvIGBkaXJlY3RvcnlfYmVmb3JlX2NoZGlyJyBiZWZvcmUgZHlpbmcuCgkqIG1ha2UuaCAoUEFUSF9TRVBBUkFUT1JfQ0hBUik6IE5ldyBtYWNybzsgZGlmZmVyaW5nIGRlZm5zIGZvcgogICAgICAgIFtfX01TRE9TX19dIGFuZCBub3QuCgkqIGpvYi5jIFtfX01TRE9TX19dOiBJbmNsdWRlIDxwcm9jZXNzLmg+LgoJW19fTVNET1NfX10gKGRvc19waWQsIGRvc19zdGF0dXMsIGRvc19ibmFtZSwgZG9zX2JlbmFtZSwKCWRvc19iYXRjaF9maWxlKTogTmV3IHZhcmlhYmxlcy4KCShyZWFwX2NoaWxkcmVuKSBbX19NU0RPU19fXTogRG9uJ3QgY2FsbCB3YWl0OyBqdXN0IGV4YW1pbmUgdGhvc2UgdmFycy4KCSh1bmJsb2NrX3NpZ3MpIFtfX01TRE9TX19dOiBEbyBub3RoaW5nLgoJKHN0YXJ0X2pvYl9jb21tYW5kKSBbX19NU0RPU19fXTogVXNlIHNwYXdudnBlIGluc3RlYWQgb2YgdmZvcmsgJiBleGVjLgoJKGxvYWRfdG9vX2hpZ2gpIFtfX01TRE9TX19dOiBBbHdheXMgcmV0dXJuIHRydWUuCgkoc2VhcmNoX3BhdGgpIFtfX01TRE9TX19dOiBDaGVjayBmb3IgOiBvciAvIGluIEZJTEUgdG8gcHVudC4KCVVzZSBQQVRIX1NFUEFSQVRPUl9DSEFSIGluc3RlYWQgb2YgJzonLgoJKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtfX01TRE9TX19dOiBXaG9sbHkgZGlmZmVyZW50Cgl2YWx1ZXMgZm9yIHNoX2NoYXJzIGFuZCBzaF9jbWRzLiAgV2hvbGx5IG5ldyBjb2RlIHRvIGhhbmRsZSBzaGVsbAoJc2NyaXB0cy4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKSBbX19NU0RPU19fXTogV2hvbGx5IG5ldwogICAgICAgIGltcGxlbWVudGF0aW9uLgoJKiBkaXIuYyBbX19NU0RPU19fXSAoZG9zaWZ5KTogTmV3IGZ1bmN0aW9uLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKSBbX19NU0RPU19fXTogQ2FsbCBpdCBvbiBGSUxFTkFNRSBhbmQKCXByb2Nlc3MgdGhlIHJlc3VsdCBpbnN0ZWFkIG9mIEZJTEVOQU1FIGl0c2VsZi4KCShmaWxlX2ltcG9zc2libGVfcCkgW19fTVNET1NfX106IExpa2V3aXNlLgoJKiBkZWZhdWx0LmMgW19fTVNET1NfX106IERlZmluZSBHQ0NfSVNfTkFUSVZFLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzKSBbX19NU0RPU19fXTogVXNlIGB5X3RhYi5jJyBpbnN0ZWFkIG9mIGB5LnRhYi5jJy4KCShkZWZhdWx0X3ZhcmlhYmxlcykgW0dDQ19JU19OQVRJVkVdOiBTZXQgQ0MgYW5kIENYWCB0byBgZ2NjJywgWUFDQyB0bwoJYGJpc29uIC15JywgYW5kIExFWCB0byBgZmxleCcuCgkqIGNvbmZpZ3VyZS5iYXQsIGNvbmZpZ2guZG9zOiBOZXcgZmlsZXMuCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCkgW19fTVNET1NfX106IEp1c3QgcmVtb3ZlCglpbnRlcm1lZGlhdGVzIGFuZCBleGl0LgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogQWRkIHBhcmVucyBpbiBsZW5ndGgKCWNvbXB1dGF0aW9uIGluIC5TVUZGSVhFUyBkZXAgbG9vcCB0byBxdWlldCBjb21waWxlciB3YXJuaW5nLiAgRnJvbQoJSmltIE1leWVyaW5nLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRnJlZSBGSUxFTkFNRSBpZiB3ZSBhbGxvY2F0ZWQgaXQuICBGcm9tCiAgICAgICAgSmltIE1leWVyaW5nLgoKTW9uIEp1bCAgNCAxNzo0NzowOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChzYWZlX3N0YXQpOiBOZXcgZnVuY3Rpb24sIEVJTlRSLXNhZmUgd3JhcHBlciBhcm91bmQgc3RhdC4KCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogcmVhZC5jIChjb25zdHJ1Y3RfaW5jbHVkZV9wYXRoKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogYXJzY2FuLmMgKGFyX21lbWJlcl90b3VjaCkgW0VJTlRSXTogRG8gRUlOVFIgbG9vcGluZyBhcm91bmQgZnN0YXQuCgkqIHJlbWFrZS5jIChuYW1lX210aW1lKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKHRvdWNoX2ZpbGUpIFtFSU5UUl06IERvIEVJTlRSIGxvb3BpbmcgYXJvdW5kIGZzdGF0LgoKRnJpIEp1biAyNCAwNTo0MDoyNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2hlY2sgZm9yIGEgc2hlbGwgY29tbWFuZCBmaXJzdCwgYW5kCgl0aGVuIHN0cmlwIGxlYWRpbmcgdGFicyBiZWZvcmUgZnVydGhlciBjaGVja2luZyBpZiBpdCdzIG5vdCBhCglzaGVsbCBjb21tYW5kIGxpbmUuCgoJKiBtYWtlLmggW19fYXJtXTogVW5kZWZpbmUgUE9TSVguCglbIV9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVggJiYgIV9QT1NJWF9WRVJTSU9OXTogRG9uJ3QgZGVjbGFyZSBzeXN0ZW0KCWZ1bmN0aW9ucyB0aGF0IHJldHVybiBpbnQuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFmdGVyIHN3YWxsb3dpbmcgYQoJYmFja3NsYXNoLW5ld2xpbmUgY29tYmluYXRpb24sIGlmIElOU1RSSU5HIGlzIHNldCBnb3RvIHN0cmluZ19jaGFyCgkobmV3IGxhYmVsKSBmb3Igbm9ybWFsIElOU1RSSU5HIGhhbmRsaW5nIGNvZGUuCgpTYXQgSnVuICA0IDAxOjExOjIwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3Igc3lzX3NpZ2xpc3QgYW5kIF9zeXNfc2lnbGlzdCB3aXRoCglBQ19IQVZFX0ZVTkNTLiAgSW5zdGVhZCB1c2UgdHdvIEFDX0NPTVBJTEVfQ0hFQ0tzLgoKTW9uIE1heSAyMyAxODoyMDozOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcxLjEgcmVsZWFzZWQuCgoJKiBtYWtlLmggWyFfX0dOVV9MSUJSQVJZX18gJiYgIVBPU0lYXTogQWxzbyB0ZXN0ICNpZm5kZWYKCV9QT1NJWF9WRVJTSU9OIGZvciB0aGVzZSBkZWNsYXJhdGlvbnMuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gW1BPU0lYXTogUmVtb3ZlIGJvZ3VzICNpZm5kZWZzCglhcm91bmQgI3VuZGVmcyBvZiBIQVZFX1NFVFJFVUlEIGFuZCBIQVZFX1NFVFJFR0lELgoKU2F0IE1heSAyMSAxNjoyNjozOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcxIHJlbGVhc2VkLgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFtQT1NJWF06IERvbid0IHRlc3QgW0hBVkVfU0VUVUlEXQoJYW5kIFtIQVZFX1NFVEdJRF0uICBFdmVyeSBzeXN0ZW0gaGFzIHRob3NlLCBhbmQgY29uZmlndXJlIGRvZXNuJ3QKCWNoZWNrIGZvciB0aGVtLgoKCSogbWFrZS5oIFtfUE9TSVhfVkVSU0lPTl06IERvbid0ICNkZWZpbmUgUE9TSVggI2lmZGVmIHVsdHJpeC4KCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnKTogRGVwZW5kIG9uIGFuZCB1c2UgbG9hZGF2Zy5jIGluc3RlYWQgb2YKCWdldGxvYWRhdmcuYy4KCShsb2FkYXZnLmMpOiBMaW5rIG9yIGNvcHkgaXQgZnJvbSBnZXRsb2FkYXZnLmMuCgkoZGlzdGNsZWFuKTogUmVtb3ZlIGxvYWRhdmcuYy4KCk1vbiBNYXkgMTYgMjI6NTk6MDQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC40LgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFshIFBPU0lYXTogVW5kZWZpbmUgSEFWRV9TRVRFVUlECglhbmQgSEFWRV9TRVRFR0lELgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogSW4gU0NDUyBydWxlcywgcHV0CgkkKFNDQ1NfT1VUUFVUX09QVElPTikgYmVmb3JlICQ8LiAgT24gc29tZSBzeXN0ZW1zIC1HIGlzIGdyb2trZWQKCW9ubHkgYmVmb3JlIHRoZSBmaWxlIG5hbWUuCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCAtRyBmbGFnIGJlZm9yZSBmaWxlIG5hbWUuCgpUdWUgTWF5IDEwIDE2OjI3OjM4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFN3YWxsb3cKCWJhY2tzbGFzaC1uZXdsaW5lIGNvbWJpbmF0aW9ucyBpbnNpZGUgJycgc3RyaW5ncyB0b28uCgpUaHUgTWF5ICA1IDA0OjE1OjEwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IENhbGwgY29sbGFwc2VfY29udGludWF0aW9ucyBvbiBlYWNoIGxpbmUKCWJlZm9yZSBhbGwgZWxzZS4KCk1vbiBBcHIgMjUgMTk6MzI6MDIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogTm90aWNlIG5ld2xpbmUgaW5zaWRlCgknJyBzdHJpbmcgd2hlbiBSRVNUUCBpcyBub24tbnVsbC4KCkZyaSBBcHIgMjIgMTc6MzM6MzAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAuMy4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFJlc2V0IEZJTEUgdG8gRy0+ZmlsZSBhZnRlciB0aGUKCWRvdWJsZS1jb2xvbiBsb29wIHNvIGl0IGlzIG5ldmVyIG51bGwgZm9yIGZvbGxvd2luZyBjb2RlLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRml4IGBvdmVycmlkZSBkZWZpbmUnIHBhcnNpbmcgdG8gc2tpcAoJd2hpdGVzcGFjZSBhZnRlciBgZGVmaW5lJyBwcm9wZXJseS4KCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNkaXIpOiBEZWZpbmUgYXMgQHNyY2RpckA7IGRvbid0IHJlZmVyZW5jZQoJJChWUEFUSCkuCgkoZ2xvYi9NYWtlZmlsZSk6IE5ldyB0YXJnZXQuCgpUaHUgQXByIDIxIDE2OjE2OjU1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjIuCgoJKiBtaXNjLmMgKHJlbW92ZV9jb21tZW50cyk6IFVzZSBmaW5kX2NoYXJfdW5xdW90ZS4KCSogbWFrZS5oIChmaW5kX2NoYXJfdW5xdW90ZSk6IERlY2xhcmUgaXQuCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBOZXcgZnVuY3Rpb24sIGdlbmVyYWxpemVkIGZyb20KCWZpbmRfcGVyY2VudC4KCShmaW5kX3BlcmNlbnQsIGZpbmRfc2VtaWNvbG9uLCBwYXJzZV9maWxlX3NlcSk6IFVzZSB0aGF0LgoKV2VkIEFwciAyMCAxODo0MjozOSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBBbHdheXMgYWxsb2NhdGUgbmV3IHN0b3JhZ2UgZm9yCglGSUxFLT5zdGVtLiAgSXQgaXMgbm90IHNhZmUgdG8gc3RvcmUgU1RFTSdzIGFkZHJlc3MgYmVjYXVzZSBpdAoJbWlnaHQgYmUgYXV0byBzdG9yYWdlLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc2V0ZXVpZCBhbmQgc2V0ZWdpZC4KCSogbWlzYy5jIFtIQVZFX1NFVEVVSURdOiBEZWNsYXJlIHNldGV1aWQuCglbSEFWRV9TRVRFR0lEXTogRGVjbGFyZSBzZXRlZ2lkLgoJKG1ha2VfYWNjZXNzLCB1c2VyX2FjY2VzcykgW0hBVkVfU0VURVVJRF06IFVzZSBzZXRldWlkLgoJW0hBVkVfU0VURUdJRF06IFVzZSBzZXRlZ2lkLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogU2V0IFNUQVRVUyB0byBGSUxFLT51cGRhdGVfc3RhdHVzLAoJdG8gcHJlc2VydmUgd2hldGhlciBpdCdzIDIgZm9yIGVycm9yIG9yIDEgZm9yIC1xIHRyaWdnZXIuICBXaGVuCglTVEFUVVMgZ2V0cyBub256ZXJvIGFuZCAtcSBpcyBzZXQsIGFsd2F5cyBzdG9wIGltbWVkaWF0ZWx5LgoJKiBtYWluLmMgKG1haW4sIGRlY29kZV9zd2l0Y2hlcyk6IERpZSB3aXRoIDIgZm9yIGVycm9ycy4KCShtYWluKTogQWNjZXB0IDIgcmV0dXJuIGZyb20gdXBkYXRlX2dvYWxfY2hhaW4gYW5kIGRpZSB3aXRoIHRoYXQuCgkqIG1pc2MuYyAoZmF0YWwsIG1ha2VmaWxlX2ZhdGFsKTogRGllIHdpdGggMjsgMSBpcyByZXNlcnZlZCBmb3IgLXEKCWFuc3dlci4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEaWUgd2l0aCAyIGZvciBlcnJvci4KCShzdGFydF9qb2JfY29tbWFuZCk6IFNldCB1cGRhdGVfc3RhdHVzIHRvIDIgZm9yIGVycm9yLiAgU2V0IGl0IHRvCgkxIHdoZW4gd2Ugd291bGQgcnVuIGEgY29tbWFuZCBhbmQgcXVlc3Rpb25fZmxhZyBpcyBzZXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEb24ndCBtYXJrIG1ha2VmaWxlcyBhcyBwcmVjaW91cy4gIEp1c3QKCWxpa2Ugb3RoZXIgdGFyZ2V0cywgdGhleSBjYW4gYmUgbGVmdCBpbmNvbnNpc3RlbnQgYW5kIGluIG5lZWQgb2YKCXJlbWFraW5nIGJ5IGFib3J0ZWQgY29tbWFuZHMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBXcml0ZSBubyBlcnJvciBtc2cgZm9yIC1pbmNsdWRlIGZpbGUuCgpUdWUgQXByICA1IDA1OjIyOjE5IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBEb24ndCB1bmJsb2NrIHNpZ25hbHMuCgoJKiBmaWxlLmggKHN0cnVjdCBmaWxlKTogQ2hhbmdlIG1lbWJlciBgZG91YmxlX2NvbG9uJyBmcm9tIGZsYWcgdG8KCWBzdHJ1Y3QgZmlsZSAqJy4KCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBTZXQgZG91YmxlX2NvbG9uIHBvaW50ZXIgaW5zdGVhZCBvZiBmbGFnLgoJKiBtYWluLmMgKG1haW4pOiBXaGVuIGRpc3F1YWxpZnlpbmcgbWFrZWZpbGVzIGZvciB1cGRhdGluZywgdXNlCglkb3VibGVfY29sb24gcG9pbnRlciB0byBmaW5kIGFsbCBlbnRyaWVzIGZvciBhIGZpbGUuCgkqIGZpbGUuYyAoZW50ZXJfZmlsZSk6IElmIHRoZXJlIGlzIGFscmVhZHkgYSBkb3VibGUtY29sb24gZW50cnkKCWZvciB0aGUgZmlsZSwgc2V0IE5FVy0+ZG91YmxlX2NvbG9uIHRvIHRoYXQgcG9pbnRlci4KCShmaWxlX2hhc2hfZW50ZXIpOiBVc2UgRklMRS0+ZG91YmxlX2NvbG9uIHRvIGZpbmQgYWxsIGVudHJpZXMgdG8KCXNldCBuYW1lLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBEbyBpbm5lciBsb29wIG9uIGRvdWJsZS1jb2xvbiBlbnRyaWVzLgoJKHVwZGF0ZV9maWxlKTogVXNlIEZJTEUtPmRvdWJsZV9jb2xvbiBwb2ludGVyIHRvIGZpbmQgYWxsIGVudHJpZXMuCgkoZl9tdGltZSk6IExpa2V3aXNlLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogUHJvcGFnYXRlIG10aW1lIGNoYW5nZSB0byBhbGwgZW50cmllcy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmV0dXJuIGFmdGVyIGFib3J0LgoKRnJpIEFwciAgMSAxODo0NDoxNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCShwYXJzZV9maWxlX3NlcSk6IFdoZW4gcmVtb3ZpbmcgYW4gZWx0IHRoYXQgaXMganVzdCBgKScsIHByb3Blcmx5CglmaXggdXAgdGhlIHByZXZpb3VzIGVsdCdzIG5leHQgcG9pbnRlci4KCk1vbiBNYXIgMjggMTg6MzE6NDkgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogRG8gQUNfU0VUX01BS0UuCgkqIEdOVW1ha2VmaWxlIChNYWtlZmlsZS5pbik6IEVkaXQgTUFLRSBhc3NpZ25tZW50IGludG8gQFNFVF9NQUtFQC4KCkZyaSBNYXIgIDQgMDA6MDI6MzIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKHN1YnN0X2V4cGFuZCk6IElmIEJZX1dPUkQgb3IgU1VGRklYX09OTFkgaXMgc2V0IGFuZAoJdGhlIHNlYXJjaCBzdHJpbmcgaXMgdGhlIGVtcHR5IHN0cmluZywgZmluZCBhIG1hdGNoIGF0IHRoZSBlbmQgb2YKCWVhY2ggd29yZCAodXNpbmcgZW5kX29mX3Rva2VuIGluIHBsYWNlIG9mIHNpbmRleCkuCgoJKiBtaXNjLmMgKGVuZF9vZl90b2tlbik6IERvbid0IHRyZWF0IGJhY2tzbGFzaGVzIHNwZWNpYWxseTsgeW91CgljYW4gbm8gbG9uZ2VyIGVzY2FwZSBibGFua3Mgd2l0aCBiYWNrc2xhc2hlcyBpbiBleHBvcnQsIHVuZXhwb3J0LAoJYW5kIHZwYXRoLiAgVGhpcyB3YXMgbmV2ZXIgZG9jdW1lbnRlZCBhbnl3YXkuCgpUaHUgTWFyICAzIDIzOjUzOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBWYXJpYWJsZSBuYW1lIGZvciBgZGVmaW5lJyBpcyBub3QganVzdAoJZmlyc3QgdG9rZW47IHVzZSB3aG9sZSByZXN0IG9mIGxpbmUgYW5kIHN0cmlwIHRyYWlsaW5nIGJsYW5rcy4KCldlZCBGZWIgMTYgMTY6MDM6NDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC4xLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWRkIC1kIG1zZyBzdGF0aW5nIGFyZ3MuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBVc2UgaXNzcGFjZSB0byBza2lwIG92ZXIgbGVhZGluZwoJd2hpdGVzcGFjZSwgYW5kIGV4cGxpY2l0bHkgYXZvaWQgc2tpcHBpbmcgb3ZlciB0YWJzLiAgRG9uJ3Qgd2FudAoJdG8gc2tpcCBqdXN0IHNwYWNlcyB0aG91Z2g7IGZvcm1mZWVkcyBldCBhbCBzaG91bGQgYmUgc2tpcHBlZC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfX2hwdXhdOiBBZGQgZiBpbiBBUkZMQUdTLgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtfX2hwdXhdOiBTdWJ0cmFjdCAyIGluc3RlYWQgb2YgMSBmcm9tCglzaXplb2YgYXJfbmFtZSBmb3IgbWF4IGxlbmd0aCB0byBjb21wYXJlLgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFtQT1NJWF06IFVuZGVmaW5lIEhBVkVfU0VUUkVVSUQKCSNpZmRlZiBIQVZFX1NFVFVJRDsgbGlrZXdpc2UgSEFWRV9TRVRSRUdJRCBhbmQgSEFWRV9TRVRHSUQuCgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIHVzZXJfYWNjZXNzIGFmdGVyIHNldHRpbmcgYHByb2dyYW0nLCBpbiBjYXNlCglpdCBuZWVkcyB0byB1c2UgaXQgaW4gYW4gZXJyb3IgbWVzc2FnZS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElnbm9yZSBhbiBlbXB0eSBsaW5lIHN0YXJ0aW5nIHdpdGggYSB0YWIuCgpUaHUgRmViIDEwIDIxOjQ1OjMxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKEFDX1NZU19TSUdMSVNUX0RFQ0xBUkVEKTogVXNlIHRoaXMgaW5zdGVhZCBvZgoJQUNfQ09NUElMRV9DSEVDSyB0aGF0IGlzIG5vdyBpdHMgY29udGVudHMuCgpGcmkgRmViICA0IDE2OjI4OjU0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmg6ICN1bmRlZiBzdHJlcnJvciBhZnRlciAjaW5jbHVkZSA8c3RyaW5nLmg+LgoJWyEgQU5TSV9TVFJJTkddOiBEZWNsYXJlIHN0cmVycm9yLgoKVGh1IEZlYiAgMyAwMjoyMToyMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChzdHJlcnJvcik6ICN1bmRlZiBhbnkgbWFjcm8gYmVmb3JlIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpNb24gSmFuIDMxIDE5OjA3OjIzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENhbGN1bGF0ZSBCRUcgYmVmb3JlIGxvb3AKCXRvIHN0cmlwIGJsYW5rcyBieSBkZWNyZW1lbnRpbmcgRU5ELiAgRG9uJ3QgZGVjciBFTkQgdG8gYmVmb3JlIEJFRy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNraXAgb3ZlciBsZWFkaW5nIHNwYWNlIGNoYXJhY3RlcnMsIGJ1dAoJbm90IHRhYnMsIGFmdGVyIHJlbW92aW5nIGNvbnRpbnVhdGlvbnMgYW5kIGNvbW1lbnRzIChpdCB1c2VkIHRvCgl1c2UgaXNzcGFjZSkuCgpUdWUgSmFuIDI1IDE2OjQ1OjA1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEluICQoQEQpIGV0IGFsLCB1c2UKCXBhdHN1YnN0IHRvIHJlbW92ZSB0cmFpbGluZyBzbGFzaC4KCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV90YXJnZXQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCWRlbGV0ZV9jaGlsZF90YXJnZXRzLiAgQ2hlY2sgZm9yIGFyY2hpdmUgbWVtYmVycyBhbmQgZ2l2ZSBzcGVjaWFsIG1zZy4KCShkZWxldGVfY2hpbGRfdGFyZ2V0cyk6IFVzZSBkZWxldGVfdGFyZ2V0LgoKTW9uIEphbiAxNyAxNzowMzoyMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IFVzZSAkKFRFWEkyRFZJX0ZMQUdTKSBpbgoJdGV4aTJkdmkgcnVsZXMuCVVzZSAkKE1BS0VJTkZPX0ZMQUdTKSBpbiBtYWtlaW5mbyBydWxlcy4KClR1ZSBKYW4gMTEgMTk6Mjk6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlICh0YXJmaWxlcyk6IE9taXQgbWFrZS1kb2MuCgkobWFrZS0kKHZlcnNpb24pLnRhcik6IEluY2x1ZGUgbWFrZS5pbmZvKi4KCkZyaSBKYW4gIDcgMTY6Mjc6MDAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWd1cmUsIGNvbmZpZy5oLmluKTogQ29tbWVudCBvdXQgcnVsZXMuCgpUaHUgSmFuICA2IDE4OjA4OjA4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoYmlucHJlZml4LCBtYW5wcmVmaXgpOiBOZXcgdmFyaWFibGVzLgoJKGluc3RuYW1lKTogVmFyaWFibGUgcmVtb3ZlZC4KCShpbnN0YWxsKTogVXNlICQoe2JpbixtYW59cHJlZml4KW1ha2UgaW4gcGxhY2Ugb2YgJChpbnN0bmFtZSkuCglGaWxlIHRhcmdldHMgbGlrZXdpc2VkIHJlbmFtZWQuCgpNb24gSmFuICAzIDE3OjUwOjI1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAgcmVsZWFzZWQuCgpUaHUgRGVjIDIzIDE0OjQ2OjU0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjkuMy4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBJbnNpZGUgbXVsdGktd29yZCBhcmNoaXZlIHJlZgoJdHJhbnNsYXRpb24gbG9vcCwgY2hlY2sgTkVXMT09MCBhdCBlbmQgYW5kIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyKTogRGlzdHJpYnV0ZSBpbnN0YWxsLnNoLgoJKiBpbnN0YWxsLnNoOiBOZXcgZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCByZWRpcmVjdGlvbiBmb3IgYWRtaW4KCWNtZHMgb3V0c2lkZSBzdWJzaGVsbCBwYXJlbnMsIHRvIGF2b2lkICJjb21tYW5kIG5vdCBmb3VuZCIgbXNncwoJZnJvbSB0aGUgc2hlbGwuCgpXZWQgRGVjIDIyIDE3OjAwOjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKFNDQ1NfR0VUX01JTlVTX0cgY2hlY2spOiBQdXQgLUcgZmxhZyBsYXN0IGluIGdldCBjbWQuCglSZWRpcmVjdCBvdXRwdXQgJiBlcnJvciBmcm9tIGdldCB0byAvZGV2L251bGwuCglGaXggcmV2ZXJzZWQgc2Vuc2Ugb2YgdGVzdC4KCkZyaSBEZWMgMTcgMTU6MzE6MzYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFVzZSBwYXJlbnMgaW5zdGVhZCBvZgoJYnJhY2VzIGluc2lkZSBpZiBjb25kaXRpb24gY29tbWFuZDsgc29tZSBzaGVsbHMgbG9zZS4KClRodSBEZWMgMTYgMTU6MTA6MjMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4yLgoKCSogYXJzY2FuLmMgW01fVU5JWF06IE1vdmUgI3VuZGVmIE1fWEVOSVggZm9yIFBPUlRBUiBzdHVmZi4KCShQT1JUQVIpIFtNX1hFTklYXTogRGVmaW5lIHRvIDAgaW5zdGVhZCBvZiAxLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogT25seSBleHBvcnQgTUFLRUZMQUdTIGlmICFBTEwuCgpXZWQgRGVjIDE1IDE3OjQ3OjQ4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBDYXN0IHJlc3VsdCBvZiBwb2ludGVyIGFyaXRoIHRvIHVuc2lnbmVkIGludAoJYmVmb3JlIHBhc3NpbmcgdG8gZGVmaW5lX3ZhcmlhYmxlIGZvciBlbnZhcnMuICBNYXR0ZXJzIHdoZW4KCXNpemVvZih1bnNpZ25lZCkhPXNpemVvZihwdHJkaWZmX3QpLgoKVHVlIERlYyAxNCAxNDoyMToxNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBBZGQgbmV3IGNoZWNrIGZvciBTQ0NTX0dFVF9NSU5VU19HLgoJKiBjb25maWcuaC5pbjogQWRkICN1bmRlZiBTQ0NTX0dFVF9NSU5VU19HLgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBVc2UgYCQoU0NDU19PVVRQVVRfT1BUSU9OKScgaW4KCXBsYWNlIG9mIGAtRyAkQCcgaW4gU0NDUyBjb21tYW5kcy4KCShkZWZhdWx0X3ZhcmlhYmxlcykgW1NDQ1NfR0VUX01JTlVTX0ddOiBEZWZpbmUgU0NDU19PVVRQVVRfT1BUSU9OCgl0byAiLUckQCIuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IFB1dCB0b3VjaCBzdGFtcC1jb25maWcgaW4gc2Vjb25kIGFyZwoJKHNvIGl0IGdvZXMgaW4gY29uZmlnLnN0YXR1cyksIHJhdGhlciB0aGFuIGFmdGVyd2FyZC4KCgkqIGFyLmMgKGFyX21lbWJlcl9kYXRlKTogRG9uJ3QgY2FsbCBlbnRlcl9maWxlIG9uIHRoZSBhcmNoaXZlIGZpbGUKCWlmIGl0IGRvZXNuJ3QgZXhpc3QgKGJ5IGZpbGVfZXhpc3RzX3ApLgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvbWFrZS5pbmZvKTogUmVwbGFjZSBgJCRkL2Zvby5pbmZvJwoJd2l0aCBgJCRkaXIvbWFrZS5pbmZvJyBpbiBpbnN0YWxsLWluZm8gaW52b2NhdGlvbiAob29wcykuCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IE9ubHkgc2V0IExBU1RQQVRIIHNldCBQQVRIIHdoZW4KCXdlIGRvIG5vdCB1bmxpbmsgYW5kIGZyZWUgUEFUSC4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZV9kYXRhX2Jhc2UpOiBGaXggaW52ZXJ0ZWQgY2FsY3VsYXRpb24gZm9yCglhdmVyYWdlIGZpbGVzIHBlciBoYXNoIGJ1Y2tldC4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBXaGVuIHdlIHNlZSBhIE5VTCwgZ2l2ZSBvbmx5IGEgd2FybmluZyBhbmQKCXN5bnRoZXNpemUgYSBuZXdsaW5lIHRvIHRlcm1pbmF0ZSB0aGUgYnVpbGRpbmcgbGluZSAodXNlZCB0bwoJZmF0YWwpLiAgTW92ZSBmZ2V0cyBjYWxsIGludG8gdGhlIGxvb3AgY29uZGl0aW9uLCBhbmQgYWZ0ZXIgdGhlCglsb29wIHRlc3QgZmVycm9yICh1c2VkIHRvIHRlc3QgIWZlb2YgaW4gdGhlIGxvb3ApLgoKRnJpIERlYyAgMyAxNjo0MDozMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3RyZXJyb3IgaW4gQUNfSEFWRV9GVU5DUy4KClRodSBEZWMgIDIgMTU6Mzc6NTAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCglEaWZmZXJlbnRpYXRlIGRpZmZlcmVudCBmbGF2b3JzIG9mIG1pc3NpbmcgbWFrZWZpbGUgZXJyb3IgbXNncywKCXJlbW92aW5nIGdyYXR1aXRvdXMgYGZvcGVuOiAnIGFuZCBnaXZpbmcgY2FsbGVyIGZvciBpbmNsdWRlZCBtYWtlZmlsZXMuCgkqIG1pc2MuYyBbISBIQVZFX1NUUkVSUk9SXTogRGVmaW5lIG91ciBvd24gc3RyZXJyb3IgaGVyZS4KCShwZXJyb3Jfd2l0aF9uYW1lLCBwZmF0YWxfd2l0aF9uYW1lKTogVXNlIHN0cmVycm9yIGluc3RlYWQgb2YKCXJlcGxpY2F0aW5nIGl0cyBmdW5jdGlvbmFsaXR5LgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZXR1cm4gaW50IGluc3RlYWQgb2Ygdm9pZC4KCShyZWFkX2FsbF9tYWtlZmlsZXMsIHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2UgY2FsbGVycyB0byBub3RpY2UgemVybwoJcmV0dXJuIGFuZCBnaXZlIGVycm9yIG1zZy4KClRodSBOb3YgMTEgMTE6NDc6MzYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4xLgoKCSogZGVmYXVsdC5jOiBQdXQgYC1HICRAJyBiZWZvcmUgJDwgaW4gU0NDUyBjbWRzLgoKV2VkIE5vdiAxMCAwNjowNjoxNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWZ0ZXIgdHJ5aW5nIGEgdmFyaWFibGUgZGVmbiwgbm90aWNlIGlmCgl0aGUgbGluZSBiZWdpbnMgd2l0aCBhIHRhYiwgYW5kIGRpYWdub3NlIGFuIGVycm9yLgoKU3VuIE5vdiAgNyAwODowNzozNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LgoKV2VkIE5vdiAgMyAwNjo1NDozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjEwLgoKCSogaW1wbGljaXQuYyAodHJ5X2ltcGxpY2l0X3J1bGUpOiBMb29rIGZvciBhIG5vcm1hbCBydWxlIGJlZm9yZSBhbgoJYXJjaGl2ZSBydWxlLgoKRnJpIE9jdCAyOSAxNjo0NToyOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc29ydCcpOiBEb3VibGUgTldPUkRTIHdoZW4gaXQKCW92ZXJmbG93cywgaW5zdGVhZCBvZiBhZGRpbmcgZml2ZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IFJlbW92ZSBsb2FkYXZnLgoKV2VkIE9jdCAyNyAxNzo1ODozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjkuCgoJKiBmaWxlLmggKE5FV19NVElNRSk6IERlZmluZSBuZXcgbWFjcm8uCgkqIG1haW4uYyAobWFpbik6IFNldCB0aW1lIG9mIE5FV19GSUxFUyB0byBORVdfTVRJTUUsIG5vdCB0bwoJY3VycmVudCB0aW1lIHJldHVybmVkIGZyb20gc3lzdGVtLiAgUmVtb3ZlZCB2YXJpYWJsZSBOT1cuCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFVzZSBORVdfTVRJTUUgaW4gcGxhY2Ugb2YKCWN1cnJlbnQgdGltZSBoZXJlIHRvby4KClR1ZSBPY3QgMjYgMTk6NDU6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC44LgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBEb24ndCBjbGVhciBNVVNUX01BS0Ugd2hlbiBGSUxFIGhhcyBubwoJY21kcyBhbmQgIURFUFNfQ0hBTkdFRCB1bmxlc3MgYWxzbyAhTk9FWElTVC4KCk1vbiBPY3QgMjUgMTU6MjU6MjEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBXaGVuIGNvbnZlcnRpbmcgbXVsdGktd29yZCBhcmNoaXZlCglyZWZzLCBpZ25vcmUgYSB3b3JkIGJlZ2lubmluZyB3aXRoIGEgJygnLgoKRnJpIE9jdCAyMiAwMjo1MzozOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3lzL3RpbWViLmguCgkqIG1ha2UuaCBbSEFWRV9TWVNfVElNRUJfSF06IFRlc3QgdGhpcyBiZWZvcmUgaW5jbHVkaW5nIGl0LgoKVGh1IE9jdCAyMSAxNjo0ODoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjcuCgoJKiBydWxlLmMgKGNvbnZlcnRfc3VmZml4X3J1bGUpOiBOZXcgbG9jYWwgVEFSR1BFUkNFTlQuICBTZXQgaXQgdG8KCVRBUkdOQU1FKzEgZm9yICIoJS5vKSIsIHRvIFRBUkdOQU1FIGZvciAiJS4/Ii4gIFVzZSBpdCBpbiBwbGFjZSBvZgoJVEFSR05BTUUgdG8gaW5pdGlhbGl6ZSBQRVJDRU5UU1swXS4KCk1vbiBPY3QgMTggMDY6NDk6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogVXNlIEFDX0hBVkVfSEVBREVSUyh1bmlzdGQuaCkgaW5zdGVhZCBvZiBBQ19VTklTVERfSC4KCVJlbW92ZSBBQ19VU0c7IGl0IGlzIG5vIGxvbmdlciB1c2VkLgoKCSogZmlsZS5jIChwcmludF9maWxlKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwcmludF9maWxlX2RhdGFfYmFzZS4KCShwcmludF9maWxlX2RhdGFfYmFzZSk6IENhbGwgaXQuCgkqIHJ1bGUuYyAocHJpbnRfcnVsZSk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJcHJpbnRfcnVsZV9kYXRhX2Jhc2UuCgkocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBDYWxsIGl0LgoKVGh1IE9jdCAxNCAxNDo1NDowMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4KCW91dCBvZiBpbnN0YWxsX2RlZmF1bHRfaW1wbGljaXRfcnVsZXMuCgkoaW5zdGFsbF9kZWZhdWx0X2ltcGxpY2l0X3J1bGVzKTogTW92ZSBzdWZmaXggcnVsZSBjb2RlIHRoZXJlLgoJKiBtYWtlLmg6IERlY2xhcmUgaW5zdGFsbF9kZWZhdWx0X3N1ZmZpeF9ydWxlcy4KCSogbWFpbi5jIChtYWluKTogQ2FsbCBpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzIGJlZm9yZSByZWFkaW5nCgltYWtlZmlsZXMuICBNb3ZlIGNvbnZlcnRfdG9fcGF0dGVybiBjYWxsIGJlZm9yZQoJaW5zdGFsbF9kZWZhdWx0X2ltcGxpY2l0X3J1bGVzLgoKCSogam9iLmggKHN0cnVjdCBjaGlsZCk6IE1ha2UgYHBpZCcgbWVtYmVyIHR5cGUgYHBpZF90JyBpbnN0ZWFkIG9mCglgaW50Jy4KCgkqIGNvbXBhdE1ha2VmaWxlIChSQU5MSUIpOiBOZXcgdmFyaWFibGUsIHNldCBieSBjb25maWd1cmUuCgkoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIFJBTkxJQiB2YWx1ZSBkb3duIHRvIHN1Ym1ha2UuCgoJRml4ZXMgZm9yIFNDTyAzLjIgImRldnN5cyA0LjIiIGZyb20gcHNzQHRmbi5jb20gKFBldGVyIFNhbHZpdHRpKS4KCSogbWFrZS5oOiBJbmNsdWRlIDxzeXMvdGltZWIuaD4gYmVmb3JlIDx0aW1lLmg+IGZvciBTQ08gbG9zc2FnZS4KCSogam9iLmMgWyEgZ2V0ZHRhYmxlc2l6ZV0gWyEgSEFWRV9HRVREVEFCTEVTSVpFXTogSWYgTk9GSUxFIGlzIG5vdAoJZGVmaW5lZCBidXQgTk9GSUxFU19NQVggaXMsIGRlZmluZSBpdCB0byBiZSB0aGF0LgoKTW9uIE9jdCAxMSAxOTo0NzozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKG1ha2UtJCh2ZXJzaW9uKS50YXIpOiBEZXBlbmQgb24gYWNjb25maWcuaCwgc28gaXQKCWlzIGRpc3RyaWJ1dGVkLgoKU3VuIE9jdCAgMyAxNToxNTozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogQWRkIGAtRyAkQCcgdG8gU0NDUyBnZXQgY21kcy4KClR1ZSBTZXAgMjggMTQ6MTg6MjAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWRkIF4gdG8gU0hfQ0hBUlM7IGl0CglpcyBhbm90aGVyIHN5bWJvbCBmb3IgfCBpbiBzb21lIHNoZWxscy4KCSogbWFpbi5jIChtYWluKTogQWRkIGl0IHRvIENNRF9ERUZTIHF1b3RpbmcgbGlzdCBhcyB3ZWxsLgoKTW9uIFNlcCAyMCAxODowNToyNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBSZW1vdmUgJz0nIGZyb20KCVNIX0NIQVJTLiAgT25seSBwdW50IG9uICc9JyBpZiBpdCBpcyB1bnF1b3RlZCBpbiBhIHdvcmQgYmVmb3JlIHRoZQoJZmlyc3Qgd29yZCB3aXRob3V0IGFuIHVucXVvdGVkICc9Jy4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFNldCB2X2V4cG9ydCBmb3IgTUFLRUZMQUdTLgoKRnJpIFNlcCAxNyAwMDozNzoxOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBVc2UgLkRFRkFVTFQgY21kcyBmb3IgcGhvbnkgdGFyZ2V0cy4KCgkqIG1ha2UuaCBbX0FJWCAmJiBfUE9TSVhfU09VUkNFXTogRGVmaW5lIFBPU0lYLgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX2NoaWxkX3RhcmdldHMpOiBEb24ndCBkZWxldGUgcGhvbnkgZmlsZXMuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBTZXQgQ09NTUFORFNfUkVDVVJTRSBpbiBGTEFHUyBpZiB3ZQoJc2VlIGEgYCsnIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbW1hbmQgbGluZS4KClRodSBTZXAgIDkgMTc6NTc6MTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC42LgoKV2VkIFNlcCAgOCAyMDoxNDoyMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogRGVmaW5lIE1BS0VGTEFHUyB3aXRoIG9fZmlsZSwgbm90IG9fZW52LgoKTW9uIEF1ZyAzMCAxMjozMTo1OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IEZhdGFsIG9uIGFuIHVudGVybWluYXRlZCByZWZlcmVuY2UuCgpUaHUgQXVnIDE5IDE2OjI3OjUzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRGVmaW5lIG5ldyBvX2RlZmF1bHQKCXZhcmlhYmxlIGBNQUtFX1ZFUlNJT04nIGZyb20gdmVyc2lvbl9zdHJpbmcgYW5kIHJlbW90ZV9kZXNjcmlwdGlvbi4KCgkqIG1ha2UuaCAodmVyc2lvbl9zdHJpbmcsIHJlbW90ZV9kZXNjcmlwdGlvbik6IERlY2xhcmUgdGhlc2UgaGVyZS4KCSogbWFpbi5jOiBEb24ndCBkZWNsYXJlIHZlcnNpb25fc3RyaW5nLgoJKHByaW50X3ZlcnNpb24pOiBEb24ndCBkZWNsYXJlIHJlbW90ZV9kZXNjcmlwdGlvbi4KCldlZCBBdWcgMTggMTU6MDE6MjQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZyZWUgc3BhY2UgcG9pbnRlZCB0byBieSBDT05ESVRJT05BTFMKCWJlZm9yZSByZXN0b3JpbmcgdGhlIG9sZCBwb2ludGVyLgoKTW9uIEF1ZyAxNiAxNzozMzozNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQob2JqcykpOiBEZXBlbmQgb24gY29uZmlnLmguCgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBEZXBlbmQgb24gY29tcGF0TWFrZWZpbGUuCgoJKiBjb25maWd1cmUuaW46IFRvdWNoIHN0YW1wLWNvbmZpZyBhZnRlciBBQ19PVVRQVVQuCgpGcmkgQXVnIDEzIDE2OjA0OjIyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNC4KClRodSBBdWcgMTIgMTc6MTg6NTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaDogSW5jbHVkZSA8Y29uZmlnLmg+IGluc3RlYWQgb2YgImNvbmZpZy5oIi4KCldlZCBBdWcgMTEgMDI6MzU6MjUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IE1ha2UgYWxsIHZhcmlhYmxlcyBpbnRlcm5lZCBmcm9tIEVOVlAgYmUgdl9leHBvcnQuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogSW4gdl9kZWZhdWx0IGNhc2UsIGRvbid0CgljaGVjayBmb3IgYW4gb19maWxlIHZhcmlhYmxlIHRoYXQgYGdldGVudicgZmluZHMuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IE5ldyBsb2NhbCB2YXJpYWJsZSBBTllfTE9DQUw7IHNldCBpdAoJd2hpbGUgc2V0dGluZyBBTllfUkVNT1RFLiAgSWYgIUFOWV9MT0NBTCwgZG9uJ3Qgd2FpdCBmb3IgbG9jYWwga2lkcy4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgZGVjb2RlX2Vudl9zd2l0Y2hlcyBvbiBNRkxBR1MuICBET0MgVEhJUy4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6ICNpZiAwIG91dCBmcmVlaW5nIG9mIEVOVlAgc2luY2UgaXQKCWlzIGVudmlyb24uCgpNb24gQXVnICA5IDE3OjM3OjIwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMy4KCgkqIHJlbW90ZS1zdHViLmMgKHJlbW90ZV9zdGF0dXMpOiBTZXQgZXJybm8gdG8gRUNISUxEIGJlZm9yZSByZXR1cm4uCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogU2NhbiB0aGUgY2hhaW4gZm9yIHJlbW90ZSBjaGlsZHJlbiBhbmQKCW5ldmVyIGNhbGwgcmVtb3RlX3N0YXR1cyBpZiB0aGVyZSBhcmUgbm9uZS4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6ICNpZiAwIG91dCBjYWxsaW5nCgl0YXJnZXRfZW52aXJvbm1lbnQ7IGp1c3Qgc2V0IEVOVlAgdG8gZW52aXJvbiBpbnN0ZWFkLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBDaGVjayBmb3IgbmVnYXRpdmUgcmV0dXJuIGZyb20KCXJlbW90ZV9zdGF0dXMgYW5kIGZhdGFsIGZvciBpdC4KCVdoZW4gYmxvY2tpbmcgbG9jYWwgY2hpbGQgd2FpdCByZXR1cm5zIDAsIHRoZW4gdHJ5IGEgYmxvY2tpbmcgY2FsbAoJdG8gcmVtb3RlX3N0YXR1cy4KClR1ZSBBdWcgIDMgMDA6MTk6MDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IERlbGV0ZSBtYWtlLmluZm8qIGFuZCBtYWtlLmR2aSBoZXJlLgoJKGRpc3RjbGVhbik6IE5vdCBoZXJlLgoKCSogZGVwLmggKFJNXyopOiBVc2UgI2RlZmluZXMgaW5zdGVhZCBvZiBlbnVtIHRvIGF2b2lkIGxvc3NhZ2UgZnJvbQoJY29tcGlsZXJzIHRoYXQgZG9uJ3QgbGlrZSBlbnVtIHZhbHVlcyB1c2VkIGFzIGludHMuCgpNb24gQXVnICAyIDE2OjQ2OjM0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobG9hZGF2Zyk6IEFkZCAkKExPQURMSUJFUykuCgpTdW4gQXVnICAxIDE2OjAxOjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMi4KCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnLCBjaGVjay1sb2FkYXZnKTogTmV3IHRhcmdldHMuCgkoY2hlY2spOiBEZXBlbmQgb24gY2hlY2stbG9hZGF2Zy4KCgkqIGNvbXBhdE1ha2VmaWxlIChnbG9iL2xpYmdsb2IuYSk6IERlcGVuZCBvbiBjb25maWcuaC4KCgkqIG1pc2MuYyAobG9nX2FjY2Vzcyk6IFdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dC4KCkZyaSBKdWwgMzAgMDA6MDc6MDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4xLgoKVGh1IEp1bCAyOSAyMzoyNjo0MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluIChTWVNfU0lHTElTVF9ERUNMQVJFRCk6IEluIHRlc3QgcHJvZ3JhbSBpbmNsdWRlCgk8dW5pc3RkLmg+ICNpZmRlZiBIQVZFX1VOSVNURF9ILgoKCSogY29tcGF0TWFrZWZpbGUgKC5QSE9OWSk6IFB1dCBhZnRlciBgYWxsJyBldCBhbC4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0lSSVhfU1VOLgoKV2VkIEp1bCAyOCAxNzo0MToxMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LgoKTW9uIEp1bCAyNiAxNDozNjo0OSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjguCgpTdW4gSnVsIDI1IDIyOjA5OjA4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuNy4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpL21ha2UuaW5mbyk6IERvbid0IHVzZSAkKGluc3RuYW1lKS4KCVJ1biBpbnN0YWxsLWluZm8gc2NyaXB0IGlmIHByZXNlbnQuCgpGcmkgSnVsIDIzIDE2OjAzOjUwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW1NUQVRfTUFDUk9TX0JST0tFTl06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFt1dHNdLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfU1RBVF9NQUNST1NfQlJPS0VOLgoKV2VkIEp1bCAxNCAxODo0ODoxMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjYuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZWNvZ25pemUgZGlyZWN0aXZlIGAtaW5jbHVkZScsIGxpa2UKCWBpbmNsdWRlJyBidXQgc2V0cyBSTV9ET05UQ0FSRSBmbGFnLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogSWYgRklMRSBpcyBuaWwsIHVzZQoJY3VycmVudF92YXJpYWJsZV9zZXRfbGlzdCBpbiBwbGFjZSBvZiBGSUxFLT52YXJpYWJsZXMuCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6IEdldCBhbiBlbnZpcm9ubWVudCBmb3IKCXRoZSBjaGlsZCBmcm9tIHRhcmdldF9lbnZpcm9ubWVudCBpbnN0ZWFkIG9mIHVzaW5nIGVudmlyb24uCgoJKiBkZXAuaDogRGVjbGFyZSByZWFkX2FsbF9tYWtlZmlsZXMgaGVyZS4KCShSTV8qKTogRGVmaW5lIG5ldyBlbnVtIGNvbnN0YW50cy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2Vjb25kIGFyZyBpcyBGTEFHUyBpbnN0ZWFkIG9mIFRZUEUuCglUcmVhdCBpdCBhcyBhIGJpdCBtYXNrIGNvbnRhaW5pbmcgUk1fKi4KCShyZWFkX2FsbF9tYWtlZmlsZXMpOiBGb3IgZGVmYXVsdCBtYWtlZmlsZXMsIHNldCBELT5jaGFuZ2VkIHRvCglSTV9ET05UQ0FSRSBpbnN0ZWFkIG9mIDEuCgkqIG1haW4uYzogRG9uJ3QgZGVjbGFyZSByZWFkX2FsbF9tYWtlZmlsZXMgaGVyZS4KCShtYWluKTogQ2hlY2sgYGNoYW5nZWQnIG1lbWJlciBvZiByZWFkX21ha2VmaWxlcyBlbHRzIGZvciBSTV8qCglmbGFncyBpbnN0ZWFkIG9mIHNwZWNpZmljIGludGVnZXIgdmFsdWVzLgoKTW9uIEp1bCAxMiAyMjo0MjoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtzZXF1ZW50ICYmIGkzODZdOiAjdW5kZWYgUE9TSVguICBGcm9tIHRyb3N0QGNzZS5vZ2kuZWR1LgoKVGh1IEp1bCAgOCAxOTo1MToyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJZiBFTEVNIGlzIHplcm8gMCwgZnJlZSBQQVRURVJOCglhcyB3ZWxsIGFzIFZQQVRILgoJKGJ1aWxkX3ZwYXRoX2xpc3RzKTogRW1wdHkgYHZwYXRocycgYXJvdW5kIGNvbnN0cnVjdF92cGF0aF9saXN0CgljYWxsIGZvciAkKFZQQVRIKS4gIEV4cGFuZCAkKHN0cmlwICQoVlBBVEgpKSwgbm90IGp1c3QgJChWUEFUSCkuCgoJKiBydWxlLmMgKGNvbnZlcnRfc3VmZml4X3J1bGUpOiBVc2UgYWxsb2NhIGluc3RlYWQgb2YgeG1hbGxvYyBmb3IKCVBFUkNFTlRTLCB3aG9zZSBzdG9yYWdlIGlzIG5vdCBjb25zdW1lZCBieSBjcmVhdGVfcGF0dGVybl9ydWxlLgoKCSogbWFrZS5oIFtfX21pcHMgJiYgX1NZU1RZUEVfU1ZSM106ICN1bmRlZiBQT1NJWC4KCldlZCBKdW4gMzAgMTg6MTE6NDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny41LgoKCSogcnVsZS5jIChtYXhfcGF0dGVybl90YXJnZXRzKTogTmV3IHZhcmlhYmxlLgoJKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogQ29tcHV0ZSBpdHMgdmFsdWUuCgkqIHJ1bGUuaDogRGVjbGFyZSBpdC4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBNYWtlIFRSWVJVTEVTIG1heF90YXJnZXRfcGF0dGVybnMKCXRpbWVzIGJpZ2dlci4gIE1vdmUgYWRkaW5nIG5ldyBUUllSVUxFUyBlbHQgaW5zaWRlIHRoZSBpbm5lcgoJdGFyZ2V0cyBsb29wLCBzbyBlYWNoIG1hdGNoaW5nIHRhcmdldCBnZXRzIGl0cyBvd24gZWx0IGluIE1BVENIRVMKCWFuZCBDSEVDS0VEX0xBU1RTTEFTSC4KCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBJZiBTSUchPTAgc2F5IGBpbnRlcm1lZGlhdGUgZmlsZScKCWluc3RlYWQgb2YganVzdCBgZmlsZScgaW4gZXJyb3IgbXNnLgoKRnJpIEp1biAyNSAxNDo1NToxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3YpOiBUdXJuIG9mZgoJLS13YXJuLXVuZGVmaW5lZC12YXJpYWJsZXMgYXJvdW5kIGV4cGFuc2lvbiBvZiBTSEVMTCBhbmQgSUZTLgoJKiByZWFkLmMgKHRpbGRlX2V4cGFuZCk6IExpa2V3aXNlIGZvciBIT01FLgoJKHJlYWRfYWxsX21ha2VmaWxlcyk6IExpa2V3aXNlIGZvciBNQUtFRklMRVMuCgkqIHZwYXRoLmMgKGJ1aWxkX3ZwYXRoX2xpc3RzKTogTGlrZXdpc2UgZm9yIFZQQVRILgoKCSogbWFpbi5jICh3YXJuX3VuZGVmaW5lZF92YXJpYWJsZXNfZmxhZyk6IE5ldyBmbGFnIHZhcmlhYmxlLgoJKHN3aXRjaGVzKTogQWRkIC0td2Fybi11bmRlZmluZWQtdmFyaWFibGVzLgoJKiBtYWtlLmggKHdhcm5fdW5kZWZpbmVkX3ZhcmlhYmxlc19mbGFnKTogRGVjbGFyZSBpdC4KCSogZXhwYW5kLmMgKHdhcm5fdW5kZWZpbmVkKTogTmV3IGZ1bmN0aW9uLgoJKHJlZmVyZW5jZV92YXJpYWJsZSk6IENhbGwgaXQgaWYgdGhlIHZhcmlhYmxlIGlzIHVuZGVmaW5lZC4KCSh2YXJpYWJsZV9leHBhbmQpOiBJbiBzdWJzdGl0dXRpb24gcmVmLCBjYWxsIHdhcm5fdW5kZWZpbmVkIGlmIHRoZQoJdmFyaWFibGUgaXMgdW5kZWZpbmVkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3BhdHRlcm5fcnVsZXMpOiBBZGQgYCUuYzogJS53ICUuY2gnIGFuZAoJYCUudGV4OiAlLncgJS5jaCcgcnVsZXMuCgkoZGVmYXVsdF9zdWZmaXhfcnVsZXM6IC53LmMsIC53LnRleCk6IFBhc3MgdGhyZWUgYXJnczogJDwgLSAkQC4KCShkZWZhdWx0X3N1ZmZpeGVzKTogQWRkIGAuY2gnLgoKTW9uIEp1biAyMSAxNzo1NTozOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeGVzKTogUmVwbGFjZSBgLmN3ZWInIHdpdGggYC53Jy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IFJlbmFtZSBgLmN3ZWIuYycgYW5kIGAuY3dlYi50ZXgnIHRvIGAudy5jJwoJYW5kIGAudy50ZXgnLgoKRnJpIEp1biAxMSAxNDo0MjowOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQoYmluZGlyKS8kKGluc3RuYW1lKSk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaC4KClRodSBKdW4gMTAgMTg6MTQ6MDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny40LgoKCSogcmVhZC5jIChtdWx0aV9nbG9iKTogRG9uJ3QgZnJlZSBPTEQgYW5kIE9MRC0+bmFtZSBpbiB0aGUKCUZPVU5EIT0wIGZvcmsuICBVc2UgbmV3IGJsb2NrLWxvY2FsIHZhcmlhYmxlIEYgaW5zdGVhZCBvZgoJY2xvYmJlcmluZyBPTEQuCgoJKiBhci5jIChnbG9iX3BhdHRlcm5fcCk6IE5ldyBmdW5jdGlvbiwgc25hcmZlZCBmcm9tIGdsb2IvZ2xvYi5jLgoJKGFyX2dsb2IpOiBDYWxsIGl0OyByZXR1cm4gbmlsIGltbWVkaWF0ZWx5IGlmIE1FTUJFUl9QQVRURVJOCgljb250YWlucyBubyBtZXRhY2hhcmFjdGVycy4KCldlZCBKdW4gIDkgMTY6MjU6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyLmMgKGFyX2dsb2J7X21hdGNoLF9hbHBoYWNvbXBhcmV9KTogTmV3IGZ1bmN0aW9uLgoKCSogZGVwLmggWyEgTk9fQVJDSElWRVNdOiBEZWNsYXJlIGl0LgoJKiByZWFkLmMgKG11bHRpX2dsb2IpIFshIE5PX0FSQ0hJVkVTXTogVXNlIGl0IG9uIGFyY2hpdmUgbWVtYmVyIGVsdHMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGZsYWcgKDEpIHRvIHBhcnNlX2ZpbGVfc2VxLCBub3QgdG8KCW11bHRpX2dsb2IgKHdoaWNoIGRvZXNuJ3QgdGFrZSBhIDNyZCBhcmcpLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogTGlrZXdpc2UuCgkqIGRlZmF1bHQuYyAoc2V0X2RlZmF1bHRfc3VmZml4ZXMpOiBIZXJlIHRvby4KCSogZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpOiBEb24ndCBwYXNzIGdyYXR1aXRvdXMgYXJnIHRvIG11bHRpX2dsb2IuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKSBbISBOT19BUkNISVZFU106IEFkZCBwb3N0LXByb2Nlc3NpbmcKCWxvb3AgdG8gdHJhbnNsYXRlIGFyY2hpdmUgcmVmcyAibGliKGEgYikiIGludG8gImxpYihhKSBsaWIoYikiLgoKTW9uIEp1biAgNyAxOToyNjo1MSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGxkaXJzKTogQWN0dWFsbHkgcGFzcyBkaXJlY3RvcnkgbmFtZXMuCgkoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogVGVzdCBjaGdycCYmY2htb2QgZXhpdCBzdGF0dXMgd2l0aCBgaWYnOwoJaWYgaXQgZmFpbHMsIGVjaG8gYSB3YXJuaW5nIG1zZywgYnV0IGRvbid0IG1ha2UgdGhlIHJ1bGUgZmFpbC4KCgkqIHJlYWQuYyAodGlsZGVfZXhwYW5kKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHRpbGRlX2V4cGFuZC4KCShtdWx0aV9nbG9iKTogQ2FsbCBpdC4KCShjb25zdHJ1Y3RfaW5jbHVkZV9wYXRoKTogRXhwYW5kIH4gaW4gZGlyZWN0b3J5IG5hbWVzLgoJKiBkZXAuaDogRGVjbGFyZSB0aWxkZV9leHBhbmQuCgkqIG1haW4uYyAoZW50ZXJfY29tbWFuZF9saW5lX2ZpbGUpOiBFeHBhbmQgfiBhdCB0aGUgc3RhcnQgb2YgTkFNRS4KCShtYWluKTogRXhwYW5kIH4gaW4gLUMgYXJncy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRXhwYW5kIH4gaW4gRklMRU5BTUUgdW5sZXNzIFRZUEU9PTIuCgpGcmkgSnVuICA0IDEzOjM0OjQ3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBVc2UgeG1hbGxvYyBpbnN0ZWFkIG9mIGFsbG9jYSBmb3IgQVJHUy4KCgkqIG1haW4uYyAobWFpbik6IFB1dCByZXN1bHQgb2YgYWxsb2NhIGluIHRlbXBvcmFyeSB2YXJpYWJsZSB3aXRoCglzaW1wbGUgYXNzaWdubWVudCwgdG8gbWFrZSBTR0kgY29tcGlsZXIgaGFwcHkuCgpUaHUgSnVuICAzIDIwOjE1OjQ2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuMy4KCgkqIG1haW4uYyAobWFpbik6IEJlZm9yZSByZS1leGVjaW5nLCByZW1vdmUgaW50ZXJtZWRpYXRlIGZpbGVzLCBhbmQKCXByaW50IHRoZSBkYXRhIGJhc2UgdW5kZXIgLXAuICBTZXhpZXIgZGVidWdnaW5nIG1lc3NhZ2UuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsbG9jYXRlIGFuIGV4dHJhIGNvcHkgb2YgdGhlIG5hbWUKCW9mIGEgd2lubmluZyBpbnRlcm1lZGlhdGUgZmlsZSB3aGVuIHB1dHRpbmcgaXQgaW4gRk9VTkRfRklMRVMuCgpXZWQgSnVuICAyIDE2OjM4OjA4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGZsYWcgKDEpIHRvIHBhcnNlX2ZpbGVfc2VxLCBub3QgdG8KCW11bHRpX2dsb2IgKHdoaWNoIGRvZXNuJ3QgdGFrZSBhIDNyZCBhcmcpLgoKCSogZGlyLmMgKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogV2hlbiByZWFkaW5nIGRpcmVudHMsIGlnbm9yZQoJY2hhcnMgd2l0aGluIERfTkFNTEVOIHRoYXQgYXJlIE5VTHMuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IERvbid0IHNhdmVzdHJpbmcgQVJHVlswXSB0byBwdXQgaXQKCWludG8gYG90aGVyX2FyZ3MnLgoJRm9yIHN0cmluZyBzd2l0Y2gsIGRvbid0IHNhdmVzdHJpbmcgYG9wdGFyZycuCgkobWFpbik6IERvbid0IGZyZWUgZWx0cyBvZiBtYWtlZmlsZXMtPmxpc3QgdGhhdCBhcmUgIi0iLgoJVXNlIGFsbG9jYSdkIHJhdGhlciB0aGFuIHNhdmVzdHJpbmcnZCBzdG9yYWdlIGZvciBlbHRzIG9mCgltYWtlZmlsZXMtPmxpc3QgdGhhdCBhcmUgdGVtcG9yYXJ5IGZpbGUgbmFtZXMuCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogRG9uJ3QgZnJlZSAqTUFLRUZJTEVTLgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBEb24ndCBzdHJpcCBgLi8ncy4KCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IE5ldyBmdW5jdGlvbi4KCShtYWluKTogVXNlIGl0IGluIHBsYWNlIG9mIGVudGVyX2ZpbGUgZm9yIGNvbW1hbmQtbGluZSBnb2FscyBmcm9tCglvdGhlcl9maWxlcywgYW5kIGZvciBvbGRfZmlsZXMgYW5kIG5ld19maWxlcy4KCk1vbiBNYXkgMzEgMTg6NDE6NDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny4yLgoKCSogY29tcGF0TWFrZWZpbGUgKC5TVUZGSVhFUyk6IEFkZCAuaW5mby4KCSgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBGaW5kIG1ha2UuaW5mbyogaW4gY3dkIGlmIHRoZXJlLAoJZWxzZSBpbiAkc3JjZGlyLiAgVXNlIGJhc2VuYW1lIHRvIHJlbW92ZSBkaXIgbmFtZSBmcm9tIGluc3RhbGxlZCBuYW1lLgoKVGh1IE1heSAyNyAxNzozNTowMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBXaGVuIGludGVybmluZyBGT1VORF9GSUxFUywgdHJ5Cglsb29rdXBfZmlsZSBmaXJzdDsgaWYgZm91bmQsIGZyZWUgdGhlIHN0b3JhZ2UgZm9yIG91ciBjb3B5IG9mIHRoZSBuYW1lLgoKV2VkIE1heSAyNiAxNDozMToyMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjEuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEluIHVzYWdlIG1zZywgd3JpdGUgYC0tc3dpdGNoPUFSRycgb3IKCWAtLXN3aXRjaFs9T1BUQVJHXScgcmF0aGVyIHRoYW4gYC0tc3dpdGNoIEFSRycgb3IgYC0tc3dpdGNoIFtBUkddJy4KCk1vbiBNYXkgMjQgMTY6MTc6MzEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAoY29udmVydF9zdWZmaXhfcnVsZSk6IE5ldyBmdW5jdGlvbi4KCShjb252ZXJ0X3RvX3BhdHRlcm4pOiBVc2UgaXQgaW5zdGVhZCBvZiBkb2luZyBhbGwgdGhlIHdvcmsgaGVyZQoJc2V2ZXJhbCB0aW1lcy4KCUZvciB0YXJnZXQgc3VmZml4IGAuYScsIGdlbmVyYXRlIGJvdGggdGhlIGFyY2hpdmUgbWFnaWMgcnVsZSBhbmQKCXRoZSBub3JtYWwgcnVsZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBSZW1vdmUgc3RhbXAtY29uZmlnLgoKU2F0IE1heSAyMiAxNjoxNToxOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LgoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IERvbid0IHdyaXRlIGV4dHJhIHNwYWNlIGFmdGVyIGBybScuCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaC50eXBlKTogUmVtb3ZlIGB1c2FnZV9hbmRfZXhpdCcuCgkocHJpbnRfdXNhZ2VfZmxhZyk6IE5ldyB2YXJpYWJsZS4KCShzd2l0Y2hlczogLS1oZWxwKTogTWFrZSB0eXBlIGBmbGFnJywgdG8gc2V0IHByaW50X3VzYWdlX2ZsYWcuCgkoaW5pdF9zd2l0Y2hlcyk6IFJlbW92ZSBgdXNhZ2VfYW5kX2V4aXQnIGNhc2UuCgkoZGVjb2RlX3N3aXRjaGVzKTogTGlrZXdpc2UuCgkoZGVjb2RlX3N3aXRjaGVzKTogUHJpbnQgdXNhZ2UgaWYgcHJpbnRfdXNhZ2VfZmxhZyBpcyBzZXQuCglXaGVuIHByaW50aW5nIHVzYWdlLCBkaWUgd2l0aCBzdGF0dXMgb2YgQkFELgoJKG1haW4pOiBEaWUgd2l0aCAwIGlmIHByaW50X3ZlcnNpb25fZmxhZy4KCkZyaSBNYXkgMjEgMTY6MDk6MjggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ni4KCldlZCBNYXkgMTkgMjE6MzA6NDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsZGlycyk6IE5ldyB0YXJnZXQuCgkoaW5zdGFsbCk6IERlcGVuZCBvbiBpdC4KClN1biBNYXkgMTYgMjA6MTU6MDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NS4yLgoKRnJpIE1heSAxNCAxNjo0MDowOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJbiByZW1vdmFsIGxvb3AgZm9yIERJUlBBVEg9PTAsCglzZXQgTEFTVFBBVEggdG8gUEFUSCwgbm90IE5FWFQuCgoJKiBkaXIuYyAocmVhZF9kaXJzdHJlYW0pOiBCcmVhayBvdXQgb2YgbG9vcCBhZnRlciBpbmNyZW1lbnRpbmcKCURTLT5idWNrZXRzIHN1Y2ggdGhhdCBpdCByZWFjaGVzIERJUkZJTEVfQlVDS0VUUzsgYXZvaWQgdHJ5aW5nIHRvCglkZXJlZmVyZW5jZSBEUy0+Y29udGVudHMtPmZpbGVzW0RJUkZJTEVfQlVDS0VUU10uCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDbGVhciBub190YXJnZXRzIGFmdGVyIHJlYWRpbmcgYQoJdGFyZ2V0ZnVsIHJ1bGUgbGluZS4KCgkqIG1haW4uYyAobWFpbik6IElmIHByaW50X3ZlcnNpb25fZmxhZyBpcyBzZXQsIGV4aXQgYWZ0ZXIgcHJpbnRpbmcKCXRoZSB2ZXJzaW9uLgoJKHN3aXRjaGVzKTogQ2hhbmdlIC0tdmVyc2lvbiBkb2NzdHJpbmcgdG8gc2F5IGl0IGV4aXRzLgoKCSogbWFrZS5oIFtidXR0ZXJmbHldOiAjdW5kZWYgUE9TSVguCgpXZWQgTWF5IDEyIDE1OjIwOjIxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY1LjEuCgoJKiBhcnNjYW4uYyAoYXJfc2NhbikgWyEgQUlBTUFHXTogRG9uJ3QgZGVjbGFyZSBMT05HX05BTUUuCglbQUlBTUFHXTogUGFzcyBUUlVOQ0FURSBmbGFnIGFyZyB0byAoKkZVTkNUSU9OKSwgYWx3YXlzIHplcm8uCgoJKiBmdW5jdGlvbi5jIChoYW5kbGVfZnVuY3Rpb24pOiBVc2UgZmF0YWwgaW5zdGVhZCBvZgoJbWFrZWZpbGVfZmF0YWwgd2hlbiByZWFkaW5nX2ZpbGVuYW1lIGlzIG5pbC4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0dFVEdST1VQU19ULgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBVc2UgR0VUR1JPVVBTX1QgaW4gcGxhY2Ugb2YgZ2lkX3QuCgpTdW4gTWF5ICA5IDE1OjQxOjI1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjUuCgpGcmkgTWF5ICA3IDE4OjM0OjU2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChoYW5kbGVfZnVuY3Rpb24pOiBGYXRhbCBmb3IgdW5tYXRjaGVkIHBhcmVuLgoKVGh1IE1heSAgNiAxNjoxMzo0MSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LjMuCgoJKiBjb21tYW5kcy5jIChoYW5kbGluZ19mYXRhbF9zaWduYWwpOiBOZXcgdmFyaWFibGUuCgkoZmF0YWxfZXJyb3Jfc2lnbmFsKTogU2V0IGl0LgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IEF2b2lkIG5vbnJlZW50cmFudCBvcGVyYXRpb25zIGlmIHRoYXQgaXMgc2V0LgoJKiBtYWtlLmg6IERlY2xhcmUgaGFuZGxpbmdfZmF0YWxfc2lnbmFsLgoKCSogZXhwYW5kLmMgKHJlZmVyZW5jZV92YXJpYWJsZSk6IE5ldyBmdW5jdGlvbiwgc25pcHBldCBvZiBjb2RlCglicm9rZW4gb3V0IG9mIHNpbXBsZS1yZWZlcmVuY2UgY2FzZSBvZiB2YXJpYWJsZV9leHBhbmQuCgkodmFyaWFibGVfZXhwYW5kKTogVXNlIGl0IGZvciBzaW1wbGUgcmVmcy4KCSh2YXJpYWJsZV9leHBhbmQpOiBXaGVuIGNoZWNraW5nIGZvciBhIGNvbXB1dGVkIHZhcmlhYmxlIG5hbWUsCglub3RpY2UgYSBjb2xvbiB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgZmluYWwgQ0xPU0VQQVJFTi4gIEV4cGFuZAoJb25seSB1cCB0byB0aGUgY29sb24sIGFuZCB0aGVuIHJlcGxhY2UgdGhlIHBlbmRpbmcgdGV4dCB3aXRoIGEKCWNvcHkgY29udGFpbmluZyB0aGUgZXhwYW5kZWQgbmFtZSBhbmQgZmFsbCB0aHJvdWdoIHRvIHN1YnN0IHJlZgoJaGFuZGxpbmcuCgkodmFyaWFibGVfZXhwYW5kKTogRG9uJ3QgYm90aGVyIGV4cGFuZGluZyB0aGUgbmFtZSBpZiBhIGNvbG9uCglhcHBlYXJzIGJlZm9yZSB0aGUgZmlyc3QgJC4KCShleHBhbmRfYXJndW1lbnQpOiBVc2UgYWxsb2NhIGluc3RlYWQgb2Ygc2F2ZXN0cmluZy4KCSh2YXJpYWJsZV9leHBhbmQpOiBGb3Igc3Vic3QgcmVmLCBleHBhbmQgYm90aCBzaWRlcyBvZiA9IGJlZm9yZQoJcGFzc2luZyB0byBbcGF0XXN1YnN0X2V4cGFuZC4gIFVzZSBmaW5kX3BlcmNlbnQgaW5zdGVhZCBvZiBsaW5kZXgKCXRvIGNoZWNrIHRoZSBsaHMgZm9yIGEgJS4KCldlZCBNYXkgIDUgMTQ6NDU6NTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4yLgoKTW9uIE1heSAgMyAxNzowMDozMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtBSUFNQUddOiBBYm9ydCBpZiBUUlVOQ0FURUQgaXMgbm9uemVyby4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFBhc3MgZXh0cmEgYXJnIG9mIDEgdG8gcGFyc2VfZmlsZV9zZXEsCglub3QgdG8gbXVsdGlfZ2xvYi4KClRodSBBcHIgMjkgMTk6NDc6MzMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4xLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pOiBOZXcgbG9jYWwgZmxhZyB2YXIgTE9OR19OQU1FLiAgU2V0IGl0IHdoZW4KCXdlIHJlYWQgdGhlIG1lbWJlciBuYW1lIGluIGFueSBvZiB0aGUgZmFzaGlvbnMgdGhhdCBhbGxvdyBpdCB0byBiZQoJYXJiaXRyYXJpbHkgbG9uZy4gIFBhc3MgaXRzIG5lZ2F0aW9uIHRvIEZVTkNUSU9OLgoJKGRlc2NyaWJlX21lbWJlcik6IFRha2UgVFJVTkNBVEVEIGZyb20gYXJfc2NhbiBhbmQgcHJpbnQgaXQuCgkoYXJfbmFtZV9lcXVhbCk6IFRha2UgbmV3IGFyZyBUUlVOQ0FURUQ7IGlmIG5vbnplcm8sIGNvbXBhcmUgb25seQoJdGhlIGZpcnN0IHNpemVvZiAoc3RydWN0IGFyX2hkci5hcl9uYW1lKSBjaGFycy4KCShhcl9tZW1iZXJfcG9zKTogVGFrZSBUUlVOQ0FURUQgZnJvbSBhcl9zY2FuLCBwYXNzIHRvIGFyX25hbWVfZXF1YWwuCgkqIGFyLmMgKGFyX21lbWJlcl9kYXRlXzEpOiBMaWtld2lzZS4KCldlZCBBcHIgMjggMjE6MTg6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQmVmb3JlIGNhbGxpbmcgc3RhcnRfam9iX2NvbW1hbmQgdG8gc3RhcnQKCXRoZSBuZXh0IGNvbW1hbmQgbGluZSwgcmVzZXQgQy0+cmVtb3RlIGJ5IGNhbGxpbmcgc3RhcnRfcmVtb3RlX2pvYl9wLgoKTW9uIEFwciAyNiAxNTo1NjoxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIChhcl9zY2FuKTogTmV3IGxvY2FsIHZhciBOQU1FTUFQLgoJSW4gbG9vcCwgcmVuYW1lIE5BTUUgdG8gTkFNRUJVRjsgbmV3IHZhciBOQU1FIGlzIGEgcG9pbnRlcjsgbmV3CglmbGFnIElTX05BTUVNQVAuICBXaGVuIGV4dHJhY3RpbmcgdGhlIG1lbWJlciBuYW1lLCBhbHdheXMgcHV0IGEKCW51bGwgYXQgaXRzIGVuZCBmaXJzdC4gIElmIHRoZSBuYW1lIGlzICIvLyIgb3IgIi9BUkZJTEVOQU1FUyIsIHNldAoJSVNfTkFNRU1BUC4gIElmIHdlIGhhdmUgYWxyZWFkeSByZWFkIGluIE5BTUVNQVAsIGFuZCBOQU1FIGxvb2tzCglsaWtlICIgL04iLCBnZXQgZnVsbCBuYW1lIGZyb20gTkFNRU1BUCtOLgoJRWxzZSBpZiBOQU1FIGxvb2tzIGxpa2UgIiMxL04iLCByZWFkIE4gY2hhcnMgZnJvbSB0aGUKCWVsdCBkYXRhIHRvIGJlIHRoZSBmdWxsIG5hbWUuICBBdCBlbmQgb2YgbG9vcCwgaWYgSVNfTkFNRU1BUCwgcmVhZAoJdGhlIGVsdCdzIGRhdGEgaW50byBhbGxvY2EnZCBOQU1FTUFQLgoJKGFyX25hbWVfZXF1YWwpOiAjaWYgMCB0cnVuY2F0aW5nIGNvZGUuCgoJKiBtYWtlLmg6IERvbid0IGRlY2xhcmUgdmZvcmsgYXQgYWxsLiAgSXQgcmV0dXJucyBpbnQgYW55d2F5LAoJdW5sZXNzIDx1bmlzdGQuaD4gZGVjbGFyZWQgaXQ7IGFuZCB3ZSBjb25mbGljdGVkIHdpdGggc29tZSBzeXN0ZW1zLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogSWYgRkxBR1NUUklOR1sxXSBpcyAnLScsIGRlZmluZQoJTUFLRUZMQUdTIHRvIGFsbCBvZiBGTEFHU1RSSU5HLCBub3QgJkZMQUdTVFJJTkdbMV0uICBEb24ndCB3YW50IHRvCglkZWZpbmUgaXQgdG8gc29tZXRoaW5nIGxpa2UgIi1uby1wcmludC1kaXJlY3RvcnkiLgoJVXNlICVnIGZvcm1hdCBpbnN0ZWFkIG9mICVmIGZvciBmbG9hdGluZy12YWx1ZWQgdGhpbmdzLgoKVGh1IEFwciAyMiAxODo0MDo1OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKE1ha2VmaWxlLmluKTogVXNlIGEgc3Vic3RpdHV0aW9uIHJlZiBvbiBub2xpYi1kZXBzCgl0byBjaGFuZ2UgcmVtb3RlLSUuZGVwIHRvIHJlbW90ZS1zdHViLmRlcC4KCldlZCBBcHIgMjEgMTU6MTc6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4KCkZyaSBBcHIgMTYgMTQ6MjI6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsKTogUmVtb3ZlIC0gcHJlZml4IGZyb20gY2hncnArY2htb2QuCgoJKiBWZXJzaW9uIDMuNjMuOC4KClRodSBBcHIgMTUgMTg6MjQ6MDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFjY29uZmlnLmg6IE5ldyBmaWxlOyBjb250YWlucyAiI3VuZGVmIFNDQ1NfR0VUIiBmb3IgYXV0b2hlYWRlci4KCSogY29uZmlndXJlLmluOiBJZiAvdXNyL3NjY3MvZ2V0IGV4aXN0cywgZGVmaW5lIFNDQ1NfR0VUIHRvIHRoYXQsCgllbHNlIHRvICJnZXQiLgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKTogU2V0IEdFVCB0byBtYWNybyBTQ0NTX0dFVC4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBUYWtlIGV4dHJhIGFyZyBTVFJJUDsgc3RyaXAgYC4vJyBvbmx5CglpZiBub256ZXJvLiAgSSBob3BlIHRoaXMgaXMgdGhlIGxhc3QgdGltZSB0aGlzIGFyZ3VtZW50IGlzIGFkZGVkCglvciByZW1vdmVkLgoJKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIGluY2x1ZGUgZmlsZSBuYW1lcy4KCVBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgdGFyZ2V0IGZpbGUgbmFtZXMuCglQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIHN0YXRpYyBwYXR0ZXJuIHRhcmdldCBwYXR0ZXJuIG5hbWVzLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogUGFzcyBpdCAxIHdoZW4gcGFyc2luZyBydWxlIGRlcHMuCgkqIGRlZmF1bHQuYyAoc2V0X2RlZmF1bHRfc3VmZml4ZXMpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nCglkZWZhdWx0X3N1ZmZpeGVzLgoJKiBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYik6IFBhc3MgaXQgMCBoZXJlLgoKV2VkIEFwciAxNCAxMTozMjowNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChsb2dfYWNjZXNzKTogTmV3IGZ1bmN0aW9uLgoJKHtpbml0LHVzZXIsbWFrZSxjaGlsZH1fYWNjZXNzKTogQ2FsbCBpdC4KCShjaGlsZF9hY2Nlc3MpOiBBYm9ydCBpZiAhYWNjZXNzX2luaXRlZC4KCgkqIG1haW4uYyAoc3dpdGNoZXM6IC0tbm8tcHJpbnQtZGlyZWN0b3J5KTogVXNlIDEgaW5zdGVhZCBvZiAtMSBmb3IKCXNpbmdsZS1sZXR0ZXIgb3B0aW9uLgoJKGluaXRfc3dpdGNoZXMsIGRlY29kZV9zd2l0Y2hlcywgZGVmaW5lX21ha2VmbGFncyk6IEFuIG9wdGlvbiB3aXRoCglubyBzaW5nbGUtbGV0dGVyIHZlcnNpb24gaXMgbm8gbG9uZ2VyIGluZGljYXRlZCBieSBhIHZhbHVlIG9mIC0xOwoJaW5zdGVhZCBhIHZhbHVlIHRoYXQgaXMgIWlzYWxudW0uCgkoaW5pdF9zd2l0Y2hlcyk6IERvbid0IHB1dCBzdWNoIHN3aXRjaGVzIGludG8gdGhlIHN0cmluZywgb25seQoJaW50byB0aGUgbG9uZ19vcHRpb24gdGFibGUuCgoJKiBtYWtlLmggWyFOU0lHXSBbIV9OU0lHXTogI2RlZmluZSBOU0lHIDMyLgoKCSogam9iLmMgW0hBVkVfV0FJVFBJRF06IFJlbW92ZSAjdW5kZWYgSEFWRV9VTklPTl9XQUlULiAgQUlYJ3MKCWJzZGNjIGRlZmluZWQgV0lGKiB0byB1c2UgdW5pb24gd2FpdC4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogQ2hhbmdlIG1lbWJlciBgYycgdG8gdHlwZSBpbnQuCgkoc3dpdGNoZXMpOiBNYWtlIGNvbnN0LgoJKGRlY29kZV9zd2l0Y2hlcyk6IFVzZSBgY29uc3Qgc3RydWN0IGNvbW1hbmRfc3dpdGNoIConLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBMaWtld2lzZS4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBBZGQgYC1vICRAJyB0byBtYWtlaW5mbyBydWxlcy4KCk1vbiBBcHIgMTIgMTI6MzA6MDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My43LgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0hFQURFUlMpOiBDaGVjayBmb3Igc3RyaW5nLmggYW5kIG1lbW9yeS5oLgoJUmVtb3ZlZCBBQ19NRU1PUllfSC4KCSogbWFrZS5oIFtVU0csIE5lWFRdOiBEb24ndCB0ZXN0IHRoZXNlLgoJW0hBVkVfU1RSSU5HX0hdOiBUZXN0IHRoaXMgdG8gaW5jbHVkZSBzdHJpbmcuaCBhbmQgZGVmaW5lIEFOU0lfU1RSSU5HLgoJW0hBVkVfTUVNT1JZX0hdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBORUVEX01FTU9SWV9ILgoJWyEgQU5TSV9TVFJJTkddOiBQdXQgZGVjbHMgb2YgYmNvcHkgZXQgYWwgaGVyZS4KCVtzcGFyY106IERvbid0IHRlc3QgdGhpcyBmb3IgYWxsb2NhLmg7IEhBVkVfQUxMT0NBX0ggaXMgc3VmZmljaWVudC4KCVtIQVZFX1NJR1NFVE1BU0tdOiBUZXN0IHRoaXMgcmF0aGVyIHRoYW4gVVNHLgoJW19fR05VX0xJQlJBUllfXyB8fCBQT1NJWF06IERvbid0ICNpbmNsdWRlIDx1bmlzdGQuaD4gYWdhaW4uCgkqIG1haW4uYyAobWFpbik6IEhhbmRsZSBTSUdDSExEIGlmIGRlZmluZWQsIGFuZCBTSUdDTEQgaWYgZGVmaW5lZC4KCUl0IGRvZXNuJ3QgaHVydCB0byBkbyBib3RoIGlmIHRoZXkgYXJlIGJvdGggZGVmaW5lZCwgYW5kIHRlc3RpbmcKCVVTRyBpcyB1c2VsZXNzLgoJKiBkaXIuYzogUmF0aW9uYWxpemUgZGlyZWN0b3J5IGhlYWRlciBjb25kaXRpb25hbHMuCgkqIGFyc2Nhbi5jIFtIQVZFX0ZDTlRMX0hdOiBUZXN0IHRoaXMgcmF0aGVyIHRoYW4gVVNHIHx8IFBPU0lYLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeGVzKTogQWRkIGAudHhpbmZvJy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IEFkZCBgLnR4aW5mby5pbmZvJyBhbmQgYC50eGluZm8uZHZpJyBydWxlcy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmVwbGFjZSBSRUNVUlNJVkUgZmxhZwoJd2l0aCBlbnVtIEZMQVZPUiwgd2hpY2ggY2FuIGJlIHNpbXBsZSwgcmVjdXJzaXZlLCBvciBhcHBlbmQuCglSZWNvZ25pemUgKz0gYXMgYXBwZW5kIGZsYXZvci4gIFNldCBuZXcgdmFyaWFibGUgVkFMVUUgaW4gYSBzd2l0Y2gKCW9uIEZMQVZPUi4gIEZvciBhcHBlbmQgZmxhdm9yLCBwcmVwZW5kIHRoZSB2YXJpYWJsZSdzIG9sZCB2YWx1ZS4KCUlmIHRoZSB2YXJpYWJsZSB3YXMgcHJldmlvdXNseSBkZWZpbmVkIHJlY3Vyc2l2ZSwgc2V0IEZMQVZPUiB0bwoJcmVjdXJzaXZlOyBpZiBpdCB3YXMgZGVmaW5lZCBzaW1wbGUsIGV4cGFuZCB0aGUgbmV3IHZhbHVlIGJlZm9yZQoJYXBwZW5kaW5nIGl0IHRvIHRoZSBvbGQgdmFsdWUuICBQYXNzIFJFQ1VSU0lWRSBmbGFnIHRvCglkZWZpbmVfdmFyaWFibGUgaWZmIEZMQVZPUiA9PSByZWN1cnNpdmUuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFVzZSBhbGxvY2EgYW5kIGJjb3B5IGZvcgoJTkFNRSwgaW5zdGVhZCBvZiBzYXZlc3RyaW5nLiAgTWlnaHQgYXMgd2VsbCB1c2Ugc3RhY2sgc3RvcmFnZQoJc2luY2Ugd2UgZnJlZSBpdCBpbW1lZGlhdGVseSBhbnl3YXkuCgpUaHUgQXByICA4IDE4OjA0OjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2JzKTogTW92ZSBkZWNsIG9mIEpPQiBvdXRzaWRlIG9mIGxvb3AuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBSZW5hbWUgYHN0cnVjdCBmbGFnJyBtZW1iZXIgYHN3aXRjaCcKCXRvIGBjcycsIHdoaWNoIGlzIG5vdCBhIHJlc2VydmVkIHdvcmQuCgpXZWQgQXByICA3IDE1OjMwOjUxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobmV3X2pvYik6IENhbGwgc3RhcnRfd2FpdGluZ19qb2JzIGZpcnN0IHRoaW5nLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogQ2hhbmdlZCByZXR1cm4gdHlwZSBmcm9tIHZvaWQgdG8gaW50LgoJUmV0dXJuIDAgd2hlbiBwdXR0aW5nIHRoZSBjaGlsZCBvbiB0aGUgd2FpdGluZ19qb2JzIGNoYWluLgoJKHN0YXJ0X3dhaXRpbmdfam9icyk6IERvbid0IGNoZWNrIGxvYWQgYW5kIGpvYl9zbG90cyBoZXJlLgoJQWx3YXlzIHRha2UgYSBqb2Igb2ZmIHRoZSBjaGFpbiBhbmQgY2FsbCBzdGFydF93YWl0aW5nX2pvYiBvbiBpdDsKCWdpdmUgdXAgYW5kIHJldHVybiB3aGVuIHN0YXJ0X3dhaXRpbmdfam9iIHJldHVybnMgemVyby4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFnczogc3RydWN0IGZsYWcpOiBDaGFuZ2UgbWVtYmVyIGBjaGFyIGMnIHRvCglgc3RydWN0IGNvbW1hbmRfc3dpdGNoICpzd2l0Y2gnLgoJKEFERF9GTEFHKTogU2V0IHRoYXQgdG8gQ1MgaW5zdGVhZCBvZiBDUy0+Yy4KCUlmIENTLT5jIGlzIC0xLCBpbmNyZW1lbnQgRkxBR1NMRU4gZm9yIHRoZSBsb25nIG5hbWUuCglXaGVuIHdyaXRpbmcgb3V0IEZMQUdTLCBoYW5kbGUgRkxBR1MtPnN3aXRjaC0+YyA9PSAtMSBhbmQgd3JpdGUKCXRoZSBsb25nIG5hbWUgaW5zdGVhZC4KCgkqIGNvbXBhdE1ha2VmaWxlIChzdGFtcC1jb25maWcpOiBOZXcgdGFyZ2V0IG9mIG9sZCBjb25maWcuaCBydWxlLgoJVG91Y2ggc3RhbXAtY29uZmlnIGFmdGVyIHJ1bm5pbmcgY29uZmlnLnN0YXR1cy4KCShjb25maWcuaCk6IEp1c3QgZGVwZW5kIG9uIHN0YW1wLWNvbmZpZywgYW5kIGhhdmUgZW1wdHkgY29tbWFuZHMuCgpNb24gQXByICA1IDIwOjE0OjAyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyBbSEFWRV9XQUlUUElEXTogI3VuZGVmIEhBVkVfVU5JT05fV0FJVC4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfSEFWRV9GVU5DUyk6IENoZWNrIGZvciBwc2lnbmFsLgoKRnJpIEFwciAgMiAxNzoxNTo0NiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb25nX29wdGlvbl9hbGlhc2VzKTogUmVtb3ZlICJuZXciOyBpdCBpcyBhbHJlYWR5IGFuCgl1bmFtYmlndW91cyBwcmVmaXggb2YgIm5ldy1maWxlIi4KClN1biBNYXIgMjggMTY6NTc6MTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNi4KCldlZCBNYXIgMjQgMTQ6MjY6MTkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBXaGVuIGFkZGluZyB0aGUKCW5hbWUtd2l0aGluLWRpcmVjdG9yeSBhdCB0aGUgZW5kIG9mIE5BTUUsIGFuZCB3ZSBkb24ndCBhZGQgYQoJc2xhc2gsIGRvbid0IGNvcHkgRklMRU5BTUUgaW4gb25lIGNoYXIgdG9vIGZhciBpbnRvIE5BTUUuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEZpbmQgZGVmYXVsdF9zaGVsbCdzCglsZW5ndGggd2l0aCBzdHJsZW4sIG5vdCBudW1lcm9sb2d5LgoKV2VkIE1hciAxNyAyMDowMjoyNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQWRkIHRoZSBlbHRzIG9mIGEgc3RyaW5nIG9wdGlvbiBpbgoJcmV2ZXJzZSBvcmRlciwgc28gdGhleSBjb21lIG91dCByaWdodCB3aGVuIHJldmVyc2VkIGFnYWluLgoKRnJpIE1hciAxMiAxNTozODo0NSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlLmluZm8pOiBVc2UgYC1vIG1ha2UuaW5mbycuCgpUaHUgTWFyIDExIDE0OjEzOjAwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKFJFTU9URSk6IFNldCB0byBAUkVNT1RFQDsgY2hhbmdlIGNvbW1lbnRzIHRvCglyZWZsZWN0IG5ldyB1c2UuCgkob2Jqcyk6IFJlcGxhY2UgcmVtb3RlLm8gd2l0aCByZW1vdGUtJChSRU1PVEUpLm8uCgkoc3Jjcyk6IFJlcGxhY2UgcmVtb3RlLmMgd2l0aCByZW1vdGUtJChSRU1PVEUpLmMuCgkocmVtb3RlLm8pOiBSdWxlIHJlbW92ZWQuCgoJKiBjb25maWd1cmUuaW4gKFJFTU9URSk6IFN1YnN0IHRoaXMgaW4gTWFrZWZpbGUgZXQgYWw7IGRlZmF1bHQgInN0dWIiLgoJVXNlIEFDX1dJVEggdG8gZ3JvayAtLXdpdGgtY3VzdG9tcyBhcmcgdG8gc2V0IFJFTU9URT1jc3Rtcy4KCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogRmlsdGVyIG91dCByZW1vdGUtJSBmcm9tIG9ianMgbGlzdC4KCSogYnVpbGQudGVtcGxhdGUgKFJFTU9URSk6IE5ldyB2YXI7IHNldCB0byBAUkVNT1RFQC4KCShvYmpzKTogQWRkIHJlbW90ZS0ke1JFTU9URX0uby4KCldlZCBNYXIgMTAgMTU6MTI6MjQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogRml4ICJkZXBlbmRlbnQiLT4iZGVwZW5kZW5jeSIgaW4KCSJSZWplY3RpbmcgaW1wb3NzaWJsZSIgLWQgbXNnLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBOZXcgbG9jYWwgdmFycyB7T0xELE5FV31CVUNLRVQuICBTdG9yZQoJbW9kJ2QgdmFsdWVzIHRoZXJlOyBuZXZlciBtb2Qge09MRCxORVd9SEFTSC4KCk1vbiBNYXIgIDggMTM6MzI6NDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyBbZXRhMTBdOiBJbmNsdWRlIDxmY250bC5oPiBpbnN0ZWFkIG9mIDxzeXMvZmlsZS5oPi4KCgkqIGNvbXBhdE1ha2VmaWxlIChWUEFUSCk6IFNldCB0aGlzIHRvIEBzcmNkaXJALgoJKHNyY2Rpcik6IFNldCB0aGlzIHRvICQoVlBBVEgpLgoKCSogbWFpbi5jIChtYWluKTogTmV3IGxvY2FsIHZhciBESVJFQ1RPUllfQkVGT1JFX0NIRElSLiAgU2F2ZSBpbiBpdAoJYSBjb3B5IG9mIENVUlJFTlRfRElSRUNUT1JZIGFmdGVyIHRoZSBmaXJzdCBnZXRjd2QuICBVc2UgaXQKCWluc3RlYWQgb2YgQ1VSUkVOVF9ESVJFQ1RPUlkgd2hlbiBjaGRpcidpbmcgYmFjayBiZWZvcmUgcmUtZXhlY2luZy4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFBhc3MgbWlzc2luZyBTRUFSQ0ggYXJnIHRvIGZfbXRpbWUuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZW1vdmUgZXh0cmFuZW91cyBhcmcgdG8gcGFyc2VfZmlsZV9zZXEuCgpNb24gRmViIDIyIDE0OjE5OjM4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogVXNlICwgaW5zdGVhZCBvZiAvCglhcyB0aGUgc2VkIGRlbGltaXRlciBjaGFyLgoKU3VuIEZlYiAyMSAxNDoxMTowNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjQuCgoJKiBydWxlLmggKHN0cnVjdCBydWxlKTogUmVtb3ZlZCBgc3ViZGlyJyBtZW1iZXIuCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IE5vIG5lZWQgdG8gY2xlYXIgaXQuCgkoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBTZXQgdGhlIGBjaGFuZ2VkJyBmbGFnIGluIGVhY2ggZGVwCgl0aGF0IHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGRpcmVjdG9yeS4gIE5vIGxvbmdlciBzZXQgcnVsZS1nbG9iYWwKCWBzdWJkaXInIGZsYWcgd2l0aCB0aGF0IGluZm9ybWF0aW9uLgoJKHByaW50X3J1bGVfZGF0YV9iYXNlKTogRG9uJ3QgcmVjb3JkIGluZm8gb24gYHN1YmRpcicgZmxhZ3MuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IENoZWNrIHRoZSBERVAtPmNoYW5nZWQgZmxhZyByYXRoZXIKCXRoYW4gdGhlIChub3cgZ29uZSkgUlVMRS0+c3ViZGlyIGZsYWcuICBBbHNvIHRlc3QgQ0hFQ0tfTEFTVFNMQVNIOwoJaWYgaXQgaXMgc2V0LCB0aGUgZmlsZSBtaWdodCBleGlzdCBldmVuIHRob3VnaCB0aGUgREVQLT5jaGFuZ2VkCglmbGFnIGlzIHNldC4KCgkqIHJ1bGUuYyAoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBQYXNzICIiLCBub3QgIi4iLCBhcyBmaWxlCgluYW1lIGFyZyB0byBkaXJfZmlsZV9leGlzdHNfcCB0byBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIGRpcmVjdG9yeS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogSW5zaWRlIGRlcC1maW5kaW5nIGxvb3AsIHNldAoJQ0hFQ0tfTEFTVFNMQVNIIGZyb20gdGhlIHZhbHVlIHJlY29yZGVkIGluIENIRUNLRURfTEFTVFNMQVNIW0ldLAoJcmF0aGVyIHRoYW4gY29tcHV0aW5nIGl0IGFuZXcuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBNdXN0IGFsbG9jYSBzcGFjZSBmb3IgUEVSQ0VOVAoJYW5kIGNvcHkgaXQsIHRvIGF2b2lkIGxlYXZpbmcgdGhlIHRyYWlsaW5nIGApJyBpbiB0aGUgdmFsdWUuCgoJKiBtaXNjLmMgKHJlbW92ZV9jb21tZW50cyk6IEZpeGVkIGJhY2tzbGFzaC1jaGVja2luZyBsb29wCgljb25kaXRpb24gdG8gYWxsb3cgaXQgdG8gbG9vayBhdCB0aGUgZmlyc3QgY2hhciBvbiB0aGUgbGluZS4KCVAyID49IExJTkUsIG5vdCBQMiA+IExJTkUuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogQmVmb3JlIG1vdmluZyAkQC5uZXcgdG8KCSRALCBybSAkQC5vbGQgYW5kIG12ICRAIHRvICRALm9sZC4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVGFrZSBuZXcgYXJncyBGSUxFTkFNRSBhbmQKCUxJTkVOTy4gIEZhdGFsIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGlzIGVtcHR5LgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2UgY2FsbGVycy4KCSogbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBjb21wYXRNYWtlZmlsZSAoZ3JvdXApOiBEZWZpbmUgdG8gQEtNRU1fR1JPVVBALCBhdXRvY29uZiBtYWdpYwoJdGhhdCBjb25maWd1cmUgd2lsbCByZXBsYWNlIHdpdGggdGhlIGdyb3VwIG93bmluZyAvZGV2L2ttZW0uCgpNb24gRmViICA4IDE0OjI2OjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAodnBhdGhfc2VhcmNoKTogVGFrZSBzZWNvbmQgYXJnIE1USU1FX1BUUiwgcGFzcyB0aHJ1IHRvCglzZWxlY3RpdmVfdnBhdGhfc2VhcmNoLgoJKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBUYWtlIHNlY29uZCBhcmcgTVRJTUVfUFRSLgoJSWYgdGhlIGRpciBjYWNoZSB0aGlua3MgYSBmaWxlIGV4aXN0cywgc3RhdCBpdCB0byBtYWtlIHN1cmUsIGFuZAoJcHV0IHRoZSBtb2R0aW1lIGluICpNVElNRV9QVFIuCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFRha2Ugc2Vjb25kIGFyZyBNVElNRV9QVFIuCglXaGVuIHdlIGZpbmQgYSBtYXRjaCwgcmVjb3JkIGl0cyBtdGltZSB0aGVyZS4KCVBhc3MgTVRJTUVfUFRSIHRocm91Z2ggdG8gdnBhdGhfc2VhcmNoIHRvIGRvIHNhbWUuCgkoZl9tdGltZSk6IFBhc3MgJk1USU1FIGFzIG5ldyAybmQgYXJnIHRvIHt2cGF0aCxsaWJyYXJ5fV9zZWFyY2g7CglzdG9yZSBpdCBpbiBGSUxFLT5sYXN0X210aW1lIGlmIHNldCBub256ZXJvLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFBhc3MgbmlsIDJuZCBhcmcgdG8gdnBhdGhfc2VhcmNoLgoKCSogY29tcGF0TWFrZWZpbGUgKHJlbW90ZS5vKTogUHJlcGVuZCBgJChzcmNkaXIpLycgdG8gYHJlbW90ZS0qLmMnLAoJc28gZ2xvYmJpbmcgbG9va3Mgc29tZXdoZXJlIGl0IHdpbGwgZmluZCB0aGluZ3MuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogSW5zdGFsbCBgbWFrZS5pbmZvKicKCW5vdCBgJChzcmNkaXIpL21ha2UuaW5mbyonOyBubyBuZWVkIHRvIHVzZSBiYXNlbmFtZS4KCkZyaSBGZWIgIDUgMTI6NTI6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuMy4KCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsKTogQWRkIG1pc3NpbmcgO1xzLgoKCU1ha2UgLSwgQCwgYW5kICsgcHJlZml4ZXMgb24gYSBwcmUtZXhwYW5kZWQgY29tbWFuZCBsaW5lIGFmZmVjdAoJYWxsIGxpbmVzIGluIHRoZSBleHBhbnNpb24sIG5vdCBqdXN0IHRoZSBmaXJzdC4KCSogY29tbWFuZHMuaCAoc3RydWN0IGNvbW1hbmRzKTogUmVwbGFjZSBgbGluZXNfcmVjdXJzZScgbWVtYmVyCgl3aXRoIGBsaW5lc19mbGFncycuCgkoQ09NTUFORFNfe1JFQ1VSU0UsU0lMRU5ULE5PRVJST1J9KTogTmV3IG1hY3JvcywgYml0cyB0byBzZXQgaW4KCXRoYXQgZmxhZyBieXRlLgoJKiBjb21tYW5kcy5jIChjaG9wX2NvbW1hbmRzKTogU2V0IGBsaW5lc19mbGFncycgaW5zdGVhZCBvZgoJYGxpbmVzX3JlY3Vyc2UnLiAgUmVjb3JkIG5vdCBvbmx5ICsgYnV0IGFsc28gQCBhbmQgLSBwcmVmaXhlcy4KCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogQ2hlY2sgdGhlIENPTU1BTkRTX1JFQ1VSU0UgYml0CglpbiBGSUxFLT5jbWRzLT5saW5lc19mbGFncywgcmF0aGVyIHRoYW4gRklMRS0+Y21kcy0+bGluZXNfcmVjdXJzZS4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVwbGFjZWQgUkVDVVJTSVZFIGFuZCBOT1BSSU5UIGxvY2FsCgl2YXIgd2l0aCBGTEFHUzsgaW5pdGlhbGl6ZSBpdCB0byB0aGUgYXBwcm9wcmlhdGUgYGxpbmVzX2ZsYWdzJyBieXRlLgoJU2V0IENISUxELT5ub2Vycm9yIGlmIHRoZSBDT01NQU5EU19OT0VSUk9SIGJpdCBpcyBzZXQgaW4gRkxBR1MuCglTZXQgdGhlIENPTU1BTkRTX1NJTEVOVCBiaXQgaW4gRkxBR1MgZm9yIGEgQCBwcmVmaXguCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBTZXQgRy0+ZmlsZSB0byBpdHMgcHJldiBhZnRlcgoJY2hlY2tpbmcgZm9yIEcgYmVpbmcgZmluaXNoZWQsIHNpbmNlIHRoYXQgY2hlY2sgbmVlZHMgdG8gZXhhbWluZQoJRy0+ZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjaykgW0hBVkVfV0FJVFBJRF06IFRyeSB1c2luZwoJd2FpdHBpZCB3aXRoIGEgYHVuaW9uIHdhaXQnIFNUQVRVUyBhcmcuICBJZiB3YWl0cGlkIGFuZCB1bmlvbiB3YWl0Cglkb24ndCB3b3JrIHRvZ2V0aGVyLCB3ZSBzaG91bGQgbm90IHVzZSB1bmlvbiB3YWl0LgoKCSogVmVyc2lvbiAzLjYzLjIuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBXaGVuIEctPmZpbGUtPnVwZGF0ZWQsIG1vdmUKCUctPmZpbGUgdG8gaXRzIHByZXYuICBXZSBhcmVuJ3QgZmluaXNoZWQgdW50aWwgRy0+ZmlsZSBpcyBuaWwuCgpUaHUgRmViICA0IDEyOjUzOjA0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKHN0YXJ0aW5nX2RpcmVjdG9yeSk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkobWFpbik6IFNldCBpdCB0byBjd2QgYWZ0ZXIgZG9pbmcgLUNzLgoJKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IFVzZSBpdCwgcmF0aGVyIHRoYW4gY29tcHV0aW5nIGVhY2ggdGltZS4KCSogbWFrZS5oOiBEZWNsYXJlIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKFNIRUxMKTogRGVmaW5lIHRvIC9iaW4vc2ggZm9yIGxvc2luZyBVbml4IG1ha2VzLgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogQWxsb2NhdGUgKDEgKyBMRU4gKyAxKSB3b3JkcyBmb3IKCUFSR1YsIHJhdGhlciB0aGFuIExFTiB3b3JkcyBwbHVzIG9uZSBieXRlLgoKV2VkIEZlYiAgMyAxODoxMzo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBQdXQgLSBiZWZvcmUKCWluc3RhbGxfc2V0Z2lkIGNvbW1hbmQgbGluZSwgc28gaXRzIGZhaWx1cmUgd29uJ3QgYmUgYW4gZXJyb3IuCgkoaW5mb2Rpcik6IE5ldyB2YXJpYWJsZS4KCShpbnN0YWxsKTogRGVwZW5kIG9uICQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mby4KCSgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBOZXcgdGFyZ2V0LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgRklMRU5BTUVTIGlzIG5pbCB3aGVuIHdlIHNlZSBhIGxpbmUKCXN0YXJ0aW5nIHdpdGggYSB0YWIsIGRvbid0IHRyZWF0IGl0IGFzIGEgY29tbWFuZC4gIEp1c3QgZmFsbAoJdGhyb3VnaCwgcmF0aGVyIHRoYW4gZ2l2aW5nIGFuIGVycm9yLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgdGhlIE5PX1RBUkdFVFMgZmxhZyBpcyBzZXQgd2hlbiB3ZSBzZWUgYQoJY29tbWFuZCBsaW5lLCBkb24ndCBjbGVhciBpdCBiZWZvcmUgY29udGludWluZy4gIFdlIHdhbnQKCXN1YnNlcXVlbnQgY29tbWFuZCBsaW5lcyB0byBiZSBpZ25vcmVkIGFzIHdlbGwuCgoJKiBqb2IuYyAobmV3X2pvYik6IEJlZm9yZSBleHBhbmRpbmcgZWFjaCBjb21tYW5kIGxpbmUsIGNvbGxhcHNlCgliYWNrc2xhc2gtbmV3bGluZSBjb21iaW5hdGlvbnMgdGhhdCBhcmUgaW5zaWRlIHZhciBvciBmbiByZWZlcmVuY2VzLgoKTW9uIEZlYiAgMSAxNjowMDoxMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChleGVjX3ByZWZpeCk6IERlZmF1bHQgdG8gJChwcmVmaXgpLCBub3QgL3Vzci9sb2NhbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlLmluZm8pOiBQYXNzIC1JJChzcmNkaXIpIHRvIG1ha2VpbmZvLgoKCSogam9iLmMgW1BPU0lYXSAodW5ibG9ja19zaWdzKTogTWFkZSBnbG9iYWwuCglbIVBPU0lYXSAodW5ibG9ja19zaWdzKTogTW92ZSBkZWZucyB0byBqb2IuaC4KCSogam9iLmggW1BPU0lYXSAodW5ibG9ja19zaWdzKTogRGVjbGFyZS4KClN1biBKYW4gMzEgMTk6MTE6MDUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJbiB2cGF0aCBwYXJzaW5nLCBhZnRlciBmaW5kaW5nIHRoZQoJcGF0dGVybiB0b2tlbiwgdGFrZSBlbnRpcmUgcmVzdCBvZiBsaW5lIGFzIHRoZSBzZWFyY2ggcGF0aCwgbm90CglqdXN0IHRoZSBuZXh0IHRva2VuLgoKCSogY29tcGF0TWFrZWZpbGUgKHJlbW90ZS5vKTogRGVwZW5kIG9uIHJlbW90ZS0qLmMuCgpUaHUgSmFuIDI4IDE2OjQwOjI5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBEb24ndCBkZWZpbmUgYW55IEYgb3IgRCB2ZXJzaW9ucy4KCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgdGhlbSBoZXJlIGFzCglyZWN1cnNpdmVseS1leHBhbmRlZCB2YXJpYWJsZXMgdGhhdCB1c2UgdGhlIGRpciBhbmQgbm90ZGlyIGZ1bmNzLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogSW4gdl9kZWZhdWx0IGNhc2UsIGRvbid0IGV4cG9ydAoJb19kZWZhdWx0IG9yIG9fYXV0b21hdGljIHZhcmlhYmxlcy4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjayk6IFJlbW92ZSBgIGFuZCAnIGluc2lkZSBDIGNvZGU7Cgl0aGV5IGNvbmZ1c2UgdGhlIHNoZWxsIHNjcmlwdC4KCk1vbiBKYW4gMjUgMTM6MTA6NDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My4xLgoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBXaGVuIHNraXBwaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZwoJb2YgYW4gZWx0IHRoYXQgaXMgIi4iLCBkb24ndCBhbHNvIHNraXAgdGhlIGNvZGUgdGhhdCBwdXNoZXMgUCBwYXN0Cgl0aGUgbmV4dCBzZXBhcmF0b3IuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGlzdGNsZWFuKTogRG9uJ3QgcmVtb3ZlIG1ha2UtKi4KCgkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9VTklPTl9XQUlUKTogVHJ5IHRvIHVzZSBXRVhJVFNUQVRVUyBpZiBpdCdzCglkZWZpbmVkLiAgSWYgb25lIGNhbm5vdCB1c2UgV0VYSVRTVEFUVVMgd2l0aCBhIGB1bmlvbiB3YWl0JwoJYXJndW1lbnQsIHdlIGRvbid0IHdhbnQgdG8gYmVsaWV2ZSB0aGUgc3lzdGVtIGhhcyBgdW5pb24gd2FpdCcgYXQgYWxsLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogRG8gbm90aGluZyB0byBwcmludCAidXAgdG8gZGF0ZSIgbXNncy4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IERvIGl0IGhlcmUgaW5zdGVhZC4KCVVzZSB0aGUgYGNoYW5nZWQnIGZsYWcgb2YgZWFjaCBnb2FsJ3MgYHN0cnVjdCBkZXAnIHRvIGtlZXAgdHJhY2sKCW9mIHdoZXRoZXIgZmlsZXNfcmVtYWRlIChub3cgY29tbWFuZHNfc3RhcnRlZCkgY2hhbmdlZCBhcm91bmQgYQoJY2FsbCB0byB1cGRhdGVfZmlsZSBmb3IgdGhhdCBnb2FsLgoJV2hlbiBhIGdvYWwgaXMgZmluaXNoZWQsIGFuZCBpdHMgZmlsZSdzIHVwZGF0ZV9zdGF0dXMgaXMgemVybyAoaS5lLiwKCXN1Y2Nlc3Mgb3Igbm90aGluZyBkb25lKSwgdGVzdCB0aGUgYGNoYW5nZWQnIGZsYWcgYW5kIGdpdmUgYW4gInVwCgl0byBkYXRlIiBtc2cgaWZmIGl0IGlzIGNsZWFyLgoJKiBtYWtlLmggKGZpbGVzX3JlbWFkZSk6IFJlbmFtZWQgdG8gY29tbWFuZHNfc3RhcnRlZC4KCSogcmVtYWtlLmM6IENoYW5nZWQgZGVmbi4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IENoYW5nZWQgdXNlcy4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSW5jcmVtZW50IGNvbW1hbmRzX3N0YXJ0ZWQgaGVyZS4KCShyZWFwX2NoaWxkcmVuKTogTm90IGhlcmUuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBEb24ndCBkbyBhbnl0aGluZyB3aXRoIGZpbGVzJwoJYHByZXYnIG1lbWJlcnMuICB1cGRhdGVfZmlsZSBub3cgY29tcGxldGVseSBoYW5kbGVzIHRoaXMuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBEb24ndCBleHBhbmQgcmVjdXJzaXZlCgl2YXJpYWJsZXMgaWYgdGhleSBjYW1lIGZyb20gdGhlIGVudmlyb25tZW50LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogRm9yIGZsYWdzIHdpdGggb21pdHRlZCBvcHRpb25hbCBhcmdzLAoJc3RvcmUgeyIiLCAwfSB3aXRoIEFERF9GTEFHLiAgV2hlbiBjb25zdHJ1Y3RpbmcgRkxBR1NUUklORywgYSBmbGFnCglzbyBzdG9yZWQgY2Fubm90IGhhdmUgbW9yZSBmbGFncyBhcHBlbmRlZCB0byB0aGUgc2FtZSB3b3JkLgoKRnJpIEphbiAyMiAxNDo0NjoxNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGVfc2V0KTogSW4gdmFycy9idWNrZXQgY2FsY3VsYXRpb24sCglkb24ndCBzcHVyaW91c2x5IG11bHRpcGx5IGJ5IDEwMC4KCgkqIFZlcnNpb24gMy42My4KCgkqIGpvYi5jIFshSEFWRV9VTklPTl9XQUlUXSAoV1RFUk1TSUcsIFdDT1JFRFVNUCwgV0VYSVRTVEFUVVMpOgoJRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IERvbid0IGtlZXAgdHJhY2sgb2YgdGhlIGNvbW1hbmRfc3RhdGUgYmVmb3JlCgljYWxsaW5nIHVwZGF0ZV9maWxlXzEuICBSZW1vdmUgbG9jYWwgdmFyaWFibGUgQ09NTUFORFNfRklOSVNIRUQsCglhbmQgZG9uJ3QgdGVzdCBpdCB0byBkZWNpZGUgdG8gcHJpbnQgdGhlICJpcyB1cCB0byBkYXRlIiBtc2cuCglUZXN0aW5nIGZvciBmaWxlc19yZW1hZGUgaGF2aW5nIGNoYW5nZWQgc2hvdWxkIGFsd2F5cyBiZSBzdWZmaWNpZW50LgoJVGhlIG9sZCBtZXRob2QgbG9zdCB3aGVuIHdlIGFyZSBjYWxsZWQgaW4gdGhlIGdvYWwgY2hhaW4gcnVuIG9uIGEKCW1ha2VmaWxlLCBiZWNhdXNlIHRoZSBtYWtlZmlsZSdzIGNvbW1hbmRfc3RhdGUgaXMgYWxyZWFkeQoJYGNzX2ZpbmlzaGVkJyBmcm9tIHRoZSBtYWtlZmlsZSBjaGFpbiBydW4uCgoJKiBtaXNjLmMgW0hBVkVfU0VUUkVbR1VdSURdOiBUZXN0IHRoZXNlIHRvIGRlY2wgc2V0cmVbZ3VdaWQuCgoJKiBjb25maWd1cmUuaW46IFJld3JvdGUgd2FpdCBjaGVja2luZy4KCVVzZSBBQ19IQVZFX0hFQURFUlMgdG8gY2hlY2sgZm9yIDxzeXMvd2FpdC5oPi4KCVVzZSBBQ19IQVZFX0ZVTkNTIHRvIGNoZWNrIGZvciB3YWl0cGlkIGFuZCB3YWl0My4KCVVzZSBhIGNvbXBpbGUgY2hlY2sgdG8gdGVzdCBqdXN0IGZvciBgdW5pb24gd2FpdCcuCgkqIGpvYi5jOiBSZXdyb3RlIGNvbmRpdGlvbmFscyBhY2NvcmRpbmdseS4KCVtIQVZFX1dBSVRQSURdOiBUZXN0IHRoaXMgb25seSB0byBkZWZpbmUgV0FJVF9OT0hBTkcuCglbSEFWRV9XQUlUM106IExpa2V3aXNlLgoJW0hBVkVfVU5JT05fV0FJVF06IFRlc3QgdGhpcyB0byBkZWZpbmUgV0FJVF9UIGFuZCBXKi4KCgkqIGNvbmZpZ3VyZS5pbjogU2V0IENGTEFHUyBhbmQgTERGTEFHUyBiZWZvcmUgYWxsIGNoZWNrcy4KCgkqIGRpci5jOiBBZGQgc3RhdGljIGZvcndhcmQgZGVjbHMgb2Yge29wZW4scmVhZH1fZGlyc3RyZWFtLgoKVGh1IEphbiAyMSAxNzoxODowMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4zMS4KCgkqIGpvYi5jIFtOR1JPVVBTX01BWCAmJiBOR1JPVVBTX01BWD09MF06ICN1bmRlZiBOR1JPVVBTX01BWC4KCgkqIGNvbXBhdE1ha2VmaWxlIChDRkxBR1MsIExERkxBR1MpOiBTZXQgdG8gQENGTEFHU0AvQExERkxBR1NALgoJKiBidWlsZC50ZW1wbGF0ZSAoQ0ZMQUdTLCBMREZMQUdTKTogU2FtZSBoZXJlLgoJKiBjb25maWd1cmUuaW46IEFDX1NVQlNUKENGTEFHUykgYW5kIExERkxBR1MuCglTZXQgdGhlbSB0byAtZyBpZiBub3QgZGVmaW5lZCBpbiB0aGUgZW52aXJvbm1lbnQuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBVc2UgTElCTkFNRSBjb25zaXN0ZW50bHksIHNldHRpbmcgaXQKCW9ubHkgb25jZSwgdG8gYmUgdGhlIHBhc3NlZCBuYW1lIHNhbnMgYC1sJy4KCVBhc3MgbmV3IHZhciBGSUxFIHRvIGJlIG1vZGlmaWVkIGJ5IHZwYXRoX3NlYXJjaC4KCk1vbiBKYW4gMTggMTQ6NTM6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4zMC4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYnMpOiBSZXR1cm4gd2hlbiBqb2Jfc2xvdHNfdXNlZCBpcyBlcXVhbCB0bwoJam9iX3Nsb3RzLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfQ09OU1QgZm9yIHRoZSBzYWtlIG9mIGdldG9wdC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENvbnRpbnVlIGFmdGVyIHBhcnNpbmcgYG92ZXJyaWRlJwoJZGlyZWN0aXZlLCByYXRoZXIgdGhhbiBmYWxsaW5nIHRocm91Z2ggdG8gbG9zc2FnZS4KCUNoZWNrIGZvciBFT0wgb3IgYmxhbmsgYWZ0ZXIgIm92ZXJyaWRlIGRlZmluZSIuCgoJKiBjb21wYXRNYWtlZmlsZSAoLmMubywgcmVtb3RlLm8pOiBQdXQgJChDRkxBR1MpIGFmdGVyIG90aGVyIHN3aXRjaGVzLgoKRnJpIEphbiAxNSAxMjo1Mjo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI5LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQWZ0ZXIgd3JpdGluZyBldmVyeXRoaW5nIGludG8KCUZMQUdTVFJJTkcsIG9ubHkgYmFjayB1cCB0d28gY2hhcnMgaWYgWy0xXSBpcyBhIGRhc2gsIG1lYW5pbmcgd2UKCWp1c3Qgd3JvdGUgIiAtIi4gIEFsd2F5cyB0ZXJtaW5hdGUgdGhlIHN0cmluZyBhdCAqUC4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFdoZW4gY29uc3RydWN0aW5nIG5hbWVzIGluIHN0ZCBkaXJzLAoJdXNlICYoKkxJQilbMl0gZm9yIHRoZSBzdGVtLCBub3QgTElCTkFNRSAod2hpY2ggcG9pbnRzIGF0IHRoZQoJYnVmZmVyIHdlIGFyZSB3cml0aW5nIGludG8hKS4KClRodSBKYW4gMTQgMTM6NTA6MDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNldCBJTl9JR05PUkVEX0RFRklORSBmb3IgIm92ZXJyaWRlCglkZWZpbmUiIHdoZW4gSUdOT1JJTkcgaXMgdHJ1ZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBSZW1vdmUgY29uZmlnLnN0YXR1cyBhbmQgYnVpbGQuc2guCgpXZWQgSmFuIDEzIDE2OjAxOjEyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjguCgoJKiBtaXNjLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogQ2FzdCByZXN1bHQgb2YgbWFsbG9jL3JlYWxsb2MgdG8KCShjaGFyICopLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFtBSUFNQUddOiBDYXN0IHJlYWQgYXJnIHRvIChjaGFyICopLgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBPdmVycmlkZSBTSEVMTCB2YWx1ZSBmb3IKCW9yaWdpbiBvX2Vudl9vdmVycmlkZSBhcyB3ZWxsIGFzIG9fZW52LgoKCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogRG9uJ3QgcmVwbGFjZSAlZ2xvYm9ianMlLiAgSW5zdGVhZCwKCWFkZCB0aGUgbmFtZXMgb2YgdGhlIGdsb2Igb2JqZWN0cyAody9zdWJkaXIpIHRvICVvYmpzJS4KCSogYnVpbGQudGVtcGxhdGUgKGdsb2JvYmpzKTogUmVtb3ZlZC4KCVRha2UgYmFzZW5hbWUgb2YgJG9ianMgYmVmb3JlIGxpbmtpbmcuCgpUdWUgSmFuIDEyIDEyOjMxOjA2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI3LgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBBbHNvIGVkaXQgYnVpbGQuc2guCgkqIGJ1aWxkLnRlbXBsYXRlOiBOZXcgZmlsZS4KCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogTmV3IHJ1bGUgdG8gY3JlYXRlIGl0IGZyb20gYnVpbGQudGVtcGxhdGUuCgkobWFrZS0kKHZlcnNpb24pLnRhci5aKTogRGVwZW5kIG9uIGJ1aWxkLnNoLmluLgoKCSogbWFpbi5jIChkaWUpOiBDYWxsIHByaW50X2RhdGFfYmFzZSBpZiAtcC4KCShtYWluKTogRG9uJ3QgY2FsbCBpdCBoZXJlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBBZGQgQERFRlNALiAgY29uZmlndXJlIHNob3VsZCB0dXJuIHRoaXMKCWludG8gLURIQVZFX0NPTkZJR19ILgoKTW9uIEphbiAxMSAxNDozOToyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNi4KCgkqIG1pc2MuYyAoaW5pdF9hY2Nlc3MpOiBTdXJyb3VuZCB3aXRoICNpZmRlZiBHRVRMT0FEQVZHX1BSSVZJTEVHRUQuCgkoe21ha2UsdXNlcixjaGlsZH1fYWNjZXNzKSBbISBHRVRMT0FEQVZHX1BSSVZJTEVHRURdOiBNYWtlIG5vLW9wLgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbF9zZXRnaWQpOiBOZXcgdmFyLCBzZXQgYnkgY29uZmlndXJlLgoJKGluc3RhbGwpOiBJbnN0YWxsIHNldGdpZCAkKGdyb3VwKSBvbmx5IGlmICQoaW5zdGFsbF9zZXRnaWQpIGlzIHRydWUuCgpGcmkgSmFuICA4IDE1OjMxOjU1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IElmIGdldGxvYWRhdmcgZmFpbHMgd2l0aCBlcnJubz09MCwgZ2l2ZSBhCgltZXNzYWdlIHNheWluZyB0aGF0IGxvYWQgbGltaXRzIGFyZSBub3Qgc3VwcG9ydGVkLgoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBSZXdyb3RlIHBhdGggZGVsZXRpb24gY29kZSB0bwoJbm90IHRyeSB0byB1c2UgUEFUSCdzIG5leHQgbGluayBhZnRlciBmcmVlaW5nIFBBVEguCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBSZXdyaXR0ZW47IG5vdyBoYW5kbGVzIHN0cmluZy12YWx1ZWQKCW9wdGlvbiwgYW5kIGhhcyBubyBhcmJpdHJhcnkgbGltaXRzLgoJKHN3aXRjaGVzKTogU2V0IGB0b2VudicgZmxhZyBmb3IgLUkgYW5kIC12LgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogQ2FzdCByZXR1cm4gdmFsdWUgb2YgYWxsb2NhIHRvIGNoYXIgKi4KCgkqIG1pc2MuYyAoY2hpbGRfYWNjZXNzKSBbSEFWRV9TRVRSRVVJRCwgSEFWRV9TRVRSRUdJRF06IFVzZQoJc2V0cmVbZ3VdaWQgaW4gcGxhY2Ugb2Ygc2V0W2d1XWlkLgoKV2VkIEphbiAgNiAxNTowNjoxMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIE1BS0VPVkVSUklERVMsIE1BS0UsIGFuZCBNQUtFX0NPTU1BTkQgd2l0aAoJb3JpZ2luIG9fZGVmYXVsdC4KCgkqIG1ha2UuaCBbUE9TSVhdOiBEb24ndCB0ZXN0IHRoaXMgdG8gdXNlIEFOU0lfU1RSSU5HLgoJVGVzdGluZyBTVERDX0hFQURFUlMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgoJKiBqb2IuaDogRGVjbGFyZSBzdGFydF93YWl0aW5nX2pvYnMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBZGQgbWlzc2luZyBwYXJlbnMgaW4gaWYgc3RtdCB0aGF0IGZpbmQKCWNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMuCgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIGluaXRfZGlyLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsd2F5cyB1c2UgdHdvICUgc3BlY3MgaW4gYQoJREVCVUdQMiwgYW5kIGFsd2F5cyBwYXNzIHR3byBub24tbmlsIGFyZ3MuCglDYXN0IGZpZWxkIHdpZHRoIGFyZ3MgdG8gaW50LgoJQWRkIG1pc3NpbmcgcGFyZW5zIGluICFSVUxFLT5zdWJkaXIgaWYgc3RtdC4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uLCBwYXRzdWJzdF9leHBhbmQpOiBBZGQgcGFyZW5zIGFyb3VuZAoJYXNzaWdubWVudHMgaW5zaWRlIGB3aGlsZScgc3RtdHMuCgkqIGNvbW1hbmRzLmMgKHByaW50X2NvbW1hbmRzKTogQ2FzdCBmaWVsZCB3aWR0aCBhcmdzIHRvIGludC4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogQ2FzdCByZXR1cm4gdmFsdWUgb2YgYWxsb2NhIHRvIChjaGFyICopLgoKCSogbWFpbi5jIChpbml0X3N3aXRjaGVzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIGRlY29kZV9zd2l0Y2hlcy4KCShkZWNvZGVfc3dpdGNoZXMpOiBUYWtlIG5ldyBhcmcgRU5WLiAgSWYgc2V0LCBpZ25vcmUgbm9uLW9wdGlvbgoJYXJnczsgcHJpbnQgbm8gZXJyb3IgbXNnczsgaWdub3JlIG9wdGlvbnMgd2l0aCBjbGVhciBgZW52JyBmbGFncy4KCShkZWNvZGVfZW52X3N3aXRjaGVzKTogUmV3cml0dGVuIHRvIGNob3AgZW52YXIgdmFsdWUgaW50byB3b3JkcwoJYW5kIHBhc3MgdGhlbSB0byBkZWNvZGVfc3dpdGNoZXMuCgkoc3dpdGNoZXMpOiBTZXQgYGVudicgZmxhZyBmb3IgLUkgYW5kIC12LgoKCSogZGlyLmMgKGluaXRfZGlyKTogQ2FzdCBmcmVlIHRvIF9fZ2xvYl9jbG9zZWRpcl9ob29rJ3MgdHlwZS4KClR1ZSBKYW4gIDUgMTQ6NTI6MTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNS4KCgkqIGpvYi5jIFtIQVZFX1NZU19XQUlUIHx8ICFVU0ddOiBEb24ndCAjaW5jbHVkZSA8c3lzL3RpbWUuaD4gYW5kCgk8c3lzL3Jlc291cmNlLmg+LiAgPHN5cy90aW1lLmg+IGludGVyYWN0cyBiYWRseSB3aXRoIDx0aW1lLmg+LCBhbmQKCXdlIGRvbid0IG5lZWQgdGhlc2UgYW55d2F5LgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0ZVTkNTKTogQ2hlY2sgZm9yIHNldHJlW2d1XWlkLgoJKiBtaXNjLmMgKHt1c2VyLG1ha2V9X2FjY2Vzcyk6IFRlc3QgI2lmbmRlZiBIQVZFX1NFVFJFW0dVXUlELCBub3QKCSNpZmRlZiBQT1NJWCB8fCBVU0cuICBTdW5PUyA0LjEgaXMgc3VwcG9zZWRseSBQT1NJWC4xIGNvbXBsaWFudCwKCWJ1dCBpdHMgc2V0W2d1XWlkIGZ1bmN0aW9ucyBhcmVuJ3Q7IGl0cyBzZXRyZVtndV1pZCBmdW5jdGlvbnMgd29yay4KCgkqIG1pc2MuYyAoe3VzZXIsbWFrZSxjaGlsZH1fYWNjZXNzKTogR2l2ZSBuYW1lIG9mIGNhbGxlciBpbiBlcnJvciBtc2dzLgoKCSogam9iLmMgKGxvYWRfdG9vX2hpZ2gpOiBTYXkgImNhbm5vdCBlbmZvcmNlIGxvYWQgbGltaXQiIGluIGVycm9yIG1zZy4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19QUk9HX0NDLgoJKiBjb21wYXRNYWtlZmlsZSAoQ0MpOiBEZWZpbmUgdG8gQENDQCAoYXV0b2NvbmYgbWFnaWMpLgoKCSogY29tcGF0TWFrZWZpbGU6IEFkZCAuTk9FWFBPUlQgbWFnaWMgdGFyZ2V0LgoKTW9uIEphbiAgNCAxNzowMDowMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IFVwZGF0ZWQgY29weXJpZ2h0IHRvIGluY2x1ZGUgOTMuCgpUaHUgRGVjIDMxIDEyOjI2OjE1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtfQUlYXTogRG9uJ3QgZGVjbGFyZSBhbGxvY2EuCgpUdWUgRGVjIDI5IDEzOjQ1OjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI0LgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBBZGQgc2lnbmFtZS5vLgoJKHNyY3MpOiBBZGQgc2lnbmFtZS5bY2hdLgoKCSogY29tcGF0TWFrZWZpbGUgKHNyY3MpOiBBZGQgY29uZmlnLmguaW4uCgkocmVtb3RlLm8pOiBBZGQgLUkuIGJlZm9yZSAtSSQoc3JjZGlyKS4KCk1vbiBEZWMgMjggMTU6NTE6MjYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yMy4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBGYXRhbCB3aGVuIExFTj09MCwgaW5kaWNhdGluZyBhIGxpbmUgc3RhcnRpbmcKCXdpdGggYSBOVUwuCgkocmVhZGxpbmUpOiBUYWtlIG5ldyBhcmcgTElORU5PLCBmb3IgdXNlIGluIGVycm9yIG1zZy4KCShyZWFkX21ha2VmaWxlLCBkb19kZWZpbmUpOiBQYXNzIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKGdsb2IvbGliZ2xvYi5hKTogUGFzcyAtREhBVkVfQ09ORklHX0ggaW4gQ1BQRkxBR1MuCgkoLmMubyk6IEFkZCAtSS4gYmVmb3JlIC1JJChzcmNkaXIpLgoKV2VkIERlYyAyMyAxMjoxMjowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWNjZXB0IGFuZCBpZ25vcmUgYSBydWxlIHdpdGggbm8gdGFyZ2V0cy4KCgkqIGNvbXBhdE1ha2VmaWxlIChBTExPQ0FfU1JDKTogTmV3IHZhcmlhYmxlLgoJKHNyY3MpOiBJbmNsdWRlIGl0cyB2YWx1ZS4KCgkqIHJlYWQuYyAoc3RydWN0IGNvbmRpdGlvbmFsKTogUmVuYW1lZCBtZW1iZXIgYG1heF9pZ25vcmluZycgdG8KCWBhbGxvY2F0ZWQnOyBhZGRlZCBuZXcgbWVtYmVyIGBzZWVuX2Vsc2UnLgoJKGNvbmRpdGlvbmFsX2xpbmUpOiBJbml0aWFsaXplIHNlZW5fZWxzZSBmbGFnIHdoZW4gc3RhcnRpbmcgYW4gYGlmLi4uJzsKCXNldCBpdCB3aGVuIHdlIHNlZSBhbiBgZWxzZSc7IGZhdGFsIGlmIHNldCB3aGVuIHdlIHNlZSBgZWxzZScuCgkocmVhZF9tYWtlZmlsZSk6IEZhdGFsICJtaXNzaW5nIGBlbmRpZiciIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZwoJY29uZGl0aW9uYWxzLCBub3QganVzdCBpZiB3ZSBhcmUgc3RpbGwgaWdub3JpbmcuCgpUdWUgRGVjIDIyIDE1OjM2OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobWFuZXh0KTogU2V0IHRvIDEsIG5vdCBsLgoJKCQobWFuZGlyKS8kKGluc3RuYW1lKS4kKG1hbmV4dCkpOiBVc2UgJChzcmNkaXIpIGZvciBtYWtlLm1hbiBpbiBjbWRzLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBEb24ndCBjYWxsIHVuaXF1aXplX2RlcHMgaGVyZS4KCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBMaWtld2lzZS4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBMaWtld2lzZS4KCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogQ2FsbCBpdCBvbmx5IGhlcmUuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19jb252ZXhfX106IEZDPWZjLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogRXhwYW5kIHRoZSB2YWx1ZXMgb2YgcmVjdXJzaXZlbHkKCWV4cGFuZGVkIHZhcmlhYmxlcyB3aGVuIHB1dHRpbmcgdGhlbSBpbnRvIHRoZSBlbnZpcm9ubWVudC4KCSogZXhwYW5kLmMgKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IE1hZGUgZ2xvYmFsLgoJKiBtYWtlLmggKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IERlY2xhcmUgaXQuCgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogU2V0IEZJTEUtPmNvbW1hbmRfc3RhdGUgdG8gY3NfZGVwc19ydW5uaW5nCgl3aGVuIGEgZGVwJ3MgY29tbWFuZF9zdGF0ZSBpcyBjc19ydW5uaW5nIG9yIGNzX2RlcHNfcnVubmluZy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoYW5nZWQgZXJyb3IgbXNnIGZvciBzcHVyaW91cyBjbWRzIHRvCglub3Qgc2F5ICJmaXJzdCB0YXJnZXQiLgoKU3VuIERlYyAyMCAxNzo1NjowOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IERvIEFDX0NPTkZJR19IRUFERVIgcmlnaHQgYWZ0ZXIgQUNfSU5JVC4KCSogbWFrZS5oIChIQVZFX0NPTkZJR19IKTogI2luY2x1ZGUgImNvbmZpZy5oIiwgdGhlbiAjZGVmaW5lIHRoaXMuCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWcuaCwgY29uZmlndXJlLCBjb25maWcuaC5pbik6IE5ldyBydWxlcy4KCShkZWZpbmVzKTogUmVtb3ZlZCBAREVGU0AuCgpUaHUgRGVjIDE3IDE2OjExOjQwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogSnVzdCBkZXBlbmQgb24gZGlzdGNsZWFuOyBubyBjbWRzLgoJKGRpc3RjbGVhbik6IERvIHdoYXQgcmVhbGNsZWFuIGRpZCBiZWZvcmU7IGFsc28gcmVtb3ZlIE1ha2VmaWxlIGFuZAoJY29uZmlnLmg7IGRvbid0IHJlbW92ZSBjb25maWd1cmUuCgkoaW5mbywgZHZpKTogTmV3IHRhcmdldHM7IGRlcGVuZCBvbiBtYWtlLntpbmZvLGR2aX0uCgkoZG9jKTogUmVtb3ZlZCB0YXJnZXQuCgkoTUFLRUlORk8sIFRFWEkyRFZJKTogTmV3IHZhcnMuCgkobWFrZS5pbmZvLCBtYWtlLmR2aSk6IFVzZSB0aGVtIGluc3RlYWQgb2YgZXhwbGljaXQgY21kcy4KCldlZCBEZWMgMTYgMTY6MjU6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZmNudGwuaCB0byBBQ19IQVZFX0hFQURFUlMuICBnZXRsb2FkYXZnIGNhcmVzLgoKV2VkIERlYyAgOSAxNToyMTowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9uZ19vcHRpb25fYWxpYXNlcyk6IEFkZCAtLW5ldy1maWxlIGFsaWFzIGZvciAtVy4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpOiBDaGFuZ2UgYWxsIEMrKyB0byBDWFggYW5kIEMrK0ZMQUdTCgl0byBDWFhGTEFHUy4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogRXhwYW5kIHRoZSB2YXJpYWJsZSBuYW1lIGJlZm9yZSB1c2luZyBpdC4KCgkqIG1haW4uYyAobWFpbik6IERlZmluZSB2YXJpYWJsZSAiTUFLRV9DT01NQU5EIiB0byBhcmd2WzBdOwoJZGVmaW5lICJNQUtFPSQoTUFLRV9DT01NQU5EKSAkKE1BS0VPVkVSUklERVMpIiBhbHdheXMuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBTZWFyY2ggZm9yIGxpYk5BTUUuYSBpbiBjd2Q7IGxvb2sgaW4KCXZwYXRoIGJlZm9yZSBsb29raW5nIGluIHN0YW5kYXJkIGRpcnMsIG5vdCBhZnRlci4KCUNoYW5nZWQgb3JkZXIgb2Ygc3RkIGRpcnMgdG86IC9saWIsIC91c3IvbGliLCAke3ByZWZpeH0vbGliLgoKTW9uIE5vdiAyMyAxNDo1NzozNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3BhdHRlcm5fcnVsZXMsIGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBBZGRlZAoJYnJhY2tldHMgYXJvdW5kIGluaXRpYWxpemVycy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogRG9uJ3QgY2hlY2sgZm9yIExJTkVbMF09PSdcdCcuCgkodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBFeHBhbmQgdGhlIG5hbWUgYmVmb3JlIGRlZmluaW5nIHRoZSB2YXIuCgoJKiBqb2IuYyAoaW5pdF9zaWdsaXN0KTogUmVtb3ZlZCBmdW5jdGlvbi4KCVJlbW92ZWQgZGVjbCBvZiBgc3lzX3NpZ2xpc3QnLgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVF06ICNpbmNsdWRlICJzaWduYW1lLmgiLgoJW0hBVkVfU1lTX1NJR0xJU1QgJiYgIVNZU19TSUdMSVNUX0RFQ0xBUkVEXTogRGVjbGFyZSBzeXNfc2lnbGlzdAoJb25seSB1bmRlciB0aGVzZSBjb25kaXRpb25zLgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBkZWNsYXJlIGluaXRfc2lnbGlzdC4KCShtYWluKSBbISBIQVZFX1NZU19TSUdMSVNUXTogQ2FsbCBzaWduYW1lX2luaXQgaW5zdGVhZCBvZiBpbml0X3NpZ2xpc3QuCgpXZWQgTm92IDE4IDE0OjUyOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IERvbid0IHRyeSB0byBhcHBlbmQgdG8gRklSU1RERVBTIGlmIGl0J3MKCW5pbDsgaW5zdGVhZCBqdXN0IHNldCBpdCB0byBNT1JFREVQUy4KCk1vbiBOb3YgMTYgMTc6NDk6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogSW5pdGlhbGl6ZSBQIHRvIERJUlBBVEggYmVmb3JlCglsb29wIHRoYXQgc2V0cyBNQVhFTEVNLgoKRnJpIE5vdiAxMyAxODoyMzoxOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIyLgoKVGh1IE5vdiAxMiAxNTo0NTozMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogVW5kZXIgLW4sIGluY3JlbWVudCBmaWxlc19yZW1hZGUgYWZ0ZXIKCXByb2Nlc3NpbmcgKGkuZS4sIHByaW50aW5nKSBhbGwgY29tbWFuZCBsaW5lcy4KClR1ZSBOb3YgMTAgMTU6MzM6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IEFwcGVuZCBuZXcgZGVwcyBpZiB0aGlzIHJ1bGUgaGFzIG5vCgljb21tYW5kczsgcHJlcGVuZCB0aGVtIHRvIGV4aXN0aW5nIGRlcHMgaWYgdGhpcyBydWxlIGhhcyBubyBjb21tYW5kcy4KCgkqIGRpci5jIChvcGVuX2RpcnN0cmVhbSk6IFJldHVybiBuaWwgaWYgRElSLT5jb250ZW50cy0+ZmlsZXMgaXMgbmlsLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFJlbW92ZWQgbGFzdCBhcmcgU1RSSVAuICBBbHdheXMgc3RyaXAgYC4vJ3MuCgkocmVhZF9tYWtlZmlsZSk6IENoYW5nZWQgY2FsbGVycy4KCSogZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpOiBMaWtld2lzZS4KCSogcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IExpa2V3aXNlLgoKTW9uIE5vdiAgOSAxNzo1MDoxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKGZpbGVzX3JlbWFkZSk6IE1hZGUgZ2xvYmFsLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogRG9uJ3QgaW5jcmVtZW50IGZpbGVzX3JlbWFkZSBoZXJlOyB0aGlzCglmdW5jdGlvbiBnZXRzIGNhbGxlZCBpbiBtYW55IHNpdHVhdGlvbnMgd2hlcmUgbm8gcmVtYWtpbmcgd2FzIGluCglmYWN0IGRvbmUuCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG8gaXQgaGVyZSBpbnN0ZWFkLCB3aGVuIHdlIGtub3cgdGhhdAoJYWN0dWFsIGNvbW1hbmRzIGhhdmUgYmVlbiBydW4gZm9yIHRoZSBmaWxlLgoJKiBtYWtlLmggKGZpbGVzX3JlbWFkZSk6IERlY2xhcmUgaXQuCgpUaHUgTm92ICA1IDE4OjI2OjEwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBBbGxvdyBibGFua3MgYXMgd2VsbCBhcyBjb2xvbnMgdG8KCXNlcGFyYXRlIGVsdHMgaW4gdGhlIHNlYXJjaCBwYXRoLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgZmF0YWwgb24gZXh0cmEgdG9rZW5zIGluIGB2cGF0aCcuCglUaGUgc2VhcmNoIHBhdGggY2FuIGNvbnRhaW4gc3BhY2VzIG5vdy4KClR1ZSBOb3YgIDMgMjA6NDQ6MzIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoY2hlY2spOiBOZXcgdGFyZ2V0OyBuby1vcC4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogTW9kIE9MREhBU0ggYnkgRklMRV9CVUNLRVRTIGFmdGVyCgl0ZXN0aW5nIGZvciBPTERIQVNIPT0wIGJ1dCBiZWZvcmUgdXNpbmcgdGhlIHZhbHVlLgoJKHJlbmFtZV9maWxlKTogRG9uJ3QgbW9kIE9MREhBU0ggYnkgRklMRV9CVUNLRVRTIGJlZm9yZSBwYXNzaW5nIGl0Cgl0byBmaWxlX2hhc2hfZW50ZXIuCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogTm90aWNlIHdoZW4gT0xERklMRS0+Y21kcyBjYW1lIGZyb20KCWRlZmF1bHQuYywgYW5kIGRvbid0IHRyeSB0byBwcmludCAtPmZpbGVuYW1lIGluIHRoYXQgY2FzZS4KClN1biBPY3QgMjUgMDE6NDg6MjMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IERvbid0IHByb2Nlc3MgRi0+YWxzb19tYWtlIGhlcmUuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBEb24ndCBwcm9jZXNzIEZJTEUtPmFsc29fbWFrZSBpZiBubyBhdHRlbXB0Cgl0byB1cGRhdGUgRklMRSB3YXMgYWN0dWFsbHkgbWFkZS4KCUZpeGVkIHRvIGNhbGwgZl9tdGltZSBkaXJlY3RseSB0byByZWZyZXNoIHRoZWlyIG1vZHRpbWVzLgoKU2F0IE9jdCAyNCAyMjowODo1OSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChmaW5kX3BlcmNlbnQpOiBEb24ndCBpbmNyZW1lbnQgUCBhZ2FpbiBhZnRlciBza2lwcGluZwoJYW4gZXNjYXBlZCAlLgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IEluIGNhbGwgdG8gcGF0c3Vic3RfZXhwYW5kLCBkb24ndAoJZmluZCBgJSdzIG91cnNlbHZlczsgbGV0IHRoYXQgZnVuY3Rpb24gZG8gaXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGU6IHJlY29yZF93YWl0aW5nX2ZpbGVzKTogRG9uJ3QgY2FsbAoJcmVjb3JkX2ZpbGVzIGlmIEZJTEVOQU1FUyBpcyBuaWwuCgkocmVhZF9tYWtlZmlsZSk6IEFsbCBhbHRlcm5hdGl2ZXMgaW4gdGhlIHBhcnNpbmcsIGV4Y2VwdCBmb3IgcnVsZQoJbGluZXMsIGZhbGwgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBsb29wLiAgQXQgdGhlIGVuZCBvZiB0aGUKCWxvb3AsIGRvIHJlY29yZF93YWl0aW5nX2ZpbGVzIHNvIHdlIG5vdGljZSBsYXRlciBzcHVyaW91cyBjbWRzLgoKRnJpIE9jdCAyMyAxNTo1NzozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBGcmVlIG9sZCB2YWx1ZSBvZiBTSEVMTAoJYmVmb3JlIHJlcGxhY2luZyBpdC4KClRodSBPY3QgMTUgMTg6NTc6NTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoLmMubyk6IEFkZCAtSSQoc3JjZGlyKS9nbG9iIHRvIGZsYWdzLgoKCSogZGlyLmMgKG9wZW5fZGlyc3RyZWFtKTogQ2FzdCByZXR1cm4gdmFsdWUgdG8gX19wdHJfdC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXM6ICJHRVQiKSBbX0lCTVIyXTogVXNlIFVTRyBkZWZuLgoKCSogbWFrZS5oIChNQVhQQVRITEVOKTogTW92ZWQgb3V0IG9mICNpZm5kZWYgUE9TSVguCgkoR0VUX1BBVEhfTUFYKTogTW92ZWQgZnJvbSAjaWZkZWYgUE9TSVggdG8gI2lmZGVmIFBBVEhfTUFYICNlbHNlLgoJRGVmaW5lIGFzIChnZXRfcGF0aF9tYXggKCkpLgoJWyEgUEFUSF9NQVhdIChORUVEX0dFVF9QQVRIX01BWCk6IERlZmluZS4KCVshIFBBVEhfTUFYXSAoZ2V0X3BhdGhfbWF4KTogRGVjbGFyZSBmbi4KCSogbWlzYy5jIFtORUVEX0dFVF9QQVRIX01BWF0gKGdldF9wYXRoX21heCk6IE5ldyBmdW5jdGlvbi4KCk1vbiBPY3QgMTIgMTM6MzQ6NDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjEuCgoJKiBqb2IuYyAoc3lzX3NpZ2xpc3QpOiBPbmx5IGRlY2xhcmUgI2lmbmRlZiBTWVNfU0lHTElTVF9ERUNMQVJFRC4KCSogbWFrZS5oIFshIEhBVkVfU1lTX1NJR0xJU1QgJiYgSEFWRV9fU1lTX1NJR0xJU1RdOiAjZGVmaW5lCglTWVNfU0lHTElTVF9ERUNMQVJFRC4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGUpOiBXaGVuIGluaXRpYWxpemluZyBESVItPmNvbnRlbnRzLCBzZXQKCURJUi0+Y29udGVudHMtPmRpcnN0cmVhbSB0byBuaWwuCgoJKiBjb21wYXRNYWtlZmlsZSAoR0xPQik6IERlZmluZSBuZXcgdmFyaWFibGUuCgkob2Jqcyk6IFVzZSBpdCwgcmF0aGVyIHRoYW4gZ2xvYi9saWJnbG9iLmEgZXhwbGljaXRseS4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBXaGVuIHN0cmlwcGluZyAiLi8iLCBoYW5kbGUgY2FzZXMgbGlrZQoJIi4vLy9mb28iIGFuZCAiLi8vLy8vIi4KCSogZmlsZS5jIChsb29rdXBfZmlsZSwgZW50ZXJfZmlsZSk6IExpa2V3aXNlLgoKU3VuIE9jdCAxMSAxNzowMDozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGlyLmMgKHN0cnVjdCBkaXJzdHJlYW0sIHtvcGVuLHJlYWR9X2RpcnN0cmVhbSk6IE5ldwoJZGF0YSB0eXBlIGFuZCBmdW5jdGlvbnMgdG8gcmVhZCBhIGRpcmVjdG9yeSBzZXF1ZW50aWFsbHkuCgkoaW5pdF9kaXIpOiBOZXcgZnVuY3Rpb24gdG8gaG9vayBpdCBpbnRvIGdsb2IuCgkqIG1haW4uYyAobWFpbik6IENhbGwgaW5pdF9kaXIuCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEFkZGVkIGdsb2IvbGliZ2xvYi5hLgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSBjb2RlIHRvIHRlc3QgZm9yIGdsb2IuCgpGcmkgT2N0ICA5IDEyOjA4OjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IEdlbmVyYWxpemVkIHRlc3QgZm9yIE5BTUUgcG9pbnRpbmcKCXNvbWV3aGVyZSBpbnRvIEYtPm5hbWUuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfdmFyaWFibGVfaW5fc2V0KTogRnJlZSBvbGQgdmFsdWUgd2hlbiByZXBsYWNpbmcuCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IEZyZWUgdGhlIGxpbmVidWZmZXIgYmVmb3JlIHJldHVybmluZy4KCShyZWNvcmRfZmlsZXMpOiBXaGVuIGNsZWFyaW5nIC5TVUZGSVhFUyBkZXBzLCBmcmVlIHRoZWlyIGRhdGEuCgkobXVsdGlfZ2xvYik6IEZyZWUgT0xEIGFuZCBpdHMgZGF0YSB3aGVuIHJlcGxhY2luZyBpdCB3aXRoIHJlc3VsdHMKCW9mIGdsb2IgcnVuLgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogVXNlIGFsbG9jYSBpbiBwbGFjZSBvZiB4bWFsbG9jCglmb3IgdGVtcCBzcGFjZSBmb3IgJF4sICQ/LCBldCBhbC4KCgkqIGRpci5jIChzdHJ1Y3QgZGlyZWN0b3J5KTogTmV3IG1lbWJlciBgY29udGVudHMnIHJlcGxhY2VzIGBmaWxlcycKCWFuZCBgZGlyc3RyZWFtJy4KCShzdHJ1Y3QgZGlyZWN0b3J5X2NvbnRlbnRzKTogTmV3IHR5cGUuCgkoZGlyZWN0b3JpZXNfY29udGVudHMpOiBOZXcgaGFzaCB0YWJsZS4KCShkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3ApOiBUYWtlIGEgc3RydWN0IGRpcmVjdG9yeV9jb250ZW50cy4KCShkaXJfZmlsZV9leGlzdHNfcCk6IFBhc3MgaXQgdGhlIGBjb250ZW50cycgbWVtYmVyIG9mIHRoZSBkaXIgZm91bmQuCgkoZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wKTogUmVuYW1lZCB0byBkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcDsKCW1hZGUgc3RhdGljLiAgUmV0dXJuIDAgaWYgRElSIGlzIG5pbCAobWVhbmluZyBpdCBjb3VsZG4ndCBiZSBzdGF0J2QpLgoJKGRpcl9maWxlX2V4aXN0c19wLCBmaW5kX2RpcmVjdG9yeSk6IENoYW5nZSBhbGwgY2FsbGVycy4KCShmaWxlX2ltcG9zc2libGUpOiBVc2UgRElSLT5jb250ZW50cywgaW5pdGlhbGl6aW5nIGl0IGlmIG5pbC4KCShwcmludF9kaXJfZGF0YV9iYXNlKTogVXNlIERJUi0+Y29udGVudHMsIGFuZCBwcmludCBvdXQgZGV2aWNlIGFuZAoJaW5vZGUgbnVtYmVycyB3aXRoIGVhY2ggZGlyZWN0b3J5LgoKCSogQ2hhbmdlcyBmb3IgcGVyZm9ybWFuY2Ugd2luIGZyb20gSm9obiBHaWxtb3JlIDxnbnVAY3lnbnVzLmNvbT46CgkqIGRpci5jIChESVJFQ1RPUllfQlVDS0VUUyk6IEluY3JlYXNlIHRvIDE5OS4KCShESVJGSUxFX0JVQ0tFVFMpOiBEZWNyZWFzZSB0byAxMDcuCgkoZmluZF9kaXJlY3RvcnkpOiBBbGxvY2F0ZSBhbmQgemVybyBhIG11bHRpcGxlIG9mCglzaXplb2YgKHN0cnVjdCBkaXJmaWxlICopLCBub3Qgb2Ygc2l6ZW9mIChzdHJ1Y3QgZGlyZmlsZSkuCgkoZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wKTogTmV3IGZ1bmN0aW9uLCBuZWFybHkgYWxsIGNvZGUgZnJvbQoJZGlyX2ZpbGVfZXhpc3RzX3AuCgkoZGlyX2ZpbGVfZXhpc3RzX3ApOiBKdXN0IGNhbGwgZmluZF9kaXJlY3RvcnkrZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wLgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogUmVtb3ZlIHJlZHVuZGFudAoJZGlyX2ZpbGVfZXhpc3RzX3AgY2FsbC4KCgkqIGNvbmZpZ3VyZS5pbjogQ29tbWVudCBvdXQgZ2xvYiBjaGVjazsgYWx3YXlzIHVzZSBvdXIgY29kZS4KCkZyaSBPY3QgIDIgMTk6NDE6MjAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVCAmJiBIQVZFX19TWVNfU0lHTElTVF06ICNkZWZpbmUKCUhBVkVfU1lTX1NJR0xJU1Q7IGFmdGVyIGRvaW5nICNkZWZpbmUgc3lzX3NpZ2xpc3QgX3N5c19zaWdsaXN0LCB3ZQoJZG8gaGF2ZSBpdC4KCldlZCBTZXAgMzAgMTk6MjE6MDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBkbyAtdyBhdXRvbWF0aWNhbGx5IGlmIC1zLgoKVHVlIFNlcCAyOSAyMTowNzo1NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAocHJpbnRlZF92ZXJzaW9uKTogTW92ZSB2YXJpYWJsZSBpbnNpZGUgcHJpbnRfdmVyc2lvbi4KCShwcmludF92ZXJzaW9uKTogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIHByaW50ZWRfdmVyc2lvbiBpcyBzZXQuCgkoZGllKTogRG9uJ3QgdGVzdCBwcmludGVkX3ZlcnNpb24gaGVyZS4KCShkZWNvZGVfc3dpdGNoZXMpOiBVbmRlciAtdiwgZG8gcHJpbnRfdmVyc2lvbiBiZWZvcmUgZ2l2aW5nIHVzYWdlLgoJKERFU0NSSVBUSU9OX0NPTFVNTik6IE5ldyBtYWNyby4KCShkZWNvZGVfc3dpdGNoZXMpOiBVc2UgaXQgd2hlbiBwcmludGluZyB0aGUgdXNhZ2UgbWVzc2FnZS4KCUxlYXZlIGF0IGxlYXN0IHR3byBzcGFjZXMgYmV0d2VlbiBvcHRpb25zIGFuZCB0aGVpciBkZXNjcmlwdGlvbnMuCgpGcmkgU2VwIDI1IDEzOjEyOjQyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIwLgoKV2VkIFNlcCAxNiAxNjoxNToyMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNhdmUgZXJybm8gdmFsdWUgZnJvbSB0cnlpbmcgdG8gb3BlbgoJRklMRU5BTUUsIGFuZCByZXN0b3JlIGl0IGJlZm9yZSBlcnJpbmc7IG90aGVyd2lzZSB3ZSBnZXQgdGhlIGVycm5vCgl2YWx1ZSBmcm9tIHRoZSBsYXN0IGVsdCBvZiB0aGUgc2VhcmNoIHBhdGguCgpUdWUgU2VwIDE1IDE1OjEyOjQ3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBBZGQgLS1zdG9wIGZvciAtUy4KCgkqIHJlYWQuYyAod29yZDFlcSk6IERvIHN0cm5jbXAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgc29tZXBsYWNlIHRoYXQKCW1heSBiZSBvdXQgaW4gc3BhY2UuCgpXZWQgU2VwICA5IDE1OjUwOjQxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBJZiBhbGwgdGhlIGNvbW1hbmQgbGluZXMgd2VyZQoJcmVjdXJzaXZlLCBkb24ndCBkbyB0aGUgdG91Y2hpbmcuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBEb24ndCBjaGVjayBmb3IgKyBoZXJlLgoJKiBjb21tYW5kcy5jIChjaG9wX2NvbW1hbmRzKTogRG8gaXQgaGVyZSBpbnN0ZWFkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogUHJlcGVuZCArIHRvIGNtZHMgZm9yIFJDUy4KCldlZCBTZXAgIDIgMTc6NTM6MDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEluY2x1ZGUgJChBTExPQ0EpLgoKCSogbWFrZS5oIFtDUkFZXTogTW92ZSAjZGVmaW5lIHNpZ25hbCBic2RzaWduYWwgdG8gYmVmb3JlICNpbmNsdWRlcy4KClRodSBBdWcgMjcgMTc6NDU6NDMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAoZGVmYXVsdF9pbmNsdWRlX2RpcmVjdG9yaWVzKTogQWRkIElOQ0xVREVESVIgZmlyc3QuCgkqIGNvbXBhdE1ha2VmaWxlIChpbmNsdWRlZGlyKTogRGVmaW5lLgoJKGRlZmluZXMpOiBBZGQgLUQgZm9yIElOQ0xVREVESVI9IiQoaW5jbHVkZWRpcikiLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogR3JvayBtdWx0aXBsZSBmaWxlcyBpbiBgaW5jbHVkZSc7CglnbG9iYmluZyB0b28uCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBOZXcgZnVuY3Rpb24uCgkobGlicmFyeV9maWxlX210aW1lKTogUmVtb3ZlIGZ1bmN0aW9uLgoJKGZfbXRpbWUpOiBVc2UgbGlicmFyeV9zZWFyY2ggaW5zdGVhZCBvZiBsaWJyYXJ5X2ZpbGVfbXRpbWUuCgkqIGNvbXBhdE1ha2VmaWxlIChsaWJkaXIpOiBEZWZpbmUuCgkoZGVmaW5lcyk6IEFkZCAtRCBmb3IgTElCRElSPSIkKGxpYmRpcikiLgoJKiBtYWtlLnRleGluZm8gKExpYnJhcmllcy9TZWFyY2gpOiBEb2N1bWVudCBjaGFuZ2UuCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogRml4IGZpbGVfaGFzaF9lbnRlciBjYWxsIHdpdGggbWlzc2luZyBhcmcuCgpXZWQgQXVnIDI2IDE3OjEwOjQ2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE5LgoKCSogbWFpbi5jIChtYWluKTogU2V0IGNvbW1hbmRfc3RhdGUgdG8gY3NfZmluaXNoZWQgZm9yIHRlbXAgZmlsZXMKCW1hZGUgZm9yIHN0ZGluIG1ha2VmaWxlcy4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRG9uJ3QgdGVsbCBnZXRvcHQgdG8gcmV0dXJuIG5vbi1vcHRpb24KCWFyZ3MgaW4gb3JkZXIuCglJZ25vcmUgYW4gYXJndW1lbnQgb2YgYC0nLgoKVGh1IEF1ZyAyMCAxMzozNjowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IElmICh0b3VjaF9mbGFnICYmICFSRUNVUlNJVkUpLCBpZ25vcmUKCXRoZSBjb21tYW5kIGxpbmUgYW5kIGdvIHRvIHRoZSBuZXh0LgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogVW5kZXIgLXQsIHRvdWNoIEZJTEUuCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IERvbid0IHRvdWNoIGl0IGhlcmUuCgpXZWQgQXVnIDE5IDE2OjA2OjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChwYXR0ZXJuX21hdGNoZXMpOiBVc2UgdGVtcG9yYXJ5IGZvciBzdHJsZW4gKFdPUkQpCglpbnN0ZWFkIG9mIHR3byBmdW5jdGlvbiBjYWxscy4KCgkqIGNvbXBhdE1ha2VmaWxlIChMT0FEX0FWRyk6IFJlbW92ZSB2YXJpYWJsZSBhbmQgY29tbWVudHMuCgpUdWUgQXVnIDE4IDE0OjU4OjU4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChSdW5uaW5nKTogTm9kZSByZW5hbWVkIHRvIGBtYWtlIEludm9jYXRpb24nLgoKRnJpIEF1ZyAxNCAxMjoyNzoxMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpOiBEb24ndCBjb21wYXJlIFtNQVgtMy4uTUFYXSBpZgoJTkFNRUxFTiAhPSBNRU1MRU4uCgpUaHUgQXVnIDEzIDE3OjUwOjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTguCgoJKiBtYWluLmM6IERvbid0ICNpbmNsdWRlIDx0aW1lLmg+OyBtYWtlLmggYWxyZWFkeSBkb2VzLgoKTW9uIEF1ZyAxMCAxNzowMzowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBGaXhlZCBjb3B5aW5nIG9mIHN1ZmZpeCB3aGVuIGJ1aWxkaW5nCglhbHNvX21ha2UgZWx0cy4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6IE1ha2Ugc3VyZSBCVUZGRVIgaXMKCW51bGwtdGVybWluYXRlZCBiZWZvcmUgcmVwbGFjaW5nIG5ld2xpbmVzLgoKCSogY29tcGF0TWFrZWZpbGUgKG1hbmRpcik6IFVzZSBtYW4kKG1hbmV4dCksIG5vdCBhbHdheXMgbWFubC4KClN1biBBdWcgIDIgMDE6NDI6NTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IE5vdCBzdGF0aWMuCgkqIHJ1bGUuaDogRGVjbGFyZSBpdC4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogTmV3IGZ1bmN0aW9uLCBtb3N0IGNvZGUgZnJvbSByZW5hbWVfZmlsZS4KCShyZW5hbWVfZmlsZSk6IENhbGwgaXQuCgkqIGZpbGUuaCAoZmlsZV9oYXNoX2VudGVyKTogRGVjbGFyZSBpdC4KCgkqIGRlcC5oOiBEb2MgZml4LgoKVGh1IEp1bCAzMCAxNTo0MDo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSGFuZGxlIHVzYWdlX2FuZF9leGl0IHdoZW4gYnVpbGRpbmcKCWxvbmcgb3B0aW9ucyB2ZWN0b3IuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBNYWtlIFJDUyBydWxlcyB1c2UgJChDSEVDS09VVCx2KS4KCShkZWZhdWx0X3ZhcmlhYmxlcyk6IERlZmluZSBDSEVDS09VVCx2IChoYWlyeSkuCgoJKiBtYWtlLmggWyFIQVZFX1NZU19TSUdMSVNUICYmIEhBVkVfX1NZU19TSUdMSVNUXTogI2RlZmluZQoJc3lzX3NpZ2xpc3QgdG8gX3N5c19zaWdsaXN0LgoKU3VuIEp1bCAyNiAxNjo1NjozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogTkVXUzogQWRkIGhlYWRlciBhbmQgdGFpbCBjb3B5cmlnaHQgaW5mbyBsaWtlIEVtYWNzIE5FV1MuCgoJKiBtYWtlLmggW0FOU0lfU1RSSU5HXTogRG9uJ3QgI2RlZmluZSBpbmRleCwgcmluZGV4LCBiY21wLCBiemVybywKCWJjb3B5IGlmIGFscmVhZHkgI2RlZmluZSdkLgoJW1NURENfSEVBREVSU10gKHFzb3J0LCBhYm9ydCwgZXhpdCk6IERlY2xhcmUgaGVyZS4KCVshIF9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVhdOiBOb3QgaGVyZS4KCgkqIG1ha2UuaCBbX0FJWF06ICNwcmFnbWEgYWxsb2NhIGZpcnN0IHRoaW5nLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogU2V0IHRoZSBjb21tYW5kX3N0YXRlIHRvIGNzX3J1bm5pbmcKCXdoZW4gd2UgcXVldWUgYSBqb2Igb24gd2FpdGluZ19qb2JzLgoKRnJpIEp1bCAyNCAwMjoxNjoyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBVc2UgIiIgaW5zdGVhZCBvZiBuaWwKCWZvciBlbXB0eSB2YWx1ZS4KClRodSBKdWwgMjMgMjI6MzE6MTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNy4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoLnR5cGUpOiBBZGQgYWx0ZXJuYXRpdmUgdXNhZ2VfYW5kX2V4aXQuCgkoY29tbWFuZF9zd2l0Y2hlcyk6IEFkZCAtaC8tLWhlbHAuCgpUaHUgSnVsIDE2IDE0OjI3OjUwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhci5aKTogSW5jbHVkZSBORVdTLCBub3QgQ0hBTkdFUy4KCSogUkVBRE1FLnRlbXBsYXRlOiBNZW50aW9uIE5FV1MuCgkqIENIQU5HRVM6IFJlbmFtZWQgdG8gTkVXUy4KCgkqIG1haW4uYyBbISBTVERDX0hFQURFUlNdIFtzdW5dOiBEb24ndCBkZWNsYXJlIGV4aXQuCgpUdWUgSnVsIDE0IDE4OjQ4OjQxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBTZXQgLW8gZmlsZXMnIGNvbW1hbmRfc3RhdGVzIHRvIGNzX2ZpbmlzaGVkLgoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IERlY3JlbWVudCBudW1fcGF0dGVybl9ydWxlcwoJd2hlbiB0b3NzaW5nIGEgcnVsZS4KCgkqIG1haW4uYyAobWFpbik6IFVzZSBhbGxvY2Egb25seSBpbiBzaW1wbGUgbG9jYWwgdmFyIGFzc2lnbm1lbnQsCglmb3IgYnJhaW5kZWFkIFNHSSBjb21waWxlci4KCgkqIHJ1bGUuYyAocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBCYXJmIGlmIG51bV9wYXR0ZXJuX3J1bGVzIGlzCglpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbnVtYmVyIGNvbXB1dGVkIHdoZW4gbGlzdGluZyB0aGVtLgoKTW9uIEp1bCAxMyAxNzo1MTo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IEZvciAkPyBhbmQgJF4gZWx0cyB0aGF0IGFyZSBhcmNoaXZlCgltZW1iZXIgcmVmcywgdXNlIG1lbWJlciBuYW1lIG9ubHkuCgpGcmkgSnVsIDEwIDAwOjA1OjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5oIChzdHJ1Y3QgdmFyaWFibGUuZXhwb3J0KTogQWRkIG5ldyBhbHRlcm5hdGl2ZSB2X2lmc2V0LgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBDaGVjayBmb3IgaXQuCgkoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBTZXQgaXQgZm9yIE1BS0VGSUxFUy4KClRodSBKdWwgIDkgMjE6MjQ6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogUmVtb3ZlIGdldGxvYWRhdmcubzsgJChleHRyYXMpIGdldHMgaXQuCgkocmVtb3RlLm8pOiBVc2UgJChzcmNkaXIpL3JlbW90ZS5jLCBub3QgJHJlbW90ZS5jPC4KCShkaXN0Y2xlYW4sIG1vc3RseWNsZWFuKTogTmV3IHRhcmdldHMuCgpUdWUgSnVsICA3IDE5OjEyOjQ5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTYuCgoJKiBjb21wYXRNYWtlZmlsZSAoY29uZmlnLnN0YXR1cyk6IFJlbW92ZSBydWxlLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogRnJlZSBDIGFmdGVyIHVzaW5nIEMtPmZpbGUsIG5vdCBiZWZvcmUuCgpTYXQgSnVsICA0IDIwOjUxOjQ5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jLCBqb2IuYywgbWFpbi5jLCBtYWtlLmgsIHJlbW90ZS1jc3Rtcy5jOiBVc2UgI2lmZGVmCglIQVZFXyogaW5zdGVhZCBvZiAjaWZuZGVmICpfTUlTU0lORy4KCSogY29uZmlndXJlLmluOiBVc2UgQUNfSEFWRV9GVU5DUyBpbnN0ZWFkIG9mIEFDX01JU1NJTkdfRlVOQ1MgKGdvbmUpLgoKVGh1IEp1bCAgMiAxODo0Nzo1MiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogbWFrZWxldmVsPjAgb3IgLUMgaW1wbGllcyAtdy4KClR1ZSBKdW4gMzAgMjA6NTA6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYywgam9iLmMsIGZ1bmN0aW9uLmM6IERvbid0ICNpbmNsdWRlIDxlcnJuby5oPi4KCW1ha2UuaDogRG8gaXQgaGVyZSBpbnN0ZWFkLgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKTogRG9uJ3QgZGVjbGFyZSBlcnJuby4KClRodSBKdW4gMjUgMTc6MDY6NTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhci5aKTogRGVwZW5kIG9uIElOU1RBTEwsIGNvbmZpZ3VyZS5pbi4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IElmIGNvbW1hbmRzIG9yIGRlcHMgYXJlIHJ1bm5pbmcgYWZ0ZXIKCXVwZGF0ZV9maWxlXzEgcmV0dXJucywgYnJlYWsgb3V0IG9mIHRoZSA6OiBydWxlICgtPnByZXYpIGxvb3AgYW5kCglqdXN0IHJldHVybi4KCgkqIGpvYi5jCShqb2JfbmV4dF9jb21tYW5kKTogTmV3IGZ1bmN0aW9uOyBjb2RlIGZyb20gc3RhcnRfam9iLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVuYW1lZCBmcm9tIHN0YXJ0X2pvYi4gIENhbGwgam9iX25leHRfY29tbWFuZAoJYW5kIHJlY3Vyc2UgZm9yIGVtcHR5IGNvbW1hbmQgbGluZXMgYW5kIC1uLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogQ2FsbCBzdGFydF9qb2JfY29tbWFuZCwgbm90IHN0YXJ0X2pvYi4KCShuZXdfam9iKTogQ2FsbCBqb2JfbmV4dF9jb21tYW5kIHRvIHByaW1lIHRoZSBjaGlsZCBzdHJ1Y3R1cmUsIGFuZAoJdGhlbiBjYWxsIHN0YXJ0X3dhaXRpbmdfam9iLgoJKHJlYXBfY2hpbGRyZW4pOiBVc2Ugam9iX25leHRfY29tbWFuZCBhbmQgc3RhcnRfam9iX2NvbW1hbmQuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBDYWxsIHN0YXJ0X3JlbW90ZV9qb2JfcCBoZXJlLCBhbmQgc3RvcmUgaXRzCglyZXN1bHQgaW4gQy0+cmVtb3RlLiAgSWYgemVybywgY2hlY2sgdGhlIGxvYWQgYXZlcmFnZSBhbmQKCW1heWJlIHB1dCBDIG9uIHdhaXRpbmdfam9icy4KCShzdGFydF9qb2JfY29tbWFuZCk6IFRlc3QgQ0hJTEQtPnJlbW90ZSByYXRoZXIgdGhhbiBjYWxsaW5nCglzdGFydF9yZW1vdGVfam9iX3AuICBEb24ndCBkbyBsb2FkIGF2ZyBjaGVja2luZyBhdCBhbGwgaGVyZS4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IGhhbmRsZSBTSUdJTEwsIFNJR0lPVCwgU0lHRU1ULCBTSUdCVVMsCglTSUdTRUdWLCBTSUdGUEUgb3IgU0lHVFJBUC4KCgkqIGNvbXBhdE1ha2VmaWxlIChnbG9iL2xpYmdsb2IuYSk6IERvbid0IHBhc3Mgc3JjZGlyIHRvIHN1Yi1tYWtlLgoJY29uZmlndXJlIHdpbGwgc2V0IGl0IGluIGdsb2IvTWFrZWZpbGUuCgpXZWQgSnVuIDI0IDE5OjQwOjM0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkaXIuYyBbRElSRU5UXSAoZGlyZWN0KTogRG9uJ3QgZGVmaW5lIHRvIGRpcmVudC4KCVshIERJUkVOVF0gKGRpcmVjdCk6IERlZmluZSB0byBkaXJlbnQuCgkoZGlyX2ZpbGVfZXhpc3RzX3ApOiBVc2Ugc3RydWN0IGRpcmVudCBpbnN0ZWFkIG9mIHN0cnVjdCBkaXJlY3QuCgoJKiBtYWtlLmggKGdldGN3ZCk6IE5vIHNwYWNlIGJldHdlZW4gbWFjcm8gYW5kICggZm9yIGFyZ3MhCgoJKiBqb2IuYyAoc3RhcnRfam9iKTogRG9uJ3QgcHV0IHRoZSBqb2Igb24gd2FpdGluZ19qb2JzIGlmCglqb2Jfc2xvdHNfdXNlZD09MC4KCgkqIG1ha2UudGV4aW5mbyAoTWlzc2luZyk6IFNob3J0ZW5lZCB0aXRsZS4KClR1ZSBKdW4gMjMgMTg6NDI6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBQcmludCAicm0iIGNvbW1hbmRzIHVuZGVyIC1uLgoKTW9uIEp1biAyMiAxNjoyMDowMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNS4KCkZyaSBKdW4gMTkgMTY6MjA6MjYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIFtNX1VOSVhdOiAjdW5kZWYgTV9YRU5JWC4KCldlZCBKdW4gMTcgMTc6NTk6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBQdXQgQCBwcmVmaXggb24gUkNTIGNtZHMuCgpUdWUgSnVuIDE2IDE5OjI0OjE3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoZ2V0bG9hZGF2Zy5vKTogUmVtb3ZlZCBzcGVjaWFsIHJ1bGUuCgkoQ0ZMQUdTKTogRG9uJ3QgaW5jbHVkZSAkKGRlZmluZXMpLgoJKC5jLm8pOiBEZWZpbmUgc3VmZml4IHJ1bGUuCgkoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIENQUEZMQUdTPSQoZGVmaW5lcykgdG8gc3VibWFrZS4KCShHRVRPUFRfU1JDLCBzcmNzLCB0YWdzcmNzKTogUHJlZml4IGZpbGVzIHdpdGggJChzcmNkaXIpLy4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKTogTW92ZWQgbG9jYWwgdmFycyBpbnNpZGUgI2lmJ2QgYmxvY2suCgoJKiBtYWtlLmggKG1heCk6IFJlbW92ZWQuCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9idWZmZXJfb3V0cHV0KTogRG9uJ3QgdXNlIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKElOU1RBTEwpOiBEZWZpbmUuCgkoTWFrZWZpbGUpOiBOZXcgcnVsZSB0byBtYWtlIGZyb20gTWFrZWZpbGUuaW4uCgkoc3JjZGlyKTogRGVmaW5lLgoJKFZQQVRIKTogRGVmaW5lLgoJKGdldGxvYWRhdmcubywgcmVtb3RlLm8pOiBVc2UgYXV0b2NvbmYgJGZvbzwgaGFjay4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCk6IFJlbW92ZWQgcmV0dXJuLgoKTW9uIEp1biAxNSAxNzo0Mjo1MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE0LgoKCSogbWFrZS50ZXhpbmZvIChTdW1tYXJ5KTogTmV3IG5vZGUuCgkoU3BlY2lhbCBUYXJnZXRzKTogTWVudGlvbiAuRVhQT1JUX0FMTF9WQVJJQUJMRVMgaGVyZS4KCgkqIHZhcmlhYmxlLmMgKG1heCk6IE1vdmVkIHRvIG1ha2UuaC4KCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzLCBzcmNzKTogQWRkZWQgYXIgJiBhcnNjYW4uCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBOZXcgZnVuY3Rpb24sIDJuZCBoYWxmIG9mIG5ld19qb2IuCgkobmV3X2pvYik6IENhbGwgaXQuCgkoc3RhcnRfd2FpdGluZ19qb2JzKTogTmV3IGZ1bmN0aW9uLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBDYWxsIHN0YXJ0X3dhaXRpbmdfam9icyBhdCB0aGUgdG9wCglvZiB0aGUgbWFpbiBsb29wLgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcywgc3Jjcyk6IFJlbW92ZWQgbG9hZCwgYWRkZWQgZ2V0bG9hZGF2Zy4KCkZyaSBKdW4gMTIgMTk6MzM6MTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IE5ldyBmdW5jdGlvbi4gIFVzZXMgZ2V0bG9hZGF2Zy4KCSh3YWl0aW5nX2pvYnMpOiBOZXcgdmFyaWFibGUuCgkoc3RhcnRfam9iKTogRG9uJ3QgY2FsbCB3YWl0X3RvX3N0YXJ0X2pvYi4gIEluc3RlYWQsIGlmCglsb2FkX3Rvb19oaWdoIHJldHVybnMgbm9uemVybywgYWRkIHRoZSBjaGlsZCB0byB0aGUKCWB3YWl0aW5nX2pvYnMnIGNoYWluIGFuZCByZXR1cm4gd2l0aG91dCBzdGFydGluZyB0aGUgam9iLgoKVGh1IEp1biAxMSAwMDowNToyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9idWZmZXJfb3V0cHV0KTogTWFkZSBnbG9iYWwgYWdhaW4uCgkqIHZhcmlhYmxlLmg6IEFuZCBkZWNsYXJlIGl0LgoKCSogYXJzY2FuLmMgKFBPUlRBUik6IERlZmluZSBmb3IgYWxsIHN5c3RlbXMgaWYgUE9SVDVBUiBpcyBub3QgZGVmaW5lZC4KCShBUl9OQU1FTEVOLCBBUl9UUkFJTElOR19TTEFTSCk6IFJlbW92ZWQuCgkoYXJfc2Nhbik6IERvbid0IHVzZSBpdC4gIERvbid0ICNpZmRlZiBBUl9UUkFJTElOR19TTEFTSDsganVzdCBsb29rCglmb3IgYSBzbGFzaCBpbiB0aGUgYXJjaGl2ZSBhdCBydW4gdGltZS4KCShhcl9uYW1lX2VxdWFsKTogUmV3cm90ZSAubyBoYWNraW5nIHRvIG5vdCB1c2UgQVJfTkFNRUxFTiwgYW5kIHRvCgljb3BlIHdpdGggdHJhaWxpbmctc2xhc2ggYW5kIG5vbi10cmFpbGluZy1zbGFzaCBhcmNoaXZlcy4KCgkqIG1haW4uYyAobWFpbikgWyEgU0VUVkJVRl9SRVZFUlNFRF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTR3IzIGV0IGFsLgoJW1NFVFZCVUZfUkVWRVJTRURdOiBBbHdheXMgYWxsb2NhdGUgYSBidWZmZXIgb3Vyc2VsdmVzLgoKCSogbG9hZC5jIChsb2FkX2F2ZXJhZ2UpIFtzZ2ldOiBVc2Ugc3lzbXAgY2FsbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChJTlNUQUxMX0RBVEEsIElOU1RBTExfUFJPR1JBTSk6IERlZmluZS4KCSgkKGJpbmRpcikvJChpbnN0bmFtZSksICQobWFuZGlyKS9tYWtlLiQobWFuZXh0KSk6IFVzZSB0aGVtLgoKCSogbWFrZS5oIFtIQVZFX1ZGT1JLX0hdOiAjaW5jbHVkZSA8dmZvcmsuaD4uCgkodmZvcmssIFZGT1JLX05BTUUpOiBEb24ndCBkZWZpbmUuCgkqIGpvYi5jIChzdGFydF9qb2IpOiBVc2UgInZmb3JrIiBpbiBwbGFjZSBvZiBWRk9SS19OQU1FLgoKCSogbWFrZS5oIFtIQVZFX0xJTUlUU19ILCBIQVZFX1NZU19QQVJBTV9IXTogSWYgI2RlZmluZSdkLCAjaW5jbHVkZQoJdGhlIGVhY2ggZmlsZS4gIFJlYXJyYW5nZWQgUEFUSF9NQVggaGFja2luZy4KCSogam9iLmM6IFJlYXJyYW5nZWQgTkdST1VQU19NQVggaGFja2luZy4KCgkqIHJlbWFrZS5jIChmc3RhdCwgdGltZSk6IERvbid0IGRlY2xhcmUuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IFZhbHVlIGlzIEBERUZTQC4KCShMT0FETElCRVMpOiBWYWx1ZSBpcyBATElCU0AuCgkoZXh0cmFzKTogVmFsdWUgaXMgQExJQk9CSlNALgoJKEFSQ0hJVkVTLCBBUkNISVZFU19TUkMsIEFMTE9DQVNSQyk6IFJlbW92ZWQuCgkqIGFyc2Nhbi5jLCBhci5jOiBTdXJyb3VuZCBib2R5IHdpdGggI2lmbmRlZiBOT19BUkNISVZFUy4KCgkqIG1pc2MuYyBbISBIQVZFX1VOSVNURF9IXTogVGVzdCBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsIGdldCppZC4KCgkqIG1ha2UuaCBbR0VUQ1dEX01JU1NJTkddOiBUZXN0IGluc3RlYWQgb2YgIVVTRyAmJiAhUE9TSVggZXQgYWwuCgkoZ2V0Y3dkKTogSnVzdCBkZWNsYXJlIGlmIHByZXNlbnQuICBJZiBub3QsIGRlY2xhcmUgYXMgYSBtYWNybwoJdXNpbmcgZ2V0d2QsIGFuZCBkZWNsYXJlIGdldHdkLgoJW1BBVEhfTUFYXSAoR0VUX1BBVEhfTUFYKTogI2RlZmluZSB0byBQQVRIX01BWC4KCSogbWFpbi5jIChtYWluLAlsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBVc2UgZ2V0Y3dkIGluc3RlYWQgb2YgZ2V0d2QuCgoJKiBtYWluLmMgKG1haW4pIFtTRVRMSU5FQlVGX01JU1NJTkddOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0cuCgoJKiBtYWtlLmggKFNJR0hBTkRMRVIsIFNJR05BTCk6IFJlbW92ZWQuCgkoUkVUU0lHVFlQRSk6IERlZmluZSBpZiBub3QgI2RlZmluZSdkLgoJKiBtYWluLmMgKG1haW4pOiBVc2Ugc2lnbmFsIGluIHBsYWNlIG9mIFNJR05BTC4KCgkqIG1haW4uYyBbU1lTX1NJR0xJU1RfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiBVU0cuCgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpIFtHRVRHUk9VUFNfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiBVU0cuCglbSEFWRV9VTklTVERfSF06IFRlc3QgaW5zdGVhZCBvZiBQT1NJWCB0byBub3QgZGVjbCBnZXRncm91cHMuCgoJKiBtYWluLmMgWyEgSEFWRV9VTklTVERfSF06IFRlc3QgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbCBjaGRpci4KCVshIFNURENfSEVBREVSU106IFRlc3QgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbCBleGl0ICYgYXRvZi4KCgkqIGpvYi5jIChjaGlsZF9oYW5kbGVyKSwgY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogUmV0dXJuCglSRVRTSUdUWVBFIGluc3RlYWQgb2YgaW50LgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIGZhdGFsX2Vycm9yX3NpZ25hbCBhbmQgY2hpbGRfaGFuZGxlciBoZXJlCgl0byByZXR1cm4gUkVUU0lHVFlQRTsgcmVtb3ZlZCB0b3AtbGV2ZWwgZGVjbCBvZiBmb3JtZXIuCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpLCBqb2IuYyAodW5ibG9ja19zaWdzLCBzdGFydF9qb2IpLAoJbWFpbi5jIFtTSUdTRVRNQVNLX01JU1NJTkddOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0cuCgpXZWQgSnVuIDEwIDIyOjA2OjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgW0hBVkVfV0FJVFBJRF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTRy4KCVshIEhBVkVfVU5JU1REX0hdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbGFyZSBtaXNjIGZucy4KCShHSURfVCk6IERvbid0ICNkZWZpbmUuCgkoc2VhcmNoX3BhdGgpOiBVc2UgZ2lkX3QgaW5zdGVhZCBvZiBHSURfVC4KCVtHRVREVEFCTEVTSVpFX01JU1NJTkcsIFNZU19TSUdMSVNUX01JU1NJTkcsIERVUDJfTUlTU0lOR106IFRlc3QKCXRoZXNlIGluZGl2aWR1YWxseSBpbnN0ZWFkIG9mIFVTRyBmb3IgYWxsLgoJKiBtYWtlLmggKGN0aW1lKTogRG9uJ3QgZGVjbGFyZS4gICNpbmNsdWRlIHRpbWUuaCBpbnN0ZWFkLgoJW0hBVkVfVU5JU1REX0hdOiAjaW5jbHVkZSA8dW5pc3RkLmg+IGFuZCAjZGVmaW5lIFBPU0lYICNpZmRlZgoJX1BPU0lYX1ZFUlNJT04uCgkqIGRpci5jIFtfX0dOVV9MSUJSQVJZX19dIChEX05BTUxFTik6IERlZmluZSB0byB1c2UgZF9uYW1sZW4gbWVtYmVyLgoJKiBtYWtlLmggW05FRURfTUVNT1JZX0hdOiBPbmx5IGluY2x1ZGUgbWVtb3J5LmggI2lmZGVmIHRoaXMuCgoJKiBhcnNjYW4uYzogUmVtb3ZlZCAjaWZkZWYgbWVzcyBhYm91dCBzdHJpbmcuaCBldCBhbC4KCUp1c3QgI2luY2x1ZGUgbWFrZS5oIGluc3RlYWQuCgkqIG1ha2UuaCAoZnN0YXQsIGF0b2wpOiBEZWNsYXJlLgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogRG9uJ3QgdXNlIHNpZ21hc2sgdG8gY2hlY2sgZm9yCglwcm9wYWdhdGVkIHNpZ25hbHM7IHVzZSB8fHMgaW5zdGVhZC4KCShQUk9QQUdBVEVEX1NJR05BTF9NQVNLKTogUmVtb3ZlZC4KCShmYXRhbF9lcnJvcl9zaWduYWwpIFtQT1NJWF06IFVzZSBzaWdwcm9jbWFzayBpbiBwbGFjZSBvZiBzaWdzZXRtYXNrLgoKCSogdmFyaWFibGUuYyAodmFyaWFibGVfYnVmZmVyLCB2YXJpYWJsZV9idWZmZXJfbGVuZ3RoLAoJaW5pdGlhbGl6ZV92YXJpYWJsZV9vdXRwdXQsIHZhcmlhYmxlX291dHB1dCk6IE1vdmVkIHRvIGV4cGFuZC5jOwoJbWFkZSBhbGwgc3RhdGljLgoJKHN0cnVjdCBvdXRwdXRfc3RhdGUsIHNhdmVfdmFyaWFibGVfb3V0cHV0LAoJcmVzdG9yZV92YXJpYWJsZV9vdXRwdXQpOiBSZW1vdmVkLgoJKiBleHBhbmQuYyAoaW5pdGlhbGl6ZV92YXJpYWJsZV9vdXRwdXQpOiBQdXQgYSBOVUwgYXQgdGhlIGJlZ2lubmluZwoJb2YgdGhlIG5ldyBidWZmZXIgYWZ0ZXIgYWxsb2NhdGluZyBpdC4KCShhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kX2Zvcl9maWxlKTogRG9uJ3QgdXNlCgl7c2F2ZSxyZXN0b3JlfV92YXJpYWJsZV9vdXRwdXQuICBEbyBpdCBieSBoYW5kIGluc3RlYWQsIGtlZXBpbmcKCXN0YXRlIG9uIHRoZSBzdGFjayBpbnN0ZWFkIG9mIG1hbGxvYydpbmcgaXQuCgkoYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCk6IFJlbW92ZWQuCgkqIHZhcmlhYmxlLmggKGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQpOiBEZWZpbmUgaGVyZSBhcyBtYWNyby4KCSh2YXJpYWJsZV9idWZmZXJfb3V0cHV0LCBpbml0aWFsaXplX3ZhcmlhYmxlX291dHB1dCwKCXNhdmVfdmFyaWFibGVfb3V0cHV0LCByZXN0b3JlX3ZhcmlhYmxlX291dHB1dCk6IFJlbW92ZWQgZGVjbHMuCgoJKiByZWFkLmMgKGNvbmRpdGlvbmFsX2xpbmUpOiBGb3IgYW4gaWYgY21kLCBpZiBhbnkgZWx0IG9mIHRoZQoJY29uZGl0aW9uYWxzIHN0YWNrIGlzIGlnbm9yaW5nLCBqdXN0IHB1c2ggYSBuZXcgbGV2ZWwgdGhhdCBpZ25vcmVzCglhbmQgcmV0dXJuIDE7IGRvbid0IGV2YWx1YXRlIHRoZSBjb25kaXRpb24uCgpUaHUgSnVuICA0IDIxOjAxOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogUHV0ICNpZmRlZidzIGFyb3VuZCBmcm9iYmluZyBTSUdTWVMgYW5kIFNJR0JVUy4KCgkqIGpvYi5jIChnZXRkdGFibGVzaXplKTogRG9uJ3QgZGVjbGFyZSBvciAjZGVmaW5lIGlmIGFscmVhZHkgI2RlZmluZSdkLgoKV2VkIEp1biAgMyAyMzo0MjozNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogSWYgYC5FWFBPUlRfQUxMX1ZBUklBQkxFUycgaXMgYSB0YXJnZXQsIHNldAoJZXhwb3J0X2FsbF92YXJpYWJsZXMuCgkqIG1ha2UudGV4aW5mbyAoVmFyaWFibGVzL1JlY3Vyc2lvbik6IERvY3VtZW50IC5FWFBPUlRfQUxMX1ZBUklBQkxFUy4KClR1ZSBKdW4gIDIgMjE6MDg6MzUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTMuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBDYWxjdWxhdGUgbGVuZ3RoIGZvciBeRCBhbmQgP0QKCWluZGl2aWR1YWxseSwgbWFraW5nIHN1cmUgdG8gZ2l2ZSB0aGVtIGF0IGxlYXN0IGVub3VnaCBzcGFjZSBmb3IgIi4vIi4KCgkqIG1ha2UuaCBbQ1JBWV06ICNkZWZpbmUgc2lnbmFsIHRvIGJzZHNpZ25hbC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtDUkFZXTogRGVmaW5lIFBDLCBTRUdMRFIsCglDRjc3UFBGTEFHUywgQ0Y3N1BQLCBDRlQsIENGLCBhbmQgRkMuCgoJKiBhcnNjYW4uYyAoQVJfSERSX1NJWkUpOiBEZWZpbmUgdG8gc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyKSwgaWYgaXQKCXdhc24ndCBkZWZpbmVkIGJ5IDxhci5oPi4KClRodSBNYXkgMjggMDA6NTY6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTIuCgpUdWUgTWF5IDI2IDAxOjI2OjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogSW5pdGlhbGl6ZSBMQVNUUlVMRSB0byBuaWwsIG5vdAoJcGF0dGVybl9ydWxlcy4KCk1vbiBNYXkgMjUgMTk6MDI6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEluaXRpYWxpemUgYWxsIHRoZSBsb25nX29wdGlvbiBlbHQgbWVtYmVycy4KClRodSBNYXkgMjEgMTY6MzQ6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoVGV4dCBGdW5jdGlvbnMpOiBDb3JyZWN0IGZpbHRlci1vdXQgZGVzY3JpcHRpb24uCgpUdWUgTWF5IDE5IDIwOjUwOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKHJlYWxjbGVhbik6IERvbid0IHJlbW92ZSBiYWNrdXAgZmlsZXMuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEFsbG9jYXRlIEFSR0MrMSBlbHRzIGluIGBvdGhlcl9hcmdzJy4KClN1biBNYXkgMTcgMTY6Mzg6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjExLgoKVGh1IE1heSAxNCAxNjo0MjozMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERvbid0IGRpZSBpZiB3YWl0IHJldHVybnMgRUlOVFIuCgpXZWQgTWF5IDEzIDE4OjI4OjI1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBBbHdheXMgcnVuIHRoZSBuZXh0IGNvbW1hbmQgZm9yIGEKCXN1Y2Nlc3NmdWwgdGFyZ2V0LiAgSWYgd2UgYXJlIGdvaW5nIHRvIGRpZSwgd2UgZG9uJ3Qgd2FudCB0byBsZWF2ZQoJdGhlIHRhcmdldCBwYXJ0aWFsbHkgbWFkZS4KClR1ZSBNYXkgMTIgMDA6Mzk6MTkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBBZnRlciBsb29wLCBpZiB3ZSBvbmx5CgloYXZlIG9uZSB3b3JkLCBjaGVjayBpdCBmb3IgYmVpbmcgYSBzaGVsbCBjb21tYW5kLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBBbGxvY2F0ZSBBUkdDIHNsb3RzIGluIG90aGVyX2FyZ3MgdG8KCWJlZ2luIHdpdGgsIHNvIHdlIG5ldmVyIG5lZWQgdG8gd29ycnkgYWJvdXQgZ3Jvd2luZyBpdC4KCUlmIHdlIGdldCBhIG5vbi1vcHRpb24gYXJnIGFuZCBQT1NJWExZX0NPUlJFQ1QgaXMgaW4gdGhlCgllbnZpcm9ubWVudCwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLiAgQWZ0ZXIgdGhlIGxvb3AsIGFkZCBhbGwgcmVtYWluaW5nCglhcmdzIHRvIG90aGVyX2FyZ3MgbGlzdC4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRm9yIHBvc2l0aXZlX2ludCBhbmQgZmxvYXRpbmcgc3dpdGNoZXMKCXdoZW4gb3B0YXJnIGlzIG5pbCwgdXNlIG5leHQgYXJnIGlmIGl0IGxvb2tzIHJpZ2h0IChzdGFydCB3aXRoIGEKCWRpZ2l0LCBvciBtYXliZSBkZWNpbWFsIHBvaW50IGZvciBmbG9hdGluZykuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEFsd2F5cyBzZXQgU0hFTEwgdG8KCWRlZmF1bHQgaWYgaXQgY29tZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBTZXQgaXRzIGV4cG9ydCBiaXQuCgkqIG1ha2UudGV4aW5mbyAoRW52aXJvbm1lbnQpOiBEb2N1bWVudCBjaGFuZ2UuCgpNb24gTWF5IDExIDAwOjMyOjQ2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMC4KCgkqIGNvbXBhdE1ha2VmaWxlICh0YWdzLCBUQUdTKTogVXNlIHZhcnMgZm9yIGNtZHMuCgkoRVRBR1MsIENUQUdTKTogRGVmaW5lLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBJZiBhIHN3aXRjaGVzIGVsdCBoYXMgYSBuaWwgbG9uZ19uYW1lLAoJbWFrZSB0aGUgbG9uZyBvcHRpb24gbmFtZSBlbHQgYmUgIiIuCglGaXhlZCBsb29wIHRvIG5vdCBpZ25vcmUgYWxsIHRoZSBvcHRpb25zLgoKCSogbWFrZS50ZXhpbmZvIChPcHRpb24gU3VtbWFyeSk6IEFkZGVkIGxvbmcgb3B0aW9ucy4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBDaGFuZ2VkIC1tJ3MgZGVzY3JpcHRpb24gdG8gIi1iIi4KCShkZWNvZGVfc3dpdGNoZXMpOiBXaGVuIHByaW50aW5nIHRoZSB1c2FnZSBtZXNzYWdlLCBkb24ndCBwcmludAoJc3dpdGNoZXMgd2hvc2UgZGVzY3JpcHRpb25zIHN0YXJ0IHdpdGggLS4KCVdoZW4gY29uc3RydWN0aW5nIHRoZSBsaXN0IG9mIG5hbWVzIGZvciBzd2l0Y2ggLUMsIHNlYXJjaCB0aGUKCXN3aXRjaGVzIHZlY3RvciBmb3Igc3dpdGNoZXMgd2hvc2UgZGVzY3JpcHRpb25zIGFyZSAiLUMiLgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IENhbGwgLVMgLS1uby1rZWVwLWdvaW5nLCBub3QgLS1kb250LWtlZXAtZ29pbmcuCglDYWxsIC1JIC0taW5jbHVkZS1kaXIsIG5vdCAtLWluY2x1ZGUtcGF0aC4KCShsb25nX29wdGlvbl9hbGlhc2VzKTogQWRkZWQgLS1uZXcgPT0gLVcsIC0tYXNzdW1lLW5ldyA9PSAtVywKCS0tYXNzdW1lLW9sZCA9PSAtbywgLS1tYXgtbG9hZCA9PSAtbCwgLS1kcnktcnVuID09IC1uLCAtLXJlY29uID09IC1uLAoJLS1tYWtlZmlsZSA9PSAtZi4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBSZW1vdmVkIGJvZ3VzICJzaWxlbnQiIGVsdC4KCShsb25nX29wdGlvbl9hbGlhc2VzKTogRGVmaW5lIG5ldyB2YXIuCgkoZGVjb2RlX3N3aXRjaGVzKTogQWRkIGxvbmdfb3B0aW9uX2FsaWFzZXMgb250byB0aGUgZW5kIG9mIHRoZSBsb25nCglvcHRpb25zIHZlY3RvciBjcmVhdGVkIGZvciBnZXRvcHRfbG9uZy4KCUxvb2sgdGhyb3VnaCBsb25nX29wdGlvbl9hbGlhc2VzIGZvciBleHRyYSBuYW1lcyB0byBsaXN0CglpbiB1c2FnZSBtZXNzYWdlLgoKU2F0IE1heSAgOSAwMDoyMTowNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogRml4ZWQgdG8gcHJvcGVybHkgbm90IHByaW50IHRoZQoJbGVhdmluZyBtZXNzYWdlIHdoZW4gd2UgaGF2ZW4ndCBwcmludGVkIHRoZSBlbnRlcmluZyBtZXNzYWdlLgoKRnJpIE1heSAgOCAyMTo1NTozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogQWRkZWQgZWx0cyBgbG9uZ19uYW1lJywKCWBkZXNjcmlwdGlvbicsIGFuZCBgYXJnZGVzYycuCgkoc3dpdGNoZXMpOiBBZGRlZCBpbml0aWFsaXplcnMgZm9yIG5ldyBtZW1iZXJzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFJld3JpdHRlbiB0byB1c2UgZ2V0b3B0X2xvbmcuCgkqIGNvbXBhdE1ha2VmaWxlIChHRVRPUFQsIEdFVE9QVF9TUkMpOiBEZWZpbmUuCgkob2Jqcywgc3Jjcyk6IEluY2x1ZGUgdGhlbS4KCgkqIGpvYi5jIChjaGlsZF9kaWVkKTogUmVuYW1lZCB0byBkZWFkX2NoaWxkcmVuOyBtYWRlIHN0YXRpYy4KCShjaGlsZF9oYW5kbGVyKTogSW5jcmVtZW50IGRlYWRfY2hpbGRyZW4gaW5zdGVhZCBvZiBzZXR0aW5nIGNoaWxkX2RpZWQuCgkocmVhcF9jaGlsZHJlbik6IERlY3JlbWVudCBkZWFkX2NoaWxkcmVuIGluc3RlYWQgb2YgY2xlYXJpbmcKCWNoaWxkX2RpZWQuICBUaGUgcG9pbnQgb2YgYWxsIHRoaXMgaXMgdG8gYXZvaWQgcHJpbnRpbmcgIndhaXRpbmcKCWZvciB1bmZpbmlzaGVkIGpvYnMiIHdoZW4gd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBibG9jay4KCVRoaXMgaGFwcGVuZWQgd2hlbiBtdWx0aXBsZSBTSUdDSExEcyBiZWZvcmUgcmVhcF9jaGlsZHJlbiB3YXMgY2FsbGVkLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBJZiBFUlIgaXMgc2V0LCBzbyB3ZSBkb24ndCBjYWxsIHN0YXJ0X2pvYgoJb24gdGhlIGNoaWxkIGJlaW5nIHJlYXBlZCwgaW5zdGVhZCBzZXQgaXRzIGNvbW1hbmRfc3RhdGUgdG8KCWNzX2ZpbmlzaGVkLgoJKHJlYXBfY2hpbGRyZW4sIGNoaWxkX2hhbmRsZXIsIG5ld19qb2IpOiBJIGFkZGVkIHNldmVyYWwKCWRlYnVnZ2luZyBwcmludGYncyB3aGlsZSBmaXhpbmcgdGhpcy4gIEkgbGVmdCB0aGVtIGluIGlmIChkZWJ1Z19mbGFnKQoJYmVjYXVzZSB0aGV5IG1heSBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGlzIHN0dWZmIGFnYWluLgoKV2VkIE1heSAgNiAyMjowMjozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiB2X2V4cG9ydCBpcyBub3QgMS4KCk1vbiBNYXkgIDQgMTc6Mjc6MzcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi45LgoKCSogdmFyaWFibGUuYyAoZXhwb3J0X2FsbF92YXJpYWJsZXMpOiBOZXcgdmFyaWFibGUuCgkodGFyZ2V0X2Vudmlyb25tZW50KTogRXhwb3J0IHZhcmlhYmxlcyB3aG9zZSBgZXhwb3J0JyBtZW1iZXIgaXMKCXZfZGVmYXVsdCBpZiBleHBvcnRfYWxsX3ZhcmlhYmxlcyBpcyBzZXQgYW5kIHRoZWlyIG5hbWVzIGFyZSBiZW5pZ24uCgkqIHZhcmlhYmxlLmg6IERlY2xhcmUgZXhwb3J0X2FsbF92YXJpYWJsZXMuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmIGV4cG9ydCBvciB1bmV4cG9ydCBpcyBnaXZlbiB3aXRoIG5vCglhcmdzLCBzZXQgb3IgY2xlYXIgZXhwb3J0X2FsbF92YXJpYWJsZXMsIHJlc3BlY3RpdmVseS4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IEV4Y2x1ZGUgTUFLRUxFVkVMIGluIHRoZSBsb29wLAoJc28gaXQgaXNuJ3QgZHVwbGljYXRlZCB3aGVuIHdlIGFkZCBpdCBhdCB0aGUgZW5kLgoKU3VuIE1heSAgMyAxNzo0NDo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi44LgoKCSogdmFyaWFibGUuaCAoc3RydWN0IHZhcmlhYmxlKTogQWRkZWQgbmV3IG1lbWJlciBgZXhwb3J0Jy4KCSogdmFyaWFibGUuYyAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IEluaXRpYWxpemUgaXQgdG8gdl9kZWZhdWx0LgoJKHRhcmdldF9lbnZpcm9ubWVudCk6IERvbid0IGNoZWNrIGZvciAuTk9FWFBPUlQuCglFeHBvcnQgdmFyaWFibGVzIHdob3NlIGBleHBvcnQnIG1lbWJlciBpcyB2X2RlZmF1bHQgYW5kIHRoYXQgd291bGQKCWhhdmUgYmVlbiBleHBvcnRlZCB1bmRlciAuTk9FWFBPUlQsIGFuZCB2YXJpYWJsZXMgd2hvc2UgYGV4cG9ydCcKCW1lbWJlciBpcyB2X2V4cG9ydC4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFJldHVybiB0aGUgdmFyaWFibGUgZGVmaW5lZC4KCSogdmFyaWFibGUuaCAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBDaGFuZ2VkIGRlY2wuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlY29nbml6ZSBgZXhwb3J0JyBhbmQgYHVuZXhwb3J0JyBkaXJlY3RpdmVzLgoKRnJpIE1heSAgMSAxMTozOTozOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pIFtQT1NJWF06IFJldmVyc2VkIGFyZ3MgdG8gc2lnYWRkc2V0LgoKVGh1IEFwciAzMCAxNzozMzozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIFtQT1NJWCB8fCAhVVNHXSAodW5ibG9ja19zaWdzKTogTmV3IGZuLgoJKHN0YXJ0X2pvYik6IEJsb2NrIHNpZ25hbHMgYmVmb3JlIGZvcmtpbmcuCgkobmV3X2pvYik6IFVuYmxvY2sgc2lnbmFscyBhZnRlciBwdXR0aW5nIHRoZSBuZXcgY2hpbGQgb24gdGhlIGNoYWluLgoJKiBtYWluLmMgKG1haW4pIFtQT1NJWF06IFVzZSBzaWdzZXRfdCBmYXRhbF9zaWduYWxfc2V0IGluc3RlYWQgb2YKCWludCBmYXRhbF9zaWduYWxfbWFzay4KCgkqIGxvYWQuYyBbc2dpXSAoTERBVl9DVlQpOiBEZWZpbmUuCgpXZWQgQXByIDI5IDE3OjE1OjU5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi43LgoKCSogbG9hZC5jIChsb2FkX2F2ZXJhZ2UpIFtzZ2ldOiBDbGVhciB0aGUgaGlnaCBiaXQgb2YgdGhlIGFkZHJlc3MKCWZyb20gdGhlIHN5bWJvbCB0YWJsZSBiZWZvcmUgbG9va2luZyBpdCB1cCBpbiBrbWVtLgoKCSogbWlzYy5jIChmYXRhbCwgbWFrZWZpbGVfZmF0YWwpOiBQdXQgKioqIGluIGZhdGFsIGVycm9yIG1lc3NhZ2VzLgoJKHJlbWFrZV9maWxlKTogTm8gbG9uZ2VyIG5lZWRlZCBpbiBtZXNzYWdlIGhlcmUuCgoJKiBtYWluLmMgKGRpZSk6IENhbGwgcmVhcF9jaGlsZHJlbiB3aXRoIEJMT0NLPT0xLgoKVHVlIEFwciAyOCAyMDo0NDozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKGZyZWVydWxlKTogRG9uJ3Qgc2V0IExBU1RSVUxFLT5uZXh0IGlmIExBU1RSVUxFIGlzIG5pbC4KClN1biBBcHIgMjYgMTU6MDk6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IEluaXRpYWxpemUgTEFTVFJVTEUgdG8gbmlsLAoJbm90IHRvIGhlYWQgb2YgY2hhaW4uICBFeHRyYWN0IG5leHQgcHRyIGJlZm9yZSB3ZSBtaWdodCBkbwoJZnJlZXJ1bGUsIGFuZCB1c2UgdGhhdCBmb3IgbmV4dCBpdGVyYXRpb24uCgkoZnJlZXJ1bGUpOiBTdGlsbCBkbyBuZXh0IHB0ciBmcm9iYmluZyBpZiBMQVNUUlVMRSBpcyBuaWwuCgpUdWUgQXByIDIxIDAzOjE2OjI5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNoaWxkX2Vycm9yKTogUmVtb3ZlZCBleHRyYSAlcyBmcm9tIGVycm9yIG1zZyBmb3JtYXQuCgoJKiBWZXJzaW9uIDMuNjIuNi4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3Qgc3RhcnQgbGF0ZXIgY29tbWFuZHMgaW4gYSBzZXF1ZW5jZQoJaWYgRVJSIGlzIG5vbnplcm8uCgoJKiBqb2IuYyAobmV3X2pvYik6IEFsd2F5cyBjYWxsIHJlYXBfY2hpbGRyZW4gd2l0aCBCTE9DSz09MCBmaXJzdCB0aGluZy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogTmV3IGZ1bmN0aW9uOyB3b3JrIHRoYXQgdXNlZCB0byBiZSBkb25lIGluCgljaGlsZF9oYW5kbGVyLgoJKGNoaWxkX2RpZWQpOiBOZXcgZ2xvYmFsIHZhci4KCShjaGlsZF9oYW5kbGVyKTogTm93IGp1c3Qgc2V0cyBjaGlsZF9kaWVkLgoJKHdhaXRfZm9yX2NoaWxkcmVuKTogUmVtb3ZlZC4KCSh1bmtub3duX2NoaWxkcmVuX3Bvc3NpYmxlLCBibG9ja19zaWduYWxzLCB1bmJsb2NrX3NpZ25hbHMsCglwdXNoX3NpZ25hbHNfYmxvY2tlZF9wLCBwb3Bfc2lnbmFsc19ibG9ja2VkX3ApOiBSZW1vdmVkLgoJKGNoaWxkX2V4ZWN1dGVfam9iKTogUmVtb3ZlZCBjYWxsIHRvIHVuYmxvY2tfc2lnbmFscy4KCShuZXdfam9iKTogUmVtb3ZlZCBjYWxscyB0byBwdXNoX3NpZ25hbHNfYmxvY2tlZF9wIGFuZAoJcG9wX3NpZ25hbHNfYmxvY2tlZF9wLgoJKiBqb2IuaDogRGVjbGFyZSByZWFwX2NoaWxkcmVuLCBub3Qgd2FpdF9mb3JfY2hpbGRyZW4uCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIGpvYi5jIChuZXdfam9iKSwKCWxvYWQuYyBbTERBVl9CQVNFRF0gKHdhaXRfdG9fc3RhcnRfam9iKSwgbWFpbi5jIChkaWUpLAoJcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKSwgZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKToKCUNoYW5nZWQgd2FpdF9mb3JfY2hpbGRyZW4gY2FsbHMgdG8gcmVhcF9jaGlsZHJlbi4KCVNvbWUgbmVlZGVkIHRvIGJlIGxvb3BzIHRvIHdhaXQgZm9yIGFsbCBjaGlsZHJlbiB0byBkaWUuCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIG1haW4uYyAobWFpbiwKCWxvZ193b3JraW5nX2RpcmVjdG9yeSksIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6IFJlbW92ZWQgY2FsbHMKCXRvIHB1c2hfc2lnbmFsc19ibG9ja2VkX3AgYW5kIHBvcF9zaWduYWxzX2Jsb2NrZWRfcC4KCSogam9iLmg6IFJlbW92ZWQgZGVjbHMuCgoJKiBqb2IuaDogQWRkZWQgY29weXJpZ2h0IG5vdGljZS4KCldlZCBBcHIgMTUgMDI6MDI6NDAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IE5vICoqKiBmb3IgaWdub3JlZCBlcnJvci4KClR1ZSBBcHIgMTQgMTg6MzE6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGltcGxpY2l0LmMgKERFQlVHUDIpOiBVc2UgZG8gLi4uIHdoaWxlICgwKSBpbnN0ZWFkIG9mIGlmIC4uLiBlbHNlIHRvCglhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBEb24ndCByZW1vdmUgLi8gd2hlbiBpdCBpcyBmb2xsb3dlZCBieSBhCglibGFuay4KCk1vbiBBcHIgMTMgMjE6NTY6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCAoREVCVUdQUik6IFVzZSBkbyAuLi4gd2hpbGUgKDApIGluc3RlYWQgb2YgaWYgLi4uIGVsc2UgdG8KCWF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogUnVuIGZpbGVfbXRpbWUgb24gdGhlIGFsc29fbWFrZQoJZmlsZXMsIHNvIHZwYXRoX3NlYXJjaCBjYW4gaGFwcGVuLgoKCSogR05VbWFrZWZpbGUgKHRlc3RzKTogVXNlIHBlcmwgdGVzdCBzdWl0ZSBmcm9tIGNzYUBzdy5zdHJhdHVzLmNvbS4KCShhbHBoYS1maWxlcyk6IEluY2x1ZGUgdGVzdCBzdWl0ZSB0YXIgZmlsZS4KCkZyaSBBcHIgIDMgMDA6NTA6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuNS4KCldlZCBBcHIgIDEgMDU6MzE6MTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSwgdXBkYXRlX2ZpbGVfMSk6IERvIGNoZWNrX3JlbmFtZWQgb24gZWx0cwoJb2YgZGVwIGNoYWlucyB3aGVuIHRyYXZlcnNpbmcgdGhlbS4gIFNvbWV0aGluZyB1bnJlbGF0ZWQgbWlnaHQgaGF2ZQoJcmVuYW1lZCBvbmUgb2YgdGhlIGZpbGVzIHRoZSBkZXAgY2hhaW4gcG9pbnRzIHRvLgoKCSogZmlsZS5jIChyZW5hbWVfZmlsZSk6IElmIEZJTEUgaGFzIGJlZW4gcmVuYW1lZCwgZm9sbG93IGl0cwoJYHJlbmFtZWQnIHB0ciwgc28gd2UgZ2V0IHRvIHRoZSBmaW5hbCByZWFsIEZJTEUuICBVc2luZyB0aGUgcmVuYW1lZAoJb25lcyBsb3NlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBpbiB0aGUgaGFzaCB0YWJsZSwgc28gdGhlIHJlbW92YWwKCWNvZGUgbG9vcHMgaW5maW5pdGVseS4KCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogQ2xvYmJlciBudWxsIHRlcm1pbmF0b3IgaW50bwoJTUFLRUZJTEVTIGV4cGFuc2lvbiwgc28gc3RyaW5nIHBhc3NlZCB0byByZWFkX21ha2VmaWxlIGlzIHByb3Blcmx5Cgl0ZXJtaW5hdGVkLgoKTW9uIE1hciAzMCAyMDoxODowMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6ICQqIGZvciBhcmNoaXZlIG1lbWJlciB3aXRoCglleHBsaWNpdCBjbWRzIGlzIHN0ZW0gb2YgbWVtYmVyLCBub3Qgb2Ygd2hvbGUgYGxpYihtZW1iZXIpJy4KClRodSBNYXIgMjYgMTU6MjQ6MzggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjQuCgpUdWUgTWFyIDI0IDA1OjIwOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKG5ld19wYXR0ZXJuX3J1bGUpOiBSdWxlcyBhcmUgaWRlbnRpY2FsIG9ubHkgaWYgYWxsIHRoZWlyCgl0YXJnZXRzIG1hdGNoIChyZWdhcmRsZXNzIG9mIG9yZGVyKS4KCldlZCBNYXIgMTEgMTM6NDk6NTQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAocmVtYWtlX2ZpbGUpOiBDaGFuZ2VkIGVycm9yICJubyB3YXkgdG8gbWFrZSIgdG8gIm5vCglydWxlIHRvIG1ha2UiLiAgRmlhdCBIdWdoLgoKCSogbWFrZS50ZXhpbmZvIChMYXN0IFJlc29ydCk6IERlc2NyaWJlICU6OiBydWxlcyBhbmQgbmV3IC5ERUZBVUxUCgliZWhhdmlvci4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogT25seSB1c2UgLkRFRkFVTFQgY21kcyBpZiBGSUxFIGlzIG5vdCBhCgl0YXJnZXQuCgpUdWUgTWFyIDEwIDE4OjEzOjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiByZW1vdGUtc3R1Yi5jLCByZW1vdGUtY3N0bXMuYyAoc3RhcnRfcmVtb3RlX2pvYik6IFRha2UgbmV3IGFyZywKCWVudmlyb25tZW50IHRvIHBhc3MgdG8gY2hpbGQuCgkqIGpvYi5jIChzdGFydF9qb2IpOiBQYXNzIGl0LgoKTW9uIE1hciAgOSAxOTowMDoxMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChlbnRlcl9maWxlKTogQWxzbyBzdHJpcCAuL3MgaGVyZSwgdG8gZ2V0IGNvbW1hbmQtbGluZQoJdGFyZ2V0IG5hbWVzLgoKCSogcmVtb3RlLWNzdG1zLmM6IEFkZCBjb21tZW50IHRlbGxpbmcgcGVvcGxlIHRvIGxlYXZlIG1lIGFsb25lLgoKCSogY29tcGF0TWFrZWZpbGUgKG1hbnBhZ2UgaW5zdGFsbCk6IFJlbW92ZSB0YXJnZXQgYmVmb3JlIGNvcHlpbmcuCgpUdWUgTWFyICAzIDE4OjQzOjIxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKE1pc3NpbmcpOiBSZW5hbWVkIHRvICJJbmNvbXBhdGliaWxpdGllcyBhbmQgLi4uIi4KCUFkZGVkIHBhcmFncmFwaCBkZXNjcmliaW5nICQ/IGluY29tcGF0aWJpbGl0eSB3aXRoIFVuaXggYW5kIFBPU0lYLjIuCgpTdW4gTWFyICAxIDE1OjUwOjU0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogRG9uJ3QgZGVjbGFyZSBmb3JrIG9yIHBpcGUuCglVc2UgdmZvcmsgaW5zdGVhZCBvZiBmb3JrLgoKVHVlIEZlYiAyNSAyMjowNTozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChDaGFpbmVkIFJ1bGVzKTogQ2xhcmlmeSAuUFJFQ0lPVVMgdG8gc2F2ZQoJaW50ZXJtZWRpYXRlIGZpbGVzLgoKCSogbG9hZC5jIFtzdW5dIChMREFWX0NWVCk6IERlZmluZSB0byBkaXZpZGUgYnkgRlNDQUxFLgoKU3VuIEZlYiAxNiAwMjowNToxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjMuCgpTYXQgRmViIDE1IDE3OjEyOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobWFrZWluZm8pOiBVc2UgZW1hY3MgYmF0Y2gtdGV4aW5mby1mb3JtYXQgZm4uCgpGcmkgRmViIDE0IDAwOjExOjU1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDb3JyZWN0bHkgaGFuZGxlIGRlZmluZSAmIGVuZGVmIGluIGlmZGVmcy4KCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogUGFzcyBhcmcgZm9yICVzIGluIGVycm9yIG1zZy4KCgkqIG1haW4uYyAobWFpbikgW19fSUJNUjIsIFBPU0lYXTogVXNlIGNvcnJlY3QgKGEgbGEgVVNHcjMpIHNldHZidWYKCWNhbGwuCgpXZWQgRmViIDEyIDEyOjA3OjM5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKExpYnJhcmllcy9TZWFyY2gpOiBTYXkgaXQgZG9lcyAvdXNyL2xvY2FsL2xpYiB0b28uCgpTdW4gRmViICA5IDIzOjA2OjI0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGVjayBmb3IgZXh0cmFuZW91cyBgZW5kZWYnIHdoZW4gaWdub3JpbmcuCgpUaHUgRmViICA2IDE2OjE1OjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMi4KClR1ZSBGZWIgIDQgMjA6MDQ6NDYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQ29ycmVjdGx5IGlnbm9yZQoJd2hpdGVzcGFjZSBhZnRlciBiYWNrc2xhc2gtTkwuCgpGcmkgSmFuIDMxIDE4OjMwOjA1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZTogSWdub3JlIGVycm9ycyBmcm9tIGNoZ3JwIGFuZCBjaG1vZCB3aGVuIGluc3RhbGxpbmcuCgpXZWQgSmFuIDI5IDE4OjEzOjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IFdoZW4gc2V0dGluZyBNQUtFTEVWRUwgaW4gdGhlIGVudiB0byByZS1leGVjLAoJYWxsb2NhdGUgc3BhY2Ugc28gYXMgbm90IHRvIGNsb2JiZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBvbGQgc3RyaW5nLgoKCSogbWFrZS5oIFtIQVZFX0FMTE9DQV9IXTogSW5jbHVkZSA8YWxsb2NhLmg+CgkqIGNvbXBhdE1ha2VmaWxlIChkZWZpbmVzKTogRG9jdW1lbnQgSEFWRV9BTExPQ0FfSC4KCk1vbiBKYW4gMjAgMTM6NDA6MDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtWRk9SS19NSVNTSU5HXTogVXNlIGZvcmsgaW5zdGVhZC4KCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBEb2N1bWVudCBzYW1lLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBEb24ndCBjcmVhdGUgYW4gZW1wdHkKCWFyZyBpZiBiYWNrc2xhc2gtTkwgaXMgYXQgYmVnaW5uaW5nIG9mIHdvcmQuCgpTdW4gSmFuIDE5IDE2OjI2OjUzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyBbREdVWF06IENhbGwgc2V0dmJ1ZiBhcyBmb3IgVVNHcjMuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE5vdGljZSBjb3JyZWN0bHkgdGhhdAoJYmFja3NsYXNoLU5MIGlzIHRoZSBlbmQgb2YgdGhlIGFyZyAoYmVjYXVzZSBpdCBpcyByZXBsYWNlZCB3aXRoIGEKCXNwYWNlKS4KClRodSBKYW4gMTYgMTg6NDI6MzggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBJZiBTSEVMTCBpcyBuaWwsIHNldCBpdAoJdG8gZGVmYXVsdF9zaGVsbCBiZWZvcmUgcHJvY2VlZGluZy4KCgkqIG1ha2UuaCBbc2dpXTogTm8gYWxsb2NhLmgsIGFmdGVyIGFsbC4KCldlZCBKYW4gMTUgMTI6MzA6MDQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChtdWx0aV9nbG9iKTogQ29ucyB1cCB0aGUgY2hhaW4gb2YgdGhlIHJlc3VsdHMgb2YgZ2xvYgoJZnJvbSBiYWNrIHRvIGZyb250LCBzbyBpdCBjb21lcyBvdXQgaW4gZm9yd2FyZCBvcmRlci4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRG9uJ3QgZWF0IGNoYXIgZm9sbG93aW5nCgliYWNrc2xhc2gtTkwuCgpNb24gSmFuIDEzIDE5OjE2OjU2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW3VsdHJpeF06IEdFVD1nZXQsIGxpa2UgVVNHLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBSZW1vdmUgdGFicyBmb2xsb3dpbmcKCWJhY2tzbGFzaC1OTCBjb21ib3MgaW4gdGhlIGlucHV0IGxpbmUsIHNvIHRoZXkgZG9uJ3Qgc2hvdyB1cCB3aGVuCgl0aGF0IGxpbmUgaXMgcHJpbnRlZC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERvbid0IGNvbGxhcHNlX2NvbnRpbnVhdGlvbnMgdGhlIGxpbmUgb24KCWlucHV0OyBkbyBpdCBvbiB0aGUgY29weSB3ZSBkbyByZW1vdmVfY29tbWVudHMgb24uCglGb3IgcnVsZSBsaW5lcywgY29sbGFwc2VfY29udGludWF0aW9ucyB0aGUgbGluZSBhZnRlciBjaG9wcGluZwoJIjtjbWRzIiBvZmYgdGhlIGVuZCwgc28gd2UgZG9uJ3QgZWF0IGNvbnRzIGluIHRoZSBjbWRzLgoJR2l2ZSBlcnJvciBmb3IgIjtjbWRzIiB3aXRoIG5vIHJ1bGUuCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRWF0IGJhY2tzbGFzaC1OTCBjb21ib3MKCXdoZW4gY29uc3RydWN0aW5nIHRoZSBsaW5lIHRvIHJlY3Vyc2Ugb24gZm9yIHNsb3csIHRvby4KClNhdCBKYW4gMTEgMDI6MjA6MjcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChlbnRlcl9maWxlKTogRG9uJ3Qgc3RyaXAgbGVhZGluZyBgLi8ncy4KCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFRha2UgbmV3IGFyZyBTVFJJUDsgaWYgbm9uemVybywgZG8gaXQgaGVyZS4KCSogZGVmYXVsdC5jIChzZXRfZGVmYXVsdF9zdWZmaXhlcyksIGZ1bmN0aW9uLmMgKHN0cmluZ19nbG9iKSwKCXJlYWQuYyAocmVhZF9tYWtlZmlsZSksIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBDaGFuZ2UgY2FsbGVycy4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfSUJNUjJdOiBGQz14bGYKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVHVybiBiYWNrc2xhc2gtTkwgYW5kCglmb2xsb3dpbmcgd2hpdGVzcGFjZSBpbnRvIGEgc2luZ2xlIHNwYWNlLCByYXRoZXIgdGhhbiBqdXN0IGVhdGluZwoJdGhlIGJhY2tzbGFzaC4KCgkqIG1ha2UudGV4aW5mbyAoQ29weWluZyk6IEBpbmNsdWRlIGdwbC50ZXhpbmZvLCByYXRoZXIgdGhhbgoJZHVwbGljYXRpbmcgaXRzIGNvbnRlbnRzLgoKRnJpIE5vdiAgOCAyMDowNjowMyAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBNYWtlIHN1cmUgbm90IHRvIGJvdGhlcgoJcHJvY2Vzc2luZyBhbiBlbXB0eSBsaW5lLgoKCSogVmVyc2lvbiAzLjYyLjAuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFsd2F5cyByZWN1cnNlIGZvciBzbG93OwoJc2ltcGxlIGNhc2UgZGlkbid0IGhhbmRsZSBmaW5kaW5nIG5ld2xpbmVzLgoKVHVlIE5vdiAgNSAxODo1MToxMCAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBTZXQgUkVTVFAgcHJvcGVybHkgd2hlbgoJc2xvdzsgZG9uJ3QgXGlmeSBwYXN0IGEgbmV3bGluZS4KCkZyaSBOb3YgIDEgMTk6MzQ6MjggMTk5MSAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbc2dpXTogI2luY2x1ZGUgPGFsbG9jYS5oPi4KCgwKClNlZSBDaGFuZ2VMb2cuMSBmb3IgZWFybGllciBjaGFuZ2VzLgo=