ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0MjkxNwotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTI0IEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMiBOZXN0IExhYnMsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlIGZpbGUgZm9yIHBvcHQsIGEgbGlicmFyeSBmb3IgcGFyc2luZworIyAgICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCisjCisKK0J1aWxkQ29uZmlnU3BlY2lhbGl6ZWQJOj0gTm8KK0J1aWxkUHJvZHVjdFNwZWNpYWxpemVkCTo9IE5vCisKK2luY2x1ZGUgcHJlLm1haworCitQYWNrYWdlTmFtZQkJOj0gcG9wdAorCitQYWNrYWdlRXh0ZW5zaW9uCTo9IHRhci5negorUGFja2FnZVNlcGFyYXRvcgk6PSAtCisKK1BhY2thZ2VQYXRjaEFyZ3MJOj0gLXAxCisKK1BhY2thZ2VBcmNoaXZlCQk6PSAkKFBhY2thZ2VOYW1lKS4kKFBhY2thZ2VFeHRlbnNpb24pCitQYWNrYWdlU291cmNlRGlyCTo9ICQoUGFja2FnZU5hbWUpJChQYWNrYWdlU2VwYXJhdG9yKSQoUGFja2FnZVZlcnNpb24pCisKK1BhY2thZ2VCdWlsZE1ha2VmaWxlCT0gJChjYWxsIEdlbmVyYXRlQnVpbGRQYXRocyxNYWtlZmlsZSkKKworTGljZW5zZVNvdXJjZUZpbGUJOj0gJChQYWNrYWdlU291cmNlRGlyKS9DT1BZSU5HCisKK0NsZWFuUGF0aHMJCSs9ICQoUGFja2FnZUxpY2Vuc2VGaWxlKQorCithbGw6ICQoUGFja2FnZURlZmF1bHRHb2FsKQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGxpY2Vuc2UgY29udGVudHMuCisKKyQoTGljZW5zZVNvdXJjZUZpbGUpOiBzb3VyY2UKKworJChQYWNrYWdlTGljZW5zZUZpbGUpOiAkKExpY2Vuc2VTb3VyY2VGaWxlKQorCSQoY29weS1yZXN1bHQpCisKKyMgRXh0cmFjdCB0aGUgc291cmNlIGZyb20gdGhlIGFyY2hpdmUgYW5kIGFwcGx5IHBhdGNoZXMsIGlmIGFueS4KKworJChQYWNrYWdlU291cmNlRGlyKTogJChQYWNrYWdlQXJjaGl2ZSkgJChQYWNrYWdlUGF0Y2hQYXRocykKKwkkKGV4cGFuZC1hbmQtcGF0Y2gtcGFja2FnZSkKKworIyBQcmVwYXJlIHRoZSBzb3VyY2VzLgorCisuUEhPTlk6IHNvdXJjZQorc291cmNlOiB8ICQoUGFja2FnZVNvdXJjZURpcikKKworIyBQYXRjaCB0aGUgc291cmNlcywgaWYgbmVjZXNzYXJ5LgorCisuUEhPTlk6IHBhdGNoCitwYXRjaDogc291cmNlCisKKyMgR2VuZXJhdGUgdGhlIHBhY2thZ2UgYnVpbGQgbWFrZWZpbGUuCisKKyQoUGFja2FnZUJ1aWxkTWFrZWZpbGUpOiB8ICQoUGFja2FnZVNvdXJjZURpcikgJChCdWlsZERpcmVjdG9yeSkgJChSZXN1bHREaXJlY3RvcnkpCisJJChWZXJib3NlKWNkICQoQnVpbGREaXJlY3RvcnkpICYmIFwKKwkkKENVUkRJUikvJChQYWNrYWdlU291cmNlRGlyKS9jb25maWd1cmUgXAorCUNDPSIkKENDKSIgQ1hYPSIkKENYWCkiIEFSPSQoQVIpIE5NPSQoTk0pIFJBTkxJQj0kKFJBTkxJQikgU1RSSVA9JChTVFJJUCkgXAorCUlOU1RBTEw9IiQoSU5TVEFMTCkgJChJTlNUQUxMRkxBR1MpIiBcCisJLS1idWlsZD0kKEhvc3RUdXBsZSkgXAorCS0taG9zdD0kKFRhcmdldFR1cGxlKSBcCisJLS1wcmVmaXg9L3VzciBcCisJLS1zeXNjb25mZGlyPS9ldGMgXAorCS0tbG9jYWxzdGF0ZWRpcj0vdmFyIFwKKwktLWRpc2FibGUtc3RhdGljCisKKyMgQ29uZmlndXJlIHRoZSBzb3VyY2UgZm9yIGJ1aWxkaW5nLgorCisuUEhPTlk6IGNvbmZpZ3VyZQorY29uZmlndXJlOiBzb3VyY2UgJChQYWNrYWdlQnVpbGRNYWtlZmlsZSkKKworIyBCdWlsZCB0aGUgc291cmNlLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorCisuUEhPTlk6IGJ1aWxkCitidWlsZDogY29uZmlndXJlCisJJChWZXJib3NlKXVuc2V0IE1BS0VGTEFHUyAmJiBcCisJJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkRGlyZWN0b3J5KSBcCisJYWxsCisKKyMgU3RhZ2UgdGhlIGJ1aWxkIHRvIGEgdGVtcG9yYXJ5IGluc3RhbGxhdGlvbiBhcmVhLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorIworIyBXZSBleHBsaWN0bHkgcmVtb3ZlICdsaWJwb3B0LmxhJyBiZWNhdXNlIHNvbWUgcGFja2FnZXMgdGhhdCBkZXBlbmQKKyMgb24gZXhwYXQgdXNlIGxpYnRvb2wuIElmIGxpYnRvb2wgZmluZHMgYSAnKi5sYScgZmlsZSBmb3IgYSBsaWJyYXJ5LAorIyBpdCB1c2VzIHRoZSB2YWx1ZSBvZiAnbGliZGlyPTxkaXI+JyBpdCBmaW5kcy4gSW4gb3VyIGNhc2UsIHNpbmNlCisjICctLXByZWZpeD0vdXNyJyB0aGlzIHZhbHVlIGlzICcvdXNyL2xpYicuIEl0IHRoZW4gcmVzb2x2ZXMgJy1sZXhwYXQnCisjIHRvICcvdXNyL2xpYi9saWJwb3B0LnNvJy4gSW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgdGhpcworIyBpcyBsaWtlbHkgdG8gYmUgbmVpdGhlciB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlIG5vciB0aGUgcmlnaHQKKyMgdmVyc2lvbiB0byBsaW5rIGFnYWluc3QuIEluIHNob3J0LCB3ZSBsb3NlLgorIworIyBXZSBjb3VsZCBhbHNvIGhhbmRsZSB0aGlzIGJ5IHJlbW92aW5nIERFU1RESVIgYW5kIHNldHRpbmcgdGhlIHByZWZpeAorIyB0byAkKFJlc3VsdERpcmVjdG9yeSk7IGhvd2V2ZXIsIHRoYXQgcmVzdWx0cyBpbiBsaWJ0b29sIGhhcmQtY29kaW5nCisjICQoUmVzdWx0RGlyZWN0b3J5KSBhcyB0aGUgUlBBVEggaW4gdGhlIGxpbmtlZCBleGVjdXRhYmxlcyB3aGljaCBpcworIyBOT1Qgd2hhdCB3ZSB3YW50IGVpdGhlci4gV2UgbG9zZSBhZ2Fpbi4KKyMKKyMgQnkgcmVtb3ZpbmcgdGhlICcqLmxhJyBmaWxlLCB3ZSB3aW4gYnkgZW5zdXJpbmcgbmVpdGhlciBhCisjIG1pc2RpcmVjdGVkIGxpbmsgbm9yIGFuIFJQQVRILgorCisuUEhPTlk6IHN0YWdlCitzdGFnZTogYnVpbGQgfCAkKFJlc3VsdERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpdW5zZXQgTUFLRUZMQUdTICYmIFwKKwkkKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGREaXJlY3RvcnkpIFwKKwlERVNURElSPSQoUmVzdWx0RGlyZWN0b3J5KSBcCisJaW5zdGFsbAorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCx1c3IvbGliL2xpYnBvcHQubGEpCisKK2NsZWFuOgorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUGFja2FnZVNvdXJjZURpcikKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUmVzdWx0RGlyZWN0b3J5KQorCitpbmNsdWRlIHBvc3QubWFrCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvQUJPVVQtTkxTIGIvcG9wdC0xLjE2L0FCT1VULU5MUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JjNzJlCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L0FCT1VULU5MUwpAQCAtMCwwICsxLDEwNjggQEAKKzEgTm90ZXMgb24gdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0ZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKK2Egd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAordG9nZXRoZXIsIHNvIHRoYXQgZnJlZSBzb2Z0d2FyZSB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55CitsYW5ndWFnZXMuICBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpcgorbWVzc2FnZXMuCisKKyAgIElmIHlvdSBmb3VuZCB0aGlzIGBBQk9VVC1OTFMnIGZpbGUgaW5zaWRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgbWF5Cithc3N1bWUgdGhhdCB0aGUgZGlzdHJpYnV0ZWQgcGFja2FnZSBkb2VzIHVzZSBHTlUgYGdldHRleHQnIGludGVybmFsbHksCitpdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyBfbm90XworbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKK3RoaXMgcGFja2FnZSB3aXRoIG1lc3NhZ2VzIHRyYW5zbGF0ZWQuCisKKyAgIEluc3RhbGxlcnMgd2lsbCBmaW5kIGhlcmUgc29tZSB1c2VmdWwgaGludHMuICBUaGVzZSBub3RlcyBhbHNvCitleHBsYWluIGhvdyB1c2VycyBzaG91bGQgcHJvY2VlZCBmb3IgZ2V0dGluZyB0aGUgcHJvZ3JhbXMgdG8gdXNlIHRoZQorYXZhaWxhYmxlIHRyYW5zbGF0aW9ucy4gIFRoZXkgdGVsbCBob3cgcGVvcGxlIHdhbnRpbmcgdG8gY29udHJpYnV0ZSBhbmQKK3dvcmsgb24gdHJhbnNsYXRpb25zIGNhbiBjb250YWN0IHRoZSBhcHByb3ByaWF0ZSB0ZWFtLgorCisgICBXaGVuIHJlcG9ydGluZyBidWdzIGluIHRoZSBgaW50bC8nIGRpcmVjdG9yeSBvciBidWdzIHdoaWNoIG1heSBiZQorcmVsYXRlZCB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91IHNob3VsZCB0ZWxsIGFib3V0IHRoZSB2ZXJzaW9uIG9mCitgZ2V0dGV4dCcgd2hpY2ggaXMgdXNlZC4gIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlCitgaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KKworMS4xIFF1aWNrIGNvbmZpZ3VyYXRpb24gYWR2aWNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91CitzaG91bGQgY29uZmlndXJlIGl0IHVzaW5nCisKKyAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKwordG8gZm9yY2UgdXNhZ2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzCitwYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gd2hlcmUgdGhpcyBwYWNrYWdlIGlzIGJlaW5nIGluc3RhbGxlZC4gIFNvIGZhciwgb25seQordGhlIGBnZXR0ZXh0JyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIEMgbGlicmFyeSB2ZXJzaW9uIDIgcHJvdmlkZXMgYXMKK21hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzLCBtZXNzYWdlIGluaGVyaXRhbmNlLCBhdXRvbWF0aWMKK2NoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCitJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvbiB0b3AKK29mIGEgYGNhdGdldHMnIGltcGxlbWVudGF0aW9uLiAgRnV0dXJlIHZlcnNpb25zIG9mIEdOVSBgZ2V0dGV4dCcgd2lsbAordmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKK3RvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisKKyAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCit5b3UgaGF2ZSBpbnN0YWxsZWQgYSByZWNlbnQgY29weSBvZiB0aGUgR05VIGdldHRleHQgcGFja2FnZSB3aXRoIHRoZQoraW5jbHVkZWQgYGxpYmludGwnLgorCisxLjIgSU5TVEFMTCBNYXR0ZXJzCis9PT09PT09PT09PT09PT09PT09CisKK1NvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcwordGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4gIE1vc3Qgc3VjaAorcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93biB3YXlzIHRvCitpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisKKyAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgorbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5Citwcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBub3QsIHRoZSBpbmNsdWRlZCBHTlUKK2BnZXR0ZXh0JyBsaWJyYXJ5IHdpbGwgYmUgdXNlZC4gIFRoaXMgbGlicmFyeSBpcyB3aG9sbHkgY29udGFpbmVkCit3aXRoaW4gdGhpcyBwYWNrYWdlLCB1c3VhbGx5IGluIHRoZSBgaW50bC8nIHN1YmRpcmVjdG9yeSwgc28gcHJpb3IKK2luc3RhbGxhdGlvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzIF9ub3RfIHJlcXVpcmVkLgorSW5zdGFsbGVycyBtYXkgdXNlIHNwZWNpYWwgb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nCit0aGUgZGVmYXVsdCBiZWhhdmlvdXIuICBUaGUgY29tbWFuZHM6CisKKyAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKyAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scworCit3aWxsLCByZXNwZWN0aXZlbHksIGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCitpbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKK190b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorCisgICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgorY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCitwcm9iYWJseSBkZXRlY3QgdGhlIHByZXZpb3VzbHkgYnVpbHQgYW5kIGluc3RhbGxlZCBgbGliaW50bC5hJyBmaWxlIGFuZAord2lsbCBkZWNpZGUgdG8gdXNlIHRoaXMuICBUaGlzIG1pZ2h0IG5vdCBiZSBkZXNpcmFibGUuICBZb3Ugc2hvdWxkIHVzZQordGhlIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4gIEkuZS4gaWYgdGhlIGZpbGUKK2BpbnRsL1ZFUlNJT04nIHNob3dzIHRoYXQgdGhlIGxpYnJhcnkgd2hpY2ggY29tZXMgd2l0aCB0aGlzIHBhY2thZ2UgaXMKK21vcmUgcmVjZW50LCB5b3Ugc2hvdWxkIHVzZQorCisgICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0CisKK3RvIHByZXZlbnQgYXV0by1kZXRlY3Rpb24uCisKKyAgIFRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbgorYW5kIHRoZXJlZm9yZSBpdCB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGV2ZW4gYW4KK2VtdWxhdGlvbiBvZiBgZ2V0dGV4dCcgb24gdG9wIG9mIGBjYXRnZXRzJyBjb3VsZCBub3QgcHJvdmlkZSBhbGwgdGhlCitleHRlbnNpb25zIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuCisKKyAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIHVzdWFsbHkgaGF2ZSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCitMTCBnaXZlcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgY29kZSBpZGVudGlmeWluZyB0aGUgbGFuZ3VhZ2UuICBVbmxlc3MKK3RyYW5zbGF0aW9ucyBoYXZlIGJlZW4gZm9yYmlkZGVuIGF0IGBjb25maWd1cmUnIHRpbWUgYnkgdXNpbmcgdGhlCitgLS1kaXNhYmxlLW5scycgc3dpdGNoLCBhbGwgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBhcmUgaW5zdGFsbGVkCit0b2dldGhlciB3aXRoIHRoZSBwYWNrYWdlLiAgSG93ZXZlciwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBMSU5HVUFTJworbWF5IGJlIHNldCwgcHJpb3IgdG8gY29uZmlndXJhdGlvbiwgdG8gbGltaXQgdGhlIGluc3RhbGxlZCBzZXQuCitgTElOR1VBUycgc2hvdWxkIHRoZW4gY29udGFpbiBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHR3by1sZXR0ZXIKK2NvZGVzLCBzdGF0aW5nIHdoaWNoIGxhbmd1YWdlcyBhcmUgYWxsb3dlZC4KKworMS4zIFVzaW5nIFRoaXMgUGFja2FnZQorPT09PT09PT09PT09PT09PT09PT09PQorCitBcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQorb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQorYExMX0NDJyBjb21iaW5hdGlvbi4gIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSB0aGUgYExDX0FMTCcgb3Igc29tZSBvdGhlcgorYExDX3h4eCcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCwgeW91IHNob3VsZCB1bnNldCB0aGVtIGJlZm9yZQorc2V0dGluZyBgTEFORycsIG90aGVyd2lzZSB0aGUgc2V0dGluZyBvZiBgTEFORycgd2lsbCBub3QgaGF2ZSB0aGUKK2Rlc2lyZWQgZWZmZWN0LiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLCBhbmQKK2BDQycgaXMgYW4gSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUuICBGb3IgZXhhbXBsZSwgbGV0J3MKK3N1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuIGFuZCBsaXZlIGluIEdlcm1hbnkuICBBdCB0aGUgc2hlbGwKK3Byb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAorYGV4cG9ydCBMQU5HOyBMQU5HPWRlX0RFJyAoaW4gYHNoJykgb3IgYGV4cG9ydCBMQU5HPWRlX0RFJyAoaW4gYGJhc2gnKS4KK1RoaXMgY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yCithbGwuCisKKyAgIFlvdSBtaWdodCB0aGluayB0aGF0IHRoZSBjb3VudHJ5IGNvZGUgc3BlY2lmaWNhdGlvbiBpcyByZWR1bmRhbnQuCitCdXQgaW4gZmFjdCwgc29tZSBsYW5ndWFnZXMgaGF2ZSBkaWFsZWN0cyBpbiBkaWZmZXJlbnQgY291bnRyaWVzLiAgRm9yCitleGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKK2NvdW50cnkgY29kZSBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpYWxlY3RzLgorCisgICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKK2xhbmd1YWdlIGFuZCBgQ0MnIGRlbm90aW5nIHRoZSBjb3VudHJ5LCBpcyB0aGUgb25lIHVzZSBvbiBzeXN0ZW1zIGJhc2VkCitvbiBHTlUgbGliYy4gIE9uIG90aGVyIHN5c3RlbXMsIHNvbWUgdmFyaWF0aW9ucyBvZiB0aGlzIHNjaGVtZSBhcmUKK3VzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKK2xvY2FsZXMgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtIGZvciB5b3VyIGxhbmd1YWdlIGJ5IHJ1bm5pbmcgdGhlCitjb21tYW5kIGBsb2NhbGUgLWEgfCBncmVwICdeTEwnJy4KKworICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCitFbmdsaXNoIG1lc3NhZ2UgaXMgc2hvd24gaW4gcGxhY2Ugb2YgYSBub25leGlzdGVudCB0cmFuc2xhdGlvbi4gIElmIHlvdQordW5kZXJzdGFuZCBvdGhlciBsYW5ndWFnZXMsIHlvdSBjYW4gc2V0IHVwIGEgcHJpb3JpdHkgbGlzdCBvZiBsYW5ndWFnZXMuCitUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCitgTEFOR1VBR0UnLiAgR05VIGBnZXR0ZXh0JyBnaXZlcyBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScgb3ZlciBgTEFORycKK2ZvciB0aGUgcHVycG9zZSBvZiBtZXNzYWdlIGhhbmRsaW5nLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBgTEFORycKK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKK3N5c3RlbSBsaWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgc29tZSBTd2VkaXNoIHVzZXJzIHdobyB3b3VsZCByYXRoZXIKK3JlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yIHdoZW4gU3dlZGlzaCBpcyBub3QKK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorCisgICBTcGVjaWFsIGFkdmljZSBmb3IgTm9yd2VnaWFuIHVzZXJzOiBUaGUgbGFuZ3VhZ2UgY29kZSBmb3IgTm9yd2VnaWFuCitib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQordHJhbnNpdGlvbiBwZXJpb2QsIHdoaWxlIHNvbWUgbWVzc2FnZSBjYXRhbG9ncyBmb3IgdGhpcyBsYW5ndWFnZSBhcmUKK2luc3RhbGxlZCB1bmRlciBgbmInIGFuZCBzb21lIG9sZGVyIG9uZXMgdW5kZXIgYG5vJywgaXQncyByZWNvbW1lbmRlZAorZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKK29sZGVyIHRyYW5zbGF0aW9ucyBhcmUgdXNlZC4KKworICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJworZW52aXJvbm1lbnQgdmFyaWFibGUsIGBMTF9DQycgY29tYmluYXRpb25zIGNhbiBiZSBhYmJyZXZpYXRlZCBhcyBgTEwnCit0byBkZW5vdGUgdGhlIGxhbmd1YWdlJ3MgbWFpbiBkaWFsZWN0LiAgRm9yIGV4YW1wbGUsIGBkZScgaXMgZXF1aXZhbGVudAordG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJworKFBvcnR1Z3Vlc2UgYXMgc3Bva2VuIGluIFBvcnR1Z2FsKSBpbiB0aGlzIGNvbnRleHQuCisKKzEuNCBUcmFuc2xhdGluZyBUZWFtcworPT09PT09PT09PT09PT09PT09PT09CisKK0ZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCitwZW9wbGUgd2hvIGxpa2UgdGhlaXIgb3duIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCB3ZWxsLCBhbmQgd2hvIGFyZSBhbHNvCithYmxlIHRvIHN5bmVyZ2l6ZSB3aXRoIG90aGVyIHRyYW5zbGF0b3JzIHNwZWFraW5nIHRoZSBzYW1lIGxhbmd1YWdlLgorRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKK3RlYW1zIGNhbiBiZSBmb3VuZCBhdCB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0J3MgaG9tZXBhZ2UsCitgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvJywgaW4gdGhlICJUZWFtcyIgYXJlYS4KKworICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKK3Nob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKK2AtcmVxdWVzdCcgYXBwZW5kZWQuICBGb3IgZXhhbXBsZSwgc3BlYWtlcnMgb2YgU3dlZGlzaCBjYW4gc2VuZCBhCittZXNzYWdlIHRvIGBzdi1yZXF1ZXN0QGxpLm9yZycsIGhhdmluZyB0aGlzIG1lc3NhZ2UgYm9keToKKworICAgICBzdWJzY3JpYmUKKworICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorX2FjdGl2ZWx5XyBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCityYXRoZXIgdGhhbiBtZXJlbHkgbHVya2luZyBhcm91bmQuICBJZiB5b3VyIHRlYW0gZG9lcyBub3QgZXhpc3QgeWV0IGFuZAoreW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZycgdG8KK3JlYWNoIHRoZSBjb29yZGluYXRvciBmb3IgYWxsIHRyYW5zbGF0b3IgdGVhbXMuCisKKyAgIFRoZSBFbmdsaXNoIHRlYW0gaXMgc3BlY2lhbC4gIEl0IHdvcmtzIGF0IGltcHJvdmluZyBhbmQgdW5pZm9ybWl6aW5nCit0aGUgdGVybWlub2xvZ3kgaW4gdXNlLiAgUHJvdmVuIGxpbmd1aXN0aWMgc2tpbGxzIGFyZSBwcmFpc2VkIG1vcmUgdGhhbgorcHJvZ3JhbW1pbmcgc2tpbGxzLCBoZXJlLgorCisxLjUgQXZhaWxhYmxlIFBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0xhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKK21hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgTm92ZW1iZXIKKzIwMDcuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCitQTyBmaWxlcyBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIHRyYW5zbGF0aW9uIGNvb3JkaW5hdGlvbiwgd2l0aCBhCit0cmFuc2xhdGlvbiBwZXJjZW50YWdlIG9mIGF0IGxlYXN0IDUwJS4KKworICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBjeSBkYSBkZSBlbCBlbiBlbl9HQiBlbworICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gW10gICAgIFtdICAgICAgfAorICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CisgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgW10gfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gW10gICAgICAgICAgW10gfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAoKSBbXSAgICAgW10gICAgICB8CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZmluZHV0aWxzX3N0YWJsZSAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8CisgICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbXVsdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgKCkgKCkgICAgIFtdICAgICAgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgW10gW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CisgICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBndGtzcGVsbCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisgICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gW10gW10gW10gICAgICAgICAgW10gfAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gfAorICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBsZWFmcGFkICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICB8CisgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgfAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKKyAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcG9wdCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIFtdIFtdICAgICAgICAgIFtdIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICBbXSAgICAgIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSAoKSBbXSAgICAgW10gICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICB8CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgICBbXSAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSAgICAgIHwKKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgIFtdICAgW10gfAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8CisgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gW10gICAgIFtdICAgICAgfAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBjeSBkYSBkZSBlbCBlbiBlbl9HQiBlbworICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgMCAgMiAgMSAgOCAyNiAgMiA0MCA0OCAgMiA1NiA4OCAxNSAgMSAgMTUgICAxOAorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzIGV0IGV1IGZhIGZpIGZyICBnYSBnbCBndSBoZSBoaSBociBodSBpZCBpcyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBDb21wZW5kaXVtICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAorICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiZmQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaWJzaGVsZiAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAorICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAorICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBsaWIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gW10gICAgW10gICAgICAgW10gW10gICAgW10gfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgW10gICAgICAgICAgICAgICAgKCkgfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnY2MgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBnbXVsdCAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAorICAgICBnbnVjYXNoICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVsaWIgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtbG9naW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc2tldGNoYm9vayAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGhvdG8yICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmV0bCAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBndGthbSAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBndGtzcGVsbCAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSBbXSBbXSAgW10gW10gICAgW10gICAgW10gW10gW10gICAgW10gfAorICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSAgICAgW10gW10gW10gW10gW10gW10gW10gICAgW10gfAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBqcGlsb3QgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorICAgICBrYmQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBsZCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZWFmcGFkICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgW10gICAgICAgW10gICAgICAgW10gfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBsaWJleGlmICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gfAorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gW10gICAgW10gICAgW10gICAgW10gICAgICAgfAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gfAorICAgICBwaWxvdC1xb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICByYWRpdXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gW10gICAgW10gICAgICAgW10gW10gICAgW10gfAorICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBza2VuY2lsICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzeXN0ZW0tdG9vbHMtYmEuLi4gfCBbXSAgICBbXSAgICBbXSBbXSAgW10gICAgICAgICAgICAgW10gW10gW10gICAgW10gfAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICBbXSBbXSAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgW10gW10gW10gICAgW10gfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gfAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICB4cGFkICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBlcyBldCBldSBmYSBmaSBmciAgZ2EgZ2wgZ3UgaGUgaGkgaHIgaHUgaWQgaXMgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgODUgMjIgMTQgIDIgNDggMTAxIDYxIDEyICAyICA4ICAyICA2IDUzIDI5ICAxIDUyCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgamEga2Ega28ga3Uga3kgbGcgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmUgbmwgIG5uCisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8CisgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8CisgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8CisgICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGZpbmR1dGlsc19zdGFibGUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhd2sgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdpcCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGdtdWx0ICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICgpICAgICAgICB8CisgICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1jb25mICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8CisgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGdzdHJlYW1lciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICBbXSB8CisgICAgIGhlcnJpZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlkdXRpbHMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICBbXSB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGlzb182MzkgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSB8CisgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8CisgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzIgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIG00ICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1pbmljb20gICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8CisgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBvcHQgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHFvZiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHJwbSAgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICBbXSB8CisgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHNoYXJlZC1taW1lLWluZm8gICB8IFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgIFtdICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSB8CisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHN5c3RlbS10b29scy1iYS4uLiB8IFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICB8CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgIFtdICBbXSB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHV0aWwtbGludXggICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHV0aWwtbGludXgtbmcgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICB8CisgICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8ICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CisgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgIGphIGthIGtvIGt1IGt5IGxnIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5lIG5sICBubgorICAgICAgICAgICAgICAgICAgICAgICAgICA1MSAgMiAyNSAgMyAgMiAgMCAgNiAgMCAgMiAgMiAyMCAgMCAxMSAgMSAxMDMgIDYKKworICAgICAgICAgICAgICAgICAgICAgICAgICBvciBwYSBwbCBwdCBwdF9CUiBybSBybyBydSBydyBzayBzbCBzcSBzciBzdiAgdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgQ29tcGVuZGl1bSAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgKCkgICAgIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgW10gW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgW10gW10gICAgIHwKKyAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZmluZHV0aWxzX3N0YWJsZSAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgIHwKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgIHwKKyAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgIHwKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgW10gW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgIHwKKyAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgW10gW10gW10gIFtdICAgICAgW10gW10gW10gW10gW10gW10gW10gW10gIFtdIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgW10gW10gICAgIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgW10gW10gICAgIHwKKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gIFtdIHwKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gICAgICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgIHwKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcG9wdCAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgW10gW10gW10gICAgIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgICAgW10gW10gW10gIFtdICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gIFtdIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgIHwKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gICAgIHwKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgcGEgcGwgcHQgcHRfQlIgcm0gcm8gcnUgcncgc2sgc2wgc3Egc3Igc3YgIHRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwICA1IDc3IDMxICA1MyAgICA0IDU4IDcyICAzIDQ1IDQ2ICA5IDQ1IDEyMiAgMworCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRnIHRoIHRrIHRyIHVrIHZlbiB2aSAgd2EgeGggemhfQ04gemhfSEsgemhfVFcgenUKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOQorICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTkKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDkKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIwCisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAorICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjgKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE4CisgICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTIKKyAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAgOQorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKKyAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTgKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE2CisgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDcKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDI5CisgICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgfCAyOAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjAKKyAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDEzCisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTUKKyAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE2CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKyAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTQKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE0CisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMjEKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDE2CisgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjIKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAxOQorICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDIxCisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIxCisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMQorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgW10gICAgICB8IDIxCisgICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzCisgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCisgICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDkKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMworICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDE2CisgICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMworICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTgKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgW10gICAgW10gICAgW10gICAgICB8IDI3CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMzgKKyAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisgICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI4CisgICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSBbXSBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICBbXSAgICAgIHwgNTQKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgfCAyNAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICAgICAgICAgIHwgMjYKKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzCisgICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTAKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI0CisgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOQorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMAorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMQorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisgICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisgICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCisgICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEwCisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyNQorICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyNgorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjMKKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDI5CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMworICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgIFtdICAgIFtdIFtdICAgICBbXSAgICAgW10gIFtdICAgICAgICAgIFtdICAgICAgfCAzOAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE1CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTkKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKyAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIzCisgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisgICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxNQorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICA3NiB0ZWFtcyAgICAgICAgICAgdGcgdGggdGsgdHIgdWsgdmVuIHZpICB3YSB4aCB6aF9DTiB6aF9ISyB6aF9UVyB6dQorICAgICAgMTYzIGRvbWFpbnMgICAgICAgICAgMCAgMyAgMSA3NCA1MSAgMCAgMTQzIDIxICAxICA1NyAgICAgNyAgICA0NSAgICAwICAyMDM2CisKKyAgIFNvbWUgY291bnRlcnMgaW4gdGhlIHByZWNlZGluZyBtYXRyaXggYXJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YKK3Zpc2libGUgYmxvY2tzIGxldCB1cyBleHBlY3QuICBUaGlzIGlzIGJlY2F1c2UgYSBmZXcgZXh0cmEgUE8gZmlsZXMgYXJlCit1c2VkIGZvciBpbXBsZW1lbnRpbmcgcmVnaW9uYWwgdmFyaWFudHMgb2YgbGFuZ3VhZ2VzLCBvciBsYW5ndWFnZQorZGlhbGVjdHMuCisKKyAgIEZvciBhIFBPIGZpbGUgaW4gdGhlIG1hdHJpeCBhYm92ZSB0byBiZSBlZmZlY3RpdmUsIHRoZSBwYWNrYWdlIHRvCit3aGljaCBpdCBhcHBsaWVzIHNob3VsZCBhbHNvIGhhdmUgYmVlbiBpbnRlcm5hdGlvbmFsaXplZCBhbmQKK2Rpc3RyaWJ1dGVkIGFzIHN1Y2ggYnkgaXRzIG1haW50YWluZXIuICBUaGVyZSBtaWdodCBiZSBhbiBvYnNlcnZhYmxlCitsYWcgYmV0d2VlbiB0aGUgbWVyZSBleGlzdGVuY2UgYSBQTyBmaWxlIGFuZCBpdHMgd2lkZSBhdmFpbGFiaWxpdHkgaW4gYQorZGlzdHJpYnV0aW9uLgorCisgICBJZiBOb3ZlbWJlciAyMDA3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkKK29mIHRoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QKK3VwLXRvLWRhdGUgbWF0cml4IHdpdGggZnVsbCBwZXJjZW50YWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0CitgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvZXh0cmEvbWF0cml4Lmh0bWwnLgorCisxLjYgVXNpbmcgYGdldHRleHQnIGluIG5ldyBwYWNrYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCitpbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCitwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCitpbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAorbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKK2xpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KKworICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQordGhlIHVzZSBvZiBgZ2V0dGV4dCcgdGhlIG9ubHkgdGhpbmcgbWlzc2luZyBhcmUgdGhlIHRyYW5zbGF0aW9ucy4gIFRoZQorRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90CitkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKK2FwcGxpZXMgYWxzbyBmb3IgZXZlcnkgb3RoZXIgRnJlZSBTb2Z0d2FyZSBQcm9qZWN0LiAgQ29udGFjdAorYGNvb3JkaW5hdG9yQHRyYW5zbGF0aW9ucHJvamVjdC5vcmcnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUKK3RvIHRoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KKwpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L0NIQU5HRVMgYi9wb3B0LTEuMTYvQ0hBTkdFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDYyYWYyCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L0NIQU5HRVMKQEAgLTAsMCArMSwyMDQgQEAKKzEuMTUgLT4gMS4xNjoKKyAgICAtIGFkZCBsdi5wbywgdXBkYXRlIHRyYW5zbGF0aW9ucyAoVHJhbnNsYXRpb24gUHJvamVjdCkuCisgICAgLSBpbmNsdWRlIHhjb2RlIHByb2plY3QgZmlsZXMgaW4gZGlzdHJpYnV0ZWQgcG9wdCB0YXIgYmFsbC4KKyAgICAtIG1ha2UgZGlzdGNoZWNrIGlzIG5vdyBzcXVlYWt5IGNsZWFuLgorICAgIC0gcGVybWl0IFZQQVRIIGJ1aWxkcy4KKyAgICAtIGFkZCBzaGFsbG93IHRlc3RzIHVzaW5nIElTUC9SQVMgYXBpLXNhbml0eS1hdXRvdGVzdC5wbC4KKyAgICAtIHByZWZpeCBiaXQgc2V0IHJvdXRpbmVzIHdpdGggcG9wdCB0byBhdm9pZCBzeW1ib2wgY29vbGlzaW9ucyB3IHJwbS4KKyAgICAtIGFkZCB0ZGljdC5jIHRvIGV4ZXJjaXNlIHBvcHQgYml0IHNldHMgYWdhaW5zdCAvdXNyL2RpY3Qvd29yZHMuCisgICAgLSBhZGQgcG9wdEJpdHNBcmdzKCkgbWV0aG9kIHRvIGdlbmVyYXRlIGFyZ3MgYml0IHNldC4KKyAgICAtIGFkZCBtZXRob2RzIGZvciBiaXQgc2V0IHVuaW9uIGFuZCBpbnRlcnNlY3Rpb24uCisgICAgLSBwZXJtaXQgY29tbWEgc2VwYXJhdGVkIGF0dHJpYnV0ZSBsaXN0cywgaGFuZGxlIG5lZ2F0ZWQgYXR0cmlidXRlcy4KKyAgICAtIGJldHRlciB0ZXN0IGZvciBQT1BUX0FSR19CSVRTRVQuCisgICAgLSBhZGQgUE9QVF9BUkdfQklUU0VUIGhhbmRsaW5nLgorICAgIC0gYWRkIFBPUFRfQVJHX1NIT1JUIGhhbmRsaW5nLgorICAgIC0gaGFuZGxlIGFsbCBjYWxsYmFjayB0cmF2ZXJzYWxzIHdpdGhpbiBhIEMgc3dpdGNoIChmb3IgZXh0ZW5kYWJpbGl0eSBlYXNlKS4KKyAgICAtIGFkZCBwb3B0LnBjLgorICAgIC0gZGV2emVybzIwMDA6IGFkZCBBQ19DT05GSUdfQVVYX0RJUiwgQUNfQ09ORklHX01BQ1JPX0RJUiB0byBjb25maWd1cmUuIENyZWF0ZSBidWlsZC1hdXggCisgICAgLSBkZXZ6ZXJvMjAwMDogZGVsIGFjaW5jbHVkZS5tNCA6IEFDX0NIRUNLX1ZBX0NPUFkgaXMgbm90IHVzZWQKKzEuMTQgLT4gMS4xNToKKyAgICAtIHJlbGVhc2UgcG9wdC0xLjE1LgorICAgIC0gcnNlOiBmaXggYnVpbGRpbmcgdW5kZXIgLS1kaXNhYmxlLW5scworICAgIC0gcnNlOiBmaXggYnVpbGRpbmcgdW5kZXIgbm9uIEdMSUJDIHBsYXRmb3JtcyB3aGVyZSBnbG9iX3BhdHRlcm5fcCBmYWxsYmFjayBoYXMgdG8gYmUgdXNlZAorICAgIC0gcnNlOiBmaXggYnVpbGRpbmcgdW5kZXIgcGxhdGZvcm1zIHdoZXJlIEZOTV9FWFRNQVRDSCBpcyBub3QgYXZhaWxhYmxlCisgICAgLSBqYmo6IHBvcHRSZWFkRmlsZTogcGVybWl0IE5VTEwgaWYgcmV0dXJuIHZhbHVlcyBhcmUgbm90IGRlc2lyZWQuCisgICAgLSBqYmo6IHBvcHRSZWFkRmlsZTogYWRkIHJvdXRpbmUuCisgICAgLSBqYmo6IHRyaW0gb3V0IGVzY2FwZWQgbmV3bGluZShzKSBmcm9tIGZpbGUgY29udGVudCwgb3RoZXIgZml4ZXMuCisgICAgLSBqYmo6IHBlcm1pdCBwb3B0IGFsaWFzL2V4ZWMgdG8gaW5jbHVkZSBjb250ZW50IGZyb20gYSBmaWxlLgorICAgIC0gamJqOiBwZXJtaXQgZ2xvYigzKSBwYXR0ZXJucyBpbiBhcHBOYW1lIGZpZWxkIG9mIHBvcHQgYWxpYXMvZXhlYyBjb25maWcuCisgICAgLSBqYmo6IGFkZCB0ZXN0IGNhc2VzIGZvciBiaXQgb3BlcmF0aW9ucyBhbmQgdG9nZ2xlcy4KKyAgICAtIGpiajogYXZvaWQgZGlzcGxheWluZyAtLVtub11ub2ZvbyB3aXRoIFBPUFRfQVJHRkxBR19UT0dHTEUuCisgICAgLSBqYmo6IGFkZCBwb3B0QXJnSW5mbygpIHRvIGdldCBhcmdJbmZvLCBpbXBsZW1lbnRpbmcgUE9QVF9BUkdGTEFHX1RPR0dMRS4KKyAgICAtIGpiajogYWRkIGxvbmdPcHRpb25TdHJjbXAoKSB0byBtYXRjaCB3IFBPUFRfQVJHRkxBR19UT0dHTEUuCisgICAgLSBqYmo6IGNoYW5nZSBzaW5nbGVEYXNoIGFyZyB0byBhIGJpdCBlbnVtLCB1c2UgTEZfSVNTRVQoT05FREFTSCkgaW5zdGVhZC4KKyAgICAtIGpiajogcmV3b3JrIHRoZSBnbG9iIHdyYXBwZXJzIGludG8gc29tZXRoaW5nIG1vcmUgdXNlZnVsLiBwb3J0YWJpbGl0eSB0b2RvKysuCisgICAgLSBqYmo6IHN0dWIgaW4gZ2xvYigzKSB3cmFwcGVycyBmb3IgcG9wdC4gbW9yZSB1c2VmdWwgcG9wdEdsb2IoKSBBUEkgbmV4dC4KKyAgICAtIGpiajogYWRkIHBvcHRJbml0L3BvcHRGaW5pL3BvcHRSZWFkQ29uZmlnRmlsZXMvcG9wdFNhbmVGaWxlIHJvdXRpbmVzLgorICAgIC0gamJqOiByZXdyaXRlIHBvcHRSZWFkQ29uZmlnRmlsZSgpLCBzdHlsaW5nIGZvciAoaS5lLiBteSkgcmVhZGJpbGl0eS4KKyAgICAtIGpiajogcmVzZXJ2ZSBhIGJpdCBmb3IgLS1bbm9db3B0IHByZWZpeCB0b2dnbGluZy4KKyAgICAtIGpiajogZml4OiBjaGVjay9wcmludCBhcmd2WzBdIGluIC0taGVscCBmb3IgTlVMTC4KKyAgICAtIGpiajogcGVybWl0IHR5cGUvZ3JvdXAgYml0bWFza3MgdG8gYmUgY2hhbmdlZCAoaWYgbmVlZGVkIHNvbWV3aGVuKS4KKyAgICAtIGpiajogc25pcCBvdXQgOCB1bnVzZWQgYml0cyBmb3IgYXJndW1lbnQgZ3JvdXBzLgorICAgIC0gamJqOiBmaXg6IGVsaW1pbmF0ZSBkZWFkIGNvZGUgKENJRCM1KS4KKyAgICAtIGpiajogZml4OiByZWFycmFuZ2UgY29kZSB0byBiZXR0ZXIgaGludCB0byBjb3Zlcml0eSBzY2FuIChDSUQjOSkuCisgICAgLSBqYmo6IGZpeDogcmV3cml0ZSAoYW5kIHNpbXBsaWZ5KSBzdHJkdXBfbG9jYWxlX2Zyb21fdXRmOCgpIChDSUQjNywgQ0lEIzgsIENJRCMxMSwgQ0lEIzEyKS4KKyAgICAtIGpiajogdGVzdC91c2UgSEFWRV9TUkFORE9NIHRvIGF2b2lkIHBvcnRhYmlsaXR5IGlzc3Vlcy4KKyAgICAtIGpiajogZml4OiByZW1vdmUgQUNfQ0hFQ0tfVkFfQ09QWSBjaGVjaywgdmFfY29weSBpcyBubyBsb25nZXIgdXNlZC4KKyAgICAtIGpiajogYWRkIGVvLnBvIGFuZCBpZC5wbyAoVHJhbnNsYXRpb24gUHJvamVjdCkuCisgICAgLSBqYmo6IHVwZGF0ZWQgZGEucG8gKFRyYW5zbGF0aW9uIFByb2plY3QpLgorICAgIC0gamJqOiBleHRlbmQgY292ZXJhZ2UgdG8gc2V2ZXJhbCBhZGRpdGlvbmFsIHNldHVwIHJvdXRpbmVzLgorICAgIC0gamJqOiBhZGQgdGVzdHMgZm9yIC0tdXNhZ2UvLS1oZWxwIGNvdmVyYWdlLgorICAgIC0gamJqOiBhZGQgbGNvbnYvZ2NvdiB0YXJnZXRzIHRvIE1ha2VmaWxlLmFtLgorICAgIC0gamJqOiByZWZhY3RvciBhdXRvbWFnaWMgKCpvcHQtPmFyZykgb3B0aW9uIGFyZyBzdG9yZSB0byBwb3B0U2F2ZUFyZygpLgorICAgIC0gbGR2OiB1cGRhdGUgSU5QVVQgdGFnIGluIERveHlmaWxlLmluLCBmaXggZG94eWdlbiB3YXJuaW5ncyBpbiBwb3B0aGVscC5jLgorICAgIC0gc3RhcnQgcG9wdC0xLjE1IGRldmVsb3BtZW50LgorCisxLjEzIC0+IDEuMTQ6CisgICAgLSByZWxlYXNlIHBvcHQtMS4xNC4KKyAgICAtIGpiajogcmVtb3ZlIGZpbmRtZS5jLCBhZGQgcG9wdGludC5jLCB0byBwby9QT1RGSUxFUy5pbi4KKyAgICAtIGpiajogdXNlIHN0cGNweSAyIG1vcmUgcGxhY2VzIChXYXluZSBEYXZpc29uPHdheW5lZEBzYW1iYS5vcmc+KS4KKyAgICAtIGpiajogYWRkIEBMVExJQklDT05WQCB3aGVuIG5lZWRlZCAoU3RhbmlzbGF2IEJyYWJlYzxzYnJhYmVjQHN1c2UuY3o+KS4KKyAgICAtIGpiajogZml4OiByZW1vdmUgdGhlICJlY2hvIC0tIiBGZWRvcmFibGUgaGFjay1hLXJvdW5kLgorICAgIC0gcnNjOiB1cGRhdGVkIGRlLnBvIChub3QgZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdCkuCisgICAgLSBqYmo6IHN0dWR5IHRoZSBtZXNzIHdpdGggc3BsaW50LiBTaWdoLCBzcGxpbnQgaXMgc28gZWFzaWx5IGNvbmZ1c2VkIC4uLgorICAgIC0gamJqOiByZXdyaXRlIGZpbmRQcm9ncmFtUGF0aCAmIG1vdmUgdG8gcG9wdC5jLiBOdWtlIHRoZSBmaW5kbWUue2MsaH0gdG95cy4KKyAgICAtIGpiajogdXNlIHN0cGNweSBzZXZlcmFsIG1vcmUgcGxhY2VzIChXYXluZSBEYXZpc29uPHdheW5lZEBzYW1iYS5vcmc+KS4KKyAgICAtIGpiajogZW5hYmxlIGVxdWFsIGFmdGVyIHNob3J0IG9wdGlvbiAoV2F5bmUgRGF2aXNvbjx3YXluZWRAc2FtYmEub3JnPikuCisgICAgLSBqYmo6IHBlcm1pdCAiI2RlZmluZSBQT1BUX2ZwcmludGYgZnByaW50ZiIgdG8gbG9zZSB0aGUgbWFsbG9jJ2luZyBmcHJpbnRmLgorICAgIC0gamJqOiB1c2UgdmFzcHJpbnRmKDMpIHdoZW4gYXZhaWxhYmxlIChXYXluZSBEYXZpc29uPHdheW5lZEBzYW1iYS5vcmc+KS4KKyAgICAtIGpiajogc3R1ZHkgdGhlIG1lc3Mgd2l0aCBzcGxpbnQsIHJlbW92ZSBhbm5vdGF0aW9ucyB3aGVyZSBwb3NzaWJsZS4KKyAgICAtIGpiajogYWRkIC1EX0dOVV9TT1VSQ0UgZm9yIGdjYyB0byB1c2UgX19idWlsdGluX3N0cGNweSB3aGVuIGF2YWlsYWJsZS4KKyAgICAtIGpiajogYWRkIHN0YXRpYyBpbmxpbmUgc3RwY3B5IGZvciB0aGUgZGVwcml2ZWQuCisgICAgLSBqYmo6IHVzZSBzdHBjcHkgdG8gZWxpbWluYXRlIHNwcmludGYgY2FsbHMgZXZlcnl3aGVyZSBidXQgcG9wdGhlbHAuYworICAgIC0gamJqOiByZW1vdmUgKG5vdyB1bm5lZWRlZCBhZmFpaykgdmFfY29weSgpIGZyb20gUE9QVF9mcHJpbnRmKCkuCisgICAgLSBqYmo6IGlubGluZSBzdHJkdXBfZnByaW50ZigpID0+IFBPUFRfZnByaW50ZiBrZWVwaW5nICh1bm5lZWRlZD8pIHZhX2NvcHkuCisgICAgLSByc2U6IGZpeCBtZW1jcHkoMykgYmFzZWQgdmFfY29weSgzKSBmYWxsYmFja3MKKyAgICAtIGpiajogZml4OiBzaG9ydCBvcHRpb24gd2l0aCAiZm9vPWJhciIgYXJndW1lbnQgd2FzIG1pc2hhbmRsZWQuCisJKFdheW5lIERhdmlzb248d2F5bmVkQHNhbWJhLm9yZz4pLgorICAgIC0gamJqOiByZW5hbWUgX0FCUyB0byBhdm9pZCBjb2xsaXNpb25zLCBkZWZpbmUgREJMX0VQU0lMT04gaWYgbm90IHByZXNlbnQKKwkoV2F5bmUgRGF2aXNvbjx3YXluZWRAc2FtYmEub3JnPikuCisgICAgLSBqYmo6IHRlc3QgZm9yIDxnbG9iLmg+LCBkaXNhYmxlIHJlYWRpbmcgZGlyZWN0b3J5IHBvcHRyYyBmaWxlcyBpZiBub3QuCisgICAgLSBqYmo6IGFkZCBfX2F0dHJpYnV0ZV9fKF9fdW51c2VkX18pIChXYXluZSBEYXZpc29uPHdheW5lZEBzYW1iYS5vcmc+KS4KKyAgICAtIGpiajogcGVybWl0IGVxdWFsIGFmdGVyIHNob3J0IG9wdGlvbiAoV2F5bmUgRGF2aXNvbjx3YXluZWRAc2FtYmEub3JnPikuCisgICAgLSBqYmo6IG1ha2Ugc3VyZSB0aGF0IHNob3J0IG9wdGlvbnMgYXJlIHByaW50ZWQgb25seSBvbmNlIHdpdGggLS11c2FnZS4KKyAgICAtIGpiajogZG9uJ3QgZGlzcGxheSBoaWRkZW4gc2hvcnQgb3B0aW9ucyB3aXRoIC0tdXNhZ2UuCisgICAgLSBqYmo6IHVwZGF0ZWQgc3YucG8gKFRyYW5zbGF0aW9uIFByb2plY3QpLgorICAgIC0gamJqOiB1cGRhdGVkIHtmaSxubH0ucG8gKFRyYW5zbGF0aW9uIFByb2plY3QpLgorICAgIC0gamJqOiB1cGRhdGVkIHRoLnBvIChUcmFuc2xhdGlvbiBQcm9qZWN0KS4KKyAgICAtIHJzYzogYXZvaWQgbXVsdGlsaWIgZmlsZSBjb25mbGljdHMgaW4gZ2VuZXJhdGVkIGRveHlnZW4uCisgICAgLSBqYmo6IHVwZGF0ZWQgdmkucG8gYW5kIHpoX0NOLnBvIChUcmFuc2xhdGlvbiBQcm9qZWN0KS4KKyAgICAtIGpiajogZml4OiBrZWVwIHRoZSBwb3B0SGVscE9wdGlvbnMgYXJyYXkgZXhhY3RseSB0aGUgc2FtZSBzaXplLgorICAgIC0gamJqOiB1cGRhdGVkIHBsLnBvIChUcmFuc2xhdGlvbiBQcm9qZWN0KS4KKyAgICAtIGpiajogYWRkIG5ldyBmaSwgdGgsIHpoX1RXIHRyYW5zbGF0aW9ucyAoVHJhbnNsYXRpb24gUHJvamVjdCkuCisgICAgLSBqYmo6IGFkZCAibWFrZSB1cGRhdGVwbyIgdG8gc2ltcGxpZnkgUE8gZmlsZSBtYWludGVuYW5jZS4KKyAgICAtIGpiajogZGlzcGxheSBQT1BUX0FSR19BUkdWIG9wdGlvbnMgaW4gLS1oZWxwIGp1c3QgbGlrZSBvdGhlciBvcHRpb25zLgorICAgIC0gamJqOiBhZGQgdGVzdCBmb3IgUE9QVF9BUkdfQVJHViBoYW5kbGluZy4KKyAgICAtIGpiajogZml4OiBwZXJtaXQgIi0tZm9vIGJhciIgYW5kICItLWZvbz1iYXIiIGVxdWl2YWxlbnQgZm9ybXMgZm9yIGFsaWFzZXMuCisgICAgLSBqYmo6IGZpeDogdGVzdHMgMjAgLT4gMjMgcmVxdWlyZSBhbiBleHBsaWNpdCAnLS0nIGFyZyBzZXBhcmF0b3Igbm93LgorICAgIC0gamJqOiBwb3B0LjM6IGFkZCBQT1BUX0FSR19BUkdWIGRlc2NyaXB0aW9uLgorICAgIC0gamJqOiB1c2UgTlVMIHRlcm1pbmF0b3IgdG8gYWxpZ24gaGVscCB3aXRoIChwb3NzaWJsZSkgbXVsdGlieXRlIGNoYXJzLgorICAgIC0gamJqOiBhZGQgdXRmOF9za2lwX2RhdGEgdGFibGVbXSB0byBrZWVwIHRyYWNrIG9mIHV0ZjggY2hhcmFjdGVyIHdpZHRocy4KKyAgICAtIGpiajogcmVmYWN0b3IgdGhlIFBPUFRfV0NIQVJfSEFDSyBpbnRvIHN0cmluZ0Rpc3BsYXlXaWR0aCgpLgorICAgIC0gamJqOiBhZGQgUE9QVF9kZ2V0dGV4dCgpIHByb3RvdHlwZS4KKyAgICAtIGpiajogYWRkIFBPUFRfZGdldHRleHQoKSBmb3IgcG9wdCBpbnRlcm5hbCBVVEYtOCBjb2Rlc2V0IChUYWthbyBGdWppd2FyYSkuCisgICAgLSBqYmo6IGFkZCBQT1BUX25leHRfY2hhcigpLCBiYWNrb3V0IFBPUFRfZnByaW50ZigpIHVzYWdlIChmb3IgdGhlIG1vbWVudCkuCisgICAgLSBqYmo6IGZpbmlzaCBQT1BUX0FSR19BUkdWIGltcGxlbWVudGF0aW9uLgorICAgIC0gamJqOiBmcmVlIGFsaWFzZXMvZXhlY3Mgd2l0aCBjb21tb24gY29kZS4KKyAgICAtIGpiajogcmV3cml0ZSB0aGUgY2FsbGJhY2sgbG9naWMgdXNpbmcgYSBzd2l0Y2ggZm9yIHNpbXBsaWNpdHkuCisgICAgLSBqYmo6IGhpZGUgYml0IGZpZWxkIHN0cnVjdHVyZSBiZWhpbmQgRl9JU1NFVC9MRl9JU1NFVC9DQkZfSVNTRVQgbWFjcm9zLgorICAgIC0gamJqOiBleHBvc2UgcG9wdFNhdmVMb25nTG9uZyBhbmQgcG9wdFNhdmVTdHJpbmcgaW4gdGhlIGxvYWRlciBtYXAuCisgICAgLSBqYmo6IGFkZCBQT1BUX0FSR19BUkdWLCBzdGFydGluZyB3aXRoIHRoZSBwb3B0U2F2ZVN0cmluZygpIG1ldGhvZC4KKyAgICAtIGpiajogYWRkIGhlbHAgZm9yIFBPUFRfQVJHX0xPTkdMT05HLgorICAgIC0gamJqOiBobW1tLCBQT1NJWGx5IGNvcnJlY3QgLS1lY2hvLWFyZ3MgbmVlZHMgZml4aW5nLCBkaXNhYmxlIGZvciBub3cuCisgICAgLSBqYmo6IHBvcHRpbnQuaDogdHlwZWRlZidzIGZvciBzdHJpbmcgYW5kIHN0cmluZyBhcnJheXMuCisgICAgLSBqYmo6IGFkZCBQT1BUX0FSR19MT05HTE9ORywgYW5kIHBvcHRTYXZlTG9uZ0xvbmcoKS4KKyAgICAtIGpiajogcG9wdGludC5oOiBhZGQgcG9wdFN1YnN0aXR1dGVIZWxwSTE4TigpIHRvIGJ1cnkgdGhlIEFCSSBoYWNrLgorICAgIC0gamJqOiBzdGFydCB1c2luZyBwb3B0QXJnIGFuZCBwb3B0QXJnVHlwZSgpIHdoZXJlIHVzZWZ1bC4KKyAgICAtIGpiajogcG9wdGludC5oOiBhZGQgYSBwb3B0QXJnVHlwZSBkZWZpbmUgZm9yIGJpdGZpZWxkIHR5cGUgYWJzdHJhY3Rpb24uCisgICAgLSBqYmo6IHBvcHRpbnQuaDogYWRkIGEgcG9wdEFyZyB1bmlvbiBmb3Igb3B0LT5hcmcgYWNjZXNzIHdpdGhvdXQgY2FzdHMuCisgICAgLSBqYmo6IGluY2x1ZGUgIi0tIFRlcm1pbmF0ZSBvcHRpb25zIiBlbmQtb2Ytb3B0aW9ucyBtc2cgaW4gcG9wdEhlbHBPcHRpb25zLgorICAgIC0gamJqOiBvcHQtPmFyZ0Rlc2NyaXBbMF0gZGV0ZXJtaW5lcyAiLS1mb289YmFyIiBvciAiLS1mb28gYmFyIi4KKyAgICAtIGpiajogLS1sb25nIGFsd2F5cyBwYWRkZWQgZm9yIGFsaWdubWVudCB3aXRoL3dpdGhvdXQgIi1YLCAiLgorICAgIC0gamJqOiBEaXNwbGF5IHNob3J0TmFtZSBpZmYgcHJpbnRhYmxlIG5vbi1zcGFjZS4KKyAgICAtIGpiajogUE9QVF9BVVRPQUxJQVM6IGlmIG5vIHBvcHQgYWxpYXNlcy9leGVjcywgZG9uJ3QgZGlzcGxheSB0aGUgc3ViLWhlYWQuCisgICAgLSBqYmo6IGFkZCAtLWxpYmRpcj0vJXtfbGlifSB0byBwb3B0LnNwZWMuCisgICAgLSBqYmo6IGFkZCAuY3ZzaWdub3JlIHRvIG00IHN1YmRpcmVjdG9yeS4KKyAgICAtIGpiajogcmVtb3ZlIGR1cGxpY2F0ZSBuYiBsb2NhbGUgZnJvbSBBTExfTElOR1VBUy4KKyAgICAtIGpiajogYXV0b2dlbi5zaDogb24gbGludXgsIGFkZCAtLWxpYmRpcj0vbGliIChubyAvbGliNjQgYXV0b2RldGVjdCB5ZXQpLgorCisxLjEyIC0+IDEuMTM6CisgICAgLSByZWxlYXNlIHBvcHQtMS4xMy4KKyAgICAtIGpiajogYWRkIGEgJXRyYWNrIHNlY3Rpb24gKGFzIGluIHJwbS01LjApIHRvIHBvcHQuc3BlYy4KKyAgICAtIGpiajogY2hnIHBvcHRHZXRPcHRBcmcoKSB0byAiY2hhciAqIiwgZG9jdW1lbnQgYXBwbGljYXRpb24gbmVlZHMgdG8gZnJlZS4KKyAgICAtIGpiajogcmUtYWRkIGl0LnBvIChmcm9tIFNhbmRybyBCb25henpvbGEgPHNhbmRyby5ib25henpvbGFAZ21haWwuY29tPikuCisgICAgLSBqYmo6IHJlc2N1c2NpdGF0ZSB0aGUgc3BsaW50IGFubm90YXRpb25zLgorICAgIC0gamJqOiBjaGFuZ2Ugc2l6ZW9mIHRvIHVzZSB0aGUgdHlwZSBpbXBsaWNpdGx5LCByYXRoZXIgdGhhbiBleHBsaWNpdGx5LgorICAgIC0gamJqOiByZW1vdmUgaW5jb3JyZWN0IGNhc3RzLCBjaGFuZ2luZyB0byBzaXplX3Qgd2hlcmUgbmVlZGVkLgorICAgIC0gamJqOiByZW1vdmUgdW51c2VkIFNURF9WRlBSSU5URiBtYWNyby4KKyAgICAtIGpiajogcmVpbmRlbnQgKGFuZCBvdGhlcndpc2UgZGlkZGxlKSByZWNlbnQgcGF0Y2ggZm9yIHBvcHQgY29kaW5nIHN0eWxlLgorICAgIC0gamJqOiByZW1vdmUgc3BsaW50IGJvdW5kcy9icmFuY2ggYW5ub3RhdGlvbnMsIGxpdHRsZSBnYWluLCBtdWNoIHBhaW4uCisgICAgLSBqYmo6IHJldmVydCBhbGxvY2EgdXNhZ2UgYWdhaW4gYWdhaW4uCisgICAgLSBqYmo6IGhhbmRsZSBTb2xhcmlzIHNpZ25lZCBjaGFyYWN0ZXIgaXNzcGFjZSgzKSBpc3N1ZXMgY29uc2lzdGVudGx5LgorICAgIC0gYmVybzogcmVhZCAvZXRjL3BvcHQuZC8qIGZpbGVzLgorICAgIC0gamJqOiBkb24ndCByZWFkIC9ldGMvcG9wdCB0d2ljZSAoIzI5MDUzMSkuCisgICAgLSBqYmo6IGlzc3BhY2UoMykgaGFzIGkxOG4gZW5jb2Rpbmcgc2lnbmVkbmVzc3MgaXNzdWVzIG9uIFNvbGFyaXMgKCMxNzIzOTMpLgorICAgIC0gamJqOiByZWZhY3RvciBjb2x1bW4gY3Vyc29yIHRvIGEgc3RydWN0dXJlLCBjYXJyeSBtYXhjb2xzIGFzIHdlbGwuCisgICAgLSBqYmo6IHVzZSBUSU9DR1dJTlNaIHRvIGRldGVybWluZSAtLWhlbHAgY29sdW1uIHdyYXBwaW5nLgorICAgIC0gamJqOiBoZWxwIGZvcm1hdHRpbmcgZm9yIFBPUFRfQVJHX01BSU5DQUxMLgorICAgIC0gamJqOiByZW1vdmUgTl8oLi4uKSBtYXJraW5ncyBmcm9tIHBvcHQuaCwgbWFya2VycyBpbiBwb3B0aGVscC5jIGluc3RlYWQuCisgICAgLSBqYmo6IGFkZCB6aF9DTi5wbyAoVHJhbnNsYXRpb24gUHJvamVjdCkuCisgICAgLSBqYmo6IHVzZSBQQUNLQUdFX0JVR1JFUE9SVC4KKyAgICAtIGpiajogaG90d2lyZSBQT1BUX0FVVE9IRUxQL1BPUFRfQVVUT0FMSUFTIGxvb2t1cCBpbiBwb3B0IGkxOG4gZG9tYWluLgorCisxLjExIC0+IDEuMTIKKyAgICAtIGpiajogcGx1ZyBhIG1lbW9yeSBsZWFrLgorICAgIC0gamJqOiBmaXggaW5kZXggdGhpbmtvLgorICAgIC0gamJqOiBhZGQgdmkucG8gKFRyYW5zbGF0aW9uIFByb2plY3QpLgorICAgIC0gamJqOiBhZGQgbmwucG8gKFRyYW5zbGF0aW9uIFByb2plY3QpLgorICAgIAorMS41IC0+IDEuNgorCS0gYWRkIGFiaWxpdHkgdG8gcGVyZm9ybSBjYWxsYmFja3MgZm9yIGV2ZXJ5LCBub3QganVzdCBmaXJzdCwgbWF0Y2guCisKKzEuMyAtPiAxLjUKKwktIGhlYXZ5IGRvc2Ugb2YgY29uc3QncworCS0gcG9wdFBhcnNlQXJndlN0cmluZygpIG5vdyBOVUxMIHRlcm1pbmF0ZXMgdGhlIGxpc3QKKworMS4yLjMgLT4gMS4zCisJLSBhZGRlZCBzdXBwb3J0IGZvciBzaW5nbGUgLQorCS0gbWlzYyBidWcgZml4ZXMKKwktIHBvcnRhYmlsaXR5IGltcHJvdmVtZW50cworCisxLjIuMiAtPiAxLjIuMworCS0gZml4ZWQgbWVtc2V0KCkgaW4gaGVscCBtZXNzYWdlIGdlbmVyYXRpb24gKERhbGUgSGF3a2lucykKKwktIGFkZGVkIGV4dGVybiAiQyIgc3R1ZmYgdG8gcG9wdC5oIGZvciBDKysgY29tcGlsZXJzIChEYWxlIEhhd2tpbnMpCisJLSBjb25zdCdpZmllZCBwb3B0UGFyc2VBcmd2U3RyaW5nIChKZWZmIEdhcnppaykKKworMS4yLjEgLT4gMS4yLjIKKwktIGZpeGVkIGJ1ZyBpbiBjaGFpbmQgYWxpYXMgaGFwcGVucyB3aGljaCBzZWVtcyB0byBoYXZlIG9ubHkKKwkgIGFmZmVjdGVkIC0tdHJpZ2dlcnMgaW4gcnBtCisJLSBhZGRlZCBQT1BUX0FSR19WQUwKKwktIHBvcHQuMyBpbnN0YWxsZWQgYnkgZGVmYXVsdAorCisxLjIgLT4gMS4yLjEKKwktIGFkZGVkIFBPUFRfQVJHX0lOVExfRE9NQUlOIChFbGxpb3QgTGVlKQorCS0gdXBkYXRlZCBNYWtlZmlsZSdzIHRvIGJlIG1vcmUgR05VaXNoIChFbGxpb3QgTGVlKQorCisxLjEgLT4gMS4yCisJLSBhZGRlZCBwb3B0LjMgbWFuIHBhZ2UgKFJvYmVydCBMeW5jaCkKKwktIGRvbid0IHVzZSBtbWFwIGFueW1vcmUgKGl0cyBsYWNrIG9mIHBvcnRhYmlsaXR5IGlzbid0IHdvcnRoIHRoZQorCSAgdHJvdWJsZSkKKwktIGFkZGVkIHRlc3Qgc2NyaXB0CisJLSBhZGRlZCBzdXBwb3J0IGZvciBleGVjCisJLSByZW1vdmVkIHN1cHBvcnQgZm9yICpfUE9QVF9BTElBU0VTIGVudiB2YXJpYWJsZSAtLSBpdCB3YXMgYSBiYWQKKwkgIGlkZWEKKwktIHJlb3JnYW5pemVkIGludG8gbXVsdGlwbGUgc291cmNlIGZpbGVzCisJLSBhZGRlZCBhdXRvbWF0aWMgaGVscCBnZW5lcmF0aW9uLCBQT1BUX0FVVE9IRUxQCisJLSBhZGRlZCB0YWJsZSBjYWxsYmFja3MKKwktIGFkZGVkIHRhYmxlIGluY2x1c2lvbgorCS0gdXBkYXRlZCBtYW4gcGFnZSBmb3IgbmV3IGZlYXR1cmVzCisJLSBhZGRlZCB0ZXN0IHNjcmlwdHMKKworMS4wIC0+IDEuMQorCS0gbW92ZWQgdG8gYXV0b2NvbmYgKEZyZWQgRmlzaCkKKwktIGFkZGVkIFNUUkVSUk9SIHJlcGxhY2VtZW50IChOb3JiZXJ0IFdhcm11dGgpCisJLSBhZGRlZCBjb25zdCBrZXl3b3JkcyAoQnJ1Y2UgUGVyZW5zKQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L0NPUFlJTkcgYi9wb3B0LTEuMTYvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGM3Y2E4Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L0NPUFlJTkcKQEAgLTAsMCArMSwyMiBAQAorQ29weXJpZ2h0IChjKSAxOTk4ICBSZWQgSGF0IFNvZnR3YXJlCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3J0aXVtLgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L0RveHlmaWxlLmluIGIvcG9wdC0xLjE2L0RveHlmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczN2E3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvRG94eWZpbGUuaW4KQEAgLTAsMCArMSwxMjQ2IEBACisjIERveHlmaWxlIDEuNC42CisKKyMgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgc2V0dGluZ3MgdG8gYmUgdXNlZCBieSB0aGUgZG9jdW1lbnRhdGlvbiBzeXN0ZW0KKyMgZG94eWdlbiAod3d3LmRveHlnZW4ub3JnKSBmb3IgYSBwcm9qZWN0CisjCisjIEFsbCB0ZXh0IGFmdGVyIGEgaGFzaCAoIykgaXMgY29uc2lkZXJlZCBhIGNvbW1lbnQgYW5kIHdpbGwgYmUgaWdub3JlZAorIyBUaGUgZm9ybWF0IGlzOgorIyAgICAgICBUQUcgPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMgRm9yIGxpc3RzIGl0ZW1zIGNhbiBhbHNvIGJlIGFwcGVuZGVkIHVzaW5nOgorIyAgICAgICBUQUcgKz0gdmFsdWUgW3ZhbHVlLCAuLi5dCisjIFZhbHVlcyB0aGF0IGNvbnRhaW4gc3BhY2VzIHNob3VsZCBiZSBwbGFjZWQgYmV0d2VlbiBxdW90ZXMgKCIgIikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9qZWN0IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFBST0pFQ1RfTkFNRSB0YWcgaXMgYSBzaW5nbGUgd29yZCAob3IgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzdXJyb3VuZGVkIAorIyBieSBxdW90ZXMpIHRoYXQgc2hvdWxkIGlkZW50aWZ5IHRoZSBwcm9qZWN0LgorCitQUk9KRUNUX05BTUUgICAgICAgICAgID0gQFBBQ0tBR0VACisKKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLiAKKyMgVGhpcyBjb3VsZCBiZSBoYW5keSBmb3IgYXJjaGl2aW5nIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvciAKKyMgaWYgc29tZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGlzIHVzZWQuCisKK1BST0pFQ1RfTlVNQkVSICAgICAgICAgPSBAVkVSU0lPTkAKKworIyBUaGUgT1VUUFVUX0RJUkVDVE9SWSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAocmVsYXRpdmUgb3IgYWJzb2x1dGUpIAorIyBiYXNlIHBhdGggd2hlcmUgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQsIGl0IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIAorIyB3aGVyZSBkb3h5Z2VuIHdhcyBzdGFydGVkLiBJZiBsZWZ0IGJsYW5rIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIHVzZWQuCisKK09VVFBVVF9ESVJFQ1RPUlkgICAgICAgPSBkb3h5Z2VuCisKKyMgSWYgdGhlIENSRUFURV9TVUJESVJTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBjcmVhdGUgCisjIDQwOTYgc3ViLWRpcmVjdG9yaWVzIChpbiAyIGxldmVscykgdW5kZXIgdGhlIG91dHB1dCBkaXJlY3Rvcnkgb2YgZWFjaCBvdXRwdXQgCisjIGZvcm1hdCBhbmQgd2lsbCBkaXN0cmlidXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMgb3ZlciB0aGVzZSBkaXJlY3Rvcmllcy4gCisjIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBmZWVkaW5nIGRveHlnZW4gYSBodWdlIGFtb3VudCBvZiAKKyMgc291cmNlIGZpbGVzLCB3aGVyZSBwdXR0aW5nIGFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdvdWxkIAorIyBvdGhlcndpc2UgY2F1c2UgcGVyZm9ybWFuY2UgcHJvYmxlbXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KKworQ1JFQVRFX1NVQkRJUlMgICAgICAgICA9IE5PCisKKyMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwgCisjIGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaXMgd3JpdHRlbi4gRG94eWdlbiB3aWxsIHVzZSB0aGlzIAorIyBpbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBhbGwgY29uc3RhbnQgb3V0cHV0IGluIHRoZSBwcm9wZXIgbGFuZ3VhZ2UuIAorIyBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpcyBFbmdsaXNoLCBvdGhlciBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZTogCisjIEJyYXppbGlhbiwgQ2F0YWxhbiwgQ2hpbmVzZSwgQ2hpbmVzZS1UcmFkaXRpb25hbCwgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIAorIyBEdXRjaCwgRmlubmlzaCwgRnJlbmNoLCBHZXJtYW4sIEdyZWVrLCBIdW5nYXJpYW4sIEl0YWxpYW4sIEphcGFuZXNlLCAKKyMgSmFwYW5lc2UtZW4gKEphcGFuZXNlIHdpdGggRW5nbGlzaCBtZXNzYWdlcyksIEtvcmVhbiwgS29yZWFuLWVuLCBOb3J3ZWdpYW4sIAorIyBQb2xpc2gsIFBvcnR1Z3Vlc2UsIFJvbWFuaWFuLCBSdXNzaWFuLCBTZXJiaWFuLCBTbG92YWssIFNsb3ZlbmUsIFNwYW5pc2gsIAorIyBTd2VkaXNoLCBhbmQgVWtyYWluaWFuLgorCitPVVRQVVRfTEFOR1VBR0UgICAgICAgID0gRW5nbGlzaAorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGVuY29kaW5nIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQuIAorIyBUaGUgZW5jb2RpbmcgaXMgbm90IGFsd2F5cyBkZXRlcm1pbmVkIGJ5IHRoZSBsYW5ndWFnZSB0aGF0IGlzIGNob3NlbiwgCisjIGJ1dCBhbHNvIHdoZXRoZXIgb3Igbm90IHRoZSBvdXRwdXQgaXMgbWVhbnQgZm9yIFdpbmRvd3Mgb3Igbm9uLVdpbmRvd3MgdXNlcnMuIAorIyBJbiBjYXNlIHRoZXJlIGlzIGEgZGlmZmVyZW5jZSwgc2V0dGluZyB0aGUgVVNFX1dJTkRPV1NfRU5DT0RJTkcgdGFnIHRvIFlFUyAKKyMgZm9yY2VzIHRoZSBXaW5kb3dzIGVuY29kaW5nICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciB0aGUgV2luZG93cyBiaW5hcnkpLCAKKyMgd2hlcmVhcyBzZXR0aW5nIHRoZSB0YWcgdG8gTk8gdXNlcyBhIFVuaXgtc3R5bGUgZW5jb2RpbmcgKHRoZSBkZWZhdWx0IGZvciAKKyMgYWxsIHBsYXRmb3JtcyBvdGhlciB0aGFuIFdpbmRvd3MpLgorCitVU0VfV0lORE9XU19FTkNPRElORyAgID0gTk8KKworIyBJZiB0aGUgQlJJRUZfTUVNQkVSX0RFU0MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGluY2x1ZGUgYnJpZWYgbWVtYmVyIGRlc2NyaXB0aW9ucyBhZnRlciB0aGUgbWVtYmVycyB0aGF0IGFyZSBsaXN0ZWQgaW4gCisjIHRoZSBmaWxlIGFuZCBjbGFzcyBkb2N1bWVudGF0aW9uIChzaW1pbGFyIHRvIEphdmFEb2MpLiAKKyMgU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKworQlJJRUZfTUVNQkVSX0RFU0MgICAgICA9IFlFUworCisjIElmIHRoZSBSRVBFQVRfQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgcHJlcGVuZCAKKyMgdGhlIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uIAorIyBOb3RlOiBpZiBib3RoIEhJREVfVU5ET0NfTUVNQkVSUyBhbmQgQlJJRUZfTUVNQkVSX0RFU0MgYXJlIHNldCB0byBOTywgdGhlIAorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKKworIyBUaGlzIHRhZyBpbXBsZW1lbnRzIGEgcXVhc2ktaW50ZWxsaWdlbnQgYnJpZWYgZGVzY3JpcHRpb24gYWJicmV2aWF0b3IgCisjIHRoYXQgaXMgdXNlZCB0byBmb3JtIHRoZSB0ZXh0IGluIHZhcmlvdXMgbGlzdGluZ3MuIEVhY2ggc3RyaW5nIAorIyBpbiB0aGlzIGxpc3QsIGlmIGZvdW5kIGFzIHRoZSBsZWFkaW5nIHRleHQgb2YgdGhlIGJyaWVmIGRlc2NyaXB0aW9uLCB3aWxsIGJlIAorIyBzdHJpcHBlZCBmcm9tIHRoZSB0ZXh0IGFuZCB0aGUgcmVzdWx0IGFmdGVyIHByb2Nlc3NpbmcgdGhlIHdob2xlIGxpc3QsIGlzIAorIyB1c2VkIGFzIHRoZSBhbm5vdGF0ZWQgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4gCisjIElmIGxlZnQgYmxhbmssIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkICgiJG5hbWUiIGlzIGF1dG9tYXRpY2FsbHkgCisjIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGVudGl0eSk6ICJUaGUgJG5hbWUgY2xhc3MiICJUaGUgJG5hbWUgd2lkZ2V0IiAKKyMgIlRoZSAkbmFtZSBmaWxlIiAiaXMiICJwcm92aWRlcyIgInNwZWNpZmllcyIgImNvbnRhaW5zIiAKKyMgInJlcHJlc2VudHMiICJhIiAiYW4iICJ0aGUiCisKK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAKKworIyBJZiB0aGUgQUxXQVlTX0RFVEFJTEVEX1NFQyBhbmQgUkVQRUFUX0JSSUVGIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuIAorIyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBkZXRhaWxlZCBzZWN0aW9uIGV2ZW4gaWYgdGhlcmUgaXMgb25seSBhIGJyaWVmIAorIyBkZXNjcmlwdGlvbi4KKworQUxXQVlTX0RFVEFJTEVEX1NFQyAgICA9IE5PCisKKyMgSWYgdGhlIElOTElORV9JTkhFUklURURfTUVNQiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHNob3cgYWxsIAorIyBpbmhlcml0ZWQgbWVtYmVycyBvZiBhIGNsYXNzIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgY2xhc3MgYXMgaWYgdGhvc2UgCisjIG1lbWJlcnMgd2VyZSBvcmRpbmFyeSBjbGFzcyBtZW1iZXJzLiBDb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3JzIGFuZCBhc3NpZ25tZW50IAorIyBvcGVyYXRvcnMgb2YgdGhlIGJhc2UgY2xhc3NlcyB3aWxsIG5vdCBiZSBzaG93bi4KKworSU5MSU5FX0lOSEVSSVRFRF9NRU1CICA9IE5PCisKKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIERveHlnZW4gd2lsbCBwcmVwZW5kIHRoZSBmdWxsIAorIyBwYXRoIGJlZm9yZSBmaWxlcyBuYW1lIGluIHRoZSBmaWxlIGxpc3QgYW5kIGluIHRoZSBoZWFkZXIgZmlsZXMuIElmIHNldCAKKyMgdG8gTk8gdGhlIHNob3J0ZXN0IHBhdGggdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZSB3aWxsIGJlIHVzZWQuCisKK0ZVTExfUEFUSF9OQU1FUyAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIFNUUklQX0ZST01fUEFUSCB0YWcgCisjIGNhbiBiZSB1c2VkIHRvIHN0cmlwIGEgdXNlci1kZWZpbmVkIHBhcnQgb2YgdGhlIHBhdGguIFN0cmlwcGluZyBpcyAKKyMgb25seSBkb25lIGlmIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MgbWF0Y2hlcyB0aGUgbGVmdC1oYW5kIHBhcnQgb2YgCisjIHRoZSBwYXRoLiBUaGUgdGFnIGNhbiBiZSB1c2VkIHRvIHNob3cgcmVsYXRpdmUgcGF0aHMgaW4gdGhlIGZpbGUgbGlzdC4gCisjIElmIGxlZnQgYmxhbmsgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRveHlnZW4gaXMgcnVuIGlzIHVzZWQgYXMgdGhlIAorIyBwYXRoIHRvIHN0cmlwLgorCitTVFJJUF9GUk9NX1BBVEggICAgICAgID0gQHRvcF9zcmNkaXJALworCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIAorIyB0aGUgcGF0aCBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgYSBjbGFzcywgd2hpY2ggdGVsbHMgCisjIHRoZSByZWFkZXIgd2hpY2ggaGVhZGVyIGZpbGUgdG8gaW5jbHVkZSBpbiBvcmRlciB0byB1c2UgYSBjbGFzcy4gCisjIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgCisjIGRlZmluaXRpb24gaXMgdXNlZC4gT3RoZXJ3aXNlIG9uZSBzaG91bGQgc3BlY2lmeSB0aGUgaW5jbHVkZSBwYXRocyB0aGF0IAorIyBhcmUgbm9ybWFsbHkgcGFzc2VkIHRvIHRoZSBjb21waWxlciB1c2luZyB0aGUgLUkgZmxhZy4KKyAKK1NUUklQX0ZST01fSU5DX1BBVEggICAgPSBAdG9wX3NyY2RpckAvCisKKyMgSWYgdGhlIFNIT1JUX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgbXVjaCBzaG9ydGVyIAorIyAoYnV0IGxlc3MgcmVhZGFibGUpIGZpbGUgbmFtZXMuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpcyB5b3VyIGZpbGUgc3lzdGVtcyAKKyMgZG9lc24ndCBzdXBwb3J0IGxvbmcgbmFtZXMgbGlrZSBvbiBET1MsIE1hYywgb3IgQ0QtUk9NLgorCitTSE9SVF9OQU1FUyAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgSkFWQURPQ19BVVRPQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIAorIyB3aWxsIGludGVycHJldCB0aGUgZmlyc3QgbGluZSAodW50aWwgdGhlIGZpcnN0IGRvdCkgb2YgYSBKYXZhRG9jLXN0eWxlIAorIyBjb21tZW50IGFzIHRoZSBicmllZiBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgSmF2YURvYyAKKyMgY29tbWVudHMgd2lsbCBiZWhhdmUganVzdCBsaWtlIHRoZSBRdC1zdHlsZSBjb21tZW50cyAodGh1cyByZXF1aXJpbmcgYW4gCisjIGV4cGxpY2l0IEBicmllZiBjb21tYW5kIGZvciBhIGJyaWVmIGRlc2NyaXB0aW9uLgorCitKQVZBRE9DX0FVVE9CUklFRiAgICAgID0gWUVTCisKKyMgVGhlIE1VTFRJTElORV9DUFBfSVNfQlJJRUYgdGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIG1ha2UgRG94eWdlbiAKKyMgdHJlYXQgYSBtdWx0aS1saW5lIEMrKyBzcGVjaWFsIGNvbW1lbnQgYmxvY2sgKGkuZS4gYSBibG9jayBvZiAvLyEgb3IgLy8vIAorIyBjb21tZW50cykgYXMgYSBicmllZiBkZXNjcmlwdGlvbi4gVGhpcyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gCisjIFRoZSBuZXcgZGVmYXVsdCBpcyB0byB0cmVhdCBhIG11bHRpLWxpbmUgQysrIGNvbW1lbnQgYmxvY2sgYXMgYSBkZXRhaWxlZCAKKyMgZGVzY3JpcHRpb24uIFNldCB0aGlzIHRhZyB0byBZRVMgaWYgeW91IHByZWZlciB0aGUgb2xkIGJlaGF2aW91ciBpbnN0ZWFkLgorCitNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGID0gTk8KKworIyBJZiB0aGUgREVUQUlMU19BVF9UT1AgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIAorIyB3aWxsIG91dHB1dCB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24gbmVhciB0aGUgdG9wLCBsaWtlIEphdmFEb2MuCisjIElmIHNldCB0byBOTywgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGFwcGVhcnMgYWZ0ZXIgdGhlIG1lbWJlciAKKyMgZG9jdW1lbnRhdGlvbi4KKworREVUQUlMU19BVF9UT1AgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIElOSEVSSVRfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYW4gdW5kb2N1bWVudGVkIAorIyBtZW1iZXIgaW5oZXJpdHMgdGhlIGRvY3VtZW50YXRpb24gZnJvbSBhbnkgZG9jdW1lbnRlZCBtZW1iZXIgdGhhdCBpdCAKKyMgcmUtaW1wbGVtZW50cy4KKworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBTRVBBUkFURV9NRU1CRVJfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHByb2R1Y2UgCisjIGEgbmV3IHBhZ2UgZm9yIGVhY2ggbWVtYmVyLiBJZiBzZXQgdG8gTk8sIHRoZSBkb2N1bWVudGF0aW9uIG9mIGEgbWVtYmVyIHdpbGwgCisjIGJlIHBhcnQgb2YgdGhlIGZpbGUvY2xhc3MvbmFtZXNwYWNlIHRoYXQgY29udGFpbnMgaXQuCisKK1NFUEFSQVRFX01FTUJFUl9QQUdFUyAgPSBOTworCisjIFRoZSBUQUJfU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIGEgdGFiLiAKKyMgRG94eWdlbiB1c2VzIHRoaXMgdmFsdWUgdG8gcmVwbGFjZSB0YWJzIGJ5IHNwYWNlcyBpbiBjb2RlIGZyYWdtZW50cy4KKworVEFCX1NJWkUgICAgICAgICAgICAgICA9IDgKKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIGFsaWFzZXMgdGhhdCBhY3RzIAorIyBhcyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gQW4gYWxpYXMgaGFzIHRoZSBmb3JtICJuYW1lPXZhbHVlIi4gCisjIEZvciBleGFtcGxlIGFkZGluZyAic2lkZWVmZmVjdD1ccGFyIFNpZGUgRWZmZWN0czpcbiIgd2lsbCBhbGxvdyB5b3UgdG8gCisjIHB1dCB0aGUgY29tbWFuZCBcc2lkZWVmZmVjdCAob3IgQHNpZGVlZmZlY3QpIGluIHRoZSBkb2N1bWVudGF0aW9uLCB3aGljaCAKKyMgd2lsbCByZXN1bHQgaW4gYSB1c2VyLWRlZmluZWQgcGFyYWdyYXBoIHdpdGggaGVhZGluZyAiU2lkZSBFZmZlY3RzOiIuIAorIyBZb3UgY2FuIHB1dCBcbidzIGluIHRoZSB2YWx1ZSBwYXJ0IG9mIGFuIGFsaWFzIHRvIGluc2VydCBuZXdsaW5lcy4KKworQUxJQVNFUyAgICAgICAgICAgICAgICA9IAorCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0ZPUl9DIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEMgCisjIHNvdXJjZXMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZCBmb3IgQy4gCisjIEZvciBpbnN0YW5jZSwgc29tZSBvZiB0aGUgbmFtZXMgdGhhdCBhcmUgdXNlZCB3aWxsIGJlIGRpZmZlcmVudC4gVGhlIGxpc3QgCisjIG9mIGFsbCBtZW1iZXJzIHdpbGwgYmUgb21pdHRlZCwgZXRjLgorCitPUFRJTUlaRV9PVVRQVVRfRk9SX0MgID0gWUVTCisKKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfSkFWQSB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBKYXZhIAorIyBzb3VyY2VzIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQgZm9yIEphdmEuIAorIyBGb3IgaW5zdGFuY2UsIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50ZWQgYXMgcGFja2FnZXMsIHF1YWxpZmllZCBzY29wZXMgCisjIHdpbGwgbG9vayBkaWZmZXJlbnQsIGV0Yy4KKworT1BUSU1JWkVfT1VUUFVUX0pBVkEgICA9IE5PCisKKyMgSWYgeW91IHVzZSBTVEwgY2xhc3NlcyAoaS5lLiBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3IsIGV0Yy4pIGJ1dCBkbyBub3Qgd2FudCB0byAKKyMgaW5jbHVkZSAoYSB0YWcgZmlsZSBmb3IpIHRoZSBTVEwgc291cmNlcyBhcyBpbnB1dCwgdGhlbiB5b3Ugc2hvdWxkIAorIyBzZXQgdGhpcyB0YWcgdG8gWUVTIGluIG9yZGVyIHRvIGxldCBkb3h5Z2VuIG1hdGNoIGZ1bmN0aW9ucyBkZWNsYXJhdGlvbnMgYW5kIAorIyBkZWZpbml0aW9ucyB3aG9zZSBhcmd1bWVudHMgY29udGFpbiBTVEwgY2xhc3NlcyAoZS5nLiBmdW5jKHN0ZDo6c3RyaW5nKTsgdi5zLiAKKyMgZnVuYyhzdGQ6OnN0cmluZykge30pLiBUaGlzIGFsc28gbWFrZSB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gCisjIGRpYWdyYW1zIHRoYXQgaW52b2x2ZSBTVEwgY2xhc3NlcyBtb3JlIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4KKworQlVJTFRJTl9TVExfU1VQUE9SVCAgICA9IE5PCisKKyMgSWYgbWVtYmVyIGdyb3VwaW5nIGlzIHVzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBESVNUUklCVVRFX0dST1VQX0RPQyAKKyMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHJldXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaXJzdCAKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0IAorIyBhbGwgbWVtYmVycyBvZiBhIGdyb3VwIG11c3QgYmUgZG9jdW1lbnRlZCBleHBsaWNpdGx5LgorCitESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8KKworIyBTZXQgdGhlIFNVQkdST1VQSU5HIHRhZyB0byBZRVMgKHRoZSBkZWZhdWx0KSB0byBhbGxvdyBjbGFzcyBtZW1iZXIgZ3JvdXBzIG9mIAorIyB0aGUgc2FtZSB0eXBlIChmb3IgaW5zdGFuY2UgYSBncm91cCBvZiBwdWJsaWMgZnVuY3Rpb25zKSB0byBiZSBwdXQgYXMgYSAKKyMgc3ViZ3JvdXAgb2YgdGhhdCB0eXBlIChlLmcuIHVuZGVyIHRoZSBQdWJsaWMgRnVuY3Rpb25zIHNlY3Rpb24pLiBTZXQgaXQgdG8gCisjIE5PIHRvIHByZXZlbnQgc3ViZ3JvdXBpbmcuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIGRvbmUgcGVyIGNsYXNzIHVzaW5nIAorIyB0aGUgXG5vc3ViZ3JvdXBpbmcgY29tbWFuZC4KKworU1VCR1JPVVBJTkcgICAgICAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluIAorIyBkb2N1bWVudGF0aW9uIGFyZSBkb2N1bWVudGVkLCBldmVuIGlmIG5vIGRvY3VtZW50YXRpb24gd2FzIGF2YWlsYWJsZS4gCisjIFByaXZhdGUgY2xhc3MgbWVtYmVycyBhbmQgc3RhdGljIGZpbGUgbWVtYmVycyB3aWxsIGJlIGhpZGRlbiB1bmxlc3MgCisjIHRoZSBFWFRSQUNUX1BSSVZBVEUgYW5kIEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMKKworRVhUUkFDVF9BTEwgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRSQUNUX1BSSVZBVEUgdGFnIGlzIHNldCB0byBZRVMgYWxsIHByaXZhdGUgbWVtYmVycyBvZiBhIGNsYXNzIAorIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8KKworIyBJZiB0aGUgRVhUUkFDVF9TVEFUSUMgdGFnIGlzIHNldCB0byBZRVMgYWxsIHN0YXRpYyBtZW1iZXJzIG9mIGEgZmlsZSAKKyMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworRVhUUkFDVF9TVEFUSUMgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRSQUNUX0xPQ0FMX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMgY2xhc3NlcyAoYW5kIHN0cnVjdHMpIAorIyBkZWZpbmVkIGxvY2FsbHkgaW4gc291cmNlIGZpbGVzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uIAorIyBJZiBzZXQgdG8gTk8gb25seSBjbGFzc2VzIGRlZmluZWQgaW4gaGVhZGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4KKworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworCisjIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWZ1bCBmb3IgT2JqZWN0aXZlLUMgY29kZS4gV2hlbiBzZXQgdG8gWUVTIGxvY2FsIAorIyBtZXRob2RzLCB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2VjdGlvbiBidXQgbm90IGluIAorIyB0aGUgaW50ZXJmYWNlIGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIG9ubHkgbWV0aG9kcyBpbiB0aGUgaW50ZXJmYWNlIGFyZSBpbmNsdWRlZC4KKworRVhUUkFDVF9MT0NBTF9NRVRIT0RTICA9IE5PCisKKyMgSWYgdGhlIEhJREVfVU5ET0NfTUVNQkVSUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYWxsIAorIyB1bmRvY3VtZW50ZWQgbWVtYmVycyBvZiBkb2N1bWVudGVkIGNsYXNzZXMsIGZpbGVzIG9yIG5hbWVzcGFjZXMuIAorIyBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVzZSBtZW1iZXJzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIAorIyB2YXJpb3VzIG92ZXJ2aWV3cywgYnV0IG5vIGRvY3VtZW50YXRpb24gc2VjdGlvbiBpcyBnZW5lcmF0ZWQuIAorIyBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisKK0hJREVfVU5ET0NfTUVNQkVSUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX1VORE9DX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbCAKKyMgdW5kb2N1bWVudGVkIGNsYXNzZXMgdGhhdCBhcmUgbm9ybWFsbHkgdmlzaWJsZSBpbiB0aGUgY2xhc3MgaGllcmFyY2h5LiAKKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB2YXJpb3VzIAorIyBvdmVydmlld3MuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgRVhUUkFDVF9BTEwgaXMgZW5hYmxlZC4KKworSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PCisKKyMgSWYgdGhlIEhJREVfRlJJRU5EX0NPTVBPVU5EUyB0YWcgaXMgc2V0IHRvIFlFUywgRG94eWdlbiB3aWxsIGhpZGUgYWxsIAorIyBmcmllbmQgKGNsYXNzfHN0cnVjdHx1bmlvbikgZGVjbGFyYXRpb25zLiAKKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgZGVjbGFyYXRpb25zIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIAorIyBkb2N1bWVudGF0aW9uLgorCitISURFX0ZSSUVORF9DT01QT1VORFMgID0gTk8KKworIyBJZiB0aGUgSElERV9JTl9CT0RZX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFueSAKKyMgZG9jdW1lbnRhdGlvbiBibG9ja3MgZm91bmQgaW5zaWRlIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24uIAorIyBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVzZSBibG9ja3Mgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgCisjIGZ1bmN0aW9uJ3MgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBibG9jay4KKworSElERV9JTl9CT0RZX0RPQ1MgICAgICA9IE5PCisKKyMgVGhlIElOVEVSTkFMX0RPQ1MgdGFnIGRldGVybWluZXMgaWYgZG9jdW1lbnRhdGlvbiAKKyMgdGhhdCBpcyB0eXBlZCBhZnRlciBhIFxpbnRlcm5hbCBjb21tYW5kIGlzIGluY2x1ZGVkLiBJZiB0aGUgdGFnIGlzIHNldCAKKyMgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVuIHRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgZXhjbHVkZWQuIAorIyBTZXQgaXQgdG8gWUVTIHRvIGluY2x1ZGUgdGhlIGludGVybmFsIGRvY3VtZW50YXRpb24uCisKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FTRV9TRU5TRV9OQU1FUyB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gRG94eWdlbiB3aWxsIG9ubHkgZ2VuZXJhdGUgCisjIGZpbGUgbmFtZXMgaW4gbG93ZXItY2FzZSBsZXR0ZXJzLiBJZiBzZXQgdG8gWUVTIHVwcGVyLWNhc2UgbGV0dGVycyBhcmUgYWxzbyAKKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlciAKKyMgaW4gY2FzZSBhbmQgaWYgeW91ciBmaWxlIHN5c3RlbSBzdXBwb3J0cyBjYXNlIHNlbnNpdGl2ZSBmaWxlIG5hbWVzLiBXaW5kb3dzIAorIyBhbmQgTWFjIHVzZXJzIGFyZSBhZHZpc2VkIHRvIHNldCB0aGlzIG9wdGlvbiB0byBOTy4KKworQ0FTRV9TRU5TRV9OQU1FUyAgICAgICA9IFlFUworCisjIElmIHRoZSBISURFX1NDT1BFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4gCisjIHdpbGwgc2hvdyBtZW1iZXJzIHdpdGggdGhlaXIgZnVsbCBjbGFzcyBhbmQgbmFtZXNwYWNlIHNjb3BlcyBpbiB0aGUgCisjIGRvY3VtZW50YXRpb24uIElmIHNldCB0byBZRVMgdGhlIHNjb3BlIHdpbGwgYmUgaGlkZGVuLgorCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBEb3h5Z2VuIAorIyB3aWxsIHB1dCBhIGxpc3Qgb2YgdGhlIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGEgZmlsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyMgb2YgdGhhdCBmaWxlLgorCitTSE9XX0lOQ0xVREVfRklMRVMgICAgID0gWUVTCisKKyMgSWYgdGhlIElOTElORV9JTkZPIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBhIHRhZyBbaW5saW5lXSAKKyMgaXMgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGlubGluZSBtZW1iZXJzLgorCitJTkxJTkVfSU5GTyAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGRveHlnZW4gCisjIHdpbGwgc29ydCB0aGUgKGRldGFpbGVkKSBkb2N1bWVudGF0aW9uIG9mIGZpbGUgYW5kIGNsYXNzIG1lbWJlcnMgCisjIGFscGhhYmV0aWNhbGx5IGJ5IG1lbWJlciBuYW1lLiBJZiBzZXQgdG8gTk8gdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gCisjIGRlY2xhcmF0aW9uIG9yZGVyLgorCitTT1JUX01FTUJFUl9ET0NTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfQlJJRUZfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSAKKyMgYnJpZWYgZG9jdW1lbnRhdGlvbiBvZiBmaWxlLCBuYW1lc3BhY2UgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkgCisjIGJ5IG1lbWJlciBuYW1lLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiAKKyMgZGVjbGFyYXRpb24gb3JkZXIuCisKK1NPUlRfQlJJRUZfRE9DUyAgICAgICAgPSBOTworCisjIElmIHRoZSBTT1JUX0JZX1NDT1BFX05BTUUgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBjbGFzcyBsaXN0IHdpbGwgYmUgCisjIHNvcnRlZCBieSBmdWxseS1xdWFsaWZpZWQgbmFtZXMsIGluY2x1ZGluZyBuYW1lc3BhY2VzLiBJZiBzZXQgdG8gCisjIE5PICh0aGUgZGVmYXVsdCksIHRoZSBjbGFzcyBsaXN0IHdpbGwgYmUgc29ydGVkIG9ubHkgYnkgY2xhc3MgbmFtZSwgCisjIG5vdCBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZSBwYXJ0LiAKKyMgTm90ZTogVGhpcyBvcHRpb24gaXMgbm90IHZlcnkgdXNlZnVsIGlmIEhJREVfU0NPUEVfTkFNRVMgaXMgc2V0IHRvIFlFUy4KKyMgTm90ZTogVGhpcyBvcHRpb24gYXBwbGllcyBvbmx5IHRvIHRoZSBjbGFzcyBsaXN0LCBub3QgdG8gdGhlIAorIyBhbHBoYWJldGljYWwgbGlzdC4KKworU09SVF9CWV9TQ09QRV9OQU1FICAgICA9IE5PCisKKyMgVGhlIEdFTkVSQVRFX1RPRE9MSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IgCisjIGRpc2FibGUgKE5PKSB0aGUgdG9kbyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0b2RvIAorIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfVE9ET0xJU1QgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9URVNUTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAorIyBkaXNhYmxlIChOTykgdGhlIHRlc3QgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdGVzdCAKKyMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX1RFU1RMSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfQlVHTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAorIyBkaXNhYmxlIChOTykgdGhlIGJ1ZyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxidWcgCisjIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9CVUdMSVNUICAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0RFUFJFQ0FURURMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IgCisjIGRpc2FibGUgKE5PKSB0aGUgZGVwcmVjYXRlZCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIAorIyBcZGVwcmVjYXRlZCBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfREVQUkVDQVRFRExJU1Q9IFlFUworCisjIFRoZSBFTkFCTEVEX1NFQ1RJT05TIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgY29uZGl0aW9uYWwgCisjIGRvY3VtZW50YXRpb24gc2VjdGlvbnMsIG1hcmtlZCBieSBcaWYgc2VjdGlvbm5hbWUgLi4uIFxlbmRpZi4KKworRU5BQkxFRF9TRUNUSU9OUyAgICAgICA9IAorCisjIFRoZSBNQVhfSU5JVElBTElaRVJfTElORVMgdGFnIGRldGVybWluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIAorIyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBhIHZhcmlhYmxlIG9yIGRlZmluZSBjb25zaXN0cyBvZiBmb3IgaXQgdG8gYXBwZWFyIGluIAorIyB0aGUgZG9jdW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemVyIGNvbnNpc3RzIG9mIG1vcmUgbGluZXMgdGhhbiBzcGVjaWZpZWQgCisjIGhlcmUgaXQgd2lsbCBiZSBoaWRkZW4uIFVzZSBhIHZhbHVlIG9mIDAgdG8gaGlkZSBpbml0aWFsaXplcnMgY29tcGxldGVseS4gCisjIFRoZSBhcHBlYXJhbmNlIG9mIHRoZSBpbml0aWFsaXplciBvZiBpbmRpdmlkdWFsIHZhcmlhYmxlcyBhbmQgZGVmaW5lcyBpbiB0aGUgCisjIGRvY3VtZW50YXRpb24gY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgXHNob3dpbml0aWFsaXplciBvciBcaGlkZWluaXRpYWxpemVyIAorIyBjb21tYW5kIGluIHRoZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLgorCitNQVhfSU5JVElBTElaRVJfTElORVMgID0gMzAKKworIyBTZXQgdGhlIFNIT1dfVVNFRF9GSUxFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgbGlzdCBvZiBmaWxlcyBnZW5lcmF0ZWQgCisjIGF0IHRoZSBib3R0b20gb2YgdGhlIGRvY3VtZW50YXRpb24gb2YgY2xhc3NlcyBhbmQgc3RydWN0cy4gSWYgc2V0IHRvIFlFUyB0aGUgCisjIGxpc3Qgd2lsbCBtZW50aW9uIHRoZSBmaWxlcyB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZG9jdW1lbnRhdGlvbi4KKworU0hPV19VU0VEX0ZJTEVTICAgICAgICA9IFlFUworCisjIElmIHRoZSBzb3VyY2VzIGluIHlvdXIgcHJvamVjdCBhcmUgZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBkaXJlY3RvcmllcyAKKyMgdGhlbiBzZXR0aW5nIHRoZSBTSE9XX0RJUkVDVE9SSUVTIHRhZyB0byBZRVMgd2lsbCBzaG93IHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5IAorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlIGRlZmF1bHQgaXMgTk8uCisKK1NIT1dfRElSRUNUT1JJRVMgICAgICAgPSBOTworCisjIFRoZSBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcHJvZ3JhbSBvciBzY3JpcHQgdGhhdCAKKyMgZG94eWdlbiBzaG91bGQgaW52b2tlIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIGZvciBlYWNoIGZpbGUgKHR5cGljYWxseSBmcm9tIHRoZSAKKyMgdmVyc2lvbiBjb250cm9sIHN5c3RlbSkuIERveHlnZW4gd2lsbCBpbnZva2UgdGhlIHByb2dyYW0gYnkgZXhlY3V0aW5nICh2aWEgCisjIHBvcGVuKCkpIHRoZSBjb21tYW5kIDxjb21tYW5kPiA8aW5wdXQtZmlsZT4sIHdoZXJlIDxjb21tYW5kPiBpcyB0aGUgdmFsdWUgb2YgCisjIHRoZSBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUgbmFtZSBvZiBhbiBpbnB1dCBmaWxlIAorIyBwcm92aWRlZCBieSBkb3h5Z2VuLiBXaGF0ZXZlciB0aGUgcHJvZ3JhbSB3cml0ZXMgdG8gc3RhbmRhcmQgb3V0cHV0IAorIyBpcyB1c2VkIGFzIHRoZSBmaWxlIHZlcnNpb24uIFNlZSB0aGUgbWFudWFsIGZvciBleGFtcGxlcy4KKworRklMRV9WRVJTSU9OX0ZJTFRFUiAgICA9IAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdhcm5pbmcgYW5kIHByb2dyZXNzIG1lc3NhZ2VzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFFVSUVUIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIAorIyBieSBkb3h5Z2VuLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIElmIGxlZnQgYmxhbmsgTk8gaXMgdXNlZC4KKworUVVJRVQgICAgICAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5JTkdTIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgd2FybmluZyBtZXNzYWdlcyB0aGF0IGFyZSAKKyMgZ2VuZXJhdGVkIGJ5IGRveHlnZW4uIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gSWYgbGVmdCBibGFuayAKKyMgTk8gaXMgdXNlZC4KKworV0FSTklOR1MgICAgICAgICAgICAgICA9IFlFUworCisjIElmIFdBUk5fSUZfVU5ET0NVTUVOVEVEIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIHdhcm5pbmdzIAorIyBmb3IgdW5kb2N1bWVudGVkIG1lbWJlcnMuIElmIEVYVFJBQ1RfQUxMIGlzIHNldCB0byBZRVMgdGhlbiB0aGlzIGZsYWcgd2lsbCAKKyMgYXV0b21hdGljYWxseSBiZSBkaXNhYmxlZC4KKworV0FSTl9JRl9VTkRPQ1VNRU5URUQgICA9IFlFUworCisjIElmIFdBUk5fSUZfRE9DX0VSUk9SIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgCisjIHBvdGVudGlhbCBlcnJvcnMgaW4gdGhlIGRvY3VtZW50YXRpb24sIHN1Y2ggYXMgbm90IGRvY3VtZW50aW5nIHNvbWUgCisjIHBhcmFtZXRlcnMgaW4gYSBkb2N1bWVudGVkIGZ1bmN0aW9uLCBvciBkb2N1bWVudGluZyBwYXJhbWV0ZXJzIHRoYXQgCisjIGRvbid0IGV4aXN0IG9yIHVzaW5nIG1hcmt1cCBjb21tYW5kcyB3cm9uZ2x5LgorCitXQVJOX0lGX0RPQ19FUlJPUiAgICAgID0gWUVTCisKKyMgVGhpcyBXQVJOX05PX1BBUkFNRE9DIG9wdGlvbiBjYW4gYmUgYWJsZWQgdG8gZ2V0IHdhcm5pbmdzIGZvciAKKyMgZnVuY3Rpb25zIHRoYXQgYXJlIGRvY3VtZW50ZWQsIGJ1dCBoYXZlIG5vIGRvY3VtZW50YXRpb24gZm9yIHRoZWlyIHBhcmFtZXRlcnMgCisjIG9yIHJldHVybiB2YWx1ZS4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgZG94eWdlbiB3aWxsIG9ubHkgd2FybiBhYm91dCAKKyMgd3Jvbmcgb3IgaW5jb21wbGV0ZSBwYXJhbWV0ZXIgZG9jdW1lbnRhdGlvbiwgYnV0IG5vdCBhYm91dCB0aGUgYWJzZW5jZSBvZiAKKyMgZG9jdW1lbnRhdGlvbi4KKworV0FSTl9OT19QQVJBTURPQyAgICAgICA9IE5PCisKKyMgVGhlIFdBUk5fRk9STUFUIHRhZyBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgb2YgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCAKKyMgZG94eWdlbiBjYW4gcHJvZHVjZS4gVGhlIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgJGZpbGUsICRsaW5lLCBhbmQgJHRleHQgCisjIHRhZ3MsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIGZyb20gd2hpY2ggdGhlIAorIyB3YXJuaW5nIG9yaWdpbmF0ZWQgYW5kIHRoZSB3YXJuaW5nIHRleHQuIE9wdGlvbmFsbHkgdGhlIGZvcm1hdCBtYXkgY29udGFpbiAKKyMgJHZlcnNpb24sIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHZlcnNpb24gb2YgdGhlIGZpbGUgKGlmIGl0IGNvdWxkIAorIyBiZSBvYnRhaW5lZCB2aWEgRklMRV9WRVJTSU9OX0ZJTFRFUikKKworV0FSTl9GT1JNQVQgICAgICAgICAgICA9ICIkZmlsZTokbGluZTogJHRleHQiCisKKyMgVGhlIFdBUk5fTE9HRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZpbGUgdG8gd2hpY2ggd2FybmluZyAKKyMgYW5kIGVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSB3cml0dGVuLiBJZiBsZWZ0IGJsYW5rIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiAKKyMgdG8gc3RkZXJyLgorCitXQVJOX0xPR0ZJTEUgICAgICAgICAgID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIElOUFVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIAorIyBkb2N1bWVudGVkIHNvdXJjZSBmaWxlcy4gWW91IG1heSBlbnRlciBmaWxlIG5hbWVzIGxpa2UgIm15ZmlsZS5jcHAiIG9yIAorIyBkaXJlY3RvcmllcyBsaWtlICIvdXNyL3NyYy9teXByb2plY3QiLiBTZXBhcmF0ZSB0aGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgCisjIHdpdGggc3BhY2VzLgorCitJTlBVVCAgICAgICAgICAgICAgICAgID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLi9wb3B0LmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgLi9wb3B0LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgLi9wb3B0Y29uZmlnLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgLi9wb3B0aGVscC5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC4vcG9wdGludC5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC4vcG9wdGludC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC4vcG9wdHBhcnNlLmMgXAorCQkJLi9zeXN0ZW0uaAorCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUgCisjIEZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgcGF0dGVybiAobGlrZSAqLmNwcCAKKyMgYW5kICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCAKKyMgYmxhbmsgdGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgdGVzdGVkOiAKKyMgKi5jICouY2MgKi5jeHggKi5jcHAgKi5jKysgKi5qYXZhICouaWkgKi5peHggKi5pcHAgKi5pKysgKi5pbmwgKi5oICouaGggKi5oeHggCisjICouaHBwICouaCsrICouaWRsICoub2RsICouY3MgKi5waHAgKi5waHAzICouaW5jICoubSAqLm1tICoucHkKKworRklMRV9QQVRURVJOUyAgICAgICAgICA9ICouYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKi5oCisKKyMgVGhlIFJFQ1VSU0lWRSB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBzcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHN1YmRpcmVjdG9yaWVzIAorIyBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIGFzIHdlbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gCisjIElmIGxlZnQgYmxhbmsgTk8gaXMgdXNlZC4KKworUkVDVVJTSVZFICAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIEVYQ0xVREUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZmlsZXMgYW5kL29yIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIAorIyBleGNsdWRlZCBmcm9tIHRoZSBJTlBVVCBzb3VyY2UgZmlsZXMuIFRoaXMgd2F5IHlvdSBjYW4gZWFzaWx5IGV4Y2x1ZGUgYSAKKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuCisKK0VYQ0xVREUgICAgICAgICAgICAgICAgPSAKKworIyBUaGUgRVhDTFVERV9TWU1MSU5LUyB0YWcgY2FuIGJlIHVzZWQgc2VsZWN0IHdoZXRoZXIgb3Igbm90IGZpbGVzIG9yIAorIyBkaXJlY3RvcmllcyB0aGF0IGFyZSBzeW1ib2xpYyBsaW5rcyAoYSBVbml4IGZpbGVzeXN0ZW0gZmVhdHVyZSkgYXJlIGV4Y2x1ZGVkIAorIyBmcm9tIHRoZSBpbnB1dC4KKworRVhDTFVERV9TWU1MSU5LUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZSAKKyMgRVhDTFVERV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyB0byBleGNsdWRlIAorIyBjZXJ0YWluIGZpbGVzIGZyb20gdGhvc2UgZGlyZWN0b3JpZXMuIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkIAorIyBhZ2FpbnN0IHRoZSBmaWxlIHdpdGggYWJzb2x1dGUgcGF0aCwgc28gdG8gZXhjbHVkZSBhbGwgdGVzdCBkaXJlY3RvcmllcyAKKyMgZm9yIGV4YW1wbGUgdXNlIHRoZSBwYXR0ZXJuICovdGVzdC8qCisKK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPSAKKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIAorIyBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gZXhhbXBsZSBjb2RlIGZyYWdtZW50cyB0aGF0IGFyZSBpbmNsdWRlZCAoc2VlIAorIyB0aGUgXGluY2x1ZGUgY29tbWFuZCkuCisKK0VYQU1QTEVfUEFUSCAgICAgICAgICAgPSAKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZSAKKyMgRVhBTVBMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJuIChsaWtlICouY3BwIAorIyBhbmQgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IAorIyBibGFuayBhbGwgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gCisKKyMgSWYgdGhlIEVYQU1QTEVfUkVDVVJTSVZFIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gc3ViZGlyZWN0b3JpZXMgd2lsbCBiZSAKKyMgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgXGluY2x1ZGUgb3IgXGRvbnRpbmNsdWRlIAorIyBjb21tYW5kcyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZhbHVlIG9mIHRoZSBSRUNVUlNJVkUgdGFnLiAKKyMgUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK0VYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTworCisjIFRoZSBJTUFHRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIAorIyBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gaW1hZ2UgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSAKKyMgdGhlIFxpbWFnZSBjb21tYW5kKS4KKworSU1BR0VfUEFUSCAgICAgICAgICAgICA9IAorCisjIFRoZSBJTlBVVF9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIHRoYXQgZG94eWdlbiBzaG91bGQgCisjIGludm9rZSB0byBmaWx0ZXIgZm9yIGVhY2ggaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgZmlsdGVyIHByb2dyYW0gCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kIDxmaWx0ZXI+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGZpbHRlcj4gCisjIGlzIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVRfRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUgbmFtZSBvZiBhbiAKKyMgaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIHRoZW4gdXNlIHRoZSBvdXRwdXQgdGhhdCB0aGUgZmlsdGVyIHByb2dyYW0gd3JpdGVzIAorIyB0byBzdGFuZGFyZCBvdXRwdXQuICBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZyB3aWxsIGJlIAorIyBpZ25vcmVkLgorCitJTlBVVF9GSUxURVIgICAgICAgICAgID0gCisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybiAKKyMgYmFzaXMuICBEb3h5Z2VuIHdpbGwgY29tcGFyZSB0aGUgZmlsZSBuYW1lIHdpdGggZWFjaCBwYXR0ZXJuIGFuZCBhcHBseSB0aGUgCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLiAgVGhlIGZpbHRlcnMgYXJlIGEgbGlzdCBvZiB0aGUgZm9ybTogCisjIHBhdHRlcm49ZmlsdGVyIChsaWtlICouY3BwPW15X2NwcF9maWx0ZXIpLiBTZWUgSU5QVVRfRklMVEVSIGZvciBmdXJ0aGVyIAorIyBpbmZvIG9uIGhvdyBmaWx0ZXJzIGFyZSB1c2VkLiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgZW1wdHksIElOUFVUX0ZJTFRFUiAKKyMgaXMgYXBwbGllZCB0byBhbGwgZmlsZXMuCisKK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPSAKKworIyBJZiB0aGUgRklMVEVSX1NPVVJDRV9GSUxFUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIGlucHV0IGZpbHRlciAoaWYgc2V0IHVzaW5nIAorIyBJTlBVVF9GSUxURVIpIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGlucHV0IGZpbGVzIHdoZW4gcHJvZHVjaW5nIHNvdXJjZSAKKyMgZmlsZXMgdG8gYnJvd3NlIChpLmUuIHdoZW4gU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUykuCisKK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgd2lsbCAKKyMgYmUgZ2VuZXJhdGVkLiBEb2N1bWVudGVkIGVudGl0aWVzIHdpbGwgYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZXNlIHNvdXJjZXMuIAorIyBOb3RlOiBUbyBnZXQgcmlkIG9mIGFsbCBzb3VyY2UgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dCwgbWFrZSBzdXJlIGFsc28gCisjIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLgorCitTT1VSQ0VfQlJPV1NFUiAgICAgICAgID0gWUVTCisKKyMgU2V0dGluZyB0aGUgSU5MSU5FX1NPVVJDRVMgdGFnIHRvIFlFUyB3aWxsIGluY2x1ZGUgdGhlIGJvZHkgCisjIG9mIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IE5PCisKKyMgU2V0dGluZyB0aGUgU1RSSVBfQ09ERV9DT01NRU5UUyB0YWcgdG8gWUVTICh0aGUgZGVmYXVsdCkgd2lsbCBpbnN0cnVjdCAKKyMgZG94eWdlbiB0byBoaWRlIGFueSBzcGVjaWFsIGNvbW1lbnQgYmxvY2tzIGZyb20gZ2VuZXJhdGVkIHNvdXJjZSBjb2RlIAorIyBmcmFnbWVudHMuIE5vcm1hbCBDIGFuZCBDKysgY29tbWVudHMgd2lsbCBhbHdheXMgcmVtYWluIHZpc2libGUuCisKK1NUUklQX0NPREVfQ09NTUVOVFMgICAgPSBZRVMKKworIyBJZiB0aGUgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIAorIyB0aGVuIGZvciBlYWNoIGRvY3VtZW50ZWQgZnVuY3Rpb24gYWxsIGRvY3VtZW50ZWQgCisjIGZ1bmN0aW9ucyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGxpc3RlZC4KKworUkVGRVJFTkNFRF9CWV9SRUxBVElPTiA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VTX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgCisjIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCBlbnRpdGllcyAKKyMgY2FsbGVkL3VzZWQgYnkgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGxpc3RlZC4KKworUkVGRVJFTkNFU19SRUxBVElPTiAgICA9IFlFUworCisjIElmIHRoZSBVU0VfSFRBR1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgcmVmZXJlbmNlcyB0byBzb3VyY2UgY29kZSAKKyMgd2lsbCBwb2ludCB0byB0aGUgSFRNTCBnZW5lcmF0ZWQgYnkgdGhlIGh0YWdzKDEpIHRvb2wgaW5zdGVhZCBvZiBkb3h5Z2VuIAorIyBidWlsdC1pbiBzb3VyY2UgYnJvd3Nlci4gVGhlIGh0YWdzIHRvb2wgaXMgcGFydCBvZiBHTlUncyBnbG9iYWwgc291cmNlIAorIyB0YWdnaW5nIHN5c3RlbSAoc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbG9iYWwvZ2xvYmFsLmh0bWwpLiBZb3UgCisjIHdpbGwgbmVlZCB2ZXJzaW9uIDQuOC42IG9yIGhpZ2hlci4KKworVVNFX0hUQUdTICAgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIFZFUkJBVElNX0hFQURFUlMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBoZWFkZXIgZmlsZSBmb3IgZWFjaCBjbGFzcyBmb3IgCisjIHdoaWNoIGFuIGluY2x1ZGUgaXMgc3BlY2lmaWVkLiBTZXQgdG8gTk8gdG8gZGlzYWJsZSB0aGlzLgorCitWRVJCQVRJTV9IRUFERVJTICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBBTFBIQUJFVElDQUxfSU5ERVggdGFnIGlzIHNldCB0byBZRVMsIGFuIGFscGhhYmV0aWNhbCBpbmRleCAKKyMgb2YgYWxsIGNvbXBvdW5kcyB3aWxsIGJlIGdlbmVyYXRlZC4gRW5hYmxlIHRoaXMgaWYgdGhlIHByb2plY3QgCisjIGNvbnRhaW5zIGEgbG90IG9mIGNsYXNzZXMsIHN0cnVjdHMsIHVuaW9ucyBvciBpbnRlcmZhY2VzLgorCitBTFBIQUJFVElDQUxfSU5ERVggICAgID0gTk8KKworIyBJZiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4IGlzIGVuYWJsZWQgKHNlZSBBTFBIQUJFVElDQUxfSU5ERVgpIHRoZW4gCisjIHRoZSBDT0xTX0lOX0FMUEhBX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29sdW1ucyAKKyMgaW4gd2hpY2ggdGhpcyBsaXN0IHdpbGwgYmUgc3BsaXQgKGNhbiBiZSBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWzEuLjIwXSkKKworQ09MU19JTl9BTFBIQV9JTkRFWCAgICA9IDUKKworIyBJbiBjYXNlIGFsbCBjbGFzc2VzIGluIGEgcHJvamVjdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeCwgYWxsIAorIyBjbGFzc2VzIHdpbGwgYmUgcHV0IHVuZGVyIHRoZSBzYW1lIGhlYWRlciBpbiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4LiAKKyMgVGhlIElHTk9SRV9QUkVGSVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgcHJlZml4ZXMgdGhhdCAKKyMgc2hvdWxkIGJlIGlnbm9yZWQgd2hpbGUgZ2VuZXJhdGluZyB0aGUgaW5kZXggaGVhZGVycy4KKworSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBIVE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBIVE1MIG91dHB1dC4KKworR0VORVJBVEVfSFRNTCAgICAgICAgICA9IFlFUworCisjIFRoZSBIVE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBIVE1MIGRvY3Mgd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYGh0bWwnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitIVE1MX09VVFBVVCAgICAgICAgICAgID0gaHRtbAorCisjIFRoZSBIVE1MX0ZJTEVfRVhURU5TSU9OIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZSAoZm9yIGV4YW1wbGU6IC5odG0sLnBocCwuYXNwKS4gSWYgaXQgaXMgbGVmdCBibGFuayAKKyMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGZpbGVzIHdpdGggLmh0bWwgZXh0ZW5zaW9uLgorCitIVE1MX0ZJTEVfRVhURU5TSU9OICAgID0gLmh0bWwKKworIyBUaGUgSFRNTF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBIVE1MIGhlYWRlciBmb3IgCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSAKKyMgc3RhbmRhcmQgaGVhZGVyLgorCitIVE1MX0hFQURFUiAgICAgICAgICAgID0gCisKKyMgVGhlIEhUTUxfRk9PVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgSFRNTCBmb290ZXIgZm9yIAorIyBlYWNoIGdlbmVyYXRlZCBIVE1MIHBhZ2UuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgCisjIHN0YW5kYXJkIGZvb3Rlci4KKworSFRNTF9GT09URVIgICAgICAgICAgICA9IGZvb3Rlcl9ub190aW1lc3RhbXAuaHRtbAorCisjIFRoZSBIVE1MX1NUWUxFU0hFRVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSB1c2VyLWRlZmluZWQgY2FzY2FkaW5nIAorIyBzdHlsZSBzaGVldCB0aGF0IGlzIHVzZWQgYnkgZWFjaCBIVE1MIHBhZ2UuIEl0IGNhbiBiZSB1c2VkIHRvIAorIyBmaW5lLXR1bmUgdGhlIGxvb2sgb2YgdGhlIEhUTUwgb3V0cHV0LiBJZiB0aGUgdGFnIGlzIGxlZnQgYmxhbmsgZG94eWdlbiAKKyMgd2lsbCBnZW5lcmF0ZSBhIGRlZmF1bHQgc3R5bGUgc2hlZXQuIE5vdGUgdGhhdCBkb3h5Z2VuIHdpbGwgdHJ5IHRvIGNvcHkgCisjIHRoZSBzdHlsZSBzaGVldCBmaWxlIHRvIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnksIHNvIGRvbid0IHB1dCB5b3VyIG93biAKKyMgc3R5bGVzaGVldCBpbiB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5IGFzIHdlbGwsIG9yIGl0IHdpbGwgYmUgZXJhc2VkIQorCitIVE1MX1NUWUxFU0hFRVQgICAgICAgID0gCisKKyMgSWYgdGhlIEhUTUxfQUxJR05fTUVNQkVSUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIG1lbWJlcnMgb2YgY2xhc3NlcywgCisjIGZpbGVzIG9yIG5hbWVzcGFjZXMgd2lsbCBiZSBhbGlnbmVkIGluIEhUTUwgdXNpbmcgdGFibGVzLiBJZiBzZXQgdG8gCisjIE5PIGEgYnVsbGV0IGxpc3Qgd2lsbCBiZSB1c2VkLgorCitIVE1MX0FMSUdOX01FTUJFUlMgICAgID0gWUVTCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIAorIyB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciB0b29scyBsaWtlIHRoZSAKKyMgTWljcm9zb2Z0IEhUTUwgaGVscCB3b3Jrc2hvcCB0byBnZW5lcmF0ZSBhIGNvbXByZXNzZWQgSFRNTCBoZWxwIGZpbGUgKC5jaG0pIAorIyBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQ0hNX0ZJTEUgdGFnIGNhbiAKKyMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAuY2htIGZpbGUuIFlvdSAKKyMgY2FuIGFkZCBhIHBhdGggaW4gZnJvbnQgb2YgdGhlIGZpbGUgaWYgdGhlIHJlc3VsdCBzaG91bGQgbm90IGJlIAorIyB3cml0dGVuIHRvIHRoZSBodG1sIG91dHB1dCBkaXJlY3RvcnkuCisKK0NITV9GSUxFICAgICAgICAgICAgICAgPSAKKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBISENfTE9DQVRJT04gdGFnIGNhbiAKKyMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiAoYWJzb2x1dGUgcGF0aCBpbmNsdWRpbmcgZmlsZSBuYW1lKSBvZiAKKyMgdGhlIEhUTUwgaGVscCBjb21waWxlciAoaGhjLmV4ZSkuIElmIG5vbi1lbXB0eSBkb3h5Z2VuIHdpbGwgdHJ5IHRvIHJ1biAKKyMgdGhlIEhUTUwgaGVscCBjb21waWxlciBvbiB0aGUgZ2VuZXJhdGVkIGluZGV4LmhocC4KKworSEhDX0xPQ0FUSU9OICAgICAgICAgICA9IAorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEdFTkVSQVRFX0NISSBmbGFnIAorIyBjb250cm9scyBpZiBhIHNlcGFyYXRlIC5jaGkgaW5kZXggZmlsZSBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgdGhhdCAKKyMgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBtYXN0ZXIgLmNobSBmaWxlIChOTykuCisKK0dFTkVSQVRFX0NISSAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEJJTkFSWV9UT0MgZmxhZyAKKyMgY29udHJvbHMgd2hldGhlciBhIGJpbmFyeSB0YWJsZSBvZiBjb250ZW50cyBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgYSAKKyMgbm9ybWFsIHRhYmxlIG9mIGNvbnRlbnRzIChOTykgaW4gdGhlIC5jaG0gZmlsZS4KKworQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIFRPQ19FWFBBTkQgZmxhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBhZGQgZXh0cmEgaXRlbXMgZm9yIGdyb3VwIG1lbWJlcnMgCisjIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgSFRNTCBoZWxwIGRvY3VtZW50YXRpb24gYW5kIHRvIHRoZSB0cmVlIHZpZXcuCisKK1RPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTworCisjIFRoZSBESVNBQkxFX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgY29uZGVuc2VkIGluZGV4IGF0IAorIyB0b3Agb2YgZWFjaCBIVE1MIHBhZ2UuIFRoZSB2YWx1ZSBOTyAodGhlIGRlZmF1bHQpIGVuYWJsZXMgdGhlIGluZGV4IGFuZCAKKyMgdGhlIHZhbHVlIFlFUyBkaXNhYmxlcyBpdC4KKworRElTQUJMRV9JTkRFWCAgICAgICAgICA9IE5PCisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZW51bSB2YWx1ZXMgKHJhbmdlIFsxLi4yMF0pIAorIyB0aGF0IGRveHlnZW4gd2lsbCBncm91cCBvbiBvbmUgbGluZSBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4KKworRU5VTV9WQUxVRVNfUEVSX0xJTkUgICA9IDQKKworIyBJZiB0aGUgR0VORVJBVEVfVFJFRVZJRVcgdGFnIGlzIHNldCB0byBZRVMsIGEgc2lkZSBwYW5lbCB3aWxsIGJlCisjIGdlbmVyYXRlZCBjb250YWluaW5nIGEgdHJlZS1saWtlIGluZGV4IHN0cnVjdHVyZSAoanVzdCBsaWtlIHRoZSBvbmUgdGhhdCAKKyMgaXMgZ2VuZXJhdGVkIGZvciBIVE1MIEhlbHApLiBGb3IgdGhpcyB0byB3b3JrIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIAorIyBKYXZhU2NyaXB0LCBESFRNTCwgQ1NTIGFuZCBmcmFtZXMgaXMgcmVxdWlyZWQgKGZvciBpbnN0YW5jZSBNb3ppbGxhIDEuMCssIAorIyBOZXRzY2FwZSA2LjArLCBJbnRlcm5ldCBleHBsb3JlciA1LjArLCBvciBLb25xdWVyb3IpLiBXaW5kb3dzIHVzZXJzIGFyZSAKKyMgcHJvYmFibHkgYmV0dGVyIG9mZiB1c2luZyB0aGUgSFRNTCBoZWxwIGZlYXR1cmUuCisKK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBOTworCisjIElmIHRoZSB0cmVldmlldyBpcyBlbmFibGVkIChzZWUgR0VORVJBVEVfVFJFRVZJRVcpIHRoZW4gdGhpcyB0YWcgY2FuIGJlIAorIyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZnJhbWUgaW4gd2hpY2ggdGhlIHRyZWUgCisjIGlzIHNob3duLgorCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIExhVGVYIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgTGF0ZXggb3V0cHV0LgorCitHRU5FUkFURV9MQVRFWCAgICAgICAgID0gTk8KKworIyBUaGUgTEFURVhfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIExhVGVYIGRvY3Mgd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYGxhdGV4JyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGF0aC4KKworTEFURVhfT1VUUFVUICAgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIExBVEVYX0NNRF9OQU1FIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBMYVRlWCBjb21tYW5kIG5hbWUgdG8gYmUgCisjIGludm9rZWQuIElmIGxlZnQgYmxhbmsgYGxhdGV4JyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgY29tbWFuZCBuYW1lLgorCitMQVRFWF9DTURfTkFNRSAgICAgICAgID0gbGF0ZXgKKworIyBUaGUgTUFLRUlOREVYX0NNRF9OQU1FIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb21tYW5kIG5hbWUgdG8gCisjIGdlbmVyYXRlIGluZGV4IGZvciBMYVRlWC4gSWYgbGVmdCBibGFuayBgbWFrZWluZGV4JyB3aWxsIGJlIHVzZWQgYXMgdGhlIAorIyBkZWZhdWx0IGNvbW1hbmQgbmFtZS4KKworTUFLRUlOREVYX0NNRF9OQU1FICAgICA9IG1ha2VpbmRleAorCisjIElmIHRoZSBDT01QQUNUX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCAKKyMgTGFUZVggZG9jdW1lbnRzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNtYWxsIHByb2plY3RzIGFuZCBtYXkgaGVscCB0byAKKyMgc2F2ZSBzb21lIHRyZWVzIGluIGdlbmVyYWwuCisKK0NPTVBBQ1RfTEFURVggICAgICAgICAgPSBOTworCisjIFRoZSBQQVBFUl9UWVBFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHBhcGVyIHR5cGUgdGhhdCBpcyB1c2VkIAorIyBieSB0aGUgcHJpbnRlci4gUG9zc2libGUgdmFsdWVzIGFyZTogYTQsIGE0d2lkZSwgbGV0dGVyLCBsZWdhbCBhbmQgCisjIGV4ZWN1dGl2ZS4gSWYgbGVmdCBibGFuayBhNHdpZGUgd2lsbCBiZSB1c2VkLgorCitQQVBFUl9UWVBFICAgICAgICAgICAgID0gbGV0dGVyCisKKyMgVGhlIEVYVFJBX1BBQ0tBR0VTIHRhZyBjYW4gYmUgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBuYW1lcyBvZiBMYVRlWCAKKyMgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIExhVGVYIG91dHB1dC4KKworRVhUUkFfUEFDS0FHRVMgICAgICAgICA9IAorCisjIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIAorIyB0aGUgZ2VuZXJhdGVkIGxhdGV4IGRvY3VtZW50LiBUaGUgaGVhZGVyIHNob3VsZCBjb250YWluIGV2ZXJ5dGhpbmcgdW50aWwgCisjIHRoZSBmaXJzdCBjaGFwdGVyLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIAorIyBzdGFuZGFyZCBoZWFkZXIuIE5vdGljZTogb25seSB1c2UgdGhpcyB0YWcgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIQorCitMQVRFWF9IRUFERVIgICAgICAgICAgID0gCisKKyMgSWYgdGhlIFBERl9IWVBFUkxJTktTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgTGFUZVggdGhhdCBpcyBnZW5lcmF0ZWQgCisjIGlzIHByZXBhcmVkIGZvciBjb252ZXJzaW9uIHRvIHBkZiAodXNpbmcgcHMycGRmKS4gVGhlIHBkZiBmaWxlIHdpbGwgCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzIAorIyBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBhIHBkZiB2aWV3ZXIuCisKK1BERl9IWVBFUkxJTktTICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVVNFX1BERkxBVEVYIHRhZyBpcyBzZXQgdG8gWUVTLCBwZGZsYXRleCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiAKKyMgcGxhaW4gbGF0ZXggaW4gdGhlIGdlbmVyYXRlZCBNYWtlZmlsZS4gU2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0byBnZXQgYSAKKyMgaGlnaGVyIHF1YWxpdHkgUERGIGRvY3VtZW50YXRpb24uCisKK1VTRV9QREZMQVRFWCAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgTEFURVhfQkFUQ0hNT0RFIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgYWRkIHRoZSBcXGJhdGNobW9kZS4gCisjIGNvbW1hbmQgdG8gdGhlIGdlbmVyYXRlZCBMYVRlWCBmaWxlcy4gVGhpcyB3aWxsIGluc3RydWN0IExhVGVYIHRvIGtlZXAgCisjIHJ1bm5pbmcgaWYgZXJyb3JzIG9jY3VyLCBpbnN0ZWFkIG9mIGFza2luZyB0aGUgdXNlciBmb3IgaGVscC4gCisjIFRoaXMgb3B0aW9uIGlzIGFsc28gdXNlZCB3aGVuIGdlbmVyYXRpbmcgZm9ybXVsYXMgaW4gSFRNTC4KKworTEFURVhfQkFUQ0hNT0RFICAgICAgICA9IE5PCisKKyMgSWYgTEFURVhfSElERV9JTkRJQ0VTIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbm90IAorIyBpbmNsdWRlIHRoZSBpbmRleCBjaGFwdGVycyAoc3VjaCBhcyBGaWxlIEluZGV4LCBDb21wb3VuZCBJbmRleCwgZXRjLikgCisjIGluIHRoZSBvdXRwdXQuCisKK0xBVEVYX0hJREVfSU5ESUNFUyAgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBSVEYgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1JURiB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgUlRGIG91dHB1dCAKKyMgVGhlIFJURiBvdXRwdXQgaXMgb3B0aW1pemVkIGZvciBXb3JkIDk3IGFuZCBtYXkgbm90IGxvb2sgdmVyeSBwcmV0dHkgd2l0aCAKKyMgb3RoZXIgUlRGIHJlYWRlcnMgb3IgZWRpdG9ycy4KKworR0VORVJBVEVfUlRGICAgICAgICAgICA9IE5PCisKKyMgVGhlIFJURl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgUlRGIGRvY3Mgd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYHJ0Zicgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK1JURl9PVVRQVVQgICAgICAgICAgICAgPSBydGYKKworIyBJZiB0aGUgQ09NUEFDVF9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IAorIyBSVEYgZG9jdW1lbnRzLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHNtYWxsIHByb2plY3RzIGFuZCBtYXkgaGVscCB0byAKKyMgc2F2ZSBzb21lIHRyZWVzIGluIGdlbmVyYWwuCisKK0NPTVBBQ1RfUlRGICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBSVEZfSFlQRVJMSU5LUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIFJURiB0aGF0IGlzIGdlbmVyYXRlZCAKKyMgd2lsbCBjb250YWluIGh5cGVybGluayBmaWVsZHMuIFRoZSBSVEYgZmlsZSB3aWxsIAorIyBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcy4gCisjIFRoaXMgbWFrZXMgdGhlIG91dHB1dCBzdWl0YWJsZSBmb3Igb25saW5lIGJyb3dzaW5nIHVzaW5nIFdPUkQgb3Igb3RoZXIgCisjIHByb2dyYW1zIHdoaWNoIHN1cHBvcnQgdGhvc2UgZmllbGRzLiAKKyMgTm90ZTogd29yZHBhZCAod3JpdGUpIGFuZCBvdGhlcnMgZG8gbm90IHN1cHBvcnQgbGlua3MuCisKK1JURl9IWVBFUkxJTktTICAgICAgICAgPSBOTworCisjIExvYWQgc3R5bGVzaGVldCBkZWZpbml0aW9ucyBmcm9tIGZpbGUuIFN5bnRheCBpcyBzaW1pbGFyIHRvIGRveHlnZW4ncyAKKyMgY29uZmlnIGZpbGUsIGkuZS4gYSBzZXJpZXMgb2YgYXNzaWdubWVudHMuIFlvdSBvbmx5IGhhdmUgdG8gcHJvdmlkZSAKKyMgcmVwbGFjZW1lbnRzLCBtaXNzaW5nIGRlZmluaXRpb25zIGFyZSBzZXQgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZS4KKworUlRGX1NUWUxFU0hFRVRfRklMRSAgICA9IAorCisjIFNldCBvcHRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBydGYgZG9jdW1lbnQuIAorIyBTeW50YXggaXMgc2ltaWxhciB0byBkb3h5Z2VuJ3MgY29uZmlnIGZpbGUuCisKK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPSAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbWFuIHBhZ2Ugb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX01BTiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgbWFuIHBhZ2VzCisKK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBZRVMKKworIyBUaGUgTUFOX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBtYW4gcGFnZXMgd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYG1hbicgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK01BTl9PVVRQVVQgICAgICAgICAgICAgPSBtYW4KKworIyBUaGUgTUFOX0VYVEVOU0lPTiB0YWcgZGV0ZXJtaW5lcyB0aGUgZXh0ZW5zaW9uIHRoYXQgaXMgYWRkZWQgdG8gCisjIHRoZSBnZW5lcmF0ZWQgbWFuIHBhZ2VzIChkZWZhdWx0IGlzIHRoZSBzdWJyb3V0aW5lJ3Mgc2VjdGlvbiAuMykKKworTUFOX0VYVEVOU0lPTiAgICAgICAgICA9IC4zCisKKyMgSWYgdGhlIE1BTl9MSU5LUyB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgRG94eWdlbiBnZW5lcmF0ZXMgbWFuIG91dHB1dCwgCisjIHRoZW4gaXQgd2lsbCBnZW5lcmF0ZSBvbmUgYWRkaXRpb25hbCBtYW4gZmlsZSBmb3IgZWFjaCBlbnRpdHkgCisjIGRvY3VtZW50ZWQgaW4gdGhlIHJlYWwgbWFuIHBhZ2UocykuIFRoZXNlIGFkZGl0aW9uYWwgZmlsZXMgCisjIG9ubHkgc291cmNlIHRoZSByZWFsIG1hbiBwYWdlLCBidXQgd2l0aG91dCB0aGVtIHRoZSBtYW4gY29tbWFuZCAKKyMgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgdGhlIGNvcnJlY3QgcGFnZS4gVGhlIGRlZmF1bHQgaXMgTk8uCisKK01BTl9MSU5LUyAgICAgICAgICAgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX1hNTCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIGFuIFhNTCBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiAKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKworIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCB0aGUgdmFsdWUgb2YgT1VUUFVUX0RJUkVDVE9SWSB3aWxsIGJlIAorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYHhtbCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK1hNTF9PVVRQVVQgICAgICAgICAgICAgPSB4bWwKKworIyBUaGUgWE1MX1NDSEVNQSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBYTUwgc2NoZW1hLCAKKyMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlIAorIyBzeW50YXggb2YgdGhlIFhNTCBmaWxlcy4KKworWE1MX1NDSEVNQSAgICAgICAgICAgICA9IAorCisjIFRoZSBYTUxfRFREIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIFhNTCBEVEQsIAorIyB3aGljaCBjYW4gYmUgdXNlZCBieSBhIHZhbGlkYXRpbmcgWE1MIHBhcnNlciB0byBjaGVjayB0aGUgCisjIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLgorCitYTUxfRFREICAgICAgICAgICAgICAgID0gCisKKyMgSWYgdGhlIFhNTF9QUk9HUkFNTElTVElORyB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgCisjIGR1bXAgdGhlIHByb2dyYW0gbGlzdGluZ3MgKGluY2x1ZGluZyBzeW50YXggaGlnaGxpZ2h0aW5nIAorIyBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgaW5mb3JtYXRpb24pIHRvIHRoZSBYTUwgb3V0cHV0LiBOb3RlIHRoYXQgCisjIGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBYTUwgb3V0cHV0LgorCitYTUxfUFJPR1JBTUxJU1RJTkcgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQXV0b0dlbiBEZWZpbml0aW9ucyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfQVVUT0dFTl9ERUYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBhbiBBdXRvR2VuIERlZmluaXRpb25zIChzZWUgYXV0b2dlbi5zZi5uZXQpIGZpbGUgCisjIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIAorIyBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCAKKyMgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4KKworR0VORVJBVEVfQVVUT0dFTl9ERUYgICA9IE5PCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBlcmwgbW9kdWxlIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9QRVJMTU9EIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgYSBQZXJsIG1vZHVsZSBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiAKKyMgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCBkb2N1bWVudGF0aW9uLiBOb3RlIHRoYXQgdGhpcyAKKyMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGluY29tcGxldGUgYXQgdGhlIAorIyBtb21lbnQuCisKK0dFTkVSQVRFX1BFUkxNT0QgICAgICAgPSBOTworCisjIElmIHRoZSBQRVJMTU9EX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCBnZW5lcmF0ZSAKKyMgdGhlIG5lY2Vzc2FyeSBNYWtlZmlsZSBydWxlcywgUGVybCBzY3JpcHRzIGFuZCBMYVRlWCBjb2RlIHRvIGJlIGFibGUgCisjIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuCisKK1BFUkxNT0RfTEFURVggICAgICAgICAgPSBOTworCisjIElmIHRoZSBQRVJMTU9EX1BSRVRUWSB0YWcgaXMgc2V0IHRvIFlFUyB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgCisjIG5pY2VseSBmb3JtYXR0ZWQgc28gaXQgY2FuIGJlIHBhcnNlZCBieSBhIGh1bWFuIHJlYWRlci4gIFRoaXMgaXMgdXNlZnVsIAorIyBpZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhpcyAKKyMgdGFnIGlzIHNldCB0byBOTyB0aGUgc2l6ZSBvZiB0aGUgUGVybCBtb2R1bGUgb3V0cHV0IHdpbGwgYmUgbXVjaCBzbWFsbGVyIAorIyBhbmQgUGVybCB3aWxsIHBhcnNlIGl0IGp1c3QgdGhlIHNhbWUuCisKK1BFUkxNT0RfUFJFVFRZICAgICAgICAgPSBZRVMKKworIyBUaGUgbmFtZXMgb2YgdGhlIG1ha2UgdmFyaWFibGVzIGluIHRoZSBnZW5lcmF0ZWQgZG94eXJ1bGVzLm1ha2UgZmlsZSAKKyMgYXJlIHByZWZpeGVkIHdpdGggdGhlIHN0cmluZyBjb250YWluZWQgaW4gUEVSTE1PRF9NQUtFVkFSX1BSRUZJWC4gCisjIFRoaXMgaXMgdXNlZnVsIHNvIGRpZmZlcmVudCBkb3h5cnVsZXMubWFrZSBmaWxlcyBpbmNsdWRlZCBieSB0aGUgc2FtZSAKKyMgTWFrZWZpbGUgZG9uJ3Qgb3ZlcndyaXRlIGVhY2ggb3RoZXIncyB2YXJpYWJsZXMuCisKK1BFUkxNT0RfTUFLRVZBUl9QUkVGSVggPSAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJlcHJvY2Vzc29yICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAorIyBldmFsdWF0ZSBhbGwgQy1wcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBmb3VuZCBpbiB0aGUgc291cmNlcyBhbmQgaW5jbHVkZSAKKyMgZmlsZXMuCisKK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMKKworIyBJZiB0aGUgTUFDUk9fRVhQQU5TSU9OIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCBleHBhbmQgYWxsIG1hY3JvIAorIyBuYW1lcyBpbiB0aGUgc291cmNlIGNvZGUuIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIG9ubHkgY29uZGl0aW9uYWwgCisjIGNvbXBpbGF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkLiBNYWNybyBleHBhbnNpb24gY2FuIGJlIGRvbmUgaW4gYSBjb250cm9sbGVkIAorIyB3YXkgYnkgc2V0dGluZyBFWFBBTkRfT05MWV9QUkVERUYgdG8gWUVTLgorCitNQUNST19FWFBBTlNJT04gICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYUEFORF9PTkxZX1BSRURFRiBhbmQgTUFDUk9fRVhQQU5TSU9OIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyAKKyMgdGhlbiB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUgCisjIFBSRURFRklORUQgYW5kIEVYUEFORF9BU19ERUZJTkVEIHRhZ3MuCisKK0VYUEFORF9PTkxZX1BSRURFRiAgICAgPSBOTworCisjIElmIHRoZSBTRUFSQ0hfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGUgaW5jbHVkZXMgZmlsZXMgCisjIGluIHRoZSBJTkNMVURFX1BBVEggKHNlZSBiZWxvdykgd2lsbCBiZSBzZWFyY2ggaWYgYSAjaW5jbHVkZSBpcyBmb3VuZC4KKworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworCisjIFRoZSBJTkNMVURFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdCAKKyMgY29udGFpbiBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG5vdCBpbnB1dCBmaWxlcyBidXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBieSAKKyMgdGhlIHByZXByb2Nlc3Nvci4KKworSU5DTFVERV9QQVRIICAgICAgICAgICA9IAorCisjIFlvdSBjYW4gdXNlIHRoZSBJTkNMVURFX0ZJTEVfUEFUVEVSTlMgdGFnIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgd2lsZGNhcmQgCisjIHBhdHRlcm5zIChsaWtlICouaCBhbmQgKi5ocHApIHRvIGZpbHRlciBvdXQgdGhlIGhlYWRlci1maWxlcyBpbiB0aGUgCisjIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IGJsYW5rLCB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggRklMRV9QQVRURVJOUyB3aWxsIAorIyBiZSB1c2VkLgorCitJTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0gCisKKyMgVGhlIFBSRURFRklORUQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbWFjcm8gbmFtZXMgdGhhdCAKKyMgYXJlIGRlZmluZWQgYmVmb3JlIHRoZSBwcmVwcm9jZXNzb3IgaXMgc3RhcnRlZCAoc2ltaWxhciB0byB0aGUgLUQgb3B0aW9uIG9mIAorIyBnY2MpLiBUaGUgYXJndW1lbnQgb2YgdGhlIHRhZyBpcyBhIGxpc3Qgb2YgbWFjcm9zIG9mIHRoZSBmb3JtOiBuYW1lIAorIyBvciBuYW1lPWRlZmluaXRpb24gKG5vIHNwYWNlcykuIElmIHRoZSBkZWZpbml0aW9uIGFuZCB0aGUgPSBhcmUgCisjIG9taXR0ZWQgPTEgaXMgYXNzdW1lZC4gVG8gcHJldmVudCBhIG1hY3JvIGRlZmluaXRpb24gZnJvbSBiZWluZyAKKyMgdW5kZWZpbmVkIHZpYSAjdW5kZWYgb3IgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdXNlIHRoZSA6PSBvcGVyYXRvciAKKyMgaW5zdGVhZCBvZiB0aGUgPSBvcGVyYXRvci4KKworUFJFREVGSU5FRCAgICAgICAgICAgICA9IAorCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gYW5kIEVYUEFORF9PTkxZX1BSRURFRiB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gCisjIHRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBsaXN0IG9mIG1hY3JvIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkLiAKKyMgVGhlIG1hY3JvIGRlZmluaXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUgc291cmNlcyB3aWxsIGJlIHVzZWQuIAorIyBVc2UgdGhlIFBSRURFRklORUQgdGFnIGlmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBtYWNybyBkZWZpbml0aW9uLgorCitFWFBBTkRfQVNfREVGSU5FRCAgICAgID0gCisKKyMgSWYgdGhlIFNLSVBfRlVOQ1RJT05fTUFDUk9TIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiAKKyMgZG94eWdlbidzIHByZXByb2Nlc3NvciB3aWxsIHJlbW92ZSBhbGwgZnVuY3Rpb24tbGlrZSBtYWNyb3MgdGhhdCBhcmUgYWxvbmUgCisjIG9uIGEgbGluZSwgaGF2ZSBhbiBhbGwgdXBwZXJjYXNlIG5hbWUsIGFuZCBkbyBub3QgZW5kIHdpdGggYSBzZW1pY29sb24uIFN1Y2ggCisjIGZ1bmN0aW9uIG1hY3JvcyBhcmUgdHlwaWNhbGx5IHVzZWQgZm9yIGJvaWxlci1wbGF0ZSBjb2RlLCBhbmQgd2lsbCBjb25mdXNlIAorIyB0aGUgcGFyc2VyIGlmIG5vdCByZW1vdmVkLgorCitTS0lQX0ZVTkNUSU9OX01BQ1JPUyAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbjo6YWRkaXRpb25zIHJlbGF0ZWQgdG8gZXh0ZXJuYWwgcmVmZXJlbmNlcyAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBUQUdGSUxFUyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB0YWdmaWxlcy4gCisjIE9wdGlvbmFsbHkgYW4gaW5pdGlhbCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbiAKKyMgY2FuIGJlIGFkZGVkIGZvciBlYWNoIHRhZ2ZpbGUuIFRoZSBmb3JtYXQgb2YgYSB0YWcgZmlsZSB3aXRob3V0IAorIyB0aGlzIGxvY2F0aW9uIGlzIGFzIGZvbGxvd3M6IAorIyAgIFRBR0ZJTEVTID0gZmlsZTEgZmlsZTIgLi4uIAorIyBBZGRpbmcgbG9jYXRpb24gZm9yIHRoZSB0YWcgZmlsZXMgaXMgZG9uZSBhcyBmb2xsb3dzOiAKKyMgICBUQUdGSUxFUyA9IGZpbGUxPWxvYzEgImZpbGUyID0gbG9jMiIgLi4uIAorIyB3aGVyZSAibG9jMSIgYW5kICJsb2MyIiBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aHMgb3IgCisjIFVSTHMuIElmIGEgbG9jYXRpb24gaXMgcHJlc2VudCBmb3IgZWFjaCB0YWcsIHRoZSBpbnN0YWxsZG94IHRvb2wgCisjIGRvZXMgbm90IGhhdmUgdG8gYmUgcnVuIHRvIGNvcnJlY3QgdGhlIGxpbmtzLgorIyBOb3RlIHRoYXQgZWFjaCB0YWcgZmlsZSBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZQorIyAod2hlcmUgdGhlIG5hbWUgZG9lcyBOT1QgaW5jbHVkZSB0aGUgcGF0aCkKKyMgSWYgYSB0YWcgZmlsZSBpcyBub3QgbG9jYXRlZCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGRveHlnZW4gCisjIGlzIHJ1biwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSB0YWdmaWxlIGhlcmUuCisKK1RBR0ZJTEVTICAgICAgICAgICAgICAgPSAKKworIyBXaGVuIGEgZmlsZSBuYW1lIGlzIHNwZWNpZmllZCBhZnRlciBHRU5FUkFURV9UQUdGSUxFLCBkb3h5Z2VuIHdpbGwgY3JlYXRlIAorIyBhIHRhZyBmaWxlIHRoYXQgaXMgYmFzZWQgb24gdGhlIGlucHV0IGZpbGVzIGl0IHJlYWRzLgorCitHRU5FUkFURV9UQUdGSUxFICAgICAgID0gRG94eXRhZ3MKKworIyBJZiB0aGUgQUxMRVhURVJOQUxTIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBleHRlcm5hbCBjbGFzc2VzIHdpbGwgYmUgbGlzdGVkIAorIyBpbiB0aGUgY2xhc3MgaW5kZXguIElmIHNldCB0byBOTyBvbmx5IHRoZSBpbmhlcml0ZWQgZXh0ZXJuYWwgY2xhc3NlcyAKKyMgd2lsbCBiZSBsaXN0ZWQuCisKK0FMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRFUk5BTF9HUk9VUFMgdGFnIGlzIHNldCB0byBZRVMgYWxsIGV4dGVybmFsIGdyb3VwcyB3aWxsIGJlIGxpc3RlZCAKKyMgaW4gdGhlIG1vZHVsZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgZ3JvdXBzIHdpbGwgCisjIGJlIGxpc3RlZC4KKworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworCisjIFRoZSBQRVJMX1BBVEggc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBwZXJsIHNjcmlwdCAKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiBgd2hpY2ggcGVybCcpLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkb3QgdG9vbCAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgYSBpbmhlcml0YW5jZSBkaWFncmFtIChpbiBIVE1MLCBSVEYgYW5kIExhVGVYKSBmb3IgY2xhc3NlcyB3aXRoIGJhc2UgCisjIG9yIHN1cGVyIGNsYXNzZXMuIFNldHRpbmcgdGhlIHRhZyB0byBOTyB0dXJucyB0aGUgZGlhZ3JhbXMgb2ZmLiBOb3RlIHRoYXQgCisjIHRoaXMgb3B0aW9uIGlzIHN1cGVyc2VkZWQgYnkgdGhlIEhBVkVfRE9UIG9wdGlvbiBiZWxvdy4gVGhpcyBpcyBvbmx5IGEgCisjIGZhbGxiYWNrLiBJdCBpcyByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGFuZCB1c2UgZG90LCBzaW5jZSBpdCB5aWVsZHMgbW9yZSAKKyMgcG93ZXJmdWwgZ3JhcGhzLgorCitDTEFTU19ESUFHUkFNUyAgICAgICAgID0gWUVTCisKKyMgSWYgc2V0IHRvIFlFUywgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIGhpZGUgCisjIGluaGVyaXRhbmNlIGFuZCB1c2FnZSByZWxhdGlvbnMgaWYgdGhlIHRhcmdldCBpcyB1bmRvY3VtZW50ZWQgCisjIG9yIGlzIG5vdCBhIGNsYXNzLgorCitISURFX1VORE9DX1JFTEFUSU9OUyAgID0gWUVTCisKKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzIAorIyBhdmFpbGFibGUgZnJvbSB0aGUgcGF0aC4gVGhpcyB0b29sIGlzIHBhcnQgb2YgR3JhcGh2aXosIGEgZ3JhcGggdmlzdWFsaXphdGlvbiAKKyMgdG9vbGtpdCBmcm9tIEFUJlQgYW5kIEx1Y2VudCBCZWxsIExhYnMuIFRoZSBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VjdGlvbiAKKyMgaGF2ZSBubyBlZmZlY3QgaWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkKKworSEFWRV9ET1QgICAgICAgICAgICAgICA9IFlFUworCisjIElmIHRoZSBDTEFTU19HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgCisjIGluZGlyZWN0IGluaGVyaXRhbmNlIHJlbGF0aW9ucy4gU2V0dGluZyB0aGlzIHRhZyB0byBZRVMgd2lsbCBmb3JjZSB0aGUgCisjIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgdG8gTk8uCisKK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ09MTEFCT1JBVElPTl9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgCisjIGluZGlyZWN0IGltcGxlbWVudGF0aW9uIGRlcGVuZGVuY2llcyAoaW5oZXJpdGFuY2UsIGNvbnRhaW5tZW50LCBhbmQgCisjIGNsYXNzIHJlZmVyZW5jZXMgdmFyaWFibGVzKSBvZiB0aGUgY2xhc3Mgd2l0aCBvdGhlciBkb2N1bWVudGVkIGNsYXNzZXMuCisKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKKworIyBJZiB0aGUgR1JPVVBfR1JBUEhTIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiAKKyMgd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBncm91cHMsIHNob3dpbmcgdGhlIGRpcmVjdCBncm91cHMgZGVwZW5kZW5jaWVzCisKK0dST1VQX0dSQVBIUyAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGluaGVyaXRhbmNlIGFuZCAKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcgCisjIExhbmd1YWdlLgorCitVTUxfTE9PSyAgICAgICAgICAgICAgID0gTk8KKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgc2hvdyB0aGUgCisjIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIgaW5zdGFuY2VzLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gWUVTCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVfR1JBUEgsIGFuZCBIQVZFX0RPVCAKKyMgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgCisjIGZpbGUgc2hvd2luZyB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBpbmNsdWRlIGRlcGVuZGVuY2llcyBvZiB0aGUgZmlsZSB3aXRoIAorIyBvdGhlciBkb2N1bWVudGVkIGZpbGVzLgorCitJTkNMVURFX0dSQVBIICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVOQUJMRV9QUkVQUk9DRVNTSU5HLCBTRUFSQ0hfSU5DTFVERVMsIElOQ0xVREVEX0JZX0dSQVBILCBhbmQgCisjIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCAKKyMgZG9jdW1lbnRlZCBoZWFkZXIgZmlsZSBzaG93aW5nIHRoZSBkb2N1bWVudGVkIGZpbGVzIHRoYXQgZGlyZWN0bHkgb3IgCisjIGluZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUuCisKK0lOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ0FMTF9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgYSBjYWxsIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGV2ZXJ5IGdsb2JhbCBmdW5jdGlvbiBvciBjbGFzcyBtZXRob2QuIAorIyBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aW1lIG9mIGEgcnVuLiAKKyMgU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbCBncmFwaHMgZm9yIHNlbGVjdGVkIAorIyBmdW5jdGlvbnMgb25seSB1c2luZyB0aGUgXGNhbGxncmFwaCBjb21tYW5kLgorCitDQUxMX0dSQVBIICAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgR1JBUEhJQ0FMX0hJRVJBUkNIWSBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ3JhcGhpY2FsIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuCisKK0dSQVBISUNBTF9ISUVSQVJDSFkgICAgPSBZRVMKKworIyBJZiB0aGUgRElSRUNUT1JZX0dSQVBILCBTSE9XX0RJUkVDVE9SSUVTIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIAorIyB0aGVuIGRveHlnZW4gd2lsbCBzaG93IHRoZSBkZXBlbmRlbmNpZXMgYSBkaXJlY3RvcnkgaGFzIG9uIG90aGVyIGRpcmVjdG9yaWVzIAorIyBpbiBhIGdyYXBoaWNhbCB3YXkuIFRoZSBkZXBlbmRlbmN5IHJlbGF0aW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgI2luY2x1ZGUKKyMgcmVsYXRpb25zIGJldHdlZW4gdGhlIGZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4KKworRElSRUNUT1JZX0dSQVBIICAgICAgICA9IFlFUworCisjIFRoZSBET1RfSU1BR0VfRk9STUFUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgaW1hZ2VzIAorIyBnZW5lcmF0ZWQgYnkgZG90LiBQb3NzaWJsZSB2YWx1ZXMgYXJlIHBuZywganBnLCBvciBnaWYKKyMgSWYgbGVmdCBibGFuayBwbmcgd2lsbCBiZSB1c2VkLgorCitET1RfSU1BR0VfRk9STUFUICAgICAgID0gcG5nCisKKyMgVGhlIHRhZyBET1RfUEFUSCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHdoZXJlIHRoZSBkb3QgdG9vbCBjYW4gYmUgCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGguCisKK0RPVF9QQVRIICAgICAgICAgICAgICAgPSAKKworIyBUaGUgRE9URklMRV9ESVJTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQgCisjIGNvbnRhaW4gZG90IGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlIAorIyBcZG90ZmlsZSBjb21tYW5kKS4KKworRE9URklMRV9ESVJTICAgICAgICAgICA9IAorCisjIFRoZSBNQVhfRE9UX0dSQVBIX1dJRFRIIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gYWxsb3dlZCB3aWR0aCAKKyMgKGluIHBpeGVscykgb2YgdGhlIGdyYXBocyBnZW5lcmF0ZWQgYnkgZG90LiBJZiBhIGdyYXBoIGJlY29tZXMgbGFyZ2VyIHRoYW4gCisjIHRoaXMgdmFsdWUsIGRveHlnZW4gd2lsbCB0cnkgdG8gdHJ1bmNhdGUgdGhlIGdyYXBoLCBzbyB0aGF0IGl0IGZpdHMgd2l0aGluIAorIyB0aGUgc3BlY2lmaWVkIGNvbnN0cmFpbnQuIEJld2FyZSB0aGF0IG1vc3QgYnJvd3NlcnMgY2Fubm90IGNvcGUgd2l0aCB2ZXJ5IAorIyBsYXJnZSBpbWFnZXMuCisKK01BWF9ET1RfR1JBUEhfV0lEVEggICAgPSAxMDI0CisKKyMgVGhlIE1BWF9ET1RfR1JBUEhfSEVJR0hUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gYWxsb3dzIGhlaWdodCAKKyMgKGluIHBpeGVscykgb2YgdGhlIGdyYXBocyBnZW5lcmF0ZWQgYnkgZG90LiBJZiBhIGdyYXBoIGJlY29tZXMgbGFyZ2VyIHRoYW4gCisjIHRoaXMgdmFsdWUsIGRveHlnZW4gd2lsbCB0cnkgdG8gdHJ1bmNhdGUgdGhlIGdyYXBoLCBzbyB0aGF0IGl0IGZpdHMgd2l0aGluIAorIyB0aGUgc3BlY2lmaWVkIGNvbnN0cmFpbnQuIEJld2FyZSB0aGF0IG1vc3QgYnJvd3NlcnMgY2Fubm90IGNvcGUgd2l0aCB2ZXJ5IAorIyBsYXJnZSBpbWFnZXMuCisKK01BWF9ET1RfR1JBUEhfSEVJR0hUICAgPSAxMDI0CisKKyMgVGhlIE1BWF9ET1RfR1JBUEhfREVQVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSBkZXB0aCBvZiB0aGUgCisjIGdyYXBocyBnZW5lcmF0ZWQgYnkgZG90LiBBIGRlcHRoIHZhbHVlIG9mIDMgbWVhbnMgdGhhdCBvbmx5IG5vZGVzIHJlYWNoYWJsZSAKKyMgZnJvbSB0aGUgcm9vdCBieSBmb2xsb3dpbmcgYSBwYXRoIHZpYSBhdCBtb3N0IDMgZWRnZXMgd2lsbCBiZSBzaG93bi4gTm9kZXMgCisjIHRoYXQgbGF5IGZ1cnRoZXIgZnJvbSB0aGUgcm9vdCBub2RlIHdpbGwgYmUgb21pdHRlZC4gTm90ZSB0aGF0IHNldHRpbmcgdGhpcyAKKyMgb3B0aW9uIHRvIDEgb3IgMiBtYXkgZ3JlYXRseSByZWR1Y2UgdGhlIGNvbXB1dGF0aW9uIHRpbWUgbmVlZGVkIGZvciBsYXJnZSAKKyMgY29kZSBiYXNlcy4gQWxzbyBub3RlIHRoYXQgYSBncmFwaCBtYXkgYmUgZnVydGhlciB0cnVuY2F0ZWQgaWYgdGhlIGdyYXBoJ3MgCisjIGltYWdlIGRpbWVuc2lvbnMgYXJlIG5vdCBzdWZmaWNpZW50IHRvIGZpdCB0aGUgZ3JhcGggKHNlZSBNQVhfRE9UX0dSQVBIX1dJRFRIIAorIyBhbmQgTUFYX0RPVF9HUkFQSF9IRUlHSFQpLiBJZiAwIGlzIHVzZWQgZm9yIHRoZSBkZXB0aCB2YWx1ZSAodGhlIGRlZmF1bHQpLCAKKyMgdGhlIGdyYXBoIGlzIG5vdCBkZXB0aC1jb25zdHJhaW5lZC4KKworTUFYX0RPVF9HUkFQSF9ERVBUSCAgICA9IDAKKworIyBTZXQgdGhlIERPVF9UUkFOU1BBUkVOVCB0YWcgdG8gWUVTIHRvIGdlbmVyYXRlIGltYWdlcyB3aXRoIGEgdHJhbnNwYXJlbnQgCisjIGJhY2tncm91bmQuIFRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggcmVzdWx0cyBpbiBhIHdoaXRlIGJhY2tncm91bmQuIAorIyBXYXJuaW5nOiBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIHVzZWQsIGVuYWJsaW5nIHRoaXMgb3B0aW9uIG1heSBsZWFkIHRvIAorIyBiYWRseSBhbnRpLWFsaWFzZWQgbGFiZWxzIG9uIHRoZSBlZGdlcyBvZiBhIGdyYXBoIChpLmUuIHRoZXkgYmVjb21lIGhhcmQgdG8gCisjIHJlYWQpLgorCitET1RfVFJBTlNQQVJFTlQgICAgICAgID0gTk8KKworIyBTZXQgdGhlIERPVF9NVUxUSV9UQVJHRVRTIHRhZyB0byBZRVMgYWxsb3cgZG90IHRvIGdlbmVyYXRlIG11bHRpcGxlIG91dHB1dCAKKyMgZmlsZXMgaW4gb25lIHJ1biAoaS5lLiBtdWx0aXBsZSAtbyBhbmQgLVQgb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lKS4gVGhpcyAKKyMgbWFrZXMgZG90IHJ1biBmYXN0ZXIsIGJ1dCBzaW5jZSBvbmx5IG5ld2VyIHZlcnNpb25zIG9mIGRvdCAoPjEuOC4xMCkgCisjIHN1cHBvcnQgdGhpcywgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisKK0RPVF9NVUxUSV9UQVJHRVRTICAgICAgPSBOTworCisjIElmIHRoZSBHRU5FUkFURV9MRUdFTkQgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIGEgbGVnZW5kIHBhZ2UgZXhwbGFpbmluZyB0aGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBib3hlcyBhbmQgCisjIGFycm93cyBpbiB0aGUgZG90IGdlbmVyYXRlZCBncmFwaHMuCisKK0dFTkVSQVRFX0xFR0VORCAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRE9UX0NMRUFOVVAgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGRvdCBmaWxlcyB0aGF0IGFyZSB1c2VkIHRvIGdlbmVyYXRlIAorIyB0aGUgdmFyaW91cyBncmFwaHMuCisKK0RPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uOjphZGRpdGlvbnMgcmVsYXRlZCB0byB0aGUgc2VhcmNoIGVuZ2luZSAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBTRUFSQ0hFTkdJTkUgdGFnIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBhIHNlYXJjaCBlbmdpbmUgc2hvdWxkIGJlIAorIyB1c2VkLiBJZiBzZXQgdG8gTk8gdGhlIHZhbHVlcyBvZiBhbGwgdGFncyBiZWxvdyB0aGlzIG9uZSB3aWxsIGJlIGlnbm9yZWQuCisKK1NFQVJDSEVOR0lORSAgICAgICAgICAgPSBOTwpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L01ha2VmaWxlLmFtIGIvcG9wdC0xLjE2L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YWVjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMTggQEAKKyMgTWFrZWZpbGUgZm9yIHBvcHQgbGlicmFyeS4KKworQVVUT01BS0VfT1BUSU9OUyA9IDEuNCBmb3JlaWduCisKK0xJTlQgPQkJc3BsaW50CitNQ0NBQkUgPQlwbWNjYWJlCisKK0VYVFJBX0RJU1QgPSBjb25maWcucnBhdGggbG9va3VwMy5jIGF1dG9nZW4uc2ggQ0hBTkdFUyAkKG1hbl9NQU5TKSBcCisJbTQvTWFrZWZpbGUuaW4gXAorCWZvb3Rlcl9ub190aW1lc3RhbXAuaHRtbCBsaWJwb3B0LnZlcnMgXAorCXRlc3RpdC5zaCB0ZXN0LXBvcHRyYyBcCisJcG9wdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIFwKKwlwb3B0LnBzCisKK1NVQkRJUlMgPSBwbyAuIGF1dG8KKworQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHRvcF9zcmNkaXIpCisKK25vaW5zdF9IRUFERVJTID0gcG9wdGludC5oIHN5c3RlbS5oCisKK25vaW5zdF9QUk9HUkFNUyA9IHRlc3QxIHRlc3QyIHRkaWN0ICMgdGVzdDMKK3Rlc3QxX1NPVVJDRVMgPSB0ZXN0MS5jCit0ZXN0MV9MREZMQUdTID0gCit0ZXN0MV9MREFERCA9ICQodXNybGliX0xUTElCUkFSSUVTKQordGVzdDJfU09VUkNFUyA9IHRlc3QyLmMKK3Rlc3QyX0xERkxBR1MgPSAKK3Rlc3QyX0xEQUREID0gJCh1c3JsaWJfTFRMSUJSQVJJRVMpCisjdGVzdDNfU09VUkNFUyA9IHRlc3QzLmMKKyN0ZXN0M19MREZMQUdTID0gCisjdGVzdDNfTERBREQgPSAkKHVzcmxpYl9MVExJQlJBUklFUykKK3RkaWN0X1NPVVJDRVMgPSB0ZGljdC5jCit0ZGljdF9MREZMQUdTID0gCit0ZGljdF9MREFERCA9ICQodXNybGliX0xUTElCUkFSSUVTKQorCitub2luc3RfU0NSSVBUUyA9IHRlc3RpdC5zaAorCitURVNUU19FTlZJUk9OTUVOVCA9IFwKK3Rlc3QxPSIkKHRvcF9idWlsZGRpcikvdGVzdDEiCisKK1RFU1RTID0gJCh0b3Bfc3JjZGlyKS90ZXN0aXQuc2gKKworaW5jbHVkZV9IRUFERVJTID0gcG9wdC5oCisKK3VzcmxpYmRpciA9ICQobGliZGlyKQordXNybGliX0xUTElCUkFSSUVTID0gbGlicG9wdC5sYQorCitsaWJwb3B0X2xhX1NPVVJDRVMgPSBwb3B0LmMgcG9wdHBhcnNlLmMgcG9wdGNvbmZpZy5jIHBvcHRoZWxwLmMgcG9wdGludC5jCitsaWJwb3B0X2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIEBMVExJQklOVExAIEBMVExJQklDT05WQAorCitwa2djb25maWdkaXIgPSAkKHByZWZpeCkvbGliL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPSBwb3B0LnBjCisKK2lmIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFQKK2xpYnBvcHRfbGFfTERGTEFHUyArPSAtV2wsLS12ZXJzaW9uLXNjcmlwdD0kKHRvcF9zcmNkaXIpL2xpYnBvcHQudmVycworZW5kaWYKKworbWFuX01BTlMgPSBwb3B0LjMKKworQlVJTFRfU09VUkNFUyA9IHBvcHQucGMgIyBwb3B0LmxjZAorCitkaXN0Y2xlYW4tbG9jYWw6CisJcm0gLXJmIC5jY2FjaGUKKworLlBIT05ZOgl1cGRhdGVwbwordXBkYXRlcG86CisJcnN5bmMgLUxydHZ6ICB0cmFuc2xhdGlvbnByb2plY3Qub3JnOjp0cC9sYXRlc3QvcG9wdC8gIHBvCisKK3BvcHQubGNkOiBNYWtlZmlsZS5hbSAke2xpYnBvcHRfbGFfU09VUkNFU30gJHtpbmNsdWRlX0hFQURFUlN9ICR7bm9pbnN0X0hFQURFUlN9CisJbGNsaW50IC1kdW1wICRAICR7bGlicG9wdF9sYV9TT1VSQ0VTfQorCisuUEhPTlk6CXNvdXJjZXMKK3NvdXJjZXM6CisJQGVjaG8gJChsaWJwb3B0X2xhX1NPVVJDRVM6JT1wb3B0LyUpCisKKy5QSE9OWTogbGludAorbGludDoKKwkkKExJTlQpICR7REVGU30gJHtJTkNMVURFU30gdGVzdDEuYyAke2xpYnBvcHRfbGFfU09VUkNFU30KKworLlBIT05ZOgltY2NhYmUKK21jY2FiZToKKwkkKE1DQ0FCRSkgJChsaWJwb3B0X2xhX1NPVVJDRVMpIHwgc29ydCAtbiAtciB8IGhlYWQgLW4gMTAKKworLlBIT05ZOiBkb3h5Z2VuCitkb3h5Z2VuOiBEb3h5ZmlsZQorCXJtIC1yZiBkb3h5Z2VuCisJbWtkaXIgLXAgZG94eWdlbgorCWRveHlnZW4KKworLlBIT05ZOglsY292LXJlc2V0CSMgcnVuIGxjb3YgZnJvbSBzY3JhdGNoLCBhbHdheXMKK2xjb3YtcmVzZXQ6CisJbWFrZSBsY292LXJ1bgorCW1ha2UgbGNvdi1yZXBvcnQKKworLlBIT05ZOglsY292CQkjIHJ1biBsY292IGZyb20gc2NyYXRjaCBpZiB0aGUgZGlyIGlzIG5vdCB0aGVyZQorbGNvdjoKKwltYWtlIGxjb3YtcmVzZXQKKworLlBIT05ZOglsY292LXJ1bgkjIHJlc2V0IHJ1biBjb3ZlcmFnZSB0ZXN0cworbGNvdi1ydW46CisJQC1ybSAtcmYgbGNvdgorCWZpbmQgLiAtbmFtZSAiKi5nY2RhIiAtZXhlYyBybSB7fSBcOworCW1ha2UgY2hlY2sKKworLlBIT05ZOglsY292LXJlcG9ydAkjIGdlbmVyYXRlIHJlcG9ydCBiYXNlZCBvbiBjdXJyZW50IGNvdmVyYWdlIGRhdGEKK2xjb3YtcmVwb3J0OgorCW1rZGlyIGxjb3YKKwlsY292IC0tZGlyZWN0b3J5IC4gLS1jYXB0dXJlIC0tb3V0cHV0LWZpbGUgbGNvdi9sY292LmluZm8KKwlsY292IC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAtdiAiYGNkICQodG9wX3NyY2RpcikgJiYgcHdkYCIgfCBjdXQgLWQ6IC1mMSA+IGxjb3YvcmVtb3ZlCisJbGNvdiAtciBsY292L2xjb3YuaW5mbyBgY2F0IGxjb3YvcmVtb3ZlYCA+IGxjb3YvbGNvdi5jbGVhbmVkLmluZm8KKwlybSBsY292L3JlbW92ZQorCW12IGxjb3YvbGNvdi5jbGVhbmVkLmluZm8gbGNvdi9sY292LmluZm8KKwlnZW5odG1sIC10ICIkKFBBQ0tBR0VfU1RSSU5HKSIgLW8gbGNvdiBsY292L2xjb3YuaW5mbworCisjLlBIT05ZOglsY292LXVwbG9hZAorI2xjb3YtdXBsb2FkOiBsY292CisjCXJzeW5jIC1ydnogLWUgc3NoIC0tZGVsZXRlIGxjb3YvKiA/Pz8KKworQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9NYWtlZmlsZS5pbiBiL3BvcHQtMS4xNi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTY4OTBkCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTIzNCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBNYWtlZmlsZSBmb3IgcG9wdCBsaWJyYXJ5LgorCisKKworCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3RhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKK25vaW5zdF9QUk9HUkFNUyA9IHRlc3QxJChFWEVFWFQpIHRlc3QyJChFWEVFWFQpIHRkaWN0JChFWEVFWFQpCitASEFWRV9MRF9WRVJTSU9OX1NDUklQVF9UUlVFQGFtX19hcHBlbmRfMSA9IC1XbCwtLXZlcnNpb24tc2NyaXB0PSQodG9wX3NyY2RpcikvbGlicG9wdC52ZXJzCitzdWJkaXIgPSAuCitESVNUX0NPTU1PTiA9IFJFQURNRSAkKGFtX19jb25maWd1cmVfZGVwcykgJChpbmNsdWRlX0hFQURFUlMpIFwKKwkkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvRG94eWZpbGUuaW4gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2NvbmZpZy5oLmluIFwKKwkkKHNyY2RpcikvcG9wdC5wYy5pbiAkKHNyY2RpcikvcG9wdC5zcGVjLmluIFwKKwkkKHNyY2RpcikvdGVzdC1wb3B0cmMuaW4gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQUJPVVQtTkxTIFwKKwlDT1BZSU5HIGNvbmZpZy5ndWVzcyBjb25maWcucnBhdGggY29uZmlnLnN1YiBkZXBjb21wIFwKKwlpbnN0YWxsLXNoIGx0bWFpbi5zaCBtaXNzaW5nCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMgPSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIFwKKyBjb25maWd1cmUubGluZW5vIGNvbmZpZy5zdGF0dXMubGluZW5vCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9IGNvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBEb3h5ZmlsZSBwb3B0LnBjIHBvcHQuc3BlYyB0ZXN0LXBvcHRyYworQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJCh1c3JsaWJkaXIpIiAiJChERVNURElSKSQobWFuM2RpcikiIFwKKwkiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIgorTFRMSUJSQVJJRVMgPSAkKHVzcmxpYl9MVExJQlJBUklFUykKK2xpYnBvcHRfbGFfTElCQUREID0KK2FtX2xpYnBvcHRfbGFfT0JKRUNUUyA9IHBvcHQubG8gcG9wdHBhcnNlLmxvIHBvcHRjb25maWcubG8gcG9wdGhlbHAubG8gXAorCXBvcHRpbnQubG8KK2xpYnBvcHRfbGFfT0JKRUNUUyA9ICQoYW1fbGlicG9wdF9sYV9PQkpFQ1RTKQorbGlicG9wdF9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQobGlicG9wdF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorYW1fdGRpY3RfT0JKRUNUUyA9IHRkaWN0LiQoT0JKRVhUKQordGRpY3RfT0JKRUNUUyA9ICQoYW1fdGRpY3RfT0JKRUNUUykKK3RkaWN0X0RFUEVOREVOQ0lFUyA9ICQodXNybGliX0xUTElCUkFSSUVTKQordGRpY3RfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQodGRpY3RfTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK2FtX3Rlc3QxX09CSkVDVFMgPSB0ZXN0MS4kKE9CSkVYVCkKK3Rlc3QxX09CSkVDVFMgPSAkKGFtX3Rlc3QxX09CSkVDVFMpCit0ZXN0MV9ERVBFTkRFTkNJRVMgPSAkKHVzcmxpYl9MVExJQlJBUklFUykKK3Rlc3QxX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKHRlc3QxX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACithbV90ZXN0Ml9PQkpFQ1RTID0gdGVzdDIuJChPQkpFWFQpCit0ZXN0Ml9PQkpFQ1RTID0gJChhbV90ZXN0Ml9PQkpFQ1RTKQordGVzdDJfREVQRU5ERU5DSUVTID0gJCh1c3JsaWJfTFRMSUJSQVJJRVMpCit0ZXN0Ml9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJCh0ZXN0Ml9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU0NSSVBUUyA9ICQobm9pbnN0X1NDUklQVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQAorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGlicG9wdF9sYV9TT1VSQ0VTKSAkKHRkaWN0X1NPVVJDRVMpICQodGVzdDFfU09VUkNFUykgXAorCSQodGVzdDJfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlicG9wdF9sYV9TT1VSQ0VTKSAkKHRkaWN0X1NPVVJDRVMpICQodGVzdDFfU09VUkNFUykgXAorCSQodGVzdDJfU09VUkNFUykKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorbWFuM2RpciA9ICQobWFuZGlyKS9tYW4zCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChtYW5fTUFOUykKK0RBVEEgPSAkKHBrZ2NvbmZpZ19EQVRBKQorSEVBREVSUyA9ICQoaW5jbHVkZV9IRUFERVJTKSAkKG5vaW5zdF9IRUFERVJTKQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyIGRpc3QgZGlzdC1hbGwgZGlzdGNoZWNrCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCithbV9fdHR5X2NvbG9ycyA9IFwKK3JlZD07IGdybj07IGxnbj07IGJsdT07IHN0ZD0KK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCit0b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKK2FtX19yZW1vdmVfZGlzdGRpciA9IFwKKyAgeyB0ZXN0ICEgLWQgIiQoZGlzdGRpcikiIFwKKyAgICB8fCB7IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgICAgJiYgcm0gLWZyICIkKGRpc3RkaXIpIjsgfTsgfQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3oKK0daSVBfRU5WID0gLS1iZXN0CitkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFRfQUdFID0gQExUX0FHRUAKK0xUX0NVUlJFTlQgPSBATFRfQ1VSUkVOVEAKK0xUX1JFVklTSU9OID0gQExUX1JFVklTSU9OQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BPUFRfUEtHQ09ORklHX0xJQlMgPSBAUE9QVF9QS0dDT05GSUdfTElCU0AKK1BPUFRfU09VUkNFX1BBVEggPSBAUE9QVF9TT1VSQ0VfUEFUSEAKK1BPU1VCID0gQFBPU1VCQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitUQVJHRVQgPSBAVEFSR0VUQAorVSA9IEBVQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzdWJkaXJzID0gQHN1YmRpcnNACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQVVUT01BS0VfT1BUSU9OUyA9IDEuNCBmb3JlaWduCitMSU5UID0gc3BsaW50CitNQ0NBQkUgPSBwbWNjYWJlCitFWFRSQV9ESVNUID0gY29uZmlnLnJwYXRoIGxvb2t1cDMuYyBhdXRvZ2VuLnNoIENIQU5HRVMgJChtYW5fTUFOUykgXAorCW00L01ha2VmaWxlLmluIFwKKwlmb290ZXJfbm9fdGltZXN0YW1wLmh0bWwgbGlicG9wdC52ZXJzIFwKKwl0ZXN0aXQuc2ggdGVzdC1wb3B0cmMgXAorCXBvcHQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBcCisJcG9wdC5wcworCitTVUJESVJTID0gcG8gLiBhdXRvCitBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX3NyY2RpcikKK25vaW5zdF9IRUFERVJTID0gcG9wdGludC5oIHN5c3RlbS5oCit0ZXN0MV9TT1VSQ0VTID0gdGVzdDEuYwordGVzdDFfTERGTEFHUyA9IAordGVzdDFfTERBREQgPSAkKHVzcmxpYl9MVExJQlJBUklFUykKK3Rlc3QyX1NPVVJDRVMgPSB0ZXN0Mi5jCit0ZXN0Ml9MREZMQUdTID0gCit0ZXN0Ml9MREFERCA9ICQodXNybGliX0xUTElCUkFSSUVTKQorI3Rlc3QzX1NPVVJDRVMgPSB0ZXN0My5jCisjdGVzdDNfTERGTEFHUyA9IAorI3Rlc3QzX0xEQUREID0gJCh1c3JsaWJfTFRMSUJSQVJJRVMpCit0ZGljdF9TT1VSQ0VTID0gdGRpY3QuYwordGRpY3RfTERGTEFHUyA9IAordGRpY3RfTERBREQgPSAkKHVzcmxpYl9MVExJQlJBUklFUykKK25vaW5zdF9TQ1JJUFRTID0gdGVzdGl0LnNoCitURVNUU19FTlZJUk9OTUVOVCA9IFwKK3Rlc3QxPSIkKHRvcF9idWlsZGRpcikvdGVzdDEiCisKK1RFU1RTID0gJCh0b3Bfc3JjZGlyKS90ZXN0aXQuc2gKK2luY2x1ZGVfSEVBREVSUyA9IHBvcHQuaAordXNybGliZGlyID0gJChsaWJkaXIpCit1c3JsaWJfTFRMSUJSQVJJRVMgPSBsaWJwb3B0LmxhCitsaWJwb3B0X2xhX1NPVVJDRVMgPSBwb3B0LmMgcG9wdHBhcnNlLmMgcG9wdGNvbmZpZy5jIHBvcHRoZWxwLmMgcG9wdGludC5jCitsaWJwb3B0X2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIEBMVExJQklOVExAIEBMVExJQklDT05WQCBcCisJJChhbV9fYXBwZW5kXzEpCitwa2djb25maWdkaXIgPSAkKHByZWZpeCkvbGliL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPSBwb3B0LnBjCittYW5fTUFOUyA9IHBvcHQuMworQlVJTFRfU09VUkNFUyA9IHBvcHQucGMgIyBwb3B0LmxjZAorCisjLlBIT05ZOglsY292LXVwbG9hZAorI2xjb3YtdXBsb2FkOiBsY292CisjCXJzeW5jIC1ydnogLWUgc3NoIC0tZGVsZXRlIGxjb3YvKiA/Pz8KK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00CithbGw6ICQoQlVJTFRfU09VUkNFUykgY29uZmlnLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKK2FtLS1yZWZyZXNoOgorCUA6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbic7IFwKKwkgICAgICAkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCisJICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NvbmZpZy5oOiBzdGFtcC1oMQorCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXAorCSAgcm0gLWYgc3RhbXAtaDE7IFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHN0YW1wLWgxOyBcCisJZWxzZSA6OyBmaQorCitzdGFtcC1oMTogJChzcmNkaXIpL2NvbmZpZy5oLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQHJtIC1mIHN0YW1wLWgxCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAorJChzcmNkaXIpL2NvbmZpZy5oLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKKwkoJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgJChBVVRPSEVBREVSKSkKKwlybSAtZiBzdGFtcC1oMQorCXRvdWNoICRACisKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mIGNvbmZpZy5oIHN0YW1wLWgxCitEb3h5ZmlsZTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL0RveHlmaWxlLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorcG9wdC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL3BvcHQucGMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACitwb3B0LnNwZWM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9wb3B0LnNwZWMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACit0ZXN0LXBvcHRyYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL3Rlc3QtcG9wdHJjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAoraW5zdGFsbC11c3JsaWJMVExJQlJBUklFUzogJCh1c3JsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJCh1c3JsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJCh1c3JsaWJkaXIpIgorCUBsaXN0PSckKHVzcmxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHVzcmxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQodXNybGliZGlyKSciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQodXNybGliZGlyKSI7IFwKKwl9CisKK3VuaW5zdGFsbC11c3JsaWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHVzcmxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHVzcmxpYmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQodXNybGliZGlyKS8kJGYnIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHVzcmxpYmRpcikvJCRmIjsgXAorCWRvbmUKKworY2xlYW4tdXNybGliTFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQodXNybGliX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJCh1c3JsaWJfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQodXNybGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGlicG9wdC5sYTogJChsaWJwb3B0X2xhX09CSkVDVFMpICQobGlicG9wdF9sYV9ERVBFTkRFTkNJRVMpIAorCSQobGlicG9wdF9sYV9MSU5LKSAtcnBhdGggJCh1c3JsaWJkaXIpICQobGlicG9wdF9sYV9PQkpFQ1RTKSAkKGxpYnBvcHRfbGFfTElCQUREKSAkKExJQlMpCisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK3RkaWN0JChFWEVFWFQpOiAkKHRkaWN0X09CSkVDVFMpICQodGRpY3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdGRpY3QkKEVYRUVYVCkKKwkkKHRkaWN0X0xJTkspICQodGRpY3RfT0JKRUNUUykgJCh0ZGljdF9MREFERCkgJChMSUJTKQordGVzdDEkKEVYRUVYVCk6ICQodGVzdDFfT0JKRUNUUykgJCh0ZXN0MV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB0ZXN0MSQoRVhFRVhUKQorCSQodGVzdDFfTElOSykgJCh0ZXN0MV9PQkpFQ1RTKSAkKHRlc3QxX0xEQUREKSAkKExJQlMpCit0ZXN0MiQoRVhFRVhUKTogJCh0ZXN0Ml9PQkpFQ1RTKSAkKHRlc3QyX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHRlc3QyJChFWEVFWFQpCisJJCh0ZXN0Ml9MSU5LKSAkKHRlc3QyX09CSkVDVFMpICQodGVzdDJfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BvcHQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb3B0Y29uZmlnLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcG9wdGhlbHAuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb3B0aW50LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcG9wdHBhcnNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGRpY3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rlc3QxLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0Mi5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKK2luc3RhbGwtbWFuMzogJChtYW5fTUFOUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKG1hbjNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW4zZGlyKSIKKwlAbGlzdD0nJzsgdGVzdCAtbiAiJChtYW4zZGlyKSIgfHwgZXhpdCAwOyBcCisJeyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKKwlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4zW2Etel0qJCQvcCc7IFwKKwl9IHwgd2hpbGUgcmVhZCBwOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAnbjtzLC4qLywsO3A7aDtzLC4qXC4sLDtzLF5bXjNdWzAtOWEtel0qJCQsMyw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJyB8IFwKKwlzZWQgJ047TjtzLFxuLCAsZycgfCB7IFwKKwlsaXN0PTsgd2hpbGUgcmVhZCBmaWxlIGJhc2UgaW5zdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRiYXNlIiA9ICIkJGluc3QiOyB0aGVuIGxpc3Q9IiQkbGlzdCAkJGZpbGUiOyBlbHNlIFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRmaWxlJyAnJChERVNURElSKSQobWFuM2RpcikvJCRpbnN0JyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGZpbGUiICIkKERFU1RESVIpJChtYW4zZGlyKS8kJGluc3QiIHx8IGV4aXQgJCQ/OyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbjNkaXIpJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKG1hbjNkaXIpIiB8fCBleGl0ICQkPzsgfTsgXAorCWRvbmU7IH0KKwordW5pbnN0YWxsLW1hbjM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJzsgdGVzdCAtbiAiJChtYW4zZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YHsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKwkgIHNlZCAtbiAnL1wuM1thLXpdKiQkL3AnOyBcCisJfSB8IHNlZCAtZSAncywuKi8sLDtoO3MsLipcLiwsO3MsXlteM11bMC05YS16XSokJCwzLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnYDsgXAorCXRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgZWNobyAiICggY2QgJyQoREVTVERJUikkKG1hbjNkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwkgIGNkICIkKERFU1RESVIpJChtYW4zZGlyKSIgJiYgcm0gLWYgJCRmaWxlczsgfQoraW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGtnY29uZmlnZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIKKwlAbGlzdD0nJChwa2djb25maWdfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2NvbmZpZ2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocGtnY29uZmlnZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wa2djb25maWdEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLWluY2x1ZGVIRUFERVJTOiAkKGluY2x1ZGVfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGluY2x1ZGVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWluY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoaW5jbHVkZWRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitjaGVjay1URVNUUzogJChURVNUUykKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisJbGlzdD0nICQoVEVTVFMpICc7IFwKKwkkKGFtX190dHlfY29sb3JzKTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZm9yIHRzdCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAuLyQkdHN0OyB0aGVuIGRpcj0uLzsgXAorCSAgICBlbGlmIHRlc3QgLWYgJCR0c3Q7IHRoZW4gZGlyPTsgXAorCSAgICBlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmICQoVEVTVFNfRU5WSVJPTk1FTlQpICQke2Rpcn0kJHRzdDsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKltcIFwJXSQkdHN0W1wgXAldKikgXAorCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9WFBBU1M7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQljb2w9JCRncm47IHJlcz1QQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxpZiB0ZXN0ICQkPyAtbmUgNzc7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCisJCWNvbD0kJGxnbjsgcmVzPVhGQUlMOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9RkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKKwkgICAgICBjb2w9JCRibHU7IHJlcz1TS0lQOyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbH0kJHJlcyQke3N0ZH06ICQkdHN0IjsgXAorCSAgZG9uZTsgXAorCSAgaWYgdGVzdCAiJCRhbGwiIC1lcSAxOyB0aGVuIFwKKwkgICAgdGVzdHM9InRlc3QiOyBcCisJICAgIEFsbD0iIjsgXAorCSAgZWxzZSBcCisJICAgIHRlc3RzPSJ0ZXN0cyI7IFwKKwkgICAgQWxsPSJBbGwgIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBwYXNzZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAxOyB0aGVuIGZhaWx1cmVzPWZhaWx1cmU7IGVsc2UgZmFpbHVyZXM9ZmFpbHVyZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCAkJGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGZhaWxlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDE7IHRoZW4gcGFzc2VzPXBhc3M7IGVsc2UgcGFzc2VzPXBhc3NlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCAkJHBhc3NlcykiOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKKwkgIHNraXBwZWQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHNraXAiIC1lcSAxOyB0aGVuIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3Qgd2FzIG5vdCBydW4pIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCisJICAgIGZpOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAorCSAgZmk7IFwKKwkgIHJlcG9ydD0iIjsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCisJICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBlY2hvICIkJGdybiQkZGFzaGVzIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkcmVkJCRkYXNoZXMiOyBcCisJICBmaTsgXAorCSAgZWNobyAiJCRiYW5uZXIiOyBcCisJICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQkc2tpcHBlZCI7IFwKKwkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHJlcG9ydCI7IFwKKwkgIGVjaG8gIiQkZGFzaGVzJCRzdGQiOyBcCisJICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKKwllbHNlIDo7IGZpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBsaXN0PSckKE1BTlMpJzsgaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWxzZSA6OyBmaTsgZG9uZWA7IFwKKwkgIGlmIHRlc3QgLW4gIiQkbGlzdCIgJiYgXAorCSAgICBncmVwICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgZWNobyAiZXJyb3I6IGZvdW5kIG1hbiBwYWdlcyBjb250YWluaW5nIHRoZSBcYG1pc3NpbmcgaGVscDJtYW4nIHJlcGxhY2VtZW50IHRleHQ6IiA+JjI7IFwKKwkgICAgZ3JlcCAtbCAnYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlJyAkJGxpc3QgfCBzZWQgJ3MvXi8gICAgICAgICAvJyA+JjI7IFwKKwkgICAgZWNobyAiICAgICAgIHRvIGZpeCB0aGVtLCBpbnN0YWxsIGhlbHAybWFuLCByZW1vdmUgYW5kIHJlZ2VuZXJhdGUgdGhlIG1hbiBwYWdlczsiID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdHlwaWNhbGx5IFxgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB3aWxsIHJlbW92ZSB0aGVtIiA+JjI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZWxzZSA6OyBmaQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCXRlc3QgLWQgIiQoZGlzdGRpcikiIHx8IG1rZGlyICIkKGRpc3RkaXIpIgorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCisJfHwgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NTUgXAorCQktZXhlYyBjaG1vZCB1K3J3eCxnbytyeCB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1saW5rcyAxIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDAwIC1leGVjIGNobW9kIGErciB7fSBcOyAtbyBcCisJICAhIC10eXBlIGQgISAtcGVybSAtNDQ0IC1leGVjICQoaW5zdGFsbF9zaCkgLWMgLW0gYStyIHt9IHt9IFw7IFwKKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCitkaXN0LWd6aXA6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWJ6aXAyOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1sem1hOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6bWEgLTkgLWMgPiQoZGlzdGRpcikudGFyLmx6bWEKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC14ejogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC10YXJaOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3Qtc2hhcjogZGlzdGRpcgorCXNoYXIgJChkaXN0ZGlyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS5zaGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtemlwOiBkaXN0ZGlyCisJLXJtIC1mICQoZGlzdGRpcikuemlwCisJemlwIC1ycSAkKGRpc3RkaXIpLnppcCAkKGRpc3RkaXIpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QgZGlzdC1hbGw6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCisjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisjIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCisjIHRhcmZpbGUuCitkaXN0Y2hlY2s6IGRpc3QKKwljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCisJKi50YXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmJ6MiopIFwKKwkgIGJ6aXAyIC1kYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIubHptYSopIFwKKwkgIGx6bWEgLWRjICQoZGlzdGRpcikudGFyLmx6bWEgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIueHoqKSBcCisJICB4eiAtZGMgJChkaXN0ZGlyKS50YXIueHogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuWiopIFwKKwkgIHVuY29tcHJlc3MgLWMgJChkaXN0ZGlyKS50YXIuWiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnNoYXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikuc2hhci5neiB8IHVuc2hhciA7O1wKKwkqLnppcCopIFwKKwkgIHVuemlwICQoZGlzdGRpcikuemlwIDs7XAorCWVzYWMKKwljaG1vZCAtUiBhLXcgJChkaXN0ZGlyKTsgY2htb2QgYSt3ICQoZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpL19idWlsZAorCW1rZGlyICQoZGlzdGRpcikvX2luc3QKKwljaG1vZCBhLXcgJChkaXN0ZGlyKQorCXRlc3QgLWQgJChkaXN0ZGlyKS9fYnVpbGQgfHwgZXhpdCAwOyBcCisJZGNfaW5zdGFsbF9iYXNlPWAkKGFtX19jZCkgJChkaXN0ZGlyKS9faW5zdCAmJiBwd2QgfCBzZWQgLWUgJ3MsXlteOlxcL106W1xcL10sLywnYCBcCisJICAmJiBkY19kZXN0ZGlyPSIkJHtUTVBESVItL3RtcH0vYW0tZGMtJCQkJC8iIFwKKwkgICYmIGFtX19jd2Q9YHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQoZGlzdGRpcikvX2J1aWxkIFwKKwkgICYmIC4uL2NvbmZpZ3VyZSAtLXNyY2Rpcj0uLiAtLXByZWZpeD0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgJChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAorCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgJiYgKHsgXAorCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCisJICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKKwkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKKwkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKKwkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrIFwKKwkgICYmIGNkICIkJGFtX19jd2QiIFwKKwkgIHx8IGV4aXQgMQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCUAoZWNobyAiJChkaXN0ZGlyKSBhcmNoaXZlcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uOiAiOyBcCisJICBsaXN0PSckKERJU1RfQVJDSElWRVMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICQkaTsgZG9uZSkgfCBcCisJICBzZWQgLWUgMWggLWUgMXMvLi89L2cgLWUgMXAgLWUgMXggLWUgJyQkcCcgLWUgJyQkeCcKK2Rpc3R1bmluc3RhbGxjaGVjazoKKwlAJChhbV9fY2QpICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyBcCisJJiYgdGVzdCBgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtbGUgMSBcCisJICAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBhZnRlciB1bmluc3RhbGw6IiA7IFwKKwkgICAgICAgIGlmIHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuIFwKKwkgICAgICAgICAgZWNobyAiICAoY2hlY2sgREVTVERJUiBzdXBwb3J0KSI7IFwKKwkgICAgICAgIGZpIDsgXAorCSAgICAgICAgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSA7IFwKKwkgICAgICAgIGV4aXQgMTsgfSA+JjIKK2Rpc3RjbGVhbmNoZWNrOiBkaXN0Y2xlYW4KKwlAaWYgdGVzdCAnJChzcmNkaXIpJyA9IC4gOyB0aGVuIFwKKwkgIGVjaG8gIkVSUk9SOiBkaXN0Y2xlYW5jaGVjayBjYW4gb25seSBydW4gZnJvbSBhIFZQQVRIIGJ1aWxkIiA7IFwKKwkgIGV4aXQgMSA7IFwKKwlmaQorCUB0ZXN0IGAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWVxIDAgXAorCSAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBpbiBidWlsZCBkaXJlY3RvcnkgYWZ0ZXIgZGlzdGNsZWFuOiIgOyBcCisJICAgICAgICQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSA7IFwKKwkgICAgICAgZXhpdCAxOyB9ID4mMgorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKFBST0dSQU1TKSAkKFNDUklQVFMpICQoTUFOUykgJChEQVRBKSBcCisJCSQoSEVBREVSUykgY29uZmlnLmgKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHVzcmxpYmRpcikiICIkKERFU1RESVIpJChtYW4zZGlyKSIgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKEJVSUxUX1NPVVJDRVMpIiB8fCBybSAtZiAkKEJVSUxUX1NPVVJDRVMpCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCWNsZWFuLXVzcmxpYkxUTElCUkFSSUVTIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLWxvY2FsIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1pbmNsdWRlSEVBREVSUyBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wa2djb25maWdEQVRBIGluc3RhbGwtdXNybGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4zCisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtbWFuIFwKKwl1bmluc3RhbGwtcGtnY29uZmlnREFUQSB1bmluc3RhbGwtdXNybGliTFRMSUJSQVJJRVMKKwordW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjMKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBjaGVjayBcCisJY2hlY2stYW0gY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIFwKKwl0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCWNsZWFuLXVzcmxpYkxUTElCUkFSSUVTIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0IGRpc3QtYWxsIFwKKwlkaXN0LWJ6aXAyIGRpc3QtZ3ppcCBkaXN0LWx6bWEgZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXh6IFwKKwlkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tbG9jYWwgZGlzdGNsZWFuLXRhZ3MgZGlzdGNsZWFuY2hlY2sgZGlzdGRpciBcCisJZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmNsdWRlSEVBREVSUyBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbjMgaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnY29uZmlnREFUQSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbC11c3JsaWJMVExJQlJBUklFUyBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjMgXAorCXVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC11c3JsaWJMVExJQlJBUklFUworCisKK2Rpc3RjbGVhbi1sb2NhbDoKKwlybSAtcmYgLmNjYWNoZQorCisuUEhPTlk6CXVwZGF0ZXBvCit1cGRhdGVwbzoKKwlyc3luYyAtTHJ0dnogIHRyYW5zbGF0aW9ucHJvamVjdC5vcmc6OnRwL2xhdGVzdC9wb3B0LyAgcG8KKworcG9wdC5sY2Q6IE1ha2VmaWxlLmFtICR7bGlicG9wdF9sYV9TT1VSQ0VTfSAke2luY2x1ZGVfSEVBREVSU30gJHtub2luc3RfSEVBREVSU30KKwlsY2xpbnQgLWR1bXAgJEAgJHtsaWJwb3B0X2xhX1NPVVJDRVN9CisKKy5QSE9OWToJc291cmNlcworc291cmNlczoKKwlAZWNobyAkKGxpYnBvcHRfbGFfU09VUkNFUzolPXBvcHQvJSkKKworLlBIT05ZOiBsaW50CitsaW50OgorCSQoTElOVCkgJHtERUZTfSAke0lOQ0xVREVTfSB0ZXN0MS5jICR7bGlicG9wdF9sYV9TT1VSQ0VTfQorCisuUEhPTlk6CW1jY2FiZQorbWNjYWJlOgorCSQoTUNDQUJFKSAkKGxpYnBvcHRfbGFfU09VUkNFUykgfCBzb3J0IC1uIC1yIHwgaGVhZCAtbiAxMAorCisuUEhPTlk6IGRveHlnZW4KK2RveHlnZW46IERveHlmaWxlCisJcm0gLXJmIGRveHlnZW4KKwlta2RpciAtcCBkb3h5Z2VuCisJZG94eWdlbgorCisuUEhPTlk6CWxjb3YtcmVzZXQJIyBydW4gbGNvdiBmcm9tIHNjcmF0Y2gsIGFsd2F5cworbGNvdi1yZXNldDoKKwltYWtlIGxjb3YtcnVuCisJbWFrZSBsY292LXJlcG9ydAorCisuUEhPTlk6CWxjb3YJCSMgcnVuIGxjb3YgZnJvbSBzY3JhdGNoIGlmIHRoZSBkaXIgaXMgbm90IHRoZXJlCitsY292OgorCW1ha2UgbGNvdi1yZXNldAorCisuUEhPTlk6CWxjb3YtcnVuCSMgcmVzZXQgcnVuIGNvdmVyYWdlIHRlc3RzCitsY292LXJ1bjoKKwlALXJtIC1yZiBsY292CisJZmluZCAuIC1uYW1lICIqLmdjZGEiIC1leGVjIHJtIHt9IFw7CisJbWFrZSBjaGVjaworCisuUEhPTlk6CWxjb3YtcmVwb3J0CSMgZ2VuZXJhdGUgcmVwb3J0IGJhc2VkIG9uIGN1cnJlbnQgY292ZXJhZ2UgZGF0YQorbGNvdi1yZXBvcnQ6CisJbWtkaXIgbGNvdgorCWxjb3YgLS1kaXJlY3RvcnkgLiAtLWNhcHR1cmUgLS1vdXRwdXQtZmlsZSBsY292L2xjb3YuaW5mbworCWxjb3YgLWwgbGNvdi9sY292LmluZm8gfCBncmVwIC12ICJgY2QgJCh0b3Bfc3JjZGlyKSAmJiBwd2RgIiB8IGN1dCAtZDogLWYxID4gbGNvdi9yZW1vdmUKKwlsY292IC1yIGxjb3YvbGNvdi5pbmZvIGBjYXQgbGNvdi9yZW1vdmVgID4gbGNvdi9sY292LmNsZWFuZWQuaW5mbworCXJtIGxjb3YvcmVtb3ZlCisJbXYgbGNvdi9sY292LmNsZWFuZWQuaW5mbyBsY292L2xjb3YuaW5mbworCWdlbmh0bWwgLXQgIiQoUEFDS0FHRV9TVFJJTkcpIiAtbyBsY292IGxjb3YvbGNvdi5pbmZvCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9SRUFETUUgYi9wb3B0LTEuMTYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjQzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvUkVBRE1FCkBAIC0wLDAgKzEsMTYgQEAKK1RoaXMgaXMgdGhlIHBvcHQoMykgY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzaW5nIGxpYnJhcnkuIFdoaWxlIGl0IGlzIHNpbWlsaWFyCit0byBnZXRvcHQoMyksIGl0IGNvbnRhaW5zIGEgbnVtYmVyIG9mIGVuaGFuY2VtZW50cywgaW5jbHVkaW5nOgorCisJMSkgcG9wdCBpcyBmdWxseSByZWVudHJhbnQKKwkyKSBwb3B0IGNhbiBwYXJzZSBhcmJpdHJhcnkgYXJndltdIHN0eWxlIGFycmF5cyB3aGlsZSAKKwkgICBnZXRvcHQoMykgbWFrZXMgdGhpcyBxdWl0ZSBkaWZmaWN1bHQKKwkzKSBwb3B0IGFsbG93cyB1c2VycyB0byBhbGlhcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisJNCkgcG9wdCBwcm92aWRlcyBjb252aWVuY2UgZnVuY3Rpb25zIGZvciBwYXJzaW5nIHN0cmluZ3MKKwkgICBpbnRvIGFyZ3ZbXSBzdHlsZSBhcnJheXMKKworQ29tcGxldGUgZG9jdW1lbnRhdGlvbiBvbiBwb3B0KDMpIGlzIGF2YWlsYWJsZSBpbiBwb3B0LnBzIChpbmNsdWRlZCBpbiB0aGlzCit0YXJiYWxsKSwgd2hpY2ggaXMgZXhjZXJwdGVkIHdpdGggcGVybWlzc2lvbiBmcm9tIHRoZSBib29rICJMaW51eAorQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQiIGJ5IE1pY2hhZWwgSy4gSm9obnNvbiBhbmQgRXJpayBUcm9hbiAoYXZhaWxhYmxlCitmcm9tIEFkZGlzb24gV2VzbGV5IGluIE1heSwgMTk5OCkuCisKK0NvbW1lbnRzIG9uIHBvcHQgc2hvdWxkIGJlIGFkZHJlc3NlZCB0byBwb3B0LWRldmVsQHJwbTUub3JnLgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L2FjbG9jYWwubTQgYi9wb3B0LTEuMTYvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODVhMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L2FjbG9jYWwubTQKQEAgLTAsMCArMSwxMDgyIEBACisjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xMS4xIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisjIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCittNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAorICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCittNF9pZihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSksIFsyLjYzXSwsCitbbTRfd2FybmluZyhbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjMuCitZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJdCBtYXkgd29yaywgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvLgorSWYgeW91IGhhdmUgcHJvYmxlbXMsIHlvdSBtYXkgbmVlZCB0byByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuCitUbyBkbyBzbywgdXNlIHRoZSBwcm9jZWR1cmUgZG9jdW1lbnRlZCBieSB0aGUgcGFja2FnZSwgdHlwaWNhbGx5IGBhdXRvcmVjb25mJy5dKV0pCisKKyMgaW50bG1hY29zeC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIENoZWNrcyBmb3Igc3BlY2lhbCBvcHRpb25zIG5lZWRlZCBvbiBNYWNPUyBYLgorZG5sIERlZmluZXMgSU5UTF9NQUNPU1hfTElCUy4KK0FDX0RFRlVOKFtndF9JTlRMX01BQ09TWF0sCitbCisgIGRubCBDaGVjayBmb3IgQVBJIGludHJvZHVjZWQgaW4gTWFjT1MgWCAxMC4yLgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWVdLAorICAgIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSwKKyAgICBbZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD5dLAorICAgICAgIFtDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpXSwKKyAgICAgICBbZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPXllc10sCisgICAgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ub10pCisgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUVdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4gdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay5dKQorICBmaQorICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hY09TIFggMTAuMy4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRkxvY2FsZUNvcHlDdXJyZW50XSwgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50LAorICAgIFtndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZMb2NhbGUuaD5dLCBbQ0ZMb2NhbGVDb3B5Q3VycmVudCgpO10sCisgICAgICAgW2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD15ZXNdLAorICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9bm9dKQorICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuXSkKKyAgZmkKKyAgSU5UTF9NQUNPU1hfTElCUz0KKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzIHx8IHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgorICAgIElOVExfTUFDT1NYX0xJQlM9Ii1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgZmkKKyAgQUNfU1VCU1QoW0lOVExfTUFDT1NYX0xJQlNdKQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgorIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KKyMgKFRoaXMgcHJpdmF0ZSBtYWNybyBzaG91bGQgbm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoaXMgZmlsZS4pCitBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCitbYW1fX2FwaV92ZXJzaW9uPScxLjExJworZG5sIFNvbWUgdXNlcnMgZmluZCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBtaXN0YWtlIGl0IGZvciBhIHdheSB0bworZG5sIHJlcXVpcmUgc29tZSBtaW5pbXVtIHZlcnNpb24uICBQb2ludCB0aGVtIHRvIHRoZSByaWdodCBtYWNyby4KK200X2lmKFskMV0sIFsxLjExLjFdLCBbXSwKKyAgICAgIFtBQ19GQVRBTChbRG8gbm90IGNhbGwgJDAsIHVzZSBBTV9JTklUX0FVVE9NQUtFKFskMV0pLl0pXSlkbmwKK10pCisKKyMgX0FNX0FVVE9DT05GX1ZFUlNJT04oVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYWNsb2NhbCB0cmFjZXMgdGhpcyBtYWNybyB0byBmaW5kIHRoZSBBdXRvY29uZiB2ZXJzaW9uLgorIyBUaGlzIGlzIGEgcHJpdmF0ZSBtYWNybyB0b28uICBVc2luZyBtNF9kZWZpbmUgc2ltcGxpZmllcworIyB0aGUgbG9naWMgaW4gYWNsb2NhbCwgd2hpY2ggY2FuIHNpbXBseSBpZ25vcmUgdGhpcyBkZWZpbml0aW9uLgorbTRfZGVmaW5lKFtfQU1fQVVUT0NPTkZfVkVSU0lPTl0sIFtdKQorCisjIEFNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT04KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gdGhleSBjYW4gYmUgdHJhY2VkLgorIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFNX0lOSVRfQVVUT01BS0UuCitBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCitbQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMS4xXSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQorCisjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKKyMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKyMgYCRzcmNkaXInLCBgJHNyY2Rpci8uLicsIG9yIGAkc3JjZGlyLy4uLy4uJy4KKyMKKyMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQorIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCisjIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCisjIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQorIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgorIworIyAkYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKKyMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKKyMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgorIworIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgorIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQorIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKyMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyMKKyMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCisjIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgorIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAorIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKKyMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKKyMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KKyMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgorIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCisjCisjIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgorIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCisjIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KKworQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKK1tkbmwgUmVseSBvbiBhdXRvY29uZiB0byBzZXQgdXAgQ0RQQVRIIHByb3Blcmx5LgorQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKK10pCisKKyMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOQorCisjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KK0FDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCitbQUNfUFJFUkVRKDIuNTIpZG5sCisgaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKwlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCitBQ19TVUJTVChbJDFfVFJVRV0pZG5sCitBQ19TVUJTVChbJDFfRkFMU0VdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX1RSVUVdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKK200X2RlZmluZShbX0FNX0NPTkRfVkFMVUVfJDFdLCBbJDJdKWRubAoraWYgJDI7IHRoZW4KKyAgJDFfVFJVRT0KKyAgJDFfRkFMU0U9JyMnCitlbHNlCisgICQxX1RSVUU9JyMnCisgICQxX0ZBTFNFPQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCitbaWYgdGVzdCAteiAiJHskMV9UUlVFfSIgJiYgdGVzdCAteiAiJHskMV9GQUxTRX0iOyB0aGVuCisgIEFDX01TR19FUlJPUihbW2NvbmRpdGlvbmFsICIkMSIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKK2ZpXSldKQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxMAorCisjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nIGBBQ19QUk9HX0NDJyBiZQorIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKKyMgd2lsbCB0aGluayBpdCBzZWVzIGEgKnVzZSosIGFuZCB0aGVyZWZvcmUgd2lsbCB0cmlnZ2VyIGFsbCBpdCdzCisjIEMgc3VwcG9ydCBtYWNoaW5lcnkuICBBbHNvIG5vdGUgdGhhdCBpdCBtZWFucyB0aGF0IGF1dG9zY2FuLCBzZWVpbmcKKyMgQ0MgZXRjLiBpbiB0aGUgTWFrZWZpbGUsIHdpbGwgYXNrIGZvciBhbiBBQ19QUk9HX0NDIHVzZS4uLgorCisKKyMgX0FNX0RFUEVOREVOQ0lFUyhOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBob3cgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgZGVwZW5kZW5jeSBjaGVja2luZy4KKyMgTkFNRSBpcyAiQ0MiLCAiQ1hYIiwgIkdDSiIsIG9yICJPQkpDIi4KKyMgV2UgdHJ5IGEgZmV3IHRlY2huaXF1ZXMgYW5kIHVzZSB0aGF0IHRvIHNldCBhIHNpbmdsZSBjYWNoZSB2YXJpYWJsZS4KKyMKKyMgV2UgZG9uJ3QgQUNfUkVRVUlSRSB0aGUgY29ycmVzcG9uZGluZyBBQ19QUk9HX0NDIHNpbmNlIHRoZSBsYXR0ZXIgd2FzCisjIG1vZGlmaWVkIHRvIGludm9rZSBfQU1fREVQRU5ERU5DSUVTKENDKTsgd2Ugd291bGQgaGF2ZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVuY3ksIGFuZCBnaXZlbiB0aGF0IHRoZSB1c2VyIGlzIG5vdCBleHBlY3RlZCB0byBydW4gdGhpcyBtYWNybywKKyMganVzdCByZWx5IG9uIEFDX1BST0dfQ0MuCitBQ19ERUZVTihbX0FNX0RFUEVOREVOQ0lFU10sCitbQUNfUkVRVUlSRShbQU1fU0VUX0RFUERJUl0pZG5sCitBQ19SRVFVSVJFKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10pZG5sCitBQ19SRVFVSVJFKFtBTV9NQUtFX0lOQ0xVREVdKWRubAorQUNfUkVRVUlSRShbQU1fREVQX1RSQUNLXSlkbmwKKworaWZlbHNlKFskMV0sIENDLCAgIFtkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBDWFgsICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgT0JKQywgW2RlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICBbJDFdLCBVUEMsICBbZGVwY2M9IiRVUEMiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgR0NKLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICAgICAgICAgICAgICBbZGVwY2M9IiQkMSIgICBhbV9jb21waWxlcl9saXN0PV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjY10sCisgICAgICAgICAgICAgICBbYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdLAorW2lmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uIFsncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCddIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIG00X2Nhc2UoWyQxXSwgW0NDXSwKKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWNdLAorICAgIFtDWFhdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10pCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorXSkKK0FDX1NVQlNUKFskMURFUE1PREVdLCBbZGVwbW9kZT0kYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdKQorQU1fQ09ORElUSU9OQUwoW2FtX19mYXN0ZGVwJDFdLCBbCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzXSkKK10pCisKKworIyBBTV9TRVRfREVQRElSCisjIC0tLS0tLS0tLS0tLS0KKyMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCisjIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUworQUNfREVGVU4oW0FNX1NFVF9ERVBESVJdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitBQ19TVUJTVChbREVQRElSXSwgWyIke2FtX19sZWFkaW5nX2RvdH1kZXBzIl0pZG5sCitdKQorCisKKyMgQU1fREVQX1RSQUNLCisjIC0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX0RFUF9UUkFDS10sCitbQUNfQVJHX0VOQUJMRShkZXBlbmRlbmN5LXRyYWNraW5nLAorWyAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCitBQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNREVQQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworI3NlcmlhbCA1CisKKyMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQorICBkb25lCit9CitdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisKKworIyBBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIHNob3VsZCBvbmx5IGJlIGludm9rZWQgb25jZSAtLSB1c2UgdmlhIEFDX1JFUVVJUkUuCisjCisjIFRoaXMgY29kZSBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcKKyMgaXMgZW5hYmxlZC4gIEZJWE1FLiAgVGhpcyBjcmVhdGVzIGVhY2ggYC5QJyBmaWxlIHRoYXQgd2Ugd2lsbAorIyBuZWVkIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBjb2RlLgorQUNfREVGVU4oW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1tBQ19DT05GSUdfQ09NTUFORFMoW2RlcGZpbGVzXSwKKyAgICAgW3Rlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgICAgIFtBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiXSkKK10pCisKKyMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisjIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMTYKKworIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKKyMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KKworIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQorIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCisjIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKKyMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCisjIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCisjIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgorIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAorIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCisjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCitBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCitbQUNfUFJFUkVRKFsyLjYyXSlkbmwKK2RubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CitkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KK200X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAoraWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgorICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAorICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgIEFDX1NVQlNUKFthbV9faXNyY10sIFsnIC1JJChzcmNkaXIpJ10pX0FNX1NVQlNUX05PVE1BS0UoW2FtX19pc3JjXSlkbmwKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuICJtYWtlIGRpc3RjbGVhbiIgdGhlcmUgZmlyc3RdKQorICBmaQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKK0FDX1NVQlNUKFtDWUdQQVRIX1ddKQorCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCitkbmwgRGlzdGluZ3Vpc2ggYmV0d2VlbiBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBjYWxscy4KK200X2lmdmFsKFskMl0sCitbbTRfaWZ2YWwoWyQzXSwgW19BTV9TRVRfT1BUSU9OKFtuby1kZWZpbmVdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJDFdKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLAorW19BTV9TRVRfT1BUSU9OUyhbJDFdKWRubAorZG5sIERpYWdub3NlIG9sZC1zdHlsZSBBQ19JTklUIHdpdGggbmV3LXN0eWxlIEFNX0FVVE9NQUtFX0lOSVQuCittNF9pZihtNF9pZmRlZihbQUNfUEFDS0FHRV9OQU1FXSwgMSltNF9pZmRlZihbQUNfUEFDS0FHRV9WRVJTSU9OXSwgMSksIDExLCwKKyAgW200X2ZhdGFsKFtBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50c10pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFsnQUNfUEFDS0FHRV9UQVJOQU1FJ10pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJ0FDX1BBQ0tBR0VfVkVSU0lPTiddKV0pZG5sCisKK19BTV9JRl9PUFRJT04oW25vLWRlZmluZV0sLAorW0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiBwYWNrYWdlXSkKKyBBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIiwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KK0FDX1JFUVVJUkUoW0FNX1NBTklUWV9DSEVDS10pZG5sCitBQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pZG5sCitBTV9NSVNTSU5HX1BST0coQUNMT0NBTCwgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0NPTkYsIGF1dG9jb25mKQorQU1fTUlTU0lOR19QUk9HKEFVVE9NQUtFLCBhdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKK0FNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8pCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NUUklQXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK19BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAorCSAgICAgIFtfQU1fSUZfT1BUSU9OKFt0YXItcGF4XSwgW19BTV9QUk9HX1RBUihbcGF4XSldLAorCQkJICAgICBbX0FNX1BST0dfVEFSKFt2N10pXSldKQorX0FNX0lGX09QVElPTihbbm8tZGVwZW5kZW5jaWVzXSwsCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ0NdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DQ10sCisJCQkgIGRlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKENDKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorCQkJICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX09CSkNdLAorCQkJICBkZWZuKFtBQ19QUk9HX09CSkNdKVtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSldKWRubAorXSkKK19BTV9JRl9PUFRJT04oW3NpbGVudC1ydWxlc10sIFtBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKV0pZG5sCitkbmwgVGhlIGBwYXJhbGxlbC10ZXN0cycgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCitkbmwgYGFtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzIG1hY3JvCitkbmwgaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgorQUNfQ09ORklHX0NPTU1BTkRTX1BSRShkbmwKK1ttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKKyAgW0FNX0NPTkRJVElPTkFMKFthbV9fRVhFRVhUXSwgW3Rlc3QgLW4gIiRFWEVFWFQiXSldKV0pZG5sCitdKQorCitkbmwgSG9vayBpbnRvIGBfQUNfQ09NUElMRVJfRVhFRVhUJyBlYXJseSB0byBsZWFybiBpdHMgZXhwYW5zaW9uLiAgRG8gbm90CitkbmwgYWRkIHRoZSBjb25kaXRpb25hbCByaWdodCBoZXJlLCBhcyBfQUNfQ09NUElMRVJfRVhFRVhUIG1heSBiZSBmdXJ0aGVyCitkbmwgbWFuZ2xlZCBieSBBdXRvY29uZiBhbmQgcnVuIGluIGEgc2hlbGwgY29uZGl0aW9uYWwgc3RhdGVtZW50LgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK200X2RlZm4oW19BQ19DT01QSUxFUl9FWEVFWFRdKVttNF9wcm92aWRlKFtfQU1fQ09NUElMRVJfRVhFRVhUXSldKQorCisKKyMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KKyMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCisjIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKworIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQorIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCisjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KK0FDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKK1sjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fYXJnPSQxCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSAkaW5zdGFsbF9zaC4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU0hdLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKK0FDX1NVQlNUKGluc3RhbGxfc2gpXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcworIyB3aXRoIGEgbGVhZGluZyBkb3QuICBGb3IgaW5zdGFuY2UgTVMtRE9TIGRvZXNuJ3QuCitBQ19ERUZVTihbQU1fU0VUX0xFQURJTkdfRE9UXSwKK1tybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorQUNfU1VCU1QoW2FtX19sZWFkaW5nX2RvdF0pXSkKKworIyBBZGQgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9wdGlvbiB0byBjb25maWd1cmUuICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBGcm9tIEppbSBNZXllcmluZworCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fTUFJTlRBSU5FUl9NT0RFKFtERUZBVUxULU1PREVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbnRyb2wgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuCisjIERlZmF1bHQgaXMgdG8gZGlzYWJsZSB0aGVtLCB1bmxlc3MgYGVuYWJsZScgaXMgcGFzc2VkIGxpdGVyYWxseS4KKyMgRm9yIHN5bW1ldHJ5LCBgZGlzYWJsZScgbWF5IGJlIHBhc3NlZCBhcyB3ZWxsLiAgQW55d2F5LCB0aGUgdXNlcgorIyBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2l0aCB0aGUgLS1lbmFibGUvLS1kaXNhYmxlIHN3aXRjaC4KK0FDX0RFRlVOKFtBTV9NQUlOVEFJTkVSX01PREVdLAorW200X2Nhc2UobTRfZGVmYXVsdChbJDFdLCBbZGlzYWJsZV0pLAorICAgICAgIFtlbmFibGVdLCBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2Rpc2FibGVdKV0sCisgICAgICAgW2Rpc2FibGVdLCBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2VuYWJsZV0pXSwKKyAgICAgICBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2VuYWJsZV0pCisgICAgICAgIG00X3dhcm4oW3N5bnRheF0sIFt1bmV4cGVjdGVkIGFyZ3VtZW50IHRvIEFNQCZ0QF9NQUlOVEFJTkVSX01PREU6ICQxXSldKQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGFtX21haW50YWluZXJfb3RoZXIgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXNdKQorICBkbmwgbWFpbnRhaW5lci1tb2RlJ3MgZGVmYXVsdCBpcyAnZGlzYWJsZScgdW5sZXNzICdlbmFibGUnIGlzIHBhc3NlZAorICBBQ19BUkdfRU5BQkxFKFttYWludGFpbmVyLW1vZGVdLAorWyAgLS1dW2FtX21haW50YWluZXJfb3RoZXJdWy1tYWludGFpbmVyLW1vZGUgIGFtX21haW50YWluZXJfb3RoZXIgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKwkJCSAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcl0sCisgICAgICBbVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsXSwKKyAgICAgIFtVU0VfTUFJTlRBSU5FUl9NT0RFPV1tNF9pZihhbV9tYWludGFpbmVyX290aGVyLCBbZW5hYmxlXSwgW25vXSwgW3llc10pKQorICBBQ19NU0dfUkVTVUxUKFskVVNFX01BSU5UQUlORVJfTU9ERV0pCisgIEFNX0NPTkRJVElPTkFMKFtNQUlOVEFJTkVSX01PREVdLCBbdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllc10pCisgIE1BSU5UPSRNQUlOVEFJTkVSX01PREVfVFJVRQorICBBQ19TVUJTVChbTUFJTlRdKWRubAorXQorKQorCitBVV9ERUZVTihbam1fTUFJTlRBSU5FUl9NT0RFXSwgW0FNX01BSU5UQUlORVJfTU9ERV0pCisKKyMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgQU1fTUFLRV9JTkNMVURFKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGhvdyBtYWtlIHRyZWF0cyBpbmNsdWRlcy4KK0FDX0RFRlVOKFtBTV9NQUtFX0lOQ0xVREVdLAorW2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlXSkKK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gYG1ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYworZmkKK0FDX1NVQlNUKFthbV9faW5jbHVkZV0pCitBQ19TVUJTVChbYW1fX3F1b3RlXSkKK0FDX01TR19SRVNVTFQoWyRfYW1fcmVzdWx0XSkKK3JtIC1mIGNvbmZpbmMgY29uZm1mCitdKQorCisjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYKKworIyBBTV9NSVNTSU5HX1BST0coTkFNRSwgUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKK1tBQ19SRVFVSVJFKFtBTV9NSVNTSU5HX0hBU19SVU5dKQorJDE9JHskMS0iJHthbV9taXNzaW5nX3J1bn0kMiJ9CitBQ19TVUJTVCgkMSldKQorCisKKyMgQU1fTUlTU0lOR19IQVNfUlVOCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgc3VwcG9ydHMgLS1ydW4uCisjIElmIGl0IGRvZXMsIHNldCBhbV9taXNzaW5nX3J1biB0byB1c2UgaXQsIG90aGVyd2lzZSwgdG8gbm90aGluZy4KK0FDX0RFRlVOKFtBTV9NSVNTSU5HX0hBU19SVU5dLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubAoraWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgQUNfTVNHX1dBUk4oW2BtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKK2ZpCitdKQorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX01LRElSX1AKKyMgLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBgbWtkaXIgLXAnLgorQUNfREVGVU4oW0FNX1BST0dfTUtESVJfUF0sCitbQUNfUFJFUkVRKFsyLjYwXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUtESVJfUF0pZG5sCitkbmwgQXV0b21ha2UgMS44IHRvIDEuOS42IHVzZWQgdG8gZGVmaW5lIG1rZGlyX3AuICBXZSBub3cgdXNlIE1LRElSX1AsCitkbmwgd2hpbGUga2VlcGluZyBhIGRlZmluaXRpb24gb2YgbWtkaXJfcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK2RubCBATUtESVJfUEAgaXMgbWFnaWM6IEFDX09VVFBVVCBhZGp1c3RzIGl0cyB2YWx1ZSBmb3IgZWFjaCBNYWtlZmlsZS4KK2RubCBIb3dldmVyIHdlIGNhbm5vdCBkZWZpbmUgbWtkaXJfcCBhcyAkKE1LRElSX1ApIGZvciB0aGUgc2FrZSBvZgorZG5sIE1ha2VmaWxlLmlucyB0aGF0IGRvIG5vdCBkZWZpbmUgTUtESVJfUCwgc28gd2UgZG8gb3VyIG93bgorZG5sIGFkanVzdG1lbnQgdXNpbmcgdG9wX2J1aWxkZGlyICh3aGljaCBpcyBkZWZpbmVkIG1vcmUgb2Z0ZW4gdGhhbgorZG5sIE1LRElSX1ApLgorQUNfU1VCU1QoW21rZGlyX3BdLCBbIiRNS0RJUl9QIl0pZG5sCitjYXNlICRta2Rpcl9wIGluCisgIFtbXFwvJF1dKiB8ID86W1tcXC9dXSopIDs7CisgICovKikgbWtkaXJfcD0iXCQodG9wX2J1aWxkZGlyKS8kbWtkaXJfcCIgOzsKK2VzYWMKK10pCisKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDQKKworIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKK1tbX0FNX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisjIF9BTV9TRVRfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgMSldKQorCisjIF9BTV9TRVRfT1BUSU9OUyhPUFRJT05TKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCitbbTRfZm9yZWFjaF93KFtfQU1fT3B0aW9uXSwgWyQxXSwgW19BTV9TRVRfT1BUSU9OKF9BTV9PcHRpb24pXSldKQorCisjIF9BTV9JRl9PUFRJT04oT1BUSU9OLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK0FDX0RFRlVOKFtfQU1fSUZfT1BUSU9OXSwKK1ttNF9pZnNldChfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgWyQyXSwgWyQzXSldKQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwNgorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKK0FDX0RFRlVOKFtBTV9DX1BST1RPVFlQRVNdLAorW0FDX1JFUVVJUkUoW0FDX0NfUFJPVE9UWVBFU10pCitpZiB0ZXN0ICIkYWNfY3ZfcHJvZ19jY19zdGRjIiAhPSBubzsgdGhlbgorICBVPSBBTlNJMktOUj0KK2Vsc2UKKyAgVT1fIEFOU0kyS05SPS4vYW5zaTJrbnIKK2ZpCisjIEVuc3VyZSBzb21lIGNoZWNrcyBuZWVkZWQgYnkgYW5zaTJrbnIgaXRzZWxmLgorQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorQUNfQ0hFQ0tfSEVBREVSUyhbc3RyaW5nLmhdKQorQUNfU1VCU1QoW1VdKWRubAorQUNfU1VCU1QoW0FOU0kyS05SXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFtBTlNJMktOUl0pZG5sCitdKQorCitBVV9ERUZVTihbZnBfQ19QUk9UT1RZUEVTXSwgW0FNX0NfUFJPVE9UWVBFU10pCisKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNQorCisjIEFNX1NBTklUWV9DSEVDSworIyAtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lXSkKKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWVdKTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZcIFwJXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIHNyY2RpciB2YWx1ZTogYCRzcmNkaXInXSk7OworZXNhYworCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkWypdIiA9ICJYIjsgdGhlbgorICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKyAgICAgIHNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJFsqXSIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgQUNfTVNHX0VSUk9SKFtscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKyAgIGZpCisKKyAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCitmaQorQUNfTVNHX1JFU1VMVCh5ZXMpXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgYGluc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKKyMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCisjIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgorIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCisjIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKKyMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAorW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitkbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSBgbWF5YmUnLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQorZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCitBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQorCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dHRpbmcgVkFSSUFCTEUgPSBAVkFSSUFCTEVAIGluIE1ha2VmaWxlLmluLgorIyBUaGlzIG1hY3JvIGlzIHRyYWNlZCBieSBBdXRvbWFrZS4KK0FDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCisKKyMgQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCitBQ19ERUZVTihbQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQorCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgX0FNX1BST0dfVEFSKEZPUk1BVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwgaW4gZm9ybWF0IEZPUk1BVC4KKyMgRk9STUFUIHNob3VsZCBiZSBvbmUgb2YgYHY3JywgYHVzdGFyJywgb3IgYHBheCcuCisjCisjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX190YXIpIHRoYXQgaXMgYSBjb21tYW5kCisjIHdyaXRpbmcgdG8gc3Rkb3V0IGEgRk9STUFULXRhcmJhbGwgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5CisjICR0YXJkaXIuCisjICAgICB0YXJkaXI9ZGlyZWN0b3J5ICYmICQoYW1fX3RhcikgPiByZXN1bHQudGFyCisjCisjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKKyMgYSB0YXJiYWxsIHJlYWQgZnJvbSBzdGRpbi4KKyMgICAgICQoYW1fX3VudGFyKSA8IHJlc3VsdC50YXIKK0FDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAorWyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK0FNX01JU1NJTkdfUFJPRyhbQU1UQVJdLCBbdGFyXSkKK200X2lmKFskMV0sIFt2N10sCisgICAgIFthbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLSddLAorICAgICBbbTRfY2FzZShbJDFdLCBbdXN0YXJdLCwgW3BheF0sLAorICAgICAgICAgICAgICBbbTRfZmF0YWwoW1Vua25vd24gdGFyIGZvcm1hdF0pXSkKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKKyMgTG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KK19hbV90b29scz0nZ251dGFyIG00X2lmKFskMV0sIFt1c3Rhcl0sIFtwbGFpbnRhcl0pIHBheCBjcGlvIG5vbmUnCitfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQorIyBEbyBub3QgZm9sZCB0aGUgYWJvdmUgdHdvIGxpbmUgaW50byBvbmUsIGJlY2F1c2UgVHJ1NjQgc2ggYW5kCisjIFNvbGFyaXMgc2ggd2lsbCBub3QgZ3JvayBzcGFjZXMgaW4gdGhlIHJocyBvZiBgLScuCitmb3IgX2FtX3Rvb2wgaW4gJF9hbV90b29scworZG8KKyAgY2FzZSAkX2FtX3Rvb2wgaW4KKyAgZ251dGFyKQorICAgIGZvciBfYW1fdGFyIGluIHRhciBnbnV0YXIgZ3RhcjsKKyAgICBkbworICAgICAgQU1fUlVOX0xPRyhbJF9hbV90YXIgLS12ZXJzaW9uXSkgJiYgYnJlYWsKKyAgICBkb25lCisgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJHRhcmRpciInCisgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKyAgICA7OworICBwbGFpbnRhcikKKyAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCisgICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQorICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCisgICAgOzsKKyAgcGF4KQorICAgIGFtX190YXI9J3BheCAtTCAteCAkMSAtdyAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0ncGF4IC1yJworICAgIDs7CisgIGNwaW8pCisgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJworICAgIDs7CisgIG5vbmUpCisgICAgYW1fX3Rhcj1mYWxzZQorICAgIGFtX190YXJfPWZhbHNlCisgICAgYW1fX3VudGFyPWZhbHNlCisgICAgOzsKKyAgZXNhYworCisgICMgSWYgdGhlIHZhbHVlIHdhcyBjYWNoZWQsIHN0b3Agbm93LiAgV2UganVzdCB3YW50ZWQgdG8gaGF2ZSBhbV9fdGFyCisgICMgYW5kIGFtX191bnRhciBzZXQuCisgIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhaworCisgICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3JrcworICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCisgIEFNX1JVTl9MT0coW3RhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcl0pCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKyAgICBBTV9SVU5fTE9HKFskYW1fX3VudGFyIDxjb25mdGVzdC50YXJdKQorICAgIGdyZXAgR3JlcE1lIGNvbmZ0ZXN0LmRpci9maWxlID4vZGV2L251bGwgMj4mMSAmJiBicmVhaworICBmaQorZG9uZQorcm0gLXJmIGNvbmZ0ZXN0LmRpcgorCitBQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCitBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCitBQ19TVUJTVChbYW1fX3Rhcl0pCitBQ19TVUJTVChbYW1fX3VudGFyXSkKK10pICMgX0FNX1BST0dfVEFSCisKK200X2luY2x1ZGUoW200L2dldHRleHQubTRdKQorbTRfaW5jbHVkZShbbTQvaWNvbnYubTRdKQorbTRfaW5jbHVkZShbbTQvbGliLWxkLm00XSkKK200X2luY2x1ZGUoW200L2xpYi1saW5rLm00XSkKK200X2luY2x1ZGUoW200L2xpYi1wcmVmaXgubTRdKQorbTRfaW5jbHVkZShbbTQvbGlidG9vbC5tNF0pCittNF9pbmNsdWRlKFttNC9sdG9wdGlvbnMubTRdKQorbTRfaW5jbHVkZShbbTQvbHRzdWdhci5tNF0pCittNF9pbmNsdWRlKFttNC9sdHZlcnNpb24ubTRdKQorbTRfaW5jbHVkZShbbTQvbHR+b2Jzb2xldGUubTRdKQorbTRfaW5jbHVkZShbbTQvbmxzLm00XSkKK200X2luY2x1ZGUoW200L3BvLm00XSkKK200X2luY2x1ZGUoW200L3Byb2d0ZXN0Lm00XSkKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9hdXRvL01ha2VmaWxlLmFtIGIvcG9wdC0xLjE2L2F1dG8vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiYjI5MgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9hdXRvL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTIgQEAKK0FVVE9NQUtFX09QVElPTlMgPSAxLjQgZm9yZWlnbgorCitBVVRPVEVTVCA9ICAgICAgYXBpLXNhbml0eS1hdXRvdGVzdC5wbAorCitURElSUyA9CQlkZXNjcmlwdG9yc19zdG9yYWdlIGhlYWRlcl9jb21waWxlX2Vycm9ycyB0ZXN0X3Jlc3VsdHMgdGVzdHMKKworY2xlYW4tbG9jYWw6CisJcm0gLXJmICQoVERJUlMpCisKK2NoZWNrLWxvY2FsOgorCS1bIC1kIHRlc3RzIF0gJiYgJHtBVVRPVEVTVH0gLWwgcG9wdCAtZCBkZXNjIC1jbGVhbgorCS0ke0FVVE9URVNUfSAtbCBwb3B0IC1kIGRlc2MgLXN0IHR5cGVzIC1nZW4gLWJ1aWxkIC1ydW4KZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9hdXRvL01ha2VmaWxlLmluIGIvcG9wdC0xLjE2L2F1dG8vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzZmM1NgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9hdXRvL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDAxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAordGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorc3ViZGlyID0gYXV0bworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvZGVzYy5pbiAkKHNyY2RpcikvdHlwZXMuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gZGVzYyB0eXBlcworQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX0FHRSA9IEBMVF9BR0VACitMVF9DVVJSRU5UID0gQExUX0NVUlJFTlRACitMVF9SRVZJU0lPTiA9IEBMVF9SRVZJU0lPTkAKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQT1BUX1BLR0NPTkZJR19MSUJTID0gQFBPUFRfUEtHQ09ORklHX0xJQlNACitQT1BUX1NPVVJDRV9QQVRIID0gQFBPUFRfU09VUkNFX1BBVEhACitQT1NVQiA9IEBQT1NVQkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVEFSR0VUID0gQFRBUkdFVEAKK1UgPSBAVUAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3ViZGlycyA9IEBzdWJkaXJzQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0ID0gQHRhcmdldEAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACit0YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAordGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FVVE9NQUtFX09QVElPTlMgPSAxLjQgZm9yZWlnbgorQVVUT1RFU1QgPSBhcGktc2FuaXR5LWF1dG90ZXN0LnBsCitURElSUyA9IGRlc2NyaXB0b3JzX3N0b3JhZ2UgaGVhZGVyX2NvbXBpbGVfZXJyb3JzIHRlc3RfcmVzdWx0cyB0ZXN0cworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF1dG8vTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF1dG8vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitkZXNjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZGVzYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACit0eXBlczogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL3R5cGVzLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stbG9jYWwKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNoZWNrLWxvY2FsIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKK2NsZWFuLWxvY2FsOgorCXJtIC1yZiAkKFRESVJTKQorCitjaGVjay1sb2NhbDoKKwktWyAtZCB0ZXN0cyBdICYmICR7QVVUT1RFU1R9IC1sIHBvcHQgLWQgZGVzYyAtY2xlYW4KKwktJHtBVVRPVEVTVH0gLWwgcG9wdCAtZCBkZXNjIC1zdCB0eXBlcyAtZ2VuIC1idWlsZCAtcnVuCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9hdXRvL2Rlc2MuaW4gYi9wb3B0LTEuMTYvYXV0by9kZXNjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYmRjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvYXV0by9kZXNjLmluCkBAIC0wLDAgKzEsMjggQEAKKzx2ZXJzaW9uPgorICAxLjE1Cis8L3ZlcnNpb24+CisgCis8aGVhZGVycz4KKyAgcG9wdC5oCis8L2hlYWRlcnM+CisgCis8bGlicz4KKyAgQGFic190b3BfYnVpbGRkaXJALy5saWJzL2xpYnBvcHQuc28KKzwvbGlicz4KKworPGluY2x1ZGVfcGF0aHM+CisgIEBhYnNfdG9wX3NyY2RpckAKKzwvaW5jbHVkZV9wYXRocz4KKworPGdjY19vcHRpb25zPgorICBAQ0ZMQUdTQAorPC9nY2Nfb3B0aW9ucz4KKworPG9wYXF1ZV90eXBlcz4KKzwvb3BhcXVlX3R5cGVzPgorPHNraXBfaW50ZXJmYWNlcz4KKzwvc2tpcF9pbnRlcmZhY2VzPgorPGluY2x1ZGVfcHJlYW1ibGU+Cis8L2luY2x1ZGVfcHJlYW1ibGU+Cis8bGlic19kZXBlbmQ+Cis8L2xpYnNfZGVwZW5kPgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L2F1dG8vdHlwZXMuaW4gYi9wb3B0LTEuMTYvYXV0by90eXBlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGE2YzMzCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L2F1dG8vdHlwZXMuaW4KQEAgLTAsMCArMSwxNDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y29sbGVjdGlvbj4KKworPHNwZWNfdHlwZT4KKyAgPGtpbmQ+IGNvbW1vbl9lbnYgPC9raW5kPgorICA8Z2xvYmFsX2NvZGU+CisgICAgc3RhdGljIGludCBhVmFsID0gMTQxNDIxOworICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgYUZsYWcgPSAweDhhY2VVOworCisgICAgc3RhdGljIHNob3J0IGFTaG9ydCA9IChzaG9ydCk0NTIzOworICAgIHN0YXRpYyBpbnQgYUludCA9IDI3MTgyODsKKyAgICBzdGF0aWMgbG9uZyBhTG9uZyA9IDczODkwNTYwOUw7CisgICAgc3RhdGljIGxvbmcgbG9uZyBhTG9uZ0xvbmcgPSA3Mzg5MDU2MDlMTDsKKyAgICBzdGF0aWMgZmxvYXQgYUZsb2F0ID0gMy4xNDE1OTI2NTM1OworICAgIHN0YXRpYyBkb3VibGUgYURvdWJsZSA9IDkuODY5NjA0NDAxMDg5MzU4NjE4ODM7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKiogYUFyZ3YgPSBOVUxMOworCisgICAgc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNUYWJsZVtdID0geworICAgICAgeyAidmFsIiwgJ1wwJywgUE9QVF9BUkdfVkFMIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFWYWwsIDEyNTk5MiwKKyAgICAJIlBPUFRfQVJHX1ZBTDogMTI1OTkyIDE0MTQyMSIsIDB9LAorICAgICAgeyAiaW50IiwgJ2knLCBQT1BUX0FSR19JTlQgfCBQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxULCAmYUludCwgMCwKKyAgICAJIlBPUFRfQVJHX0lOVDogMjcxODI4IiwgTlVMTCB9LAorICAgICAgeyAic2hvcnQiLCAncycsIFBPUFRfQVJHX1NIT1JUIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFTaG9ydCwgMCwKKyAgICAJIlBPUFRfQVJHX1NIT1JUOiA0NTIzIiwgTlVMTCB9LAorICAgICAgeyAibG9uZyIsICdsJywgUE9QVF9BUkdfTE9ORyB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZhTG9uZywgMCwKKyAgICAJIlBPUFRfQVJHX0xPTkc6IDczODkwNTYwOSIsIE5VTEwgfSwKKyAgICAgIHsgImxvbmdsb25nIiwgJ0wnLCBQT1BUX0FSR19MT05HTE9ORyB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZhTG9uZ0xvbmcsIDAsCisgICAgCSJQT1BUX0FSR19MT05HTE9ORzogNzM4OTA1NjA5IiwgTlVMTCB9LAorICAgICAgeyAiZmxvYXQiLCAnZicsIFBPUFRfQVJHX0ZMT0FUIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFGbG9hdCwgMCwKKyAgICAJIlBPUFRfQVJHX0ZMT0FUOiAzLjE0MTU5IiwgTlVMTCB9LAorICAgICAgeyAiZG91YmxlIiwgJ2QnLCBQT1BUX0FSR19ET1VCTEUgfCBQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxULCAmYURvdWJsZSwgMCwKKyAgICAJIlBPUFRfQVJHX0RPVUJMRTogOS44Njk2IiwgTlVMTCB9LAorICAgICAgeyAiYXJndiIsICdcMCcsIFBPUFRfQVJHX0FSR1YsICZhQXJndiwgMCwKKyAgICAJIlBPUFRfQVJHX0FSR1Y6IGFwcGVuZCBzdHJpbmcgdG8gYXJndiBhcnJheSAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIiwiU1RSSU5HIn0sCisgICAgICBQT1BUX0FVVE9BTElBUworICAgICAgUE9QVF9BVVRPSEVMUAorICAgICAgUE9QVF9UQUJMRUVORAorICAgIH07CisgIDwvZ2xvYmFsX2NvZGU+Cis8L3NwZWNfdHlwZT4KKworPHNwZWNfdHlwZT4KKyAgPGtpbmQ+IGNvbW1vbl9wYXJhbSA8L2tpbmQ+CisgIDxkYXRhX3R5cGU+IHBvcHRDb250ZXh0IDwvZGF0YV90eXBlPgorICA8dmFsdWU+IHBvcHRHZXRDb250ZXh0KGFyZ3ZbMF0sIGFyZ2MsIGFyZ3YsIG9wdGlvbnNUYWJsZSwgMCkgPC92YWx1ZT4KKyAgPGZpbmFsX2NvZGU+CisgICAgJDAgPSBwb3B0RnJlZUNvbnRleHQoJDApOworICA8L2ZpbmFsX2NvZGU+CisgIDxhc3NvY2lhdGluZz4KKyAgICA8ZXhjZXB0PgorICAgICAgcG9wdEFkZEl0ZW0JPCEtLSBGSVhNRSAtLT4KKyAgICA8L2V4Y2VwdD4KKyAgPC9hc3NvY2lhdGluZz4KKzwvc3BlY190eXBlPgorPHNwZWNfdHlwZT4KKyAgPGtpbmQ+IG5vcm1hbCA8L2tpbmQ+CisgIDxkYXRhX3R5cGU+IHBvcHRDb250ZXh0IDwvZGF0YV90eXBlPgorICA8dmFsdWU+IHBvcHRHZXRDb250ZXh0KGFyZ3ZbMF0sIGFyZ2MsIGFyZ3YsIG9wdGlvbnNUYWJsZSwgMCkgPC92YWx1ZT4KKyAgPGFzc29jaWF0aW5nPgorICAgIDxpbnRlcmZhY2VzPgorICAgICAgcG9wdEZyZWVDb250ZXh0CisgICAgICBwb3B0RmluaQorICAgIDwvaW50ZXJmYWNlcz4KKyAgICA8bGlua3M+IHBhcmFtMSA8L2xpbmtzPgorICA8L2Fzc29jaWF0aW5nPgorPC9zcGVjX3R5cGU+Cis8c3BlY190eXBlPgorICA8a2luZD4gbm9ybWFsIDwva2luZD4KKyAgPGRhdGFfdHlwZT4gcG9wdEl0ZW0gPC9kYXRhX3R5cGU+CisgIDx2YWx1ZT4gTlVMTCA8L3ZhbHVlPgorICA8Z2xvYmFsX2NvZGU+CisgICAgI2luY2x1ZGUgPG1hbGxvYy5oPgorICA8L2dsb2JhbF9jb2RlPgorICA8aW5pdF9jb2RlPgorICAgICQwID0gY2FsbG9jKDEsIHNpemVvZigqJDApKTsKKyAgICAkMC0+b3B0aW9uID0gKnBvcHRIZWxwT3B0aW9uc0kxOE47CisgICAgJDAtPmFyZ2MgPSAxOworICAgICQwLT5hcmd2ID0gY2FsbG9jKDIsIHNpemVvZigqJDAtPmFyZ3YpKTsKKyAgICAkMC0+YXJndlswXSA9IHN0cmR1cCgiYXJnMSIpOworICA8L2luaXRfY29kZT4KKyAgPGFzc29jaWF0aW5nPgorICAgIDxpbnRlcmZhY2VzPiBwb3B0QWRkSXRlbSA8L2ludGVyZmFjZXM+CisgICAgPGxpbmtzPiBwYXJhbTIgPC9saW5rcz4KKyAgPC9hc3NvY2lhdGluZz4KKzwvc3BlY190eXBlPgorCis8c3BlY190eXBlPgorICA8a2luZD4gY29tbW9uX3BhcmFtIDwva2luZD4KKyAgPGRhdGFfdHlwZT4gc3RydWN0IHBvcHRBbGlhcyA8L2RhdGFfdHlwZT4KKyAgPHZhbHVlPiBfYWxpYXMgPC92YWx1ZT4KKyAgPGdsb2JhbF9jb2RlPgorICAgICNpbmNsdWRlIDxtYWxsb2MuaD4KKyAgICBzdGF0aWMgc3RydWN0IHBvcHRBbGlhcyBfYWxpYXMgPSB7CisgICAgICAubG9uZ05hbWUgPSAibG9uZ05hbWUiLAorICAgICAgLnNob3J0TmFtZSA9ICdsJywKKyAgICAgIC5hcmdjID0gMCwKKyAgICAgIC5hcmd2ID0gTlVMTAorICAgIH07CisgIDwvZ2xvYmFsX2NvZGU+CisgIDxpbml0X2NvZGU+CisgICAgJDAuYXJnYyA9IDE7CisgICAgJDAuYXJndiA9IGNhbGxvYygkMC5hcmdjICsgMSwgc2l6ZW9mKCokMC5hcmd2KSk7CisgICAgJDAuYXJndlswXSA9IHN0cmR1cCgiYXJnMSIpOworICA8L2luaXRfY29kZT4KKzwvc3BlY190eXBlPgorCis8c3BlY190eXBlPgorICA8a2luZD4gY29tbW9uX3BhcmFtIDwva2luZD4KKyAgPG5hbWU+IHBvcHRCaXRzIDwvbmFtZT4KKyAgPGRhdGFfdHlwZT4gcG9wdEJpdHMgPC9kYXRhX3R5cGU+CisgIDx2YWx1ZT4KKyAgICBjcmVhdGVfcG9wdEJpdHMoKQorICA8L3ZhbHVlPgorICA8Z2xvYmFsX2NvZGU+CisgICAgcG9wdEJpdHMgY3JlYXRlX3BvcHRCaXRzKCkKKyAgICB7CisJcG9wdEJpdHMgYSA9IE5VTEw7CisJKHZvaWQpIHBvcHRTYXZlQml0cygmYSwgMCwgImZvbyIpOworCSh2b2lkKSBwb3B0U2F2ZUJpdHMoJmEsIDAsICJiYXIiKTsKKwkodm9pZCkgcG9wdFNhdmVCaXRzKCZhLCAwLCAiYmF6Iik7CisJcmV0dXJuIGE7CisgICAgfQorICA8L2dsb2JhbF9jb2RlPgorPC9zcGVjX3R5cGU+CisKKzxzcGVjX3R5cGU+CisgIDxraW5kPiBub3JtYWwgPC9raW5kPgorICA8ZGF0YV90eXBlPiBjb25zdCBjaGFyICoqKiA8L2RhdGFfdHlwZT4KKyAgPHZhbHVlPiAmYXYgPC92YWx1ZT4KKyAgPGdsb2JhbF9jb2RlPgorICAgICNpbmNsdWRlIDxtYWxsb2MuaD4KKyAgPC9nbG9iYWxfY29kZT4KKyAgPGluaXRfY29kZT4KKyAgICBjb25zdCBjaGFyICoqIGF2ID0gTlVMTDsKKyAgPC9pbml0X2NvZGU+CisgIDxmaW5hbF9jb2RlPgorICAgIGZyZWUoYXZbMF0pOworICAgIGZyZWUoYXYpOworICA8L2ZpbmFsX2NvZGU+CisgIDxhc3NvY2lhdGluZz4KKyAgICA8aW50ZXJmYWNlcz4gcG9wdFNhdmVTdHJpbmcgPC9pbnRlcmZhY2VzPgorICAgIDxsaW5rcz4gcGFyYW0xIDwvbGlua3M+CisgIDwvYXNzb2NpYXRpbmc+Cis8L3NwZWNfdHlwZT4KKworPC9jb2xsZWN0aW9uPgorCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvYXV0b2dlbi5zaCBiL3BvcHQtMS4xNi9hdXRvZ2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzZDc4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvYXV0b2dlbi5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworc3JjZGlyPSJgZGlybmFtZSAkMGAiCit0ZXN0IC16ICIkc3JjZGlyIiAmJiBzcmNkaXI9LgorCitUSEVESVI9ImBwd2RgIgorCitsaWJ0b29saXplPWB3aGljaCBnbGlidG9vbGl6ZSAyPi9kZXYvbnVsbGAKK2Nhc2UgJGxpYnRvb2xpemUgaW4KKy8qKSA7OworKikgIGxpYnRvb2xpemU9YHdoaWNoIGxpYnRvb2xpemUgMj4vZGV2L251bGxgCisgICAgY2FzZSAkbGlidG9vbGl6ZSBpbgorICAgIC8qKSA7OworICAgICopICBsaWJ0b29saXplPWxpYnRvb2xpemUKKyAgICBlc2FjCitlc2FjCisKK2NkICIkc3JjZGlyIgorJGxpYnRvb2xpemUgLS1jb3B5IC0tZm9yY2UKK2dldHRleHRpemUgLS1jb3B5IC0tZm9yY2UgLS1uby1jaGFuZ2Vsb2cKK3BlcmwgLXAgLWl+IC1lICdzLyhwb1wvTWFrZWZpbGVcLmluKVxzK3BvXC9NYWtlZmlsZVwuaW4vJDEvJyBjb25maWd1cmUuYWMKK3BlcmwgLXAgLWl+IC1lICdzLyhTVUJESVJTXHMrPVxzK3BvKVxzK3BvLyQxLycgTWFrZWZpbGUuYW0KK2FjbG9jYWwgLUkgbTQKK2F1dG9oZWFkZXIKK2F1dG9tYWtlIC1XYWxsIC1Xbm8tb3ZlcnJpZGUgLWEgLWMKK2F1dG9jb25mCisKK2lmIFsgIiQxIiA9ICItLW5vY29uZmlndXJlIiBdOyB0aGVuIAorICAgIGV4aXQgMDsKK2ZpCisKK2NkICIkVEhFRElSIgorCitpZiBbIFgiJEAiID0gWCAgLWEgIlhgdW5hbWUgLXNgIiA9ICJYTGludXgiIF07IHRoZW4KKyAgICAkc3JjZGlyL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyIC0tbGliZGlyPS9saWIgIiRAIgorZWxzZQorICAgICRzcmNkaXIvY29uZmlndXJlICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvY29uZmlnLmd1ZXNzIGIvcG9wdC0xLjE2L2NvbmZpZy5ndWVzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzg0YzY4Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MDEgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDktMTEtMjAnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKKyMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKworY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICo6TmV0QlNEOio6KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwcGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJICAgICAgICBvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgorCSAgICBEZWJpYW4qKQorCQlyZWxlYXNlPSctZ251JworCQk7OworCSAgICAqKQorCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCSAgICAgICAgVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCWV4aXQgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorICAgICAgICBlY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybTpyaXNjb3M6KjoqfGFybTpSSVNDT1M6KjoqKQorCWVjaG8gYXJtLXVua25vd24tcmlzY29zCisJZXhpdCA7OworICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqIHwgU1I4MDAwOkhJLVVYL01QUDoqOiopCisJZWNobyBocHBhMS4xLWhpdGFjaGktaGl1eG1wcAorCWV4aXQgOzsKKyAgICBQeXJhbWlkKjpPU3gqOio6KiB8IE1JUyo6T1N4KjoqOiogfCBNSVMqOlNNUF9EQy1PU3gqOio6KikKKwkjIGFrZWVAd3BkaXMwMy53cGFmYi5hZi5taWwgKEVhcmxlIEYuIEFrZSkgY29udHJpYnV0ZWQgTUlTIGFuZCBOSUxFLgorCWlmIHRlc3QgImAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgIiA9IGF0dCA7IHRoZW4KKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtc3lzdjMKKwllbHNlCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAorCWZpCisJZXhpdCA7OworICAgIE5JTEUqOio6KjpkY29zeCkKKwllY2hvIHB5cmFtaWQtcHlyYW1pZC1zdnI0CisJZXhpdCA7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCWVjaG8gc3BhcmMtaWNsLW54NgorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDppc2lzOjQuMio6NyopCisJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCisJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgczM5MHg6U3VuT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNEg6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1oYWwtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBpODZwYzpBdXJvcmFVWDo1Lio6KiB8IGk4NnhlbjpBdXJvcmFVWDo1Lio6KikKKwllY2hvIGkzODYtcGMtYXVyb3JhdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaTg2eGVuOlN1bk9TOjUuKjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlTVU5fQVJDSD0iaTM4NiIKKwkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KKwkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCisJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgorCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fYW1kNjQnOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCVNVTl9BUkNIPSJ4ODZfNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7U1VOX0FSQ0h9LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjYqOiopCisJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKKwkjIFN1bk9TNi4gIEhhcmQgdG8gZ3Vlc3MgZXhhY3RseSB3aGF0IFN1bk9TNiB3aWxsIGJlIGxpa2UsIGJ1dAorCSMgaXQncyBsaWtlbHkgdG8gYmUgbW9yZSBsaWtlIFNvbGFyaXMgdGhhbiBTdW5PUzQuCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczNgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6KjoqKQorCWNhc2UgImAvdXNyL2Jpbi9hcmNoIC1rYCIgaW4KKwkgICAgU2VyaWVzKnxTNCopCisJCVVOQU1FX1JFTEVBU0U9YHVuYW1lIC12YAorCQk7OworCWVzYWMKKwkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCisJZWNobyBzcGFyYy1zdW4tc3Vub3NgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vJ2AKKwlleGl0IDs7CisgICAgc3VuMyo6U3VuT1M6KjoqKQorCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHN1bio6Kjo0LjJCU0Q6KikKKwlVTkFNRV9SRUxFQVNFPWAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsYAorCXRlc3QgIngke1VOQU1FX1JFTEVBU0V9IiA9ICJ4IiAmJiBVTkFNRV9SRUxFQVNFPTMKKwljYXNlICJgL2Jpbi9hcmNoYCIgaW4KKwkgICAgc3VuMykKKwkJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwkgICAgc3VuNCkKKwkJZWNobyBzcGFyYy1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJZXNhYworCWV4aXQgOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJZWNobyBzcGFyYy1hdXNwZXgtc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUklTQyo6TWFjaDoqOiopCisJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMworCWV4aXQgOzsKKyAgICBSSVNDKjpVTFRSSVg6KjoqKQorCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBWQVgqOlVMVFJJWCo6KjoqKQorCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQorCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworI2lmZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KKwlpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworI2Vsc2UKKwlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgeworI2VuZGlmCisJI2lmIGRlZmluZWQgKGhvc3RfbWlwcykgJiYgZGVmaW5lZCAoTUlQU0VCKQorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzeXN2XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1ZSNCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N2cjRcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9CU0Q0MykgfHwgZGVmaW5lZChTWVNUWVBFX0JTRCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc2JzZFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNlbmRpZgorCSAgZXhpdCAoLTEpOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmCisJICBkdW1teWFyZz1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCAmJgorCSAgU1lTVEVNX05BTUU9YCRkdW1teSAkZHVtbXlhcmdgICYmCisJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gbWlwcy1taXBzLXJpc2NvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTW90b3JvbGE6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYToqOjQuMzpQTDgtKikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOlBvd2VyX1VOSVg6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4CisJZXhpdCA7OworICAgIG04OGs6Q1gvVVg6Nyo6KikKKwllY2hvIG04OGstaGFycmlzLWN4dXg3CisJZXhpdCA7OworICAgIG04OGs6Kjo0KjpSNCopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3Y0CisJZXhpdCA7OworICAgIG04OGs6KjozKjpSMyopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIEFWaWlPTjpkZ3V4Oio6KikKKyAgICAgICAgIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKyAgICAgICAgVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgCWV4aXQgOzsKKyAgICBNODgqOkRvbHBoaW5PUzoqOiopCSMgRG9scGhpbk9TIChTVlIzKQorCWVjaG8gbTg4ay1kb2xwaGluLXN5c3YzCisJZXhpdCA7OworICAgIE04OCo6KjpSMyo6KikKKwkjIERlbHRhIDg4ayBzeXN0ZW0gcnVubmluZyBTVlIzCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIFhEODgqOio6KjoqKSAjIFRla3Ryb25peCBYRDg4IHN5c3RlbSBydW5uaW5nIFVUZWtWIChTVlIzKQorCWVjaG8gbTg4ay10ZWt0cm9uaXgtc3lzdjMKKwlleGl0IDs7CisgICAgVGVrNDNbMC05XVswLTldOlVUZWs6KjoqKSAjIFRla3Ryb25peCA0MzAwIHN5c3RlbSBydW5uaW5nIFVUZWsgKEJTRCkKKwllY2hvIG02OGstdGVrdHJvbml4LWJzZAorCWV4aXQgOzsKKyAgICAqOklSSVgqOio6KikKKwllY2hvIG1pcHMtc2dpLWlyaXhgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vZydgCisJZXhpdCA7OworICAgID8/Pz8/Pz8/OkFJWD86WzEyXS4xOjIpICAgIyBBSVggMi4yLjEgb3IgQUlYIDIuMS4xIGlzIFJUL1BDIEFJWC4KKwllY2hvIHJvbXAtaWJtLWFpeCAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAorCWV4aXQgOzsgICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKKyAgICBpKjg2OkFJWDoqOiopCisJZWNobyBpMzg2LWlibS1haXgKKwlleGl0IDs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoyOjMpCisJaWYgZ3JlcCBib3MzMjUgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CisKKwkJbWFpbigpCisJCQl7CisJCQlpZiAoIV9fcG93ZXJfcGMoKSkKKwkJCQlleGl0KDEpOworCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4My4yLjUiKTsKKwkJCWV4aXQoMCk7CisJCQl9CitFT0YKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAKKwkJdGhlbgorCQkJZWNobyAiJFNZU1RFTV9OQU1FIgorCQllbHNlCisJCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJZmkKKwllbGlmIGdyZXAgYm9zMzI0IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjQKKwllbHNlCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKKwlmaQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOls0NTZdKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorICAgICAgICAgICAgICAgICAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorICAgICAgICAgICAgICAgICAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorICAgICAgICAgICAgICAgICAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMyKSBIUF9BUkNIPSJocHBhMi4wbiIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworCQkJICAnJykgSFBfQVJDSD0iaHBwYTIuMCIgOzsgICAjIEhQLVVYIDEwLjIwCisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXiAgICAgICAgICAgICAgLy8nIDw8IEVPRiA+JGR1bW15LmMKKworICAgICAgICAgICAgICAjZGVmaW5lIF9IUFVYX1NPVVJDRQorICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKworICAgICAgICAgICAgICBpbnQgbWFpbiAoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNwdSkKKyAgICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMl8wOgorICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgIAkgICAgc3dpdGNoIChiaXRzKQorICAgICAgICAgICAgICAJCXsKKyAgICAgICAgICAgICAgCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworICAgICAgICAgICAgICAJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJCX0gYnJlYWs7CisgICAgICAgICAgICAgICNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisgICAgICAgICAgICAgIAkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgICAgICAgfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisgICAgICAgIGV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzQqOiopCisJZWNobyBjNC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKyAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKyAgICAgICAgZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKyAgICAgICAgZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorICAgICAgICBlY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHBjOTgpCisJCWVjaG8gaTM4Ni11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOndpbmRvd3MzMio6KikKKyAgICAJIyB1bmFtZSAtbSBpbmNsdWRlcyAiLXBjIiBvbiB0aGlzIHN5c3RlbS4KKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorICAgIAljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgeDg2KQorCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIElBNjQpCisJCWVjaG8gaWE2NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwllc2FjIDs7CisgICAgWzM0NV04NjpXaW5kb3dzXzk1OiogfCBbMzQ1XTg2OldpbmRvd3NfOTg6KiB8IFszNDVdODY6V2luZG93c19OVDoqKQorCWVjaG8gaSR7VU5BTUVfTUFDSElORX0tcGMtbWtzCisJZXhpdCA7OworICAgIDg2NjQ6V2luZG93c19OVDoqKQorCWVjaG8geDg2XzY0LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi1nbnVgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLWdudQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKyAgICAgICAgZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisJdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmkKKwlmaQorCWV4aXQgOzsKKyAgICBhdnIzMio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzOkxpbnV4Oio6KikKKwllY2hvIGNyaXMtYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3Jpc3YzMjpMaW51eDoqOiopCisJZWNobyBjcmlzdjMyLWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGZydjpMaW51eDoqOiopCisgICAgCWVjaG8gZnJ2LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCUxJQkM9Z251CisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQydgCisJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCTs7CisgICAgb3IzMjpMaW51eDoqOiopCisJZWNobyBvcjMyLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorCSMgTG9vayBmb3IgQ1BVIGxldmVsCisJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LWdudSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKwllc2FjCisJZXhpdCA7OworICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNoKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKyAgICAgICAgIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorICAgICAgICAjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisgICAgICAgICMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisgICAgICAgICMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisgICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgorCWZpCisJZXhpdCA7OworICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgorICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAorICAgICAgICBleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKyAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKSAjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorICAgICAgICAgICAgICAgICAgICAgICMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KKyAgICAgICAgZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorICAgICAgICBleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCSAgICAgICAgZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWVsc2UKKwkgICAgICAgIGVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OworCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKyAgICAgICAgZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKyAgICAJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7CisJICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OworCWVzYWMgOzsKKyAgICAqOlhFTklYOio6U3lzVikKKwllY2hvIGkzODYtcGMteGVuaXgKKwlleGl0IDs7CisgICAgaSo4Njpza3lvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfWAgfCBzZWQgLWUgJ3MvIC4qJC8vJworCWV4aXQgOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisJZXhpdCA7OworICAgIGkqODY6QVJPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWFyb3MKKwlleGl0IDs7Citlc2FjCisKKyNlY2hvICcoTm8gdW5hbWUgY29tbWFuZCBvciB1bmFtZSBvdXRwdXQgbm90IHJlY29nbml6ZWQuKScgMT4mMgorI2VjaG8gIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgMT4mMgorCitldmFsICRzZXRfY2NfZm9yX2J1aWxkCitjYXQgPiRkdW1teS5jIDw8RU9GCisjaWZkZWYgX1NFUVVFTlRfCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCittYWluICgpCit7CisjaWYgZGVmaW5lZCAoc29ueSkKKyNpZiBkZWZpbmVkIChNSVBTRUIpCisgIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCisgICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCisgIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKKyNpZmRlZiBORVdTT1M0CisgICAgICAgICAgIjQiCisjZWxzZQorCSAgIiIKKyNlbmRpZgorICAgICAgICAgKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19hcm0pICYmIGRlZmluZWQgKF9fYWNvcm4pICYmIGRlZmluZWQgKF9fdW5peCkKKyAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCisgIHByaW50ZiAoIm02OGstaHAtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5lWFQpCisjaWYgIWRlZmluZWQgKF9fQVJDSElURUNUVVJFX18pCisjZGVmaW5lIF9fQVJDSElURUNUVVJFX18gIm02OGsiCisjZW5kaWYKKyAgaW50IHZlcnNpb247CisgIHZlcnNpb249YChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsYDsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgICAgc3RydWN0IHV0c25hbWUgdW47CisKKyAgICB1bmFtZSgmdW4pOworCisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYyIiwgMikgPT0gMCkgeworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgyXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOworCisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyMgaWYgIWRlZmluZWQgKHVsdHJpeCkKKyMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgaWYgZGVmaW5lZCAoQlNEKQorIyAgIGlmIEJTRCA9PSA0MworICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyMgICBlbHNlCisjICAgIGlmIEJTRCA9PSAxOTkwMDYKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zcmVub1xuIik7IGV4aXQgKDApOworIyAgICBlbHNlCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgIGVuZGlmCisjIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChhbGxpYW50KSAmJiBkZWZpbmVkIChpODYwKQorICBwcmludGYgKCJpODYwLWFsbGlhbnQtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworICBleGl0ICgxKTsKK30KK0VPRgorCiskQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCisjIEFwb2xsb3MgcHV0IHRoZSBzeXN0ZW0gdHlwZSBpbiB0aGUgZW52aXJvbm1lbnQuCisKK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQorCisjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCisKK2lmIFsgLXggL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyBdCit0aGVuCisgICAgY2FzZSBgZ2V0c3lzaW5mbyAtZiBjcHVfdHlwZWAgaW4KKyAgICBjMSopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMyKikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIGMzNCopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMzgqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzQqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBlc2FjCitmaQorCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKK2FuZAorICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L2NvbmZpZy5oLmluIGIvcG9wdC0xLjE2L2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzA3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvY29uZmlnLmguaW4KQEAgLTAsMCArMSwxNDQgQEAKKy8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlCisgICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCisjdW5kZWYgRU5BQkxFX05MUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQorICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCisgICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLworI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQorCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgorICAgKi8KKyN1bmRlZiBIQVZFX0RDR0VUVEVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRExGQ05fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZsb2F0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRkxPQVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZubWF0Y2guaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9GTk1BVENIX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRldWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEVVSUQKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCisjdW5kZWYgSEFWRV9HRVRURVhUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFVJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdsb2IuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HTE9CX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy4gKi8KKyN1bmRlZiBIQVZFX0lDT05WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGFuZ2luZm8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MQU5HSU5GT19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliaW50bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJQklOVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1jaGVjay5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01DSEVDS19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtdHJhY2UnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTVRSQUNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkVHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzcmFuZG9tJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NSQU5ET00KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RwY3B5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUENQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZhc3ByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9WQVNQUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX3NlY3VyZV9nZXRlbnYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfX19TRUNVUkVfR0VURU5WCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI3VuZGVmIExUX09CSkRJUgorCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBQQUNLQUdFCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKworLyogRnVsbCBwYXRoIHRvIHBvcHQgdG9wX3NyY2Rpci4gKi8KKyN1bmRlZiBQT1BUX1NPVVJDRV9QQVRICisKKy8qIEZ1bGwgcGF0aCB0byBkZWZhdWx0IFBPUFQgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgKi8KKyN1bmRlZiBQT1BUX1NZU0NPTkZESVIKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KKyN1bmRlZiBQUk9UT1RZUEVTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyN1bmRlZiBfTEFSR0VfRklMRVMKKworLyogRGVmaW5lIGxpa2UgUFJPVE9UWVBFUzsgdGhpcyBjYW4gYmUgdXNlZCBieSBzeXN0ZW0gaGVhZGVycy4gKi8KKyN1bmRlZiBfX1BST1RPVFlQRVMKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9jb25maWcucnBhdGggYi9wb3B0LTEuMTYvY29uZmlnLnJwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1NDdjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvY29uZmlnLnJwYXRoCkBAIC0wLDAgKzEsNjY2IEBACisjISAvYmluL3NoCisjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisjCisjICAgQ29weXJpZ2h0IDE5OTYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisjICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyAgIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyAgIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisjIHNob3VsZCBiZSBzZXQgYnkgdGhlIGNhbGxlci4KKyMKKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorCisjIEtub3duIGxpbWl0YXRpb25zOgorIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKyMgICB0aGFuIDI1NiBieXRlcywgb3RoZXJ3aXNlIHRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBkdW1wIGNvcmUuIFRoZSBvbmx5CisjICAga25vd24gd29ya2Fyb3VuZCBpcyB0byBjaG9vc2Ugc2hvcnRlciBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBidWlsZAorIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK3NocmV4dD0uc28KKworaG9zdD0iJDEiCitob3N0X2NwdT1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAoraG9zdF9vcz1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DQ19CQVNFTkFNRS4KKworZm9yIGNjX3RlbXAgaW4gJENDIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDLgorCit3bD0KK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHdsPSctV2wsJworZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGRhcndpbiopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICB4bGMqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCisgICAgICA7OworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIDs7CisgICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGljYyogfCBlY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIHBnY2MgfCBwZ2Y3NyB8IHBnZjkwKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgY29tbykKKyAgICAgICAgICB3bD0nLWxvcHQ9JworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICAgICAgICAgICAqU3VuXCBDKikKKyAgICAgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICByZG9zKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICA7OworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdW5pY29zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgorCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KK2hhcmRjb2RlX2RpcmVjdD1ubworaGFyZGNvZGVfbWludXNfTD1ubworCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7Citlc2FjCisKK2xkX3NobGlicz15ZXMKK2lmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKKyAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisgICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAorICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCisgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2Fubm90IHVzZQorICAgICAgIyB0aGVtLgorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgOzsKKyAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBmaQorZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKikKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworICAgIGFpeDQqIHwgYWl4NSopCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICBlbHNlCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0CisgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBmaQorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0CisgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGJzZGlbNDVdKikKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKyAgICAgIGxpYmV4dD1saWIKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICB4bGMqKQorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBkZ3V4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgZnJlZWJzZDEqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGZyZWVic2QyLjIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBmcmVlYnNkMiopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGhwdXg5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBuZXdzb3M2KQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgb3NmMyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3NmNCogfCBvc2Y1KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgICAgICBzbmkpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKyAgICAgICAgICA7OworICAgICAgICBzaWVtZW5zKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgIDs7CisgICAgICAgIG1vdG9yb2xhKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIuCisjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKKyMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCisjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCitsaWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGFpeDMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBhaXg0KiB8IGFpeDUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGFtaWdhb3MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBiZW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBic2RpWzQ1XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICBzaHJleHQ9LmR5bGliCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZGd1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZnJlZWJzZDEqKQorICAgIDs7CisgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGZyZWVic2RbMTIzXSopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKKyAgICAgICopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OworICAgIGVzYWMKKyAgICA7OworICBnbnUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBpYTY0KikKKyAgICAgICAgc2hyZXh0PS5zbworICAgICAgICA7OworICAgICAgaHBwYSo2NCopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaW50ZXJpeFszLTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgY2FzZSAkTEQgaW4KKyAgICAgICAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIDs7CisgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisgICAgICAgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBrbmV0YnNkKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV0YnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBuZXdzb3M2KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG50by1xbngqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBvczIqKQorICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHJkb3MqKQorICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN1bm9zNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIHN5c3Y0IHwgc3lzdjQuMyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjQqTVAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHV0czQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7Citlc2FjCisKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCitlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitzaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAorZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisKK0xDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0iJGVzY2FwZWRfd2wiCisKKyMgU3RhdGljIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCitzaGxpYmV4dD0iJHNobGliZXh0IgorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSIkZXNjYXBlZF9saWJuYW1lX3NwZWMiCisKKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSIkZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWMiCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0iJGhhcmRjb2RlX21pbnVzX0wiCisKK0VPRgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L2NvbmZpZy5zdWIgYi9wb3B0LTEuMTYvY29uZmlnLnN1YgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTU1YTUwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNzA1IEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDktMTEtMjAnCisKKyMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgorIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCisjIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIEdOVSBDaGFuZ2VMb2cgZW50cnkuCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKKyAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKyAgICAgICAgLWJsdWVnZW5lKikKKwkgICAgICAgIG9zPS1jbmsKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisgCS1jaG9ydXNyZGIpCisgCQlvcz0tY2hvcnVzcmRiCisJCWJhc2ljX21hY2hpbmU9JDEKKyAJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAorCXwgcHlyYW1pZCBcCisJfCByeCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IHwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB1Ymljb20zMiBcCisJfCB2ODUwIHwgdjg1MGUgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGsgfCB6ODApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQorCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCisJCTs7CisJbXMxKQorCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KKwkJOzsKKworCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCisJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisJIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgorCWkqODYgfCB4ODZfNjQpCisJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCisJICA7OworCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCisJKi0qLSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgorCTU4MC0qIFwKKwl8IGEyOWstKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIHwgYzU0eC0qIHwgYzU1eC0qIHwgYzZ4LSogXAorCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogfCBtaWNyb2JsYXplLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdHJvbmdhcm0tKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiB8IHRodW1iLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogfCB0aWxlLSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCisJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKKwkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CisJCTs7CisJM2IqKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworICAgIAlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKyAgICAgICAgY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTYpCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworIyBJJ20gbm90IHN1cmUgd2hhdCAiU3lzdjMyIiBtZWFucy4gIFNob3VsZCB0aGlzIGJlIHN5c3YzLjI/CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbTY4a25vbW11KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwltNjhrbm9tbXUtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCW04OGstb21yb24qKQorCQliYXNpY19tYWNoaW5lPW04OGstb21yb24KKwkJOzsKKwltYWdudW0gfCBtMzIzMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLW1pcHMKKwkJb3M9LXN5c3YKKwkJOzsKKwltZXJsaW4pCisJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlaworCQlvcz0tc3lzdgorCQk7OworICAgICAgICBtaWNyb2JsYXplKQorCQliYXNpY19tYWNoaW5lPW1pY3JvYmxhemUteGlsaW54CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluZ3czMmNlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1taW5ndzMyY2UKKwkJOzsKKwltaW5pZnJhbWUpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKKwkJOzsKKwkqbWludCB8IC1taW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7CisJbWlwczMqLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgCisJCTs7CisJbWlwczMqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCisJCTs7CisJbW9uaXRvcikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCW1vcnBob3MpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCW9zPS1tb3JwaG9zCisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCTs7CisJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWM1NHggfCBjNTR4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eCB8IGM1NXgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNnggfCBjNngqKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWxlKikKKwkJYmFzaWNfbWFjaGluZT10aWxlLXVua25vd24KKwkJb3M9LWxpbnV4LWdudQorCQk7OworCXR4MzkpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgorCQk7OworCXR4MzllbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KKwkJOzsKKwl0b2FkMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC14a2wKKwkJb3M9LXRvcHMyMAorCQk7OworCXRvd2VyIHwgdG93ZXItMzIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKKwkJOzsKKwl0cGYpCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCW9zPS10cGYKKwkJOzsKKwl1ZGkyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXVsdHJhMykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQorCQlvcz0tc3ltMQorCQk7OworCXY4MTAgfCBuZWN2ODEwKQorCQliYXNpY19tYWNoaW5lPXY4MTAtbmVjCisJCW9zPS1ub25lCisJCTs7CisJdmF4dikKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS1zeXN2CisJCTs7CisJdm1zKQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXZtcworCQk7OworCXZwcCp8dnh8dngtKikKKwkJYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKKwkJOzsKKwl2eHdvcmtzOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczY4KQorCQliYXNpY19tYWNoaW5lPW02OGstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXc2NSopCisJCWJhc2ljX21hY2hpbmU9dzY1LXdkYworCQlvcz0tbm9uZQorCQk7OworCXc4OWstKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJb3M9LXByb2VsZgorCQk7OworCXhib3gpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCXhwcyB8IHhwczEwMCkKKwkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCisJCTs7CisJeW1wKQorCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl6OGstKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwlub25lKQorCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQorCQlvcz0tbm9uZQorCQk7OworCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBlcy4gIEl0IGlzIGluCisjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCisJdzg5aykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJOzsKKwlvcDUwbikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCW9wNjBjKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJcm9tcCkKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCW1taXgpCisJCWJhc2ljX21hY2hpbmU9bW1peC1rbnV0aAorCQk7OworCXJzNjAwMCkKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtaWJtCisJCTs7CisJdmF4KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJOzsKKwlwZHAxMCkKKwkJIyB0aGVyZSBhcmUgbWFueSBjbG9uZXMsIHNvIERFQyBpcyBub3QgYSBzYWZlIGJldAorCQliYXNpY19tYWNoaW5lPXBkcDEwLXVua25vd24KKwkJOzsKKwlwZHAxMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMS1kZWMKKwkJOzsKKwl3ZTMyaykKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJCWJhc2ljX21hY2hpbmU9c2gtdW5rbm93bgorCQk7OworCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCWN5ZHJhKQorCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKKwkJOzsKKwlvcmlvbikKKwkJYmFzaWNfbWFjaGluZT1vcmlvbi1oaWdobGV2ZWwKKwkJOzsKKwlvcmlvbjEwNSkKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWhpZ2hsZXZlbAorCQk7OworCW1hYyB8IG1wdyB8IG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQk7OworCXBtYWMgfCBwbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWFwcGxlCisJCTs7CisJKi11bmtub3duKQorCQkjIE1ha2Ugc3VyZSB0byBtYXRjaCBhbiBhbHJlYWR5LWNhbm9uaWNhbGl6ZWQgbWFjaGluZSBuYW1lLgorCQk7OworCSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi1kaWdpdGFsKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9kaWdpdGFsLiovZGVjLydgCisJCTs7CisJKi1jb21tb2RvcmUqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2NvbW1vZG9yZS4qL2NibS8nYAorCQk7OworCSopCisJCTs7Citlc2FjCisKKyMgRGVjb2RlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBhbGlhc2VzIGZvciBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorCitpZiBbIHgiJG9zIiAhPSB4IiIgXQordGhlbgorY2FzZSAkb3MgaW4KKyAgICAgICAgIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMKKyAgICAgICAgIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKyAgICAgICAgLWF1cm9yYXV4KQorCSAgICAgICAgb3M9LWF1cm9yYXV4CisJCTs7CisJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKKwkJOzsKKwktc29sYXJpcykKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJLXN2cjQqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdW5peHdhcmUqKQorCQlvcz0tc3lzdjQuMnV3CisJCTs7CisJLWdudS9saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8bGludXgtZ251fCdgCisJCTs7CisJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAorCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCisJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCisJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCQk7OworCS1xbngqKQorCQljYXNlICRiYXNpY19tYWNoaW5lIGluCisJCSAgICB4ODYtKiB8IGkqODYtKikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LW50byRvcworCQkJOzsKKwkJZXNhYworCQk7OworCS1udG8tcW54KikKKwkJOzsKKwktbnRvKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCisJCTs7CisJLXNpbSB8IC1lczE4MDAqIHwgLWhtcyogfCAteHJheSB8IC1vczY4ayogfCAtbm9uZSogfCAtdjg4ciogXAorCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogfCAtaGFpa3UqIFwKKwkgICAgICB8IC1tYWNvcyogfCAtbXB3KiB8IC1tYWdpYyogfCAtbW1peHdhcmUqIHwgLW1vbjk2MCogfCAtbG5ld3MqKQorCQk7OworCS1tYWMqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCisJCTs7CisJLWxpbnV4LWRpZXRsaWJjKQorCQlvcz0tbGludXgtZGlldGxpYmMKKwkJOzsKKwktbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bGludXh8bGludXgtZ251fCdgCisJCTs7CisJLXN1bm9zNSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczV8c29sYXJpczJ8J2AKKwkJOzsKKwktc3Vub3M2KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNnxzb2xhcmlzM3wnYAorCQk7OworCS1vcGVuZWQqKQorCQlvcz0tb3BlbmVkaXRpb24KKwkJOzsKKyAgICAgICAgLW9zNDAwKikKKwkJb3M9LW9zNDAwCisJCTs7CisJLXdpbmNlKikKKwkJb3M9LXdpbmNlCisJCTs7CisJLW9zZnJvc2UqKQorCQlvcz0tb3Nmcm9zZQorCQk7OworCS1vc2YqKQorCQlvcz0tb3NmCisJCTs7CisJLXV0ZWsqKQorCQlvcz0tYnNkCisJCTs7CisJLWR5bml4KikKKwkJb3M9LWJzZAorCQk7OworCS1hY2lzKikKKwkJb3M9LWFvcworCQk7OworCS1hdGhlb3MqKQorCQlvcz0tYXRoZW9zCisJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CisJLTM4NmJzZCkKKwkJb3M9LWJzZAorCQk7OworCS1jdGl4KiB8IC11dHMqKQorCQlvcz0tc3lzdgorCQk7OworCS1ub3ZhKikKKwkJb3M9LXJ0bWstbm92YQorCQk7OworCS1uczIgKQorCQlvcz0tbmV4dHN0ZXAyCisJCTs7CisJLW5zayopCisJCW9zPS1uc2sKKwkJOzsKKwkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCisJLXNpbml4NS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c2luaXh8c3lzdnwnYAorCQk7OworCS1zaW5peCopCisJCW9zPS1zeXN2NAorCQk7OworICAgICAgICAtdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS1rYW9zKikKKwkJb3M9LWthb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisgICAgICAgIHNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKyAgICAgICAgc3B1LSopCisJCW9zPS1lbGYKKwkJOzsKKwkqLWFjb3JuKQorCQlvcz0tcmlzY2l4MS4yCisJCTs7CisJYXJtKi1yZWJlbCkKKwkJb3M9LWxpbnV4CisJCTs7CisJYXJtKi1zZW1pKQorCQlvcz0tYW91dAorCQk7OworICAgICAgICBjNHgtKiB8IHRpYzR4LSopCisgICAgICAgIAlvcz0tY29mZgorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0qKQorCQlvcz0tdG9wczIwCisJCTs7CisJcGRwMTEtKikKKwkJb3M9LW5vbmUKKwkJOzsKKwkqLWRlYyB8IHZheC0qKQorCQlvcz0tdWx0cml4NC4yCisJCTs7CisJbTY4Ki1hcG9sbG8pCisJCW9zPS1kb21haW4KKwkJOzsKKwlpMzg2LXN1bikKKwkJb3M9LXN1bm9zNC4wLjIKKwkJOzsKKwltNjgwMDAtc3VuKQorCQlvcz0tc3Vub3MzCisJCSMgVGhpcyBhbHNvIGV4aXN0cyBpbiB0aGUgY29uZmlndXJlIHByb2dyYW0sIGJ1dCB3YXMgbm90IHRoZQorCQkjIGRlZmF1bHQuCisJCSMgb3M9LXN1bm9zNAorCQk7OworCW02OCotY2lzY28pCisJCW9zPS1hb3V0CisJCTs7CisgICAgICAgIG1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisgICAgCSota251dGgpCisJCW9zPS1tbWl4d2FyZQorCQk7OworCSotd2VjKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi13aW5ib25kKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1va2kpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLWhwKQorCQlvcz0taHB1eAorCQk7OworCSotaGl0YWNoaSkKKwkJb3M9LWhpdXgKKwkJOzsKKwlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1jYm0pCisJCW9zPS1hbWlnYW9zCisJCTs7CisJKi1kZykKKwkJb3M9LWRndXgKKwkJOzsKKwkqLWRvbHBoaW4pCisJCW9zPS1zeXN2MworCQk7OworCW02OGstY2N1cikKKwkJb3M9LXJ0dQorCQk7OworCW04OGstb21yb24qKQorCQlvcz0tbHVuYQorCQk7OworCSotbmV4dCApCisJCW9zPS1uZXh0c3RlcAorCQk7OworCSotc2VxdWVudCkKKwkJb3M9LXB0eAorCQk7OworCSotY3JkcykKKwkJb3M9LXVub3MKKwkJOzsKKwkqLW5zKQorCQlvcz0tZ2VuaXgKKwkJOzsKKwlpMzcwLSopCisJCW9zPS1tdnMKKwkJOzsKKwkqLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwkqLWdvdWxkKQorCQlvcz0tc3lzdgorCQk7OworCSotaGlnaGxldmVsKQorCQlvcz0tYnNkCisJCTs7CisJKi1lbmNvcmUpCisJCW9zPS1ic2QKKwkJOzsKKwkqLXNnaSkKKwkJb3M9LWlyaXgKKwkJOzsKKwkqLXNpZW1lbnMpCisJCW9zPS1zeXN2NAorCQk7OworCSotbWFzc2NvbXApCisJCW9zPS1ydHUKKwkJOzsKKwlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCisJCW9zPS11eHB2CisJCTs7CisJKi1yb202OGspCisJCW9zPS1jb2ZmCisJCTs7CisJKi0qYnVnKQorCQlvcz0tY29mZgorCQk7OworCSotYXBwbGUpCisJCW9zPS1tYWNvcworCQk7OworCSotYXRhcmkqKQorCQlvcz0tbWludAorCQk7OworCSopCisJCW9zPS1ub25lCisJCTs7Citlc2FjCitmaQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9zLCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQorIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNrIHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KK3ZlbmRvcj11bmtub3duCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi11bmtub3duKQorCQljYXNlICRvcyBpbgorCQkJLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCS1zdW5vcyopCisJCQkJdmVuZG9yPXN1bgorCQkJCTs7CisJCQktY25rKnwtYWl4KikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJLWhwdXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktbXBlaXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLXVub3MqKQorCQkJCXZlbmRvcj1jcmRzCisJCQkJOzsKKwkJCS1kZ3V4KikKKwkJCQl2ZW5kb3I9ZGcKKwkJCQk7OworCQkJLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQktZ2VuaXgqKQorCQkJCXZlbmRvcj1ucworCQkJCTs7CisJCQktbXZzKiB8IC1vcGVuZWQqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1wdHgqKQorCQkJCXZlbmRvcj1zZXF1ZW50CisJCQkJOzsKKwkJCS10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCS1hdXgqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktaG1zKikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktbXB3KiB8IC1tYWNvcyopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCQkJdmVuZG9yPWF0YXJpCisJCQkJOzsKKwkJCS12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAorCQk7OworZXNhYworCitlY2hvICRiYXNpY19tYWNoaW5lJG9zCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9jb25maWd1cmUgYi9wb3B0LTEuMTYvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmNDViZDcKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvY29uZmlndXJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9jb25maWd1cmUuYWMgYi9wb3B0LTEuMTYvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZjhiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsMTM1IEBACitBQ19QUkVSRVEoMi41NykKK0FDX0lOSVQocG9wdCwgMS4xNiwgcG9wdC1kZXZlbEBycG01Lm9yZykKK0FDX0NPTkZJR19TUkNESVIoW3BvcHQuaF0pCitBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorQUNfQ0FOT05JQ0FMX1RBUkdFVAorCitkbmwgTXVzdCBjb21lIGJlZm9yZSBBTV9JTklUX0FVVE9NQUtFLgorZG5sIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiAtV2FsbF0pCitBTV9NQUlOVEFJTkVSX01PREUKKworIyBMaWJyYXJ5IGNvZGUgbW9kaWZpZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVWSVNJT04rKworIyBJbnRlcmZhY2VzIGNoYW5nZWQvYWRkZWQvcmVtb3ZlZDogICBDVVJSRU5UKysgICAgICAgUkVWSVNJT049MAorIyBJbnRlcmZhY2VzIGFkZGVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUdFKysKKyMgSW50ZXJmYWNlcyByZW1vdmVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFHRT0wCitBQ19TVUJTVChMVF9DVVJSRU5ULCAwKQorQUNfU1VCU1QoTFRfUkVWSVNJT04sIDApCitBQ19TVUJTVChMVF9BR0UsIDgpCisKK0FMTF9MSU5HVUFTPSJjcyBkYSBkZSBlbyBlcyBmaSBmciBnYSBnbCBodSBpZCBpcyBpdCBqYSBrbyBsdiBuYiBubCBwbCBwdCBybyBydSBzayBzbCBzdiB0aCB0ciB1ayB2aSB3YSB6aF9UVyB6aF9DTiIKKworQUNfUFJPR19DQ19TVERDCitBQ19QUk9HX0NDCisKK0FDX1BST0dfSU5TVEFMTAorQUNfUFJPR19MSUJUT09MCisKK2RubCBpZiBDQyBpcyBnY2MsIHdlIGNhbiByZWJ1aWxkIHRoZSBkZXBlbmRlbmNpZXMgKHNpbmNlIHRoZSBkZXBlbmQgcnVsZQorZG5sIHJlcXVpcmVzIGdjYykuICBJZiBpdCdzIG5vdCwgZG9uJ3QgcmVidWlsZCBkZXBlbmRlbmNpZXMgLS0gdXNlIHdoYXQgd2FzCitkbmwgc2hpcHBlZCB3aXRoIFJQTS4KK2lmIHRlc3QgWCIkR0NDIiA9ICJYeWVzIjsgdGhlbgorICAgIENGTEFHUz0iJENGTEFHUyAtV2FsbCAtVyIKKyAgICBUQVJHRVQ9ImRlcGVuZCBhbGxwcm9ncyIKK2Vsc2UKKyAgICBUQVJHRVQ9ImV2ZXJ5dGhpbmciCisgICAgZG5sIGxldCB0aGUgTWFrZWZpbGUga25vdyB0aGF0IHdlJ3JlIGRvbmUgd2l0aCBgZGVwZW5kJywgc2luY2Ugd2UgZG9uJ3QKKyAgICBkbmwgaGF2ZSBnY2Mgd2UncmUgbm90IGdvaW5nIHRvIHJlYnVpbGQgb3VyIGRlcGVuZGVuY2llcyBhdCBhbGwuCisgICAgZWNobyA+LmRlcGVuZC1kb25lCitmaQorQUNfU1VCU1QoVEFSR0VUKQorCitDRkxBR1M9IiRDRkxBR1MgLURfR05VX1NPVVJDRSAtRF9SRUVOVFJBTlQiCisKK0FDX0dDQ19UUkFESVRJT05BTAorQUNfU1lTX0xBUkdFRklMRQorCitBQ19JU0NfUE9TSVgKK0FNX0NfUFJPVE9UWVBFUworCitBQ19DSEVDS19IRUFERVJTKGZsb2F0LmggZm5tYXRjaC5oIGdsb2IuaCBsYW5naW5mby5oIGxpYmludGwuaCBtY2hlY2suaCB1bmlzdGQuaCkKKworIyBGb3Igc29tZSBzeXN0ZW1zIHdlIGtub3cgdGhhdCB3ZSBoYXZlIGxkX3ZlcnNpb24gc2NyaXB0cy4KKyMgVXNlIGl0IHRoZW4gYXMgZGVmYXVsdC4KK2hhdmVfbGRfdmVyc2lvbl9zY3JpcHQ9bm8KK2Nhc2UgIiR7aG9zdH0iIGluCisgICAgKi0qLWxpbnV4KikKKyAgICAgICAgaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD15ZXMKKyAgICAgICAgOzsKKyAgICAqLSotZ251KikKKyAgICAgICAgaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD15ZXMKKyAgICAgICAgOzsKK2VzYWMKK0FDX0FSR19FTkFCTEUoW2xkLXZlcnNpb24tc2NyaXB0XSwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxkLXZlcnNpb24tc2NyaXB0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZS9kaXNhYmxlIHVzZSBvZiBsaW5rZXIgdmVyc2lvbiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCBpcyBzeXN0ZW0gZGVwZW5kZW50KV0pLAorICAgICAgICAgICAgICBbaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD0kZW5hYmxldmFsXSwKKyAgICAgICAgICAgICAgWyA6IF0gKQorQU1fQ09ORElUSU9OQUwoSEFWRV9MRF9WRVJTSU9OX1NDUklQVCwgdGVzdCAiJGhhdmVfbGRfdmVyc2lvbl9zY3JpcHQiID0gInllcyIpCisKK0FDX0FSR19FTkFCTEUoYnVpbGQtZ2NvdiwKKyAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYnVpbGQtZ2Nvdl0sIFtidWlsZCBQT1BUIGluc3RydW1lbnRlZCBmb3IgZ2Nvdl0pLCBbZG5sCisgICAgaWYgdGVzdCAiLiRlbmFibGV2YWwiID0gLnllczsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIuYCRDQyAtLXZlcnNpb24gMj4mMSB8IGdyZXAgJ0dDQydgIiAhPSAuOyB0aGVuCisgICAgICAgICAgICBkbmwgIyBHTlUgR0NDICh1c3VhbGx5ICJnY2MiKQorICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKyAgICAgICAgZmkKKyAgICBmaQorXSkKKworQUNfQ0hFQ0tfRlVOQyhzZXRyZXVpZCwgW10sIFsKKyAgICBBQ19DSEVDS19MSUIodWNiLCBzZXRyZXVpZCwgW2lmIGVjaG8gJExJQlMgfCBncmVwIC0tIC1sdWNiID4vZGV2L251bGwgO3RoZW4gOjsgZWxzZSBMSUJTPSIkTElCUyAtbGMgLWx1Y2IiIFVTRVVDQj15O2ZpXSkKK10pCitBQ19DSEVDS19GVU5DUyhnZXR1aWQgZ2V0ZXVpZCBpY29udiBtdHJhY2UgX19zZWN1cmVfZ2V0ZW52IHNldHJlZ2lkIHN0cGNweSBzdHJlcnJvciB2YXNwcmludGYgc3JhbmRvbSkKKworQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSkKK0FNX0lDT05WX0xJTksKKworcG9wdF9zeXNjb25mZGlyPSIke3N5c2NvbmZkaXJ9IgorZXZhbCAicG9wdF9zeXNjb25mZGlyPVwiJHtwb3B0X3N5c2NvbmZkaXJ9XCIiICMgZXhwYW5kIGNvbnRhaW5lZCAke3ByZWZpeH0KK0FDX0RFRklORV9VTlFVT1RFRChbUE9QVF9TWVNDT05GRElSXSwgWyIkcG9wdF9zeXNjb25mZGlyIl0sIFtGdWxsIHBhdGggdG8gZGVmYXVsdCBQT1BUIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5XSkKKworCisjIERlZmluZSBhIChob3BlKSBwb3J0YWJsZSBMaWJzIHBrZ2NvbmZpZyBkaXJlY3RpdmUgdGhhdCAKKyMgLSBEb24ndCBoYXJtIGlmIHRoZSBkZWZhdWx0IGxpYnJhcnkgc2VhcmNoIHBhdGggaW5jbHVkZSAke2xpYmRpcn0KKyMgICAoaHR0cHM6Ly9idWd6aWxsYS5ub3ZlbGwuY29tL3Nob3dfYnVnLmNnaT9pZD01Mjk5MjEpCisjIC0gRG9uJ3QgcmVxdWlyZSBhIG5vdCB1cHN0cmVhbSBwYXRjaCB0byBwa2djb25maWcKKyMgICAoaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTUpCitwb3B0X3BrZ2NvbmZpZ19saWJzPSctTCR7bGliZGlyfSAtbHBvcHQnCitjYXNlICIke2hvc3R9IiBpbgorICAgICotKi1saW51eCopCisJY2FzZSAiJHtsaWJkaXJ9IiBpbgorCSAgICAvdXNyL2xpYnwvdXNyL2xpYjY0fC9saWJ8L2xpYjY0KQorICAgICAgIAkJICAgcG9wdF9wa2djb25maWdfbGlicz0nLWxwb3B0JworCQk7OworICAgIAkJKikKKwkJcG9wdF9wa2djb25maWdfbGlicz0nLUwke2xpYmRpcn0gLWxwb3B0JworCTs7CisJZXNhYworICAgICAgOzsKKyAgICAqLSotZ251KikKKwljYXNlICIke2xpYmRpcn0iIGluCisJICAgIC91c3IvbGlifC91c3IvbGliNjR8L2xpYnwvbGliNjQpCisgICAgICAgCQkgICBwb3B0X3BrZ2NvbmZpZ19saWJzPSctbHBvcHQnCisJCTs7CisgICAgCQkqKQorCQlwb3B0X3BrZ2NvbmZpZ19saWJzPSctTCR7bGliZGlyfSAtbHBvcHQnCisJOzsKKwllc2FjCisgICAgICA7OworZXNhYworQUNfU1VCU1QoW1BPUFRfUEtHQ09ORklHX0xJQlNdLCIkcG9wdF9wa2djb25maWdfbGlicyIpCisKK1BPUFRfU09VUkNFX1BBVEg9ImBwd2RgIgorQUNfREVGSU5FX1VOUVVPVEVEKFBPUFRfU09VUkNFX1BBVEgsICIkUE9QVF9TT1VSQ0VfUEFUSCIsCisJW0Z1bGwgcGF0aCB0byBwb3B0IHRvcF9zcmNkaXIuXSkKK0FDX1NVQlNUKFBPUFRfU09VUkNFX1BBVEgpCisKK0FDX0NPTkZJR19TVUJESVJTKCkKK0FDX0NPTkZJR19GSUxFUyhbIHBvL01ha2VmaWxlLmluIG00L01ha2VmaWxlCisgICAgRG94eWZpbGUgTWFrZWZpbGUgcG9wdC5wYyBwb3B0LnNwZWMgdGVzdC1wb3B0cmMKKyAgICBhdXRvL01ha2VmaWxlIGF1dG8vZGVzYyBhdXRvL3R5cGVzCitdKQorQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvZGVwY29tcCBiL3BvcHQtMS4xNi9kZXBjb21wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOGVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvZGVwY29tcApAQCAtMCwwICsxLDYzMCBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxleGFuZHJlIE9saXZhIDxvbGl2YUBkY2MudW5pY2FtcC5icj4uCisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGRlcGNvbXAgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworUnVuIFBST0dSQU1TIEFSR1MgdG8gY29tcGlsZSBhIGZpbGUsIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzCithcyBzaWRlLWVmZmVjdHMuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlczoKKyAgZGVwbW9kZSAgICAgRGVwZW5kZW5jeSB0cmFja2luZyBtb2RlLgorICBzb3VyY2UgICAgICBTb3VyY2UgZmlsZSByZWFkIGJ5IGBQUk9HUkFNUyBBUkdTJy4KKyAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5IGBQUk9HUkFNUyBBUkdTJy4KKyAgREVQRElSICAgICAgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGRlcGVuZGVuY2llcy4KKyAgZGVwZmlsZSAgICAgRGVwZW5kZW5jeSBmaWxlIHRvIG91dHB1dC4KKyAgdG1wZGVwZmlsZSAgVGVtcG9yYXJ5IGZpbGUgdG8gdXNlIHdoZW4gb3V0cHV0aW5nIGRlcGVuZGVuY2llcy4KKyAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImRlcGNvbXAgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKK2lmIHRlc3QgLXogIiRkZXBtb2RlIiB8fCB0ZXN0IC16ICIkc291cmNlIiB8fCB0ZXN0IC16ICIkb2JqZWN0IjsgdGhlbgorICBlY2hvICJkZXBjb21wOiBWYXJpYWJsZXMgc291cmNlLCBvYmplY3QgYW5kIGRlcG1vZGUgbXVzdCBiZSBzZXQiIDE+JjIKKyAgZXhpdCAxCitmaQorCisjIERlcGVuZGVuY2llcyBmb3Igc3ViL2Jhci5vIG9yIHN1Yi9iYXIub2JqIGdvIGludG8gc3ViLy5kZXBzL2Jhci5Qby4KK2RlcGZpbGU9JHtkZXBmaWxlLWBlY2hvICIkb2JqZWN0IiB8CisgIHNlZCAnc3xbXlxcL10qJHwnJHtERVBESVItLmRlcHN9Jy8mfDtzfFwuXChbXi5dKlwpJHwuUFwxfDtzfFBvYmokfFBvfCdgfQordG1wZGVwZmlsZT0ke3RtcGRlcGZpbGUtYGVjaG8gIiRkZXBmaWxlIiB8IHNlZCAncy9cLlwoW14uXSpcKSQvLlRcMS8nYH0KKworcm0gLWYgIiR0bXBkZXBmaWxlIgorCisjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKKyMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCisjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCisjIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgoraWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KKyAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCisgIGdjY2ZsYWc9LU0KKyAgZGVwbW9kZT1nY2MKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgorICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgorICAgZGFzaG1mbGFnPS14TQorICAgZGVwbW9kZT1kYXNobXN0ZG91dAorZmkKKworY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgorICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3Zpc3VhbGNwcCBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKKyAgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICAgY3lncGF0aF91PSJzZWQgcyxcXFxcXFxcXCwvLGciCisgICBkZXBtb2RlPW1zdmlzdWFsY3BwCitmaQorCitjYXNlICIkZGVwbW9kZSIgaW4KK2djYzMpCisjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAorIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKKyMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KKyMjIFVuZm9ydHVuYXRlbHksIEZyZWVCU0QgYzg5IGFjY2VwdGFuY2Ugb2YgZmxhZ3MgZGVwZW5kcyB1cG9uCisjIyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9yZGVyOyBzbyBhZGQgdGhlIGZsYWdzIHdoZXJlIHRoZXkKKyMjIGFwcGVhciBpbiBkZXBlbmQyLmFtLiAgTm90ZSB0aGF0IHRoZSBzbG93ZG93biBpbmN1cnJlZCBoZXJlCisjIyBhZmZlY3RzIG9ubHkgY29uZmlndXJlOiBpbiBtYWtlZmlsZXMsICVGQVNUREVQJSBzaG9ydGN1dHMgdGhpcy4KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1jKSBzZXQgZm5vcmQgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIgIiRhcmciIDs7CisgICAgKikgIHNldCBmbm9yZCAiJEAiICIkYXJnIiA7OworICAgIGVzYWMKKyAgICBzaGlmdCAjIGZub3JkCisgICAgc2hpZnQgIyAkYXJnCisgIGRvbmUKKyAgIiRAIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCisjIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKKyMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCisjIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCisjIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQorIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKKyMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgorIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQorIyMgICB0aGFuIHJlbmFtaW5nKS4KKyAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCisgICAgZ2NjZmxhZz0tTUQsCisgIGZpCisgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisjIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCisgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAorICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisjIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQorIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCisjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZworIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbworIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8CisjIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKKyMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcworIyMgd2VsbC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcworICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKKyAgICB0ciAnCisnICcgJyA+PiAiJGRlcGZpbGUiCisgICAgZWNobyA+PiAiJGRlcGZpbGUiCisKKyAgICAjIFRoZSBzZWNvbmQgcGFzcyBnZW5lcmF0ZXMgYSBkdW1teSBlbnRyeSBmb3IgZWFjaCBoZWFkZXIgZmlsZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2FpeCkKKyAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcworICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQorICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCisgICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgorICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UudQorICAgICIkQCIgLVdjLC1NCisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLnUKKyAgICAiJEAiIC1NCisgIGZpCisgIHN0YXQ9JD8KKworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitpY2MpCisgICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgorICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKKyAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCisgICMgICAgZm9vLm86IHN1Yi9mb28uYworICAjICAgIGZvby5vOiBzdWIvZm9vLmgKKyAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6CisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAorICAjICAgIHN1Yi9mb28uYzoKKyAgIyAgICBzdWIvZm9vLmg6CisgICMgSUNDIDcuMSB3aWxsIG91dHB1dAorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCisgICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgLi4uIFwKKyAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCisgICMgICAgIC4uLgorCisgICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLAorICAjIG9yIGBmb28ubzogZGVwMS5oIGRlcDIuaCBcJywgb3IgYCBkZXAzLmggZGVwNC5oIFwnLgorICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAorICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwMikKKyAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0CisgICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgorICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKKyAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAorICAjIGhhcHBlbnMgdG8gYmUuCisgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KKyAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorICAgICIkQCIgLVdjLCtNYWtlZAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICIkQCIgK01ha2VkCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBBZGQgYGRlcGVuZGVudC5oOicgbGluZXMuCisgICAgc2VkIC1uZSAnMiwkeworCSAgICAgICBzL14gKi8vCisJICAgICAgIHMvIFxcKiQvLworCSAgICAgICBzLyQvOi8KKwkgICAgICAgcAorCSAgICAgfScgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZTIiCisgIDs7CisKK3RydTY0KQorICAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgorICAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorICAgIyBkZXBlbmRlbmNpZXMgaW4gYGZvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisgICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisKKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICAgIyBXaXRoIFRydTY0IGNjLCBzaGFyZWQgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2UgYQorICAgICAgIyBzdGF0aWMgbGlicmFyeS4gIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgaW4gbGlidG9vbCAxLjQgc2VyaWVzIHRvCisgICAgICAjIGhhbmRsZSBib3RoIHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcmllcyBpbiBhIHNpbmdsZSBjb21waWxhdGlvbi4KKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNCwgZGVwZW5kZW5jaWVzIHdlcmUgb3V0cHV0IGluICRkaXIubGlicy8kYmFzZS5sby5kLgorICAgICAgIworICAgICAgIyBXaXRoIGxpYnRvb2wgMS41IHRoaXMgZXhjZXB0aW9uIHdhcyByZW1vdmVkLCBhbmQgbGlidG9vbCBub3cKKyAgICAgICMgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UgdHdvCisgICAgICAjIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCisgICAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCisgICAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCisgICAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcworICAgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKKyAgICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgorICAgICAgdG1wZGVwZmlsZTE9JGRpci5saWJzLyRiYXNlLmxvLmQgICAjIGxpYnRvb2wgMS40CisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTQ9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKKyAgICAgICIkQCIgLVdjLC1NRAorICAgZWxzZQorICAgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlND0kZGlyJGJhc2UuZAorICAgICAgIiRAIiAtTUQKKyAgIGZpCisKKyAgIHN0YXQ9JD8KKyAgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICAgZWxzZQorICAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgICAgIGV4aXQgJHN0YXQKKyAgIGZpCisKKyAgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICBkbworICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgIGRvbmUKKyAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KKyAgICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICAgZWxzZQorICAgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgIGZpCisgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICA7OworCisjbm9zaWRlZWZmZWN0KQorICAjIFRoaXMgY29tbWVudCBhYm92ZSBpcyB1c2VkIGJ5IGF1dG9tYWtlIHRvIHRlbGwgc2lkZS1lZmZlY3QKKyAgIyBkZXBlbmRlbmN5IHRyYWNraW5nIG1lY2hhbmlzbXMgZnJvbSBzbG93ZXIgb25lcy4KKworZGFzaG1zdGRvdXQpCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LCByZWdhcmRsZXNzIG9mIC1vLgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KKyAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JworICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6CisgICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCisgICIkQCIgJGRhc2htZmxhZyB8CisgICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworZGFzaFhtc3Rkb3V0KQorICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5CisgICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgorICBleGl0IDEKKyAgOzsKKworbWFrZWRlcGVuZCkKKyAgIiRAIiB8fCBleGl0ICQ/CisgICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisgICMgWCBtYWtlZGVwZW5kCisgIHNoaWZ0CisgIGNsZWFyZWQ9bm8gZWF0PW5vCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRjbGVhcmVkIGluCisgICAgbm8pCisgICAgICBzZXQgIiI7IHNoaWZ0CisgICAgICBjbGVhcmVkPXllcyA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICRlYXQgPSB5ZXM7IHRoZW4KKyAgICAgIGVhdD1ubworICAgICAgY29udGludWUKKyAgICBmaQorICAgIGNhc2UgIiRhcmciIGluCisgICAgLUQqfC1JKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQorICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KKyAgICAtYXJjaCkKKyAgICAgIGVhdD15ZXMgOzsKKyAgICAtKnwkb2JqZWN0KQorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgIGVzYWMKKyAgZG9uZQorICBvYmpfc3VmZml4PWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9eLipcLi8uLydgCisgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCisnIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgOzsKKworY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIiRAIiAtRSB8CisgICAgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgfAorICAgIHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2aXN1YWxjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorCXNldCBmbm9yZCAiJEAiCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgKikKKwlzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIiRAIiAtRSAyPi9kZXYvbnVsbCB8CisgIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6XDE6cCcgfCAkY3lncGF0aF91IHwgc29ydCAtdSA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3ZjbXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L2Zvb3Rlcl9ub190aW1lc3RhbXAuaHRtbCBiL3BvcHQtMS4xNi9mb290ZXJfbm9fdGltZXN0YW1wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyZDIxMAotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9mb290ZXJfbm9fdGltZXN0YW1wLmh0bWwKQEAgLTAsMCArMSw1IEBACis8aHIgc2l6ZT0iMSI+PGFkZHJlc3Mgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+PHNtYWxsPkdlbmVyYXRlZCBmb3IgJHByb2plY3RuYW1lIGJ5Jm5ic3A7Cis8YSBocmVmPSJodHRwOi8vd3d3LmRveHlnZW4ub3JnL2luZGV4Lmh0bWwiPgorPGltZyBzcmM9ImRveHlnZW4ucG5nIiBhbHQ9ImRveHlnZW4iIGFsaWduPSJtaWRkbGUiIGJvcmRlcj0iMCI+PC9hPiAkZG94eWdlbnZlcnNpb24gPC9zbWFsbD48L2FkZHJlc3M+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvaW5zdGFsbC1zaCBiL3BvcHQtMS4xNi9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3ODFiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvaW5zdGFsbC1zaApAQCAtMCwwICsxLDUyMCBAQAorIyEvYmluL3NoCisjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQorCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAorIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgorIworIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCisjIGZyb20gc2NyYXRjaC4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgorCisjIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKKworIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgorZG9pdD0ke0RPSVRQUk9HLX0KK2lmIHRlc3QgLXogIiRkb2l0IjsgdGhlbgorICBkb2l0X2V4ZWM9ZXhlYworZWxzZQorICBkb2l0X2V4ZWM9JGRvaXQKK2ZpCisKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgorCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CisKK3Bvc2l4X2dsb2I9Jz8nCitpbml0aWFsaXplX3Bvc2l4X2dsb2I9JworICB0ZXN0ICIkcG9zaXhfZ2xvYiIgIT0gIj8iIHx8IHsKKyAgICBpZiAoc2V0IC1mKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgcG9zaXhfZ2xvYj0KKyAgICBlbHNlCisgICAgICBwb3NpeF9nbG9iPToKKyAgICBmaQorICB9CisnCisKK3Bvc2l4X21rZGlyPQorCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQorCitjaGdycGNtZD0KK2NobW9kY21kPSRjaG1vZHByb2cKK2Nob3duY21kPQorbXZjbWQ9JG12cHJvZworcm1jbWQ9IiRybXByb2cgLWYiCitzdHJpcGNtZD0KKworc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdF9hcmc9CisKK2NvcHlfb25fY2hhbmdlPWZhbHNlCitub190YXJnZXRfZGlyZWN0b3J5PQorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFstVF0gU1JDRklMRSBEU1RGSUxFCisgICBvcjogJDAgW09QVElPTl0uLi4gU1JDRklMRVMuLi4gRElSRUNUT1JZCisgICBvcjogJDAgW09QVElPTl0uLi4gLXQgRElSRUNUT1JZIFNSQ0ZJTEVTLi4uCisgICBvcjogJDAgW09QVElPTl0uLi4gLWQgRElSRUNUT1JJRVMuLi4KKworSW4gdGhlIDFzdCBmb3JtLCBjb3B5IFNSQ0ZJTEUgdG8gRFNURklMRS4KK0luIHRoZSAybmQgYW5kIDNyZCwgY29weSBhbGwgU1JDRklMRVMgdG8gRElSRUNUT1JZLgorSW4gdGhlIDR0aCwgY3JlYXRlIERJUkVDVE9SSUVTLgorCitPcHRpb25zOgorICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorICAgICAtLXZlcnNpb24gIGRpc3BsYXkgdmVyc2lvbiBpbmZvIGFuZCBleGl0LgorCisgIC1jICAgICAgICAgICAgKGlnbm9yZWQpCisgIC1DICAgICAgICAgICAgaW5zdGFsbCBvbmx5IGlmIGRpZmZlcmVudCAocHJlc2VydmUgdGhlIGxhc3QgZGF0YSBtb2RpZmljYXRpb24gdGltZSkKKyAgLWQgICAgICAgICAgICBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIGZpbGVzLgorICAtZyBHUk9VUCAgICAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgorICAtbSBNT0RFICAgICAgICRjaG1vZHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIE1PREUuCisgIC1vIFVTRVIgICAgICAgJGNob3ducHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gVVNFUi4KKyAgLXMgICAgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KKyAgLXQgRElSRUNUT1JZICBpbnN0YWxsIGludG8gRElSRUNUT1JZLgorICAtVCAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvciBpZiBEU1RGSUxFIGlzIGEgZGlyZWN0b3J5LgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZHM6CisgIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENNUFBST0cgQ1BQUk9HIE1LRElSUFJPRyBNVlBST0cKKyAgUk1QUk9HIFNUUklQUFJPRworIgorCit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbworICBjYXNlICQxIGluCisgICAgLWMpIDs7CisKKyAgICAtQykgY29weV9vbl9jaGFuZ2U9dHJ1ZTs7CisKKyAgICAtZCkgZGlyX2FyZz10cnVlOzsKKworICAgIC1nKSBjaGdycGNtZD0iJGNoZ3JwcHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OworCisgICAgLW0pIG1vZGU9JDIKKwljYXNlICRtb2RlIGluCisJICAqJyAnKiB8IConCScqIHwgKicKKycqCSAgfCAqJyonKiB8IConPycqIHwgKidbJyopCisJICAgIGVjaG8gIiQwOiBpbnZhbGlkIG1vZGU6ICRtb2RlIiA+JjIKKwkgICAgZXhpdCAxOzsKKwllc2FjCisJc2hpZnQ7OworCisgICAgLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKKworICAgIC10KSBkc3RfYXJnPSQyCisJc2hpZnQ7OworCisgICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZTs7CisKKyAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisKKyAgICAtLSkJc2hpZnQKKwlicmVhazs7CisKKyAgICAtKikJZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCisJZXhpdCAxOzsKKworICAgICopICBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgIGRvbmUKK2ZpCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCisgICAgZXhpdCAxCisgIGZpCisgICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgorICBleGl0IDAKK2ZpCisKK2lmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICB0cmFwICcoZXhpdCAkPyk7IGV4aXQnIDEgMiAxMyAxNQorCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OworCisgICAgKlswLTddKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9JyUgMjAwJworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPWBleHByICcoJyA3NzcgLSAkbW9kZSAlIDEwMDAgJyknICR1X3BsdXNfcndgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9LHUrcncKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz0kbW9kZSR1X3BsdXNfcnc7OworICBlc2FjCitmaQorCitmb3Igc3JjCitkbworICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgIGNhc2UgJHNyYyBpbgorICAgIC0qKSBzcmM9Li8kc3JjOzsKKyAgZXNhYworCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIGRzdD0kc3JjCisgICAgZHN0ZGlyPSRkc3QKKyAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgZWxzZQorCisgICAgIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyAgICAjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCisgICAgIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCisgICAgaWYgdGVzdCAhIC1mICIkc3JjIiAmJiB0ZXN0ICEgLWQgIiRzcmMiOyB0aGVuCisgICAgICBlY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRkc3RfYXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6IG5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGRzdD0kZHN0X2FyZworICAgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgICBjYXNlICRkc3QgaW4KKyAgICAgIC0qKSBkc3Q9Li8kZHN0OzsKKyAgICBlc2FjCisKKyAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KKyAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJG5vX3RhcmdldF9kaXJlY3RvcnkiOyB0aGVuCisJZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBhIGRpcmVjdG9yeSIgPiYyCisJZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0ZGlyPSRkc3QKKyAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXJfc3RhdHVzPTAKKyAgICBlbHNlCisgICAgICAjIFByZWZlciBkaXJuYW1lLCBidXQgZmFsbCBiYWNrIG9uIGEgc3Vic3RpdHV0ZSBpZiBkaXJuYW1lIGZhaWxzLgorICAgICAgZHN0ZGlyPWAKKwkoZGlybmFtZSAiJGRzdCIpIDI+L2Rldi9udWxsIHx8CisJZXhwciBYIiRkc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXCkkJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorCWVjaG8gWCIkZHN0IiB8CisJICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKVteL10uKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKSQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wpLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgcy8uKi8uLzsgcScKKyAgICAgIGAKKworICAgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgICBmaQorICBmaQorCisgIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKKworICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KKyAgICBjYXNlICRwb3NpeF9ta2RpciBpbgorICAgICAgJycpCisJIyBDcmVhdGUgaW50ZXJtZWRpYXRlIGRpcnMgdXNpbmcgbW9kZSA3NTUgYXMgbW9kaWZpZWQgYnkgdGhlIHVtYXNrLgorCSMgVGhpcyBpcyBsaWtlIEZyZWVCU0QgJ2luc3RhbGwnIGFzIG9mIDE5OTctMTAtMjguCisJdW1hc2s9YHVtYXNrYAorCWNhc2UgJHN0cmlwY21kLiR1bWFzayBpbgorCSAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisJICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OworCSAgLiowWzAyXVswMl0gfCAuWzAyXVswMl0gfCAuWzAyXSkgbWtkaXJfdW1hc2s9MjI7OworCisJICAqWzAtN10pCisJICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKKwkgICAgICAtICR1bWFzayAlIDEwMCAlIDQwICsgJHVtYXNrICUgMjAgXAorCSAgICAgIC0gJHVtYXNrICUgMTAgJSA0ICsgJHVtYXNrICUgMgorCSAgICBgOzsKKwkgICopIG1rZGlyX3VtYXNrPSR1bWFzayxnby13OzsKKwllc2FjCisKKwkjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgorCSMgT3RoZXJ3aXNlLCByZWx5IG9uICRta2Rpcl91bWFzay4KKwlpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKwkgIG1rZGlyX21vZGU9LW0kbW9kZQorCWVsc2UKKwkgIG1rZGlyX21vZGU9CisJZmkKKworCXBvc2l4X21rZGlyPWZhbHNlCisJY2FzZSAkdW1hc2sgaW4KKwkgICpbMTIzNTY3XVswLTddWzAtN10pCisJICAgICMgUE9TSVggbWtkaXIgLXAgc2V0cyB1K3d4IGJpdHMgcmVnYXJkbGVzcyBvZiB1bWFzaywgd2hpY2gKKwkgICAgIyBpcyBpbmNvbXBhdGlibGUgd2l0aCBGcmVlQlNEICdpbnN0YWxsJyB3aGVuICh1bWFzayAmIDMwMCkgIT0gMC4KKwkgICAgOzsKKwkgICopCisJICAgIHRtcGRpcj0ke1RNUERJUi0vdG1wfS9pbnMkUkFORE9NLSQkCisJICAgIHRyYXAgJ3JldD0kPzsgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKKworCSAgICBpZiAodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJCWV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCisJICAgIHRoZW4KKwkgICAgICBpZiB0ZXN0IC16ICIkZGlyX2FyZyIgfHwgeworCQkgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgorCQkgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgorCQkgICAjIG90aGVyLXdyaXRlYWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KKwkJICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgorCQkgICBsc19sZF90bXBkaXI9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgIGNhc2UgJGxzX2xkX3RtcGRpciBpbgorCQkgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7CisJCSAgICAgZD8/Pz8tPy0tKikgZGlmZmVyZW50X21vZGU9NzU1OzsKKwkJICAgICAqKSBmYWxzZTs7CisJCSAgIGVzYWMgJiYKKwkJICAgJG1rZGlycHJvZyAtbSRkaWZmZXJlbnRfbW9kZSAtcCAtLSAiJHRtcGRpciIgJiYgeworCQkgICAgIGxzX2xkX3RtcGRpcl8xPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKKwkJICAgfQorCQkgfQorCSAgICAgIHRoZW4gcG9zaXhfbWtkaXI9OgorCSAgICAgIGZpCisJICAgICAgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KKwkgICAgICBybWRpciAuLyRta2Rpcl9tb2RlIC4vLXAgLi8tLSAyPi9kZXYvbnVsbAorCSAgICBmaQorCSAgICB0cmFwICcnIDA7OworCWVzYWM7OworICAgIGVzYWMKKworICAgIGlmCisgICAgICAkcG9zaXhfbWtkaXIgJiYgKAorCXVtYXNrICRta2Rpcl91bWFzayAmJgorCSRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKKyAgICAgICkKKyAgICB0aGVuIDoKKyAgICBlbHNlCisKKyAgICAgICMgVGhlIHVtYXNrIGlzIHJpZGljdWxvdXMsIG9yIG1rZGlyIGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVgsCisgICAgICAjIG9yIGl0IGZhaWxlZCBwb3NzaWJseSBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gIENyZWF0ZSB0aGUKKyAgICAgICMgZGlyZWN0b3J5IHRoZSBzbG93IHdheSwgc3RlcCBieSBzdGVwLCBjaGVja2luZyBmb3IgcmFjZXMgYXMgd2UgZ28uCisKKyAgICAgIGNhc2UgJGRzdGRpciBpbgorCS8qKSBwcmVmaXg9Jy8nOzsKKwktKikgcHJlZml4PScuLyc7OworCSopICBwcmVmaXg9Jyc7OworICAgICAgZXNhYworCisgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIgorCisgICAgICBvSUZTPSRJRlMKKyAgICAgIElGUz0vCisgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYKKyAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCisgICAgICBzaGlmdAorICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmCisgICAgICBJRlM9JG9JRlMKKworICAgICAgcHJlZml4ZXM9CisKKyAgICAgIGZvciBkCisgICAgICBkbworCXRlc3QgLXogIiRkIiAmJiBjb250aW51ZQorCisJcHJlZml4PSRwcmVmaXgkZAorCWlmIHRlc3QgLWQgIiRwcmVmaXgiOyB0aGVuCisJICBwcmVmaXhlcz0KKwllbHNlCisJICBpZiAkcG9zaXhfbWtkaXI7IHRoZW4KKwkgICAgKHVtYXNrPSRta2Rpcl91bWFzayAmJgorCSAgICAgJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIikgJiYgYnJlYWsKKwkgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorCSAgICB0ZXN0IC1kICIkcHJlZml4IiB8fCBleGl0IDEKKwkgIGVsc2UKKwkgICAgY2FzZSAkcHJlZml4IGluCisJICAgICAgKlwnKikgcXByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OworCSAgICAgICopIHFwcmVmaXg9JHByZWZpeDs7CisJICAgIGVzYWMKKwkgICAgcHJlZml4ZXM9IiRwcmVmaXhlcyAnJHFwcmVmaXgnIgorCSAgZmkKKwlmaQorCXByZWZpeD0kcHJlZml4LworICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0IC1uICIkcHJlZml4ZXMiOyB0aGVuCisJIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorCSh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkgZXZhbCAiXCRkb2l0X2V4ZWMgXCRta2RpcnByb2cgJHByZWZpeGVzIikgfHwKKwkgIHRlc3QgLWQgIiRkc3RkaXIiIHx8IGV4aXQgMQorCW9ic29sZXRlX21rZGlyX3VzZWQ9dHJ1ZQorICAgICAgZmkKKyAgICBmaQorICBmaQorCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgIiRvYnNvbGV0ZV9ta2Rpcl91c2VkJGNob3duY21kJGNoZ3JwY21kIiA9IGZhbHNlIHx8CisgICAgICB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdCI7IH0gfHwgZXhpdCAxCisgIGVsc2UKKworICAgICMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCisgICAgZHN0dG1wPSRkc3RkaXIvX2luc3QuJCRfCisgICAgcm10bXA9JGRzdGRpci9fcm0uJCRfCisKKyAgICAjIFRyYXAgdG8gY2xlYW4gdXAgdGhvc2UgdGVtcCBmaWxlcyBhdCBleGl0LgorICAgIHRyYXAgJ3JldD0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHJldCcgMAorCisgICAgIyBDb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZS4KKyAgICAodW1hc2sgJGNwX3VtYXNrICYmICRkb2l0X2V4ZWMgJGNwcHJvZyAiJHNyYyIgIiRkc3R0bXAiKSAmJgorCisgICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgorICAgICMKKyAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisgICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCisgICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorICAgICMKKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0dG1wIjsgfSAmJgorCisgICAgIyBJZiAtQywgZG9uJ3QgYm90aGVyIHRvIGNvcHkgaWYgaXQgd291bGRuJ3QgY2hhbmdlIHRoZSBmaWxlLgorICAgIGlmICRjb3B5X29uX2NoYW5nZSAmJgorICAgICAgIG9sZD1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdCIJMj4vZGV2L251bGxgICYmCisgICAgICAgbmV3PWBMQ19BTEw9QyBscyAtZGxMICIkZHN0dG1wIgkyPi9kZXYvbnVsbGAgJiYKKworICAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiICYmCisgICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mICYmCisgICAgICAgc2V0IFggJG9sZCAmJiBvbGQ9OiQyOiQ0OiQ1OiQ2ICYmCisgICAgICAgc2V0IFggJG5ldyAmJiBuZXc9OiQyOiQ0OiQ1OiQ2ICYmCisgICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmICYmCisKKyAgICAgICB0ZXN0ICIkb2xkIiA9ICIkbmV3IiAmJgorICAgICAgICRjbXBwcm9nICIkZHN0IiAiJGRzdHRtcCIgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbgorICAgICAgcm0gLWYgIiRkc3R0bXAiCisgICAgZWxzZQorICAgICAgIyBSZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgICAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCisgICAgICAjIFRoZSByZW5hbWUgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2UgbXYgY2FuJ3QgcmVuYW1lIHNvbWV0aGluZyBlbHNlCisgICAgICAjIHRvIGl0c2VsZiwgb3IgcGVyaGFwcyBiZWNhdXNlIG12IGlzIHNvIGFuY2llbnQgdGhhdCBpdCBkb2VzIG5vdAorICAgICAgIyBzdXBwb3J0IC1mLgorICAgICAgeworCSMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KKwkjIFdlIHRyeSB0aGlzIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZQorCSMgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIKKwkjIHJlYXNvbnMuICBJbiB0aGlzIGNhc2UsIHRoZSBmaW5hbCBjbGVhbnVwIG1pZ2h0IGZhaWwgYnV0IHRoZSBuZXcKKwkjIGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgorCXsKKwkgIHRlc3QgISAtZiAiJGRzdCIgfHwKKwkgICRkb2l0ICRybWNtZCAtZiAiJGRzdCIgMj4vZGV2L251bGwgfHwKKwkgIHsgJGRvaXQgJG12Y21kIC1mICIkZHN0IiAiJHJtdG1wIiAyPi9kZXYvbnVsbCAmJgorCSAgICB7ICRkb2l0ICRybWNtZCAtZiAiJHJtdG1wIiAyPi9kZXYvbnVsbDsgOjsgfQorCSAgfSB8fAorCSAgeyBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdCIgPiYyCisJICAgIChleGl0IDEpOyBleGl0IDEKKwkgIH0KKwl9ICYmCisKKwkjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisJJGRvaXQgJG12Y21kICIkZHN0dG1wIiAiJGRzdCIKKyAgICAgIH0KKyAgICBmaSB8fCBleGl0IDEKKworICAgIHRyYXAgJycgMAorICBmaQorZG9uZQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvbGlicG9wdC52ZXJzIGIvcG9wdC0xLjE2L2xpYnBvcHQudmVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWM1ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L2xpYnBvcHQudmVycwpAQCAtMCwwICsxLDU4IEBACitMSUJQT1BUXzAKK3sKKyAgZ2xvYmFsOgorICAgIF9maW5pOworICAgIF9pbml0OworICAgIF9wb3B0QXJnTWFzazsKKyAgICBfcG9wdEdyb3VwTWFzazsKKyAgICBwb3B0QWRkQWxpYXM7CisgICAgcG9wdEFkZEl0ZW07CisgICAgcG9wdEFsaWFzT3B0aW9uczsKKyAgICBwb3B0QmFkT3B0aW9uOworICAgIF9wb3B0Qml0c047CisgICAgX3BvcHRCaXRzTTsKKyAgICBfcG9wdEJpdHNLOworICAgIHBvcHRCaXRzQWRkOworICAgIHBvcHRCaXRzQXJnczsKKyAgICBwb3B0Qml0c0NoazsKKyAgICBwb3B0Qml0c0NscjsKKyAgICBwb3B0Qml0c0RlbDsKKyAgICBwb3B0Qml0c0ludGVyc2VjdDsKKyAgICBwb3B0Qml0c1VuaW9uOworICAgIHBvcHRDb25maWdGaWxlVG9TdHJpbmc7CisgICAgcG9wdER1cEFyZ3Y7CisgICAgcG9wdEZpbmk7CisgICAgcG9wdEZyZWVDb250ZXh0OworICAgIHBvcHRHZXRBcmc7CisgICAgcG9wdEdldEFyZ3M7CisgICAgcG9wdEdldENvbnRleHQ7CisgICAgcG9wdEdldEludm9jYXRpb25OYW1lOworICAgIHBvcHRHZXROZXh0T3B0OworICAgIHBvcHRHZXRPcHRBcmc7CisgICAgcG9wdEhlbHBPcHRpb25zOworICAgIHBvcHRIZWxwT3B0aW9uc0kxOE47CisgICAgcG9wdEluaXQ7CisgICAgcG9wdFBhcnNlQXJndlN0cmluZzsKKyAgICBwb3B0UGVla0FyZzsKKyAgICBwb3B0UHJpbnRIZWxwOworICAgIHBvcHRQcmludFVzYWdlOworICAgIHBvcHRSZWFkRmlsZTsKKyAgICBwb3B0UmVhZENvbmZpZ0ZpbGU7CisgICAgcG9wdFJlYWRDb25maWdGaWxlczsKKyAgICBwb3B0UmVhZERlZmF1bHRDb25maWc7CisgICAgcG9wdFJlc2V0Q29udGV4dDsKKyAgICBwb3B0U2FuZUZpbGU7CisgICAgcG9wdFNhdmVCaXRzOworICAgIHBvcHRTYXZlSW50OworICAgIHBvcHRTYXZlTG9uZzsKKyAgICBwb3B0U2F2ZUxvbmdMb25nOworICAgIHBvcHRTYXZlU2hvcnQ7CisgICAgcG9wdFNhdmVTdHJpbmc7CisgICAgcG9wdFNldEV4ZWNQYXRoOworICAgIHBvcHRTZXRPdGhlck9wdGlvbkhlbHA7CisgICAgcG9wdFN0cmVycm9yOworICAgIHBvcHRTdHJpcHBlZEFyZ3Y7CisgICAgcG9wdFN0dWZmQXJnczsKKyAgbG9jYWw6CisgICAgKjsKK307CmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvbG9va3VwMy5jIGIvcG9wdC0xLjE2L2xvb2t1cDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTg0YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L2xvb2t1cDMuYwpAQCAtMCwwICsxLDk2OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBsb29rdXAzLmMsIGJ5IEJvYiBKZW5raW5zLCBNYXkgMjAwNiwgUHVibGljIERvbWFpbi4KKyAqIAorICogVGhlc2UgYXJlIGZ1bmN0aW9ucyBmb3IgcHJvZHVjaW5nIDMyLWJpdCBoYXNoZXMgZm9yIGhhc2ggdGFibGUgbG9va3VwLgorICogamx1MzJ3KCksIGpsdTMybCgpLCBqbHUzMmxwYWlyKCksIGpsdTMyYigpLCBfSkxVM19NSVgoKSwgYW5kIF9KTFUzX0ZJTkFMKCkgCisgKiBhcmUgZXh0ZXJuYWxseSB1c2VmdWwgZnVuY3Rpb25zLiAgUm91dGluZXMgdG8gdGVzdCB0aGUgaGFzaCBhcmUgaW5jbHVkZWQgCisgKiBpZiBTRUxGX1RFU1QgaXMgZGVmaW5lZC4gIFlvdSBjYW4gdXNlIHRoaXMgZnJlZSBmb3IgYW55IHB1cnBvc2UuICBJdCdzIGluCisgKiB0aGUgcHVibGljIGRvbWFpbi4gIEl0IGhhcyBubyB3YXJyYW50eS4KKyAqIAorICogWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIGpsdTMybCgpLiAgamx1MzJsKCkgYW5kIGpsdTMyYigpCisgKiBoYXNoIGJ5dGUgYXJyYXlzLiAgamx1MzJsKCkgaXMgaXMgZmFzdGVyIHRoYW4gamx1MzJiKCkgb24KKyAqIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuICBJbnRlbCBhbmQgQU1EIGFyZSBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLgorICogT24gc2Vjb25kIHRob3VnaHQsIHlvdSBwcm9iYWJseSB3YW50IGpsdTMybHBhaXIoKSwgd2hpY2ggaXMgaWRlbnRpY2FsIHRvCisgKiBqbHUzMmwoKSBleGNlcHQgaXQgcmV0dXJucyB0d28gMzItYml0IGhhc2hlcyBmb3IgdGhlIHByaWNlIG9mIG9uZS4gIAorICogWW91IGNvdWxkIGltcGxlbWVudCBqbHUzMmJwYWlyKCkgaWYgeW91IHdhbnRlZCBidXQgSSBoYXZlbid0IGJvdGhlcmVkIGhlcmUuCisgKiAKKyAqIElmIHlvdSB3YW50IHRvIGZpbmQgYSBoYXNoIG9mLCBzYXksIGV4YWN0bHkgNyBpbnRlZ2VycywgZG8KKyAqICAgYSA9IGkxOyAgYiA9IGkyOyAgYyA9IGkzOworICogICBfSkxVM19NSVgoYSxiLGMpOworICogICBhICs9IGk0OyBiICs9IGk1OyBjICs9IGk2OworICogICBfSkxVM19NSVgoYSxiLGMpOworICogICBhICs9IGk3OworICogICBfSkxVM19GSU5BTChhLGIsYyk7CisgKiB0aGVuIHVzZSBjIGFzIHRoZSBoYXNoIHZhbHVlLiAgSWYgeW91IGhhdmUgYSB2YXJpYWJsZSBzaXplIGFycmF5IG9mCisgKiA0LWJ5dGUgaW50ZWdlcnMgdG8gaGFzaCwgdXNlIGpsdTMydygpLiAgSWYgeW91IGhhdmUgYSBieXRlIGFycmF5IChsaWtlCisgKiBhIGNoYXJhY3RlciBzdHJpbmcpLCB1c2Ugamx1MzJsKCkuICBJZiB5b3UgaGF2ZSBzZXZlcmFsIGJ5dGUgYXJyYXlzLCBvcgorICogYSBtaXggb2YgdGhpbmdzLCBzZWUgdGhlIGNvbW1lbnRzIGFib3ZlIGpsdTMybCgpLiAgCisgKiAKKyAqIFdoeSBpcyB0aGlzIHNvIGJpZz8gIEkgcmVhZCAxMiBieXRlcyBhdCBhIHRpbWUgaW50byAzIDQtYnl0ZSBpbnRlZ2VycywgCisgKiB0aGVuIG1peCB0aG9zZSBpbnRlZ2Vycy4gIFRoaXMgaXMgZmFzdCAoeW91IGNhbiBkbyBhIGxvdCBtb3JlIHRob3JvdWdoCisgKiBtaXhpbmcgd2l0aCAxMiozIGluc3RydWN0aW9ucyBvbiAzIGludGVnZXJzIHRoYW4geW91IGNhbiB3aXRoIDMgaW5zdHJ1Y3Rpb25zCisgKiBvbiAxIGJ5dGUpLCBidXQgc2hvZWhvcm5pbmcgdGhvc2UgYnl0ZXMgaW50byBpbnRlZ2VycyBlZmZpY2llbnRseSBpcyBtZXNzeS4KKyovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZiBkZWZpbmVkKF9KTFUzX1NFTEZURVNUKQorIyBkZWZpbmUgX0pMVTNfamx1MzJ3CQkxCisjIGRlZmluZSBfSkxVM19qbHUzMmwJCTEKKyMgZGVmaW5lIF9KTFUzX2psdTMybHBhaXIJMQorIyBkZWZpbmUgX0pMVTNfamx1MzJiCQkxCisjZW5kaWYKKworLypALXJlZGVmQCovCisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBjb25zdCB1bmlvbiBfZGJzd2FwIHsKKyAgICBjb25zdCB1aW50MzJfdCB1aTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHVjWzRdOworfSBlbmRpYW4gPSB7IC51aSA9IDB4MTEyMjMzNDQgfTsKKyMgZGVmaW5lIEhBU0hfTElUVExFX0VORElBTgkoZW5kaWFuLnVjWzBdID09ICh1bnNpZ25lZCBjaGFyKSAweDQ0KQorIyBkZWZpbmUgSEFTSF9CSUdfRU5ESUFOCShlbmRpYW4udWNbMF0gPT0gKHVuc2lnbmVkIGNoYXIpIDB4MTEpCisvKkA9cmVkZWZAKi8KKworI2lmbmRlZiBST1RMMzIKKyMgZGVmaW5lIFJPVEwzMih4LCBzKSAoKCh4KSA8PCAocykpIHwgKCh4KSA+PiAoMzIgLSAocykpKSkKKyNlbmRpZgorCisvKiBOT1RFOiBUaGUgX3NpemUgcGFyYW1ldGVyIHNob3VsZCBiZSBpbiBieXRlcy4gKi8KKyNkZWZpbmUJX0pMVTNfSU5JVChfaCwgX3NpemUpCSgweGRlYWRiZWVmICsgKCh1aW50MzJfdCkoX3NpemUpKSArIChfaCkpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogX0pMVTNfTUlYIC0tIG1peCAzIDMyLWJpdCB2YWx1ZXMgcmV2ZXJzaWJseS4KKyAqIAorICogVGhpcyBpcyByZXZlcnNpYmxlLCBzbyBhbnkgaW5mb3JtYXRpb24gaW4gKGEsYixjKSBiZWZvcmUgX0pMVTNfTUlYKCkgaXMKKyAqIHN0aWxsIGluIChhLGIsYykgYWZ0ZXIgX0pMVTNfTUlYKCkuCisgKiAKKyAqIElmIGZvdXIgcGFpcnMgb2YgKGEsYixjKSBpbnB1dHMgYXJlIHJ1biB0aHJvdWdoIF9KTFUzX01JWCgpLCBvciB0aHJvdWdoCisgKiBfSkxVM19NSVgoKSBpbiByZXZlcnNlLCB0aGVyZSBhcmUgYXQgbGVhc3QgMzIgYml0cyBvZiB0aGUgb3V0cHV0IHRoYXQKKyAqIGFyZSBzb21ldGltZXMgdGhlIHNhbWUgZm9yIG9uZSBwYWlyIGFuZCBkaWZmZXJlbnQgZm9yIGFub3RoZXIgcGFpci4KKyAqIFRoaXMgd2FzIHRlc3RlZCBmb3I6CisgKiAqIHBhaXJzIHRoYXQgZGlmZmVyZWQgYnkgb25lIGJpdCwgYnkgdHdvIGJpdHMsIGluIGFueSBjb21iaW5hdGlvbgorICogICBvZiB0b3AgYml0cyBvZiAoYSxiLGMpLCBvciBpbiBhbnkgY29tYmluYXRpb24gb2YgYm90dG9tIGJpdHMgb2YKKyAqICAgKGEsYixjKS4KKyAqICogImRpZmZlciIgaXMgZGVmaW5lZCBhcyArLCAtLCBeLCBvciB+Xi4gIEZvciArIGFuZCAtLCBJIHRyYW5zZm9ybWVkCisgKiAgIHRoZSBvdXRwdXQgZGVsdGEgdG8gYSBHcmF5IGNvZGUgKGFeKGE+PjEpKSBzbyBhIHN0cmluZyBvZiAxJ3MgKGFzCisgKiAgIGlzIGNvbW1vbmx5IHByb2R1Y2VkIGJ5IHN1YnRyYWN0aW9uKSBsb29rIGxpa2UgYSBzaW5nbGUgMS1iaXQKKyAqICAgZGlmZmVyZW5jZS4KKyAqICogdGhlIGJhc2UgdmFsdWVzIHdlcmUgcHNldWRvcmFuZG9tLCBhbGwgemVybyBidXQgb25lIGJpdCBzZXQsIG9yIAorICogICBhbGwgemVybyBwbHVzIGEgY291bnRlciB0aGF0IHN0YXJ0cyBhdCB6ZXJvLgorICogCisgKiBTb21lIGsgdmFsdWVzIGZvciBteSAiYS09YzsgYV49Uk9UTDMyKGMsayk7IGMrPWI7IiBhcnJhbmdlbWVudCB0aGF0CisgKiBzYXRpc2Z5IHRoaXMgYXJlCisgKiAgICAgNCAgNiAgOCAxNiAxOSAgNAorICogICAgIDkgMTUgIDMgMTggMjcgMTUKKyAqICAgIDE0ICA5ICAzICA3IDE3ICAzCisgKiBXZWxsLCAiOSAxNSAzIDE4IDI3IDE1IiBkaWRuJ3QgcXVpdGUgZ2V0IDMyIGJpdHMgZGlmZmluZworICogZm9yICJkaWZmZXIiIGRlZmluZWQgYXMgKyB3aXRoIGEgb25lLWJpdCBiYXNlIGFuZCBhIHR3by1iaXQgZGVsdGEuICBJCisgKiB1c2VkIGh0dHA6Ly9idXJ0bGVidXJ0bGUubmV0L2JvYi9oYXNoL2F2YWxhbmNoZS5odG1sIHRvIGNob29zZSAKKyAqIHRoZSBvcGVyYXRpb25zLCBjb25zdGFudHMsIGFuZCBhcnJhbmdlbWVudHMgb2YgdGhlIHZhcmlhYmxlcy4KKyAqIAorICogVGhpcyBkb2VzIG5vdCBhY2hpZXZlIGF2YWxhbmNoZS4gIFRoZXJlIGFyZSBpbnB1dCBiaXRzIG9mIChhLGIsYykKKyAqIHRoYXQgZmFpbCB0byBhZmZlY3Qgc29tZSBvdXRwdXQgYml0cyBvZiAoYSxiLGMpLCBlc3BlY2lhbGx5IG9mIGEuICBUaGUKKyAqIG1vc3QgdGhvcm91Z2hseSBtaXhlZCB2YWx1ZSBpcyBjLCBidXQgaXQgZG9lc24ndCByZWFsbHkgZXZlbiBhY2hpZXZlCisgKiBhdmFsYW5jaGUgaW4gYy4KKyAqIAorICogVGhpcyBhbGxvd3Mgc29tZSBwYXJhbGxlbGlzbS4gIFJlYWQtYWZ0ZXItd3JpdGVzIGFyZSBnb29kIGF0IGRvdWJsaW5nCisgKiB0aGUgbnVtYmVyIG9mIGJpdHMgYWZmZWN0ZWQsIHNvIHRoZSBnb2FsIG9mIG1peGluZyBwdWxscyBpbiB0aGUgb3Bwb3NpdGUKKyAqIGRpcmVjdGlvbiBhcyB0aGUgZ29hbCBvZiBwYXJhbGxlbGlzbS4gIEkgZGlkIHdoYXQgSSBjb3VsZC4gIFJvdGF0ZXMKKyAqIHNlZW0gdG8gY29zdCBhcyBtdWNoIGFzIHNoaWZ0cyBvbiBldmVyeSBtYWNoaW5lIEkgY291bGQgbGF5IG15IGhhbmRzCisgKiBvbiwgYW5kIHJvdGF0ZXMgYXJlIG11Y2gga2luZGVyIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSBiaXRzLCBzbyBJIHVzZWQKKyAqIHJvdGF0ZXMuCisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIF9KTFUzX01JWChhLGIsYykgXAoreyBcCisgIGEgLT0gYzsgIGEgXj0gUk9UTDMyKGMsIDQpOyAgYyArPSBiOyBcCisgIGIgLT0gYTsgIGIgXj0gUk9UTDMyKGEsIDYpOyAgYSArPSBjOyBcCisgIGMgLT0gYjsgIGMgXj0gUk9UTDMyKGIsIDgpOyAgYiArPSBhOyBcCisgIGEgLT0gYzsgIGEgXj0gUk9UTDMyKGMsMTYpOyAgYyArPSBiOyBcCisgIGIgLT0gYTsgIGIgXj0gUk9UTDMyKGEsMTkpOyAgYSArPSBjOyBcCisgIGMgLT0gYjsgIGMgXj0gUk9UTDMyKGIsIDQpOyAgYiArPSBhOyBcCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKioKKyAqIF9KTFUzX0ZJTkFMIC0tIGZpbmFsIG1peGluZyBvZiAzIDMyLWJpdCB2YWx1ZXMgKGEsYixjKSBpbnRvIGMKKyAqIAorICogUGFpcnMgb2YgKGEsYixjKSB2YWx1ZXMgZGlmZmVyaW5nIGluIG9ubHkgYSBmZXcgYml0cyB3aWxsIHVzdWFsbHkKKyAqIHByb2R1Y2UgdmFsdWVzIG9mIGMgdGhhdCBsb29rIHRvdGFsbHkgZGlmZmVyZW50LiAgVGhpcyB3YXMgdGVzdGVkIGZvcgorICogKiBwYWlycyB0aGF0IGRpZmZlcmVkIGJ5IG9uZSBiaXQsIGJ5IHR3byBiaXRzLCBpbiBhbnkgY29tYmluYXRpb24KKyAqICAgb2YgdG9wIGJpdHMgb2YgKGEsYixjKSwgb3IgaW4gYW55IGNvbWJpbmF0aW9uIG9mIGJvdHRvbSBiaXRzIG9mCisgKiAgIChhLGIsYykuCisgKiAqICJkaWZmZXIiIGlzIGRlZmluZWQgYXMgKywgLSwgXiwgb3Igfl4uICBGb3IgKyBhbmQgLSwgSSB0cmFuc2Zvcm1lZAorICogICB0aGUgb3V0cHV0IGRlbHRhIHRvIGEgR3JheSBjb2RlIChhXihhPj4xKSkgc28gYSBzdHJpbmcgb2YgMSdzIChhcworICogICBpcyBjb21tb25seSBwcm9kdWNlZCBieSBzdWJ0cmFjdGlvbikgbG9vayBsaWtlIGEgc2luZ2xlIDEtYml0CisgKiAgIGRpZmZlcmVuY2UuCisgKiAqIHRoZSBiYXNlIHZhbHVlcyB3ZXJlIHBzZXVkb3JhbmRvbSwgYWxsIHplcm8gYnV0IG9uZSBiaXQgc2V0LCBvciAKKyAqICAgYWxsIHplcm8gcGx1cyBhIGNvdW50ZXIgdGhhdCBzdGFydHMgYXQgemVyby4KKyAqIAorICogVGhlc2UgY29uc3RhbnRzIHBhc3NlZDoKKyAqICAxNCAxMSAyNSAxNiA0IDE0IDI0CisgKiAgMTIgMTQgMjUgMTYgNCAxNCAyNAorICogYW5kIHRoZXNlIGNhbWUgY2xvc2U6CisgKiAgIDQgIDggMTUgMjYgMyAyMiAyNAorICogIDEwICA4IDE1IDI2IDMgMjIgMjQKKyAqICAxMSAgOCAxNSAyNiAzIDIyIDI0CisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIF9KTFUzX0ZJTkFMKGEsYixjKSBcCit7IFwKKyAgYyBePSBiOyBjIC09IFJPVEwzMihiLDE0KTsgXAorICBhIF49IGM7IGEgLT0gUk9UTDMyKGMsMTEpOyBcCisgIGIgXj0gYTsgYiAtPSBST1RMMzIoYSwyNSk7IFwKKyAgYyBePSBiOyBjIC09IFJPVEwzMihiLDE2KTsgXAorICBhIF49IGM7IGEgLT0gUk9UTDMyKGMsNCk7ICBcCisgIGIgXj0gYTsgYiAtPSBST1RMMzIoYSwxNCk7IFwKKyAgYyBePSBiOyBjIC09IFJPVEwzMihiLDI0KTsgXAorfQorCisjaWYgZGVmaW5lZChfSkxVM19qbHUzMncpCit1aW50MzJfdCBqbHUzMncodWludDMyX3QgaCwgLypAbnVsbEAqLyBjb25zdCB1aW50MzJfdCAqaywgc2l6ZV90IHNpemUpCisJLypAKi87CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoqCisgKiAgVGhpcyB3b3JrcyBvbiBhbGwgbWFjaGluZXMuICBUbyBiZSB1c2VmdWwsIGl0IHJlcXVpcmVzCisgKiAgLS0gdGhhdCB0aGUga2V5IGJlIGFuIGFycmF5IG9mIHVpbnQzMl90J3MsIGFuZAorICogIC0tIHRoYXQgdGhlIHNpemUgYmUgdGhlIG51bWJlciBvZiB1aW50MzJfdCdzIGluIHRoZSBrZXkKKyAqIAorICogIFRoZSBmdW5jdGlvbiBqbHUzMncoKSBpcyBpZGVudGljYWwgdG8gamx1MzJsKCkgb24gbGl0dGxlLWVuZGlhbgorICogIG1hY2hpbmVzLCBhbmQgaWRlbnRpY2FsIHRvIGpsdTMyYigpIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMsCisgKiAgZXhjZXB0IHRoYXQgdGhlIHNpemUgaGFzIHRvIGJlIG1lYXN1cmVkIGluIHVpbnQzMl90cyByYXRoZXIgdGhhbiBpbgorICogIGJ5dGVzLiAgamx1MzJsKCkgaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIGpsdTMydygpIG9ubHkgYmVjYXVzZQorICogIGpsdTMybCgpIGhhcyB0byBkYW5jZSBhcm91bmQgZml0dGluZyB0aGUga2V5IGJ5dGVzIGludG8gcmVnaXN0ZXJzLgorICoKKyAqIEBwYXJhbSBoCQl0aGUgcHJldmlvdXMgaGFzaCwgb3IgYW4gYXJiaXRyYXJ5IHZhbHVlCisgKiBAcGFyYW0gKmsJCXRoZSBrZXksIGFuIGFycmF5IG9mIHVpbnQzMl90IHZhbHVlcworICogQHBhcmFtIHNpemUJCXRoZSBzaXplIG9mIHRoZSBrZXksIGluIHVpbnQzMl90cworICogQHJldHVybgkJdGhlIGxvb2t1cDMgaGFzaAorICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordWludDMyX3Qgamx1MzJ3KHVpbnQzMl90IGgsIGNvbnN0IHVpbnQzMl90ICprLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB1aW50MzJfdCBhID0gX0pMVTNfSU5JVChoLCAoc2l6ZSAqIHNpemVvZigqaykpKTsKKyAgICB1aW50MzJfdCBiID0gYTsKKyAgICB1aW50MzJfdCBjID0gYTsKKworICAgIGlmIChrID09IE5VTEwpCisJZ290byBleGl0OworCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoYW5kbGUgbW9zdCBvZiB0aGUga2V5ICovCisgICAgd2hpbGUgKHNpemUgPiAzKSB7CisJYSArPSBrWzBdOworCWIgKz0ga1sxXTsKKwljICs9IGtbMl07CisJX0pMVTNfTUlYKGEsYixjKTsKKwlzaXplIC09IDM7CisJayArPSAzOworICAgIH0KKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGFuZGxlIHRoZSBsYXN0IDMgdWludDMyX3QncyAqLworICAgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMyA6IGMrPWtbMl07CisgICAgY2FzZSAyIDogYis9a1sxXTsKKyAgICBjYXNlIDEgOiBhKz1rWzBdOworCV9KTFUzX0ZJTkFMKGEsYixjKTsKKwkvKkBmYWxsdGhyb3VnaEAqLworICAgIGNhc2UgMDoKKwlicmVhazsKKyAgICB9CisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlcG9ydCB0aGUgcmVzdWx0ICovCitleGl0OgorICAgIHJldHVybiBjOworfQorI2VuZGlmCS8qIGRlZmluZWQoX0pMVTNfamx1MzJ3KSAqLworCisjaWYgZGVmaW5lZChfSkxVM19qbHUzMmwpCit1aW50MzJfdCBqbHUzMmwodWludDMyX3QgaCwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSkKKwkvKkAqLzsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogamx1MzJsKCkgLS0gaGFzaCBhIHZhcmlhYmxlLWxlbmd0aCBrZXkgaW50byBhIDMyLWJpdCB2YWx1ZQorICogICBoICAgICAgIDogY2FuIGJlIGFueSA0LWJ5dGUgdmFsdWUKKyAqICAgayAgICAgICA6IHRoZSBrZXkgKHRoZSB1bmFsaWduZWQgdmFyaWFibGUtbGVuZ3RoIGFycmF5IG9mIGJ5dGVzKQorICogICBzaXplICAgIDogdGhlIHNpemUgb2YgdGhlIGtleSwgY291bnRpbmcgYnkgYnl0ZXMKKyAqIFJldHVybnMgYSAzMi1iaXQgdmFsdWUuICBFdmVyeSBiaXQgb2YgdGhlIGtleSBhZmZlY3RzIGV2ZXJ5IGJpdCBvZgorICogdGhlIHJldHVybiB2YWx1ZS4gIFR3byBrZXlzIGRpZmZlcmluZyBieSBvbmUgb3IgdHdvIGJpdHMgd2lsbCBoYXZlCisgKiB0b3RhbGx5IGRpZmZlcmVudCBoYXNoIHZhbHVlcy4KKyAqIAorICogVGhlIGJlc3QgaGFzaCB0YWJsZSBzaXplcyBhcmUgcG93ZXJzIG9mIDIuICBUaGVyZSBpcyBubyBuZWVkIHRvIGRvCisgKiBtb2QgYSBwcmltZSAobW9kIGlzIHNvb28gc2xvdyEpLiAgSWYgeW91IG5lZWQgbGVzcyB0aGFuIDMyIGJpdHMsCisgKiB1c2UgYSBiaXRtYXNrLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBuZWVkIG9ubHkgMTAgYml0cywgZG8KKyAqICAgaCA9IChoICYgaGFzaG1hc2soMTApKTsKKyAqIEluIHdoaWNoIGNhc2UsIHRoZSBoYXNoIHRhYmxlIHNob3VsZCBoYXZlIGhhc2hzaXplKDEwKSBlbGVtZW50cy4KKyAqIAorICogSWYgeW91IGFyZSBoYXNoaW5nIG4gc3RyaW5ncyAodWludDhfdCAqKilrLCBkbyBpdCBsaWtlIHRoaXM6CisgKiAgIGZvciAoaT0wLCBoPTA7IGk8bjsgKytpKSBoID0gamx1MzJsKGgsIGtbaV0sIGxlbltpXSk7CisgKiAKKyAqIEJ5IEJvYiBKZW5raW5zLCAyMDA2LiAgYm9iX2plbmtpbnNAYnVydGxlYnVydGxlLm5ldC4gIFlvdSBtYXkgdXNlIHRoaXMKKyAqIGNvZGUgYW55IHdheSB5b3Ugd2lzaCwgcHJpdmF0ZSwgZWR1Y2F0aW9uYWwsIG9yIGNvbW1lcmNpYWwuICBJdCdzIGZyZWUuCisgKiAKKyAqIFVzZSBmb3IgaGFzaCB0YWJsZSBsb29rdXAsIG9yIGFueXRoaW5nIHdoZXJlIG9uZSBjb2xsaXNpb24gaW4gMl5eMzIgaXMKKyAqIGFjY2VwdGFibGUuICBEbyBOT1QgdXNlIGZvciBjcnlwdG9ncmFwaGljIHB1cnBvc2VzLgorICoKKyAqIEBwYXJhbSBoCQl0aGUgcHJldmlvdXMgaGFzaCwgb3IgYW4gYXJiaXRyYXJ5IHZhbHVlCisgKiBAcGFyYW0gKmsJCXRoZSBrZXksIGFuIGFycmF5IG9mIHVpbnQ4X3QgdmFsdWVzCisgKiBAcGFyYW0gc2l6ZQkJdGhlIHNpemUgb2YgdGhlIGtleQorICogQHJldHVybgkJdGhlIGxvb2t1cDMgaGFzaAorICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordWludDMyX3Qgamx1MzJsKHVpbnQzMl90IGgsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUpCit7CisgICAgdW5pb24geyBjb25zdCB2b2lkICpwdHI7IHNpemVfdCBpOyB9IHU7CisgICAgdWludDMyX3QgYSA9IF9KTFUzX0lOSVQoaCwgc2l6ZSk7CisgICAgdWludDMyX3QgYiA9IGE7CisgICAgdWludDMyX3QgYyA9IGE7CisKKyAgICBpZiAoa2V5ID09IE5VTEwpCisJZ290byBleGl0OworCisgICAgdS5wdHIgPSBrZXk7CisgICAgaWYgKEhBU0hfTElUVExFX0VORElBTiAmJiAoKHUuaSAmIDB4MykgPT0gMCkpIHsKKwljb25zdCB1aW50MzJfdCAqayA9IChjb25zdCB1aW50MzJfdCAqKWtleTsJLyogcmVhZCAzMi1iaXQgY2h1bmtzICovCisjaWZkZWYJVkFMR1JJTkQKKwljb25zdCB1aW50OF90ICAqazg7CisjZW5kaWYKKworICAgIC8qLS0tLS0tIGFsbCBidXQgbGFzdCBibG9jazogYWxpZ25lZCByZWFkcyBhbmQgYWZmZWN0IDMyIGJpdHMgb2YgKGEsYixjKSAqLworCXdoaWxlIChzaXplID4gMTIpIHsKKwkgICAgYSArPSBrWzBdOworCSAgICBiICs9IGtbMV07CisJICAgIGMgKz0ga1syXTsKKwkgICAgX0pMVTNfTUlYKGEsYixjKTsKKwkgICAgc2l6ZSAtPSAxMjsKKwkgICAgayArPSAzOworCX0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoYW5kbGUgdGhlIGxhc3QgKHByb2JhYmx5IHBhcnRpYWwpIGJsb2NrICovCisJLyogCisJICogImtbMl0mMHhmZmZmZmYiIGFjdHVhbGx5IHJlYWRzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIGJ1dAorCSAqIHRoZW4gbWFza3Mgb2ZmIHRoZSBwYXJ0IGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVhZC4gIEJlY2F1c2UgdGhlCisJICogc3RyaW5nIGlzIGFsaWduZWQsIHRoZSBtYXNrZWQtb2ZmIHRhaWwgaXMgaW4gdGhlIHNhbWUgd29yZCBhcyB0aGUKKwkgKiByZXN0IG9mIHRoZSBzdHJpbmcuICBFdmVyeSBtYWNoaW5lIHdpdGggbWVtb3J5IHByb3RlY3Rpb24gSSd2ZSBzZWVuCisJICogZG9lcyBpdCBvbiB3b3JkIGJvdW5kYXJpZXMsIHNvIGlzIE9LIHdpdGggdGhpcy4gIEJ1dCBWQUxHUklORCB3aWxsCisJICogc3RpbGwgY2F0Y2ggaXQgYW5kIGNvbXBsYWluLiAgVGhlIG1hc2tpbmcgdHJpY2sgZG9lcyBtYWtlIHRoZSBoYXNoCisJICogbm90aWNhYmx5IGZhc3RlciBmb3Igc2hvcnQgc3RyaW5ncyAobGlrZSBFbmdsaXNoIHdvcmRzKS4KKwkgKi8KKyNpZm5kZWYgVkFMR1JJTkQKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMTI6CWMgKz0ga1syXTsgYis9a1sxXTsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAxMToJYyArPSBrWzJdJjB4ZmZmZmZmOyBiKz1rWzFdOyBhKz1rWzBdOyBicmVhazsKKwljYXNlIDEwOgljICs9IGtbMl0mMHhmZmZmOyBiKz1rWzFdOyBhKz1rWzBdOyBicmVhazsKKwljYXNlICA5OgljICs9IGtbMl0mMHhmZjsgYis9a1sxXTsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAgODoJYiArPSBrWzFdOyBhKz1rWzBdOyBicmVhazsKKwljYXNlICA3OgliICs9IGtbMV0mMHhmZmZmZmY7IGErPWtbMF07IGJyZWFrOworCWNhc2UgIDY6CWIgKz0ga1sxXSYweGZmZmY7IGErPWtbMF07IGJyZWFrOworCWNhc2UgIDU6CWIgKz0ga1sxXSYweGZmOyBhKz1rWzBdOyBicmVhazsKKwljYXNlICA0OglhICs9IGtbMF07IGJyZWFrOworCWNhc2UgIDM6CWEgKz0ga1swXSYweGZmZmZmZjsgYnJlYWs7CisJY2FzZSAgMjoJYSArPSBrWzBdJjB4ZmZmZjsgYnJlYWs7CisJY2FzZSAgMToJYSArPSBrWzBdJjB4ZmY7IGJyZWFrOworCWNhc2UgIDA6CWdvdG8gZXhpdDsKKwl9CisKKyNlbHNlIC8qIG1ha2UgdmFsZ3JpbmQgaGFwcHkgKi8KKworCWs4ID0gKGNvbnN0IHVpbnQ4X3QgKilrOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMTI6CWMgKz0ga1syXTsgYis9a1sxXTsgYSs9a1swXQlicmVhazsKKwljYXNlIDExOgljICs9ICgodWludDMyX3QpazhbMTBdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAxMDoJYyArPSAoKHVpbnQzMl90KWs4WzldKTw8ODsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA5OgljICs9IGs4WzhdOwkJCS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgODoJYiArPSBrWzFdOyBhKz1rWzBdOwkJYnJlYWs7CisJY2FzZSAgNzoJYiArPSAoKHVpbnQzMl90KWs4WzZdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNjoJYiArPSAoKHVpbnQzMl90KWs4WzVdKTw8ODsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA1OgliICs9IGs4WzRdOwkJCS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNDoJYSArPSBrWzBdOwkJCWJyZWFrOworCWNhc2UgIDM6CWEgKz0gKCh1aW50MzJfdClrOFsyXSk8PDE2OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDI6CWEgKz0gKCh1aW50MzJfdClrOFsxXSk8PDg7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgMToJYSArPSBrOFswXTsJCQlicmVhazsKKwljYXNlICAwOglnb3RvIGV4aXQ7CisJfQorCisjZW5kaWYgLyogIXZhbGdyaW5kICovCisKKyAgICB9IGVsc2UgaWYgKEhBU0hfTElUVExFX0VORElBTiAmJiAoKHUuaSAmIDB4MSkgPT0gMCkpIHsKKwljb25zdCB1aW50MTZfdCAqayA9IChjb25zdCB1aW50MTZfdCAqKWtleTsJLyogcmVhZCAxNi1iaXQgY2h1bmtzICovCisJY29uc3QgdWludDhfdCAgKms4OworCisJLyotLS0tLS0tLS0tLSBhbGwgYnV0IGxhc3QgYmxvY2s6IGFsaWduZWQgcmVhZHMgYW5kIGRpZmZlcmVudCBtaXhpbmcgKi8KKwl3aGlsZSAoc2l6ZSA+IDEyKSB7CisJICAgIGEgKz0ga1swXSArICgoKHVpbnQzMl90KWtbMV0pPDwxNik7CisJICAgIGIgKz0ga1syXSArICgoKHVpbnQzMl90KWtbM10pPDwxNik7CisJICAgIGMgKz0ga1s0XSArICgoKHVpbnQzMl90KWtbNV0pPDwxNik7CisJICAgIF9KTFUzX01JWChhLGIsYyk7CisJICAgIHNpemUgLT0gMTI7CisJICAgIGsgKz0gNjsKKwl9CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGFuZGxlIHRoZSBsYXN0IChwcm9iYWJseSBwYXJ0aWFsKSBibG9jayAqLworCWs4ID0gKGNvbnN0IHVpbnQ4X3QgKilrOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMTI6CisJICAgIGMgKz0ga1s0XSsoKCh1aW50MzJfdClrWzVdKTw8MTYpOworCSAgICBiICs9IGtbMl0rKCgodWludDMyX3Qpa1szXSk8PDE2KTsKKwkgICAgYSArPSBrWzBdKygoKHVpbnQzMl90KWtbMV0pPDwxNik7CisJICAgIGJyZWFrOworCWNhc2UgMTE6CisJICAgIGMgKz0gKCh1aW50MzJfdClrOFsxMF0pPDwxNjsKKwkgICAgLypAZmFsbHRocm91Z2hAKi8KKwljYXNlIDEwOgorCSAgICBjICs9ICh1aW50MzJfdClrWzRdOworCSAgICBiICs9IGtbMl0rKCgodWludDMyX3Qpa1szXSk8PDE2KTsKKwkgICAgYSArPSBrWzBdKygoKHVpbnQzMl90KWtbMV0pPDwxNik7CisJICAgIGJyZWFrOworCWNhc2UgIDk6CisJICAgIGMgKz0gKHVpbnQzMl90KWs4WzhdOworCSAgICAvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDg6CisJICAgIGIgKz0ga1syXSsoKCh1aW50MzJfdClrWzNdKTw8MTYpOworCSAgICBhICs9IGtbMF0rKCgodWludDMyX3Qpa1sxXSk8PDE2KTsKKwkgICAgYnJlYWs7CisJY2FzZSAgNzoKKwkgICAgYiArPSAoKHVpbnQzMl90KWs4WzZdKTw8MTY7CisJICAgIC8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNjoKKwkgICAgYiArPSAodWludDMyX3Qpa1syXTsKKwkgICAgYSArPSBrWzBdKygoKHVpbnQzMl90KWtbMV0pPDwxNik7CisJICAgIGJyZWFrOworCWNhc2UgIDU6CisJICAgIGIgKz0gKHVpbnQzMl90KWs4WzRdOworCSAgICAvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDQ6CisJICAgIGEgKz0ga1swXSsoKCh1aW50MzJfdClrWzFdKTw8MTYpOworCSAgICBicmVhazsKKwljYXNlICAzOgorCSAgICBhICs9ICgodWludDMyX3QpazhbMl0pPDwxNjsKKwkgICAgLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAyOgorCSAgICBhICs9ICh1aW50MzJfdClrWzBdOworCSAgICBicmVhazsKKwljYXNlICAxOgorCSAgICBhICs9ICh1aW50MzJfdClrOFswXTsKKwkgICAgYnJlYWs7CisJY2FzZSAgMDoKKwkgICAgZ290byBleGl0OworCX0KKworICAgIH0gZWxzZSB7CQkvKiBuZWVkIHRvIHJlYWQgdGhlIGtleSBvbmUgYnl0ZSBhdCBhIHRpbWUgKi8KKwljb25zdCB1aW50OF90ICprID0gKGNvbnN0IHVpbnQ4X3QgKilrZXk7CisKKwkvKi0tLS0tLS0tLS0tIGFsbCBidXQgdGhlIGxhc3QgYmxvY2s6IGFmZmVjdCBzb21lIDMyIGJpdHMgb2YgKGEsYixjKSAqLworCXdoaWxlIChzaXplID4gMTIpIHsKKwkgICAgYSArPSAodWludDMyX3Qpa1swXTsKKwkgICAgYSArPSAoKHVpbnQzMl90KWtbMV0pPDw4OworCSAgICBhICs9ICgodWludDMyX3Qpa1syXSk8PDE2OworCSAgICBhICs9ICgodWludDMyX3Qpa1szXSk8PDI0OworCSAgICBiICs9ICh1aW50MzJfdClrWzRdOworCSAgICBiICs9ICgodWludDMyX3Qpa1s1XSk8PDg7CisJICAgIGIgKz0gKCh1aW50MzJfdClrWzZdKTw8MTY7CisJICAgIGIgKz0gKCh1aW50MzJfdClrWzddKTw8MjQ7CisJICAgIGMgKz0gKHVpbnQzMl90KWtbOF07CisJICAgIGMgKz0gKCh1aW50MzJfdClrWzldKTw8ODsKKwkgICAgYyArPSAoKHVpbnQzMl90KWtbMTBdKTw8MTY7CisJICAgIGMgKz0gKCh1aW50MzJfdClrWzExXSk8PDI0OworCSAgICBfSkxVM19NSVgoYSxiLGMpOworCSAgICBzaXplIC09IDEyOworCSAgICBrICs9IDEyOworCX0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsYXN0IGJsb2NrOiBhZmZlY3QgYWxsIDMyIGJpdHMgb2YgKGMpICovCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxMjoJYyArPSAoKHVpbnQzMl90KWtbMTFdKTw8MjQ7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAxMToJYyArPSAoKHVpbnQzMl90KWtbMTBdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAxMDoJYyArPSAoKHVpbnQzMl90KWtbOV0pPDw4OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDk6CWMgKz0gKHVpbnQzMl90KWtbOF07CQkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDg6CWIgKz0gKCh1aW50MzJfdClrWzddKTw8MjQ7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNzoJYiArPSAoKHVpbnQzMl90KWtbNl0pPDwxNjsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA2OgliICs9ICgodWludDMyX3Qpa1s1XSk8PDg7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNToJYiArPSAodWludDMyX3Qpa1s0XTsJCS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNDoJYSArPSAoKHVpbnQzMl90KWtbM10pPDwyNDsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAzOglhICs9ICgodWludDMyX3Qpa1syXSk8PDE2OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDI6CWEgKz0gKCh1aW50MzJfdClrWzFdKTw8ODsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAxOglhICs9ICh1aW50MzJfdClrWzBdOworCSAgICBicmVhazsKKwljYXNlICAwOgorCSAgICBnb3RvIGV4aXQ7CisJfQorICAgIH0KKworICAgIF9KTFUzX0ZJTkFMKGEsYixjKTsKKworZXhpdDoKKyAgICByZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBkZWZpbmVkKF9KTFUzX2psdTMybCkgKi8KKworI2lmIGRlZmluZWQoX0pMVTNfamx1MzJscGFpcikKKy8qKgorICogamx1MzJscGFpcjogcmV0dXJuIDIgMzItYml0IGhhc2ggdmFsdWVzLgorICoKKyAqIFRoaXMgaXMgaWRlbnRpY2FsIHRvIGpsdTMybCgpLCBleGNlcHQgaXQgcmV0dXJucyB0d28gMzItYml0IGhhc2gKKyAqIHZhbHVlcyBpbnN0ZWFkIG9mIGp1c3Qgb25lLiAgVGhpcyBpcyBnb29kIGVub3VnaCBmb3IgaGFzaCB0YWJsZQorICogbG9va3VwIHdpdGggMl5eNjQgYnVja2V0cywgb3IgaWYgeW91IHdhbnQgYSBzZWNvbmQgaGFzaCBpZiB5b3UncmUgbm90CisgKiBoYXBweSB3aXRoIHRoZSBmaXJzdCwgb3IgaWYgeW91IHdhbnQgYSBwcm9iYWJseS11bmlxdWUgNjQtYml0IElEIGZvcgorICogdGhlIGtleS4gICpwYyBpcyBiZXR0ZXIgbWl4ZWQgdGhhbiAqcGIsIHNvIHVzZSAqcGMgZmlyc3QuICBJZiB5b3Ugd2FudAorICogYSA2NC1iaXQgdmFsdWUgZG8gc29tZXRoaW5nIGxpa2UgIipwYyArICgoKHVpbnQ2NF90KSpwYik8PDMyKSIuCisgKgorICogQHBhcmFtIGgJCXRoZSBwcmV2aW91cyBoYXNoLCBvciBhbiBhcmJpdHJhcnkgdmFsdWUKKyAqIEBwYXJhbSAqa2V5CQl0aGUga2V5LCBhbiBhcnJheSBvZiB1aW50OF90IHZhbHVlcworICogQHBhcmFtIHNpemUJCXRoZSBzaXplIG9mIHRoZSBrZXkgaW4gYnl0ZXMKKyAqIEByZXR2YWwgKnBjLAkJSU46IHByaW1hcnkgaW5pdHZhbCwgT1VUOiBwcmltYXJ5IGhhc2gKKyAqICpyZXR2YWwgKnBiCQlJTjogc2Vjb25kYXJ5IGluaXR2YWwsIE9VVDogc2Vjb25kYXJ5IGhhc2gKKyAqLwordm9pZCBqbHUzMmxwYWlyKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHVpbnQzMl90ICpwYywgdWludDMyX3QgKnBiKQoreworICAgIHVuaW9uIHsgY29uc3Qgdm9pZCAqcHRyOyBzaXplX3QgaTsgfSB1OworICAgIHVpbnQzMl90IGEgPSBfSkxVM19JTklUKCpwYywgc2l6ZSk7CisgICAgdWludDMyX3QgYiA9IGE7CisgICAgdWludDMyX3QgYyA9IGE7CisKKyAgICBpZiAoa2V5ID09IE5VTEwpCisJZ290byBleGl0OworCisgICAgYyArPSAqcGI7CS8qIEFkZCB0aGUgc2Vjb25kYXJ5IGhhc2guICovCisKKyAgICB1LnB0ciA9IGtleTsKKyAgICBpZiAoSEFTSF9MSVRUTEVfRU5ESUFOICYmICgodS5pICYgMHgzKSA9PSAwKSkgeworCWNvbnN0IHVpbnQzMl90ICprID0gKGNvbnN0IHVpbnQzMl90ICopa2V5OwkvKiByZWFkIDMyLWJpdCBjaHVua3MgKi8KKyNpZmRlZglWQUxHUklORAorCWNvbnN0IHVpbnQ4X3QgICprODsKKyNlbmRpZgorCisJLyotLSBhbGwgYnV0IGxhc3QgYmxvY2s6IGFsaWduZWQgcmVhZHMgYW5kIGFmZmVjdCAzMiBiaXRzIG9mIChhLGIsYykgKi8KKwl3aGlsZSAoc2l6ZSA+IChzaXplX3QpMTIpIHsKKwkgICAgYSArPSBrWzBdOworCSAgICBiICs9IGtbMV07CisJICAgIGMgKz0ga1syXTsKKwkgICAgX0pMVTNfTUlYKGEsYixjKTsKKwkgICAgc2l6ZSAtPSAxMjsKKwkgICAgayArPSAzOworCX0KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGFuZGxlIHRoZSBsYXN0IChwcm9iYWJseSBwYXJ0aWFsKSBibG9jayAqLworCS8qIAorCSAqICJrWzJdJjB4ZmZmZmZmIiBhY3R1YWxseSByZWFkcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBidXQKKwkgKiB0aGVuIG1hc2tzIG9mZiB0aGUgcGFydCBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlYWQuICBCZWNhdXNlIHRoZQorCSAqIHN0cmluZyBpcyBhbGlnbmVkLCB0aGUgbWFza2VkLW9mZiB0YWlsIGlzIGluIHRoZSBzYW1lIHdvcmQgYXMgdGhlCisJICogcmVzdCBvZiB0aGUgc3RyaW5nLiAgRXZlcnkgbWFjaGluZSB3aXRoIG1lbW9yeSBwcm90ZWN0aW9uIEkndmUgc2VlbgorCSAqIGRvZXMgaXQgb24gd29yZCBib3VuZGFyaWVzLCBzbyBpcyBPSyB3aXRoIHRoaXMuICBCdXQgVkFMR1JJTkQgd2lsbAorCSAqIHN0aWxsIGNhdGNoIGl0IGFuZCBjb21wbGFpbi4gIFRoZSBtYXNraW5nIHRyaWNrIGRvZXMgbWFrZSB0aGUgaGFzaAorCSAqIG5vdGljYWJseSBmYXN0ZXIgZm9yIHNob3J0IHN0cmluZ3MgKGxpa2UgRW5nbGlzaCB3b3JkcykuCisJICovCisjaWZuZGVmIFZBTEdSSU5ECisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDEyOgljICs9IGtbMl07IGIrPWtbMV07IGErPWtbMF07IGJyZWFrOworCWNhc2UgMTE6CWMgKz0ga1syXSYweGZmZmZmZjsgYis9a1sxXTsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAxMDoJYyArPSBrWzJdJjB4ZmZmZjsgYis9a1sxXTsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAgOToJYyArPSBrWzJdJjB4ZmY7IGIrPWtbMV07IGErPWtbMF07IGJyZWFrOworCWNhc2UgIDg6CWIgKz0ga1sxXTsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAgNzoJYiArPSBrWzFdJjB4ZmZmZmZmOyBhKz1rWzBdOyBicmVhazsKKwljYXNlICA2OgliICs9IGtbMV0mMHhmZmZmOyBhKz1rWzBdOyBicmVhazsKKwljYXNlICA1OgliICs9IGtbMV0mMHhmZjsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAgNDoJYSArPSBrWzBdOyBicmVhazsKKwljYXNlICAzOglhICs9IGtbMF0mMHhmZmZmZmY7IGJyZWFrOworCWNhc2UgIDI6CWEgKz0ga1swXSYweGZmZmY7IGJyZWFrOworCWNhc2UgIDE6CWEgKz0ga1swXSYweGZmOyBicmVhazsKKwljYXNlICAwOglnb3RvIGV4aXQ7CisJfQorCisjZWxzZSAvKiBtYWtlIHZhbGdyaW5kIGhhcHB5ICovCisKKwlrOCA9IChjb25zdCB1aW50OF90ICopazsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDEyOgljICs9IGtbMl07IGIrPWtbMV07IGErPWtbMF07CWJyZWFrOworCWNhc2UgMTE6CWMgKz0gKCh1aW50MzJfdClrOFsxMF0pPDwxNjsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlIDEwOgljICs9ICgodWludDMyX3QpazhbOV0pPDw4OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDk6CWMgKz0gazhbOF07CQkJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA4OgliICs9IGtbMV07IGErPWtbMF07CQlicmVhazsKKwljYXNlICA3OgliICs9ICgodWludDMyX3QpazhbNl0pPDwxNjsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA2OgliICs9ICgodWludDMyX3QpazhbNV0pPDw4OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDU6CWIgKz0gazhbNF07CQkJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA0OglhICs9IGtbMF07CQkJYnJlYWs7CisJY2FzZSAgMzoJYSArPSAoKHVpbnQzMl90KWs4WzJdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgMjoJYSArPSAoKHVpbnQzMl90KWs4WzFdKTw8ODsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAxOglhICs9IGs4WzBdOwkJCWJyZWFrOworCWNhc2UgIDA6CWdvdG8gZXhpdDsKKwl9CisKKyNlbmRpZiAvKiAhdmFsZ3JpbmQgKi8KKworICAgIH0gZWxzZSBpZiAoSEFTSF9MSVRUTEVfRU5ESUFOICYmICgodS5pICYgMHgxKSA9PSAwKSkgeworCWNvbnN0IHVpbnQxNl90ICprID0gKGNvbnN0IHVpbnQxNl90ICopa2V5OwkvKiByZWFkIDE2LWJpdCBjaHVua3MgKi8KKwljb25zdCB1aW50OF90ICAqazg7CisKKwkvKi0tLS0tLS0tLS0tIGFsbCBidXQgbGFzdCBibG9jazogYWxpZ25lZCByZWFkcyBhbmQgZGlmZmVyZW50IG1peGluZyAqLworCXdoaWxlIChzaXplID4gKHNpemVfdCkxMikgeworCSAgICBhICs9IGtbMF0gKyAoKCh1aW50MzJfdClrWzFdKTw8MTYpOworCSAgICBiICs9IGtbMl0gKyAoKCh1aW50MzJfdClrWzNdKTw8MTYpOworCSAgICBjICs9IGtbNF0gKyAoKCh1aW50MzJfdClrWzVdKTw8MTYpOworCSAgICBfSkxVM19NSVgoYSxiLGMpOworCSAgICBzaXplIC09IDEyOworCSAgICBrICs9IDY7CisJfQorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGhhbmRsZSB0aGUgbGFzdCAocHJvYmFibHkgcGFydGlhbCkgYmxvY2sgKi8KKwlrOCA9IChjb25zdCB1aW50OF90ICopazsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDEyOgorCSAgICBjICs9IGtbNF0rKCgodWludDMyX3Qpa1s1XSk8PDE2KTsKKwkgICAgYiArPSBrWzJdKygoKHVpbnQzMl90KWtbM10pPDwxNik7CisJICAgIGEgKz0ga1swXSsoKCh1aW50MzJfdClrWzFdKTw8MTYpOworCSAgICBicmVhazsKKwljYXNlIDExOgorCSAgICBjICs9ICgodWludDMyX3QpazhbMTBdKTw8MTY7CisJICAgIC8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAxMDoKKwkgICAgYyArPSBrWzRdOworCSAgICBiICs9IGtbMl0rKCgodWludDMyX3Qpa1szXSk8PDE2KTsKKwkgICAgYSArPSBrWzBdKygoKHVpbnQzMl90KWtbMV0pPDwxNik7CisJICAgIGJyZWFrOworCWNhc2UgIDk6CisJICAgIGMgKz0gazhbOF07CisJICAgIC8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgODoKKwkgICAgYiArPSBrWzJdKygoKHVpbnQzMl90KWtbM10pPDwxNik7CisJICAgIGEgKz0ga1swXSsoKCh1aW50MzJfdClrWzFdKTw8MTYpOworCSAgICBicmVhazsKKwljYXNlICA3OgorCSAgICBiICs9ICgodWludDMyX3QpazhbNl0pPDwxNjsKKwkgICAgLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA2OgorCSAgICBiICs9IGtbMl07CisJICAgIGEgKz0ga1swXSsoKCh1aW50MzJfdClrWzFdKTw8MTYpOworCSAgICBicmVhazsKKwljYXNlICA1OgorCSAgICBiICs9IGs4WzRdOworCSAgICAvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDQ6CisJICAgIGEgKz0ga1swXSsoKCh1aW50MzJfdClrWzFdKTw8MTYpOworCSAgICBicmVhazsKKwljYXNlICAzOgorCSAgICBhICs9ICgodWludDMyX3QpazhbMl0pPDwxNjsKKwkgICAgLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAyOgorCSAgICBhICs9IGtbMF07CisJICAgIGJyZWFrOworCWNhc2UgIDE6CisJICAgIGEgKz0gazhbMF07CisJICAgIGJyZWFrOworCWNhc2UgIDA6CisJICAgIGdvdG8gZXhpdDsKKwl9CisKKyAgICB9IGVsc2UgewkJLyogbmVlZCB0byByZWFkIHRoZSBrZXkgb25lIGJ5dGUgYXQgYSB0aW1lICovCisJY29uc3QgdWludDhfdCAqayA9IChjb25zdCB1aW50OF90ICopa2V5OworCisJLyotLS0tLS0tLS0tLSBhbGwgYnV0IHRoZSBsYXN0IGJsb2NrOiBhZmZlY3Qgc29tZSAzMiBiaXRzIG9mIChhLGIsYykgKi8KKwl3aGlsZSAoc2l6ZSA+IChzaXplX3QpMTIpIHsKKwkgICAgYSArPSBrWzBdOworCSAgICBhICs9ICgodWludDMyX3Qpa1sxXSk8PDg7CisJICAgIGEgKz0gKCh1aW50MzJfdClrWzJdKTw8MTY7CisJICAgIGEgKz0gKCh1aW50MzJfdClrWzNdKTw8MjQ7CisJICAgIGIgKz0ga1s0XTsKKwkgICAgYiArPSAoKHVpbnQzMl90KWtbNV0pPDw4OworCSAgICBiICs9ICgodWludDMyX3Qpa1s2XSk8PDE2OworCSAgICBiICs9ICgodWludDMyX3Qpa1s3XSk8PDI0OworCSAgICBjICs9IGtbOF07CisJICAgIGMgKz0gKCh1aW50MzJfdClrWzldKTw8ODsKKwkgICAgYyArPSAoKHVpbnQzMl90KWtbMTBdKTw8MTY7CisJICAgIGMgKz0gKCh1aW50MzJfdClrWzExXSk8PDI0OworCSAgICBfSkxVM19NSVgoYSxiLGMpOworCSAgICBzaXplIC09IDEyOworCSAgICBrICs9IDEyOworCX0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsYXN0IGJsb2NrOiBhZmZlY3QgYWxsIDMyIGJpdHMgb2YgKGMpICovCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxMjoJYyArPSAoKHVpbnQzMl90KWtbMTFdKTw8MjQ7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAxMToJYyArPSAoKHVpbnQzMl90KWtbMTBdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAxMDoJYyArPSAoKHVpbnQzMl90KWtbOV0pPDw4OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDk6CWMgKz0ga1s4XTsJCQkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDg6CWIgKz0gKCh1aW50MzJfdClrWzddKTw8MjQ7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNzoJYiArPSAoKHVpbnQzMl90KWtbNl0pPDwxNjsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA2OgliICs9ICgodWludDMyX3Qpa1s1XSk8PDg7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNToJYiArPSBrWzRdOwkJCS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNDoJYSArPSAoKHVpbnQzMl90KWtbM10pPDwyNDsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAzOglhICs9ICgodWludDMyX3Qpa1syXSk8PDE2OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDI6CWEgKz0gKCh1aW50MzJfdClrWzFdKTw8ODsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAxOglhICs9IGtbMF07CisJICAgIGJyZWFrOworCWNhc2UgIDA6CisJICAgIGdvdG8gZXhpdDsKKwl9CisgICAgfQorCisgICAgX0pMVTNfRklOQUwoYSxiLGMpOworCitleGl0OgorICAgICpwYyA9IGM7CisgICAgKnBiID0gYjsKKyAgICByZXR1cm47Cit9CisjZW5kaWYJLyogZGVmaW5lZChfSkxVM19qbHUzMmxwYWlyKSAqLworCisjaWYgZGVmaW5lZChfSkxVM19qbHUzMmIpCit1aW50MzJfdCBqbHUzMmIodWludDMyX3QgaCwgLypAbnVsbEAqLyBjb25zdCB2b2lkICprZXksIHNpemVfdCBzaXplKQorCS8qQCovOworLyoKKyAqIGpsdTMyYigpOgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBqbHUzMncoKSBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLiAgSXQgaXMgZGlmZmVyZW50CisgKiBmcm9tIGpsdTMybCgpIG9uIGFsbCBtYWNoaW5lcy4gIGpsdTMyYigpIHRha2VzIGFkdmFudGFnZSBvZgorICogYmlnLWVuZGlhbiBieXRlIG9yZGVyaW5nLiAKKyAqCisgKiBAcGFyYW0gaAkJdGhlIHByZXZpb3VzIGhhc2gsIG9yIGFuIGFyYml0cmFyeSB2YWx1ZQorICogQHBhcmFtICprCQl0aGUga2V5LCBhbiBhcnJheSBvZiB1aW50OF90IHZhbHVlcworICogQHBhcmFtIHNpemUJCXRoZSBzaXplIG9mIHRoZSBrZXkKKyAqIEByZXR1cm4JCXRoZSBsb29rdXAzIGhhc2gKKyAqLwordWludDMyX3Qgamx1MzJiKHVpbnQzMl90IGgsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUpCit7CisgICAgdW5pb24geyBjb25zdCB2b2lkICpwdHI7IHNpemVfdCBpOyB9IHU7CisgICAgdWludDMyX3QgYSA9IF9KTFUzX0lOSVQoaCwgc2l6ZSk7CisgICAgdWludDMyX3QgYiA9IGE7CisgICAgdWludDMyX3QgYyA9IGE7CisKKyAgICBpZiAoa2V5ID09IE5VTEwpCisJcmV0dXJuIGg7CisKKyAgICB1LnB0ciA9IGtleTsKKyAgICBpZiAoSEFTSF9CSUdfRU5ESUFOICYmICgodS5pICYgMHgzKSA9PSAwKSkgeworCWNvbnN0IHVpbnQzMl90ICprID0gKGNvbnN0IHVpbnQzMl90ICopa2V5OwkvKiByZWFkIDMyLWJpdCBjaHVua3MgKi8KKyNpZmRlZglWQUxHUklORAorCWNvbnN0IHVpbnQ4X3QgICprODsKKyNlbmRpZgorCisJLyotLSBhbGwgYnV0IGxhc3QgYmxvY2s6IGFsaWduZWQgcmVhZHMgYW5kIGFmZmVjdCAzMiBiaXRzIG9mIChhLGIsYykgKi8KKwl3aGlsZSAoc2l6ZSA+IDEyKSB7CisJICAgIGEgKz0ga1swXTsKKwkgICAgYiArPSBrWzFdOworCSAgICBjICs9IGtbMl07CisJICAgIF9KTFUzX01JWChhLGIsYyk7CisJICAgIHNpemUgLT0gMTI7CisJICAgIGsgKz0gMzsKKwl9CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGFuZGxlIHRoZSBsYXN0IChwcm9iYWJseSBwYXJ0aWFsKSBibG9jayAqLworCS8qIAorCSAqICJrWzJdPDw4IiBhY3R1YWxseSByZWFkcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBidXQKKwkgKiB0aGVuIHNoaWZ0cyBvdXQgdGhlIHBhcnQgaXQncyBub3QgYWxsb3dlZCB0byByZWFkLiAgQmVjYXVzZSB0aGUKKwkgKiBzdHJpbmcgaXMgYWxpZ25lZCwgdGhlIGlsbGVnYWwgcmVhZCBpcyBpbiB0aGUgc2FtZSB3b3JkIGFzIHRoZQorCSAqIHJlc3Qgb2YgdGhlIHN0cmluZy4gIEV2ZXJ5IG1hY2hpbmUgd2l0aCBtZW1vcnkgcHJvdGVjdGlvbiBJJ3ZlIHNlZW4KKwkgKiBkb2VzIGl0IG9uIHdvcmQgYm91bmRhcmllcywgc28gaXMgT0sgd2l0aCB0aGlzLiAgQnV0IFZBTEdSSU5EIHdpbGwKKwkgKiBzdGlsbCBjYXRjaCBpdCBhbmQgY29tcGxhaW4uICBUaGUgbWFza2luZyB0cmljayBkb2VzIG1ha2UgdGhlIGhhc2gKKwkgKiBub3RpY2FibHkgZmFzdGVyIGZvciBzaG9ydCBzdHJpbmdzIChsaWtlIEVuZ2xpc2ggd29yZHMpLgorCSAqLworI2lmbmRlZiBWQUxHUklORAorCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxMjoJYyArPSBrWzJdOyBiKz1rWzFdOyBhKz1rWzBdOyBicmVhazsKKwljYXNlIDExOgljICs9IGtbMl0mMHhmZmZmZmYwMDsgYis9a1sxXTsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAxMDoJYyArPSBrWzJdJjB4ZmZmZjAwMDA7IGIrPWtbMV07IGErPWtbMF07IGJyZWFrOworCWNhc2UgIDk6CWMgKz0ga1syXSYweGZmMDAwMDAwOyBiKz1rWzFdOyBhKz1rWzBdOyBicmVhazsKKwljYXNlICA4OgliICs9IGtbMV07IGErPWtbMF07IGJyZWFrOworCWNhc2UgIDc6CWIgKz0ga1sxXSYweGZmZmZmZjAwOyBhKz1rWzBdOyBicmVhazsKKwljYXNlICA2OgliICs9IGtbMV0mMHhmZmZmMDAwMDsgYSs9a1swXTsgYnJlYWs7CisJY2FzZSAgNToJYiArPSBrWzFdJjB4ZmYwMDAwMDA7IGErPWtbMF07IGJyZWFrOworCWNhc2UgIDQ6CWEgKz0ga1swXTsgYnJlYWs7CisJY2FzZSAgMzoJYSArPSBrWzBdJjB4ZmZmZmZmMDA7IGJyZWFrOworCWNhc2UgIDI6CWEgKz0ga1swXSYweGZmZmYwMDAwOyBicmVhazsKKwljYXNlICAxOglhICs9IGtbMF0mMHhmZjAwMDAwMDsgYnJlYWs7CisJY2FzZSAgMDoJZ290byBleGl0OworICAgIH0KKworI2Vsc2UgIC8qIG1ha2UgdmFsZ3JpbmQgaGFwcHkgKi8KKworCWs4ID0gKGNvbnN0IHVpbnQ4X3QgKilrOworCXN3aXRjaCAoc2l6ZSkgewkvKiBhbGwgdGhlIGNhc2Ugc3RhdGVtZW50cyBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDEyOgljICs9IGtbMl07IGIrPWtbMV07IGErPWtbMF07CWJyZWFrOworCWNhc2UgMTE6CWMgKz0gKCh1aW50MzJfdClrOFsxMF0pPDw4OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgMTA6CWMgKz0gKCh1aW50MzJfdClrOFs5XSk8PDE2OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDk6CWMgKz0gKCh1aW50MzJfdClrOFs4XSk8PDI0OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDg6CWIgKz0ga1sxXTsgYSs9a1swXTsJCWJyZWFrOworCWNhc2UgIDc6CWIgKz0gKCh1aW50MzJfdClrOFs2XSk8PDg7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNjoJYiArPSAoKHVpbnQzMl90KWs4WzVdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNToJYiArPSAoKHVpbnQzMl90KWs4WzRdKTw8MjQ7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNDoJYSArPSBrWzBdOwkJCWJyZWFrOworCWNhc2UgIDM6CWEgKz0gKCh1aW50MzJfdClrOFsyXSk8PDg7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgMjoJYSArPSAoKHVpbnQzMl90KWs4WzFdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgMToJYSArPSAoKHVpbnQzMl90KWs4WzBdKTw8MjQ7CWJyZWFrOworCWNhc2UgIDA6CWdvdG8gZXhpdDsKKyAgICB9CisKKyNlbmRpZiAvKiAhVkFMR1JJTkQgKi8KKworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbmVlZCB0byByZWFkIHRoZSBrZXkgb25lIGJ5dGUgYXQgYSB0aW1lICovCisJY29uc3QgdWludDhfdCAqayA9IChjb25zdCB1aW50OF90ICopa2V5OworCisJLyotLS0tLS0tLS0tLSBhbGwgYnV0IHRoZSBsYXN0IGJsb2NrOiBhZmZlY3Qgc29tZSAzMiBiaXRzIG9mIChhLGIsYykgKi8KKwl3aGlsZSAoc2l6ZSA+IDEyKSB7CisJICAgIGEgKz0gKCh1aW50MzJfdClrWzBdKTw8MjQ7CisJICAgIGEgKz0gKCh1aW50MzJfdClrWzFdKTw8MTY7CisJICAgIGEgKz0gKCh1aW50MzJfdClrWzJdKTw8ODsKKwkgICAgYSArPSAoKHVpbnQzMl90KWtbM10pOworCSAgICBiICs9ICgodWludDMyX3Qpa1s0XSk8PDI0OworCSAgICBiICs9ICgodWludDMyX3Qpa1s1XSk8PDE2OworCSAgICBiICs9ICgodWludDMyX3Qpa1s2XSk8PDg7CisJICAgIGIgKz0gKCh1aW50MzJfdClrWzddKTsKKwkgICAgYyArPSAoKHVpbnQzMl90KWtbOF0pPDwyNDsKKwkgICAgYyArPSAoKHVpbnQzMl90KWtbOV0pPDwxNjsKKwkgICAgYyArPSAoKHVpbnQzMl90KWtbMTBdKTw8ODsKKwkgICAgYyArPSAoKHVpbnQzMl90KWtbMTFdKTsKKwkgICAgX0pMVTNfTUlYKGEsYixjKTsKKwkgICAgc2l6ZSAtPSAxMjsKKwkgICAgayArPSAxMjsKKwl9CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbGFzdCBibG9jazogYWZmZWN0IGFsbCAzMiBiaXRzIG9mIChjKSAqLworCXN3aXRjaCAoc2l6ZSkgewkvKiBhbGwgdGhlIGNhc2Ugc3RhdGVtZW50cyBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDEyOgljICs9IGtbMTFdOwkJCS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAxMToJYyArPSAoKHVpbnQzMl90KWtbMTBdKTw8ODsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlIDEwOgljICs9ICgodWludDMyX3Qpa1s5XSk8PDE2OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDk6CWMgKz0gKCh1aW50MzJfdClrWzhdKTw8MjQ7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgODoJYiArPSBrWzddOwkJCS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNzoJYiArPSAoKHVpbnQzMl90KWtbNl0pPDw4OwkvKkBmYWxsdGhyb3VnaEAqLworCWNhc2UgIDY6CWIgKz0gKCh1aW50MzJfdClrWzVdKTw8MTY7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgNToJYiArPSAoKHVpbnQzMl90KWtbNF0pPDwyNDsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICA0OglhICs9IGtbM107CQkJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAzOglhICs9ICgodWludDMyX3Qpa1syXSk8PDg7CS8qQGZhbGx0aHJvdWdoQCovCisJY2FzZSAgMjoJYSArPSAoKHVpbnQzMl90KWtbMV0pPDwxNjsJLypAZmFsbHRocm91Z2hAKi8KKwljYXNlICAxOglhICs9ICgodWludDMyX3Qpa1swXSk8PDI0OwkvKkBmYWxsdGhyb3VnaEAqLworCSAgICBicmVhazsKKwljYXNlICAwOgorCSAgICBnb3RvIGV4aXQ7CisJfQorICAgIH0KKworICAgIF9KTFUzX0ZJTkFMKGEsYixjKTsKKworZXhpdDoKKyAgICByZXR1cm4gYzsKK30KKyNlbmRpZgkvKiBkZWZpbmVkKF9KTFUzX2psdTMyYikgKi8KKworI2lmIGRlZmluZWQoX0pMVTNfU0VMRlRFU1QpCisKKy8qIHVzZWQgZm9yIHRpbWluZ3MgKi8KK3N0YXRpYyB2b2lkIGRyaXZlcjEodm9pZCkKKwkvKkAqLworeworICAgIHVpbnQ4X3QgYnVmWzI1Nl07CisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCBoPTA7CisgICAgdGltZV90IGEsejsKKworICAgIHRpbWUoJmEpOworICAgIGZvciAoaT0wOyBpPDI1NjsgKytpKSBidWZbaV0gPSAneCc7CisgICAgZm9yIChpPTA7IGk8MTsgKytpKSB7CisJaCA9IGpsdTMybChoLCAmYnVmWzBdLCBzaXplb2YoYnVmWzBdKSk7CisgICAgfQorICAgIHRpbWUoJnopOworICAgIGlmICh6LWEgPiAwKSBwcmludGYoInRpbWUgJWQgJS44eFxuIiwgKGludCkoei1hKSwgaCk7Cit9CisKKy8qIGNoZWNrIHRoYXQgZXZlcnkgaW5wdXQgYml0IGNoYW5nZXMgZXZlcnkgb3V0cHV0IGJpdCBoYWxmIHRoZSB0aW1lICovCisjZGVmaW5lIEhBU0hTVEFURSAxCisjZGVmaW5lIEhBU0hMRU4gICAxCisjZGVmaW5lIE1BWFBBSVIgNjAKKyNkZWZpbmUgTUFYTEVOICA3MAorc3RhdGljIHZvaWQgZHJpdmVyMih2b2lkKQorCS8qQCovCit7CisgICAgdWludDhfdCBxYVtNQVhMRU4rMV0sIHFiW01BWExFTisyXSwgKmEgPSAmcWFbMF0sICpiID0gJnFiWzFdOworICAgIHVpbnQzMl90IGNbSEFTSFNUQVRFXSwgZFtIQVNIU1RBVEVdLCBpPTAsIGo9MCwgaywgbCwgbT0wLCB6OworICAgIHVpbnQzMl90IGVbSEFTSFNUQVRFXSxmW0hBU0hTVEFURV0sZ1tIQVNIU1RBVEVdLGhbSEFTSFNUQVRFXTsKKyAgICB1aW50MzJfdCB4W0hBU0hTVEFURV0seVtIQVNIU1RBVEVdOworICAgIHVpbnQzMl90IGhsZW47CisKKyAgICBwcmludGYoIk5vIG1vcmUgdGhhbiAlZCB0cmlhbHMgc2hvdWxkIGV2ZXIgYmUgbmVlZGVkIFxuIixNQVhQQUlSLzIpOworICAgIGZvciAoaGxlbj0wOyBobGVuIDwgTUFYTEVOOyArK2hsZW4pIHsKKwl6PTA7CisJZm9yIChpPTA7IGk8aGxlbjsgKytpKSB7CS8qLS0tLS0tLS0tLS0tLS0gZm9yIGVhY2ggaW5wdXQgYnl0ZSwgKi8KKwkgICAgZm9yIChqPTA7IGo8ODsgKytqKSB7CS8qLS0tLS0tLS0tLS0tLS0tIGZvciBlYWNoIGlucHV0IGJpdCwgKi8KKwkJZm9yIChtPTE7IG08ODsgKyttKSB7CS8qLS0tIGZvciBzZXJ2ZXJhbCBwb3NzaWJsZSBpbml0dmFscywgKi8KKwkJICAgIGZvciAobD0wOyBsPEhBU0hTVEFURTsgKytsKQorCQkJZVtsXT1mW2xdPWdbbF09aFtsXT14W2xdPXlbbF09figodWludDMyX3QpMCk7CisKKwkJICAgIC8qIGNoZWNrIHRoYXQgZXZlcnkgb3V0cHV0IGJpdCBpcyBhZmZlY3RlZCBieSB0aGF0IGlucHV0IGJpdCAqLworCQkgICAgZm9yIChrPTA7IGs8TUFYUEFJUjsgays9MikgeyAKKwkJCXVpbnQzMl90IGZpbmlzaGVkPTE7CisJCQkvKiBrZXlzIGhhdmUgb25lIGJpdCBkaWZmZXJlbnQgKi8KKwkJCWZvciAobD0wOyBsPGhsZW4rMTsgKytsKSB7YVtsXSA9IGJbbF0gPSAodWludDhfdCkwO30KKwkJCS8qIGhhdmUgYSBhbmQgYiBiZSB0d28ga2V5cyBkaWZmZXJpbmcgaW4gb25seSBvbmUgYml0ICovCisJCQlhW2ldIF49IChrPDxqKTsKKwkJCWFbaV0gXj0gKGs+Pig4LWopKTsKKwkJCWNbMF0gPSBqbHUzMmwobSwgYSwgaGxlbik7CisJCQliW2ldIF49ICgoaysxKTw8aik7CisJCQliW2ldIF49ICgoaysxKT4+KDgtaikpOworCQkJZFswXSA9IGpsdTMybChtLCBiLCBobGVuKTsKKwkJCS8qIGNoZWNrIGV2ZXJ5IGJpdCBpcyAxLCAwLCBzZXQsIGFuZCBub3Qgc2V0IGF0IGxlYXN0IG9uY2UgKi8KKwkJCWZvciAobD0wOyBsPEhBU0hTVEFURTsgKytsKSB7CisJCQkgICAgZVtsXSAmPSAoY1tsXV5kW2xdKTsKKwkJCSAgICBmW2xdICY9IH4oY1tsXV5kW2xdKTsKKwkJCSAgICBnW2xdICY9IGNbbF07CisJCQkgICAgaFtsXSAmPSB+Y1tsXTsKKwkJCSAgICB4W2xdICY9IGRbbF07CisJCQkgICAgeVtsXSAmPSB+ZFtsXTsKKwkJCSAgICBpZiAoZVtsXXxmW2xdfGdbbF18aFtsXXx4W2xdfHlbbF0pIGZpbmlzaGVkPTA7CisJCQl9CisJCQlpZiAoZmluaXNoZWQpIGJyZWFrOworCQkgICAgfQorCQkgICAgaWYgKGs+eikgej1rOworCQkgICAgaWYgKGsgPT0gTUFYUEFJUikgeworCQkJcHJpbnRmKCJTb21lIGJpdCBkaWRuJ3QgY2hhbmdlOiAiKTsKKwkJCXByaW50ZigiJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggICIsCisJCQkJZVswXSxmWzBdLGdbMF0saFswXSx4WzBdLHlbMF0pOworCQkJcHJpbnRmKCJpICVkIGogJWQgbSAlZCBsZW4gJWRcbiIsIGksIGosIG0sIGhsZW4pOworCQkgICAgfQorCQkgICAgaWYgKHogPT0gTUFYUEFJUikgZ290byBkb25lOworCQl9CisJICAgIH0KKwl9CisgICBkb25lOgorCWlmICh6IDwgTUFYUEFJUikgeworCSAgICBwcmludGYoIk1peCBzdWNjZXNzICAlMmQgYnl0ZXMgICUyZCBpbml0dmFscyAgIixpLG0pOworCSAgICBwcmludGYoInJlcXVpcmVkICAlZCAgdHJpYWxzXG4iLCB6LzIpOworCX0KKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworfQorCisvKiBDaGVjayBmb3IgcmVhZGluZyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBhbGlnbm1lbnQgcHJvYmxlbXMgKi8KK3N0YXRpYyB2b2lkIGRyaXZlcjModm9pZCkKKwkvKkAqLworeworICAgIHVpbnQ4X3QgYnVmW01BWExFTisyMF0sICpiOworICAgIHVpbnQzMl90IGxlbjsKKyAgICB1aW50OF90IHFbXSA9ICJUaGlzIGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZWlyIGNvdW50cnkuLi4iOworICAgIHVpbnQzMl90IGg7CisgICAgdWludDhfdCBxcVtdID0gInhUaGlzIGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZWlyIGNvdW50cnkuLi4iOworICAgIHVpbnQzMl90IGk7CisgICAgdWludDhfdCBxcXFbXSA9ICJ4eFRoaXMgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvIHRoZSBhaWQgb2YgdGhlaXIgY291bnRyeS4uLiI7CisgICAgdWludDMyX3QgajsKKyAgICB1aW50OF90IHFxcXFbXSA9ICJ4eHhUaGlzIGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZWlyIGNvdW50cnkuLi4iOworICAgIHVpbnQzMl90IHJlZix4LHk7CisgICAgdWludDhfdCAqcDsKKyAgICB1aW50MzJfdCBtID0gMTM7CisKKyAgICBwcmludGYoIkVuZGlhbm5lc3MuICBUaGVzZSBsaW5lcyBzaG91bGQgYWxsIGJlIHRoZSBzYW1lIChmb3IgdmFsdWVzIGZpbGxlZCBpbik6XG4iKTsKKyAgICBwcmludGYoIiUuOHggICAgICAgICAgICAgICAgICAgICAgICAgICAgJS44eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAlLjh4XG4iLAorCWpsdTMydyhtLCAoY29uc3QgdWludDMyX3QgKilxLCAoc2l6ZW9mKHEpLTEpLzQpLAorCWpsdTMydyhtLCAoY29uc3QgdWludDMyX3QgKilxLCAoc2l6ZW9mKHEpLTUpLzQpLAorCWpsdTMydyhtLCAoY29uc3QgdWludDMyX3QgKilxLCAoc2l6ZW9mKHEpLTkpLzQpKTsKKyAgICBwID0gcTsKKyAgICBwcmludGYoIiUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4XG4iLAorCWpsdTMybChtLCBwLCBzaXplb2YocSktMSksIGpsdTMybChtLCBwLCBzaXplb2YocSktMiksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS0zKSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS00KSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTUpLCBqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTYpLAorCWpsdTMybChtLCBwLCBzaXplb2YocSktNyksIGpsdTMybChtLCBwLCBzaXplb2YocSktOCksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS05KSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS0xMCksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS0xMSksIGpsdTMybChtLCBwLCBzaXplb2YocSktMTIpKTsKKyAgICBwID0gJnFxWzFdOworICAgIHByaW50ZigiJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHhcbiIsCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS0xKSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS0yKSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTMpLCBqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTQpLAorCWpsdTMybChtLCBwLCBzaXplb2YocSktNSksIGpsdTMybChtLCBwLCBzaXplb2YocSktNiksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS03KSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS04KSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTkpLCBqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTEwKSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTExKSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS0xMikpOworICAgIHAgPSAmcXFxWzJdOworICAgIHByaW50ZigiJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHhcbiIsCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS0xKSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS0yKSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTMpLCBqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTQpLAorCWpsdTMybChtLCBwLCBzaXplb2YocSktNSksIGpsdTMybChtLCBwLCBzaXplb2YocSktNiksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS03KSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS04KSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTkpLCBqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTEwKSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTExKSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS0xMikpOworICAgIHAgPSAmcXFxcVszXTsKKyAgICBwcmludGYoIiUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eCAlLjh4XG4iLAorCWpsdTMybChtLCBwLCBzaXplb2YocSktMSksIGpsdTMybChtLCBwLCBzaXplb2YocSktMiksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS0zKSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS00KSwKKwlqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTUpLCBqbHUzMmwobSwgcCwgc2l6ZW9mKHEpLTYpLAorCWpsdTMybChtLCBwLCBzaXplb2YocSktNyksIGpsdTMybChtLCBwLCBzaXplb2YocSktOCksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS05KSwgamx1MzJsKG0sIHAsIHNpemVvZihxKS0xMCksCisJamx1MzJsKG0sIHAsIHNpemVvZihxKS0xMSksIGpsdTMybChtLCBwLCBzaXplb2YocSktMTIpKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgZm9yIChoPTAsIGI9YnVmKzE7IGg8ODsgKytoLCArK2IpIHsKKwlmb3IgKGk9MDsgaTxNQVhMRU47ICsraSkgeworCSAgICBsZW4gPSBpOworCSAgICBmb3IgKGo9MDsgajxpOyArK2opCisJCSooYitqKT0wOworCisJICAgIC8qIHRoZXNlIHNob3VsZCBhbGwgYmUgZXF1YWwgKi8KKwkgICAgbSA9IDE7CisJICAgIHJlZiA9IGpsdTMybChtLCBiLCBsZW4pOworCSAgICAqKGIraSk9KHVpbnQ4X3QpfjA7CisJICAgICooYi0xKT0odWludDhfdCl+MDsKKwkgICAgeCA9IGpsdTMybChtLCBiLCBsZW4pOworCSAgICB5ID0gamx1MzJsKG0sIGIsIGxlbik7CisJICAgIGlmICgocmVmICE9IHgpIHx8IChyZWYgIT0geSkpIAorCQlwcmludGYoImFsaWdubWVudCBlcnJvcjogJS44eCAlLjh4ICUuOHggJWQgJWRcbiIscmVmLHgseSwgaCwgaSk7CisJfQorICAgIH0KK30KKworLyogY2hlY2sgZm9yIHByb2JsZW1zIHdpdGggbnVsbHMgKi8KK3N0YXRpYyB2b2lkIGRyaXZlcjQodm9pZCkKKwkvKkAqLworeworICAgIHVpbnQ4X3QgYnVmWzFdOworICAgIHVpbnQzMl90IGg7CisgICAgdWludDMyX3QgaTsKKyAgICB1aW50MzJfdCBzdGF0ZVtIQVNIU1RBVEVdOworCisgICAgYnVmWzBdID0gfjA7CisgICAgZm9yIChpPTA7IGk8SEFTSFNUQVRFOyArK2kpCisJc3RhdGVbaV0gPSAxOworICAgIHByaW50ZigiVGhlc2Ugc2hvdWxkIGFsbCBiZSBkaWZmZXJlbnRcbiIpOworICAgIGggPSAwOworICAgIGZvciAoaT0wOyBpPDg7ICsraSkgeworCWggPSBqbHUzMmwoaCwgYnVmLCAwKTsKKwlwcmludGYoIiUybGQgIDAtYnl0ZSBzdHJpbmdzLCBoYXNoIGlzICAlLjh4XG4iLCAobG9uZylpLCBoKTsKKyAgICB9Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKyAgICBkcml2ZXIxKCk7CS8qIHRlc3QgdGhhdCB0aGUga2V5IGlzIGhhc2hlZDogdXNlZCBmb3IgdGltaW5ncyAqLworICAgIGRyaXZlcjIoKTsJLyogdGVzdCB0aGF0IHdob2xlIGtleSBpcyBoYXNoZWQgdGhvcm91Z2hseSAqLworICAgIGRyaXZlcjMoKTsJLyogdGVzdCB0aGF0IG5vdGhpbmcgYnV0IHRoZSBrZXkgaXMgaGFzaGVkICovCisgICAgZHJpdmVyNCgpOwkvKiB0ZXN0IGhhc2hpbmcgbXVsdGlwbGUgYnVmZmVycyAoYWxsIGJ1ZmZlcnMgYXJlIG51bGwpICovCisgICAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAgLyogX0pMVTNfU0VMRlRFU1QgKi8KZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9sdG1haW4uc2ggYi9wb3B0LTEuMTYvbHRtYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY5MzlkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvbHRtYWluLnNoCkBAIC0wLDAgKzEsODQwNiBAQAorIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaC4KKworIyBsdG1haW4uc2ggKEdOVSBsaWJ0b29sKSAyLjIuNgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorIworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisjIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorIyAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKKyMgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgLWgsIC0taGVscCAgICAgICAgICAgICAgIHByaW50IHNob3J0IG9yIGxvbmcgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyMgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworIyAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuCisjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorIworIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorIworIyAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyMgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgJHByb2duYW1lOgkJKEdOVSBsaWJ0b29sKSAyLjIuNgorIyAgICAgICBhdXRvbWFrZToJCSRhdXRvbWFrZV92ZXJzaW9uCisjICAgICAgIGF1dG9jb25mOgkJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorCitQUk9HUkFNPWx0bWFpbi5zaAorUEFDS0FHRT1saWJ0b29sCitWRVJTSU9OPTIuMi42CitUSU1FU1RBTVA9IiIKK3BhY2thZ2VfcmV2aXNpb249MS4zMDEyCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCisjIE9ubHkgc2V0IExBTkcgYW5kIExDX0FMTCB0byBDIGlmIGFscmVhZHkgc2V0LgorIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKKyMgZS5nLiBMQU5HPUMgKG5vdGFibHkgU0NPKS4KK2x0X3VzZXJfbG9jYWxlPQorbHRfc2FmZV9sb2NhbGU9Citmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK2RvCisgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKKyAgICAgICAgICAkbHRfdmFyPUMKKwkgIGV4cG9ydCAkbHRfdmFyCisJICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgorCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorCWZpIgorZG9uZQorCiskbHRfdW5zZXQgQ0RQQVRICisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7RUNITz0iZWNobyJ9Cis6ICR7RUdSRVA9Ii9iaW4vZ3JlcCAtRSJ9Cis6ICR7RkdSRVA9Ii9iaW4vZ3JlcCAtRiJ9Cis6ICR7R1JFUD0iL2Jpbi9ncmVwIn0KKzogJHtMTl9TPSJsbiAtcyJ9Cis6ICR7TUFLRT0ibWFrZSJ9Cis6ICR7TUtESVI9Im1rZGlyIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9Cis6ICR7U0VEPSIvYmluL3NlZCJ9Cis6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKzogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKK0VYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CitsdF9ubD0nCisnCitJRlM9IiAJJGx0X25sIgorCitkaXJuYW1lPSJzLC9bXi9dKiQsLCIKK2Jhc2VuYW1lPSJzLF4uKi8sLCIKKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorfQorCisjIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS4KKworIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorIyBmdW5jdGlvbi4KK3Byb2dwYXRoPSIkMCIKKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06CisjIEluIHRoZSB1bmxpa2VseSBldmVudCAkcHJvZ25hbWUgYmVnYW4gd2l0aCBhICctJywgaXQgd291bGQgcGxheSBoYXZvYyB3aXRoCisjIGZ1bmNfZWNobyAoaW1hZ2luZSBwcm9nbmFtZT0tbiksIHNvIHdlIHByZXBlbmQgLi8gaW4gdGhhdCBjYXNlOgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJHByb2dwYXRoIgorcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CitjYXNlICRwcm9nbmFtZSBpbgorICAtKikgcHJvZ25hbWU9Li8kcHJvZ25hbWUgOzsKK2VzYWMKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7CisgICopCisgICAgIHNhdmVfSUZTPSIkSUZTIgorICAgICBJRlM9OgorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgorfQorCisjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIlgkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiWCRteV9kaXJfbGlzdCIgfCAkWHNlZCAtZSAncyw6KiQsLCdgCisKKyAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisgICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KKwlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAorICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQorICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisKKyAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KKyAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgorICAgIGZpCit9CisKKworIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQorIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZworIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgorIyBnaXZlbiwgU1RSSU5HIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCitmdW5jX21rdGVtcGRpciAoKQoreworICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKKworICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgorICAgIGVsc2UKKworICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAorICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorCisgICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKKyAgICAgICAgdW1hc2sgMDA3NworICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCisgICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzaworICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCisgICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgorICAgIGZpCisKKyAgICAkRUNITyAiWCRteV90bXBkaXIiIHwgJFhzZWQKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCisjIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcworIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCisjIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCitmdW5jX3F1b3RlX2Zvcl9ldmFsICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJcJF0qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiWCQxIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiWCQxIiB8ICRYc2VkIFwKKwkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgbXlfYXJnPSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRteV9hcmcgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgbXlfYXJnPSJcIiRteV9hcmdcIiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorfQorCisKKyMgZnVuY19zaG93X2V2YWwgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY19zaG93X2V2YWxfbG9jYWxlIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCitmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbHRfdXNlcl9sb2NhbGUKKwkgICAgJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgZXZhbCAiJGx0X3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworCisKKworIyBmdW5jX3ZlcnNpb24KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCit7CisgICAgJFNFRCAtbiAnL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisgICAgICAgIHAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgICBleGl0ICQ/Cit9CisKKyMgZnVuY191c2FnZQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgLWgvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KKwlwCisgICAgfScgPCAiJHByb2dwYXRoIgorICAgICRFQ0hPCisgICAgJEVDSE8gInJ1biBcYCRwcm9nbmFtZSAtLWhlbHAgfCBtb3JlJyBmb3IgZnVsbCB1c2FnZSIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19oZWxwCisjIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY19oZWxwICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKKwlzKlwkaG9zdConIiRob3N0IicqCisJcypcJFNIRUxMKiciJFNIRUxMIicqCisJcypcJExUQ0MqJyIkTFRDQyInKgorCXMqXCRMVENGTEFHUyonIiRMVENGTEFHUyInKgorCXMqXCRMRConIiRMRCInKgorCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLworCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYChhdXRvbWFrZSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAorIyBleGl0X2NtZC4KK2Z1bmNfbWlzc2luZ19hcmcgKCkKK3sKKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMSIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKK2V4aXRfY21kPToKKworCisKKworCisjIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgJEVDSE8uCitpZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlICRFQ0hPIHdpbGwgd29yay4KKyAgZXhlYyAkU0hFTEwgIiRwcm9ncGF0aCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxFT0YKKyQqCitFT0YKKyAgZXhpdCAkRVhJVF9TVUNDRVNTCitmaQorCittYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCittYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKKworIyBHbG9iYWwgdmFyaWFibGVzLgorIyAkbW9kZSBpcyB1bnNldAorbm9ub3B0PQorZXhlY3V0ZV9kbGZpbGVzPQorcHJlc2VydmVfYXJncz0KK2xvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKK28ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKK2V4dHJhY3RlZF9hcmNoaXZlcz0KK2V4dHJhY3RlZF9zZXJpYWw9MAorCitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2R1cGxpY2F0ZV9kZXBzPWZhbHNlCitvcHRfc2lsZW50PWZhbHNlCitvcHRfZGVidWc9OgorCisjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorZXhlY19jbWQ9CisKKyMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19lcnJvciAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKK30KKworCisjIGZ1bmNfY29uZmlnCisjIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KK2Z1bmNfY29uZmlnICgpCit7CisgICAgcmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRPT0wnCisgICAgcmVfZW5kY2Y9J14jICMjIyBFTkQgTElCVE9PTCcKKworICAgICMgRGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgICRTRUQgIjEsLyRyZV9iZWdpbmNmIENPTkZJRy9kOy8kcmVfZW5kY2YgQ09ORklHLyxcJGQiIDwgIiRwcm9ncGF0aCIKKworICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCisgICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCisgICAgICAkU0VEIC1uICIvJHJlX2JlZ2luY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC8sLyRyZV9lbmRjZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkL3AiIDwgIiRwcm9ncGF0aCIKKyAgICBkb25lCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19mZWF0dXJlcworIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCitmdW5jX2ZlYXR1cmVzICgpCit7CisgICAgJEVDSE8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAkRUNITyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgJEVDSE8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICRFQ0hPICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICAkRUNITyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgIyBHbG9iYWwgdmFyaWFibGU6CisgIHRhZ25hbWU9IiQxIgorCisgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisKKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICBjYXNlICR0YWduYW1lIGluCisgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICA7OworICBlc2FjCisKKyAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICBDQykgOzsKKyAgICAqKQorICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKworCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwlldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworfQorCisjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorIyB0aGUgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYGxpYnRvb2wgLS12ZXJzaW9uJyBoYXBwZW4gcXVpY2tseS4KK3sKKworICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgY2FzZSAkMSBpbgorICBjbGVhbnxjbGVhfGNsZXxjbCkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBsaW5rfGxpbnxsaXxsKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgICMgUGFyc2Ugbm9uLW1vZGUgc3BlY2lmaWMgYXJndW1lbnRzOgorICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgb3B0PSIkMSIKKyAgICBzaGlmdAorCisgICAgY2FzZSAkb3B0IGluCisgICAgICAtLWNvbmZpZykJCWZ1bmNfY29uZmlnCQkJCQk7OworCisgICAgICAtLWRlYnVnKQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKwkJCW9wdF9kZWJ1Zz0nc2V0IC14JworCQkJJG9wdF9kZWJ1ZworCQkJOzsKKworICAgICAgLWRsb3BlbikJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICQxIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OworICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKyAgICAgIC0tZmluaXNoKQkJbW9kZT0iZmluaXNoIgkJCQkJOzsKKworICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCisJCQljYXNlICQxIGluCisJCQkgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisJCQkgIGNsZWFuKQk7OworCQkJICBjb21waWxlKQk7OworCQkJICBleGVjdXRlKQk7OworCQkJICBmaW5pc2gpCTs7CisJCQkgIGluc3RhbGwpCTs7CisJCQkgIGxpbmspCQk7OworCQkJICByZWxpbmspCTs7CisJCQkgIHVuaW5zdGFsbCkJOzsKKworCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKwkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKwkJCSAgICAgZXhpdF9jbWQ9ZXhpdAorCQkJICAgICBicmVhaworCQkJICAgICA7OworCQkgICAgICAgIGVzYWMKKworCQkJbW9kZT0iJDEiCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKwkJCW9wdF9kdXBsaWNhdGVfZGVwcz06CQkJCTs7CisKKyAgICAgIC0tcXVpZXR8LS1zaWxlbnQpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PToKKwkJCTs7CisKKyAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PWZhbHNlCisJCQk7OworCisgICAgICAtLXRhZykJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCAkMSIKKwkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtZGxvcGVuPSp8LS1tb2RlPSp8LS10YWc9KikKKwkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQkJOzsKKyAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQkJOzsKKworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKworICAgICAgKikJCW5vbm9wdD0iJG9wdCIKKwkJCWJyZWFrCisJCQk7OworICAgIGVzYWMKKyAgZG9uZQorCisKKyAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICA7OworICAgICopCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfZHVwbGljYXRlX2RlcHMKKyAgICAgIDs7CisgIGVzYWMKKworICAjIEhhdmluZyB3YXJuZWQgYWJvdXQgYWxsIG1pcy1zcGVjaWZpZWQgb3B0aW9ucywgYmFpbCBvdXQgaWYKKyAgIyBhbnl0aGluZyB3YXMgd3JvbmcuCisgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgIGZpCisKKyAgICBleGl0ICRFWElUX01JU01BVENICisgIGZpCit9CisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCiskb3B0X2hlbHAgfHwgeworICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgZmkKKworICB0ZXN0IC16ICIkbW9kZSIgJiYgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFLiIKKworCisgICMgRGFyd2luIHN1Y2tzCisgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKworICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKyAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKKworICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCit9CisKKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIFwKKyAgICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OworCSAgICBlc2FjCisJZG9uZQorCWV4ZWMgMDwmNSA1PCYtCisgICAgZmkKKyAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0CisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKK3sKKyAgICBmdW5jX2xhbGliX3AgIiQxIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIiCisgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSI7IHRoZW4KKwlmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisJZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorICAgIGZpCit9CisKKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCit9CisKKworIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAorIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKyMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCisjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19pbmZlcl90YWcgYXJnCisjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCisjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisjIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KKyMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCitmdW5jX2luZmVyX3RhZyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorICAgICAgQ0NfcXVvdGVkPQorICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGRvbmUKKyAgICAgIGNhc2UgJEAgaW4KKyAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCisgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKSA7OworICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKKyAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KKyAgICAgICopCisJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbworCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgorCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgorCSAgICBDQ19xdW90ZWQ9CisJICAgIGZvciBhcmcgaW4gJENDOyBkbworCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICAgIGRvbmUKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKQorCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCisJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorCSAgICAgIHRhZ25hbWU9JHoKKwkgICAgICBicmVhaworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZG9uZQorCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCisJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAorCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JHsxfQorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfbG9iaj1ub25lCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCitwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCisKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKKworRU9GCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgfQorfQorCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJOzsKKworICAgICAgdGFyZ2V0ICkKKwlsaWJvYmo9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorCSAgYXJnX21vZGU9dGFyZ2V0CisJICBjb250aW51ZQorCSAgOzsKKworCS1waWUgfCAtZnBpZSB8IC1mUElFKQorICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGxhdGVyPSIkbGF0ZXIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLW5vLXN1cHByZXNzKQorCSAgc3VwcHJlc3Nfb3B0PW5vCisJICBjb250aW51ZQorCSAgOzsKKworCS1YY29tcGlsZXIpCisJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisJICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgorCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KKworCS1XYywqKQorCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBsYXN0YXJnPQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorCSAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSIkc3JjZmlsZSIKKwkgIHNyY2ZpbGU9IiRhcmciCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKyAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZSAjIGZvciBhcmcKKworICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgYXJnKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgorICAgICAgOzsKKyAgICB0YXJnZXQpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB9CisgICAgICA7OworICAgIGVzYWMKKworICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCisgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLltjQ0ZTaWZtc29dIHwgXAorICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKKyAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5vYmogfCAqLnN4KQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCisgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKKworICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZWxzZQorICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGZpCisKKyAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgZmkKKworICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnIC1lICdzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmo9CisgICAgICBuZWVkX2xvY2tzPW5vCisgICAgICBsb2NrZmlsZT0KKyAgICBmaQorCisgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisKKyAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKyAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKKyAgICBmaQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKworICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCisgICAgICBmaQorCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKKyAgICAgIGVsc2UKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKwljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgorCisgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKwlyZW1vdmVsaXN0PSRsb2NrZmlsZQorICAgICAgICAkUk0gIiRsb2NrZmlsZSIKKyAgICAgIGZpCisgICAgfQorCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKKyRvcHRfaGVscCB8fCB7Cit0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorfQorCitmdW5jX21vZGVfaGVscCAoKQoreworICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorICAgIGNhc2UgJG1vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGRpbmcgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisKK0NPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCitmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgorCitUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCBcYC5jJyB3aXRoIHRoZQorbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgorICAgICAgICA7OworCisgICAgICBleGVjdXRlKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgorCitBdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKKworVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gXGAtZGxvcGVuJworZmxhZ3MuCisKK0lmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKK2ludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQorZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisKK1RoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgorICAgICAgICA7OworCisgICAgICBmaW5pc2gpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KKworQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKworRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KKworVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCit0aGUgXGAtLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKKyAgICAgICAgOzsKKworICAgICAgaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWluc3RhbGwgSU5TVEFMTC1DT01NQU5ELi4uCisKK0luc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgorCitJTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKK2VpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtaW5zdC1wcmVmaXggUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQorICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scworICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQorICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKKyAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAorICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCisgIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCisgIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAorICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQorICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKKyAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCisgIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cworICAtb2JqZWN0bGlzdCBGSUxFICBVc2UgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyBmb3VuZCBpbiBGSUxFIHRvIHNwZWNpZnkgb2JqZWN0cworICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIG91dHB1dCBmaWxlcyBtYXRjaGluZyBSRUdFWAorICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgorICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCisgIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCisgIC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zaHJleHQgU1VGRklYICAgIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBzaGFyZWQgbGlicmFyeSBmaWxlIGV4dGVuc2lvbgorICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAtc3RhdGljLWxpYnRvb2wtbGlicworICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCisgIC13ZWFrIExJQk5BTUUgICAgIGRlY2xhcmUgdGhhdCB0aGUgdGFyZ2V0IHByb3ZpZGVzIHRoZSBMSUJOQU1FIGludGVyZmFjZQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgICAgICAgOzsKKworICAgICAgdW5pbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgJEVDSE8KKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorCisgICAgZXhpdCAkPworfQorCisgICMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQorICAkb3B0X2hlbHAgJiYgZnVuY19tb2RlX2hlbHAKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KKyAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisJfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KKwlkbG5hbWU9CisJbGlicmFyeV9uYW1lcz0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKKwkgICAgZnVuY193YXJuaW5nICJcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGRpcj0iJGRpci8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KKyAgICBhcmdzPQorICAgIGZvciBmaWxlCisgICAgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgIC0qKSA7OworICAgICAgKikKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCisgICAgICBhcmdzPSIkYXJncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisKKyAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworICAgICAgZG8KKwlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCisJICAgICAgZWxzZQorCQkkbHRfdW5zZXQgJGx0X3ZhcgorCSAgICAgIGZpIgorICAgICAgZG9uZQorCisgICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCisgICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKKyAgICBlbHNlCisgICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwkkRUNITyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KK2Z1bmNfbW9kZV9maW5pc2ggKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbGliZGlycz0iJG5vbm9wdCIKKyAgICBhZG1pbmNtZHM9CisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGRpcgorICAgICAgZG8KKwlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgorICAgICAgZG9uZQorCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJGZpbmlzaF9jbWRzIiAnYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisnIiRjbWQiJyInCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgICRFQ0hPICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAorICAgICRFQ0hPICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAgICAgICRFQ0hPICIgICAkbGliZGlyIgorICAgIGRvbmUKKyAgICAkRUNITworICAgICRFQ0hPICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICAkRUNITyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgJEVDSE8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgJEVDSE8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorICAgICAgJEVDSE8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgICRFQ0hPICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisgICAgICBsaWJkaXI9TElCRElSCisgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKyAgICAgICRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgIGZpCisgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICBmaQorICAgICRFQ0hPCisKKyAgICAkRUNITyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKyAgICAgICAgJEVDSE8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisJJEVDSE8gInBhZ2VzLiIKKwk7OworICAgICAgKikKKyAgICAgICAgJEVDSE8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAkRUNITyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCAiJG1vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgICRFQ0hPICJYJG5vbm9wdCIgfCAkR1JFUCBzaHRvb2wgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKwlmaWxlcz0iJGZpbGVzICRkZXN0IgorCWRlc3Q9JGFyZworCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKKyAgICAgIC1mKQorCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKwkqW1xcXCAvXWNwXCAqKSA7OworCSopIHByZXY9JGFyZyA7OworCWVzYWMKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgcHJldj0KKwllbHNlCisJICBkZXN0PSRhcmcKKwkgIGNvbnRpbnVlCisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKKyAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCisgICAgICBkZXN0ZGlyPSIkZGVzdCIKKyAgICAgIGRlc3RuYW1lPQorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKKyAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIHN0YXRpY2xpYnM9CisgICAgZnV0dXJlX2xpYmRpcnM9CisgICAgY3VycmVudF9saWJkaXJzPQorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKworICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouJGxpYmV4dCkKKwkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCXJlbGlua19jb21tYW5kPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZGlyPSIkZGlyJG9iamRpciIKKworCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCisJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJGRlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGxpYmRpclwkJSUiYAorCisJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisJICBlbHNlCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nIFxgJGZpbGUnIgorCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAorCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKKwlmaQorCisJIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CisJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisJICByZWFsbmFtZT0iJDEiCisJICBzaGlmdAorCisJICBzcmNuYW1lPSIkcmVhbG5hbWUiCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCisKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICBjYXNlICRob3N0X29zIGluCisJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICouZGxsLmEpCisJICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCisJCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKwkgICAgZG9uZQorCSAgZmkKKworCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OworCisgICAgICAqLmxvKQorCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgorCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwljYXNlICRkZXN0ZmlsZSBpbgorCSoubG8pCisJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIDs7CisJKi4kb2JqZXh0KQorCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgOzsKKwllc2FjCisKKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKwl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgZnVuY19sbzJvICIkZmlsZSIKKwkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKwlmaQorCWV4aXQgJEVYSVRfU1VDQ0VTUworCTs7CisKKyAgICAgICopCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisKKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisJICAgICAgZnVuY193YXJuaW5nICJcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1ubworCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKKwkJZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCisKKwkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgICAgfQorCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgICAgIGVsc2UKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIlgkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFhzZWQgLWUgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKyAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgZWxzZQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG1vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X291dHB1dG5hbWU9IiQxIgorICAgIG15X29yaWdpbmF0b3I9IiQyIgorICAgIG15X3BpY19wPSIkezMtbm99IgorICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKy8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCisiCisKKwlpZiB0ZXN0ICIkZGxzZWxmIiA9IHllczsgdGhlbgorCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRvdXRwdXQnIgorCisJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCisKKwkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgIHByb2dmaWxlcz1gJEVDSE8gIlgkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRwcm9nZmlsZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZWxzZQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgIGV2YWwgIiROTSAkZGxwcmVmaWxlIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIH0KKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICAkRUNITyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICBmaQorCisJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CisiCisJICBjYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlCisgICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorICAgb24gcHNldWRvLXJlbG9jcy4gICovIgorCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKwkgICpvc2Y1KikKKwkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEgKi8iCisJICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworCSAgKikKKwkgICAgbHRfZGxzeW1fY29uc3Q9Y29uc3QgOzsKKwkgIGVzYWMKKworCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCitleHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3tcCisgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorCisJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KKwkgIG5vKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgICopCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICBlc2FjCisJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmXAorIgorCX0gIyAhJG9wdF9kcnlfcnVuCisKKwlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CisJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJKiIgLXN0YXRpYyAiKikgOzsKKwkqKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIiA7OworCSAgKi0qLWhwdXgqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiWCRteV9waWNfcCIgIT0gWG5vOyB0aGVuCisJICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBzeW10YWJfY2ZsYWdzPSIkc3ltdGFiX2NmbGFncyAkYXJnIiA7OworCSAgZXNhYworCWRvbmUKKworCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCisJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCisKKwkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCisKKwkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgorCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgXGAkbXlfZGxzeW1zJyIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCisgICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisgICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCisKKyAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCisgICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgICRvcHRfZGVidWcKKyAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKyAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgOzsKKyAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSAkMSB8CisJJFNFRCAtbiAtZSAnCisJICAgIDEsMTAweworCQkvIEkgL3sKKwkJICAgIHMsLiosaW1wb3J0LAorCQkgICAgcAorCQkgICAgcQorCQl9CisJICAgIH0nYAorICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KKyAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKKyAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICpETEwqKQorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgOzsKKyAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCisgICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKKyAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKK30KKworCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgJ2V4aXQgJD8nCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9IiIKKyAgICBteV94bGliPSIiCisgICAgbXlfeGFicz0iIgorICAgIG15X3hkaXI9IiIKKworICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbworICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorICAgICAgY2FzZSAkbXlfeGxpYiBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKworICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCisJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicworCSAgZGFyd2luX2N1cmRpcj1gcHdkYAorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgorCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKwkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKwkgICAgJFJNIC1yZiB1bmZhdC0kJAorCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKKwkgIGVsc2UKKwkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgorCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwkgIGZpICMgJGRhcndpbl9hcmNoZXMKKwl9ICMgISRvcHRfZHJ5X3J1bgorCTs7CisgICAgICAqKQorICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwk7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK30KKworCisKKyMgZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgW2FyZz1ub10KKyMKKyMgRW1pdCB0aGUgZmlyc3QgcGFydCBvZiBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBkZXNjcmlwdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyMgZnVuY19lbWl0X3dyYXBwZXIoKSwgYmVsb3cuCitmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxX2FyZzE9bm8KKwlpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisJICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MV9hcmcxPSQxCisJZmkKKworCSRFQ0hPICJcCisjISAkU0hFTEwKKworIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9JyR7U0VEfSAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgorCisjIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCitpZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJworICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCitlbHNlCisgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KKyAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgIEVDSE89XCIkcWVjaG9cIgorICAgIGZpbGU9XCJcJDBcIgorICAgICMgTWFrZSBzdXJlIGVjaG8gd29ya3MuCisgICAgaWYgdGVzdCBcIlhcJDFcIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorICAgICAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgICAgICBzaGlmdAorICAgIGVsaWYgdGVzdCBcIlhcYHsgXCRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxcYFwiID0gJ1hcdCc7IHRoZW4KKyAgICAgICMgWWlwcGVlLCBcJEVDSE8gd29ya3MhCisgICAgICA6CisgICAgZWxzZQorICAgICAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSBcJEVDSE8gd2lsbCB3b3JrLgorICAgICAgZXhlYyAkU0hFTEwgXCJcJDBcIiAtLW5vLXJlZXhlYyBcJHsxK1wiXCRAXCJ9CisgICAgZmkKKyAgZmlcCisiCisJJEVDSE8gIlwKKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJHtTRUR9IC1uICdzLy4qLT4gLy9wJ1xgCisgIGRvbmUKKyIKK30KKyMgZW5kOiBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MQorCisjIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyIFthcmc9bm9dCisjCisjIEVtaXQgdGhlIHNlY29uZCBwYXJ0IG9mIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRlc2NyaXB0aW9uIGFzc29jaWF0ZWQgd2l0aAorIyBmdW5jX2VtaXRfd3JhcHBlcigpLCBiZWxvdy4KK2Z1bmNfZW1pdF93cmFwcGVyX3BhcnQyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDJfYXJnMT1ubworCWlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKwkgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyX2FyZzE9JDEKKwlmaQorCisJJEVDSE8gIlwKKworICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndyB3aGVuIGVtYmVkZGVkIGludG8KKyAgIyB0aGUgY3dyYXBwZXIuCisgIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0Ml9hcmcxCisgIGlmIHRlc3QgXCJcJFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSXCIgPSBcInllc1wiOyB0aGVuCisgICAgIyBzcGVjaWFsIGNhc2UgZm9yICcuJworICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCisgICAgICB0aGlzZGlyPVxgcHdkXGAKKyAgICBmaQorICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgorICAgIGNhc2UgXCJcJHRoaXNkaXJcIiBpbgorICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJYXCR0aGlzZGlyXCIgfCBcJFhzZWQgLWUgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OworICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OworICAgIGVzYWMKKyAgZmkKKworICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgorICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCisgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCisiCisKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorCWV4aXQgMQorICAgICAgZmkKKyAgICBmaQorCisgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisgICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7CisgICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgZmkiCisJZWxzZQorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisiCisJZmkKKworCSRFQ0hPICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKKyAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCisKKyAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKKyAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAorICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiWFwkJHNobGlicGF0aF92YXJcIiB8IFwkWHNlZCAtZSAncy86OipcJC8vJ1xgCisKKyAgICBleHBvcnQgJHNobGlicGF0aF92YXIKKyIKKwlmaQorCisJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkkRUNITyAiXAorICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCisiCisJY2FzZSAkaG9zdCBpbgorCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworCSotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICAkRUNITyAiXAorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCisJKikKKwkgICRFQ0hPICJcCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKwkgIDs7CisJZXNhYworCSRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICAkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKyMgZW5kOiBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MgorCisKKyMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KKyMKKyMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisjIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3CisjIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKyMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcworIyBzZXQgdGhlcmVpbi4KKyMKKyMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgorIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCisjIGJlaGF2aW9yLgorZnVuY19lbWl0X3dyYXBwZXIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPW5vCisJaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorCSAgZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kMQorCWZpCisKKwkjIHNwbGl0IHRoaXMgdXAgc28gdGhhdCBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisJIyBjYW4gY2FsbCBlYWNoIHBhcnQgaW5kZXBlbmRlbnRseS4KKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSAiJHtmdW5jX2VtaXRfd3JhcHBlcl9hcmcxfSIKKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiAiJHtmdW5jX2VtaXRfd3JhcHBlcl9hcmcxfSIKK30KKworCisjIGZ1bmNfdG9faG9zdF9wYXRoIGFyZworIworIyBDb252ZXJ0IHBhdGhzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorIyBJbnRlbmRlZCBmb3IgdXNlIHdpdGggIm5hdGl2ZSIgbWluZ3cgKHdoZXJlIGxpYnRvb2wgaXRzZWxmCisjIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIG1zeXMgc2hlbGwpLCBvciBpbiB0aGUgZm9sbG93aW5nIGNyb3NzLQorIyBidWlsZCBlbnZpcm9ubWVudHM6CisjICAgICRidWlsZCAgICAgICAgICAkaG9zdAorIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKyMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CisjICAgICpuaXggKyB3aW5lICAgICBtaW5ndworIyB3aGVyZSB3aW5lIGlzIGVxdWlwcGVkIHdpdGggdGhlIGB3aW5lcGF0aCcgZXhlY3V0YWJsZS4KKyMgSW4gdGhlIG5hdGl2ZSBtaW5ndyBjYXNlLCB0aGUgKG1zeXMpIHNoZWxsIGF1dG9tYXRpY2FsbHkKKyMgY29udmVydHMgcGF0aHMgZm9yIGFueSBub24tbXN5cyBhcHBsaWNhdGlvbnMgaXQgbGF1bmNoZXMsCisjIGJ1dCB0aGF0IGZhY2lsaXR5IGlzbid0IGF2YWlsYWJsZSBmcm9tIGluc2lkZSB0aGUgY3dyYXBwZXIuCisjIFNpbWlsYXIgYWNjb21tb2RhdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgJGhvc3QgbWluZ3cgYW5kCisjICRidWlsZCBjeWd3aW4uICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBubyBoYXJtIGZvciBvdGhlcgorIyAkaG9zdC8kYnVpbGQgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUuCisjCisjIEFSRyBpcyB0aGUgcGF0aCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBmb3IgJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCisjIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKm1pbmd3KiApCisgICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKyAgICAgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICAgICAqbWluZ3cqICkgIyBhY3R1YWxseSwgbXN5cworICAgICAgICAgICAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisgICAgICAgICAgICBsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzPSJzL1sgXSpcJC8vIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gKCBjbWQgLy9jIGVjaG8gIiQxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcyIgKSAyPi9kZXYvbnVsbCB8fCBlY2hvICIiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqY3lnd2luKiApCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWBjeWdwYXRoIC13ICIkMSJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICogKQorICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybworICAgICAgICAgICAgIyBlcnJvciBjb2RlLCBzbyB3ZSBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgICAgIyBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgY29tbWFuZCBpcyBub3QKKyAgICAgICAgICAgICMgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorICAgICAgICAgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoCisgICAgICAgICAgICAjIGVycm9yIGNvZGUgb2YgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMKKyAgICAgICAgICAgICMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY190b19ob3N0X3BhdGhfdG1wMX0iOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHxcCisgICAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEFsbG93IHdhcm5pbmcgYmVsb3cuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgICckMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjazoKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aAorCisjIGZ1bmNfdG9faG9zdF9wYXRobGlzdCBhcmcKKyMKKyMgQ29udmVydCBwYXRobGlzdHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCisjIFNlZSBmdW5jX3RvX2hvc3RfcGF0aCgpLCBhYm92ZS4gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUKKyMgZm9sbG93aW5nICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMgKGJ1dCBkb2VzIG5vIGhhcm0gZm9yCisjIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGhlcmUpOgorIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKyMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCisjICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKyMKKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8KKyMgJGhvc3QgZm9ybWF0LiBJZiBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yCisjIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkKKyMgb24gb3V0cHV0LgorIworIyBBUkcgaXMgYSBwYXRobGlzdCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBvbiAkaG9zdC4gVGhlIHJlc3VsdCBpcyBzdG9yZWQKKyMgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aGxpc3QgKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgICBjYXNlICRob3N0IGluCisgICAgICAqbWluZ3cqICkKKyAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMj0iJDEiCisgICAgICAgICMgT25jZSBzZXQgZm9yIHRoaXMgY2FsbCwgdGhpcyB2YXJpYWJsZSBzaG91bGQgbm90IGJlCisgICAgICAgICMgcmVhc3NpZ25lZC4gSXQgaXMgdXNlZCBpbiB0aGEgZmFsbGJhY2sgY2FzZS4KKyAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDE9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMiIgfFwKKyAgICAgICAgICAkU0VEIC1lICdzfF46Knx8JyAtZSAnc3w6KiR8fCdgCisgICAgICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAgICAgKm1pbmd3KiApICMgQWN0dWFsbHksIG1zeXMuCisgICAgICAgICAgICAjIEF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQuCisgICAgICAgICAgICBsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzPSJzL1sgXSpcJC8vIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9YCggY21kIC8vYyBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzIiApIDI+L2Rldi9udWxsIHx8IGVjaG8gIiJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKmN5Z3dpbiogKQorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9YGN5Z3BhdGggLXcgLXAgIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRobGlzdHMKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlM9JElGUworICAgICAgICAgICAgSUZTPToKKyAgICAgICAgICAgIGZvciBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEgOyBkbworICAgICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKyAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIiA7IHRoZW4KKyAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIgorICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdDskZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBJRlM9OgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGgocykgY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgICckMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjay4gVGhpcyBtYXkgYnJlYWsgaWYgJDEgY29udGFpbnMgRE9TLXN0eWxlIGRyaXZlCisgICAgICAgICAgIyBzcGVjaWZpY2F0aW9ucy4gVGhlIGZpeCBpcyBub3QgdG8gY29tcGxpY2F0ZSB0aGUgZXhwcmVzc2lvbgorICAgICAgICAgICMgYmVsb3csIGJ1dCBmb3IgdGhlIHVzZXIgdG8gcHJvdmlkZSBhIHdvcmtpbmcgd2luZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAjIHdpdGggd2luZXBhdGggc28gdGhhdCBwYXRoIHRyYW5zbGF0aW9uIGluIHRoZSBjcm9zcy10by1taW5ndworICAgICAgICAgICMgY2FzZSB3b3JrcyBwcm9wZXJseS4KKyAgICAgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2Rvcz0ic3w6fDt8ZyIKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCisgICAgICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3MiYAorICAgICAgICBmaQorICAgICAgICAjIE5vdywgYWRkIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMgYmFjaworICAgICAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgICA6KiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IjskZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgKjogKSBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdDsiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorfQorIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRobGlzdAorCisjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKKyMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KK2Z1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKK3sKKwljYXQgPDxFT0YKKworLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisgICBDdXJyZW50bHksIGl0IHNpbXBseSBleGVjcyB0aGUgd3JhcHBlciAqc2NyaXB0KiAiJFNIRUxMICRvdXRwdXQiLAorICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAorICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX01TQ19WRVIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgaW5jbHVkZSA8aW8uaD4KKyMgIGRlZmluZSBIQVZFX1NFVEVOVgorIyAgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIDAKKyNlbmRpZgorI2lmbmRlZiBTX0lYR1JQCisjIGRlZmluZSBTX0lYR1JQIDAKKyNlbmRpZgorCisjaWZkZWYgX01TQ19WRVIKKyMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKKyMgZGVmaW5lIHN0YXQgX3N0YXQKKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgaW50cHRyX3QgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjZW5kaWYKKworI2lmbmRlZiBGT1BFTl9XQgorIyBkZWZpbmUgRk9QRU5fV0IgInciCisjZW5kaWYKKyNpZm5kZWYgX09fQklOQVJZCisjIGRlZmluZSBfT19CSU5BUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorfSB3aGlsZSAoMCkKKworI3VuZGVmIExUV1JBUFBFUl9ERUJVR1BSSU5URgorI2lmIGRlZmluZWQgREVCVUdXUkFQUEVSCisjIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykgbHR3cmFwcGVyX2RlYnVncHJpbnRmIGFyZ3MKK3N0YXRpYyB2b2lkCitsdHdyYXBwZXJfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKyAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQgKGFyZ3MpOworfQorI2Vsc2UKKyMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9IE5VTEw7CisKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOworY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKK2ludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOwordm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cit2b2lkIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKGNvbnN0IGNoYXIgKmFyZyk7Cit2b2lkIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChjb25zdCBjaGFyICphcmcpOwordm9pZCBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChjb25zdCBjaGFyICphcmcpOworaW50IGx0X3NwbGl0X25hbWVfdmFsdWUgKGNvbnN0IGNoYXIgKmFyZywgY2hhcioqIG5hbWUsIGNoYXIqKiB2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjcmlwdF90ZXh0X3BhcnQxID0KK0VPRgorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxIHllcyB8CisJICAgICAgICAkU0VEIC1lICdzL1woW1xcIl1cKS9cXFwxL2cnIFwKKwkgICAgICAgICAgICAgLWUgJ3MvXi8gICIvJyAtZSAncy8kL1xcbiIvJworCSAgICBlY2hvICI7IgorCSAgICBjYXQgPDxFT0YKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjcmlwdF90ZXh0X3BhcnQyID0KK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiB5ZXMgfAorCSAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCisJICAgICAgICAgICAgIC1lICdzL14vICAiLycgLWUgJ3MvJC9cXG4iLycKKwkgICAgZWNobyAiOyIKKworCSAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Citjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CitFT0YKKworCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJGRsbHNlYXJjaHBhdGg6IgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCAgNQorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG9wdF9wcmVmaXhfbGVuICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEg7CitzdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfc2V0X29wdF9sZW4gICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgNzsKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfc2V0X29wdCAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJlbnYtc2V0IjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgdmFsdWUgb2YgZm9vIGlzIHNldCB0byBiYXIgKi8KKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfcHJlcGVuZF9vcHRfbGVuID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgMTE7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X3ByZXBlbmRfb3B0ICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZW52LXByZXBlbmQiOworICAvKiBhcmd1bWVudCBpcyBwdXRlbnYtc3R5bGUgImZvbz1iYXIiLCBuZXcgdmFsdWUgb2YgZm9vIGlzIGJhciR7Zm9vfSAqLworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGVudl9hcHBlbmRfb3B0X2xlbiAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggKyAxMDsKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfYXBwZW5kX29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJlbnYtYXBwZW5kIjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgbmV3IHZhbHVlIG9mIGZvbyBpcyAke2Zvb31iYXIgKi8KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBhcmd2WzBdICAgICAgOiAlc1xuIiwgYXJndlswXSkpOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLCBwcm9ncmFtX25hbWUpKTsKKworICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdCAqLworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorCXsKK0VPRgorCSAgICBjYXNlICIkaG9zdCIgaW4KKwkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQorCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCisJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCisJCTs7CisJICAgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisJICBwcmludGYgKCIlcyIsIHNjcmlwdF90ZXh0X3BhcnQxKTsKKwkgIHByaW50ZiAoIiVzIiwgc2NyaXB0X3RleHRfcGFydDIpOworCSAgcmV0dXJuIDA7CisJfQorICAgIH0KKworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorCQkJICB0bXBfcGF0aHNwZWMpKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKwkJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwKCBiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLworICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJCSAgdGFyZ2V0X25hbWUpKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorICBuZXdhcmd6WzBdID0KKyAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKworCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOworICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CitFT0YKKworCSAgICBjYXQgPDwiRU9GIgorICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLworICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKworICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCisgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAgdG1wX3BhdGhzcGVjID0gTlVMTDsKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJICAgIGNhdCA8PCJFT0YiCisgIHsKKyAgICBjaGFyKiBwOworICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICB9CitFT0YKKwkgICAgOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgZW52X3NldF9vcHQsIGVudl9zZXRfb3B0X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmd2W2ldW2Vudl9zZXRfb3B0X2xlbl0gPT0gJz0nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpwID0gYXJndltpXSArIGVudl9zZXRfb3B0X2xlbiArIDE7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKHApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV1bZW52X3NldF9vcHRfbGVuXSA9PSAnXDAnICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3NldCAoYXJndlsrK2ldKTsgLyogZG9uJ3QgY29weSAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGx0X2ZhdGFsICgiJXMgbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCIsIGVudl9zZXRfb3B0KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9wcmVwZW5kX29wdCwgZW52X3ByZXBlbmRfb3B0X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmd2W2ldW2Vudl9wcmVwZW5kX29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfcHJlcGVuZF9vcHRfbGVuICsgMTsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3ByZXBlbmQgKHApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV1bZW52X3ByZXBlbmRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChhcmd2WysraV0pOyAvKiBkb24ndCBjb3B5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbHRfZmF0YWwgKCIlcyBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IiwgZW52X3ByZXBlbmRfb3B0KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9hcHBlbmRfb3B0LCBlbnZfYXBwZW5kX29wdF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYXJndltpXVtlbnZfYXBwZW5kX29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfYXBwZW5kX29wdF9sZW4gKyAxOworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldW2Vudl9hcHBlbmRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9hcHBlbmQgKGFyZ3ZbKytpXSk7IC8qIGRvbid0IGNvcHkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsdF9mYXRhbCAoIiVzIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQiLCBlbnZfYXBwZW5kX29wdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgb3B0X3ByZWZpeF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoIlVucmVjb2duaXplZCBvcHRpb24gaW4gJXMgbmFtZXNwYWNlOiAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworICAgICAgICB9CisgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICB9CisgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICAgICAoKCIobWFpbikgbHRfYXJndl96ZXJvIDogJXNcbiIsIChsdF9hcmd2X3plcm8gPyBsdF9hcmd2X3plcm8gOiAiPE5VTEw+IikpKTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICB7CisgICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIiwgaSwgKG5ld2FyZ3pbaV0gPyBuZXdhcmd6W2ldIDogIjxOVUxMPiIpKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICBpZiAocnZhbCA9PSAtMSkKKyAgICB7CisgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6IGVycm5vID0gJWRcbiIsIGx0X2FyZ3ZfemVybywgZXJybm8pKTsKKyAgICAgIHJldHVybiAxMjc7CisgICAgfQorICByZXR1cm4gcnZhbDsKK0VPRgorCQk7OworCSAgICAgICopCisJCWNhdCA8PCJFT0YiCisgIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOworICByZXR1cm4gcnZhbDsgLyogPTEyNywgYnV0IGF2b2lkcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZyAqLworRU9GCisJCTs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgIGlmICghcCkKKyAgICBsdF9mYXRhbCAoIk1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorICAgIG5hbWUgKz0gMjsKKyNlbmRpZgorCisgIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKyAgcmV0dXJuIGJhc2U7Cit9CisKK2ludAorY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihjaGVja19leGVjdXRhYmxlKSAgOiAlc1xuIiwKKwkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWtlX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKKwkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoZmluZF9leGVjdXRhYmxlKSAgIDogJXNcbiIsCisJCQkgIHdyYXBwZXIgPyAoKndyYXBwZXIgPyB3cmFwcGVyIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwlyZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorCXsKKwkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisJICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCSAgICByZXR1cm4gY29uY2F0X25hbWU7CisJICBYRlJFRSAoY29uY2F0X25hbWUpOworCX0KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgICB7CisJaGFzX3NsYXNoID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgICAgeworICAgICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgICBpZiAocGF0aCAhPSBOVUxMKQorCXsKKwkgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqcTsKKwkgICAgICBzaXplX3QgcF9sZW47CisJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKKwkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCisJCSAgYnJlYWs7CisJICAgICAgcF9sZW4gPSBxIC0gcDsKKwkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CisJICAgICAgaWYgKHBfbGVuID09IDApCisJCXsKKwkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKwkJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKyAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKyAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisKKyAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitjaGFyICoKK2NoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKK3sKKyNpZm5kZWYgU19JU0xOSworICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworI2Vsc2UKKyAgY2hhciBidWZbTFRfUEFUSE1BWF07CisgIHN0cnVjdCBzdGF0IHM7CisgIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgY2hhciAqcDsKKyAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKwkJCSAgICAgIHRtcF9wYXRoc3BlYykpOworICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorCXsKKwkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCisJICAgIHsKKwkgICAgICBoYXNfc3ltbGlua3MgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLworCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7CisJICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgcC0tOworCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICB7CisJICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKwl9CisgICAgICBlbHNlCisJeworCSAgY2hhciAqZXJyc3RyID0gc3RyZXJyb3IgKGVycm5vKTsKKwkgIGx0X2ZhdGFsICgiRXJyb3IgYWNjZXNzaW5nIGZpbGUgJXMgKCVzKSIsIHRtcF9wYXRoc3BlYywgZXJyc3RyKTsKKwl9CisgICAgfQorICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBpZiAoIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworICAgIH0KKworICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICB7CisgICAgICBsdF9mYXRhbCAoIkNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3N0YXRpYyB2b2lkCitsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CisgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisgIHsKKyNpZmRlZiBIQVZFX1NFVEVOVgorICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCisgICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOworICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKKyNlbHNlCisgICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOworICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisgICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCisgICAgICB7CisgICAgICAgIFhGUkVFIChzdHIpOworICAgICAgfQorI2VuZGlmCisgIH0KK30KKworY2hhciAqCitsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCit7CisgIGNoYXIgKm5ld192YWx1ZTsKKyAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCisgICAgeworICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKKyAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOworICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CisgICAgICBpZiAodG9fZW5kKQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOworICAgIH0KKyAgcmV0dXJuIG5ld192YWx1ZTsKK30KKworaW50CitsdF9zcGxpdF9uYW1lX3ZhbHVlIChjb25zdCBjaGFyICphcmcsIGNoYXIqKiBuYW1lLCBjaGFyKiogdmFsdWUpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIGludCBsZW47CisgIGlmICghYXJnIHx8ICEqYXJnKQorICAgIHJldHVybiAxOworCisgIHAgPSBzdHJjaHIgKGFyZywgKGludCknPScpOworCisgIGlmICghcCkKKyAgICByZXR1cm4gMTsKKworICAqdmFsdWUgPSB4c3RyZHVwICgrK3ApOworCisgIGxlbiA9IHN0cmxlbiAoYXJnKSAtIHN0cmxlbiAoKnZhbHVlKTsKKyAgKm5hbWUgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICBzdHJuY3B5ICgqbmFtZSwgYXJnLCBsZW4tMSk7CisgICgqbmFtZSlbbGVuIC0gMV0gPSAnXDAnOworCisgIHJldHVybiAwOworfQorCit2b2lkCitsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChjb25zdCBjaGFyICphcmcpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICp2YWx1ZSA9IE5VTEw7CisKKyAgaWYgKGx0X3NwbGl0X25hbWVfdmFsdWUgKGFyZywgJm5hbWUsICZ2YWx1ZSkgIT0gMCkKKyAgICB7CisgICAgICBYRlJFRSAobmFtZSk7CisgICAgICBYRlJFRSAodmFsdWUpOworICAgICAgbHRfZmF0YWwgKCJiYWQgYXJndW1lbnQgZm9yICVzOiAnJXMnIiwgZW52X3NldF9vcHQsIGFyZyk7CisgICAgfQorCisgIGx0X3NldGVudiAobmFtZSwgdmFsdWUpOworICBYRlJFRSAobmFtZSk7CisgIFhGUkVFICh2YWx1ZSk7Cit9CisKK3ZvaWQKK2x0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChjb25zdCBjaGFyICphcmcpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgIGNoYXIgKm5ld192YWx1ZSA9IE5VTEw7CisKKyAgaWYgKGx0X3NwbGl0X25hbWVfdmFsdWUgKGFyZywgJm5hbWUsICZ2YWx1ZSkgIT0gMCkKKyAgICB7CisgICAgICBYRlJFRSAobmFtZSk7CisgICAgICBYRlJFRSAodmFsdWUpOworICAgICAgbHRfZmF0YWwgKCJiYWQgYXJndW1lbnQgZm9yICVzOiAnJXMnIiwgZW52X3ByZXBlbmRfb3B0LCBhcmcpOworICAgIH0KKworICBuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5ld192YWx1ZSk7CisgIFhGUkVFIChuYW1lKTsKKyAgWEZSRUUgKHZhbHVlKTsKK30KKwordm9pZAorbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAoY29uc3QgY2hhciAqYXJnKQoreworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqdmFsdWUgPSBOVUxMOworICBjaGFyICpuZXdfdmFsdWUgPSBOVUxMOworCisgIGlmIChsdF9zcGxpdF9uYW1lX3ZhbHVlIChhcmcsICZuYW1lLCAmdmFsdWUpICE9IDApCisgICAgeworICAgICAgWEZSRUUgKG5hbWUpOworICAgICAgWEZSRUUgKHZhbHVlKTsKKyAgICAgIGx0X2ZhdGFsICgiYmFkIGFyZ3VtZW50IGZvciAlczogJyVzJyIsIGVudl9hcHBlbmRfb3B0LCBhcmcpOworICAgIH0KKworICBuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMSk7CisgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5ld192YWx1ZSk7CisgIFhGUkVFIChuYW1lKTsKKyAgWEZSRUUgKHZhbHVlKTsKK30KKwordm9pZAorbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLworICAgICAgaW50IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisgICAgICAgIHsKKyAgICAgICAgICBuZXdfdmFsdWVbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCit2b2lkCitsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworCitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICRob3N0IGluCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKyAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKKyAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KKworICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisgICAgICAjIHRvIG1ha2UgYSBkbGwgd2hpY2ggaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgZGxmaWxlcz0KKyAgICBkbHByZWZpbGVzPQorICAgIGRsc2VsZj1ubworICAgIGV4cG9ydF9keW5hbWljPW5vCisgICAgZXhwb3J0X3N5bWJvbHM9CisgICAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9CisgICAgZ2VuZXJhdGVkPQorICAgIGxpYm9ianM9CisgICAgbHRsaWJzPQorICAgIG1vZHVsZT1ubworICAgIG5vX2luc3RhbGw9bm8KKyAgICBvYmpzPQorICAgIG5vbl9waWNfb2JqZWN0cz0KKyAgICBwcmVjaW91c19maWxlc19yZWdleD0KKyAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KKyAgICBwcmVsb2FkPW5vCisgICAgcHJldj0KKyAgICBwcmV2YXJnPQorICAgIHJlbGVhc2U9CisgICAgcnBhdGg9CisgICAgeHJwYXRoPQorICAgIHBlcm1fcnBhdGg9CisgICAgdGVtcF9ycGF0aD0KKyAgICB0aHJlYWRfc2FmZT1ubworICAgIHZpbmZvPQorICAgIHZpbmZvX251bWJlcj1ubworICAgIHdlYWtfbGlicz0KKyAgICBzaW5nbGVfbW9kdWxlPSIke3dsfS1zaW5nbGVfbW9kdWxlIgorICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwlicmVhaworCTs7CisgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwljYXNlICRhcmcgaW4KKwktYWxsLXN0YXRpYykKKwkgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwktc3RhdGljKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz1idWlsdAorCSAgOzsKKwktc3RhdGljLWxpYnRvb2wtbGlicykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCWVzYWMKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwlicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgorICAgIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiBidWlsZF9vbGRfbGlicz15ZXMKKworICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgorICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKyAgICAgIGFyZz0iJDEiCisgICAgICBzaGlmdAorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIHFhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisgICAgICBmdW5jX2FwcGVuZCBsaWJ0b29sX2FyZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisKKyAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJY2FzZSAkcHJldiBpbgorCW91dHB1dCkKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRwcmV2IGluCisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPXllcworCSAgZmkKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXhwc3ltcykKKwkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgorCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWV4cHN5bXNfcmVnZXgpCisJICBleHBvcnRfc3ltYm9sc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlpbnN0X3ByZWZpeCkKKwkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkJICAgIHByZXY9CisJCSAgZmkKKworCQkgICMgQSBQSUMgb2JqZWN0LgorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQlmaQorCisJCSMgTm9uLVBJQyBvYmplY3QuCisJCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJICBmdW5jX2xvMm8gIiRhcmciCisJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgICAgIGVsc2UKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXByZWNpb3VzX3JlZ2V4KQorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcmVsZWFzZSkKKwkgIHJlbGVhc2U9Ii0kYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgcnBhdGg9IiRycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlzaHJleHQpCisJICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgd2Vha19saWJzPSIkd2Vha19saWJzICRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJeGNjbGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhjb21waWxlcikKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4bGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0iJGFyZyIKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWlmIHRlc3QgLXogIiRkaXIiOyB0aGVuCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisJICBmaQorCWZpCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkgIGRpcj0iJGFic2RpciIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiopIDs7CisJKikKKwkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKwkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiWCRkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCWVsaWYgdGVzdCAiWCRhcmciID0gIlgtbGNfciI7IHRoZW4KKwkgY2FzZSAkaG9zdCBpbgorCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAjIERvIG5vdCBpbmNsdWRlIGxpYmNfciBkaXJlY3RseSwgdXNlIC1wdGhyZWFkIGZsYWcuCisJICAgY29udGludWUKKwkgICA7OworCSBlc2FjCisJZmkKKwlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdCkKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkYXJnIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKKwlmYXN0X2luc3RhbGw9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1pbnN0YWxsKQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCisJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKKwkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorCSAgZnVuY193YXJuaW5nICJcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW8pIHByZXY9b3V0cHV0IDs7CisKKyAgICAgIC1wcmVjaW91cy1maWxlcy1yZWdleCkKKwlwcmV2PXByZWNpb3VzX3JlZ2V4CisJY29udGludWUKKwk7OworCisgICAgICAtcmVsZWFzZSkKKwlwcmV2PXJlbGVhc2UKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1ycGF0aCkKKwlwcmV2PXJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUikKKwlwcmV2PXhycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIqKQorCWZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJHhycGF0aCAiIGluCisJKiIgJGRpciAiKikgOzsKKwkqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtc2hhcmVkKQorCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJY29udGludWUKKwk7OworCisgICAgICAtc2hyZXh0KQorCXByZXY9c2hyZXh0CisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKKwkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCisJIyB3b3VsZCBiZSBlcXVpdmFsZW50IHdhcyB3cm9uZy4gIEl0IHdvdWxkIGJyZWFrIG9uIGF0IGxlYXN0CisJIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC10aHJlYWQtc2FmZSkKKwl0aHJlYWRfc2FmZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLWluZm8pCisJcHJldj12aW5mbworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24tbnVtYmVyKQorCXByZXY9dmluZm8KKwl2aW5mb19udW1iZXI9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtd2VhaykKKyAgICAgICAgcHJldj13ZWFrCisJY29udGludWUKKwk7OworCisgICAgICAtV2MsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBhcmc9IiRhcmcgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1XbCwqKQorCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1YY29tcGlsZXIpCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YbGlua2VyKQorCXByZXY9eGxpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhDQ2xpbmtlcikKKwlwcmV2PXhjY2xpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYworICAgICAgLW1zZ18qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgIyAtNjQsIC1taXBzWzAtOV0gZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCisgICAgICAjICtEQSosICtERCogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICAgIyBjb21waWxlciBhcmdzIGZvciBHQ0MKKyAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogcGFzcyB0aHJvdWdoIHByb2ZpbGluZyBmbGFnIGZvciBHQ0MKKyAgICAgICMgQGZpbGUgR0NDIHJlc3BvbnNlIGZpbGVzCisgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICouJG9iamV4dCkKKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorCW9ianM9IiRvYmpzICRhcmciCisJOzsKKworICAgICAgKi5sbykKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCSAgcGljX29iamVjdD0KKwkgIG5vbl9waWNfb2JqZWN0PQorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAiJGFyZyIKKworCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCXByZXY9CisJCWNvbnRpbnVlCisJICAgICAgZWxzZQorCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQlwcmV2PWRscHJlZmlsZXMKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9IiRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJICAgIGZpCisJICBlbHNlCisJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZWxzZQorCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxzZQorCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiWFwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkWHNlZCAtZSBcJ3MvOi8gL2dcJ1xgCisgICAgZWxzZQorICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgZmkKKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorCisgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgIiIpCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCisgICAgICA7OworICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CisgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisgICAgKi5sYSkgbGlua21vZGU9bGliIDs7CisgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KKyAgICBlc2FjCisKKyAgICBzcGVjaWFsZGVwbGlicz0KKworICAgIGxpYnM9CisgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJY2FzZSAiJGxpYnMgIiBpbgorCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKKworICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKKyAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKKyAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworCSAgZXNhYworCSAgcHJlX3Bvc3RfZGVwcz0iJHByZV9wb3N0X2RlcHMgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCTs7CisgICAgcHJvZykKKwljb21waWxlX2RlcGxpYnM9CisJZmluYWxpemVfZGVwbGlicz0KKwlhbGxkZXBsaWJzPW5vCisJbmV3ZGxmaWxlcz0KKwluZXdkbHByZWZpbGVzPQorCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKKwk7OworICAgICopICBwYXNzZXM9ImNvbnYiCisJOzsKKyAgICBlc2FjCisKKyAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbworICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCisgICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCisJbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCWNhc2UgJHBhc3MgaW4KKwlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OworCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7CisJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKwkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCisJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKwkgIGRlcGVuZGVuY3lfbGlicz0KKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRsaWIiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICBkZXBsaWJfYmFzZT1gJEVDSE8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCisJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKKwkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKworICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1sKikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBlbHNlCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBmaQorCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KKwkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KKwkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5CisJICAgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ke3NlYXJjaF9leHR9IgorCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCisJCSAgZm91bmQ9eWVzCisJCWVsc2UKKwkJICBmb3VuZD1ubworCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICBlbHNlICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikKKwkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgorCQkgIGxpYnJhcnlfbmFtZXM9CisJCSAgb2xkX2xpYnJhcnk9CisJCSAgZnVuY19zb3VyY2UgIiRsaWIiCisJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCQkgICAgbGw9IiRsIgorCQkgIGRvbmUKKwkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQorCQkgICAgZm91bmQ9bm8KKwkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGZpCisJICA7OyAjIC1sCisJKi5sdGZyYW1ld29yaykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLUwqKQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBjb250aW51ZQorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICA7OworCSAgKikKKwkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKwkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGNvbnRpbnVlCisJICA7OworCSoubGEpIGxpYj0iJGRlcGxpYiIgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiWCRkZXBsaWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgXAorCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJEVDSE8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgorCQkkRUNITyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRlcGxpYiIKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwklREVQTElCUyUpCisJICBhbGxkZXBsaWJzPXllcworCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCisJaWYgdGVzdCAiJGZvdW5kIiA9IHllcyB8fCB0ZXN0IC1mICIkbGliIjsgdGhlbiA6CisJZWxzZQorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgXGAkbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgXGAkZGVwbGliJyIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwlmdW5jX3NvdXJjZSAiJGxpYiIKKworCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIlgkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiWCAkZGVwZW5kZW5jeV9saWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCisJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBjb252ZW5pZW5jZT0iJGNvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGNvbnYKKworCisJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorCWxpbmtsaWI9CisJZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgbGlua2xpYj0iJGwiCisJZG9uZQorCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJZmkKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CisJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZworCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCisJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBkbG9wZW4KKworCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGxhZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9IiRsYWRpciIgOzsKKwkqKQorCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCisJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCisJICAgIGFic19sYWRpcj0iJGxhZGlyIgorCSAgZmkKKwkgIDs7CisJZXNhYworCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJbGFuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKwkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKwlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCisJICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGliZGlyIgorCSAgICBhYnNkaXI9IiRsaWJkaXIiCisJICBmaQorCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRsYWRpci8kb2JqZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGZpCisJZmkgIyAkaW5zdGFsbGVkID0geWVzCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCWRscHJlY29udmVuaWVuY2VsaWJzPSIkZGxwcmVjb252ZW5pZW5jZWxpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRkbG5hbWUiCisJICBlbHNlCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCisJICBmaQorCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKworCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisKKwkgIGxpbmthbGxkZXBsaWJzPW5vCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCSA7OworCSAgICBlc2FjCisJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKwkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKKwkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgICAgeyB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwKKwkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKwkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAorCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KKwkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorCSAgICAgICoiJGFic2RpcjoiKikgOzsKKwkgICAgICAqKSB0ZW1wX3JwYXRoPSIkdGVtcF9ycGF0aCRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCisKKwkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgorCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisJICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CisKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0iIgorCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgorCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKwkgICAgICBicmVhaworCSAgICBmaQorCSAgZG9uZQorCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgJEVDSE8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCisJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCSAgICBzaGlmdAorCSAgICByZWFsbmFtZT0iJDEiCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKwkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICBzb25hbWU9IiRkbG5hbWUiCisJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgICAgICMgYmxlaCB3aW5kb3dzCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwkgICAgZWxzZQorCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgICBmaQorCisJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCisJICAgIHNvcm9vdD0iJHNvbmFtZSIKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKKwkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKKworCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdworCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgorCSAgICBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CisJICAgIGRpcj0kb3V0cHV0X29iamRpcgorCSAgICBsaW5rbGliPSRuZXdsaWIKKwkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCQljYXNlICRob3N0IGluCisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLWRhcndpbiogKQorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KKwkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQkgICRFQ0hPCisJCQkgICRFQ0hPICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJCSAgJEVDSE8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJZmkKKwkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQllc2FjCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgcmVsaW5rKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCSAgY2FzZSAkbGliZGlyIGluCisJCSAgICBbXFwvXSopCisJCSAgICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikgbGliX2xpbmtlZD1ubyA7OworCSAgICBlc2FjCisKKwkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKwkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CisJICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CisJICAgICAgKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJICAgICAgZXNhYworCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCisJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCisJCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgICRFQ0hPCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgICRFQ0hPICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICAkRUNITyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJJEVDSE8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCSRFQ0hPICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCSRFQ0hPICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKwkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisJICBmaQorCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKwkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJKikKKwkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgIGZpCisJCSAgOzsKKwkJZXNhYworCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgIGRlcGRlcGw9CisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgcGF0aD0KKwkJICAgIGZpCisJCSAgZmkKKwkJICA7OworCQkqKQorCQkgIHBhdGg9Ii1MJGFic2Rpci8kb2JqZGlyIgorCQkgIDs7CisJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKworCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJZmkKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkcGF0aCAiKikgOzsKKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworCWZpICMgbGlua21vZGUgPSBsaWIKKyAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgdGhlbgorCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKKwkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIlggJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQorICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKworCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgICRFQ0hPCisJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKworICAgICAgb2xkbGlicz0KKyAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKwkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCisJICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKKwkgIGJ1aWxkX29sZF9saWJzPXllcworCWZpCisKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorICAgICAgZWxzZQorCisJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKKwlJRlM9IiRzYXZlX2lmcyIKKworCXRlc3QgLW4gIiQ3IiAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKKworCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCisJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorCisJY2FzZSAkdmluZm9fbnVtYmVyIGluCisJeWVzKQorCSAgbnVtYmVyX21ham9yPSIkMSIKKwkgIG51bWJlcl9taW5vcj0iJDIiCisJICBudW1iZXJfcmV2aXNpb249IiQzIgorCSAgIworCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcworCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAorCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKKwkgICAgOzsKKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgorCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJHJldmlzaW9uIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCWZyZWVic2QtYW91dCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICBkb25lCisKKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgIG1ham9yPS4kbWFqb3IKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlsaW51eCkKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlvc2YpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kYWdlCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQorCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgorCXJlbW92ZWxpc3Q9CisJdGVtcHJlbW92ZWxpc3Q9YCRFQ0hPICIkb3V0cHV0X29iamRpci8qImAKKwlmb3IgcCBpbiAkdGVtcHJlbW92ZWxpc3Q7IGRvCisJICBjYXNlICRwIGluCisJICAgICouJG9iamV4dCB8ICouZ2NubykKKwkgICAgICAgOzsKKwkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKKwkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCisJCSBpZiAkRUNITyAiJHAiIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQorCQkgdGhlbgorCQkgICBjb250aW51ZQorCQkgZmkKKwkgICAgICAgZmkKKwkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSckL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgorICAgICAgI2ZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisgICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIlgkbGliX3NlYXJjaF9wYXRoICIgfCAkWHNlZCAtZSAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICJYJGRlcGxpYnMgIiB8ICRYc2VkIC1lICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICJYJGRlcGVuZGVuY3lfbGlicyAiIHwgJFhzZWQgLWUgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjZG9uZQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwl0ZW1wX3hycGF0aD0KKwlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCisJICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBkbGZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCisgICAgICBvbGRfZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMiCisgICAgICBkbHByZWZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIDs7CisJICAqLSotbmV0YnNkKikKKwkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIDs7CisJICAqKQorCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgorCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPSIiCisJdmVyc3VmZml4PSIiCisJbWFqb3I9IiIKKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAqIiAkaSAiKikKKwkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgaT0iIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICBkZXBsaWJfbWF0Y2g9JDEKKwkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICBlbHNlCisJCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICRFQ0hPCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgICRFQ0hPICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICAkRUNITyAiKioqIGl0cyBkeW5hbWljIGRlcGVuZGVuY3kgbGlzdCB0aGF0IHByb2dyYW1zIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICAgIGk9IiIKKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICAgIGRlcGxpYl9tYXRjaD0kMQorCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGVsc2UKKwkJICAgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICAgICRFQ0hPCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgICRFQ0hPICIqKiogYXMgYSBkeW5hbWljIGRlcGVuZGVuY3kgdGhhdCBwcm9ncmFtcyBjYW4gZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgICBmaQorCQkgIGZpCisJCWVsc2UKKwkJICBkcm9wcGVkZGVwcz15ZXMKKwkJICAkRUNITworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgJEVDSE8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICAkRUNITyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKKwkJICAkRUNITyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpCisJICA7OworCWZpbGVfbWFnaWMqKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiWCRwb3RsaWIiIHwgJFhzZWQgLWUgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworCQkJZXNhYworCQkgICAgICBkb25lCisJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisJCQkgJFNFRCAtZSAxMHEgfAorCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCQlhX2RlcGxpYj0iIgorCQkJYnJlYWsgMgorCQkgICAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkRUNITyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CisJCSAgICBpZiBldmFsICJcJEVDSE8gXCJYJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPSIiCisJCSAgICAgIGJyZWFrIDIKKwkJICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJJEVDSE8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQkkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSRFQ0hPICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJEVDSE8gIlggJGRlcGxpYnMiIHwgJFhzZWQgXAorCSAgICAgIC1lICdzLyAtbGMkLy8nIC1lICdzLyAtW0xSXVteIF0qLy9nJ2AKKwkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzIDsgZG8KKwkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCisJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGlmICRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAncy9bCSBdLy9nJyB8CisJICAgICAkR1JFUCAuID4vZGV2L251bGw7IHRoZW4KKwkgICAgJEVDSE8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgZmkKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICRFQ0hPCisJICAgICRFQ0hPICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICAkRUNITyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgICRFQ0hPICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgJEVDSE8KKwkgICAgICAkRUNITyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgJEVDSE8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgJEVDSE8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICAkRUNITyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgICRFQ0hPICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICAkRUNITyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgJEVDSE8KKwkgICAgICAkRUNITyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICAkRUNITyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgJEVDSE8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKKwkgICAgICAkRUNITyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKyAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqLSotZGFyd2luKikKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICJYICRkZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKwkgIGhhcmRjb2RlX2xpYmRpcnM9CisJICBkZXBfcnBhdGg9CisJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorCSAgdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCSAgICAgIGVsc2UKKwkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBkb25lCisJICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCisJICAgIGVsc2UKKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgZmkKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgICBycGF0aD0KKwkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIGRvbmUKKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisJICBmaQorCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKKwlmaQorCisJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgorCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisJICAgICAgZnVuY19sZW4gIiAkY21kIgorCSAgICAgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CisJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgorCQlicmVhaworCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKwkgICopCisJICAgIHRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisKKwlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCisJICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCisJICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgorCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KKwkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCWZpCisKKwkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlmaQorCisJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICBmaQorCWVsc2UKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgorCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKKwkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQorCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisJICAjIHNjcmlwdC4KKworCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKwkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQorCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQorCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKwkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCisJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisJICAjIHRoZSBzcGVjLgorCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgZmkKKwkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKwkgIG91dHB1dF9sYT1gJEVDSE8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgbGFzdF9yb2JqPQorCSAgaz0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rc2NyaXB0CisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKwkgICAgJEVDSE8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgICRFQ0hPICcpJyA+PiAkb3V0cHV0CisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCisKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkJZWxzZQorCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0kb2JqCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKworCSAgICBlbHNlCisJICAgICAgb3V0cHV0PQorCSAgICBmaQorCisJICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisKKwkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgorCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgJG9wdF9zaWxlbnQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCQlmaQorCisJCWV4aXQgJGx0X2V4aXQKKwkgICAgICB9CisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKworICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRYc2VkIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgZmkKKworCSAgbGlib2Jqcz0kb3V0cHV0CisJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KKwkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCisJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KKworCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKwkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCisJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorCWZpCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwlmaQorCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JworCSAgZmkKKwlkb25lCisKKwkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzIHx8IHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXM7IHRoZW4KKwkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgorCSAgZGxuYW1lPSIkc29uYW1lIgorCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9iaikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCisKKwlsaWJvYmo9JG91dHB1dAorCWZ1bmNfbG8ybyAiJGxpYm9iaiIKKwlvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwk7OworICAgICAgKikKKwlsaWJvYmo9CisJb2JqPSIkb3V0cHV0IgorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIHNvIGxldCB1cyBnZXQgcmlkIG9mCisgICAgICAjIC1XbCBmcm9tIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGFuZCBob3BlIHdlIGNhbiBnZXQgYnkgd2l0aAorICAgICAgIyB0dXJuaW5nIGNvbW1hIGludG8gc3BhY2UuLgorICAgICAgd2w9CisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIlgkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFhzZWQgLWUgJ3N8LHwgfGcnYAorCWVsc2UKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JCcvZCcgLWUgJy9cLmxpYiQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKworICAgICAgb3V0cHV0PSIkb2JqIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0ICIkcGljX21vZGUiICE9IGRlZmF1bHQ7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9IiRsaWJvYmoiCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworICAgICAgZXNhYworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCisgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiWCAkY29tcGlsZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisJICAgIDEwLlswMTIzXSkKKwkgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKKyAgICAgIGVzYWMKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRjb21waWxlX2RlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisKKworICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKKworICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJZm9yIGxpYmRpciBpbiAkcnBhdGggJHhycGF0aDsgZG8KKwkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgZmluYWxpemVfcnBhdGg9IiRycGF0aCIKKworICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKmNlZ2NjKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCisJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCisJZmkKKworCWV4aXQgJGV4aXRfc3RhdHVzCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwlmaW5hbGl6ZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCisgICAgICBmaQorCisgICAgICBjb21waWxlX3Zhcj0KKyAgICAgIGZpbmFsaXplX3Zhcj0KKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgIGRvbmUKKwkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJG5vX2luc3RhbGwiID0geWVzOyB0aGVuCisJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwlsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCisJIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKworCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAorCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKyAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbHNlCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgUXVvdGUgJEVDSE8gZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisJY2FzZSAkcHJvZ3BhdGggaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCSopIHFlY2hvPSIkU0hFTEwgYHB3ZGAvJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCWVzYWMKKwlxZWNobz1gJEVDSE8gIlgkcWVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZWxzZQorCXFlY2hvPWAkRUNITyAiWCRFQ0hPIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CisJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CisJICA7OworCWVzYWMKKyAgICAgIH0KKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KKyAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbworCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwllbHNlCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCisJICBmaQorCWZpCisJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCW9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisKKwkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKKwkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQorCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisJIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKKwkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQorCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKwlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisJICA6CisJZWxzZQorCSAgJEVDSE8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKwkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgIGNvdW50ZXI9MQorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCisJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CisJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKKwkgICAgICB3aGlsZSA6OyBkbworCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbworCQkjIG92ZXJsYXBzLgorCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQorCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQorCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQljYXNlICIgJG9sZG9ianMgIiBpbgorCQkqW1wgL10iJG5ld29iaiAiKikgOzsKKwkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OworCQllc2FjCisJICAgICAgZG9uZQorCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKwkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgOzsKKwkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCisJZnVuY19sZW4gIiAkY21kcyIKKwlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsc2UKKwkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBzYXZlX1JBTkxJQj0kUkFOTElCCisJICBSQU5MSUI9OgorCSAgb2JqbGlzdD0KKwkgIGNvbmNhdF9jbWRzPQorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgIyBJcyB0aGVyZSBhIGJldHRlciB3YXkgb2YgZmluZGluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGxpc3Q/CisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKwkgIGRvbmUKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICBsZW49JGxlbjAKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19sZW4gIiAkb2JqIgorCSAgICBmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKwkgICAgICBvbGRvYmpzPSRvYmpsaXN0CisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIiA7IHRoZW4KKwkJUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgICAgIGZpCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgICBvYmpsaXN0PQorCSAgICAgIGxlbj0kbGVuMAorCSAgICBmaQorCSAgZG9uZQorCSAgUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCisJICBlbHNlCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIkZ2VuZXJhdGVkIgorCisgICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgKi5sYSkKKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiBvbGRfbGlicmFyeT0iJGxpYm5hbWUuJGxpYmV4dCIKKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWVsc2UKKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBmaQorCSAgJFJNICRvdXRwdXQKKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgdGRsbmFtZT0kZGxuYW1lCisJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkgdGRsbmFtZT0uLi9iaW4vJGRsbmFtZSA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJHRkbG5hbWUnCisKKyMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgorbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKworIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KK2N1cnJlbnQ9JGN1cnJlbnQKK2FnZT0kYWdlCityZXZpc2lvbj0kcmV2aXNpb24KKworIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz0kbW9kdWxlCisKKyMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgorZGxvcGVuPSckZGxmaWxlcycKK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorCSAgZmkKKwlkb25lCisgICAgICB9CisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit7IHRlc3QgIiRtb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX3VuaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBSTT0iJG5vbm9wdCIKKyAgICBmaWxlcz0KKyAgICBybWZvcmNlPQorICAgIGV4aXRfc3RhdHVzPTAKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworICAgICAgLSopIFJNPSIkUk0gJGFyZyIgOzsKKyAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkUk0iICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIgorCisgICAgcm1kaXJzPQorCisgICAgb3JpZ29iamRpcj0iJG9iamRpciIKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorCW9iamRpcj0iJG9yaWdvYmpkaXIiCisgICAgICBlbHNlCisJb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKKworICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKwljYXNlICIgJHJtZGlycyAiIGluCisJICAqIiAkb2JqZGlyICIqKSA7OworCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisJZXNhYworICAgICAgZmkKKworICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KKyAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJOgorICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKwlleGl0X3N0YXR1cz0xCisJY29udGludWUKKyAgICAgIGVsaWYgdGVzdCAiJHJtZm9yY2UiID0geWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIHJtZmlsZXM9IiRmaWxlIgorCisgICAgICBjYXNlICRuYW1lIGluCisgICAgICAqLmxhKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkbW9kZSIgaW4KKwkgIGNsZWFuKQorCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisJICAgICoiICRkbG5hbWUgIiopIDs7CisJICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKwkgICAgZXNhYworCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfWkiCisJICAgIDs7CisJICB1bmluc3RhbGwpCisJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKwkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCisJICAgIDs7CisJICBlc2FjCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kbm9uX3BpY19vYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKikKKwlpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbiA7IHRoZW4KKwkgIG5vZXhlbmFtZT0kbmFtZQorCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgorCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKyAgICBkb25lCisgICAgb2JqZGlyPSIkb3JpZ29iamRpciIKKworICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0ICRleGl0X3N0YXR1cworfQorCit7IHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisKK3Rlc3QgLXogIiRtb2RlIiAmJiB7CisgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCit9CisKK3Rlc3QgLXogIiRleGVjX2NtZCIgJiYgXAorICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisKK2lmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworZXhpdCAkZXhpdF9zdGF0dXMKKworCisjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCisjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKKyMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgorIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQorIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOnNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjoyCisjIEVuZDoKKyMgdmk6c3c9MgorCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvbTQvTWFrZWZpbGUuaW4gYi9wb3B0LTEuMTYvbTQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjMmQyYwotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9tNC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDM4NSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3RhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKK3N1YmRpciA9IG00CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMVF9BR0UgPSBATFRfQUdFQAorTFRfQ1VSUkVOVCA9IEBMVF9DVVJSRU5UQAorTFRfUkVWSVNJT04gPSBATFRfUkVWSVNJT05ACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUE9QVF9QS0dDT05GSUdfTElCUyA9IEBQT1BUX1BLR0NPTkZJR19MSUJTQAorUE9QVF9TT1VSQ0VfUEFUSCA9IEBQT1BUX1NPVVJDRV9QQVRIQAorUE9TVUIgPSBAUE9TVUJACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1RBUkdFVCA9IEBUQVJHRVRACitVID0gQFVACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N1YmRpcnMgPSBAc3ViZGlyc0AKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitFWFRSQV9ESVNUID0gZ2V0dGV4dC5tNCBpY29udi5tNCBsaWItbGQubTQgbGliLWxpbmsubTQgbGliLXByZWZpeC5tNCBubHMubTQgcG8ubTQgcHJvZ3Rlc3QubTQgZ2V0dGV4dC5tNCBpY29udi5tNCBsaWItbGQubTQgbGliLWxpbmsubTQgbGliLXByZWZpeC5tNCBubHMubTQgcG8ubTQgcHJvZ3Rlc3QubTQgZ2V0dGV4dC5tNCBpY29udi5tNCBsaWItbGQubTQgbGliLWxpbmsubTQgbGliLXByZWZpeC5tNCBubHMubTQgcG8ubTQgcHJvZ3Rlc3QubTQgY29kZXNldC5tNCBnbGliYzIubTQgZ2xpYmMyMS5tNCBpbnRkaXYwLm00IGludGwubTQgaW50bGRpci5tNCBpbnRsbWFjb3N4Lm00IGludG1heC5tNCBpbnR0eXBlc19oLm00IGludHR5cGVzLXByaS5tNCBsY21lc3NhZ2UubTQgbG9jay5tNCBsb25nbG9uZy5tNCBwcmludGYtcG9zaXgubTQgc2l6ZV9tYXgubTQgc3RkaW50X2gubTQgdWludG1heF90Lm00IHZpc2liaWxpdHkubTQgd2NoYXJfdC5tNCB3aW50X3QubTQgeHNpemUubTQKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBtNC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbTQvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvbTQvZ2V0dGV4dC5tNCBiL3BvcHQtMS4xNi9tNC9nZXR0ZXh0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YWUxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvbTQvZ2V0dGV4dC5tNApAQCAtMCwwICsxLDM4MSBAQAorIyBnZXR0ZXh0Lm00IHNlcmlhbCA2MCAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDYuCisKK2RubCBNYWNybyB0byBhZGQgZm9yIHVzaW5nIEdOVSBnZXR0ZXh0LgorCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorZG5sIElOVExTWU1CT0wgY2FuIGJlIG9uZSBvZiAnZXh0ZXJuYWwnLCAnbm8tbGlidG9vbCcsICd1c2UtbGlidG9vbCcuIFRoZQorZG5sICAgIGRlZmF1bHQgKGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb3IgZW1wdHkpIGlzICduby1saWJ0b29sJy4KK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorZG5sICAgIGFuZCAnbm8tbGlidG9vbCcgb3IgJ3VzZS1saWJ0b29sJyBmb3IgcGFja2FnZXMgd2l0aCBhbiBpbnRsIGRpcmVjdG9yeS4KK2RubCAgICBJZiBJTlRMU1lNQk9MIGlzICd1c2UtbGlidG9vbCcsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCitkbmwgICAgZGVwZW5kaW5nIG9uIC0te2VuYWJsZSxkaXNhYmxlfS17c2hhcmVkLHN0YXRpY30gYW5kIG9uIHRoZSBwcmVzZW5jZSBvZgorZG5sICAgIEFNLURJU0FCTEUtU0hBUkVEKS4gSWYgSU5UTFNZTUJPTCBpcyAnbm8tbGlidG9vbCcsIGEgc3RhdGljIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorZG5sIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcyAnbmVlZC1uZ2V0dGV4dCcsIHRoZW4gR05VIGdldHRleHQKK2RubCAgICBpbXBsZW1lbnRhdGlvbnMgKGluIGxpYmMgb3IgbGliaW50bCkgd2l0aG91dCB0aGUgbmdldHRleHQoKSBmdW5jdGlvbgorZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworZG5sICAgICduZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MnLCB0aGVuIEdOVSBnZXR0ZXh0IGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0CitkbmwgICAgc3VwcG9ydCB0aGUgSVNPIEMgOTkgPGludHR5cGVzLmg+IGZvcm1hdHN0cmluZyBtYWNyb3Mgd2lsbCBiZSBpZ25vcmVkLgorZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorZG5sICAgIHRoZSB2YWx1ZSBgJCh0b3BfYnVpbGRkaXIpL2ludGwvJyBpcyB1c2VkLgorZG5sCitkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CitkbmwgMSkgR05VIGdldHRleHQsIGFzIGluY2x1ZGVkIGluIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwgd2lsbCBiZSBjb21waWxlZAorZG5sICAgIGFuZCB1c2VkLgorZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCitkbmwgMikgR05VIGdldHRleHQgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN5c3RlbSdzIEMgbGlicmFyeS4KK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorZG5sIDMpIE5vIGludGVybmF0aW9uYWxpemF0aW9uLCBhbHdheXMgdXNlIEVuZ2xpc2ggbXNnaWQuCitkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogbm9uZQorZG5sIElmIElOVExTWU1CT0wgaXMgJ2V4dGVybmFsJywgb25seSBjYXNlcyAyIGFuZCAzIGNhbiBvY2N1ci4KK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKK2RubCBHTlUgZm9ybWF0IGNhdGFsb2dzIHdoZW4gYnVpbGRpbmcgb24gYSBwbGF0Zm9ybSB3aXRoIGFuIFgvT3BlbiBnZXR0ZXh0KSwKK2RubCBidXQgd2Uga2VlcCBpdCBpbiBvcmRlciBub3QgdG8gZm9yY2UgaXJyZWxldmFudCBmaWxlbmFtZSBjaGFuZ2VzIG9uIHRoZQorZG5sIG1haW50YWluZXJzLgorZG5sCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRdLAorWworICBkbmwgQXJndW1lbnQgY2hlY2tpbmcuCisgIGlmZWxzZShbJDFdLCBbXSwgLCBbaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sICwgW2lmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sICwgW2lmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCAsCisgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorXSldKV0pXSldKQorICBpZmVsc2UoWyQyXSwgW10sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwgLAorICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCitdKV0pXSldKQorICBkZWZpbmUoW2d0X2luY2x1ZGVkX2ludGxdLAorICAgIGlmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLAorICAgICAgaWZkZWYoW0FNX0dOVV9HRVRURVhUX11bSU5UTF9TVUJESVJdLCBbeWVzXSwgW25vXSksCisgICAgICBbeWVzXSkpCisgIGRlZmluZShbZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4XSwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorICBndF9ORUVEU19JTklUCisgIEFNX0dOVV9HRVRURVhUX05FRUQoWyQyXSkKKworICBBQ19SRVFVSVJFKFtBTV9QT19TVUJESVJTXSlkbmwKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKKyAgXSkKKworICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisKKyAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorICBkbmwgSWRlYWxseSB3ZSB3b3VsZCBkbyB0aGlzIHNlYXJjaCBvbmx5IGFmdGVyIHRoZQorICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICBkbmwgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKyAgZG5sIHRlc3RzLiBCdXQgaWYgY29uZmlndXJlLmluIGludm9rZXMgQU1fSUNPTlYgYWZ0ZXIgQU1fR05VX0dFVFRFWFQKKyAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCisgIGRubCBhZ2Fpbiwgb3V0c2lkZSBhbnkgJ2lmJy4gVGhlcmUgYXJlIHR3byBzb2x1dGlvbnM6CisgIGRubCAtIEludm9rZSBBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWSBoZXJlLCBvdXRzaWRlIGFueSAnaWYnLgorICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgorICBkbmwgU2luY2UgQUNfUFJPVklERV9JRkVMU0UgaXMgb25seSBpbiBhdXRvY29uZiA+PSAyLjUyIGFuZCBub3QKKyAgZG5sIGRvY3VtZW50ZWQsIHdlIGF2b2lkIGl0LgorICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKyAgICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisgIF0pCisKKyAgZG5sIFNvbWV0aW1lcywgb24gTWFjT1MgWCwgbGliaW50bCByZXF1aXJlcyBsaW5raW5nIHdpdGggQ29yZUZvdW5kYXRpb24uCisgIGd0X0lOVExfTUFDT1NYCisKKyAgZG5sIFNldCBVU0VfTkxTLgorICBBQ19SRVFVSVJFKFtBTV9OTFNdKQorCisgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKyAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCisgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9bm8KKyAgXSkKKyAgTElCSU5UTD0KKyAgTFRMSUJJTlRMPQorICBQT1NVQj0KKworICBkbmwgQWRkIGEgdmVyc2lvbiBudW1iZXIgdG8gdGhlIGNhY2hlIG1hY3Jvcy4KKyAgY2FzZSAiICRndF9uZWVkcyAiIGluCisgICAgKiIgbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zICIqKSBndF9hcGlfdmVyc2lvbj0zIDs7CisgICAgKiIgbmVlZC1uZ2V0dGV4dCAiKikgZ3RfYXBpX3ZlcnNpb249MiA7OworICAgICopIGd0X2FwaV92ZXJzaW9uPTEgOzsKKyAgZXNhYworICBndF9mdW5jX2dudWdldHRleHRfbGliYz0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliYyIKKyAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3RfYXBpX3ZlcnNpb259X2xpYmludGwiCisKKyAgZG5sIElmIHdlIHVzZSBOTFMgZmlndXJlIG91dCB3aGF0IG1ldGhvZAorICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD1ubworICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBpbmNsdWRlZCBnZXR0ZXh0IGlzIHJlcXVlc3RlZF0pCisgICAgICBBQ19BUkdfV0lUSChpbmNsdWRlZC1nZXR0ZXh0LAorICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCisgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9JHdpdGh2YWwsCisgICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9bm8pCisgICAgICBBQ19NU0dfUkVTVUxUKCRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0KQorCisgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PSIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIKKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorICAgIF0pCisgICAgICAgIGRubCBVc2VyIGRvZXMgbm90IGluc2lzdCBvbiB1c2luZyBHTlUgTkxTIGxpYnJhcnkuICBGaWd1cmUgb3V0IHdoYXQKKyAgICAgICAgZG5sIHRvIHVzZS4gIElmIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcy4gIEVsc2Ugd2UgaGF2ZQorICAgICAgICBkbmwgdG8gZmFsbCBiYWNrIHRvIEdOVSBOTFMgbGlicmFyeS4KKworICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMzsgdGhlbgorICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0nCisjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorI2VuZGlmCitjaGFuZ2VxdW90ZSgsKWRubAordHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKK2NoYW5nZXF1b3RlKFssXSlkbmwKKycKKyAgICAgICAgZWxzZQorICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0KKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAkZ3RfYXBpX3ZlcnNpb24gLWdlIDI7IHRoZW4KKyAgICAgICAgICBndF9leHByZXNzaW9uX3Rlc3RfY29kZT0nICsgKiBuZ2V0dGV4dCAoIiIsICIiLCAwKScKKyAgICAgICAgZWxzZQorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIFskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLAorICAgICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5ncztdLAorICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZG9tYWluX2JpbmRpbmdzXSwKKyAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzIl0sCisgICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPW5vIl0pXSkKKworICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiICE9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgICAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworICAgICAgICAgICAgQU1fSUNPTlZfTElOSworICAgICAgICAgIF0pCisgICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAorICAgICAgICAgIGRubCBhY2NvcmRpbmdseS4gRG9uJ3QgdXNlIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0sW2ljb252XSkKKyAgICAgICAgICBkbmwgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCAiLWxpY29udiIgdG8gTElCSU5UTCBhbmQgTFRMSUJJTlRMCisgICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KKyAgICAgICAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdKQorICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliaW50bF0sCisgICAgICAgICAgICBbJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsXSwKKyAgICAgICAgICAgW2d0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCisgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCisgICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkb2VzIG5vdCBkZXBlbmQgb24gbGliaWNvbnYuCisgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTtdLAorICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKV0sCisgICAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIl0sCisgICAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8iXSkKKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRlcGVuZHMgb24gbGliaWNvbnYuCisgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisgICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+CiskZ3RfcmV2aXNpb25fdGVzdF9jb2RlCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4KKyNpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjZW5kaWYKK2NvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKik7XSwKKyAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKV0sCisgICAgICAgICAgICAgICBbTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgorICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkTFRMSUJJQ09OViIKKyAgICAgICAgICAgICAgICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIgorICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisgICAgICAgIGZpCisKKyAgICAgICAgZG5sIElmIGFuIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQgR05VIGdldHRleHQoKSBpcyBmb3VuZCwKKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKyAgICAgICAgZG5sIGdldHRleHQgaXMgYWxyZWFkeSBwcmVpbnN0YWxsZWQgaW4gbGliaW50bCwgd2UgdXBkYXRlIHRoaXMKKyAgICAgICAgZG5sIGxpYmludGwuICAoQ2YuIHRoZSBpbnN0YWxsIHJ1bGUgaW4gaW50bC9NYWtlZmlsZS5pbi4pCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCisgICAgICAgICAgIHx8IHsgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC1ydW50aW1lIFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorICAgICAgICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD15ZXMKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisgICAgICAgICAgTElCSU5UTD0KKyAgICAgICAgICBMVExJQklOVEw9CisgICAgICAgICAgSU5DSU5UTD0KKyAgICAgICAgZmkKKworICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKyAgICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgR05VIGdldHRleHQgaXMgbm90IGZvdW5kIGluIHRoZSBDIGxpYnJhcnkuCisgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorICAgICAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9eWVzCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorICAgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WICRMSUJUSFJFQUQiCisgICAgICAgIExUTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExUTElCSUNPTlYgJExUTElCVEhSRUFEIgorICAgICAgICBMSUJTPWBlY2hvICIgJExJQlMgIiB8IHNlZCAtZSAncy8gLWxpbnRsIC8gLycgLWUgJ3MvXiAvLycgLWUgJ3MvICQvLydgCisgICAgICBmaQorCisgICAgICBDQVRPQkpFWFQ9CisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdG8gdXNlIEdOVSBnZXR0ZXh0IHRvb2xzLgorICAgICAgICBDQVRPQkpFWFQ9LmdtbworICAgICAgZmkKKyAgICBdKQorCisgICAgaWYgdGVzdCAtbiAiJElOVExfTUFDT1NYX0xJQlMiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBTb21lIGV4dHJhIGZsYWdzIGFyZSBuZWVkZWQgZHVyaW5nIGxpbmtpbmcuCisgICAgICAgIExJQklOVEw9IiRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgorICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKEVOQUJMRV9OTFMsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlIGxhbmd1YWdlCisgICBpcyByZXF1ZXN0ZWQuXSkKKyAgICBlbHNlCisgICAgICBVU0VfTkxTPW5vCisgICAgZmkKKyAgZmkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIE5MU10pCisgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb21dKQorICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgorICAgICAgICBndF9zb3VyY2U9ImV4dGVybmFsIGxpYmludGwiCisgICAgICBlbHNlCisgICAgICAgIGd0X3NvdXJjZT0ibGliYyIKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZ3Rfc291cmNlPSJpbmNsdWRlZCBpbnRsIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIEFDX01TR19SRVNVTFQoWyRndF9zb3VyY2VdKQorICBmaQorCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYmludGxdKQorICAgICAgICBBQ19NU0dfUkVTVUxUKFskTElCSU5UTF0pCisgICAgICAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lOVExdKQorICAgICAgZmkKKworICAgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIHBhY2thZ2VzIG1heSBiZSB1c2luZyB0aGlzLgorICAgICAgQUNfREVGSU5FKEhBVkVfR0VUVEVYVCwgMSwKKyAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKKyAgICAgIEFDX0RFRklORShIQVZFX0RDR0VUVEVYVCwgMSwKKyAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgIGZpCisKKyAgICBkbmwgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgorICAgIFBPU1VCPXBvCisgIGZpCisKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorICAgIGRubCB0byAneWVzJyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRlc3RzdWl0ZSByZXF1aXJlcyBpdC4KKyAgICBpZiB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXJ1bnRpbWUgfHwgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC10b29sczsgdGhlbgorICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICBmaQorCisgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisgICAgQUNfU1VCU1QoQlVJTERfSU5DTFVERURfTElCSU5UTCkKKyAgICBBQ19TVUJTVChVU0VfSU5DTFVERURfTElCSU5UTCkKKyAgICBBQ19TVUJTVChDQVRPQkpFWFQpCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgY29uZmlndXJlLmlucyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisgICAgbmxzX2N2X2hlYWRlcl9saWJndD0KKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgREFUQURJUk5BTUU9c2hhcmUKKyAgICBBQ19TVUJTVChEQVRBRElSTkFNRSkKKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgSU5TVE9CSkVYVD0ubW8KKyAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBHRU5DQVQ9Z2VuY2F0CisgICAgQUNfU1VCU1QoR0VOQ0FUKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlRMT0JKUz0KKyAgICBpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0geWVzOyB0aGVuCisgICAgICBJTlRMT0JKUz0iXCQoR0VUVE9CSlMpIgorICAgIGZpCisgICAgQUNfU1VCU1QoSU5UTE9CSlMpCisKKyAgICBkbmwgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBpZiB0aGUgc3Vycm91bmRpbmcgcGFja2FnZSB3aXNoZXMgaXQuCisgICAgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVg9Z3RfbGlidG9vbF9zdWZmaXhfcHJlZml4CisgICAgQUNfU1VCU1QoSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVgpCisgIF0pCisKKyAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgSU5UTExJQlM9IiRMSUJJTlRMIgorICBBQ19TVUJTVChJTlRMTElCUykKKworICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisgIEFDX1NVQlNUKExJQklOVEwpCisgIEFDX1NVQlNUKExUTElCSU5UTCkKKyAgQUNfU1VCU1QoUE9TVUIpCitdKQorCisKK2RubCBndF9ORUVEU19JTklUIGVuc3VyZXMgdGhhdCB0aGUgZ3RfbmVlZHMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuCittNF9kZWZpbmUoW2d0X05FRURTX0lOSVRdLAorWworICBtNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbZ3RfbmVlZHM9XSkKKyAgbTRfZGVmaW5lKFtndF9ORUVEU19JTklUXSwgW10pCitdKQorCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFRfTkVFRChbTkVFRFNZTUJPTF0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfTkVFRF0sCitbCisgIG00X2RpdmVydF90ZXh0KFtJTklUX1BSRVBBUkVdLCBbZ3RfbmVlZHM9IiRndF9uZWVkcyAkMSJdKQorXSkKKworCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfVkVSU0lPTl0sIFtdKQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L200L2ljb252Lm00IGIvcG9wdC0xLjE2L200L2ljb252Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YmM3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvbTQvaWNvbnYubTQKQEAgLTAsMCArMSwxODAgQEAKKyMgaWNvbnYubTQgc2VyaWFsIEFNNiAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKK1sKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorCisgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpY29udl0pCitdKQorCitBQ19ERUZVTihbQU1fSUNPTlZfTElOS10sCitbCisgIGRubCBTb21lIHN5c3RlbXMgaGF2ZSBpY29udiBpbiBsaWJjLCBzb21lIGhhdmUgaXQgaW4gbGliaWNvbnYgKE9TRi8xIGFuZAorICBkbmwgdGhvc2Ugd2l0aCB0aGUgc3RhbmRhbG9uZSBwb3J0YWJsZSBHTlUgbGliaWNvbnYgaW5zdGFsbGVkKS4KKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisKKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKyAgZG5sIGFjY29yZGluZ2x5LgorICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisKKyAgZG5sIEFkZCAkSU5DSUNPTlYgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliaWNvbnYgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisgIGRubCB2aWEgLS13aXRob3V0LWxpYmljb252LXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LiBUaGUgZmlyc3QKKyAgZG5sIEFDX1RSWV9MSU5LIHdpbGwgdGhlbiBmYWlsLCB0aGUgc2Vjb25kIEFDX1RSWV9MSU5LIHdpbGwgc3VjY2VlZC4KKyAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJQ09OVl0pCisKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpY29udl0sIGFtX2N2X2Z1bmNfaWNvbnYsIFsKKyAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFsbGluZyBHTlUgbGliaWNvbnYiCisgICAgYW1fY3ZfbGliX2ljb252PW5vCisgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPl0sCisgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgIGljb252X2Nsb3NlKGNkKTtdLAorICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMpCisgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD5dLAorICAgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKyAgICAgICAgYW1fY3ZfbGliX2ljb252PXllcworICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgZmkKKyAgXSkKKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIGljb252XSwgYW1fY3ZfZnVuY19pY29udl93b3JrcywgWworICAgICAgZG5sIFRoaXMgdGVzdHMgYWdhaW5zdCBidWdzIGluIEFJWCA1LjEgYW5kIEhQLVVYIDExLjExLgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIGlmIHRlc3QgJGFtX2N2X2xpYl9pY29udiA9IHllczsgdGhlbgorICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisgICAgICBmaQorICAgICAgQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluICgpCit7CisgIC8qIFRlc3QgYWdhaW5zdCBBSVggNS4xIGJ1ZzogRmFpbHVyZXMgYXJlIG5vdCBkaXN0aW5ndWlzaGFibGUgZnJvbSBzdWNjZXNzZnVsCisgICAgIHJldHVybnMuICAqLworICB7CisgICAgaWNvbnZfdCBjZF91dGY4X3RvXzg4NTkxID0gaWNvbnZfb3BlbiAoIklTTzg4NTktMSIsICJVVEYtOCIpOworICAgIGlmIChjZF91dGY4X3RvXzg4NTkxICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDM0MlwyMDJcMjU0IjsgLyogRVVSTyBTSUdOICovCisgICAgICAgIGNoYXIgYnVmWzEwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF91dGY4X3RvXzg4NTkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKHJlcyA9PSAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICB9CisjaWYgMCAvKiBUaGlzIGJ1ZyBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRoZSBjYWxsZXIuICAqLworICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiAwLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJ1dGY4IiwgImlzbzg4NTkxIik7CisgICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0cmdlciBtaXQgYlwzNjZzZW4gQlwzNzRiY2hlbiBvaG5lIEF1Z2VubWFcMzM3IjsKKyAgICAgICAgY2hhciBidWZbNTBdOworICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OworICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOworICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkXzg4NTkxX3RvX3V0ZjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAoKGludClyZXMgPiAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICB9CisjZW5kaWYKKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgIHByb3ZpZGVkLiAgKi8KKyAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworICAgICAgaWNvbnZfb3BlbiAoIlVURi04IiwgIkVVQy1KUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgQUlYIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK31dLCBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLCBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz1ub10sCisgICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgYWl4KiB8IGhwdXgqKSBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICAgKikgICAgICAgICAgICBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAgICBlc2FjXSkKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgXSkKKyAgICBjYXNlICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgaW4KKyAgICAgICpubykgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8gOzsKKyAgICAgICopICAgYW1fZnVuY19pY29udj15ZXMgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubworICBmaQorICBpZiB0ZXN0ICIkYW1fZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9JQ09OViwgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLl0pCisgIGZpCisgIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYmljb252XSkKKyAgICBBQ19NU0dfUkVTVUxUKFskTElCSUNPTlZdKQorICBlbHNlCisgICAgZG5sIElmICRMSUJJQ09OViBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkICRJTkNJQ09OVgorICAgIGRubCBlaXRoZXIuCisgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorICAgIExJQklDT05WPQorICAgIExUTElCSUNPTlY9CisgIGZpCisgIEFDX1NVQlNUKExJQklDT05WKQorICBBQ19TVUJTVChMVExJQklDT05WKQorXSkKKworQUNfREVGVU4oW0FNX0lDT05WXSwKK1sKKyAgQU1fSUNPTlZfTElOSworICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBkZWNsYXJhdGlvbl0pCisgICAgQUNfQ0FDSEVfVkFMKGFtX2N2X3Byb3RvX2ljb252LCBbCisgICAgICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCitzaXplX3QgaWNvbnYgKGljb252X3QgY2QsIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CisjZWxzZQorc2l6ZV90IGljb252KCk7CisjZW5kaWYKK10sIFtdLCBhbV9jdl9wcm90b19pY29udl9hcmcxPSIiLCBhbV9jdl9wcm90b19pY29udl9hcmcxPSJjb25zdCIpCisgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiXSkKKyAgICBhbV9jdl9wcm90b19pY29udj1gZWNobyAiWyRdYW1fY3ZfcHJvdG9faWNvbnYiIHwgdHIgLXMgJyAnIHwgc2VkIC1lICdzLyggLygvJ2AKKyAgICBBQ19NU0dfUkVTVUxUKFskXXthY190Oi0KKyAgICAgICAgIH1bJF1hbV9jdl9wcm90b19pY29udikKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSUNPTlZfQ09OU1QsICRhbV9jdl9wcm90b19pY29udl9hcmcxLAorICAgICAgW0RlZmluZSBhcyBjb25zdCBpZiB0aGUgZGVjbGFyYXRpb24gb2YgaWNvbnYoKSBuZWVkcyBjb25zdC5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9tNC9saWItbGQubTQgYi9wb3B0LTEuMTYvbTQvbGliLWxkLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzRlMmMKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvbTQvbGliLWxkLm00CkBAIC0wLDAgKzEsMTEwIEBACisjIGxpYi1sZC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KK2RubCB3aXRoIGxpYnRvb2wubTQuCisKK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCitBQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKK10pCisKK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSBMRC4KK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCitbQUNfQVJHX1dJVEgoZ251LWxkLAorWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCit0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitlbHNlCisgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK0FDX0xJQl9QUk9HX0xEX0dOVQorXSkKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9tNC9saWItbGluay5tNCBiL3BvcHQtMS4xNi9tNC9saWItbGluay5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2QyNmZjCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L200L2xpYi1saW5rLm00CkBAIC0wLDAgKzEsNzA5IEBACisjIGxpYi1saW5rLm00IHNlcmlhbCAxMyAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfUFJFUkVRKDIuNTQpCisKK2RubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCitkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCitkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCisgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9wcmVmaXg9IiRMSUJbXU5BTUVbXV9QUkVGSVgiCisgIF0pCisgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCisgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKyAgTElCW11OQU1FW11fUFJFRklYPSIkYWNfY3ZfbGliW11OYW1lW11fcHJlZml4IgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQorICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisgIHVuZGVmaW5lKFtOYW1lXSkKKyAgdW5kZWZpbmUoW05BTUVdKQorXSkKKworZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCitkbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBJZiBmb3VuZCwgaXQKK2RubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCitkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKK2RubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKK2RubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisKKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisKKyAgZG5sIEFkZCAkSU5DW11OQU1FIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVdLCBbCisgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgorICAgIEFDX1RSWV9MSU5LKFskM10sIFskNF0sIFthY19jdl9saWJbXU5hbWU9eWVzXSwgW2FjX2N2X2xpYltdTmFtZT1ub10pCisgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKyAgXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0pCisgICAgQUNfTVNHX1JFU1VMVChbJExJQltdTkFNRV0pCisgIGVsc2UKKyAgICBIQVZFX0xJQltdTkFNRT1ubworICAgIGRubCBJZiAkTElCW11OQU1FIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQKKyAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCisgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorICAgIExJQltdTkFNRT0KKyAgICBMVExJQltdTkFNRT0KKyAgICBMSUJbXU5BTUVbXV9QUkVGSVg9CisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgIHVuZGVmaW5lKFtOYW1lXSkKKyAgdW5kZWZpbmUoW05BTUVdKQorXSkKKworZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKK2RubCAgIGFjbF9saWJleHQsCitkbmwgICBhY2xfc2hsaWJleHQsCitkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKK2RubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorZG5sICAgYWNsX2hhcmRjb2RlX2RpcmVjdCwKK2RubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgorQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCitbCisgIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCisgIG00X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2NvbmZpZy5ycGF0aF0pXSkKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKyAgICAuIC4vY29uZnRlc3Quc2gKKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgXSkKKyAgd2w9IiRhY2xfY3Zfd2wiCisgIGFjbF9saWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorICBhY2xfc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorICBhY2xfbGlicmFyeV9uYW1lc19zcGVjPSIkYWNsX2N2X2xpYnJhcnlfbmFtZXNfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKyAgYWNsX2hhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisgIGFjbF9oYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisgIEFDX0FSR19FTkFCTEUocnBhdGgsCisgICAgWyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRoc10sCisgICAgOiwgZW5hYmxlX3JwYXRoPXllcykKK10pCisKK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KK2RubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCitkbmwgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKyAgZG5sIEF1dG9jb25mID49IDIuNjEgc3VwcG9ydHMgZG90cyBpbiAtLXdpdGggb3B0aW9ucy4KKyAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICBdKQorICBBQ19MSUJfQVJHX1dJVEgoW2xpYl1OX0FfTV9FWy1wcmVmaXhdLAorWyAgLS13aXRoLWxpYl1OX0FfTV9FWy1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyAgLS13aXRob3V0LWxpYl1OX0FfTV9FWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKK1sKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgZmkKKyAgICBmaQorXSkKKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKyAgTElCW11OQU1FPQorICBMVExJQltdTkFNRT0KKyAgSU5DW11OQU1FPQorICBMSUJbXU5BTUVbXV9QUkVGSVg9CisgIHJwYXRoZGlycz0KKyAgbHRycGF0aGRpcnM9CisgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKyAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICBkbmwgU2VlIGlmIGl0IHdhcyBhbHJlYWR5IGxvY2F0ZWQgYnkgYW4gZWFybGllciBBQ19MSUJfTElOS0ZMQUdTCisgICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCisgICAgICAgICAgICBkbmwgdGhhdCB0aGlzIGxpYnJhcnkgZG9lc24ndCBleGlzdC4gU28ganVzdCBkcm9wIGl0LgorICAgICAgICAgICAgOgorICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGxpYiRuYW1lIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQgJExERkxBR1MKKyAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCisgICAgICAgICAgZm91bmRfZGlyPQorICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgIGZvdW5kX3NvPQorICAgICAgICAgIGZvdW5kX2E9CisgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNocmV4dD0KKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgorICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cworICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKyAgICAgICAgICAgICAgZG5sIHN0YW5kYXJkIC91c3IvbGliLgorICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZG5sIFJlbHkgb24gIi1MJGZvdW5kX2RpciIuCisgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRhY2xfaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorICAgICAgICAgICAgICAgICAgICAgIGRubCB2ZXJ5IG9sZCBzeXN0ZW1zLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQorICAgICAgICAgICAgICAgIGRubCBmYWxsYmFjay4KKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBBc3N1bWUgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5lYXJieS4KKyAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgTElCW11OQU1FW11fUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DW11OQU1FOyBkbworICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisgICAgICAgICAgICAgICAgICAgICAgSU5DW11OQU1FPSIke0lOQ1tdTkFNRX0ke0lOQ1tdTkFNRTorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG5sIExvb2sgZm9yIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIFJlYWQgdGhlIC5sYSBmaWxlLiBJdCBkZWZpbmVzIHRoZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgZG5sIGRsbmFtZSwgbGlicmFyeV9uYW1lcywgb2xkX2xpYnJhcnksIGRlcGVuZGVuY3lfbGlicywgY3VycmVudCwKKyAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KKyAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgIGRubCBXZSB1c2Ugb25seSBkZXBlbmRlbmN5X2xpYnMuCisgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorICAgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgorICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorICAgICAgICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1Mgb3IgdGhlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJExJQk5BTUUsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLVIqKQorICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtbCopCisgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICoubGEpCisgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4gVGhyb3cgYXdheSB0aGUgLmxhJ3MKKyAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKKyAgICAgICAgICAgICAgICAgICAgZG5sIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgIGRubCBNb3N0IGxpa2VseSBhbiBpbW1lZGlhdGUgbGlicmFyeSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG5sIERpZG4ndCBmaW5kIHRoZSBsaWJyYXJ5OyBhc3N1bWUgaXQgaXMgaW4gdGhlIHN5c3RlbSBkaXJlY3RvcmllcworICAgICAgICAgICAgZG5sIGtub3duIHRvIHRoZSBsaW5rZXIgYW5kIHJ1bnRpbWUgbG9hZGVyLiAoQWxsIHRoZSBzeXN0ZW0KKyAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQorICAgICAgICAgICAgZG5sIHJ1bnRpbWUgbG9hZGVyLCBvdGhlcndpc2UgdGhlIHN5c3RlbSBpcyBzZXZlcmVseSBtaXNjb25maWd1cmVkLikKKyAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIgbXVzdAorICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisgICAgICBhbGxkaXJzPQorICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgIGRvbmUKKyAgICAgIGRubCBOb3RlOiBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKyAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICBlbHNlCisgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKyAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGRubCBXaGVuIHVzaW5nIGxpYnRvb2wsIHRoZSBvcHRpb24gdGhhdCB3b3JrcyBmb3IgYm90aCBsaWJyYXJpZXMgYW5kCisgICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgorICAgIGRvbmUKKyAgZmkKK10pCisKK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorZG5sIHVubGVzcyBhbHJlYWR5IHByZXNlbnQgaW4gVkFSLgorZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCitBQ19ERUZVTihbQUNfTElCX0FQUEVORFRPVkFSXSwKK1sKKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKyAgICBoYXZlaXQ9CisgICAgZm9yIHggaW4gJFskMV07IGRvCisgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICBbJDFdPSIke1skMV19JHtbJDFdOisgfSRlbGVtZW50IgorICAgIGZpCisgIGRvbmUKK10pCisKK2RubCBGb3IgdGhvc2UgY2FzZXMgd2hlcmUgYSB2YXJpYWJsZSBjb250YWlucyBzZXZlcmFsIC1MIGFuZCAtbCBvcHRpb25zCitkbmwgcmVmZXJyaW5nIHRvIHVua25vd24gbGlicmFyaWVzIGFuZCBkaXJlY3RvcmllcywgdGhpcyBtYWNybyBkZXRlcm1pbmVzIHRoZQorZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgorZG5sIEFDX0xJQl9MSU5LRkxBR1NfRlJPTV9MSUJTKFtMREFERFZBUl0sIFtMSUJTVkFMVUVdLCBbVVNFLUxJQlRPT0xdKQorZG5sIHNldHMgTERBRERWQVIgdG8gbGlua2VyIG9wdGlvbnMgbmVlZGVkIHRvZ2V0aGVyIHdpdGggTElCU1ZBTFVFLgorZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCitkbmwgb3RoZXJ3aXNlIGxpbmtpbmcgd2l0aG91dCBsaWJ0b29sIGlzIGFzc3VtZWQuCitBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlNdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgICQxPQorICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKKyAgICAgIGRubCBiaW5hcnkuCisgICAgICBycGF0aGRpcnM9CisgICAgICBuZXh0PQorICAgICAgZm9yIG9wdCBpbiAkMjsgZG8KKyAgICAgICAgaWYgdGVzdCAtbiAiJG5leHQiOyB0aGVuCisgICAgICAgICAgZGlyPSIkbmV4dCIKKyAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICBmaQorICAgICAgICAgIG5leHQ9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICRvcHQgaW4KKyAgICAgICAgICAgIC1MKSBuZXh0PXllcyA7OworICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAorICAgICAgICAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBuZXh0PSA7OworICAgICAgICAgICAgKikgbmV4dD0gOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLW4gIiIkMyIiOyB0aGVuCisgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0tUiRkaXIiCisgICAgICAgICAgZG9uZQorICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFRoZSBsaW5rZXIgaXMgdXNlZCBmb3IgbGlua2luZyBkaXJlY3RseS4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyCisgICAgICAgICAgICBkbmwgbXVzdCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uCisgICAgICAgICAgICBhbGxkaXJzPQorICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGRpciIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgICAgJDE9IiRmbGFnIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisgICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgICAgbGliZGlyPSIkZGlyIgorICAgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9JGZsYWciCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoWyQxXSkKK10pCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvbTQvbGliLXByZWZpeC5tNCBiL3BvcHQtMS4xNi9tNC9saWItcHJlZml4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Njg0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvbTQvbGliLXByZWZpeC5tNApAQCAtMCwwICsxLDE4NSBAQAorIyBsaWItcHJlZml4Lm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTUpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCitkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CitkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCitbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKworZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorWworICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgIF0pCisgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCitbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorWworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICAgICAgICBdKQorICAgICAgZWxzZQorICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCisgICAgICBmaQorICAgIGZpCitdKQorICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgaGF2ZWl0PQorICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICBoYXZlaXQ9CisgICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKyAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK10pCisKK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKK2RubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAorZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCitbCisgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGVsc2UKKyAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgorICBmaQorICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKyAgZWxzZQorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBmaQorICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKK10pCisKK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCitkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKK1sKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgJDEKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorXSkKKworZG5sIEFDX0xJQl9QUkVQQVJFX01VTFRJTElCIGNyZWF0ZXMgYSB2YXJpYWJsZSBhY2xfbGliZGlyc3RlbSwgY29udGFpbmluZworZG5sIHRoZSBiYXNlbmFtZSBvZiB0aGUgbGliZGlyLCBlaXRoZXIgImxpYiIgb3IgImxpYjY0Ii4KK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0sCitbCisgIGRubCBUaGVyZSBpcyBubyBmb3JtYWwgc3RhbmRhcmQgcmVnYXJkaW5nIGxpYiBhbmQgbGliNjQuIFRoZSBjdXJyZW50CisgIGRubCBwcmFjdGljZSBpcyB0aGF0IG9uIGEgc3lzdGVtIHN1cHBvcnRpbmcgMzItYml0IGFuZCA2NC1iaXQgaW5zdHJ1Y3Rpb24KKyAgZG5sIHNldHMgb3IgQUJJcywgNjQtYml0IGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYjY0IGFuZCAzMi1iaXQKKyAgZG5sIGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYi4gV2UgZGV0ZXJtaW5lIHRoZSBjb21waWxlcidzIGRlZmF1bHQKKyAgZG5sIG1vZGUgYnkgbG9va2luZyBhdCB0aGUgY29tcGlsZXIncyBsaWJyYXJ5IHNlYXJjaCBwYXRoLiBJZiBhdCBsZWFzdAorICBkbmwgb2YgaXRzIGVsZW1lbnRzIGVuZHMgaW4gL2xpYjY0IG9yIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3aG9zZSBhYnNvbHV0ZQorICBkbmwgcGF0aG5hbWUgZW5kcyBpbiAvbGliNjQsIHdlIGFzc3VtZSBhIDY0LWJpdCBBQkkuIE90aGVyd2lzZSB3ZSB1c2UgdGhlCisgIGRubCBkZWZhdWx0LCBuYW1lbHkgImxpYiIuCisgIGFjbF9saWJkaXJzdGVtPWxpYgorICBzZWFyY2hwYXRoPWAoTENfQUxMPUMgJENDIC1wcmludC1zZWFyY2gtZGlycykgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MsXmxpYnJhcmllczogLCxwJyB8IHNlZCAtZSAncyxePSwsJ2AKKyAgaWYgdGVzdCAtbiAiJHNlYXJjaHBhdGgiOyB0aGVuCisgICAgYWNsX3NhdmVfSUZTPSIke0lGUz0gCX0iOyBJRlM9IjoiCisgICAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNocGF0aDsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRzZWFyY2hkaXIiOyB0aGVuCisgICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCisgICAgICAgICAgKi9saWI2NC8gfCAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAqKSBzZWFyY2hkaXI9YGNkICIkc2VhcmNoZGlyIiAmJiBwd2RgCisgICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OworICAgICAgICAgICAgIGVzYWMgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkYWNsX3NhdmVfSUZTIgorICBmaQorXSkKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9tNC9saWJ0b29sLm00IGIvcG9wdC0xLjE2L200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxY2RlMQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9tNC9saWJ0b29sLm00CkBAIC0wLDAgKzEsNzM2MCBAQAorIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorXSkKKworIyBzZXJpYWwgNTYgTFRfSU5JVAorCisKKyMgTFRfUFJFUkVRKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBhbmQgZXhpdCBpZiB0aGlzIGxpYnRvb2wgdmVyc2lvbiBpcyBsZXNzIHRoYXQgVkVSU0lPTi4KK200X2RlZnVuKFtMVF9QUkVSRVFdLAorW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorICAgICAgIFttNF9kZWZhdWx0KFskM10sCisJCSAgIFttNF9mYXRhbChbTGlidG9vbCB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCSAgICAgICAgICAgICA2MyldKV0sCisgICAgICAgWyQyXSldKQorCisKKyMgX0xUX0NIRUNLX0JVSUxERElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCittNF9kZWZ1bihbX0xUX0NIRUNLX0JVSUxERElSXSwKK1tjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIEFDX01TR19XQVJOKFtMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gYHB3ZGBdKSA7OworZXNhYworXSkKKworCisjIExUX0lOSVQoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9JTklUXSwKK1tBQ19QUkVSRVEoWzIuNThdKWRubCBXZSB1c2UgQUNfSU5DTFVERVNfREVGQVVMVAorQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCisKK2RubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKK2RubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86CitBQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCisKK2RubCBQYXJzZSBPUFRJT05TCitfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCitfTFRfU0VUVVAKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorbTRfZGVmaW5lKFtMVF9JTklUXSkKK10pIyBMVF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK0FVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCBbXSkKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1tmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKK10pCisKKworIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAorIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KK200X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKK1s6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CitdKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworCisKKyMgX0xUX1NFVFVQCisjIC0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9TRVRVUF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCitkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCitfTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKK2RubAorQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAorX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAorX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCisKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorXSkKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworX0xUX0NIRUNLX09CSkRJUgorCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKworb2xkX0NDPSIkQ0MiCitvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgX0xUX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKK0xUX1NVUFBPUlRFRF9UQUcoW0NDXSkKK19MVF9MQU5HX0NfQ09ORklHCitfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworX0xUX0NPTkZJR19DT01NQU5EUworXSkjIF9MVF9TRVRVUAorCisKKyMgX0xUX1BST0dfTFRNQUlOCisjIC0tLS0tLS0tLS0tLS0tLQorIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gYGNvbmZpZ3VyZScsIGFuZCBgY29uZmlnLnN0YXR1cycKKyMgbm93IHRoYXQgd2UgdXNlIEFDX0NPTkZJR19DT01NQU5EUyB0byBnZW5lcmF0ZSBsaWJ0b29sLiAgTm90YWJseSwKKyMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorIyBzbyB3ZSBwYXNzIGEgY29weSBhbG9uZyB0byBtYWtlIHN1cmUgaXQgaGFzIGEgc2Vuc2libGUgdmFsdWUgYW55d2F5LgorbTRfZGVmdW4oW19MVF9QUk9HX0xUTUFJTl0sCitbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJ10pCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK10pIyBfTFRfUFJPR19MVE1BSU4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBY2N1bXVsYXRlIGNvZGUgZm9yIGNyZWF0aW5nIGxpYnRvb2wuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCisjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCisjIGxhYmVsLgorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0pCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0woW0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIENPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorCisKKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09ORklHX1NBVkVfQ09NTUFORFNdLAorW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWyQyXSkKK10pCisKKworIyBfTFRfRk9STUFUX0NPTU1FTlQoW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgbGVhZGluZyBjb21tZW50IG1hcmtzIHRvIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGFuZCBhIHRyYWlsaW5nCisjIGZ1bGwtc3RvcCB0byB0aGUgd2hvbGUgY29tbWVudCBpZiBvbmUgaXMgbm90IHByZXNlbnQgYWxyZWFkeS4KK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKK1ttNF9pZnZhbChbJDFdLCBbCittNF9icGF0c3Vic3QoW200X2JwYXRzdWJzdChbJDFdLCBbXiAqXSwgWyMgXSldLAorICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCispXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRklYTUU6IEVsaW1pbmF0ZSBWQVJOQU1FICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9MVF9ERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0sIFtJUy1UQUdHRUQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisjIFZBUk5BTUUgaXMgdGhlIChiYXNlKSBuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjIFZBTFVFIG1heSBiZSAwLCAxIG9yIDIgZm9yIGEgY29tcHV0ZWQgcXVvdGUgZXNjYXBlZCB2YWx1ZSBiYXNlZCBvbgorIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KK200X2RlZmluZShbX0xUX0RFQ0xdLAorW2x0X2lmX2FwcGVuZF91bmlxKFtsdF9kZWNsX3Zhcm5hbWVzXSwgWyQyXSwgWywgXSwKKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKwlbbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyQyXSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW3ZhbHVlXSwgWyQzXSkKKyAgICBtNF9pZnZhbChbJDRdLAorCVtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtkZXNjcmlwdGlvbl0sIFskNF0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sCisJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorXSkKKworCisjIF9MVF9UQUdERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisKKworIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdGFnX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKworCisjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX2x0X2RlY2xfZmlsdGVyXSwKK1ttNF9jYXNlKFskI10sCisgIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbM10sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgWyQzXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sICRAKV0pW11kbmwKK10pCisKKworIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorCisKKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2RxdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKworCisjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCitfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICBtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFttNF9kcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpXSksCisgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKK200X2RlZmluZShbX2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9pZnZhbChbJDNdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pXSkKKworCisjIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgICBtNF9pZihbJDJdLCBbXSwKKwkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKwltNF9xdW90ZShtNF9zaGlmdCgkQCkpKSlbXWRubAorXSkKK200X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tsdF9qb2luKCRALCBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbJDFdLAorCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKK10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvIGBjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gYGNvbmZpZ3VyZScuICBWQVJOQU1FCisjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCitbJDE9J2AkRUNITyAiWCRdWyQxIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKKworCisjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgZGVsaW1pdCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgd2l0aCBzaW5nbGUgcXVvdGVzLCBzbyB3aGVuCisjIHdlIHdyaXRlIHRoZW0gdG8gY29uZmlnLnN0YXR1cywgd2UgaGF2ZSB0byBiZSBzdXJlIHRvIHF1b3RlIGFsbAorIyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHByb3Blcmx5LiAgSW4gY29uZmlndXJlLCB0aGlzIG1hY3JvIGV4cGFuZHMKKyMgZWFjaCB2YXJpYWJsZSBkZWNsYXJlZCB3aXRoIF9MVF9ERUNMIChhbmQgX0xUX1RBR0RFQ0wpIGludG86CisjCisjICAgIDx2YXI+PSdgJEVDSE8gIlgkPHZhcj4iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK200X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisgICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CittNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCitbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAorYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKyMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6CisjCisjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKyMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCittNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAorW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKK200X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAorICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKK200X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAorICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAorICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAorbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJworIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwKKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKKworCisjIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCisKKworIyBfTFRfQ09ORklHX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscworIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKKyMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCittNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCitbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCisJZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisJZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0CisJZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAorICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCisgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCitdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCitbCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIEZpeC11cCBmYWxsYmFjayBlY2hvIGlmIGl0IHdhcyBtYW5nbGVkIGJ5IHRoZSBhYm92ZSBxdW90aW5nIHJ1bGVzLgorY2FzZSBcJGx0X0VDSE8gaW4KKyonXFxcWyRdMCAtLWZhbGxiYWNrLWVjaG8iJylkbmwgIgorICBsdF9FQ0hPPVxgXCRFQ0hPICJYXCRsdF9FQ0hPIiB8IFwkWHNlZCAtZSAncy9cXFxcXFxcXFxcXFxcXFxbJF0wIC0tZmFsbGJhY2stZWNobyJcWyRdL1xbJF0wIC0tZmFsbGJhY2stZWNobyIvJ1xgCisgIDs7Citlc2FjCisKK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCitdKQorCisKKyMgTFRfT1VUUFVUCisjIC0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGFsbG93cyBlYXJseSBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdCAoYmVmb3JlCisjIEFDX09VVFBVVCBpcyBjYWxsZWQpLCBpbmNhc2UgaXQgaXMgdXNlZCBpbiBjb25maWd1cmUgZm9yIGNvbXBpbGF0aW9uCisjIHRlc3RzLgorQUNfREVGVU4oW0xUX09VVFBVVF0sCitbOiAke0NPTkZJR19MVD0uL2NvbmZpZy5sdH0KK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRDT05GSUdfTFRdKQorY2F0ID4iJENPTkZJR19MVCIgPDxfTFRFT0YKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIGEgbGlidG9vbCBzdHViIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKworbHRfY2xfc2lsZW50PWZhbHNlCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK0FTX1NIRUxMX1NBTklUSVpFCitfQVNfUFJFUEFSRQorCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBBU19CT1goW1J1bm5pbmcgJGFzX21lLl0pCit9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworbHRfY2xfaGVscD0iXAorXGAkYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAorZm9yIHVzZSBpbiBmdXJ0aGVyIGNvbmZpZ3VyZSB0aW1lIHRlc3RzIGJlZm9yZSB0aGUgcmVhbCBsaWJ0b29sIGlzCitnZW5lcmF0ZWQuCisKK1VzYWdlOiAkWzBdIFtbT1BUSU9OU11dCisKKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0ICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LiIKKworbHRfY2xfdmVyc2lvbj0iXAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFsgQUNfUEFDS0FHRV9WRVJTSU9OXSkKK2NvbmZpZ3VyZWQgYnkgJFswXSwgZ2VuZXJhdGVkIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLgorCitDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCit3aGlsZSB0ZXN0ICRbI10gIT0gMAorZG8KKyAgY2FzZSAkWzFdIGluCisgICAgLS12ZXJzaW9uIHwgLS12KiB8IC1WICkKKyAgICAgIGVjaG8gIiRsdF9jbF92ZXJzaW9uIjsgZXhpdCAwIDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgIGVjaG8gIiRsdF9jbF9oZWxwIjsgZXhpdCAwIDs7CisgICAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgICBkZWJ1Zz06IDs7CisgICAgLS1xdWlldCB8IC0tcSogfCAtLXNpbGVudCB8IC0tcyogfCAtcSApCisgICAgICBsdF9jbF9zaWxlbnQ9OiA7OworCisgICAgLSopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIG9wdGlvbjogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisKKyAgICAqKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBhcmd1bWVudDogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgJGx0X2NsX3NpbGVudDsgdGhlbgorICBleGVjIEFTX01FU1NBR0VfRkQ+L2Rldi9udWxsCitmaQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PF9MVEVPRgorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVQKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKQorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTCitBU19FWElUKDApCitfTFRFT0YKK2NobW9kICt4ICIkQ09ORklHX0xUIgorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGJ1dCBjb25maWcubHQgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLAorIyBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZywgd2hpY2ggZmFpbHMgb24gRE9TLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQKKyMgb3BlbiBieSBjb25maWd1cmUuICBIZXJlIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwgZWZmZWN0aXZlbHkgY2xvc2luZworIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGx0X2NsX3N1Y2Nlc3M9OgorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKKyAgZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKKyAgJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQorICBleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCisgICRsdF9jbF9zdWNjZXNzIHx8IEFTX0VYSVQoMSkKK2ZpCitdKSMgTFRfT1VUUFVUCisKKworIyBfTFRfQ09ORklHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCisjIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKKyMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgorbTRfZGVmdW4oW19MVF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKKyAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCisgIG00X2lmKF9MVF9UQUcsIFtDXSwgWworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKK19MVF9MSUJUT09MX1RBR19WQVJTCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKyAgX0xUX1BST0dfTFRNQUlOCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworCisgIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorXSwKK1tjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKK2RubCBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gdXNlICQxIGhlcmUsIHNpbmNlIF9MVF9UQUcgaXMgbm90IGV4cGFuZGVkCitkbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0xJQlRPT0xfVEFHX1ZBUlMoX0xUX1RBRykKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfRU9GCitdKWRubCAvbTRfaWYKK10sCitbbTRfaWYoWyQxXSwgW10sIFsKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQorXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUworXSkjIF9MVF9DT05GSUcKKworCisjIExUX1NVUFBPUlRFRF9UQUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhY2UgdGhpcyBtYWNybyB0byBkaXNjb3ZlciB3aGF0IHRhZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlidG9vbAorIyAtLXRhZyBvcHRpb24sIHVzaW5nOgorIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJworQUNfREVGVU4oW0xUX1NVUFBPUlRFRF9UQUddLCBbXSkKKworCisjIEMgc3VwcG9ydCBpcyBidWlsdC1pbiBmb3Igbm93CittNF9kZWZpbmUoW19MVF9MQU5HX0NfZW5hYmxlZF0sIFtdKQorbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQorCisKKyMgTFRfTEFORyhMQU5HKQorIyAtLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZiBub3QgYWxyZWFkeSBlbmFibGVkLgorQUNfREVGVU4oW0xUX0xBTkddLAorW0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK200X2Nhc2UoWyQxXSwKKyAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCisgIFtDKytdLAkJW19MVF9MQU5HKENYWCldLAorICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCisgIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKKyAgW0ZvcnRyYW5dLAkJW19MVF9MQU5HKEZDKV0sCisgIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCisgIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAorICAgIFtfTFRfTEFORygkMSldLAorICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCitdKSMgTFRfTEFORworCisKKyMgX0xUX0xBTkcoTEFOR05BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HXSwKK1ttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCisgIFtMVF9TVVBQT1JURURfVEFHKFskMV0pZG5sCisgIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKKyAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKKyAgX0xUX0xBTkdfJDFfQ09ORklHKCQxKV0pZG5sCitdKSMgX0xUX0xBTkcKKworCisjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisgIFtMVF9MQU5HKENYWCldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAorICBbTFRfTEFORyhGNzcpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAorICBbTFRfTEFORyhGQyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQorCitkbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCitkbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCisgIFtMVF9MQU5HKEdDSildLAorICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAorICAgIFtMVF9MQU5HKEdDSildLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAorICAgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX1JDXSwKKyAgW0xUX0xBTkcoUkMpXSwKKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKK10pIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworCisjIE9ic29sZXRlIG1hY3JvczoKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtMVF9MQU5HKEMrKyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbTFRfTEFORyhKYXZhKV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbXSkKKworCisjIF9MVF9UQUdfQ09NUElMRVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorCitfTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCitfTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCitfTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKK19MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCitdKSMgX0xUX1RBR19DT01QSUxFUgorCisKKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCitdKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisKKworIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCitdKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKKyAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKKyAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCWlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMDsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaV0pCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBdKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bWzAxMl1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVja3MgZm9yIGxpbmtlciBhbmQgY29tcGlsZXIgZmVhdHVyZXMgb24gZGFyd2luCittNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorWworICBtNF9yZXF1aXJlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKK1sgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorXSxbXSkKKyAgZWxzZQorICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgIGZpCitdKQorCisjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCittNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaV0sW10pCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK10pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCisKKyMgX0xUX1NIRUxMX0lOSVQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKK1tpZmRlZihbQUNfRElWRVJTSU9OX05PVElDRV0sCisJICAgICBbQUNfRElWRVJUX1BVU0goQUNfRElWRVJTSU9OX05PVElDRSldLAorCSBbQUNfRElWRVJUX1BVU0goTk9USUNFKV0pCiskMQorQUNfRElWRVJUX1BPUAorXSkjIF9MVF9TSEVMTF9JTklUCisKKworIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2gKKyMgd2lsbCBmaW5kIGFuIGVjaG8gY29tbWFuZCB3aGljaCBkb2Vzbid0IGludGVycHJldCBiYWNrc2xhc2hlcy4KK200X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbX0xUX1NIRUxMX0lOSVQoWworIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworY2FzZSBYJGx0X0VDSE8gaW4KK1gqLS1mYWxsYmFjay1lY2hvKQorICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgorICBFQ0hPPWBlY2hvICIkbHRfRUNITyIgfCBzZWQgJ3MsXFxcXFxbJF1cXFskXTAsJ1skXTAnLCdgCisgIDs7Citlc2FjCisKK0VDSE89JHtsdF9FQ0hPLWVjaG99CitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgorICA6CitlbGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KKyAgIyBZaXBwZWUsICRFQ0hPIHdvcmtzIQorICA6CitlbHNlCisgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KKyAgZXhlYyAkU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CitmaQorCitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCisgIHNoaWZ0CisgIGNhdCA8PF9MVF9FT0YKK1skXSoKK19MVF9FT0YKKyAgZXhpdCAwCitmaQorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0IC16ICIkbHRfRUNITyI7IHRoZW4KKyAgaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0CisgICAgZm9yIGNtZCBpbiAnc2VkIDUwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCAxMHEgIlskXTAiJyAnc2VkIDJxICJbJF0wIicgJ2VjaG8gdGVzdCc7IGRvCisgICAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgICAgaWYgeyBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgOyB9IDI+L2Rldi9udWxsICYmCisJIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsCisgICAgICB0aGVuCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKKworICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyAkRUNITyAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCisgICAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKKyAgICAjCisgICAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgorCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgaWYgKHRlc3QgLWYgJGRpci9lY2hvIHx8IHRlc3QgLWYgJGRpci9lY2hvJGFjX2V4ZWV4dCkgJiYKKyAgICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgRUNITz0iJGRpci9lY2hvIgorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisKKyAgICBpZiB0ZXN0ICJYJEVDSE8iID0gWGVjaG87IHRoZW4KKyAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgICAgaWYgdGVzdCAiWGB7IHByaW50IC1yICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7IHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KKyAgICAgICAgRUNITz0ncHJpbnQgLXInCisgICAgICBlbGlmIHsgdGVzdCAtZiAvYmluL2tzaCB8fCB0ZXN0IC1mIC9iaW4va3NoJGFjX2V4ZWV4dDsgfSAmJgorCSAgIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KKyAgICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCisgICAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCisgICAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAorICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KKyAgICAgIGVsc2UKKyAgICAgICAgIyBUcnkgdXNpbmcgcHJpbnRmLgorICAgICAgICBFQ0hPPSdwcmludGYgJXNcbicKKyAgICAgICAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisJICAgZWNob190ZXN0aW5nX3N0cmluZz1geyAkRUNITyAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgIyBDb29sLCBwcmludGYgd29ya3MKKwkgIDoKKyAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICBDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAorCSAgZXhwb3J0IENPTkZJR19TSEVMTAorCSAgU0hFTEw9IiRDT05GSUdfU0hFTEwiCisJICBleHBvcnQgU0hFTEwKKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgRUNITz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKKyAgICAgICAgZWxzZQorCSAgIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KKwkgIHByZXY9OgorCisJICBmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCA1MHEgIlskXTAiJzsgZG8KKwkgICAgaWYgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCI7IH0gMj4vZGV2L251bGwKKwkgICAgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIHByZXY9IiRjbWQiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiWyRdMCInOyB0aGVuCisJICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCisJICAgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICAgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICJbJF0wIiAkezErIlskXUAifQorCSAgZWxzZQorCSAgICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgICBFQ0hPPWVjaG8KKwkgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK2x0X0VDSE89JEVDSE8KK2lmIHRlc3QgIlgkbHRfRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisgICBsdF9FQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcWyRdMCAtLWZhbGxiYWNrLWVjaG8iCitmaQorCitBQ19TVUJTVChsdF9FQ0hPKQorXSkKK19MVF9ERUNMKFtdLCBbU0hFTExdLCBbMV0sIFtTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzXSkKK19MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwKKyAgICBbQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzXSkKK10pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCisKKyMgX0xUX0VOQUJMRV9MT0NLCisjIC0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitbQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKyAgICBbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdbI11saW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCSAgICA7OworCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKKyAgICAgQUNfTEFOR19QT1BdKQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7Oworc3BhcmMqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKK10pIyBfTFRfRU5BQkxFX0xPQ0sKKworCisjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorW0FDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKK3Rlc3QgLXogIiRBUiIgJiYgQVI9YXIKK3Rlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CitfTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKK19MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0pCisKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CitfTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQorCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK19MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfREVDTChbXSwgW29sZF9wb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKworCisjIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkMyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitlbHNlCisgICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBfTFRfQ09NUElMRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbX0xUX0NPTVBJTEVSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW10pCisKKworIyBfTFRfTElOS0VSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxpbmtlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfTElOS0VSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEVDSE8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICQyPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZmkKK10pIyBfTFRfTElOS0VSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQorCisKKyMgTFRfQ01EX01BWF9MRU4KKyMtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAorICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgJFNIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KK19MVF9ERUNMKFtdLCBbbWF4X2NtZF9sZW5dLCBbMF0sCisgICAgW1doYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD9dKQorXSkjIExUX0NNRF9NQVhfTEVOCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbTFRfQ01EX01BWF9MRU5dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtdKQorCisKKyMgX0xUX0hFQURFUl9ETEZDTgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0hFQURFUl9ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKWRubAorXSkjIF9MVF9IRUFERVJfRExGQ04KKworCisjIF9MVF9UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKKyMgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RSWV9ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIFskNF0KK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorWyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9XQorX0xUX0VPRgorICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgJDMKKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCitdKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgorCisKKyMgTFRfU1lTX0RMT1BFTl9TRUxGCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLFsKKyAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgXSkKKyAgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAorCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisJICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSwKKwlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKKwkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKKwkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKKwkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAorCQkgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCJdLAorCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCisJCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0pCisJICAgICAgXSkKKwkgICAgXSkKKwkgIF0pCisJXSkKKyAgICAgIF0pCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPXllcworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZiwgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vLCBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcykKKyAgICBdKQorCisgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKKyAgICAgIF0pCisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorXSkjIExUX1NZU19ETE9QRU5fU0VMRgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX0NfTyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KKyMgVGhpcyBtYWNybyBkb2VzIG5vdCBoYXJkIGNvZGUgdGhlIGNvbXBpbGVyIGxpa2UgQUNfUFJPR19DQ19DX08uCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCitdKQorX0xUX1RBR0RFQ0woW2NvbXBpbGVyX2Nfb10sIFtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb10sIFsxXSwKKwlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCitdKSMgX0xUX0NPTVBJTEVSX0NfTworCisKKyMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAorW200X3JlcXVpcmUoW19MVF9FTkFCTEVfTE9DS10pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT01QSUxFUl9DX08oWyQxXSkKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKK19MVF9ERUNMKFtdLCBbbmVlZF9sb2Nrc10sIFsxXSwgW011c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uP10pCitdKSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MKKworCisjIF9MVF9DSEVDS19PQkpESVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DSEVDS19PQkpESVJdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCitbcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCitvYmpkaXI9JGx0X2N2X29iamRpcgorX0xUX0RFQ0woW10sIFtvYmpkaXJdLCBbMF0sCisgICAgICAgICBbVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW0xUX09CSkRJUl0pZG5sCitBQ19ERUZJTkVfVU5RVU9URUQoTFRfT0JKRElSLCAiJGx0X2N2X29iamRpci8iLAorICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQorXSkjIF9MVF9DSEVDS19PQkpESVIKKworCisjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEhdLAorW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCitfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQoraWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAorICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKKyAgIHRlc3QgIlgkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgorICAgICB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCitmaQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQorCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2FjdGlvbl0sIFswXSwKKyAgICBbSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGVdKQorXSkjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSAorCisKKyMgX0xUX0NNRF9TVFJJUExJQgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9TVFJJUExJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtdLCBbb2xkX3N0cmlwbGliXSwgWzFdLCBbQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCitdKSMgX0xUX0NNRF9TVFJJUExJQgorCisKKyMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKK200X2lmKFskMV0sCisJW10sIFsKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICBpZiAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJzsnID4vZGV2L251bGwgOyB0aGVuCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgZWxzZQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgZmkKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9CisgIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpXSkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbWzQtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpW1s0NV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRob3N0X29zIGluCisgIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCAkR1JFUCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CisgICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKKyAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQorICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCisgICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKKyAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZXNhYworICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCittNF9pZihbJDFdLCBbXSxbCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZDEqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFtbMTIzXV0qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1syLTldXSogfCBmcmVlYnNkZWxmMy5bWzItOV1dKiB8IFwKKyAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKKyAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgW0FTX0lGKFsgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsXSwKKyAgICAgICBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKKyAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFkZCBBQkktc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIHN5c3RlbSBsaWJyYXJ5IHBhdGguCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliNjQgL3Vzci9saWI2NCAvbGliIC91c3IvbGliIgorCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuW1s4OV1dIHwgb3BlbmJzZDIuW1s4OV1dLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKK19MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCisgICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCitfTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKKyAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCitfTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKK19MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQorX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAorICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKK19MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQorX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCisgICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKK19MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCisgICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQorX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKKyAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorICAgIG5vdCBzaG93bl1dKQorX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitdKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgorCisKKyMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KK1tbXFwvKl0gfCAgPzpbXFwvXSpdKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKK2RubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCisgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWNdKQorTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCisJIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKK10pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCisKKworIyBfTFRfUEFUSF9NQUdJQworIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKK1tfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBfTFRfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCitdKSMgX0xUX1BBVEhfTUFHSUMKKworCisjIExUX1BBVEhfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbTFRfUEFUSF9MRF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCitfTFRfREVDTChbXSwgW3JlbG9hZF9mbGFnXSwgWzFdLCBbSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlc10pZG5sCitfTFRfREVDTChbXSwgW3JlbG9hZF9jbWRzXSwgWzJdKWRubAorXSkjIF9MVF9DTURfUkVMT0FECisKKworIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcworIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllc10sCitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKK1tsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbWzQtOV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MpCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBQQS1SSVNDIFswLTldLlswLTldJ10KKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCitdKQorZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCitfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCitfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCitdKSMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorCisKKyMgTFRfUEFUSF9OTQorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyCitBQ19ERUZVTihbTFRfUEFUSF9OTV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKK1tpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaV0pCitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbImR1bXBiaW4gLXN5bWJvbHMiICJsaW5rIC1kdW1wIC1zeW1ib2xzIl0sIDopCisgIEFDX1NVQlNUKFtEVU1QQklOXSkKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCitBQ19TVUJTVChbTk1dKQorX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKKworQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKKyAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGFjX2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCpdKQorXSkjIExUX1BBVEhfTk0KKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK0FVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKworCisjIExUX0xJQl9NCisjIC0tLS0tLS0tCisjIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKK0FDX0RFRlVOKFtMVF9MSUJfTV0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jeWd3aW4qIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKKyAgOzsKK2VzYWMKK0FDX1NVQlNUKFtMSUJNXSkKK10pIyBMVF9MSUJfTQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0NIRUNLX0xJQk1dLCBbTFRfTElCX01dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19DSEVDS19MSUJNXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfTk9fUlRUSShbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfTk9fUlRUSV0sCitbbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKKyAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQorZmkKK19MVF9UQUdERUNMKFtub19idWlsdGluX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWddLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnNdKQorXSkjIF9MVF9DT01QSUxFUl9OT19SVFRJCisKKworIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCitBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKK1sKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW1tCQ0RUXV0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tbQkRSVF1dJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW1tBQkRUXV0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW1tERk5TVFVdXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKK2VzYWMKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZnhdIgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworY29uc3Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKwkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKwkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKK10pCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoZmFpbGVkKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG9rKQorZmkKKworX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfcGlwZV0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwgWzFdLAorICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKKyAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKKyAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWRdKQorXSkgIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisKKworIyBfTFRfQ09NUElMRVJfUElDKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX1BJQ10sCitbbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10pCittNF9pZihbJDFdLCBbQ1hYXSwgWworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworICAgICpkamdwcCopCisgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgIDs7CisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqcW54KiB8ICpudG8qKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeFtbNC05XV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICBmaQorCSAgICA7OworCSAgYUNDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqfGlhNjQqKQorCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGludGVyaXgqKQorCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQorCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBsaW51eCogfCBrKmJzZCotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCitdLAorWworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBjY2MqKQorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICAgIDs7CisgICAgICB4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xIG9uIFBQQworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCisJICAjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIDs7CisJKlN1blwgRiopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCitfTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKKyAgICBbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCisgICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7CisgICAgIGVzYWNdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQorZmkKK19MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKwlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCitfTFRfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAorICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCisgICRsdF90bXBfc3RhdGljX2ZsYWcsCisgIFtdLAorICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCitfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZ10pCitdKSMgX0xUX0NPTVBJTEVSX1BJQworCisKKyMgX0xUX0xJTktFUl9TSExJQlMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAorW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbWzQtOV1dKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKyAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgOzsKKyAgZXNhYworICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KK10sIFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCisgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCitkbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKKyoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251KQorICAgICAgdG1wX2RpZXQ9bm8KKyAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQorCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgdGhlbgorCXRtcF9hZGRmbGFnPQorCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtbY0NdXSopCQkJIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJZXNhYworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjFbWzAtNV1dLiopCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCisgICAgICBydW5wYXRoX3Zhcj0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICBlbHNlCisgICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKikKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFtbNC05XV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYnNkaVtbNDVdXSopCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorICAgICAgbGliZXh0PWxpYgorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisgICAgICBzaHJleHRfY21kcz0iLmRsbCIKKyAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgJEVDSE8gIlgkZGVwbGlicyIgfCAkWHNlZCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgICBfTFRfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKT0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBmcmVlYnNkMSopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisgICAgICAgIEFDX0xJTktfSUZFTFNFKGludCBmb28odm9pZCkge30sCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgICkKKyAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICBlbHNlCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKyAgICAgICopCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmxhcmdlZHluc3ltJworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKK10pCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCit0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK19MVF9UQUdWQVIod2l0aF9nbnVfbGQsICQxKT0kd2l0aF9nbnVfbGQKKworX0xUX0RFQ0woW10sIFtsaWJleHRdLCBbMF0sIFtPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIildKWRubAorX0xUX0RFQ0woW10sIFtzaHJleHRfY21kc10sIFsxXSwgW1NoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXh0cmFjdF9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSkKKyAgICAgICRSTSBjb25mdGVzdCoKKyAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICAgICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKwlwaWNfZmxhZz0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQorICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisgICAgICAgIGlmIEFDX1RSWV9FVkFMKF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCisgICAgICAgIHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICBlbHNlCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisgICAgICAgIGZpCisgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworICAgICAgZWxzZQorICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgIGZpCisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpXSkKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCitfTFRfVEFHREVDTChbYnVpbGRfbGlidG9vbF9uZWVkX2xjXSwgW2FyY2hpdmVfY21kc19uZWVkX2xjXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFthbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXNdLAorICAgIFtlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zXSkKK19MVF9UQUdERUNMKFtdLCBbd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlc10pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX25lZWRzX29iamVjdF0sIFsxXSwKKyAgICBbV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHldKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfY21kc10sIFsyXSwgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisgICAgYSBzaGFyZWQgYXJjaGl2ZS5dKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW3dpdGhfZ251X2xkXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3RdKQorX0xUX1RBR0RFQ0woW10sIFthbGxvd191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHRdKQorX0xUX1RBR0RFQ0woW10sIFtub191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisgICAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF0sIFsxXSwKKyAgICBbW0lmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeQorICAgIGR1cmluZyBsaW5raW5nLiAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisgICAgImFic29sdXRlIiwgaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX21pbnVzX0xdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX3NobGlicGF0aF92YXJdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2F1dG9tYXRpY10sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyAgICBhZ2FpbnN0IGl0XSkKK19MVF9UQUdERUNMKFtdLCBbaW5oZXJpdF9ycGF0aF0sIFswXSwKKyAgICBbU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyAgICB0byBydW50aW1lIHBhdGggbGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbXSwgW2ZpeF9zcmNmaWxlX3BhdGhdLCBbMV0sCisgICAgW0ZpeCB0aGUgc2hlbGwgdmFyaWFibGUgJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlcl0pCitfTFRfVEFHREVDTChbXSwgW2Fsd2F5c19leHBvcnRfc3ltYm9sc10sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2V4Y2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICBbU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICBbU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCitfTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitkbmwgX0xUX1RBR0RFQ0woW10sIFt0aHJlYWRfc2FmZV9mbGFnX3NwZWNdLCBbMV0sCitkbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCitdKSMgX0xUX0xJTktFUl9TSExJQlMKKworCisjIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitsdF9zYXZlX0NDPSIkQ0MiCitBQ19MQU5HX1BVU0goQykKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworCitfTFRfVEFHX0NPTVBJTEVSCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorICBMVF9TWVNfRExPUEVOX1NFTEYKKyAgX0xUX0NNRF9TVFJJUExJQgorCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgIGZpCisgICAgOzsKKworICBhaXhbWzQtOV1dKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGZpCisgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKK0FDX0xBTkdfUE9QCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfQ19DT05GSUcKKworCisjIF9MVF9QUk9HX0NYWAorIyAtLS0tLS0tLS0tLS0KKyMgU2luY2UgQUNfUFJPR19DWFggaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgZysrIGlmIHRoZXJlIGlzIG5vIGMrKworIyBjb21waWxlciwgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24gaGVyZS4KK200X2RlZnVuKFtfTFRfUFJPR19DWFhdLAorWworcHVzaGRlZihbQUNfTVNHX0VSUk9SXSwgW19sdF9jYXVnaHRfQ1hYX2Vycm9yPXllc10pCitBQ19QUk9HX0NYWAoraWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKyAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KKyAgQUNfUFJPR19DWFhDUFAKK2Vsc2UKKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCitmaQorcG9wZGVmKFtBQ19NU0dfRVJST1JdKQorXSkjIF9MVF9QUk9HX0NYWAorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW19MVF9QUk9HX0NYWF0sIFtdKQorCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbQUNfUkVRVUlSRShbX0xUX1BST0dfQ1hYXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorCitBQ19MQU5HX1BVU0goQysrKQorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltbXV0pIHsgcmV0dXJuKDApOyB9JworCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9MRD0kTEQKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBHQ0M9JEdYWAorICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCisgIGZpCisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECisgIGZpCisgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgIENDPSR7Q1hYLSJjKysifQorICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKyAgICBmaQorCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKyAgICAgIExUX1BBVEhfTEQKKworICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPScke3dsfScKKworICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKKwkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisJICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgIyBsaWJyYXJpZXMuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgY2hvcnVzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAqKQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisKKyAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisgICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGVsc2UKKwkgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkW1sxMl1dKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQorCSMgc3dpdGNoIHRvIEVMRgorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QtZWxmKikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAgICAgIyBjb252ZW50aW9ucworICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgICA7OworCisgICAgICBnbnUqKQorICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGhwdXgxMCp8aHB1eDExKikKKyAgICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisgICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgYUNDKikKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICBocHBhKjY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgaWE2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICBpYTY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgKikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgZXNhYworCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaW50ZXJpeFtbMy05XV0qKQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgIGVsc2UKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgIC1vICRsaWInCisJICAgICAgZmkKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFtbMS01XV0qIHwgKnBnY3BwXCBbWzEtNV1dKikKKwkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCInCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorCQkkUkFOTElCICRvbGRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiB3aWxsIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gJEVDSE8gIlgkdGVtcGxpc3QiIHwgJFhzZWQgLWUgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQkkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKwk7OworCisgICAgICBvcGVuYnNkMiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgb3BlbmJzZCopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gJEVDSE8gIlgkdGVtcGxpc3QiIHwgJFhzZWQgLWUgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkJKikKKwkJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwkgICopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorICAgIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIExEQ1hYPSRMRAorICBMRD0kbHRfc2F2ZV9MRAorICBHQ0M9JGx0X3NhdmVfR0NDCisgIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKyAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECisgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKKworCisjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKyMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK19MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHByZWRlcHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9CisKK2RubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAorZG5sIGJlY2F1c2UgaXQgY29udGFpbnMgY29kZSBpbnRlbmRlZCBmb3IgYW4gZXhlY3V0YWJsZSwKK2RubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKK2RubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCitkbmwgYnV0IGl0J3Mgb25seSB1c2VkIGhlcmUuLi4KK200X2lmKFskMV0sIFtdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2ludCBhOwordm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KK19MVF9FT0YKK10sIFskMV0sIFtDWFhdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK19MVF9FT0YKK10sIFskMV0sIFtGNzddLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyKjQgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0ZDXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlciBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbR0NKXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitwdWJsaWMgY2xhc3MgZm9vIHsKKyAgcHJpdmF0ZSBpbnQgYTsKKyAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7CisgICAgYSA9IDA7CisgIH0KK307CitfTFRfRU9GCitdKQorZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK2lmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAkcCBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8CisgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGVsc2UKKwkgcHJldj0KKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgY2FzZSAkcCBpbgorCSAtTCogfCAtUiopCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKKwkgICBlbHNlCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCittNF9pZihbJDFdLCBbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4W1szLTldXSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7CisKK2xpbnV4KikKKyAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICpTdW5cIEMqKQorICAgICMgU3VuIEMrKyA1LjkKKworICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKikKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKK10pCisKK2Nhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKyoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Citlc2FjCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KK2lmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAorZmkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAorICAgIFtUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBfb2JqZWN0c10sIFsxXSwKKyAgICBbRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisgICAgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwX29iamVjdHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhdLCBbMV0sCisgICAgW1RoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisgICAgYSBzaGFyZWQgbGlicmFyeV0pCitdKSMgX0xUX1NZU19ISURERU5fTElCREVQUworCisKKyMgX0xUX1BST0dfRjc3CisjIC0tLS0tLS0tLS0tLQorIyBTaW5jZSBBQ19QUk9HX0Y3NyBpcyBicm9rZW4sIGluIHRoYXQgaXQgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nCisjIGlmIHRoZXJlIGlzIG5vIGZvcnRyYW4gY29tcGlsZXIsIHdlIGhhdmUgb3VyIG93biB2ZXJzaW9uIGhlcmUuCittNF9kZWZ1bihbX0xUX1BST0dfRjc3XSwKK1sKK3B1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfZGlzYWJsZV9GNzc9eWVzXSkKK0FDX1BST0dfRjc3CitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0ICJYJEY3NyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GNzc9eWVzCitmaQorcG9wZGVmKFtBQ19NU0dfRVJST1JdKQorXSkjIF9MVF9QUk9HX0Y3NworCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW19MVF9QUk9HX0Y3N10sIFtdKQorCisKKyMgX0xUX0xBTkdfRjc3X0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gNzcgY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0Y3N19DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0Y3N10pZG5sCitBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCithY19leHQ9ZgorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRjc3IGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIENDPSR7Rjc3LSJmNzcifQorICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisgIEdDQz0kRzc3CisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0iJGx0X3NhdmVfQ0MiCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0Y3N19DT05GSUcKKworCisjIF9MVF9QUk9HX0ZDCisjIC0tLS0tLS0tLS0tCisjIFNpbmNlIEFDX1BST0dfRkMgaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZworIyBpZiB0aGVyZSBpcyBubyBmb3J0cmFuIGNvbXBpbGVyLCB3ZSBoYXZlIG91ciBvd24gdmVyc2lvbiBoZXJlLgorbTRfZGVmdW4oW19MVF9QUk9HX0ZDXSwKK1sKK3B1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfZGlzYWJsZV9GQz15ZXNdKQorQUNfUFJPR19GQworaWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0ICJYJEZDIiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0ZDPXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19GQworCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW19MVF9QUk9HX0ZDXSwgW10pCisKKworIyBfTFRfTEFOR19GQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbX0xUX1BST0dfRkNdKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4pCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmYyB0ZXN0IHNvdXJjZXMuCithY19leHQ9JHthY19mY19zcmNleHQtZn0KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGZjIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBDQz0ke0ZDLSJmOTUifQorICBjb21waWxlcj0kQ0MKKyAgR0NDPSRhY19jdl9mY19jb21waWxlcl9nbnUKKworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJGFjX2N2X2ZjX2NvbXBpbGVyX2dudSIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0iJGx0X3NhdmVfQ0MiCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRkNfQ09ORklHCisKKworIyBfTFRfTEFOR19HQ0pfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgSmF2YSBDb21waWxlciBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfR0NKX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19HQ0pdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1qYXZhCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbW11dIGFyZ3YpIHt9OyB9JworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R0NKLSJnY2oifQorY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworCisKKyMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1yYworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JworCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIgorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz0KK0NDPSR7UkMtIndpbmRyZXMifQorY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisKK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgOgorICBfTFRfQ09ORklHKCQxKQorZmkKKworR0NDPSRsdF9zYXZlX0dDQworQUNfTEFOR19SRVNUT1JFCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfUkNfQ09ORklHCisKKworIyBMVF9QUk9HX0dDSgorIyAtLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKK1ttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAorICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCisgICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQorICAgICAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCisgICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19HQ0pdLCBbTFRfUFJPR19HQ0pdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQorCisKKyMgTFRfUFJPR19SQworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19SQ10sCitbQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKKworCisjIF9MVF9ERUNMX0VHUkVQCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQorX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKK19MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQorZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KK0FDX1NVQlNUKFtHUkVQXSkKK10pCisKKworIyBfTFRfREVDTF9PQkpEVU1QCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAorW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCitBQ19TVUJTVChbT0JKRFVNUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfU0VECisjIC0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcworIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCitbQUNfUFJPR19TRUQKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKK19MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitfTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKKyAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQorXSkjIF9MVF9ERUNMX1NFRAorCittNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittNF9kZWZ1bihbQUNfUFJPR19TRURdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKK1sjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworbHRfYWNfbWF4PTAKK2x0X2FjX2NvdW50PTAKKyMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCisjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCisgIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCisgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorICBsdF9hY19jb3VudD0wCisgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgorICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgYnJlYWsKKyAgZmkKKyAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgorICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCisgICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCisgICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKKyAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCisgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAorICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGZpCisgIGRvbmUKK2RvbmUKK10pCitTRUQ9JGx0X2N2X3BhdGhfU0VECitBQ19TVUJTVChbU0VEXSkKK0FDX01TR19SRVNVTFQoWyRTRURdKQorXSkjQUNfUFJPR19TRUQKK10pI200X2lmbmRlZgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfU0VEXSwgW0FDX1BST0dfU0VEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLCBbXSkKKworCisjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAorIyBvciBoYXMgc29tZSBvdGhlciB1c2VmdWwgZmVhdHVyZXMuCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHNdKQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYiwsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworQUNfTVNHX1JFU1VMVChbJHhzaV9zaGVsbF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbeHNpX3NoZWxsPSckeHNpX3NoZWxsJ10pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgIis9Il0pCitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiRbMV0rPVwkWzJdIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCitBQ19NU0dfUkVTVUxUKFskbHRfc2hlbGxfYXBwZW5kXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFtsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnXSkKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorX0xUX0RFQ0woW10sIFtsdF91bnNldF0sIFswXSwgW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCJdKWRubAorCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworX0xUX0RFQ0woW1NQMk5MXSwgW2x0X1NQMk5MXSwgWzFdLCBbdHVybiBzcGFjZXMgaW50byBuZXdsaW5lc10pZG5sCitfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKK10pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKworCisjIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQm91cm5lIGFuZCBYU0kgY29tcGF0aWJsZSB2YXJpYW50cyBvZiBzb21lIHVzZWZ1bCBzaGVsbCBmdW5jdGlvbnMuCittNF9kZWZ1bihbX0xUX1BST0dfWFNJX1NIRUxMRk5TXSwKK1tjYXNlICR4c2lfc2hlbGwgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorfQorCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCitmdW5jX3N0cmlwbmFtZSAoKQoreworICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKyAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKyAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKyAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KK30KKworIyBmdW5jX29wdF9zcGxpdAorZnVuY19vcHRfc3BsaXQgKCkKK3sKKyAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CisgIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19Cit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CisgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CisgIGVzYWMKK30KKworIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKK2Z1bmNfeGZvcm0gKCkKK3sKKyAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworfQorCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KK30KKworX0xUX0VPRgorICAgIDs7CisgICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgZWxzZQorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgZmkKK30KKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKK30KKworZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKK2RubCBBIHBvcnRhYmxlIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZ2VuZXJhbC5tNHNoCitkbmwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQgaGVyZS4KKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCitmdW5jX3N0cmlwbmFtZSAoKQoreworICBjYXNlICR7Mn0gaW4KKyAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiWCR7M30iIFwKKyAgICAgICAgICAgfCAkWHNlZCAtZSAicyVeJHsxfSUlIiAtZSAicyVcXFxcJHsyfVwkJSUiYDs7CisgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlJHsyfVwkJSUiYDs7CisgIGVzYWMKK30KKworIyBzZWQgc2NyaXB0czoKK215X3NlZF9sb25nX29wdD0nMXMvXlwoLVtbXj1dXSpcKT0uKi9cMS87cScKK215X3NlZF9sb25nX2FyZz0nMXMvXi1bW149XV0qPS8vJworCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX29wdCJgCisgIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbXlfc2VkX2xvbmdfYXJnImAKK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbG8ybyJgCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgJ3MvXC5bW14uXV0qJC8ubG8vJ2AKK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJFtAXSJgCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiRbMV0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30KKworX0xUX0VPRgorZXNhYworCitjYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiRbMV0rPVwkWzJdIgorfQorX0xUX0VPRgorICAgIDs7CisgICopCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgZXZhbCAiJFsxXT1cJCRbMV1cJFsyXSIKK30KKworX0xUX0VPRgorICAgIDs7CisgIGVzYWMKK10pCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvbTQvbHRvcHRpb25zLm00IGIvcG9wdC0xLjE2L200L2x0b3B0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDE1MWEzCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L200L2x0b3B0aW9ucy5tNApAQCAtMCwwICsxLDM2OCBAQAorIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNiBsdG9wdGlvbnMubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworCisjIF9MVF9NQU5HTEVfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9PUFRJT05dLAorW1tfTFRfT1BUSU9OX11tNF9icGF0c3Vic3QoJDFfXyQyLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisKKyMgX0xUX1NFVF9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE9QVElPTi1OQU1FIGZvciBtYWNybyBNQUNSTy1OQU1FLCBhbmQgaWYgdGhlcmUgaXMgYQorIyBtYXRjaGluZyBoYW5kbGVyIGRlZmluZWQsIGRpc3BhdGNoIHRvIGl0LiAgT3RoZXIgT1BUSU9OLU5BTUVzIGFyZQorIyBzYXZlZCBhcyBhIGZsYWcuCittNF9kZWZpbmUoW19MVF9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCittNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgICAgICBfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiBgJDInXSldKVtdZG5sCitdKQorCisKKyMgX0xUX0lGX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK200X2RlZmluZShbX0xUX0lGX09QVElPTl0sCitbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSksIFskM10sIFskNF0pXSkKKworCisjIF9MVF9VTkxFU1NfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCwgSUYtTk9ULVNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLU5PVC1TRVQgdW5sZXNzIGFsbCBvcHRpb25zIGluIE9QVElPTi1MSVNUIGZvciBNQUNSTy1OQU1FCisjIGFyZSBzZXQuCittNF9kZWZpbmUoW19MVF9VTkxFU1NfT1BUSU9OU10sCitbbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisJICAgIFttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKSwKKwkJICAgICAgW200X2RlZmluZShbJDBfZm91bmRdKV0pXSlbXWRubAorbTRfaWZkZWYoWyQwX2ZvdW5kXSwgW200X3VuZGVmaW5lKFskMF9mb3VuZF0pXSwgWyQzCitdKVtdZG5sCitdKQorCisKKyMgX0xUX1NFVF9PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTi1MSVNUIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgTGlidG9vbCBvcHRpb25zIGFzc29jaWF0ZWQKKyMgd2l0aCBNQUNSTy1OQU1FLiAgSWYgYW55IE9QVElPTiBoYXMgYSBtYXRjaGluZyBoYW5kbGVyIGRlY2xhcmVkIHdpdGgKKyMgTFRfT1BUSU9OX0RFRklORSwgZGlzcGF0Y2ggdG8gdGhhdCBtYWNybzsgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0CisjIHRoZSB1bmtub3duIG9wdGlvbiBhbmQgZXhpdC4KK200X2RlZnVuKFtfTFRfU0VUX09QVElPTlNdLAorWyMgU2V0IG9wdGlvbnMKK200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorICAgIFtfTFRfU0VUX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKV0pCisKK200X2lmKFskMV0sW0xUX0lOSVRdLFsKKyAgZG5sCisgIGRubCBTaW1wbHkgc2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMgKGkuZSBvZmYpIGlmIGJvb2xlYW4gb3B0aW9ucyB3ZXJlIG5vdAorICBkbmwgc3BlY2lmaWVkOgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49bm8KKyAgXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sIFtlbmFibGVfd2luMzJfZGxsPW5vCisgIF0pCisgIGRubAorICBkbmwgSWYgbm8gcmVmZXJlbmNlIHdhcyBtYWRlIHRvIHZhcmlvdXMgcGFpcnMgb2Ygb3Bwb3Npbmcgb3B0aW9ucywgdGhlbgorICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgorICBkbmwgYHNoYXJlZCcgbm9yIGBkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorICBkbmwgYXJjaGl2ZXMgYnkgZGVmYXVsdDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbcGljLW9ubHkgbm8tcGljXSwgW19MVF9XSVRIX1BJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAorICAJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisgIF0pCitdKSMgX0xUX1NFVF9PUFRJT05TCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWNyb3MgdG8gaGFuZGxlIExUX0lOSVQgb3B0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9MVF9NQU5HTEVfREVGVU4oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfREVGVU5dLAorW1tfTFRfT1BUSU9OX0RFRlVOX11tNF9icGF0c3Vic3QobTRfdG91cHBlcihbJDFfXyQyXSksIFtbXkEtWjAtOV9dXSwgW19dKV0pCisKKworIyBMVF9PUFRJT05fREVGSU5FKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBDT0RFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtMVF9PUFRJT05fREVGSU5FXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwgWyQzXSlbXWRubAorXSkjIExUX09QVElPTl9ERUZJTkUKKworCisjIGRsb3BlbgorIyAtLS0tLS0KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49eWVzCitdKQorCitBVV9ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rsb3Blbl0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwgW10pCisKKworIyB3aW4zMi1kbGwKKyMgLS0tLS0tLS0tCisjIERlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBkbGwncy4KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwKK1tlbmFibGVfd2luMzJfZGxsPXllcworCitjYXNlICRob3N0IGluCisqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLWNlZ2NjKikKKyAgQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQorICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorICBBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQorICA7OworZXNhYworCit0ZXN0IC16ICIkQVMiICYmIEFTPWFzCitfTFRfREVDTChbXSwgW0FTXSwgICAgICBbMF0sIFtBc3NlbWJsZXIgcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK19MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFswXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzBdLCBbT2JqZWN0IGR1bXBlciBwcm9ncmFtXSlkbmwKK10pIyB3aW4zMi1kbGwKKworQVVfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFt3aW4zMi1kbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHdpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sIFtdKQorCisKKyMgX0xUX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgYHNoYXJlZCcgYW5kCisjIGBkaXNhYmxlLXNoYXJlZCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzaGFyZWRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHNoYXJlZCBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3NoYXJlZD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9saWJ0b29sX2xpYnNdLCBbZW5hYmxlX3NoYXJlZF0sIFswXSwKKwlbV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCitdKSMgX0xUX0VOQUJMRV9TSEFSRUQKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtzaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRUQoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3NoYXJlZF0pCitdKQorCitBQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSkKK10pCisKK0FVX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW0FDX0VOQUJMRV9TSEFSRUQoJEApXSkKK0FVX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbXSkKKworCisKKyMgX0xUX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgc3RhdGljJyBhbmQKKyMgYGRpc2FibGUtc3RhdGljJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3N0YXRpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zdGF0aWM9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfb2xkX2xpYnNdLCBbZW5hYmxlX3N0YXRpY10sIFswXSwKKwlbV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCitdKSMgX0xUX0VOQUJMRV9TVEFUSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtzdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUMoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FDX0RFRlVOKFtBQ19FTkFCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3N0YXRpY10pCitdKQorCitBQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSkKK10pCisKK0FVX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW0FDX0VOQUJMRV9TVEFUSUMoJEApXSkKK0FVX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtBQ19ESVNBQkxFX1NUQVRJQygkQCldKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbXSkKKworCisKKyMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgZmFzdC1pbnN0YWxsJworIyBhbmQgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKKyAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFQpCisKK19MVF9ERUNMKFtmYXN0X2luc3RhbGxdLCBbZW5hYmxlX2Zhc3RfaW5zdGFsbF0sIFswXSwKKwkgW1doZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbl0pZG5sCitdKSMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FVX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW2Zhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitBVV9ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwgW10pCisKKworIyBfTFRfV0lUSF9QSUMoW01PREVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBwaWMtb25seScgYW5kIGBuby1waWMnCisjIExUX0lOSVQgb3B0aW9ucy4KKyMgTU9ERSBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBib3RoJy4KK200X2RlZmluZShbX0xUX1dJVEhfUElDXSwKK1tBQ19BUkdfV0lUSChbcGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1waWNdLAorCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCisgICAgW3BpY19tb2RlPSIkd2l0aHZhbCJdLAorICAgIFtwaWNfbW9kZT1kZWZhdWx0XSkKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSkKKworX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKK10pIyBfTFRfV0lUSF9QSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtwaWMtb25seV0sIFtfTFRfV0lUSF9QSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbbm8tcGljXSwgW19MVF9XSVRIX1BJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWU6CitBVV9ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtwaWMtb25seV0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgcGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwgW10pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMVERMX0lOSVQgT3B0aW9ucyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbbm9ucmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbbm9ucmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3JlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3JlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtzdWJwcm9qZWN0XSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbc3VicHJvamVjdF0pXSkKKworbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbaW5zdGFsbGFibGVdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtpbnN0YWxsYWJsZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtjb252ZW5pZW5jZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2NvbnZlbmllbmNlXSldKQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L200L2x0c3VnYXIubTQgYi9wb3B0LTEuMTYvbTQvbHRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAwYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L200L2x0c3VnYXIubTQKQEAgLTAsMCArMSwxMjMgQEAKKyMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0c3VnYXIubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKworCisjIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisjIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfam9pbiBmcm9tIEF1dG9jb25mIDIuNjIsIHNpbmNlIGFsbCBlYXJsaWVyCisjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCittNF9kZWZpbmUoW2x0X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKK200X2RlZmluZShbX2x0X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKworCisjIGx0X2NhcihMSVNUKQorIyBsdF9jZHIoTElTVCkKKyMgLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCisjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKKyMgQXV0b2NvbmYtMi41OSB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCittNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKK200X2RlZmluZShbbHRfY2RyXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAorICAgICAgIFskI10sIDEsIFtdLAorICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKK200X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQorCisKKyMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgYFNFUEFSQVRPUidgU1RSSU5HJy4KKyMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAorIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KKyMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50CisjIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgorIworIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCisjIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCittNF9kZWZpbmUoW2x0X2FwcGVuZF0sCitbbTRfZGVmaW5lKFskMV0sCisJICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCisKKworCisjIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCisjIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKKyMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCittNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAorW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCisgICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAorW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKKwkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKKwkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCisJW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQorCisKKyMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAorIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KK200X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAorW200X2lmZGVmKFskMV0sCisJICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCisJCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAorCQkgWyQ1XSldLAorCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQorCisKKyMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRdLAorW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQorCisKKyMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKK1ttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKKworCisjIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKK1ttNF9pZnZhbChbJDNdLAorCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKKyAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKKworCisjIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAorW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCisJWyQ1XSwKKyAgICBbJDZdKV0pCisKKworIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCitbbTRfaWYoWyQ1XSwgW10sIFtdLAorICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAorICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAorCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKK10pCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvbTQvbHR2ZXJzaW9uLm00IGIvcG9wdC0xLjE2L200L2x0dmVyc2lvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGUxNTRmCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L200L2x0dmVyc2lvbi5tNApAQCAtMCwwICsxLDIzIEBACisjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgR2VuZXJhdGVkIGZyb20gbHR2ZXJzaW9uLmluLgorCisjIHNlcmlhbCAzMDEyIGx0dmVyc2lvbi5tNAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjIuNl0pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMDEyXSkKKworQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKK1ttYWNyb192ZXJzaW9uPScyLjIuNicKK21hY3JvX3JldmlzaW9uPScxLjMwMTInCitfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKK19MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCitdKQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L200L2x0fm9ic29sZXRlLm00IGIvcG9wdC0xLjE2L200L2x0fm9ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzN2JiMjAKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvbTQvbHR+b2Jzb2xldGUubTQKQEAgLTAsMCArMSw5MiBAQAorIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9SQ10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L200L25scy5tNCBiL3BvcHQtMS4xNi9tNC9ubHMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2N2NjMgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9tNC9ubHMubTQKQEAgLTAsMCArMSwzMSBAQAorIyBubHMubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNSkKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisKK0FDX1BSRVJFUSgyLjUwKQorCitBQ19ERUZVTihbQU1fTkxTXSwKK1sKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorICBkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworICBBQ19BUkdfRU5BQkxFKG5scywKKyAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKyAgICBVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQorICBBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQorICBBQ19TVUJTVChVU0VfTkxTKQorXSkKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9tNC9wby5tNCBiL3BvcHQtMS4xNi9tNC9wby5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzM0NzYyCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L200L3BvLm00CkBAIC0wLDAgKzEsNDQ5IEBACisjIHBvLm00IHNlcmlhbCAxNSAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisKK0FDX1BSRVJFUSgyLjUwKQorCitkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgcG8gc3ViZGlyZWN0b3J5LgorQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKyAgQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQorICBBQ19SRVFVSVJFKFtBTV9OTFNdKWRubAorCisgIGRubCBSZWxlYXNlIHZlcnNpb24gb2YgdGhlIGdldHRleHQgbWFjcm9zLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQKKyAgZG5sIHRoZSBnZXR0ZXh0IG1hY3JvcyBhbmQgcG8vTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCisgIEFDX1NVQlNUKFtHRVRURVhUX01BQ1JPX1ZFUlNJT05dLCBbMC4xN10pCisKKyAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisgIGRubCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBmb3IgIm1ha2UgZGlzdCIgdG8gd29yay4KKworICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnZm10IGluIHRoZSBQQVRILgorICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyBtc2dmbXQgYW5kIGVhcmx5IEdOVSBtc2dmbXQgdmVyc2lvbnMuCisgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHRk1ULCBtc2dmbXQsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorICAgIDopCisgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQorCisgIGRubCBUZXN0IHdoZXRoZXIgaXQgaXMgR05VIG1zZ2ZtdCA+PSAwLjE1LgorY2hhbmdlcXVvdGUoLClkbmwKKyAgY2FzZSBgJE1TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBNU0dGTVRfMDE1PTogOzsKKyAgICAqKSBNU0dGTVRfMDE1PSRNU0dGTVQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbTVNHRk1UXzAxNV0pCitjaGFuZ2VxdW90ZSgsKWRubAorICBjYXNlIGAkR01TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBHTVNHRk1UXzAxNT06IDs7CisgICAgKikgR01TR0ZNVF8wMTU9JEdNU0dGTVQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbR01TR0ZNVF8wMTVdKQorCisgIGRubCBTZWFyY2ggZm9yIEdOVSB4Z2V0dGV4dCAwLjEyIG9yIG5ld2VyIGluIHRoZSBQQVRILgorICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgeGdldHRleHQuCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoWEdFVFRFWFQsIHhnZXR0ZXh0LAorICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxICYmCisgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorICAgIDopCisgIGRubCBSZW1vdmUgbGVmdG92ZXIgZnJvbSBGcmVlQlNEIHhnZXR0ZXh0IGNhbGwuCisgIHJtIC1mIG1lc3NhZ2VzLnBvCisKKyAgZG5sIFRlc3Qgd2hldGhlciBpdCBpcyBHTlUgeGdldHRleHQgPj0gMC4xNS4KK2NoYW5nZXF1b3RlKCwpZG5sCisgIGNhc2UgYCRYR0VUVEVYVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBYR0VUVEVYVF8wMTU9OiA7OworICAgICopIFhHRVRURVhUXzAxNT0kWEdFVFRFWFQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbWEdFVFRFWFRfMDE1XSkKKworICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnbWVyZ2UgMC4xMSBvciBuZXdlciBpbiB0aGUgUEFUSC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS11cGRhdGUgLXEgL2Rldi9udWxsIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMV0sIDopCisKKyAgZG5sIEluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4KKyAgZG5sIEF1dG9jb25mID49IDIuNjAgZGVmaW5lcyBsb2NhbGVkaXIuIEZvciBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZiwgd2UKKyAgZG5sIGhhdmUgdG8gZGVmaW5lIGl0IGhlcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gcG8vTWFrZWZpbGUuCisgIHRlc3QgLW4gIiRsb2NhbGVkaXIiIHx8IGxvY2FsZWRpcj0nJHtkYXRhZGlyfS9sb2NhbGUnCisgIEFDX1NVQlNUKFtsb2NhbGVkaXJdKQorCisgIGRubCBTdXBwb3J0IGZvciBBTV9YR0VUVEVYVF9PUFRJT04uCisgIHRlc3QgLW4gIiR7WEdFVFRFWFRfRVhUUkFfT1BUSU9OUytzZXR9IiB8fCBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPQorICBBQ19TVUJTVChbWEdFVFRFWFRfRVhUUkFfT1BUSU9OU10pCisKKyAgQUNfQ09ORklHX0NPTU1BTkRTKFtwby1kaXJlY3Rvcmllc10sIFtbCisgICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAgICAgZXNhYworICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKKyAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisgICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisgICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisgICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCisgICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTworICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKyAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJworICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCisgICAgICAgICAgZmkKKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisgICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICBQT0ZJTEVTPQorICAgICAgICAgIFVQREFURVBPRklMRVM9CisgICAgICAgICAgRFVNTVlQT0ZJTEVTPQorICAgICAgICAgIEdNT0ZJTEVTPQorICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKyAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisgICAgICAgICAgZG9uZQorICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgSU5TVF9MSU5HVUFTPQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIHVzZWl0PW5vCisgICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKyAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgQ0FUQUxPR1M9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KKyAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OworICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lXV0sCisgICBbIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQorICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0CisgICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCisgICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgorICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKyAgIF0pCitdKQorCitkbmwgUG9zdHByb2Nlc3NlcyBhIE1ha2VmaWxlIGluIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgUE8gZmlsZXMuCitBQ19ERUZVTihbQU1fUE9TVFBST0NFU1NfUE9fTUFLRUZJTEVdLAorWworICAjIFdoZW4gdGhpcyBjb2RlIGlzIHJ1biwgaW4gY29uZmlnLnN0YXR1cywgdHdvIHZhcmlhYmxlcyBoYXZlIGFscmVhZHkgYmVlbgorICAjIHNldDoKKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisgICMgLSBMSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTElOR1VBUyBhdCBjb25maWd1cmUKKyAgIyAgIHRpbWUuCisKK2NoYW5nZXF1b3RlKCwpZG5sCisgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKyAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisgIGVzYWMKKworICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKyAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICBndF9lY2hvPSdlY2hvJworICBlbHNlCisgICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJworICAgIGVsc2UKKyAgICAgIGVjaG9fZnVuYyAoKSB7CisgICAgICAgIGNhdCA8PEVPVAorJCoKK0VPVAorICAgICAgfQorICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworICAgIGZpCisgIGZpCisKKyAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorICBzZWRfeF92YXJpYWJsZT0nCisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCit4CitzL1AvUC8KK3gKK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCisgIGJhCit9CitiZAorOmEKKyMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgorcy8jLiokLyAvCisjIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgordGIKKzpiCitzL1xcJC8vCisjIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCitwCit0YworIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCisjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorcy9eLiokLy8KK3gKK2JkCis6YworIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorcy9eLiokL1AvCit4Cis6ZAorJworY2hhbmdlcXVvdGUoWyxdKWRubAorCisgICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCisgIHNlZF94X1BPVEZJTEVTPWAkZ3RfZWNobyAiJHNlZF94X3ZhcmlhYmxlIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgCisgIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAorICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcworICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisgIFBPVEZJTEVTX0RFUFM9CisgIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKyAgZG9uZQorICBQT01BS0VGSUxFREVQUz0iIgorCisgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICBmaQorICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICBlbHNlCisgICAgIyBTZXQgQUxMX0xJTkdVQVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSU5HVUFTLgorICAgIHNlZF94X0xJTkdVQVM9YCRndF9lY2hvICIkc2VkX3hfdmFyaWFibGUiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYAorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAorICBmaQorICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgIyBDb21wdXRlIFBST1BFUlRJRVNGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisgICMgQ29tcHV0ZSBDTEFTU0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykuY2xhc3MpCisgICMgQ29tcHV0ZSBRTUZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnFtKQorICAjIENvbXB1dGUgTVNHRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisgICMgQ29tcHV0ZSBSRVNPVVJDRVNETExGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLyQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsKQorICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgIC4pIHNyY2RpcnByZT0gOzsKKyAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgIGVzYWMKKyAgUE9GSUxFUz0KKyAgVVBEQVRFUE9GSUxFUz0KKyAgRFVNTVlQT0ZJTEVTPQorICBHTU9GSUxFUz0KKyAgUFJPUEVSVElFU0ZJTEVTPQorICBDTEFTU0ZJTEVTPQorICBRTUZJTEVTPQorICBNU0dGSUxFUz0KKyAgUkVTT1VSQ0VTRExMRklMRVM9CisgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisgICAgQ0xBU1NGSUxFUz0iJENMQVNTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5jbGFzcyIKKyAgICBRTUZJTEVTPSIkUU1GSUxFUyAkc3JjZGlycHJlJGxhbmcucW0iCisgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICBNU0dGSUxFUz0iJE1TR0ZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcubXNnIgorICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAorICAgIFJFU09VUkNFU0RMTEZJTEVTPSIkUkVTT1VSQ0VTRExMRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisgIGRvbmUKKyAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgIElOU1RfTElOR1VBUz0KKyAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICB1c2VpdD1ubworICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgIGVsc2UKKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgZmkKKyAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKyAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKyAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICBlc2FjCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgZmkKKyAgICBkb25lCisgIGZpCisgIENBVEFMT0dTPQorICBKQVZBQ0FUQUxPR1M9CisgIFFUQ0FUQUxPR1M9CisgIFRDTENBVEFMT0dTPQorICBDU0hBUlBDQVRBTE9HUz0KKyAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbworICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisgICAgICBKQVZBQ0FUQUxPR1M9IiRKQVZBQ0FUQUxPR1MgXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgorICAgICAgUVRDQVRBTE9HUz0iJFFUQ0FUQUxPR1MgJGxhbmcucW0iCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgICAgVENMQ0FUQUxPR1M9IiRUQ0xDQVRBTE9HUyAkZnJvYmJlZGxhbmcubXNnIgorICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICBDU0hBUlBDQVRBTE9HUz0iJENTSEFSUENBVEFMT0dTICRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisgICAgZG9uZQorICBmaQorCisgIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKKyAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyRmcm9iYmVkbGFuZy5tc2c6ICRsYW5nLnBvCisJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisJXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiBncmVwIC1sICdAQ1NIQVJQQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCisJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKwlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCisgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCitNYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCitFT0YKKyAgZmkKKyAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgorXSkKKworZG5sIEluaXRpYWxpemVzIHRoZSBhY2N1bXVsYXRvciB1c2VkIGJ5IEFNX1hHRVRURVhUX09QVElPTi4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0sCitbCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9CitdKQorCitkbmwgUmVnaXN0ZXJzIGFuIG9wdGlvbiB0byBiZSBwYXNzZWQgdG8geGdldHRleHQgaW4gdGhlIHBvIHN1YmRpcmVjdG9yeS4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05dLAorWworICBBQ19SRVFVSVJFKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0pCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TICQxIgorXSkKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9tNC9wcm9ndGVzdC5tNCBiL3BvcHQtMS4xNi9tNC9wcm9ndGVzdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTYzNjVjCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L200L3Byb2d0ZXN0Lm00CkBAIC0wLDAgKzEsOTIgQEAKKyMgcHJvZ3Rlc3QubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xNC4yKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKworQUNfUFJFUkVRKDIuNTApCisKKyMgU2VhcmNoIHBhdGggZm9yIGEgcHJvZ3JhbSB3aGljaCBwYXNzZXMgdGhlIGdpdmVuIHRlc3QuCisKK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKK2RubCAgIFRFU1QtUEVSRk9STUVELU9OLUZPVU5EX1BST0dSQU0gWywgVkFMVUUtSUYtTk9ULUZPVU5EIFssIFBBVEhdXSkKK0FDX0RFRlVOKFtBTV9QQVRIX1BST0dfV0lUSF9URVNUXSwKK1sKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkMiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGFjX3dvcmRdKQorQUNfQ0FDSEVfVkFMKGFjX2N2X3BhdGhfJDEsCitbY2FzZSAiWyRdJDEiIGluCisgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICBhY19jdl9wYXRoXyQxPSJbJF0kMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICAgOzsKKyAgKikKKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICBpZiBbJDNdOyB0aGVuCisgICAgICAgICAgICBhY19jdl9wYXRoXyQxPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKK2RubCBzbyBBQ19QQVRIX1BST0dTIHdpbGwga2VlcCBsb29raW5nLgoraWZlbHNlKFskNF0sICwgLCBbICB0ZXN0IC16ICJbJF1hY19jdl9wYXRoXyQxIiAmJiBhY19jdl9wYXRoXyQxPSIkNCIKK10pZG5sCisgICAgOzsKK2VzYWNdKWRubAorJDE9IiRhY19jdl9wYXRoXyQxIgoraWYgdGVzdCBpZmVsc2UoWyQ0XSwgLCBbLW4gIlskXSQxIl0sIFsiWyRdJDEiICE9ICIkNCJdKTsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFskXSQxKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK0FDX1NVQlNUKCQxKWRubAorXSkKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9taXNzaW5nIGIvcG9wdC0xLjE2L21pc3NpbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjgwNTVkMgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9taXNzaW5nCkBAIC0wLDAgKzEsMzc2IEBACisjISAvYmluL3NoCisjIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorIyAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgZXhpdCAxCitmaQorCitydW49Ogorc2VkX291dHB1dD0ncy8uKiAtLW91dHB1dFsgPV1cKFteIF0qXCkuKi9cMS9wJworc2VkX21pbnVzbz0ncy8uKiAtbyBcKFteIF0qXCkuKi9cMS9wJworCisjIEluIHRoZSBjYXNlcyB3aGVyZSB0aGlzIG1hdHRlcnMsIGBtaXNzaW5nJyBpcyBiZWluZyBydW4gaW4gdGhlCisjIHNyY2RpciBhbHJlYWR5LgoraWYgdGVzdCAtZiBjb25maWd1cmUuYWM7IHRoZW4KKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5hYworZWxzZQorICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmluCitmaQorCittc2c9Im1pc3Npbmcgb24geW91ciBzeXN0ZW0iCisKK2Nhc2UgJDEgaW4KKy0tcnVuKQorICAjIFRyeSB0byBydW4gcmVxdWVzdGVkIHByb2dyYW0sIGFuZCBqdXN0IGV4aXQgaWYgaXQgc3VjY2VlZHMuCisgIHJ1bj0KKyAgc2hpZnQKKyAgIiRAIiAmJiBleGl0IDAKKyAgIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucworICAjIHdoZW4gdGhlIHVzZXIgdHJ5IHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uCisgICMgYSBmaWxlIHRoYXQgcmVxdWlyZXMgYSBtaW5pbXVtIHZlcnNpb24uICBJbiB0aGlzIGNhc2Ugd2UKKyAgIyB3ZSBzaG91bGQgcHJvY2VlZCBoYXMgaWYgdGhlIHByb2dyYW0gaGFkIGJlZW4gYWJzZW50LCBvcgorICAjIGlmIC0tcnVuIGhhZG4ndCBiZWVuIHBhc3NlZC4KKyAgaWYgdGVzdCAkPyA9IDYzOyB0aGVuCisgICAgcnVuPToKKyAgICBtc2c9InByb2JhYmx5IHRvbyBvbGQiCisgIGZpCisgIDs7CisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitIYW5kbGUgXGBQUk9HUkFNIFtBUkdVTUVOVF0uLi4nIGZvciB3aGVuIFBST0dSQU0gaXMgbWlzc2luZywgb3IgcmV0dXJuIGFuCitlcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLS1ydW4gICAgICAgICAgIHRyeSB0byBydW4gdGhlIGdpdmVuIGNvbW1hbmQsIGFuZCBlbXVsYXRlIGl0IGlmIGl0IGZhaWxzCisKK1N1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKKyAgYWNsb2NhbCAgICAgIHRvdWNoIGZpbGUgXGBhY2xvY2FsLm00JworICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSBcYGNvbmZpZ3VyZScKKyAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjb25maWcuaC5pbicKKyAgYXV0b200dGUgICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZSwgb3IgY3JlYXRlIGEgc3R1YiBvbmUKKyAgYXV0b21ha2UgICAgIHRvdWNoIGFsbCBcYE1ha2VmaWxlLmluJyBmaWxlcworICBiaXNvbiAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisgIGZsZXggICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIGhlbHAybWFuICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgbGV4ICAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKKyAgbWFrZWluZm8gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQorICB0YXIgICAgICAgICAgdHJ5IHRhciwgZ251dGFyLCBndGFyLCB0aGVuIHRhciB3aXRob3V0IG5vbi1wb3J0YWJsZSBmbGFncworICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisKK1ZlcnNpb24gc3VmZml4ZXMgdG8gUFJPR1JBTSBhcyB3ZWxsIGFzIHRoZSBwcmVmaXhlcyBcYGdudS0nLCBcYGdudScsIGFuZAorXGBnJyBhcmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHRoZSBuYW1lLgorCitTZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKKyAgICBlY2hvICJtaXNzaW5nICRzY3JpcHR2ZXJzaW9uIChHTlUgQXV0b21ha2UpIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC0qKQorICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDEKKyAgICA7OworCitlc2FjCisKKyMgbm9ybWFsaXplIHByb2dyYW0gbmFtZSB0byBjaGVjayBmb3IuCitwcm9ncmFtPWBlY2hvICIkMSIgfCBzZWQgJworICBzL15nbnUtLy87IHQKKyAgcy9eZ251Ly87IHQKKyAgcy9eZy8vOyB0J2AKKworIyBOb3cgZXhpdCBpZiB3ZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLiAgQWxzbyBleGl0IG5vdyBpZiB3ZQorIyBkb24ndCBoYXZlIGl0IGFuZCAtLXZlcnNpb24gd2FzIHBhc3NlZCAobW9zdCBsaWtlbHkgdG8gZGV0ZWN0CisjIHRoZSBwcm9ncmFtKS4gIFRoaXMgaXMgYWJvdXQgbm9uLUdOVSBwcm9ncmFtcywgc28gdXNlICQxIG5vdAorIyAkcHJvZ3JhbS4KK2Nhc2UgJDEgaW4KKyAgbGV4Knx5YWNjKikKKyAgICAjIE5vdCBHTlUgcHJvZ3JhbXMsIHRoZXkgZG9uJ3QgaGF2ZSAtLXZlcnNpb24uCisgICAgOzsKKworICB0YXIqKQorICAgIGlmIHRlc3QgLW4gIiRydW4iOyB0aGVuCisgICAgICAgZWNobyAxPiYyICJFUlJPUjogXGB0YXInIHJlcXVpcmVzIC0tcnVuIgorICAgICAgIGV4aXQgMQorICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCisgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgICopCisgICAgaWYgdGVzdCAteiAiJHJ1biIgJiYgKCQxIC0tdmVyc2lvbikgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgICMgQ291bGQgbm90IHJ1biAtLXZlcnNpb24gb3IgLS1oZWxwLiAgVGhpcyBpcyBwcm9iYWJseSBzb21lb25lCisgICAgICAgIyBydW5uaW5nIGAkVE9PTCAtLXZlcnNpb24nIG9yIGAkVE9PTCAtLWhlbHAnIHRvIGNoZWNrIHdoZXRoZXIKKyAgICAgICAjICRUT09MIGV4aXN0cyBhbmQgbm90IGtub3dpbmcgJFRPT0wgdXNlcyBtaXNzaW5nLgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKK2VzYWMKKworIyBJZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgZmFpbHMgdG8gcnVuIChwb3NzaWJseSBhbiBvdXRkYXRlZCB2ZXJzaW9uKSwKKyMgdHJ5IHRvIGVtdWxhdGUgaXQuCitjYXNlICRwcm9ncmFtIGluCisgIGFjbG9jYWwqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCisgICAgICAgICBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgdG91Y2ggYWNsb2NhbC5tNAorICAgIDs7CisKKyAgYXV0b2NvbmYqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGNvbmZpZ3VyZQorICAgIDs7CisKKyAgYXV0b2hlYWRlciopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjY29uZmlnLmgnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtCisgICAgICAgICBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBmaWxlcz1gc2VkIC1uICdzL15bIF0qQVtDTV1fQ09ORklHX0hFQURFUihcKFteKV0qXCkpLiovXDEvcCcgJHtjb25maWd1cmVfYWN9YAorICAgIHRlc3QgLXogIiRmaWxlcyIgJiYgZmlsZXM9ImNvbmZpZy5oIgorICAgIHRvdWNoX2ZpbGVzPQorICAgIGZvciBmIGluICRmaWxlczsgZG8KKyAgICAgIGNhc2UgJGYgaW4KKyAgICAgICo6KikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAiYGVjaG8gIiRmIiB8CisJCQkJICAgICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIC1lICdzLzouKi8vJ2A7OworICAgICAgKikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAkZi5pbiI7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICB0b3VjaCAkdG91Y2hfZmlsZXMKKyAgICA7OworCisgIGF1dG9tYWtlKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgTWFrZWZpbGUuYW0nLCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLgorICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuCisgICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmluZCAuIC10eXBlIGYgLW5hbWUgTWFrZWZpbGUuYW0gLXByaW50IHwKKwkgICBzZWQgJ3MvXC5hbSQvLmluLycgfAorCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQorICAgIDs7CisKKyAgYXV0b200dGUqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBidXQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4KKyAgICAgICAgIFlvdSBjYW4gZ2V0IFxgJDEnIGFzIHBhcnQgb2YgXGBBdXRvY29uZicgZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIiMhIC9iaW4vc2giCisJZWNobyAiIyBDcmVhdGVkIGJ5IEdOVSBBdXRvbWFrZSBtaXNzaW5nIGFzIGEgcmVwbGFjZW1lbnQgb2YiCisJZWNobyAiIyAgJCAkQCIKKwllY2hvICJleGl0IDAiCisJY2htb2QgK3ggJGZpbGUKKwlleGl0IDEKKyAgICBmaQorICAgIDs7CisKKyAgYmlzb24qfHlhY2MqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC55JyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEJpc29uJyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEJpc29uJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBybSAtZiB5LnRhYi5jIHkudGFiLmgKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLnkpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuYworCSAgICBmaQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvaC8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmgKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIHkudGFiLmg7IHRoZW4KKwllY2hvID55LnRhYi5oCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLWYgeS50YWIuYzsgdGhlbgorCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+eS50YWIuYworICAgIGZpCisgICAgOzsKKworICBsZXgqfGZsZXgqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgbGV4Lnl5LmMKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLmwpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIGxleC55eS5jOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID5sZXgueXkuYworICAgIGZpCisgICAgOzsKKworICBoZWxwMm1hbiopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKwkgeW91IG1vZGlmaWVkIGEgZGVwZW5kZW5jeSBvZiBhIG1hbnVhbCBwYWdlLiAgWW91IG1heSBuZWVkIHRoZQorCSBcYEhlbHAybWFuJyBwYWNrYWdlIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UKKwkgZWZmZWN0LiAgWW91IGNhbiBnZXQgXGBIZWxwMm1hbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisKKyAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKKyAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCisgICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJdG91Y2ggJGZpbGUKKyAgICBlbHNlCisJdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCisJZWNobyAiLmFiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZSIKKwlleGl0ICQ/CisgICAgZmkKKyAgICA7OworCisgIG1ha2VpbmZvKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAudGV4aScgb3IgXGAudGV4aW5mbycgZmlsZSwgb3IgYW55IG90aGVyIGZpbGUKKyAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cworICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKKyAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgorICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgorICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCisgICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKyAgICAgIGZpbGU9YHNlZCAtbiAnCisJL15Ac2V0ZmlsZW5hbWUveworCSAgcy8uKiBcKFteIF0qXCkgKiQvXDEvCisJICBwCisJICBxCisJfScgJGluZmlsZWAKKyAgICAgICMgLi4uIG9yIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIG5hbWUgKGRpci9mLnRleGkgYmVjb21lcyBmLmluZm8pCisgICAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJGluZmlsZSIgfCBzZWQgJ3MsLiovLCw7cywuW14uXSokLCwnYC5pbmZvCisgICAgZmkKKyAgICAjIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdXNlciByZWFsbHkgbmVlZHMgbWFrZWluZm87CisgICAgIyBsZXQncyBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgYW55dGhpbmcuCisgICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKKyAgICB0b3VjaCAkZmlsZQorICAgIDs7CisKKyAgdGFyKikKKyAgICBzaGlmdAorCisgICAgIyBXZSBoYXZlIGFscmVhZHkgdHJpZWQgdGFyIGluIHRoZSBnZW5lcmljIHBhcnQuCisgICAgIyBMb29rIGZvciBnbnV0YXIvZ3RhciBiZWZvcmUgaW52b2NhdGlvbiB0byBhdm9pZCB1Z2x5IGVycm9yCisgICAgIyBtZXNzYWdlcy4KKyAgICBpZiAoZ251dGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGdudXRhciAiJEAiICYmIGV4aXQgMAorICAgIGZpCisgICAgaWYgKGd0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgICAgZ3RhciAiJEAiICYmIGV4aXQgMAorICAgIGZpCisgICAgZmlyc3Rhcmc9IiQxIgorICAgIGlmIHNoaWZ0OyB0aGVuCisJY2FzZSAkZmlyc3RhcmcgaW4KKwkqbyopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisJY2FzZSAkZmlyc3RhcmcgaW4KKwkqaCopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvaC8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogSSBjYW4ndCBzZWVtIHRvIGJlIGFibGUgdG8gcnVuIFxgdGFyJyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisgICAgICAgICBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBHTlUgdGFyIG9yIEZyZWUgcGF4dXRpbHMsIG9yIGNoZWNrIHRoZQorICAgICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4iCisgICAgZXhpdCAxCisgICAgOzsKKworICAqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBhbmQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSBcYFJFQURNRScgZmlsZSwKKyAgICAgICAgIGl0IG9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmcKKyAgICAgICAgIHRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiBjYXNlCisgICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgXGAkMScgcHJvZ3JhbS4iCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9NYWtlZmlsZS5pbi5pbiBiL3BvcHQtMS4xNi9wby9NYWtlZmlsZS5pbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWNmNTAwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL01ha2VmaWxlLmluLmluCkBAIC0wLDAgKzEsNDI5IEBACisjIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+CisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorIyBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE9yaWdpbjogZ2V0dGV4dC0wLjE3CitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3CisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorCitTSEVMTCA9IC9iaW4vc2gKK0BTRVRfTUFLRUAKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKKworcHJlZml4ID0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9wbworCitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorCisjIFdlIHVzZSAkKG1rZGlyX3ApLgorIyBJbiBhdXRvbWFrZSA8PSAxLjkueCwgJChta2Rpcl9wKSBpcyBkZWZpbmVkIGVpdGhlciBhcyAibWtkaXIgLXAgLS0iIG9yIGFzCisjICIkKG1raW5zdGFsbGRpcnMpIiBvciBhcyAiJChpbnN0YWxsX3NoKSAtZCIuIEZvciB0aGVzZSBhdXRvbWFrZSB2ZXJzaW9ucywKKyMgQGluc3RhbGxfc2hAIGRvZXMgbm90IHN0YXJ0IHdpdGggJChTSEVMTCksIHNvIHdlIGFkZCBpdC4KKyMgSW4gYXV0b21ha2UgPj0gMS4xMCwgQG1rZGlyX3BAIGlzIGRlcml2ZWQgZnJvbSAke01LRElSX1B9LCB3aGljaCBpcyBkZWZpbmVkCisjIGVpdGhlciBhcyAiL3BhdGgvdG8vbWtkaXIgLXAiIG9yICIuLi4vaW5zdGFsbC1zaCAtYyAtZCIuIEZvciB0aGVzZSBhdXRvbWFrZQorIyB2ZXJzaW9ucywgJChta2luc3RhbGxkaXJzKSBhbmQgJChpbnN0YWxsX3NoKSBhcmUgdW51c2VkLgorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpIEBpbnN0YWxsX3NoQCAtZAoraW5zdGFsbF9zaCA9ICQoU0hFTEwpIEBpbnN0YWxsX3NoQAorTUtESVJfUCA9IEBNS0RJUl9QQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorCitHTVNHRk1UXyA9IEBHTVNHRk1UQAorR01TR0ZNVF9ubyA9IEBHTVNHRk1UQAorR01TR0ZNVF95ZXMgPSBAR01TR0ZNVF8wMTVACitHTVNHRk1UID0gJChHTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorTVNHRk1UXyA9IEBNU0dGTVRACitNU0dGTVRfbm8gPSBATVNHRk1UQAorTVNHRk1UX3llcyA9IEBNU0dGTVRfMDE1QAorTVNHRk1UID0gJChNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitYR0VUVEVYVF8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF9ubyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX3llcyA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVCA9ICQoWEdFVFRFWFRfJChVU0VfTVNHQ1RYVCkpCitNU0dNRVJHRSA9IG1zZ21lcmdlCitNU0dNRVJHRV9VUERBVEUgPSBATVNHTUVSR0VAIC0tdXBkYXRlCitNU0dJTklUID0gbXNnaW5pdAorTVNHQ09OViA9IG1zZ2NvbnYKK01TR0ZJTFRFUiA9IG1zZ2ZpbHRlcgorCitQT0ZJTEVTID0gQFBPRklMRVNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK1VQREFURVBPRklMRVMgPSBAVVBEQVRFUE9GSUxFU0AKK0RVTU1ZUE9GSUxFUyA9IEBEVU1NWVBPRklMRVNACitESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4uaW4gcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCiskKERJU1RGSUxFUy5jb21tb24uZXh0cmExKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEyKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEzKQorRElTVEZJTEVTID0gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycyBQT1RGSUxFUy5pbiBcCiskKFBPRklMRVMpICQoR01PRklMRVMpIFwKKyQoRElTVEZJTEVTLmV4dHJhMSkgJChESVNURklMRVMuZXh0cmEyKSAkKERJU1RGSUxFUy5leHRyYTMpCisKK1BPVEZJTEVTID0gXAorCitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKKworIyBNYWtldmFycyBnZXRzIGluc2VydGVkIGhlcmUuIChEb24ndCByZW1vdmUgdGhpcyBsaW5lISkKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucG8gLmdtbyAubW8gLnNlZCAuc2luIC5ub3AgLnBvLWNyZWF0ZSAucG8tdXBkYXRlCisKKy5wby5tbzoKKwlAZWNobyAiJChNU0dGTVQpIC1jIC1vICRAICQ8IjsgXAorCSQoTVNHRk1UKSAtYyAtbyB0LSRAICQ8ICYmIG12IHQtJEAgJEAKKworLnBvLmdtbzoKKwlAbGFuZz1gZWNobyAkKiB8IHNlZCAtZSAncywuKi8sLCdgOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9cm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC1vICQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyI7IFwKKwljZCAkKHNyY2RpcikgJiYgcm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbworCisuc2luLnNlZDoKKwlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKKwltdiB0LSRAICRACisKKworYWxsOiBjaGVjay1tYWNyby12ZXJzaW9uIGFsbC1AVVNFX05MU0AKKworYWxsLXllczogc3RhbXAtcG8KK2FsbC1ubzoKKworIyBFbnN1cmUgdGhhdCB0aGUgZ2V0dGV4dCBtYWNyb3MgYW5kIHRoaXMgTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCitjaGVjay1tYWNyby12ZXJzaW9uOgorCUB0ZXN0ICIkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikiID0gIkBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiBcCisJICB8fCB7IGVjaG8gIioqKiBlcnJvcjogZ2V0dGV4dCBpbmZyYXN0cnVjdHVyZSBtaXNtYXRjaDogdXNpbmcgYSBNYWtlZmlsZS5pbi5pbiBmcm9tIGdldHRleHQgdmVyc2lvbiAkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikgYnV0IHRoZSBhdXRvY29uZiBtYWNyb3MgYXJlIGZyb20gZ2V0dGV4dCB2ZXJzaW9uIEBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiAxPiYyOyBcCisJICAgICAgIGV4aXQgMTsgXAorCSAgICAgfQorCisjICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIG9ubHkgY3JlYXRlZCB3aGVuIG5lZWRlZC4gV2hlbiB4Z2V0dGV4dCBmaW5kcyBubworIyBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgbm8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgY3JlYXRlZCAoYmVjYXVzZQorIyB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0cmFuc2xhdG9ycyB3aXRoIGVtcHR5IFBPVCBmaWxlcykuIFdlIGFzc3VtZSB0aGF0CisjIExJTkdVQVMgaXMgZW1wdHkgaW4gdGhpcyBjYXNlLCBpLmUuICQoUE9GSUxFUykgYW5kICQoR01PRklMRVMpIGFyZSBlbXB0eS4KKyMgSW4gdGhpcyBjYXNlLCBzdGFtcC1wbyBpcyBhIG5vcCAoaS5lLiBhIHBob255IHRhcmdldCkuCisKKyMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQorIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKKyMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAorIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKKyMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQorIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgorIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKKyMgY2hhbmdlZC4KK3N0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCXRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCBcCisJICB0ZXN0IC16ICIkKEdNT0ZJTEVTKSIgfHwgJChNQUtFKSAkKEdNT0ZJTEVTKQorCUB0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgeyBcCisJICBlY2hvICJ0b3VjaCBzdGFtcC1wbyIgJiYgXAorCSAgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1wb1QgJiYgXAorCSAgbXYgc3RhbXAtcG9UIHN0YW1wLXBvOyBcCisJfQorCisjIE5vdGU6IFRhcmdldCAnYWxsJyBtdXN0IG5vdCBkZXBlbmQgb24gdGFyZ2V0ICckKERPTUFJTikucG90LXVwZGF0ZScsCisjIG90aGVyd2lzZSBwYWNrYWdlcyBsaWtlIEdDQyBjYW4gbm90IGJlIGJ1aWx0IGlmIG9ubHkgcGFydHMgb2YgdGhlIHNvdXJjZQorIyBoYXZlIGJlZW4gZG93bmxvYWRlZC4KKworIyBUaGlzIHRhcmdldCByZWJ1aWxkcyAkKERPTUFJTikucG90OyBpdCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgorIyBOb3RlIHRoYXQgJChET01BSU4pLnBvdCBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KKyQoRE9NQUlOKS5wb3QtdXBkYXRlOiAkKFBPVEZJTEVTKSAkKHNyY2RpcikvUE9URklMRVMuaW4gcmVtb3ZlLXBvdGNkYXRlLnNlZAorCWlmIExDX0FMTD1DIGdyZXAgJ0dOVSBAUEFDS0FHRUAnICQodG9wX3NyY2RpcikvKiAyPi9kZXYvbnVsbCB8IGdyZXAgLXYgJ2xpYnRvb2w6JyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgIHBhY2thZ2VfZ251PSdHTlUgJzsgXAorCWVsc2UgXAorCSAgcGFja2FnZV9nbnU9Jyc7IFwKKwlmaTsgXAorCWlmIHRlc3QgLW4gJyQoTVNHSURfQlVHU19BRERSRVNTKScgfHwgdGVzdCAnJChQQUNLQUdFX0JVR1JFUE9SVCknID0gJ0AnUEFDS0FHRV9CVUdSRVBPUlQnQCc7IHRoZW4gXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKE1TR0lEX0JVR1NfQUREUkVTUyknOyBcCisJZWxzZSBcCisJICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoUEFDS0FHRV9CVUdSRVBPUlQpJzsgXAorCWZpOyBcCisJY2FzZSBgJChYR0VUVEVYVCkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCisJICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC01XSB8IDAuMVswLTVdLiogfCAwLjE2IHwgMC4xNi5bMC0xXSopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKKwkgICAgOzsgXAorCSAgKikgXAorCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKKwkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAorCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAorCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAorCSAgICAgIC0tcGFja2FnZS1uYW1lPSIkJHtwYWNrYWdlX2dudX1AUEFDS0FHRUAiIFwKKwkgICAgICAtLXBhY2thZ2UtdmVyc2lvbj0nQFZFUlNJT05AJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwllc2FjCisJdGVzdCAhIC1mICQoRE9NQUlOKS5wbyB8fCB7IFwKKwkgIGlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoc3JjZGlyKS8kKERPTUFJTikucG90ID4gJChET01BSU4pLjFwbyAmJiBcCisJICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChET01BSU4pLnBvID4gJChET01BSU4pLjJwbyAmJiBcCisJICAgIGlmIGNtcCAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChET01BSU4pLnBvOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKHNyY2RpcikvJChET01BSU4pLnBvdCAmJiBcCisJICAgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCisJICBmaTsgXAorCX0KKworIyBUaGlzIHJ1bGUgaGFzIG5vIGRlcGVuZGVuY2llczogd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgJChET01BSU4pLnBvdCBhdAorIyBldmVyeSAibWFrZSIgaW52b2NhdGlvbiwgb25seSBjcmVhdGUgaXQgd2hlbiBpdCBpcyBtaXNzaW5nLgorIyBPbmx5ICJtYWtlICQoRE9NQUlOKS5wb3QtdXBkYXRlIiBvciAibWFrZSBkaXN0IiB3aWxsIGZvcmNlIGFuIHVwZGF0ZS4KKyQoc3JjZGlyKS8kKERPTUFJTikucG90OgorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKworIyBUaGlzIHRhcmdldCByZWJ1aWxkcyBhIFBPIGZpbGUgaWYgJChET01BSU4pLnBvdCBoYXMgY2hhbmdlZC4KKyMgTm90ZSB0aGF0IGEgUE8gZmlsZSBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KKyQoUE9GSUxFUyk6ICQoc3JjZGlyKS8kKERPTUFJTikucG90CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MsLiovLCwnIC1lICdzL1wucG8kJC8vJ2A7IFwKKwlpZiB0ZXN0IC1mICIkKHNyY2RpcikvJCR7bGFuZ30ucG8iOyB0aGVuIFwKKwkgIHRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCSAgZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRV9VUERBVEUpICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3QiOyBcCisJICBjZCAkKHNyY2RpcikgJiYgJChNU0dNRVJHRV9VUERBVEUpICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3Q7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCisJZmkKKworCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6CitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1rZGlyX3ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCSQobWtkaXJfcCkgJChERVNURElSKSQoZGF0YWRpcikKKwlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAorCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAorCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKKwkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKKwkgIGRpcj0kKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTOyBcCisJICAkKG1rZGlyX3ApICQoREVTVERJUikkJGRpcjsgXAorCSAgaWYgdGVzdCAtciAkJGNhdDsgdGhlbiByZWFsY2F0PSQkY2F0OyBlbHNlIHJlYWxjYXQ9JChzcmNkaXIpLyQkY2F0OyBmaTsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkcmVhbGNhdCAkKERFU1RESVIpJCRkaXIvJChET01BSU4pLm1vOyBcCisJICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBhcyAkKERFU1RESVIpJCRkaXIvJChET01BSU4pLm1vIjsgXAorCSAgZm9yIGxjIGluICcnICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIGlmIHRlc3QgLW4gIiQkbGMiOyB0aGVuIFwKKwkgICAgICBpZiAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyAyPi9kZXYvbnVsbCkgfCBncmVwICcgLT4gJyA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICAgIGxpbms9YGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgfCBzZWQgLWUgJ3MvXi4qIC0+IC8vJ2A7IFwKKwkgICAgICAgIG12ICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZCAmJiBcCisJICAgICAgICAgZm9yIGZpbGUgaW4gKjsgZG8gXAorCSAgICAgICAgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICAgICAgICAgICBsbiAtcyAuLi8kJGxpbmsvJCRmaWxlICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJCRmaWxlOyBcCisJICAgICAgICAgICBmaTsgXAorCSAgICAgICAgIGRvbmUpOyBcCisJICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgaWYgdGVzdCAtZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyB0aGVuIFwKKwkgICAgICAgICAgOjsgXAorCSAgICAgICAgZWxzZSBcCisJICAgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgZmk7IFwKKwkgICAgICBmaTsgXAorCSAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgbG4gLXMgLi4vTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgICBsbiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGNwIC1wICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgICAgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGxpbmsgYXMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8iOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1leGVjIGluc3RhbGxkaXJzLWRhdGEKK2luc3RhbGxkaXJzLWV4ZWM6CitpbnN0YWxsZGlycy1kYXRhOiBpbnN0YWxsZGlycy1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK2luc3RhbGxkaXJzLWRhdGEtbm86CitpbnN0YWxsZGlycy1kYXRhLXllczoKKwkkKG1rZGlyX3ApICQoREVTVERJUikkKGRhdGFkaXIpCisJQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJCRkaXI7IFwKKwkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCisJICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCisJICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAorCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKKwkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAorCSAgICAgICAgICAgZmk7IFwKKwkgICAgICAgICBkb25lKTsgXAorCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICBlbHNlIFwKKwkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCisJICAgICAgICAgIDo7IFwKKwkgICAgICAgIGVsc2UgXAorCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIGZpOyBcCisJICAgICAgZmk7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKKyMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KK2luc3RhbGxjaGVjazoKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtZXhlYyB1bmluc3RhbGwtZGF0YQordW5pbnN0YWxsLWV4ZWM6Cit1bmluc3RhbGwtZGF0YTogdW5pbnN0YWxsLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK3VuaW5zdGFsbC1kYXRhLW5vOgordW5pbnN0YWxsLWRhdGEteWVzOgorCWNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBmb3IgbGMgaW4gTENfTUVTU0FHRVMgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2NoZWNrOiBhbGwKKworaW5mbyBkdmkgcHMgcGRmIGh0bWwgdGFncyBUQUdTIGN0YWdzIENUQUdTIElEOgorCittb3N0bHljbGVhbjoKKwlybSAtZiByZW1vdmUtcG90Y2RhdGUuc2VkCisJcm0gLWYgc3RhbXAtcG9UCisJcm0gLWYgY29yZSBjb3JlLiogJChET01BSU4pLnBvICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAqLm5ldy5wbworCXJtIC1mciAqLm8KKworY2xlYW46IG1vc3RseWNsZWFuCisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZSBNYWtlZmlsZS5pbiBQT1RGSUxFUyAqLm1vCisKK21haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCXJtIC1mIHN0YW1wLXBvICQoR01PRklMRVMpCisKK2Rpc3RkaXIgPSAkKHRvcF9idWlsZGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pLyQoc3ViZGlyKQorZGlzdCBkaXN0ZGlyOgorCSQoTUFLRSkgdXBkYXRlLXBvCisJQCQoTUFLRSkgZGlzdDIKKyMgVGhpcyBpcyBhIHNlcGFyYXRlIHRhcmdldCBiZWNhdXNlICd1cGRhdGUtcG8nIG11c3QgYmUgZXhlY3V0ZWQgYmVmb3JlLgorZGlzdDI6IHN0YW1wLXBvICQoRElTVEZJTEVTKQorCWRpc3RzPSIkKERJU1RGSUxFUykiOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgTWFrZXZhcnMudGVtcGxhdGUiOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzICQoRE9NQUlOKS5wb3Qgc3RhbXAtcG8iOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2c7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nIjsgXAorCWZpOyBcCisJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nLiQkaTsgdGhlbiBcCisJICAgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZy4kJGkiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9MSU5HVUFTOyB0aGVuIGRpc3RzPSIkJGRpc3RzIExJTkdVQVMiOyBmaTsgXAorCWZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgY3AgLXAgJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisKK3VwZGF0ZS1wbzogTWFrZWZpbGUKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisJdGVzdCAteiAiJChVUERBVEVQT0ZJTEVTKSIgfHwgJChNQUtFKSAkKFVQREFURVBPRklMRVMpCisJJChNQUtFKSB1cGRhdGUtZ21vCisKKyMgR2VuZXJhbCBydWxlIGZvciBjcmVhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby1jcmVhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby1jcmVhdGUkJC8vJ2A7IFwKKwllY2hvICJGaWxlICQkbGFuZy5wbyBkb2VzIG5vdCBleGlzdC4gSWYgeW91IGFyZSBhIHRyYW5zbGF0b3IsIHlvdSBjYW4gY3JlYXRlIGl0IHRocm91Z2ggJ21zZ2luaXQnLiIgMT4mMjsgXAorCWV4aXQgMQorCisjIEdlbmVyYWwgcnVsZSBmb3IgdXBkYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tdXBkYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlJCQvLydgOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBmaTsgXAorCXRtcGRpcj1gcHdkYDsgXAorCWVjaG8gIiQkbGFuZzoiOyBcCisJdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCisJZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRSkgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCRsYW5nLm5ldy5wbyI7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiAkKE1TR01FUkdFKSAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworJChEVU1NWVBPRklMRVMpOgorCit1cGRhdGUtZ21vOiBNYWtlZmlsZSAkKEdNT0ZJTEVTKQorCUA6CisKK01ha2VmaWxlOiBNYWtlZmlsZS5pbi5pbiBNYWtldmFycyAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyBAUE9NQUtFRklMRURFUFNACisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAuaW4gcG8tZGlyZWN0b3JpZXMKKworZm9yY2U6CisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSBub3QgdG8gZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9NYWtldmFycyBiL3BvcHQtMS4xNi9wby9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTUwODNlCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL01ha2V2YXJzCkBAIC0wLDAgKzEsNDEgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fIC0ta2V5d29yZD1QT1BUXworCisjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKyMgdGhlaXIgY29weXJpZ2h0LgorQ09QWVJJR0hUX0hPTERFUiA9CisKKyMgVGhpcyBpcyB0aGUgZW1haWwgYWRkcmVzcyBvciBVUkwgdG8gd2hpY2ggdGhlIHRyYW5zbGF0b3JzIHNoYWxsIHJlcG9ydAorIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKyMgLSBTdHJpbmdzIHdoaWNoIGFyZSBub3QgZW50aXJlIHNlbnRlbmNlcywgc2VlIHRoZSBtYWludGFpbmVyIGd1aWRlbGluZXMKKyMgICBpbiB0aGUgR05VIGdldHRleHQgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAnUHJlcGFyaW5nIFN0cmluZ3MnLgorIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKyMgICB1bmRlcnN0b29kLgorIyAtIFN0cmluZ3Mgd2hpY2ggbWFrZSBpbnZhbGlkIGFzc3VtcHRpb25zIGFib3V0IG5vdGF0aW9uIG9mIGRhdGUsIHRpbWUgb3IKKyMgICBtb25leS4KKyMgLSBQbHVyYWxpc2F0aW9uIHByb2JsZW1zLgorIyAtIEluY29ycmVjdCBFbmdsaXNoIHNwZWxsaW5nLgorIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorIyBJdCBjYW4gYmUgeW91ciBlbWFpbCBhZGRyZXNzLCBvciBhIG1haWxpbmcgbGlzdCBhZGRyZXNzIHdoZXJlIHRyYW5zbGF0b3JzCisjIGNhbiB3cml0ZSB0byB3aXRob3V0IGJlaW5nIHN1YnNjcmliZWQsIG9yIHRoZSBVUkwgb2YgYSB3ZWIgcGFnZSB0aHJvdWdoCisjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCitNU0dJRF9CVUdTX0FERFJFU1MgPSA8cG9wdC1kZXZlbEBycG01Lm9yZz4KKworIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLCBiZXlvbmQgTENfTUVTU0FHRVMsIGZvciB3aGljaCB0aGUKKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KK0VYVFJBX0xPQ0FMRV9DQVRFR09SSUVTID0KZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9QT1RGSUxFUy5pbiBiL3BvcHQtMS4xNi9wby9QT1RGSUxFUy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODczNzJjCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL1BPVEZJTEVTLmluCkBAIC0wLDAgKzEsMTEgQEAKKyMgTGlzdCBvZiBmaWxlcyB3aGljaCBjb250YWluIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgorCisjIFBhY2thZ2Ugc291cmNlIGZpbGVzCisKK3BvcHQuYworcG9wdC5oCitwb3B0Y29uZmlnLmMKK3BvcHRoZWxwLmMKK3BvcHRpbnQuYworcG9wdHBhcnNlLmMKK3Rlc3QxLmMKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9SdWxlcy1xdW90IGIvcG9wdC0xLjE2L3BvL1J1bGVzLXF1b3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyYTk5NQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9SdWxlcy1xdW90CkBAIC0wLDAgKzEsNDcgQEAKKyMgU3BlY2lhbCBNYWtlZmlsZSBydWxlcyBmb3IgRW5nbGlzaCBtZXNzYWdlIGNhdGFsb2dzIHdpdGggcXVvdGF0aW9uIG1hcmtzLgorCitESVNURklMRVMuY29tbW9uLmV4dHJhMSA9IHF1b3Quc2VkIGJvbGRxdW90LnNlZCBlbkBxdW90LmhlYWRlciBlbkBib2xkcXVvdC5oZWFkZXIgaW5zZXJ0LWhlYWRlci5zaW4gUnVsZXMtcXVvdAorCisuU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KKworZW5AcXVvdC5wby1jcmVhdGU6CisJJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQorZW5AYm9sZHF1b3QucG8tY3JlYXRlOgorCSQoTUFLRSkgZW5AYm9sZHF1b3QucG8tdXBkYXRlCisKK2VuQHF1b3QucG8tdXBkYXRlOiBlbkBxdW90LnBvLXVwZGF0ZS1lbgorZW5AYm9sZHF1b3QucG8tdXBkYXRlOiBlbkBib2xkcXVvdC5wby11cGRhdGUtZW4KKworLmluc2VydC1oZWFkZXIucG8tdXBkYXRlLWVuOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlLWVuJCQvLydgOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCisJTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworZW5AcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgorCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBxdW90Lmluc2VydC1oZWFkZXIKKworZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AYm9sZHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQGJvbGRxdW90Lmluc2VydC1oZWFkZXIKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXF1b3QKK21vc3RseWNsZWFuLXF1b3Q6CisJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vYm9sZHF1b3Quc2VkIGIvcG9wdC0xLjE2L3BvL2JvbGRxdW90LnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjkzN2FhCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2JvbGRxdW90LnNlZApAQCAtMCwwICsxLDEwIEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCitzL+KAnC/igJwbWzFtL2cKK3Mv4oCdLxtbMG3igJ0vZworcy/igJgv4oCYG1sxbS9nCitzL+KAmS8bWzBt4oCZL2cKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9jcy5nbW8gYi9wb3B0LTEuMTYvcG8vY3MuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNThlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vY3MuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9jcy5wbyBiL3BvcHQtMS4xNi9wby9jcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODg3YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2NzLnBvCkBAIC0wLDAgKzEsMTQyIEBACisjIEN6ZWNoIHRyYW5zbGF0aW9ucyBvZiBwb3B0CisjIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIHBvcHQgcGFja2FnZS4KKyMgTWlsYW4gS2Vyc2xhZ2VyIDxrZXJzbGFnZUBsaW51eC5jej4sIDIwMDEuCisjIFBldHIgUGlzYXIgPHBldHIucGlzYXJAYXRsYXMuY3o+LCAyMDA4LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjE0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTEyLTA4IDE5OjU1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldHIgUGlzYXIgPHBldHIucGlzYXJAYXRsYXMuY3o+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ3plY2ggPHRyYW5zbGF0aW9uLXRlYW0tY3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJuZXpuw6Ftw6kgxI3DrXNsbyBjaHlieSIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJ0eXAgdm9sYnkgKCV1KSBuZW7DrSB2IHBvcHQgaW1wbGVtZW50b3bDoW5cbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJjaHliw60gYXJndW1lbnQiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm5lem7DoW3DoSB2b2xiYSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAicG/FvmFkb3bDoW55IHZ6w6FqZW1uxJsgdsO9bHXEjW7DqSBsb2dpY2vDqSBvcGVyYWNlIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgbmVzbcOtIGLDvXQgTlVMTCIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJhbGlhc3kgdm5vxZllbsOpIHDFmcOtbGnFoSBobHVib2tvIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJjaHliYSB2IHF1b3RvdsOhbsOtIHBhcmFtZXRyxa8iCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICJjaHlibsOhIG51bWVyaWNrw6EgaG9kbm90YSIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAixI3DrXNsbyBqZSBwxZnDrWxpxaEgdmVsa8OpIG5lYm8gcMWZw61sacWhIG1hbMOpIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAic2VsaGFsYSBhbG9rYWNlIHBhbcSbdGkiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAibmV6bsOhbcOhIGNoeWJhIgorCisjOiBwb3B0aGVscC5jOjc1IHBvcHRoZWxwLmM6ODYKK21zZ2lkICJTaG93IHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJWeXDDrcWhZSB0dXRvIG7DoXBvdsSbZHUiCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiVnlww63FoWUga3LDoXRrw70gbsOhdm9kIGsgcG91xb5pdMOtIgorCisjOiBwb3B0aGVscC5jOjkwCittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAiWm9icmF6aXQgaW1wbGljaXRuw60gdm9sYnkgdmUgenByw6F2xJsiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiVWtvbsSNw60gdm9sYnkiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiVm9sYnkgbsOhcG92xJtkeToiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiVm9sYnkgaW1wbGVtZW50b3ZhbsOpIHDFmWVzIGFsaWFzL2V4ZWMgcG9wdHU6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIk5PTkUiCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJWQUwiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJJTlQiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNUUklORyIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICJBUkciCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICJQb3XFvml0w606IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbVk9MQlnigKZdIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2RhLmdtbyBiL3BvcHQtMS4xNi9wby9kYS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0ZjQ2NAotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9kYS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2RhLnBvIGIvcG9wdC0xLjE2L3BvL2RhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzkwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vZGEucG8KQEAgLTAsMCArMSwxNDIgQEAKKyMgRGFuaXNoIHRyYW5zbGF0aW9uIG9mIHBvcHQuCisjIENvcHlyaWdodCAoQykgMjAwOCBwb3B0LgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgcG9wdCBwYWNrYWdlLgorIyBNYXJ0aW4gSGFuc2VuIDxtYWhAazY0LmRrPiwgMjAwMS4KKyMgSm9lIEhhbnNlbiA8am9lZGFsdG9uMkB5YWhvby5kaz4sIDIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0LTEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDktMTUgMDA6MDArMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSm9lIEhhbnNlbiA8am9lZGFsdG9uMkB5YWhvby5kaz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBEYW5pc2ggPGRhbnNrQGRhbnNrLWdydXBwZW4uZGs+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgInVrZW5kdCBmZWpsbnIuIgorCisjOiBwb3B0LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgInRpbHZhbGdzdHlwZSAoJXUpIGVyIGlra2UgaW1wbGVtZW50ZXJldCBpIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJtYW5nbGVyIGFyZ3VtZW50IgorCisjOiBwb3B0LmM6MTcxMworbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJ1a2VuZHQgdGlsdmFsZyIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAiZGUgw7huc2tlZGUgaGFuZGxpbmdlciB1ZGVsdWtrZXIgaGluYW5kZW4iCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICJvcHQtPmFyZyBiw7hyIGlra2UgdsOmcmUgTlVMTCIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJhbGlhc2VyIGVyIGZvciBkeWJ0IGluZGxlanJldCIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiZmVqbCBpIHBhcmFtZXRlciBjaXRlcmluZyIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgInVneWxkaWcgbnVtZXJpc2sgdsOmcmRpIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJudW1tZXIgZm9yIHN0b3J0LCBlbGxlciBmb3IgbGlsbGUiCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJodWtvbW1lbHNlc3RpbGRlbGluZyBtaXNseWtrZWRlcyIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICJ1a2VuZHQgZmVqbCIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiVmlzIGRlbm5lIGhqw6ZscGVtZWRkZWxlbHNlIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIlZpcyBrb3J0ZmF0dGV0IGJydWdzYW52aXNuaW5nIgorCisjOiBwb3B0aGVscC5jOjkwCittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAiVmlzIGluc3RpbGxpbmdzc3RhbmRhcmRlciBpIGJlc2tlZCIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJJbmRzdGlsbGluZ2VyIGZvciBhZmJyeWRuaW5nIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIkhqw6ZscGVpbmRzdGlsbGluZ2VyOiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICJJbmRzdGlsbGluZ2VyIGltcGxlbWVudGVyZXQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiSU5HRU4iCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJWQUwiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJJTlQiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNUUklORyIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICJBUkciCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICJCcnVnOiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiW1RJTFZBTEcuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2RlLmdtbyBiL3BvcHQtMS4xNi9wby9kZS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiYTE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9kZS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2RlLnBvIGIvcG9wdC0xLjE2L3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDMxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vZGUucG8KQEAgLTAsMCArMSwxNDEgQEAKKyMgVHJhbnNsYXRpb24gb2YgcG9wdCB0byBHZXJtYW4gKERldXRzY2gpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBwb3B0IHBhY2thZ2UuCisjIFJvYmVydCBTY2hlY2sgPHJwbUByb2JlcnQtc2NoZWNrLmRlPiwgMjAwNC0yMDA3LgorIyBSb2xhbmQgSWxsaWcgPHJvbGFuZC5pbGxpZ0BnbXguZGU+LCAyMDA5LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjE0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTExLTEwIDE5OjU4KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFJvbGFuZCBJbGxpZyA8cm9sYW5kLmlsbGlnQGdteC5kZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW4gPHRyYW5zbGF0aW9uLXRlYW0tZGVAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJVbmJla2FubnRlIEZlaGxlci1OdW1tZXIiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAiT3B0aW9uc3R5cCAoJXUpIGlzdCBpbiBwb3B0IG5pY2h0IHZvcmhhbmRlblxuIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgIkZlaGxlbmRlcyBBcmd1bWVudCIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAiVW5iZWthbm50ZSBPcHRpb24iCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgIkdlZ2Vuc2VpdGlnIGF1c3NjaGxpZcOfZW5kZSBsb2dpc2NoZSBPcGVyYXRvcmVuIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgc29sbHRlIG5pY2h0IE5VTEwgc2VpbiIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJBbGlhc2UgenUgdGllZiB2ZXJzY2hhY2h0ZWx0IgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJGZWhsZXIgYmVpbSBRdW90aWVyZW4gZGVyIFBhcmFtZXRlciIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIG51bW1lcmlzY2hlciBXZXJ0IgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJOdW1tZXIgenUgZ3Jvw58gb2RlciB6dSBrbGVpbiIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIlNwZWljaGVyenVvcmRudW5nIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgIlVuYmVrYW5udGVyIEZlaGxlciIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiWmVpZ3QgZGllc2UgSGlsZmUgYW4iCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiWmVpZ3QgZWluZSBrdXJ6ZSBWZXJ3ZW5kdW5nc2luZm9ybWF0aW9uIgorCisjOiBwb3B0aGVscC5jOjkwCittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAiWmVpZ3QgZGllIFN0YW5kYXJkZWluc3RlbGx1bmdlbiBhbiIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJPcHRpb25lbiBiZWVuZGVuIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIkhpbGZlLU9wdGlvbmVuOiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICJPcHRpb25lbiDDvGJlciBwb3B0IGFsaWFzL2V4ZWMgaW1wbGVtZW50aWVydDoiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiTklDSFRTIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiV0VSVCIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIklOVEVHRVIiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNUUklORyIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICJBUkdVTUVOVCIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIlZlcndlbmR1bmc6IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbT1BUSU9OLi4uXSIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9lbkBib2xkcXVvdC5oZWFkZXIgYi9wb3B0LTEuMTYvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZGI2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCkBAIC0wLDAgKzEsMjUgQEAKKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorIyBjaGFyYWN0ZXJzLCBvbmx5IHN1YnN0aXR1dGVzIGxpa2UgZ3JhdmUgYWNjZW50ICgweDYwKSwgYXBvc3Ryb3BoZSAoMHgyNykKKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKyMKKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKyMgSXQgYWxzbyB0cmFuc2xhdGVzIHBhaXJzIG9mIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworIyBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFDKSBhbmQgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUQpLgorIworIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisjIFdoZW4gb3V0cHV0IHRvIGFuIElTTy04ODU5LTEgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjCisjIFRoaXMgY2F0YWxvZyBmdXJ0aGVybW9yZSBkaXNwbGF5cyB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBxdW90YXRpb24gbWFya3MgaW4KKyMgYm9sZCBmYWNlLCBhc3N1bWluZyB0aGUgVlQxMDAvWFRlcm0gZXNjYXBlIHNlcXVlbmNlcy4KKyMKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9lbkBxdW90LmhlYWRlciBiL3BvcHQtMS4xNi9wby9lbkBxdW90LmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY0N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2VuQHF1b3QuaGVhZGVyCkBAIC0wLDAgKzEsMjIgQEAKKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorIyBjaGFyYWN0ZXJzLCBvbmx5IHN1YnN0aXR1dGVzIGxpa2UgZ3JhdmUgYWNjZW50ICgweDYwKSwgYXBvc3Ryb3BoZSAoMHgyNykKKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKyMKKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKyMgSXQgYWxzbyB0cmFuc2xhdGVzIHBhaXJzIG9mIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworIyBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFDKSBhbmQgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUQpLgorIworIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisjIFdoZW4gb3V0cHV0IHRvIGFuIElTTy04ODU5LTEgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vZW8uZ21vIGIvcG9wdC0xLjE2L3BvL2VvLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhkYzIxCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2VvLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vZW8ucG8gYi9wb3B0LTEuMTYvcG8vZW8ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3NGI0OAotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9lby5wbwpAQCAtMCwwICsxLDE0MCBAQAorIyBFc3BlcmFudG8gdHJhbnNsYXRpb24gb2YgcG9wdAorIyBDb3B5cmlnaHQgKEMpIDIwMDggRmVsaXBlIENhc3RybworIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBGZWxpcGUgQ2FzdHJvIDxmZWZjYXNAZ21haWwuY29tPiwgMjAwOAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjE0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTA4LTAzIDE1OjUwLTAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZlbGlwZSBDYXN0cm8gPGZlZmNhc0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRXNwZXJhbnRvIDx0cmFuc2xhdGlvbi10ZWFtLWVvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAibmVrb25hdGEgZXJhcm51bWVybyIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJsYSBvcGNpYSB0aXBvICgldSkgbmUgZXN0YXMgcmVhbGlnaXRhIGVuIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJtYW5rYXMgYXJndW1lbnRvIgorCisjOiBwb3B0LmM6MTcxMworbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJuZWtvbmF0YSBvcGNpbyIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAicmVjaXByb2thaiBsb2dpa2FqIG9wZXJhY2lvaiBlc3RhcyBwb3N0dWxhdGFqIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgbmUgZGV2dXMgZXN0aSBOVUxMIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImtyb21ub21vaiBlc3RhcyBpbmdpdGFqIHRybyBwcm9mdW5kZSIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiZXJhcm8gZW4gcGFyYW1ldHJhIGNpdGFkbyIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgIm5ldmFsaWRhIG51bWVyYSB2YWxvcm8iCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIm51bWVybyB0cm8gZ3JhbmRhIGHFrSB0cm8gZXRhIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAibWFsc3VrY2VzbyBkdW0gb2t1cGFkbyBkZSBtZW1vcm8iCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAibmVrb25hdGEgZXJhcm8iCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIk1vbnRyaSB0aXVuIMSJaSBoZWxwbWVzYcSdb24iCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiTW9udHJpIHJlc3VtaXRhbiBtZXNhxJ1vbiBwcmkgdXphZG8iCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJNb250cmkgbGEgaW1wbGljaXRham4gdmFsb3Jvam4gZGUgbGEgb3BjaW8gZW4gbGEgbWVzYcSdbyIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb2ogcHJpIGZpbmnEnW8iCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiSGVscC1vcGNpb2o6IgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIk9wY2lvaiByZWFsaWdpdGFqIHBlciBwb3B0IGFsaWFzL2V4ZWM6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIk5FTklPIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVkFMIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiTE9OR0xPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJTVFJJTkciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMT0FUIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiVXphZG86IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbT1BDSU8uLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2VzLmdtbyBiL3BvcHQtMS4xNi9wby9lcy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjZTYxMgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9lcy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2VzLnBvIGIvcG9wdC0xLjE2L3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMDUyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vZXMucG8KQEAgLTAsMCArMSwxNDEgQEAKKyMgU3BhbmlzaCB0cmFuc2xhdGlvbnMgZm9yIHBvcHQuCisjIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgTGVhbmRybyBMdWNhcmVsbGEgPGx1Y2FAbGludXhtZW5kb3phLm9yZy5hcj4sIDIwMDcKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0xMi0yOCAxMjoyMiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBMZWFuZHJvIEx1Y2FyZWxsYSA8bHVjYUBsaW51eG1lbmRvemEub3JnLmFyPlxuIgorIkxhbmd1YWdlLVRlYW06IFNwYW5pc2ggPGVzQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAiZXJybm8gZGVzY29ub2NpZG8iCisKKyM6IHBvcHQuYzoxMjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgInRpcG8gZGUgb3BjacOzbiAoJWQpIG5vIGltcGxlbWVudGFkYSBlbiBwb3B0XG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAiZmFsdGEgYXJndW1lbnRvIgorCisjOiBwb3B0LmM6MTcxMworbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJvcGNpw7NuIGRlc2Nvbm9jaWRhIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICJyZXF1ZXJpZGEgb3BlcmFjacOzbiBsw7NnaWNhIG11dHVhbWVudGUgZXhjbHVzaXZhIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFsaWFzIGFuaWRhZG9zIG11eSBwcm9mdW5kYW1lbnRlIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJlcnJvciBlbiBjaXRhIGRlIHBhcsOhbWV0cm9zIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAidmFsb3IgbnVtw6lyaWNvIGludsOhbGlkbyIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAibsO6bWVybyBtdXkgbGFyZ28gbyBtdXkgcGVxdWXDsW8iCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAiZXJyb3IgZGVzY29ub2NpZG8iCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIk11ZXN0cmEgZXN0ZSBtZW5zYWplIGRlIGF5dWRhIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIkluZGljYSBlbCBtb2RvIGRlIHVzbyByZXN1bWlkbyIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICJOT05FIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVkFMIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKKyMsIGZ1enp5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJTVFJJTkciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMT0FUIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiTW9kbyBkZSB1c286IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbT1BDScOTTi4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vZmkuZ21vIGIvcG9wdC0xLjE2L3BvL2ZpLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzIwZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2ZpLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vZmkucG8gYi9wb3B0LTEuMTYvcG8vZmkucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1YjRjNgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9maS5wbwpAQCAtMCwwICsxLDE0NyBAQAorIyB0cmFuc2xhdGlvbiBvZiBwb3B0LTEuMTQucG90IHRvIEZpbm5pc2gKKyMgQ29weXJpZ2h0IMKpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBwb3B0IHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIEpvcm1hIEthcnZvbmVuIDxrYXJ2am9ybUB1c2Vycy5zZi5uZXQ+LCAyMDA4LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjE0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAyLTIxIDE4OjE5KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEpvcm1hIEthcnZvbmVuIDxrYXJ2am9ybUB1c2Vycy5zZi5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRmlubmlzaCA8dHJhbnNsYXRpb24tdGVhbS1maUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKworIyAgZXJybm8gLSBudW1iZXIgb2YgbGFzdCBlcnJvciAoZGVmaW5lZCBieSB0aGUgSVNPIEMgc3RhbmRhcmQpCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJ0dW50ZW1hdG9uIGVycm5vLXZpcmhlbnVtZXJvYXJ2byIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJ2YWxpdHNpbnR5eXBwacOkICgldSkgZWkgb2xlIHRvdGV1dGV0dHUgcG9wdC1vaGplbG1hc3NhXG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAicHV1dHR1dmEgYXJndW1lbnR0aSIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAidHVudGVtYXRvbiB2YWxpdHNpbiIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAicHl5ZGV0dHlqw6QgbG9vZ2lzaWEgdG9pbWludG9qYSBlaSB2b2kga8OkeXR0w6TDpCB5aGRlc3PDpCIKKworIzogcG9wdC5jOjE3MTcKK21zZ2lkICJvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwiCittc2dzdHIgIuKAnW9wdC0+YXJn4oCdLXZhbGl0c2luYXJndW1lbnR0aSBlaSBzYWEgb2xsYSBOVUxMIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImxpaWFuIG1vbnRhIGFsaWFzdGEgc2lzw6Rra8OkaW4iCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgInZpcmhlIHBhcmFtZXRyaWVuIGxhaW5hdWtzZXNzYSIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgInZpcmhlZWxsaW5lbiBudW1lcm9hcnZvIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJudW1lcm8gb24gbGlpYW4gaXNvIHRhaSBsaWlhbiBwaWVuaSIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIm11aXN0aW4gdmFyYXVzIGVpIG9ubmlzdHVudXQiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAidHVudGVtYXRvbiB2aXJoZSIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiTsOkeXTDpCB0w6Rtw6Qgb2hqZSIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICJOw6R5dMOkIGx5aHl0IGvDpHl0dMO2b2hqZSIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIk7DpHl0w6QgdmFsaXRzaW5vbGV0dWtzZXQgb2hqZWVzc2EiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiTG9wZXR0YW1pc3ZhbGl0c2ltZXQiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiT2hqZXZhbGl0c2ltZXQ6IgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIiIKKyJWYWxpdHNpbWV0IHRvdGV1dGV0dHUg4oCdcG9wdCBhbGlhc+KAnS1tw6TDpHJpdHRlbHlpbGzDpCB0YWkg4oCdcG9wdCBleGVj4oCdLSIKKyJtw6TDpHJpdHRlbHlpbGzDpDoiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiRUkgTUlUw4TDhE4iCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJBUlZPIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5ULUtPS09OQUlTTFVLVSIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIkxPTkctS09LT05BSVNMVUtVIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HTE9ORy1LT0tPTkFJU0xVS1UiCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJNRVJLS0lKT05PIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJGTE9BVC1MSVVLVUxVS1UiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUtTElVS1VMVUtVIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHVU1FTlRUSSIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIkvDpHl0dMO2OiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiW1ZBTElUU0lOLi4uXSIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9mci5nbW8gYi9wb3B0LTEuMTYvcG8vZnIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjFmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vZnIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9mci5wbyBiL3BvcHQtMS4xNi9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTNjMTRmCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2ZyLnBvCkBAIC0wLDAgKzEsMTQ3IEBACisjIEEgRnJlbmNoIHRyYW5zbGF0aW9uIGZvciBycG0gbWVzc2FnZXMKKyMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUlBNIHBhY2thZ2UuCisjIFJQTSBGcmVuY2ggVHJhbnNsYXRpb24gPHJwbS1mckBsaXZuYS5vcmc+LCAyMDAzLgorIyBKQkogOiBUSEFOWCBBIExPVCAhISEKKyMKKyMgTidow6lzaXRleiBwYXMgw6AgbSdlbnZveWV6IHVuIGNvdXJyaWVsIHNpIHZvdXMgYXZleiBkZXMKKyMgc3VnZ2VzdGlvbnMvY29ycmVjdGlvbnMuCisjCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAzLTA2LTIyIDIzOjQzKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFJQTSBGcmVuY2ggVHJhbnNsYXRpb24gPHJwbS1mckBsaXZuYS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUlBNIEZyZW5jaCBUcmFuc2xhdGlvbiA8cnBtLWZyQGxpdm5hLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgImVycm5vIGluY29ubnUiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgInR5cGUoJWQpIGQnb3B0aW9uIG5vbiBpbXBsw6ltZW50w6kgZGFucyBwb3B0XG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAiYXJndW1lbnQgbWFucXVhbnQiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm9wdGlvbiBpY29ubnVlIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICJvcMOpcmF0aW9ucyBsb2dpcXVlcyBtdXR1ZWxsZW1lbnQgZXhjbHVzaXZlcyByZXF1aXNlcyIKKworIzogcG9wdC5jOjE3MTcKK21zZ2lkICJvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwiCittc2dzdHIgIm9wdC0+YXJnIG5lIGRldnJhaXQgcGFzIMOqdHJlIE5VTEwiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAibGVzIGFsaWFzIHNvbnQgdHJvcCBlbnRyZW1lbGzDqXMiCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgImVycmV1ciBlbiBjaXRhbnQgbGVzIHBhcmFtw6h0cmVzIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAidmFsZXVyIG51bcOpcmlxdWUgaW52YWxpZGUiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIm5vbWJyZSB0cm9wIGdyYW5kIG91IHRyb3AgcGV0aXQiCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCdhbGxvY2F0aW9uIGRlIG3DqW1vaXJlIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgImVycmV1ciBpbmNvbm51ZSIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiTW9udHJlIGNlIG1lc3NhZ2UgZCdhaWRlIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIkFmZmljaGUgdW4gYnJlZiBkZXNjcmlwdGlmIGRlIGwndXRpbGlzYXRpb24iCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJBZmZpY2hlciBsZXMgdmFsZXVycyBwYXIgZMOpZmF1dCBkZXMgb3B0aW9ucyBkYW5zIGxlIG1lc3NhZ2UiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiUklFTiIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIlZBTCIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIkVOVElFUiIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjA5CisjLCBmdXp6eQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiQ0hBSU5FIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJGTE9UVEFOVCIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIkRPVUJMRSIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIkFSRyIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIlV0aWxpc2F0aW9uOiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiW09QVElPTi4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vZ2EuZ21vIGIvcG9wdC0xLjE2L3BvL2dhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjJhZTdjCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2dhLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vZ2EucG8gYi9wb3B0LTEuMTYvcG8vZ2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlZDljZQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9nYS5wbwpAQCAtMCwwICsxLDE0MSBAQAorIyBJcmlzaCB0cmFuc2xhdGlvbnMgZm9yIHBvcHQuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIEtldmluIFNjYW5uZWxsIDxrc2Nhbm5lQGdtYWlsLmNvbT4sIDIwMDcuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDQtMTAgMDY6MjEtMDUwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogS2V2aW4gU2Nhbm5lbGwgPGtzY2FubmVAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IElyaXNoIDxnYWVpbGdlLWdudWxpbnV4QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAiZXJybm8gYW5haXRobmlkIgorCisjOiBwb3B0LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgIm7DrWwgYW4gY2luZcOhbCByb2doYSBzZW8gKCV1KSBhciBmw6FpbCBpIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJhcmfDs2ludCBhciBpYXJyYWlkaCIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAicm9naGEgYW5haXRobmlkIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICJpYXJyYWRoIG9pYnLDrW9jaHRhw60gbG9pZ2hjacO6bGEgY29taGVpc2lhY2hhIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAibsOtb3IgY2jDs2lyIHJvZ2hhLT5hcmcgYSBiaGVpdGggTlVMTCIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJhaWxpYXNhbm5hIG5lYWRhaXRoZSByw7NkaG9taGFpbiIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiZWFycsOhaWQgYWd1cyBwYXJhaW3DqWFkYXIgw6EgY2h1ciBmYW9pIGNob21oYXJ0aGHDrSBhdGhmaHJpb3RhaWwiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICJsdWFjaCBuZWFtaGJoYWlsw60gdWltaHJpw7ppbCIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAidWltaGlyIHLDs21ow7NyIG7DsyByw7NiaGVhZyIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgInRoZWlwIGFyIGRow6FpbGVhZGggbmEgY3VpbWhuZSIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICJlYXJyw6FpZCBhbmFpdGhuaWQiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIlRhaXNwZcOhaW4gYW4gY2hhYmhhaXIgc2VvIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIlRhaXNwZcOhaW4gYmVhZ8OhbiBlb2xhaXMgZmFvaW4gw7pzw6FpZCIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIlRhaXNwZcOhaW4gbHVhY2hhbm5hIHLDqWFtaHNob2NyYWl0aGUgbmEgcm9naGFubmEgc2EgdGVhY2h0YWlyZWFjaHQiCisKKyMgVGVybWluYXRlIG5vdCBhIHZlcmIgaGVyZQorIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJSb2doYW5uYSBzY29ydGhhIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIlJvZ2hhbm5hIGNhYmhyYWNoYToiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiUm9naGFubmEgYSBjdWlyZWFkaCBpIGJoZmVpZGhtIHRyw60gYWlsaWFzL2V4ZWMgcG9wdDoiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiTkVBTUhOw40iCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJMVUFDSCIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIklOVCIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjA5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkdMT05HIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiU1RSSU5HIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJGTE9BVCIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIkRPVUJMRSIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIkFSRyIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIsOac8OhaWQ6IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbUk9HSEEuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2dsLmdtbyBiL3BvcHQtMS4xNi9wby9nbC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhNDdmMwotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9nbC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2dsLnBvIGIvcG9wdC0xLjE2L3BvL2dsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMTExNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vZ2wucG8KQEAgLTAsMCArMSwxMzggQEAKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMS0wMS0xNyAwMTowMSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKZXP6cyBCcmF2byDBbHZhcmV6IDxqYmFAcG9ib3guY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEdhbGljaWFuIDx0cmFzbm9AY2V1LmZpLnVkYy5lcz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJlcnJubyBkZXNjb/FlY2lkbyIKKworIzogcG9wdC5jOjEyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAidGlwbyBkZSBvcGNp824gKCVkKSBub24gaW1wbGVtZW50YWRhIGVuIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJmYWx0YSB1biBhcmd1bWVudG8iCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm9wY2nzbiBkZXNjb/FlY2lkYSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAic29saWNpdOFyb25zZSBvcGVyYWNp825zIGzzeGljYXMgbXV0dWFtZW50ZSBleGNsde1udGVzIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFsaWFzZXMgYW5p8WFkb3MgYSB1biBuaXZlbCBkZW1hc2lhZG8gcHJvZnVuZG8iCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgImVycm8gbmFzIGNvbWnxYXMgZG8gcGFy4W1ldHJvIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAidmFsb3IgbnVt6XJpY28gbm9uIHbhbGlkbyIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAibvptZXJvIGRlbWFzaWFkbyBncmFuZGUgb3UgcGVxdWVubyIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICJlcnJvIGRlc2Nv8WVjaWRvIgorCisjOiBwb3B0aGVscC5jOjc1IHBvcHRoZWxwLmM6ODYKK21zZ2lkICJTaG93IHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJBbW9zYXIgZXN0YSBtZW5zYXhlIGRlIGF4dWRhIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIkFtb3NhciBicmV2ZW1lbnRlIG8geGVpdG8gZGUgdXRpbGl6YWNp824iCisKKyM6IHBvcHRoZWxwLmM6OTAKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAiQW1vc2FyIGJyZXZlbWVudGUgbyB4ZWl0byBkZSB1dGlsaXphY2nzbiIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICJOQURBIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVkFMIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKKyMsIGZ1enp5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJDQURFQSIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICJBUkciCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICJVc286IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbT1BDSdNOLi4uXSIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9odS5nbW8gYi9wb3B0LTEuMTYvcG8vaHUuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTM4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vaHUuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9odS5wbyBiL3BvcHQtMS4xNi9wby9odS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjgxYzMwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2h1LnBvCkBAIC0wLDAgKzEsMTQzIEBACisjIEh1bmdhcmlhbiB0cmFuc2xhdGlvbiBvZiBwb3B0CisjIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgR2Fib3IgS2VsZW1lbiA8a2VsZW1lbmdAZ25vbWUuaHU+LCAyMDA3LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA3LTA2LTIxIDAwOjQ1KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEdhYm9yIEtlbGVtZW4gPGtlbGVtZW5nQGdub21lLmh1PlxuIgorIkxhbmd1YWdlLVRlYW06IEh1bmdhcmlhbiA8dHJhbnNsYXRpb24tdGVhbS1odUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKyJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgImlzbWVyZXRsZW4gaGliYXN6w6FtIgorCisjOiBwb3B0LmM6MTI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJhIGthcGNzb2zDs3TDrXB1cyAoJWQpIG5pbmNzIG1lZ3ZhbMOzc8OtdHZhIGEgcG9wdC1iYW5cbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJoacOhbnl6w7MgcGFyYW3DqXRlciIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAiaXNtZXJldGxlbiBrYXBjc29sw7MiCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgImvDtmxjc8O2bsO2c2VuIGtpesOhcsOzIGxvZ2lrYWkgbcWxdmVsZXRla2V0IGvDqXJ0IgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAiYXogb3B0LT5hcmcgbmVtIGxlaGV0IE5VTEwiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAiYXogw6FsbmV2ZWsgdMO6bCBtw6lseWVuIHZhbm5hayBlZ3ltw6FzYmEgw6FneWF6dmEiCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgImhpYmEgYSBwYXJhbcOpdGVyIGlkw6l6w6lzw6liZW4iCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICLDqXJ2w6lueXRlbGVuIG51bWVyaWt1cyDDqXJ0w6lrIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJhIHN6w6FtIHTDumwgbmFneSB2YWd5IHTDumwga2ljc2kiCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJhIG1lbcOzcmlhZm9nbGFsw6FzIG1lZ2hpw7pzdWx0IgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgImlzbWVyZXRsZW4gaGliYSIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiRXplbiBzw7pnw7MgbWVnamVsZW7DrXTDqXNlIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIlLDtnZpZCBoYXN6bsOhbGF0aSB1dGFzw610w6FzIG1lZ2plbGVuw610w6lzZSIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIkthcGNzb2zDs2sgYWxhcMOpcnRlbG1lesOpc2VpbmVrIG1lZ2plbGVuw610w6lzZSIKKworIzogcG9wdGhlbHAuYzo5MgorIywgZnV6enkKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiU8O6Z8OzbGVoZXTFkXPDqWdlazoiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiU8O6Z8OzbGVoZXTFkXPDqWdlazoiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiQSBwb3B0IGFsaWFzL2V4ZWMgc2Vnw610c8OpZ8OpdmVsIG1lZ3ZhbMOzc8OtdG90dCBrYXBjc29sw7NrOiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICJOSU5DUyIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIsOJUlTDiUsiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJFR8OJU1oiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJIT1NTWsOaIgorCisjOiBwb3B0aGVscC5jOjIwOQorIywgZnV6enkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiSE9TU1rDmiIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNaw5ZWRUciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkxFQkVHxZAiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJEVVBMQSIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIlBBUiIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIkhhc3puw6FsYXQ6IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbS0FQQ1NPTMOTLi4uXSIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9pZC5nbW8gYi9wb3B0LTEuMTYvcG8vaWQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMDdhZGEKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vaWQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9pZC5wbyBiL3BvcHQtMS4xNi9wby9pZC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjIyNTIwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2lkLnBvCkBAIC0wLDAgKzEsMTQwIEBACisjIEluZG9uZXNpYW4gdHJhbnNsYXRpb25zIGZvciBwb3B0IHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIEFuZGhpa2EgUGFkbWF3YW4gPGFuZGhpa2EucGFkbWF3YW5AZ21haWwuY29tPiwgMjAwOC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wOC0yNiAxNDoxOCswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbmRoaWthIFBhZG1hd2FuIDxhbmRoaWthLnBhZG1hd2FuQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJbmRvbmVzaWFuIDx0cmFuc2xhdGlvbi10ZWFtLWlkQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAiZXJybm8gdGFrIGRpa2V0YWh1aSIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJ0aXBlIG9wc2kgKCV1KSB0YWsgZGlpbXBsZW1lbnRhc2lrYW4gZGkgcG9wdFxuIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgImtlaGlsYW5nYW4gYXJndW1lbiIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAib3BzaSB0YWsgZGlrZXRhaHVpIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICJwZXJtaW50YWFuIG9wZXJhc2kgbG9naWthIGVrc2tsdXNpZiBzZWNhcmEgbXV0dWFsIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgdGlkYWsgYm9sZWggTlVMTCIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJhbGlhcyBkaXNhcmFuZ2thbiB0ZXJsYWx1IGRhbGFtIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJnYWxhdCBkaSBwZW5jYW50dW1hbiBwYXJhbWV0ZXIiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICJuaWxhaSBudW1lcmlrIHRpZGFrIHNhaCIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAibm9tb3IgdGVybGFsdSBiZXNhciBhdGF1IHRlcmxhbHUga2VjaWwiCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJhbG9rYXNpIG1lbW9yaSBnYWdhbCIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICJnYWxhdCB0YWsgZGlrZXRhaHVpIgorCisjOiBwb3B0aGVscC5jOjc1IHBvcHRoZWxwLmM6ODYKK21zZ2lkICJTaG93IHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJUYW1waWxrYW4gcGVzYW4gYmFudHVhbiBpbmkiCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiVGFtcGlsa2FuIHBlc2FuIHBlbmdndW5hYW4gc2luZ2thdCIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIlRhbXBpbGthbiBvcHNpIHN0YW5kYXIgZGFsYW0gcGVzYW4iCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiTWF0aWthbiBvcHNpIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIk9wc2kgYmFudHVhbjoiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiT3BzaSBkaWltcGxlbWVudGFzaWthbiB2aWEgcG9wdCBhbGlhcy9leGVjOiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICJOT05FIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVkFMIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiTE9OR0xPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJTVFJJTkciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMT0FUIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjoiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIltPUFNJLi4uXSIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9pbnNlcnQtaGVhZGVyLnNpbiBiL3BvcHQtMS4xNi9wby9pbnNlcnQtaGVhZGVyLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZkZTAxCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2luc2VydC1oZWFkZXIuc2luCkBAIC0wLDAgKzEsMjMgQEAKKyMgU2VkIHNjcmlwdCB0aGF0IGluc2VydHMgdGhlIGZpbGUgY2FsbGVkIEhFQURFUiBiZWZvcmUgdGhlIGhlYWRlciBlbnRyeS4KKyMKKyMgQXQgZWFjaCBvY2N1cnJlbmNlIG9mIGEgbGluZSBzdGFydGluZyB3aXRoICJtc2dpZCAiLCB3ZSBleGVjdXRlIHRoZSBmb2xsb3dpbmcKKyMgY29tbWFuZHMuIEF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlLCBpbnNlcnQgdGhlIGZpbGUuIEF0IHRoZSBmb2xsb3dpbmcKKyMgb2NjdXJyZW5jZXMsIGRvIG5vdGhpbmcuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZworIyBvY2N1cnJlbmNlcyBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL15tc2dpZCAveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9tL20vCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZWFkIHRoZSBmaWxlLgorciBIRUFERVIKKyMgT3V0cHV0IHRoZSBmaWxlJ3MgY29udGVudHMgYnkgcmVhZGluZyB0aGUgbmV4dCBsaW5lLiBCdXQgZG9uJ3QgbG9zZSB0aGUKKyMgY3VycmVudCBsaW5lIHdoaWxlIGRvaW5nIHRoaXMuCitnCitOCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2lzLmdtbyBiL3BvcHQtMS4xNi9wby9pcy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjYTAzMwotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9pcy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2lzLnBvIGIvcG9wdC0xLjE2L3BvL2lzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NzVhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vaXMucG8KQEAgLTAsMCArMSwxMzcgQEAKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMS0wNi0wOCAwMTozNSswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBSaWNoYXJkIEFsbGVuIDxyYUBocC5pcz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBpcyA8a2RlLWlzbEBtbWVkaWEuaXM+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDgtYml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgIvP+ZWtrdCB2aWxsdW76bWVyIgorCisjOiBwb3B0LmM6MTI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJyb2ZhZ2Vy8GluICglZCkgZXIgZWtraSBzdHVkZCDtIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJ2YW50YXIgdmnwZmFuZyIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAi8/5la2t0dXIgcm9maSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAiYmXwafAgdW0gcm9mYSBzZW0gc2z2a2t2YSBodm9yIOEg9vBydW0iCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICJvcHQtPmFyZyDmdHRpIGVra2kgYfAgdmVyYSBOVUxMIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFs7WFzYXIgb2YgZmzza25pciIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAidmlsbGEg7SB2afBm9m5ndW0gKGfmc2FsYXBwaXIgb2cgc3ZvIGZydi4pIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAi82dpbHQgdPZsdWxlZ3QgZ2lsZGkiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgInRhbGFuIG9mIHN083IgZfBhIHNt4SIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgImVra2kgdPNrc3QgYfAgdGFrYSBmcuEgbWlubmkiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAi8/5la2t0IHZpbGxhIgorCisjOiBwb3B0aGVscC5jOjc1IHBvcHRoZWxwLmM6ODYKK21zZ2lkICJTaG93IHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJT/W5hIP5lc3NhIGhq4WxwIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIlP9bmEgc3R1dHRhciBub3RrdW5hcmxlafBiZWluaW5nYXIiCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJT/W5hIHNq4WxmZ2VmaW4gZ2lsZGkgcm9mYSDtIHNraWxhYm/wdW0iCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiRU5HSU4iCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJWQUwiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJJTlQiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIwOQorIywgZnV6enkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNUUklORyIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICJBUkciCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICJOb3RrdW46IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbUk9GSS4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vaXQuZ21vIGIvcG9wdC0xLjE2L3BvL2l0LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODk4ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2l0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vaXQucG8gYi9wb3B0LTEuMTYvcG8vaXQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0MWQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9pdC5wbwpAQCAtMCwwICsxLDE0MyBAQAorIyBJVEFMSUFOIFRSQU5TTEFUSU9OIE9GIFBPUFQtMS4xNAorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBTYW5kcm8gQm9uYXp6b2xhIDxzYW5kcm8uYm9uYXp6b2xhQGdtYWlsLmNvbT4sIDIwMDcKKyMgVmluY2Vuem8gQ2FtcGFuZWxsYSA8dmluejY1QGdtYWlsLmNvbT4sIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0LTEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMTEtMjggMTU6MzIrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVmluY2Vuem8gQ2FtcGFuZWxsYSA8dmluejY1QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJGaXJzdC1UcmFuc2xhdG9yOiBTYW5kcm8gQm9uYXp6b2xhIDxzYW5kcm8uYm9uYXp6b2xhQGdtYWlsLmNvbT5cbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJlcnJubyBzY29ub3NjaXV0byIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJ0aXBvIGRpIG9wemlvbmUgKCV1KSBub24gaW1wbGVtZW50YXRvIGluIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJhcmdvbWVudG8gbWFuY2FudGUiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm9wemlvbmUgc2Nvbm9zY2l1dGEiCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgInJpY2hpZXN0ZSBvcGVyYXppb25pIGxvZ2ljaGUgcmVjaXByb2NhbWVudGUgZXNjbHVzaXZlIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgbm9uIGRvdnJlYmJlIGVzc2VyZSBOVUxMIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFsaWFzIG5pZGlmaWNhdGkgdHJvcHBvIGluIHByb2ZvbmRpdMOgIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJlcnJvcmUgbmVsIHF1b3RpbmcgZGVsIHBhcmFtZXRybyIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgInZhbG9yZSBudW1lcmljbyBub24gdmFsaWRvIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJudW1lcm8gdHJvcHBvIGdyYW5kZSBvIHRyb3BwbyBwaWNjb2xvIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiYWxsb2NhemlvbmUgZGkgbWVtb3JpYSBmYWxsaXRhIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgImVycm9yZSBzY29ub3NjaXV0byIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiTW9zdHJhIHF1ZXN0byBtZXNzYWdnaW8gZGkgYWl1dG8iCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiTW9zdHJhIHVuIGJyZXZlIG1lc3NhZ2dpbyBkaSB1dGlsaXp6byIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIk1vc3RyYSBsZSBvcHppb25pIHByZWRlZmluaXRlIG5lbCBtZXNzYWdnaW8iCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBkaSB0ZXJtaW5hemlvbmUiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiT3B6aW9uaSBkaSBhaXV0bzoiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiT3B6aW9uaSBpbXBsZW1lbnRhdGUgdHJhbWl0ZSBhbGlhcy9leGVjIGRpIHBvcHQ6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIk5PTkUiCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJWQUwiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJJTlQiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNUUklORyIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICJBUkciCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICJVc286IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbT1BaSU9ORS4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vamEuZ21vIGIvcG9wdC0xLjE2L3BvL2phLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc5MzkxCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2phLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vamEucG8gYi9wb3B0LTEuMTYvcG8vamEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4YTg3YQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9qYS5wbwpAQCAtMCwwICsxLDE0MiBAQAorIyBycG0gamEucG8KKyMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBZdWtpaGlybyBOYWthaSA8eW5ha2FpQHJlZGhhdC5jb20+LCAyMDAzCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDMtLTgtMjUgMTk6MDArMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogWXVraWhpcm8gTmFrYWkgPHluYWthaUByZWRoYXQuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEphcGFuZXNlIDxqYUBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgIuS4jeaYjuOBquOCqOODqeODvOeVquWPtyIKKworIzogcG9wdC5jOjEyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAi44Kq44OX44K344On44Oz44K/44Kk44OXICglZCkg44GvcG9wdOOBq+OBr+Wun+ijheOBleOCjOOBpuOBhOOBvuOBm+OCk1xuIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgIuW8leaVsOOBjOOBguOCiuOBvuOBm+OCkyIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAi5LiN5piO44Gq44Kq44OX44K344On44OzIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICLmjpLku5bnmoTjgarmgqrjgbrjg7zjg6zjg7zjgrfjg6fjg7PjgYzlv4XopoHjgafjgZkiCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICJvcHQtPmFyZ+OBr05VTEzjgafjga/jgYTjgZHjgb7jgZvjgpMiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAi44Ko44Kk44Oq44Ki44K544Gu44ON44K544OI44GM5rex44GZ44GO44G+44GZIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICLjg5Hjg6njg6Hjg7zjgr/jga7jgq/jgqrjg7zjg4jku5jjgZHjgafjgqjjg6njg7wiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICLkuI3mraPjgarmlbDlgKQiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIuaVsOWApOOBjOWkp+OBjeOBmeOBjuOCi+OBi+Wwj+OBleOBmeOBjuOBvuOBmSIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIuODoeODouODqueiuuS/neOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICLkuI3mmI7jgarjgqjjg6njg7wiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIuOBk+OBruODmOODq+ODl+ODoeODg+OCu+ODvOOCuOOCkuihqOekuuOBl+OBvuOBmSIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICLkvb/jgYTmlrnjga7mpoLopoHjgpLooajnpLrjgZfjgb7jgZkiCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICLjgqrjg5fjgrfjg6fjg7Pjga7jg4fjg5Xjgqnjg6vjg4jlgKTjgpLjg6Hjg4Pjgrvjg7zjgrjjgavooajnpLrjgZfjgb7jgZkiCisKKyM6IHBvcHRoZWxwLmM6OTIKKyMsIGZ1enp5Cittc2dpZCAiVGVybWluYXRlIG9wdGlvbnMiCittc2dzdHIgIuODmOODq+ODl+OCquODl+OCt+ODp+ODszoiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAi44OY44Or44OX44Kq44OX44K344On44OzOiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICJwb3B044GuYWxpYXMvZXhlY+OBp+Wun+ijheOBleOCjOOBpuOBhOOCi+OCquODl+OCt+ODp+ODszoiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAi44Gq44GXIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAi5YCkIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKKyMsIGZ1enp5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICLmloflrZfliJciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMT0FUIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAi5L2/44GE5pa5OiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiW+OCquODl+OCt+ODp+ODsy4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8va28uZ21vIGIvcG9wdC0xLjE2L3BvL2tvLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTRmOGNhCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL2tvLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8va28ucG8gYi9wb3B0LTEuMTYvcG8va28ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkMjg5NgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9rby5wbwpAQCAtMCwwICsxLDEzNyBAQAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAxLTA5LTA2IDIwOjA2KzA5MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEpvbmctSG9vbiBSeXUgPHJlZGhhdDR1QG5ldGlhbi5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR05VIFRyYW5zbGF0aW9uIHByb2plY3QgPGtvQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1FVUMtS1JcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4LWJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICK+yyC89iC++LTCIL/At/nE2rXlKGVycm5vKSDA1LTPtNkiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgIr/JvMcgwK/H/CAoJWQpwLogcG9wdL+hvK0gu+e/68fSILz2IL74vcC0z7TZXG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAiwM689rChIMH2waS1x8H2IL7KvtK9wLTPtNkiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIr7LILz2IL74tMIgv8m8x8DUtM+02SIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAivufCyr+hILnoxbjA+yCz7biuIL+su+rAzCDB9sGktce++r3AtM+02SIKKworIzogcG9wdC5jOjE3MTcKK21zZ2lkICJvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwiCittc2dzdHIgIr/JvMctPsDOvPawoSBOVUxMwMwgtce+7ryttMIgvsi1y7TPtNkiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAiurDEqihhbGlhcynAzCC6ucDix8+w1CC8s8Gktce++r3AtM+02SIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiuMWws7qvvPa/oSC/wLf5sKEgwNa9wLTPtNkiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICLA37j4tcggvPbEoSCwqsDUtM+02SIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAivP3A2rChILPKuasgxamwxbOqILPKuasgwPu9wLTPtNkiCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICK43rjwuK4gx9K057+hIL3HxtDH373AtM+02SIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICK+yyC89iC++LTCIL/At/nA1LTPtNkiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIsDMILW1v/K4u8C7ILq4v6nB3bTPtNkiCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAisKO03MfRILvnv+u5/cC7ILq4v6nB3bTPtNkiCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICKx4rq7wPvAziC/ybzHwLsguri/qcHdtM+02SIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICK++MC9KE5PTkUpIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAisKooVkFMKSIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIsGkvPYoSU5UKSIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIsGkvPYoTE9ORykiCisKKyM6IHBvcHRoZWxwLmM6MjA5CisjLCBmdXp6eQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICLBpLz2KExPTkcpIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiua7A2r+tKFNUUklORykiCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIrzSvPYoRkxPQVQpIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAivNK89ihET1VCTEUpIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiwM689ihBUkcpIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiu+e/67n9OiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiW7/JvMcuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2x2LmdtbyBiL3BvcHQtMS4xNi9wby9sdi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlYWM3NQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9sdi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL2x2LnBvIGIvcG9wdC0xLjE2L3BvL2x2LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjM1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vbHYucG8KQEAgLTAsMCArMSwxNDUgQEAKKyMgdHJhbnNsYXRpb24gb2YgcG9wdC0xLjE0LnBvdCB0byBMYXR2aWFuCisjIENvcHlyaWdodCDCqSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgcG9wdCBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBSaWhhcmRzIFByaWVkaXRpcyA8UlByaWVkaXRpc0BpbmJveC5sdj4sIDIwMDkuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0LTEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDQtMTIgMTY6MzQrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUmloYXJkcyBQcmllZGl0aXMgPFJQcmllZGl0aXNAaW5ib3gubHY+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTGF0dmlhbiA8dHJhbnNsYXRpb24tdGVhbS1sdkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDAuM1xuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiAhPSAwID8gMSA6ICIKKyIyKTtcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAibmV6aW7EgW1zIGvEvMWrZGFzIG51bXVycyIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJpZXNwxJNqYXMgdGlwcyAoJXUpIG5hdiBpZXZpZXN0cyBwb3B0XG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAidHLFq2tzdCBhcmd1bWVudHMiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm5lemluxIFtYSBpZXNwxJNqYSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAicGllcHJhc8SrdGFzIHNhdnN0YXJwxJNqaWUgaXpzbMSTZHpvxaFhcyBsb8SjaXNrxIFzIG9wZXLEgWNpamFzIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3BjaWphLT5hcmd1bWVudHMgbmV2YXIgYsWrdCBOVUxMIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFpenN0xIFqdsSBcmRpIGllZ3VsdGkgcMSBcsSBayBkemnEvGkiCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgImvEvHVkYSBwYXJhbWV0cnUgY2l0xJPFoWFuxIEiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICJuZWRlcsSrZ2Egc2thaXTEvGEgdsSTcnTEq2JhIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJza2FpdGxpcyBwxIFyxIFrIGxpZWxzLCB2YWkgcMSBcsSBayBtYXpzIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiYXRtacWGYXMgaWVkYWzEq8WhYW5hIG5laXpkZXbEgXMiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAibmV6aW7EgW1hIGvEvMWrZGEiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIlLEgWTEq3QgxaFvIHBhbMSrZHrEq2JhcyB6acWGdSIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICJBdHTEk2xvdCDEq3N1IGl6bWFudG/FoWFuYXMgemnFhnUiCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJBdHTEk2xvdCBub2tsdXPEk3TEgXMgaWVzcMSTamFzIHppxYbEgSIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJQxIFydHJhdWt0IGllc3DEk2phcyIKKworIzogcG9wdGhlbHAuYzoxOTEKK21zZ2lkICJIZWxwIG9wdGlvbnM6IgorbXNnc3RyICJQYWzEq2R6xKtiYXMgaWVzcMSTamFzOiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICJJZXNwxJNqYXMgaWV2aWVzdGFzIGNhdXIgcG9wdCBhaXpzdMSBanbEgXJkYS9penBpbGTEgW1haXM6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIk5FS0FTIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVsSSUlTEqkJBIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiTE9OR0xPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJWSVJLTkUiCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMT0FUIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHVU1FTlRTIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiTGlldG/FoWFuYToiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIltJRVNQxJJKQVMuLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vbmIuZ21vIGIvcG9wdC0xLjE2L3BvL25iLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRlYTM3Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL25iLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vbmIucG8gYi9wb3B0LTEuMTYvcG8vbmIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjOTMzMQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9uYi5wbwpAQCAtMCwwICsxLDEzNyBAQAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAxLTA2LTI3IDExOjA1KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEtqYXJ0YW4gTWFyYWFzIDxrbWFyYWFzQG9ubGluZS5ubz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOb3J3ZWdpYW4gPG5vQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAidWtqZW50IGVycm5vIgorCisjOiBwb3B0LmM6MTI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJmbGFnZ3R5cGUgKCVkKSBpa2tlIGltcGxlbWVudGVydCBpIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJtYW5nbGVuZGUgYXJndW1lbnQiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgInVramVudCBmbGFnZyIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAiZ2plbnNpZGlnIGVrc2x1ZGVyZW5kZSBsb2dpc2tlIG9wZXJhc2pvbmVyIGZvcmVzcHVydCIKKworIzogcG9wdC5jOjE3MTcKK21zZ2lkICJvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwiCittc2dzdHIgIm9wdC0+YXJnIG3lIGlra2UgduZyZSBOVUxMIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFsaWFzZXIgbWVkIGZvciBkeXBlIGz4a2tlciIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiZmVpbCBpIHBhcmFtZXRlcnNpdGVyaW5nIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAidWd5bGRpZyBudW1lcmlzayB2ZXJkaSIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAidGFsbGV0IGVyIGZvciBzdG9ydCBlbGxlciBsaXRlIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAibWlubmVhbGxva2VyaW5nIGZlaWxldCIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICJ1a2plbnQgZmVpbCIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiVmlzIGRlbm5lIGhqZWxwbWVsZGluZ2VuIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIlZpcyBrb3J0IGJydWtzbWVsZGluZyIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIlZpcyBmb3J2YWxndGUgZmxhZ2cgaSBtZWxkaW5nIgorCisjOiBwb3B0aGVscC5jOjkyCittc2dpZCAiVGVybWluYXRlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTEKK21zZ2lkICJIZWxwIG9wdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIklOR0VOIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVkVSREkiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJIRUxUQUxMIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKKyMsIGZ1enp5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJTVFJFTkciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMWVRUQUxMIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiQnJ1azoiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIltGTEFHRy4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vbmwuZ21vIGIvcG9wdC0xLjE2L3BvL25sLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjU0NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL25sLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vbmwucG8gYi9wb3B0LTEuMTYvcG8vbmwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliYzE3NgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9ubC5wbwpAQCAtMCwwICsxLDE0NCBAQAorIyBEdXRjaCBtZXNzYWdlcyBmb3IgcG9wdC4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgVGltIFZhbiBIb2xkZXIgPHRpbS52YW4uaG9sZGVyQHRlbGVuZXQuYmU+LCAyMDA3LCAyMDA4LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjE0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAyLTIwIDE5OjI2KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRpbSBWYW4gSG9sZGVyIDx0aW0udmFuLmhvbGRlckB0ZWxlbmV0LmJlPlxuIgorIkxhbmd1YWdlLVRlYW06IER1dGNoIDx2ZXJ0YWxpbmdAdnJpanNjaHJpZnQub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJvbmJla2VuZCBmb3V0bnVtbWVyIChlcnJubykiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAiZGl0IG9wdGlldHlwZSAoJXUpIGlzIG5pZXQgZ2XDr21wbGVtZW50ZWVyZCBpbiBwb3B0XG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAib250YnJla2VuZCBhcmd1bWVudCIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAib25iZWtlbmRlIG9wdGllIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICJlbGthYXIgdWl0c2x1aXRlbmRlIGxvZ2lzY2hlIG9wZXJhdG9yZW4gd2VyZGVuIGdldnJhYWdkIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgem91IG5pZXQgTlVMTCBtb2dlbiB6aWpuIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFsaWFzc2VuIHppam4gdGUgZGllcCBnZW5lc3QiCisKKyMgb2YgdG9jaCBiZXRlciAicXVvdGluZyIgYmVob3VkZW4/CisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJmb3V0IGluIGRlIGFhbmhhbGluZyB2YW4gcGFyYW1ldGVycyIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgIm9uZ2VsZGlnZSBudW1lcmlla2Ugd2FhcmRlIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJnZXRhbCBpcyB0ZSBrbGVpbiBvZiB0ZSBncm9vdCIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgInJlc2VydmVyZW4gdmFuIGdlaGV1Z2VuIGlzIG1pc2x1a3QiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAib25iZWtlbmRlIGZvdXQiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIkRlemUgaHVscHRla3N0IHRvbmVuIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIkVlbiBrb3J0ZSBnZWJydWlrc3NhbWVudmF0dGluZyB0b25lbiIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIkRlIHN0YW5kYWFyZHdhYXJkZW4gdmFuIG9wdGllcyB0b25lbiBpbiBkZSB0ZWtzdCIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJPcHRpZXMgYmXDq2luZGlnZW4iCisKKyMgb2YgIkhlbHAtb3B0aWVzOiI/CisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIkh1bHAtb3B0aWVzOiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICJPcHRpZXMgZ2XDr21wbGVtZW50ZWVyZCBkLm0udi4gcG9wdCBhbGlhcy9leGVjOiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICJHRUVOIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiV0FBUkRFIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiTE9OR0xPTkciCisKKyMgVEVLRU5SRUVLUyBsaWprdCBtZSBuaWV0IGdlcGFzdDsgZHVzIG9md2VsIFNUUklORyBiZWhvdWRlbiwgb2Z3ZWwgVEVLU1QKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJURUtTVCIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyMgb2YgaGllciBBUkdVTUVOVCB2YW4gbWFrZW4/CisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiR2VicnVpazoiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIltPUFRJRS4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vcGwuZ21vIGIvcG9wdC0xLjE2L3BvL3BsLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTZmOGNmCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3BsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vcGwucG8gYi9wb3B0LTEuMTYvcG8vcGwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU5YjJlMQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9wbC5wbwpAQCAtMCwwICsxLDE0MCBAQAorIyBQb2xpc2ggdHJhbnNsYXRpb24gZm9yIHBvcHQuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBwb3B0IHBhY2thZ2UuCisjIEpha3ViIEJvZ3VzeiA8cWJvb3NoQHBsZC1saW51eC5vcmc+LCAyMDAyLTIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDItMTggMDA6MzArMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLWxpbnV4Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb2xpc2ggPHRyYW5zbGF0aW9uLXRlYW0tcGxAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTJcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgIm5pZXpuYW5lIGVycm5vIgorCisjOiBwb3B0LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgInR5cCBvcGNqaSAoJXUpIG5pZSB6YWltcGxlbWVudG93YW55IHcgcG9wdFxuIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgImJyYWsgcGFyYW1ldHJ1IgorCisjOiBwb3B0LmM6MTcxMworbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJuaWV6bmFuYSBvcGNqYSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAiv7FkYW5pZSB3eWtsdWN6YWqxY3ljaCBzaeogb3BlcmFjamkiCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICJvcHQtPmFyZyBuaWUgbW+/ZSBieeYgTlVMTCIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJ6Ynl0IGR1v2UgemFns+piaWVuaWUgYWxpYXPzdyIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiYrOxZCB3IGN5dG93YW5pdSBwYXJhbWV0cnUiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICJis+pkbmEgd2FydG+25iBsaWN6Ym93YSIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAibGljemJhIHpieXQgZHW/YSBsdWIgemJ5dCBtYbNhIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiYrOxZCBhbG9rYWNqaSBwYW1p6mNpIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgIm5pZXpuYW55IGKzsWQiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIlBva2G/IHTqIHBvbW9jIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIld5tndpZXRsIHNrcvNjb255IHNwb3PzYiB1v3ljaWEiCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJXebZ3aWV0bCBkb215tmxuZSBvcGNqZSB3IG9waXNpZSIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJPcGNqZSB6YWtv8WN6ZW5pYSIKKworIzogcG9wdGhlbHAuYzoxOTEKK21zZ2lkICJIZWxwIG9wdGlvbnM6IgorbXNnc3RyICJPcGNqZSBwb21vY3k6IgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIk9wY2plIHphaW1wbGVtZW50b3dhbmUgcG9wcnpleiBwb3B0IGFsaWFzL2V4ZWM6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIkJSQUsiCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJXQVJUIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiTE9OR0xPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICKjQdFDVUNIIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJGTE9BVCIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIkRPVUJMRSIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIlBBUkFNIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiU2uzYWRuaWE6IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbT1BDSkEuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3BvcHQucG90IGIvcG9wdC0xLjE2L3BvL3BvcHQucG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmU1ODUKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vcG9wdC5wb3QKQEAgLTAsMCArMSwxNDEgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgRklSU1QgQVVUSE9SIDxFTUFJTEBBRERSRVNTPiwgWUVBUi4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IFlFQVItTU8tREEgSE86TUkrWk9ORVxuIgorIkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPlxuIgorIkxhbmd1YWdlLVRlYW06IExBTkdVQUdFIDxMTEBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNFVFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjc1IHBvcHRoZWxwLmM6ODYKK21zZ2lkICJTaG93IHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjkwCittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjkyCittc2dpZCAiVGVybWluYXRlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTEKK21zZ2lkICJIZWxwIG9wdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9wdC5nbW8gYi9wb3B0LTEuMTYvcG8vcHQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjM2YwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vcHQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9wdC5wbyBiL3BvcHQtMS4xNi9wby9wdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjU2YTcxCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3B0LnBvCkBAIC0wLDAgKzEsMTM3IEBACittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDItMDItMTMgMTg6MzIrMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUGVkcm8gTW9yYWlzIDxtb3JhaXNAa2RlLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBwdCA8bW9yYWlzQGtkZS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAiZXJybm8gZGVzY29uaGVjaWRvIgorCisjOiBwb3B0LmM6MTI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJ0aXBvIGRlIG9w5+NvICglZCkgbuNvIGltcGxlbWVudGFkbyBubyBwb3B0XG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAiZmFsdGEgdW0gYXJndW1lbnRvIgorCisjOiBwb3B0LmM6MTcxMworbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJvcOfjbyBkZXNjb25oZWNpZGEiCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgImZvcmFtIHBlZGlkYXMgb3BlcmHn9WVzIGzzZ2ljYXMgbXV0dWFtZW50ZSBleGNsdXNpdmFzIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgbuNvIGRldmUgc2VyIE5VTEwiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAiJ2FsaWFzZXMnIGRlbWFzaWFkbyBhbmluaGFkb3MiCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgImVycm9zIG5vICdxdW90aW5nJyBkZSBwYXLibWV0cm9zIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAidmFsb3IgbvptZXJpY28gaW524WxpZG8iCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIm76bWVybyBkZW1hc2lhZG8gZ3JhbmRvIG91IHBlcXVlbm8iCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJhbG9jYefjbyBkZSBtZW3zcmlhIGZhbGhvdSIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICJlcnJvIGRlc2NvbmhlY2lkbyIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiTW9zdHJhciBlc3RhIG1lbnNhZ2VtIGRlIGFqdWRhIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIk1vc3RyYXIgdW1hIG1lbnNhZ2VtIGRlIHV0aWxpemHn428gc3VjaW50YSIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIk1vc3RyYXIgdmFsb3IgcG9yIG9taXNz428gZGFzIG9w5/VlcyBuYSBtZW5zYWdlbSIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICJOT05FIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVkFMIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKKyMsIGZ1enp5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJTVFJJTkciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMT0FUIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiVXRpbGl6YefjbzoiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIltPUMfDTy4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vcXVvdC5zZWQgYi9wb3B0LTEuMTYvcG8vcXVvdC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyMmM0NgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9xdW90LnNlZApAQCAtMCwwICsxLDYgQEAKK3MvIlwoW14iXSpcKSIv4oCcXDHigJ0vZworcy9gXChbXmAnXSpcKScv4oCYXDHigJkvZworcy8gJ1woW15gJ10qXCknIC8g4oCYXDHigJkgL2cKK3MvICdcKFteYCddKlwpJyQvIOKAmFwx4oCZL2cKK3MvXidcKFteYCddKlwpJyAv4oCYXDHigJkgL2cKK3Mv4oCc4oCdLyIiL2cKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9yZW1vdmUtcG90Y2RhdGUuc2luIGIvcG9wdC0xLjE2L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzNmM0OQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9yZW1vdmUtcG90Y2RhdGUuc2luCkBAIC0wLDAgKzEsMTkgQEAKKyMgU2VkIHNjcmlwdCB0aGF0IHJlbW92ZSB0aGUgUE9ULUNyZWF0aW9uLURhdGUgbGluZSBpbiB0aGUgaGVhZGVyIGVudHJ5CisjIGZyb20gYSBQT1QgZmlsZS4KKyMKKyMgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nIG9jY3VycmVuY2VzIG9mIHRoZQorIyBwYXR0ZXJuIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisvXiJQT1QtQ3JlYXRpb24tRGF0ZTogLioiJC97Cit4CisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCitzL1AvUC8KK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlbW92ZSB0aGUgbGluZS4KK2cKK2QKK2JiCis6YQorIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KK3gKKzpiCit9CmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vcm8uZ21vIGIvcG9wdC0xLjE2L3BvL3JvLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzU3YzgwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3JvLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vcm8ucG8gYi9wb3B0LTEuMTYvcG8vcm8ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwYTcyZQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9yby5wbwpAQCAtMCwwICsxLDEzOCBAQAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAwLTA2LTE0IDIzOjIzK0VTVFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQ3Jpc3RpYW4gR2FmdG9uIDxnYWZ0b25AcmVkaGF0LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSb21hbmlhbiA8cm9AbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTJcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgImVyb2FyZSBuZWN1bm9zY3V0YSIKKworIzogcG9wdC5jOjEyOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAib3B0aXVuZWEgZGUgdGlwdWwgKCVkKSBudSBlc3RlIGltcGxlbWVudGF0YSBpbiBwb3B0XG4iCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAiYXJndW1lbnQgbGlwc2EiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm9wdGl1bmUgbmVjdW5vc2N1dGEiCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTcKK21zZ2lkICJvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJyZWN1cnNpdml0YXRlIGluZmluaXRhIGxhIG9wdGl1bmlsZSBzaW5vbmltZSIKKworIzogcG9wdC5jOjE3MjEKKyMsIGZ1enp5Cittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgImVyb2FyZSBsYSBpbnNlcnRpZSBwYXJhbWV0cnUiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICJ2YWxvYXJlIG51bWFyaWNhIGludmFsaWRhIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICJudW1hciBwcmVhIG1hcmUgc2F1IHByZWEgbWljIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgImVyb2FyZSBuZWN1aW5vc2N1dGEiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIkFmaXNhcmUgbWVzYWogZGUgaGVscCIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICJBZmlzYXJlIG1lc2FqIHNpbnRheGEgc3VtYXIiCisKKyM6IHBvcHRoZWxwLmM6OTAKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAiQWZpc2FyZSBtZXNhaiBzaW50YXhhIHN1bWFyIgorCisjOiBwb3B0aGVscC5jOjkyCittc2dpZCAiVGVybWluYXRlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTEKK21zZ2lkICJIZWxwIG9wdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICJTaW50YXhhOiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiW09QVElVTkUuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3J1LmdtbyBiL3BvcHQtMS4xNi9wby9ydS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmOTIyYgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9ydS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3J1LnBvIGIvcG9wdC0xLjE2L3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjVlNmQKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vcnUucG8KQEAgLTAsMCArMSwxNDQgQEAKKyMgdHJhbnNsYXRpb24gb2YgcG9wdC0xLjE0LnJ1LnBvIHRvIFJ1c3NpYW4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIHBvcHQgcGFja2FnZS4KKyMgRXVnZW5lIEthbnRlciA8ZXVnZW5lQGJsYWNrY2F0bGludXguY29tPiwgMjAwMS4KKyMgWXVyaSBLb3psb3YgPHl1cmF5QGtvbXlha2luby5ydT4sIDIwMDkuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDItMDEgMTM6MzArMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogWXVyaSBLb3psb3YgPHl1cmF5QGtvbXlha2luby5ydT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIDxnbnVAbXgucnU+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKyJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiUiCisiMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdGL0LkgZXJybm8iCisKKyM6IHBvcHQuYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAi0L7QsdGA0LDQsdC+0YLQutCwINC/0LDRgNCw0LzQtdGC0YDQsCAoJXUpINCyIHBvcHQg0L3QtSDQv9GA0LXQtNGD0YHQvNC+0YLRgNC10L3QsFxuIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgItC/0YDQvtC/0YPRidC10L0g0LDRgNCz0YPQvNC10L3RgiIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDQv9Cw0YDQsNC80LXRgtGAIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICLQt9Cw0L/RgNC+0YjQtdC90Ysg0LLQt9Cw0LjQvNC90L4g0LjRgdC60LvRjtGH0LDRjtGJ0LjQtSDQu9C+0LPQuNGH0LXRgdC60LjQtSDQvtC/0LXRgNCw0YbQuNC4IgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMIE5VTEwiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAi0L/RgNC10LLRi9GI0LXQvSDRg9GA0L7QstC10L3RjCDQtNC+0L/Rg9GB0YLQuNC80L7QuSDRgNC10LrRg9GA0YHQuNC4INC/0L7QtNGB0YLQsNC90L7QstC+0LoiCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgItC+0YjQuNCx0LrQsCDQv9C+0LzQtdGJ0LXQvdC40Y8g0L/QsNGA0LDQvNC10YLRgNC+0LIg0LIg0LrQsNCy0YvRh9C60LgiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICLRh9C40YHQu9C+0LLQvtC1INC30L3QsNGH0LXQvdC40LUg0LfQsCDQv9GA0LXQtNC10LvQsNC80Lgg0L/RgNC10LTRg9GB0LzQvtGC0YDQtdC90L3QvtCz0L4iCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQtNC10LvQuNGC0Ywg0L/QsNC80Y/RgtGMIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0L7RiNC40LHQutCwIgorCisjOiBwb3B0aGVscC5jOjc1IHBvcHRoZWxwLmM6ODYKK21zZ2lkICJTaG93IHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINGN0YLRgyDRgdC/0YDQsNCy0LrRgyIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC60YDQsNGC0LrRg9GOINC40L3RgdGC0YDRg9C60YbQuNGOINC/0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y4iCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC/0LDRgNCw0LzQtdGC0YDRiyDQv9C+INGD0LzQvtC70YfQsNC90LjRjiIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICLQl9Cw0LLQtdGA0YjQsNC10YIg0L/QsNGA0LDQvNC10YLRgNGLIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDRiyDQstGL0LLQvtC00LAg0YHQv9GA0LDQstC60Lg6IgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDRiywg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0LUg0YfQtdGA0LXQtyBwb3B0IGFsaWFzL2V4ZWM6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIk5PTkUiCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJWQUwiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJJTlQiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNUUklORyIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxPQVQiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICJET1VCTEUiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICJBUkciCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtToiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIlvQn9CQ0KDQkNCc0JXQotCgLi4uXSIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9zay5nbW8gYi9wb3B0LTEuMTYvcG8vc2suZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YzhlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vc2suZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9zay5wbyBiL3BvcHQtMS4xNi9wby9zay5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTAzMGNlCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3NrLnBvCkBAIC0wLDAgKzEsMTQxIEBACisjIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCisjIENvcHlyaWdodCAoQykgWUVBUiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgRklSU1QgQVVUSE9SIDxFTUFJTEBBRERSRVNTPiwgWUVBUi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMTk5OS0wOC0wNCAyMTo0MCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTdGFuaXNsYXYgTWVkdW5hIDxzdGFub0BldW5ldC5zaz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTbG92YWsgPHNrLWkxOG5AcmFrLmlzdGVybmV0LnNrPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTJcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgIiIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzExCittc2dpZCAibWlzc2luZyBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxMworbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTcKK21zZ2lkICJvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiVnlw7XNhuyB0+nRvIHNwcuF2dSIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICJab2JyYXppuyBzdHJ16G79IG7hdm9kIG5hIHBvdb5pdGllIgorCisjOiBwb3B0aGVscC5jOjkwCisjLCBmdXp6eQorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIlpvYnJhemm7IHN0cnXobv0gbuF2b2QgbmEgcG91vml0aWUiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3NsLmdtbyBiL3BvcHQtMS4xNi9wby9zbC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzMjBiMgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9zbC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3NsLnBvIGIvcG9wdC0xLjE2L3BvL3NsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDk5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vc2wucG8KQEAgLTAsMCArMSwxMzcgQEAKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMC0wOS0wNSAxMjozMCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBSb21hbiBNYXVyZXIgPHJvbWFuLm1hdXJlckBoZXJtZXMuc2k+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU2xvdmVuaWFuIDxzbEBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMlxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyNQorbXNnaWQgIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzI5Cittc2dpZCAiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0IgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzMzCittc2dpZCAidW5rbm93biBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjc1IHBvcHRoZWxwLmM6ODYKK21zZ2lkICJTaG93IHRoaXMgaGVscCBtZXNzYWdlIgorbXNnc3RyICJQcmlrYb5pIHRvIHNwb3Jv6GlsbyBzIHBvbW/oam8iCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiUHJpa2G+aSBrcmF0a28gc3Bvcm/oaWxvIG8gdXBvcmFiaSIKKworIzogcG9wdGhlbHAuYzo5MAorIywgZnV6enkKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJQcmlrYb5pIGtyYXRrbyBzcG9yb+hpbG8gbyB1cG9yYWJpIgorCisjOiBwb3B0aGVscC5jOjkyCittc2dpZCAiVGVybWluYXRlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTEKK21zZ2lkICJIZWxwIG9wdGlvbnM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkyCittc2dpZCAiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjEyCittc2dpZCAiRE9VQkxFIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjE1Cittc2dpZCAiQVJHIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby9zdGFtcC1wbyBiL3BvcHQtMS4xNi9wby9zdGFtcC1wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzg4ZjcwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3N0YW1wLXBvCkBAIC0wLDAgKzEgQEAKK3RpbWVzdGFtcApkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3N2LmdtbyBiL3BvcHQtMS4xNi9wby9zdi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyZWMzNQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby9zdi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3N2LnBvIGIvcG9wdC0xLjE2L3BvL3N2LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OTJjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vc3YucG8KQEAgLTAsMCArMSwxNDMgQEAKKyMgU3dlZGlzaCBtZXNzYWdlcyBmb3IgcG9wdC4KKyMgQ29weXJpZ2h0IKkgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIHBvcHQgcGFja2FnZS4KKyMgR/ZyYW4gVWRkZWJvcmcgPGdvZXJhbkB1ZGRlYm9yZy5zZT4sIDIwMDguCisjCisjICRSZXZpc2lvbjogMS40ICQKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMi0yMyAyMDoxNSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBH9nJhbiBVZGRlYm9yZyA8Z29lcmFuQHVkZGVib3JnLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJva+RudCBmZWxudW1tZXIiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAiZmxhZ2d0eXBlbiAoJXUpIORyIGludGUgaW1wbGVtZW50ZXJhZCBpIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJhcmd1bWVudCBzYWtuYXMiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIm9r5G5kIGZsYWdnYSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAi9m1zZXNpZGlndCB1dGVzbHV0YW5kZSBsb2dpc2thIG9wZXJhdGlvbmVyIGJlZ+RyZGVzIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcgZuVyIGludGUgdmFyYSBOVUxMIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImFsaWFzIORyIG7kc3RhZGUgZvZyIGRqdXB0IgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJmZWwgaSBwYXJhbWV0ZXJjaXRlcmluZyIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgIm9naWx0aWd0IG51bWVyaXNrdCB25HJkZSIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAidGFsZXQgZvZyIHN0b3J0IGVsbGVyIGb2ciBsaXRldCIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIm1pbm5lc2FsbG9rZXJpbmcgbWlzc2x5Y2thZGVzIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgIm9r5G50IGZlbCIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAiVmlzYSBkZW5uYSBoauRscHRleHQiCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiVmlzYSBlbiBrb3J0ZmF0dGFkIGFuduRuZG5pbmdzdGV4dCIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIlZpc2Egc3RhbmRhcmRhbHRlcm5hdGl2IGb2ciBmbGFnZ29yIGkgbWVkZGVsYW5kZSIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICJBdnNsdXRhIGZsYWdnb3IiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiSGrkbHBmbGFnZ29yOiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICJGbGFnZ29yIGltcGxlbWVudGVyYWRlIHZpYSBwb3B0LWFsaWFzL2V4ZWM6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIklOR0VUIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiVsRSREUiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICJIRUxUQUwiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICJMxU5HIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMxU5HTMVORyIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIlNUUsRORyIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiRkxZVFRBTCIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIkRVQkJFTCIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIkFSRyIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIkFuduRuZG5pbmc6IgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICJbRkxBR0dBLi4uXSIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby90aC5nbW8gYi9wb3B0LTEuMTYvcG8vdGguZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMmI2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vdGguZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wby90aC5wbyBiL3BvcHQtMS4xNi9wby90aC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjRjM2FmCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3RoLnBvCkBAIC0wLDAgKzEsMTQyIEBACisjIFRoYWkgdHJhbnNsYXRpb24gZm9yIHBvcHQuCisjIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgU2Vrc2FuIFBvbHRyZWUgPHNla3Nhbi5wb2x0cmVlQGdtYWlsLmNvbT4sIDIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDItMTkgMTU6NTMrMDcwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2Vrc2FuIFBvbHRyZWUgPHNla3Nhbi5wb2x0cmVlQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBUaGFpIDx0cmFuc2xhdGlvbi10ZWFtLXRoQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogVGhhaVxuIgorIlgtUG9lZGl0LUNvdW50cnk6IFRIQUlMQU5EXG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgIuC5gOC4geC4tOC4lCBlcnJubyDguJfguLXguYjguYTguKHguYjguKPguLnguYnguIjguLHguIEiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAi4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiK4LiZ4Li04LiUICgldSkg4LmE4Lih4LmI4LiW4Li54LiB4Lit4Li04Lih4Lie4Lil4Li14LmA4Lih4LiZ4LiV4LmM4LmD4LiZIHBvcHRcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICLguYTguKHguYjguJ7guJrguK3guLLguKPguYzguIHguLTguKfguYDguKHguJnguJXguYwiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIuC5hOC4oeC5iOC4o+C4ueC5ieC4iOC4seC4geC4leC4seC4p+C5gOC4peC4t+C4reC4gSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAi4LmA4LiB4Li04LiU4LiB4Liy4Lij4Lij4LmJ4Lit4LiH4LiC4Lit4Lij4LmI4Lin4Lih4LiB4Lix4LiZ4LiC4Lit4LiH4LiB4Liy4Lij4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiU4LmJ4Liy4LiZ4LiV4Lij4Lij4LiB4Liw4Lit4Lii4LmI4Liy4LiH4LmA4LiU4Li14Lii4Lin4LiB4Lix4LiZIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcg4LmE4Lih4LmI4LiE4Lin4Lij4LiI4Liw4LmA4Lib4LmH4LiZIE5VTEwiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAi4LiZ4Liy4Lih4LmB4Lid4LiH4LiL4LmJ4Lit4LiZ4LiB4Lix4LiZ4Lih4Liy4LiB4LmA4LiB4Li04LiZ4LmE4LibIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICLguYDguIHguLTguJTguILguYnguK3guJzguLTguJTguJ7guKXguLLguJTguYPguJnguIHguLLguKPguK3guYnguLLguIfguK3guLTguIfguJ7guLLguKPguLLguKHguLTguYDguJXguK3guKPguYwiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICLguITguYjguLLguJXguLHguKfguYDguKXguILguJzguLTguJTguJ7guKXguLLguJQiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIuC4leC4seC4p+C5gOC4peC4guC4oeC4teC4hOC5iOC4suC4oeC4suC4geC4q+C4o+C4t+C4reC4meC5ieC4reC4ouC5gOC4geC4tOC4meC5hOC4myIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIuC4geC4suC4o+C4iOC4seC4lOC4quC4o+C4o+C4q+C4meC5iOC4p+C4ouC4hOC4p+C4suC4oeC4iOC4s+C4nOC4tOC4lOC4nuC4peC4suC4lCIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICLguITguKfguLLguKHguJzguLTguJTguJ7guKXguLLguJTguJfguLXguYjguYTguKHguYjguKPguLnguYnguIjguLHguIEiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIuC5geC4quC4lOC4h+C4guC5ieC4reC4hOC4p+C4suC4oeC4iuC5iOC4p+C4ouC5gOC4q+C4peC4t+C4reC4meC4teC5iSIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICLguYHguKrguJTguIfguILguYnguK3guITguKfguLLguKHguKrguKPguLjguJvguKLguYjguK3guIHguLLguKPguYPguIrguYnguIfguLLguJkiCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICLguYHguKrguJTguIfguJXguLHguKfguYDguKXguLfguK3guIHguKHguLLguJXguKPguJDguLLguJnguYPguJnguILguYnguK3guITguKfguLLguKEiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAi4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiB4Liy4Lij4Liq4Li04LmJ4LiZ4Liq4Li44LiUOiIKKworIzogcG9wdGhlbHAuYzoxOTEKK21zZ2lkICJIZWxwIG9wdGlvbnM6IgorbXNnc3RyICLguJXguLHguKfguYDguKXguLfguK3guIHguITguKfguLLguKHguIrguYjguKfguKLguYDguKvguKXguLfguK06IgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIuC4leC4seC4p+C5gOC4peC4t+C4reC4geC4l+C4teC5iOC4luC4ueC4geC4reC4tOC4oeC4nuC4peC4teC5gOC4oeC4meC4leC5jOC4lOC5ieC4p+C4oiBwb3B0IGFsaWFzL2V4ZWM6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIuC5hOC4oeC5iOC4oeC4tSIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIlZBTCIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIklOVCIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjA5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkdMT05HIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiU1RSSU5HIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJGTE9BVCIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIkRPVUJMRSIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIkFSRyIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIuC4p+C4tOC4mOC4teC5g+C4iuC5iToiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIlvguJXguLHguKfguYDguKXguLfguK3guIEuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3RyLmdtbyBiL3BvcHQtMS4xNi9wby90ci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjNzliYQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby90ci5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3RyLnBvIGIvcG9wdC0xLjE2L3BvL3RyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTBiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vdHIucG8KQEAgLTAsMCArMSwxNDEgQEAKKyMgVHJhbnNsYXRpb24gb2YgcG9wdCB0byBUdXJraXNoLgorIyBOaWxndW4gQmVsbWEgQnVndW5lciA8bmlsZ3VuQHRlY2hub2xvZ2lzdC5jb20+LCAyMDAwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDAwLTAyLTExIDEzOjAxKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE5pbGd1biBCZWxtYSBCdWd1bmVyIDxuaWxndW5AdGVjaG5vbG9naXN0LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBUdXJraXNoIDx0ckBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktOVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAiYmlsaW5tZXllbiBoYXRhIG5vIgorCisjOiBwb3B0LmM6MTI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICJzZedlbmVrIHT8cvwgKCVkKSBwb3B0IGnnaW4gZ2XnZXJzaXpcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICJhcmf8bWFuIGVrc2lrIgorCisjOiBwb3B0LmM6MTcxMworbXNnaWQgInVua25vd24gb3B0aW9uIgorbXNnc3RyICJiaWxpbm1leWVuIHNl52VuZWsiCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgImJpcmJpcmluaSBk/f5sYXlhbiBtYW50/WtzYWwgaf5sZW1sZXIgaXN0ZW5kaSIKKworIzogcG9wdC5jOjE3MTcKK21zZ2lkICJvcHQtPmFyZyBzaG91bGQgbm90IGJlIE5VTEwiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICJhZGxhcmRhIOdvayBmYXpsYSBp52nnZWxpa2xlciIKKworIzogcG9wdC5jOjE3MjEKK21zZ2lkICJlcnJvciBpbiBwYXJhbWV0ZXIgcXVvdGluZyIKK21zZ3N0ciAicGFyYW1ldHJlbGVyZGUgdP1ybmFrIGn+YXJldGxlbWUgaGF0YWz9ICIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgInNhef1zYWwgZGXwZXIgZ2XnZXJzaXoiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgInNhef0geWEg529rIGL8efxrIHlhIGRhIOdvayBr/Of8ayIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICJiaWxpbm1leWVuIGhhdGEiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIkJ1IHlhcmT9bSBpbGV0aXNpbmkgZ/ZzdGVyaXIiCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAiS/1zYSBiaXIga3VsbGFu/W0gaWxldGlzaSBn9nN0ZXIiCisKKyM6IHBvcHRoZWxwLmM6OTAKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAiS/1zYSBiaXIga3VsbGFu/W0gaWxldGlzaSBn9nN0ZXIiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiWU9LIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiREXQIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiSU5UIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiTE9ORyIKKworIzogcG9wdGhlbHAuYzoyMDkKKyMsIGZ1enp5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJTVFJJTkciCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIkZMT0FUIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiRE9VQkxFIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiQVJHIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiS3VsbGFu/W39OiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiW1NFx0VORUsuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3VrLmdtbyBiL3BvcHQtMS4xNi9wby91ay5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0M2YyZgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby91ay5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3VrLnBvIGIvcG9wdC0xLjE2L3BvL3VrLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTBmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vdWsucG8KQEAgLTAsMCArMSwxNDEgQEAKKyMgVHJhbnNsYXRpb24gaW50byB0aGUgdWtyYWluaWFuIGxhbmd1YWdlLgorIyBDb3B5cmlnaHQgKEMpIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFl1cmkgU3lyb3RhIDxyYXN0YUByZW5vbWUucm92bm8udWE+LCAxOTk5LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAxOTk5LTA5LTMwIDE2OjU0KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFl1cmkgU3lyb3RhIDxyYXN0YUByZW5vbWUucm92bm8udWE+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVWtyYWluaWFuIDx1a0BsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9a29pOC11XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIvDPy8HawdTJIMPAIMTP16bEy9UiCisKKyM6IHBvcHRoZWxwLmM6NzYgcG9wdGhlbHAuYzo4NworbXNnaWQgIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIKK21zZ3N0ciAi8M/LwdrB1Mkgy8/Sz9TL1SDEz9emxMvVINDSzyDXycvP0snT1MHOztEiCisKKyM6IHBvcHRoZWxwLmM6OTAKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBvcHRpb24gZGVmYXVsdHMgaW4gbWVzc2FnZSIKK21zZ3N0ciAi8M/LwdrB1Mkgy8/Sz9TL1SDEz9emxMvVINDSzyDXycvP0snT1MHOztEiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwMgorbXNnaWQgIlZBTCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjExCittc2dpZCAiRkxPQVQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzo2NzIKK21zZ2lkICJbT1BUSU9OLi4uXSIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3ZpLmdtbyBiL3BvcHQtMS4xNi9wby92aS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0MGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby92aS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3ZpLnBvIGIvcG9wdC0xLjE2L3BvL3ZpLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzJlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vdmkucG8KQEAgLTAsMCArMSwxNDMgQEAKKyMgVmlldG5hbWVzZSB0cmFuc2xhdGlvbiBmb3IgUE9QVC4KKyMgQ29weXJpZ2h0IMKpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBwb3B0LTEuMTQgcGFja2FnZQorIyBDbHl0aWUgU2lkZGFsbCA8Y2x5dGllQHJpdmVybGFuZC5uZXQuYXU+LCAyMDA3LTIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBwb3B0IDEuMTRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogPHBvcHQtZGV2ZWxAcnBtNS5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDItMTcgMTM6MzUtMDUwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDItMTggMTY6MjArMTAzMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQ2x5dGllIFNpZGRhbGwgPGNseXRpZUByaXZlcmxhbmQubmV0LmF1PlxuIgorIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHZpLVZOQGdvb2dsZWdyb3Vwcy5jb20+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLUdlbmVyYXRvcjogTG9jRmFjdG9yeUVkaXRvciAxLjdiM1xuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICJz4buRIGhp4buHdSBs4buXaSBraMO0bmcgcsO1IgorCisjOiBwb3B0LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iCittc2dzdHIgImtp4buDdSB0w7l5IGNo4buNbiAoJXUpIGNoxrBhIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gdHJvbmcgcG9wdFxuIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgInRoaeG6v3UgxJHhu5FpIHPhu5EiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgInTDuXkgY2jhu41uIGtow7RuZyByw7UiCisKKyM6IHBvcHQuYzoxNzE1Cittc2dpZCAibXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQiCittc2dzdHIgImPDoWMgdGhhbyB0w6FjIGjhu6NwIGzDvSBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1IMSRxrDhu6NjIHnDqnUgY+G6p3UiCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICLCqyB0w7l5IGNo4buNbi0+xJHhu5FpIHPhu5Egwrsga2jDtG5nIHRo4buDIHbDtCBnacOhIHRy4buLIgorCisjOiBwb3B0LmM6MTcxOQorbXNnaWQgImFsaWFzZXMgbmVzdGVkIHRvbyBkZWVwbHkiCittc2dzdHIgImPDoWMgYsOtIGRhbmggbOG7k25nIG5oYXUgcXXDoSBzw6J1IgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICJn4bq3cCBs4buXaSB0cm9uZyBs4budaSB0csOtY2ggZOG6q24gdGhhbSBz4buRIgorCisjOiBwb3B0LmM6MTcyMworbXNnaWQgImludmFsaWQgbnVtZXJpYyB2YWx1ZSIKK21zZ3N0ciAiZ2nDoSB0cuG7iyB0aHXhu5ljIHPhu5Ega2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgImNvbiBz4buRIHF1w6EgbOG7m24gaGF5IHF1w6Egbmjhu48iCisKKyM6IHBvcHQuYzoxNzI3Cittc2dpZCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJs4buXaSBj4bqlcCBwaMOhdCBi4buZIG5o4bubIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgImzhu5dpIGtow7RuZyByw7UiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIlhlbSB0aMO0bmcgxJFp4buHcCB0cuG7oyBnacO6cCBuw6B5IgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aMO0bmcgxJFp4buHcCBjw6FjaCBz4butIGThu6VuZyBuZ+G6r24iCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyBnacOhIHRy4buLIG3hurdjIMSR4buLbmggY+G7p2EgdMO5eSBjaOG7jW4gdHJvbmcgdGjDtG5nIMSRaeG7h3AiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gY2jhuqVtIGThu6l0IgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIlTDuXkgY2jhu41uIHRy4bujIGdpw7pwOiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gdGjDtG5nIHF1YSBwb3B0IGFsaWFzL2V4ZWM6IgorCisjOiBwb3B0aGVscC5jOjIwMAorbXNnaWQgIk5PTkUiCittc2dzdHIgIktIw5RORyBDw5MiCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICJHScOBIFRS4buKIgorCisjOiBwb3B0aGVscC5jOjIwNgorbXNnaWQgIklOVCIKK21zZ3N0ciAiU+G7kCBOR1VZw4pOIgorCisjOiBwb3B0aGVscC5jOjIwNworbXNnaWQgIlNIT1JUIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA4Cittc2dpZCAiTE9ORyIKK21zZ3N0ciAiRMOASSIKKworIzogcG9wdGhlbHAuYzoyMDkKK21zZ2lkICJMT05HTE9ORyIKK21zZ3N0ciAiRMOASUTDgEkiCisKKyM6IHBvcHRoZWxwLmM6MjEwCittc2dpZCAiU1RSSU5HIgorbXNnc3RyICJDSFXhu5ZJIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJO4buUSSIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIsSQw5RJIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAixJDhu5BJIFPhu5AiCisKKyM6IHBvcHRoZWxwLmM6NjQ5Cittc2dpZCAiVXNhZ2U6IgorbXNnc3RyICJT4butIGThu6VuZzoiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIltUw5lZX0NI4buMTi4uLl0iCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vd2EuZ21vIGIvcG9wdC0xLjE2L3BvL3dhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmNhMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3dhLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vd2EucG8gYi9wb3B0LTEuMTYvcG8vd2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0MmUxMAotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby93YS5wbwpAQCAtMCwwICsxLDE0NSBAQAorIyBUcmFuc2xhdGlvbiBpbnRvIHRoZSB3YWxsb29uIGxhbmd1YWdlLgorIworIyBTaSB2b3Mgdm9sb3ogZG9ubmVyIG9uIGP0cCBkaSBzcGFsZSBwb2wgcmF0b/tybmFlZGplIGRpIEdub21lIChvdSBkZXMKKyMg9HRlcyBsaWJlcyBwcm9ncmFtZXMpIHNpY3Jpamhvei1tdSBhIGwnIGFkcmVzc2UgZW1pbGUKKyMgPGxpbnV4LXdhQGNoYW5hZS5hbHBoYW5ldC5jaD47IG5vcyBhdm9ucyBjbyBicuVtaW50IGRpIGwnIG92cmFlZGplIGEgZukuCisjCisjIENvcHlyaWdodCAoQykgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMTk5OS0wMy0xOCAyMzoxMSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBOb2JvZHkgeWV0XG4iCisiTGFuZ3VhZ2UtVGVhbTogd2Fsb24gPGxpbnV4LXdhQGNoYW5hZS5hbHBoYW5ldC5jaD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBwb3B0LmM6NDcKK21zZ2lkICJ1bmtub3duIGVycm5vIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wdGlvbiB0eXBlICgldSkgbm90IGltcGxlbWVudGVkIGluIHBvcHRcbiIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxMQorbXNnaWQgIm1pc3NpbmcgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MTMKK21zZ2lkICJ1bmtub3duIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcxNQorbXNnaWQgIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIk1vc3RyZXIgY2kgbWVzc2FlZGplIGQnIGFpZGUgY2hhbCIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICJNb3N0cmUgb24gY291cnQgbWVzc2FlZGplIHNvIGttaW50IHZvcyDoIHNpZXJ2aSIKKworIzogcG9wdGhlbHAuYzo5MAorIywgZnV6enkKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICJNb3N0cmUgb24gY291cnQgbWVzc2FlZGplIHNvIGttaW50IHZvcyDoIHNpZXJ2aSIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MgorbXNnaWQgIk9wdGlvbnMgaW1wbGVtZW50ZWQgdmlhIHBvcHQgYWxpYXMvZXhlYzoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDAKK21zZ2lkICJOT05FIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjAyCittc2dpZCAiVkFMIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA2Cittc2dpZCAiSU5UIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA3Cittc2dpZCAiU0hPUlQiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMDgKK21zZ2lkICJMT05HIgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjA5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMTAKK21zZ2lkICJTVFJJTkciCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoyMTEKK21zZ2lkICJGTE9BVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxMgorbXNnaWQgIkRPVUJMRSIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIxNQorbXNnaWQgIkFSRyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjY0OQorbXNnaWQgIlVzYWdlOiIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjY3MgorbXNnaWQgIltPUFRJT04uLi5dIgorbXNnc3RyICIiCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vemhfQ04uZ21vIGIvcG9wdC0xLjE2L3BvL3poX0NOLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWYxN2NmCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvL3poX0NOLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG8vemhfQ04ucG8gYi9wb3B0LTEuMTYvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxZDk0MwotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby96aF9DTi5wbwpAQCAtMCwwICsxLDE0MiBAQAorIyB0cmFuc2xhdGlvbiBvZiB0cmFuc2xhdGlvbi5wbyB0byAKKyMgU2ltcGxpZmllZCBDaGluZXNlIE1lc3NhZ2VzIGZvciBwb3B0CisjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV2VpLUx1biBDaGFvIDxjaGFvd2VpbHVuQHBjbWFpbC5jb20udHc+LCAyMDA1LgorIyBMSSBEYW9iaW5nIDxsaWRhb2JpbmdAZ21haWwuY29tPiwgMjAwNywgMjAwOC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBvcHQgMS4xNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiA8cG9wdC1kZXZlbEBycG01Lm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMi0xNyAxMzozNS0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMi0xOCAyMDoxNiswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBMSSBEYW9iaW5nIDxsaWRhb2JpbmdAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENoaW5lc2UgKHNpbXBsaWZpZWQpIDxpMThuLXpoQGdvb2dsZWdyb3Vwcy5jb20+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHBvcHQuYzo0NworbXNnaWQgInVua25vd24gZXJybm8iCittc2dzdHIgIuacquefpeeahOmUmeivryIKKworIzogcG9wdC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICLpgInpobnnsbvliKsgKCV1KSDmsqHmnInlnKggcG9wdCDkuK3lrp7njrBcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICLnvLrlsJHlj4LmlbAiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIuacquefpeeahOmAiemhuSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAi6ZyA6KaBIFhPUiDpgLvovpHov5DnrpciCisKKyM6IHBvcHQuYzoxNzE3Cittc2dpZCAib3B0LT5hcmcgc2hvdWxkIG5vdCBiZSBOVUxMIgorbXNnc3RyICJvcHQtPmFyZyDkuI3lupTor6XkuLogTlVMTCIKKworIzogcG9wdC5jOjE3MTkKK21zZ2lkICJhbGlhc2VzIG5lc3RlZCB0b28gZGVlcGx5IgorbXNnc3RyICLliKvlkI3ltYzlpZflpKrmt7EiCisKKyM6IHBvcHQuYzoxNzIxCittc2dpZCAiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciCittc2dzdHIgIuWPguaVsOW8leWPt+mUmeivryIKKworIzogcG9wdC5jOjE3MjMKK21zZ2lkICJpbnZhbGlkIG51bWVyaWMgdmFsdWUiCittc2dzdHIgIuaXoOaViOeahOaVsOWAvCIKKworIzogcG9wdC5jOjE3MjUKK21zZ2lkICJudW1iZXIgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCIKK21zZ3N0ciAi5pWw5YC85aSq5aSn5oiW5aSq5bCPIgorCisjOiBwb3B0LmM6MTcyNworbXNnaWQgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAi5YaF5a2Y5YiG6YWN6ZSZ6K+vIgorCisjOiBwb3B0LmM6MTcyOQorbXNnaWQgImNvbmZpZyBmaWxlIGZhaWxlZCBzYW5pdHkgdGVzdCIKK21zZ3N0ciAiIgorCisjOiBwb3B0LmM6MTczMworbXNnaWQgInVua25vd24gZXJyb3IiCittc2dzdHIgIuacquefpeeahOmUmeivryIKKworIzogcG9wdGhlbHAuYzo3NSBwb3B0aGVscC5jOjg2Cittc2dpZCAiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIKK21zZ3N0ciAi5pi+56S66L+Z5Liq5biu5Yqp5L+h5oGvIgorCisjOiBwb3B0aGVscC5jOjc2IHBvcHRoZWxwLmM6ODcKK21zZ2lkICJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiCittc2dzdHIgIuaYvuekuueugOefreeahOS9v+eUqOivtOaYjiIKKworIzogcG9wdGhlbHAuYzo5MAorbXNnaWQgIkRpc3BsYXkgb3B0aW9uIGRlZmF1bHRzIGluIG1lc3NhZ2UiCittc2dzdHIgIuWcqOS/oeaBr+S4reaYvuekuum7mOiupOeahOmAiemhuSIKKworIzogcG9wdGhlbHAuYzo5MgorbXNnaWQgIlRlcm1pbmF0ZSBvcHRpb25zIgorbXNnc3RyICLnu4jmraLpgInpobkiCisKKyM6IHBvcHRoZWxwLmM6MTkxCittc2dpZCAiSGVscCBvcHRpb25zOiIKK21zZ3N0ciAi5biu5Yqp6YCJ6aG5OiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICLpgJrov4cgcG9wdCBhbGlhcy9leGVjIOWunueOsOeahOmAiemhuToiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiTk9ORSIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIlZBTCIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIklOVCIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjA5Cittc2dpZCAiTE9OR0xPTkciCittc2dzdHIgIkxPTkdMT05HIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiU1RSSU5HIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJGTE9BVCIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIkRPVUJMRSIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIkFSRyIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIueUqOazlToiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIlvpgInpobkuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3poX1RXLmdtbyBiL3BvcHQtMS4xNi9wby96aF9UVy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmOTViZAotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wby96aF9UVy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvL3poX1RXLnBvIGIvcG9wdC0xLjE2L3BvL3poX1RXLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3M2U3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG8vemhfVFcucG8KQEAgLTAsMCArMSwxNDEgQEAKKyMgVHJhZGl0aW9uYWwgQ2hpbmVzZSBNZXNzYWdlcyBmb3IgcG9wdAorIyBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdlaS1MdW4gQ2hhbyA8Y2hhb3dlaWx1bkBwY21haWwuY29tLnR3PiwgMjAwNQorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcG9wdCAxLjExXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IDxwb3B0LWRldmVsQHJwbTUub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAyLTE3IDEzOjM1LTA1MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTA0LTA4IDE3OjUyKzA4MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFdlaS1MdW4gQ2hhbyA8Y2hhb3dlaWx1bkBwY21haWwuY29tLnR3PlxuIgorIkxhbmd1YWdlLVRlYW06IHpoX1RXIDx6aC1sMTBuQGxpbnV4Lm9yZy50dz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogcG9wdC5jOjQ3Cittc2dpZCAidW5rbm93biBlcnJubyIKK21zZ3N0ciAi5pyq55+l55qE6Yyv6KqkIgorCisjOiBwb3B0LmM6MTI5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uIHR5cGUgKCV1KSBub3QgaW1wbGVtZW50ZWQgaW4gcG9wdFxuIgorbXNnc3RyICLpgbjpoIXpoZ7lnosgKCVkKSDmspLmnInlnKggcG9wdCDkuK3lr6bkvZxcbiIKKworIzogcG9wdC5jOjE3MTEKK21zZ2lkICJtaXNzaW5nIGFyZ3VtZW50IgorbXNnc3RyICLnvLrlsJHlvJXmlbgiCisKKyM6IHBvcHQuYzoxNzEzCittc2dpZCAidW5rbm93biBvcHRpb24iCittc2dzdHIgIuacquefpeeahOmBuOmghSIKKworIzogcG9wdC5jOjE3MTUKK21zZ2lkICJtdXR1YWxseSBleGNsdXNpdmUgbG9naWNhbCBvcGVyYXRpb25zIHJlcXVlc3RlZCIKK21zZ3N0ciAi6ZyA6KaB55u45LqS542o56uL55qE6YKP6Lyv6YGL566XIgorCisjOiBwb3B0LmM6MTcxNworbXNnaWQgIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIKK21zZ3N0ciAib3B0LT5hcmcg5LiN5oeJ54K6IE5VTEwiCisKKyM6IHBvcHQuYzoxNzE5Cittc2dpZCAiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIKK21zZ3N0ciAi5bei54uA5Yil5ZCN5aSq5rexIgorCisjOiBwb3B0LmM6MTcyMQorbXNnaWQgImVycm9yIGluIHBhcmFtZXRlciBxdW90aW5nIgorbXNnc3RyICLlj4PmlbjlvJXomZ/pjK/oqqQiCisKKyM6IHBvcHQuYzoxNzIzCittc2dpZCAiaW52YWxpZCBudW1lcmljIHZhbHVlIgorbXNnc3RyICLkuI3mraPnorrnmoTmlbjlgLwiCisKKyM6IHBvcHQuYzoxNzI1Cittc2dpZCAibnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwiCittc2dzdHIgIuaVuOWtl+WkquWkp+aIluWkquWwjyIKKworIzogcG9wdC5jOjE3MjcKK21zZ2lkICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIuiomOaGtumrlOmFjee9rumMr+iqpCIKKworIzogcG9wdC5jOjE3MjkKK21zZ2lkICJjb25maWcgZmlsZSBmYWlsZWQgc2FuaXR5IHRlc3QiCittc2dzdHIgIiIKKworIzogcG9wdC5jOjE3MzMKK21zZ2lkICJ1bmtub3duIGVycm9yIgorbXNnc3RyICLmnKrnn6XnmoTpjK/oqqQiCisKKyM6IHBvcHRoZWxwLmM6NzUgcG9wdGhlbHAuYzo4NgorbXNnaWQgIlNob3cgdGhpcyBoZWxwIG1lc3NhZ2UiCittc2dzdHIgIumhr+ekuuacrOiqquaYjuioiuaBryIKKworIzogcG9wdGhlbHAuYzo3NiBwb3B0aGVscC5jOjg3Cittc2dpZCAiRGlzcGxheSBicmllZiB1c2FnZSBtZXNzYWdlIgorbXNnc3RyICLpoa/npLrnsKHnn63nmoTkvb/nlKjoqqrmmI4iCisKKyM6IHBvcHRoZWxwLmM6OTAKK21zZ2lkICJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIgorbXNnc3RyICLlnKjoqIrmga/kuK3poa/npLrpoJDoqK3pgbjpoIUiCisKKyM6IHBvcHRoZWxwLmM6OTIKK21zZ2lkICJUZXJtaW5hdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjE5MQorbXNnaWQgIkhlbHAgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogcG9wdGhlbHAuYzoxOTIKK21zZ2lkICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IgorbXNnc3RyICIiCisKKyM6IHBvcHRoZWxwLmM6MjAwCittc2dpZCAiTk9ORSIKK21zZ3N0ciAiTk9ORSIKKworIzogcG9wdGhlbHAuYzoyMDIKK21zZ2lkICJWQUwiCittc2dzdHIgIlZBTCIKKworIzogcG9wdGhlbHAuYzoyMDYKK21zZ2lkICJJTlQiCittc2dzdHIgIklOVCIKKworIzogcG9wdGhlbHAuYzoyMDcKK21zZ2lkICJTSE9SVCIKK21zZ3N0ciAiIgorCisjOiBwb3B0aGVscC5jOjIwOAorbXNnaWQgIkxPTkciCittc2dzdHIgIkxPTkciCisKKyM6IHBvcHRoZWxwLmM6MjA5CisjLCBmdXp6eQorbXNnaWQgIkxPTkdMT05HIgorbXNnc3RyICJMT05HIgorCisjOiBwb3B0aGVscC5jOjIxMAorbXNnaWQgIlNUUklORyIKK21zZ3N0ciAiU1RSSU5HIgorCisjOiBwb3B0aGVscC5jOjIxMQorbXNnaWQgIkZMT0FUIgorbXNnc3RyICJGTE9BVCIKKworIzogcG9wdGhlbHAuYzoyMTIKK21zZ2lkICJET1VCTEUiCittc2dzdHIgIkRPVUJMRSIKKworIzogcG9wdGhlbHAuYzoyMTUKK21zZ2lkICJBUkciCittc2dzdHIgIkFSRyIKKworIzogcG9wdGhlbHAuYzo2NDkKK21zZ2lkICJVc2FnZToiCittc2dzdHIgIueUqOazlToiCisKKyM6IHBvcHRoZWxwLmM6NjcyCittc2dpZCAiW09QVElPTi4uLl0iCittc2dzdHIgIlvpgbjpoIUuLi5dIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvcHQuMyBiL3BvcHQtMS4xNi9wb3B0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1YTU1NgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wb3B0LjMKQEAgLTAsMCArMSw3NzIgQEAKKy5USCBQT1BUIDMgICJKdW5lIDMwLCAxOTk4IiAiIiAiTGludXggUHJvZ3JhbW1lcidzIE1hbnVhbCIKKy5TSCBOQU1FCitwb3B0IFwtIFBhcnNlIGNvbW1hbmQgbGluZSBvcHRpb25zCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPHBvcHQuaD4KKy5zcAorLkJJICJwb3B0Q29udGV4dCBwb3B0R2V0Q29udGV4dChjb25zdCBjaGFyICogIiBuYW1lICIsIGludCAiIGFyZ2MgLAorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqICJhcmd2ICwKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiAiIG9wdGlvbnMgLAorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIiBmbGFncyApOworLnNwCisuQkkgInZvaWQgcG9wdEZyZWVDb250ZXh0KHBvcHRDb250ZXh0ICIgY29uICk7Cisuc3AKKy5CSSAidm9pZCBwb3B0UmVzZXRDb250ZXh0KHBvcHRDb250ZXh0ICIgY29uICk7Cisuc3AKKy5CSSAiaW50IHBvcHRHZXROZXh0T3B0KHBvcHRDb250ZXh0ICIgY29uICk7Cisuc3AKKy5CSSAiY29uc3QgY2hhciAqIHBvcHRHZXRPcHRBcmcocG9wdENvbnRleHQgIiBjb24gKTsKKy5zcAorLkJJICJjb25zdCBjaGFyICogcG9wdEdldEFyZyhwb3B0Q29udGV4dCAiIGNvbiApOworLnNwCisuQkkgImNvbnN0IGNoYXIgKiBwb3B0UGVla0FyZyhwb3B0Q29udGV4dCAiIGNvbiApOworLnNwCisuQkkgImNvbnN0IGNoYXIgKiogcG9wdEdldEFyZ3MocG9wdENvbnRleHQgIiBjb24gKTsKKy5zcAorLkJJICJjb25zdCBjaGFyICpjb25zdCBwb3B0U3RyZXJyb3IoY29uc3QgaW50ICIgZXJyb3IgKTsKKy5zcAorLkJJICJjb25zdCBjaGFyICogcG9wdEJhZE9wdGlvbihwb3B0Q29udGV4dCAiIGNvbiAiLCBpbnQgIiBmbGFncyApOworLnNwCisuQkkgImludCBwb3B0UmVhZERlZmF1bHRDb25maWcocG9wdENvbnRleHQgIiBjb24gIiwgaW50ICIgZmxhZ3MgKTsKKy5zcAorLkJJICJpbnQgcG9wdFJlYWRDb25maWdGaWxlKHBvcHRDb250ZXh0ICIgY29uICIsIGNoYXIgKiAiIGZuICk7Cisuc3AKKy5CSSAiaW50IHBvcHRBZGRBbGlhcyhwb3B0Q29udGV4dCAiIGNvbiAiLCBzdHJ1Y3QgcG9wdEFsaWFzICIgYWxpYXMgLCAKKy5CSSAiICAgICAgICAgICAgICAgICBpbnQgIiBmbGFncyApOworLnNwCisuQkkgImludCBwb3B0UGFyc2VBcmd2U3RyaW5nKGNoYXIgKiAiIHMgIiwgaW50ICogICIgYXJnY1B0ciAsIAorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqKiAiIGFyZ3ZQdHIgKTsKKy5zcAorLkJJICJpbnQgcG9wdER1cEFyZ3YoaW50ICIgYXJnYyAiLCBjb25zdCBjaGFyICoqICIgYXJndiAiLCBpbnQgKiAiIGFyZ2NQdHIgIiwKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiogIiBhcmd2UHRyICIpOyIKKy5zcAorLkJJICJpbnQgcG9wdFN0dWZmQXJncyhwb3B0Q29udGV4dCAiIGNvbiAiLCBjb25zdCBjaGFyICoqICIgYXJndiApOworLnNwCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlIHBvcHQgbGlicmFyeSBleGlzdHMgZXNzZW50aWFsbHkgZm9yIHBhcnNpbmcgY29tbWFuZC1saW5lIAorb3B0aW9ucy4gSXQgaXMgZm91bmQgc3VwZXJpb3IgaW4gbWFueSB3YXlzIHdoZW4gY29tcGFyZWQgdG8gCitwYXJzaW5nIHRoZSBhcmd2IGFycmF5IGJ5IGhhbmQgb3IgdXNpbmcgdGhlIGdldG9wdCBmdW5jdGlvbnMgCisuQiBnZXRvcHQoKQorYW5kIAorLkIgZ2V0b3B0X2xvbmcoKQorW3NlZSAKKy5CUiBnZXRvcHQgIigzKV0uIiAgCitTb21lIHNwZWNpZmljIGFkdmFudGFnZXMgb2YgcG9wdCBhcmU6IGl0IGRvZXMgbm90IHV0aWxpemUgZ2xvYmFsIAorLlJJICJ2YXJpYWJsZXMsIHRodXMgZW5hYmxpbmcgbXVsdGlwbGUgcGFzc2VzIGluIHBhcnNpbmcgIiBhcmd2CisuUkkgIjsgaXQgY2FuIHBhcnNlIGFuIGFyYml0cmFyeSBhcnJheSBvZiAiIGFyZ3YgIi1zdHlsZSBlbGVtZW50cywgIgorYWxsb3dpbmcgcGFyc2luZyBvZiBjb21tYW5kLWxpbmUtc3RyaW5ncyBmcm9tIGFueSBzb3VyY2U7IAoraXQgcHJvdmlkZXMgYSBzdGFuZGFyZCBtZXRob2Qgb2Ygb3B0aW9uIGFsaWFzaW5nICh0byBiZSAKK2Rpc2N1c3NlZCBhdCBsZW5ndGggYmVsb3cuKTsgaXQgY2FuIGV4ZWMgZXh0ZXJuYWwgb3B0aW9uIGZpbHRlcnM7IGFuZCwKK2ZpbmFsbHksIGl0IGNhbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGhlbHAgYW5kIHVzYWdlIG1lc3NhZ2VzIGZvcgordGhlIGFwcGxpY2F0aW9uLgorLnNwCitMaWtlCisuQlIgZ2V0b3B0X2xvbmcoKSAsCit0aGUgcG9wdCBsaWJyYXJ5IHN1cHBvcnRzIHNob3J0IGFuZCBsb25nIHN0eWxlIG9wdGlvbnMuICBSZWNhbGwgCit0aGF0IGEgCisuQiBzaG9ydCBvcHRpb24KK2NvbnNpc3RzIG9mIGEgLSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYSBzaW5nbGUgYWxwaGFudW1lcmljIGNoYXJhY3Rlci4KK0EgCisuQlIgImxvbmcgb3B0aW9uIiAsCitjb21tb24gaW4gR05VIHV0aWxpdGllcywgY29uc2lzdHMgb2YgdHdvIC0gY2hhcmFjdGVycyBmb2xsb3dlZCBieSBhCitzdHJpbmcgbWFkZSB1cCBvZiBsZXR0ZXJzLCBudW1iZXJzIGFuZCBoeXBoZW5zLiAgTG9uZyBvcHRpb25zIGFyZQorb3B0aW9uYWxseSBhbGxvd2VkIHRvIGJlZ2luIHdpdGggYSBzaW5nbGUgLSwgcHJpbWFyaWx5IHRvIGFsbG93IGNvbW1hbmQtbGluZQorY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHBvcHQgYXBwbGljYXRpb25zIGFuZCBYIHRvb2xraXQgYXBwbGljYXRpb25zLgorRWl0aGVyIHR5cGUgb2Ygb3B0aW9uIG1heSBiZSBmb2xsb3dlZCBieSBhbiBhcmd1bWVudC4gIEEgc3BhY2Ugc2VwYXJhdGVzIGEgCitzaG9ydCBvcHRpb24gZnJvbSBpdHMgYXJndW1lbnRzOyBlaXRoZXIgYSBzcGFjZSBvciBhbiA9IHNlcGFyYXRlcyBhIGxvbmcgCitvcHRpb24gZnJvbSBhbiBhcmd1bWVudC4gCisuc3AKK1RoZSBwb3B0IGxpYnJhcnkgaXMgaGlnaGx5IHBvcnRhYmxlIGFuZCBzaG91bGQgd29yayBvbiBhbnkgUE9TSVggCitwbGF0Zm9ybS4gIFRoZSBsYXRlc3QgdmVyc2lvbiBpcyBkaXN0cmlidXRlZCB3aXRoIHJwbSBhbmQgaXMgYWx3YXlzIGF2YWlsYWJsZQorZnJvbTogZnRwOi8vZnRwLnJwbS5vcmcvcHViL3JwbS9kaXN0LgorLnNwCitJdCBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgWCBjb25zb3J0aXVtIGxpY2Vuc2UsIHNlZSB0aGUgZmlsZSBDT1BZSU5HCitpbiB0aGUgcG9wdCBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBkZXRhaWxzLgorLlNIICJCQVNJQyBQT1BUIFVTQUdFIgorLlNTICIxLiBUSEUgT1BUSU9OIFRBQkxFIgorQXBwbGljYXRpb25zIHByb3ZpZGUgcG9wdCB3aXRoIGluZm9ybWF0aW9uIG9uIHRoZWlyIGNvbW1hbmQtbGluZSAKK29wdGlvbnMgYnkgbWVhbnMgb2YgYW4gIm9wdGlvbiB0YWJsZSwiIGkuZS4sIGFuIGFycmF5IG9mIAorLkIgc3RydWN0IHBvcHRPcHRpb24gCitzdHJ1Y3R1cmVzOgorLnNwCisjaW5jbHVkZSA8cG9wdC5oPgorLnNwCisubmYKK3N0cnVjdCBwb3B0T3B0aW9uIHsKKyAgICBjb25zdCBjaGFyICogbG9uZ05hbWU7IC8qIG1heSBiZSBOVUxMICovCisgICAgY2hhciBzaG9ydE5hbWU7ICAgICAgICAvKiBtYXkgYmUgJ1xcMCcgKi8KKyAgICBpbnQgYXJnSW5mbzsKKyAgICB2b2lkICogYXJnOyAgICAgICAgICAgIC8qIGRlcGVuZHMgb24gYXJnSW5mbyAqLworICAgIGludCB2YWw7ICAgICAgICAgICAgICAgLyogMCBtZWFucyBkb24ndCByZXR1cm4sIGp1c3QgdXBkYXRlIGZsYWcgKi8KKyAgICBjaGFyICogZGVzY3JpcDsgICAgICAgIC8qIGRlc2NyaXB0aW9uIGZvciBhdXRvaGVscCAtLSBtYXkgYmUgTlVMTCAqLworICAgIGNoYXIgKiBhcmdEZXNjcmlwOyAgICAgLyogYXJndW1lbnQgZGVzY3JpcHRpb24gZm9yIGF1dG9oZWxwICovCit9OworLmZpCisuc3AKK0VhY2ggbWVtYmVyIG9mIHRoZSB0YWJsZSBkZWZpbmVzIGEgc2luZ2xlIG9wdGlvbiB0aGF0IG1heSBiZSAKK3Bhc3NlZCB0byB0aGUgcHJvZ3JhbS4gIExvbmcgYW5kIHNob3J0IG9wdGlvbnMgYXJlIGNvbnNpZGVyZWQgCithIHNpbmdsZSBvcHRpb24gdGhhdCBtYXkgb2NjdXIgaW4gdHdvIGRpZmZlcmVudCBmb3Jtcy4gIFRoZSAKK2ZpcnN0IHR3byBtZW1iZXJzLCAKKy5JUiBsb25nTmFtZSAiIGFuZCAiIHNob3J0TmFtZSAiLCBkZWZpbmUgdGhlIG5hbWVzIG9mIHRoZSBvcHRpb247IgordGhlIGZpcnN0IGlzIGEgbG9uZyBuYW1lLCB3aGlsZSB0aGUgbGF0dGVyIGlzIGEgc2luZ2xlIGNoYXJhY3Rlci4KKy5zcAorVGhlIAorLklSIGFyZ0luZm8gIiBtZW1iZXIgdGVsbHMgcG9wdCB3aGF0IHR5cGUgb2YgYXJndW1lbnQgaXMgZXhwZWN0ZWQiIAorYWZ0ZXIgdGhlIG9wdGlvbi4gIElmIG5vIGFyZ3VtZW50IGlzIGV4cGVjdGVkLAorLkIgUE9QVF9BUkdfTk9ORQorc2hvdWxkIGJlIHVzZWQuCitUaGUgcmVzdCBvZiB0aGUgdmFsaWQgdmFsdWVzIGFyZSBzaG93biBpbiB0aGUgZm9sbG93aW5nIHRhYmxlOgorLnNwCisuVFMKK2xmQiBsZkIgbGZCCitsZkIgbGZSIGxmUi4KK1ZhbHVlCURlc2NyaXB0aW9uCWFyZyBUeXBlCitQT1BUX0FSR19OT05FCU5vIGFyZ3VtZW50IGV4cGVjdGVkCWludAorUE9QVF9BUkdfU1RSSU5HCU5vIHR5cGUgY2hlY2tpbmcgdG8gYmUgcGVyZm9ybWVkCWNoYXIgKgorUE9QVF9BUkdfQVJHVglObyB0eXBlIGNoZWNraW5nIHRvIGJlIHBlcmZvcm1lZAljaGFyICoqCitQT1BUX0FSR19TSE9SVAlBbiBzaG9ydCBhcmd1bWVudCBpcyBleHBlY3RlZAlzaG9ydAorUE9QVF9BUkdfSU5UCUFuIGludGVnZXIgYXJndW1lbnQgaXMgZXhwZWN0ZWQJaW50CitQT1BUX0FSR19MT05HCUEgbG9uZyBpbnRlZ2VyIGlzIGV4cGVjdGVkCWxvbmcKK1BPUFRfQVJHX0xPTkdMT05HCUEgbG9uZyBsb25nIGludGVnZXIgaXMgZXhwZWN0ZWQJbG9uZyBsb25nCitQT1BUX0FSR19WQUwJSW50ZWdlciB2YWx1ZSB0YWtlbiBmcm9tIFxmKENXdmFsXGZSCWludAorUE9QVF9BUkdfRkxPQVQJQW4gZmxvYXQgYXJndW1lbnQgaXMgZXhwZWN0ZWQJZmxvYXQKK1BPUFRfQVJHX0RPVUJMRQlBIGRvdWJsZSBhcmd1bWVudCBpcyBleHBlY3RlZAlkb3VibGUKKy5URQorLnNwCitGb3IgbnVtZXJpYyB2YWx1ZXMsIGlmIHRoZSBcZklhcmdJbmZvXGZSIHZhbHVlIGlzIGJpdHdpc2Ugb3InZCB3aXRoIG9uZSBvZgorXGZCUE9QVF9BUkdGTEFHX09SXGZSLCBcZkJQT1BUX0FSR0ZMQUdfQU5EXGZSLCBvciBcZkJQT1BUX0FSR0ZMQUdfWE9SXGZSLAordGhlIHZhbHVlIGlzIHNhdmVkIGJ5IHBlcmZvcm1pbmcgYW4gT1IsIEFORCwgb3IgWE9SLgorSWYgdGhlIFxmSWFyZ0luZm9cZlIgdmFsdWUgaXMgYml0d2lzZSBvcidkIHdpdGggXGZCUE9QVF9BUkdGTEFHX05PVFxmUiwKK3RoZSB2YWx1ZSB3aWxsIGJlIG5lZ2F0ZWQgYmVmb3JlIHNhdmluZy4gRm9yIHRoZSBjb21tb24gb3BlcmF0aW9ucyBvZgorc2V0dGluZyBhbmQvb3IgY2xlYXJpbmcgYml0cywgXGZCUE9QVF9CSVRfU0VUXGZSIGFuZCBcZkJQT1BUX0JJVF9DTFJcZlIKK2hhdmUgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIHNldCB0byBwZXJmb3JtIGJpdCBvcGVyYXRpb25zLgorLnNwCitJZiB0aGUgXGZJYXJnSW5mb1xmUiB2YWx1ZSBpcyBiaXR3aXNlIG9yJ2Qgd2l0aCBcZkJQT1BUX0FSR0ZMQUdfT05FREFTSFxmUiwKK3RoZSBsb25nIGFyZ3VtZW50IG1heSBiZSBnaXZlbiB3aXRoIGEgc2luZ2xlIC0gaW5zdGVhZCBvZiB0d28uIEZvciBleGFtcGxlLAoraWYgXGZCLS1sb25nb3B0XGZSIGlzIGFuIG9wdGlvbiB3aXRoIFxmQlBPUFRfQVJHRkxBR19PTkVEQVNIXGZSLCBpcworc3BlY2lmaWVkLCBcZkItbG9uZ29wdFxmUiBpcyBhY2NlcHRlZCBhcyB3ZWxsLgorLnNwCisuUkkgIlRoZSBuZXh0IGVsZW1lbnQsICIgYXJnICIsIGFsbG93cyBwb3B0IHRvIGF1dG9tYXRpY2FsbHkgdXBkYXRlICIKKy5SSSAicHJvZ3JhbSB2YXJpYWJsZXMgd2hlbiB0aGUgb3B0aW9uIGlzIHVzZWQuIElmICIgYXJnICIgaXMgIiAKKy5CUiBOVUxMICIsIGl0IGlzIGlnbm9yZWQgYW5kIHBvcHQgdGFrZXMgbm8gc3BlY2lhbCBhY3Rpb24uICIgCitPdGhlcndpc2UgaXQgc2hvdWxkIHBvaW50IHRvIGEgdmFyaWFibGUgb2YgdGhlIHR5cGUgaW5kaWNhdGVkIGluIHRoZSAKKy5SQiAicmlnaHQtbW9zdCBjb2x1bW4gb2YgdGhlIHRhYmxlIGFib3ZlLiBBICIgUE9QVF9BUkdfQVJHViAiIGFyZyB3aWxsCisocmUtKWFsbG9jYXRlIGFuIGFycmF5IG9mIGNoYXIgKiBzdHJpbmcgcG9pbnRlcnMsIGFwcGVuZCB0aGUgc3RyaW5nIGFyZ3VtZW50LCBhbmQgYWRkIGEKKy5CUiBOVUxMICIgc2VudGluZWwgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkgYXMgbmVlZGVkLiIKKy5SQiAiVGhlIHRhcmdldCBjaGFyICoqIGFkZHJlc3Mgb2YgYSAiIFBPUFRfQVJHX0FSR1YgIiBhcmcgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvICIgTlVMTCAiLiIKKy5zcAorLlJJICJJZiB0aGUgb3B0aW9uIHRha2VzIG5vIGFyZ3VtZW50ICgiIGFyZ0luZm8gIiBpcyAiIAorLkJSIFBPUFRfQVJHX05PTkUgIiksIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5ICIgCisuSVIgYXJnICIgaXMgc2V0IHRvIDEgd2hlbiB0aGUgb3B0aW9uIGlzIHVzZWQuICAoSW5jaWRlbnRhbGx5LCBpdCAiCit3aWxsIHBlcmhhcHMgbm90IGVzY2FwZSB0aGUgYXR0ZW50aW9uIG9mIGh1bnQtYW5kLXBlY2sgdHlwaXN0cyB0aGF0IAorLlJCICJ0aGUgdmFsdWUgb2YgIiBQT1BUX0FSR19OT05FICIgaXMgMC4pICBJZiB0aGUgb3B0aW9uIGRvZXMgdGFrZSAiCithbiBhcmd1bWVudCwgdGhlIHZhcmlhYmxlIHRoYXQgCisuSVIgYXJnICIgcG9pbnRzIHRvIGlzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50LiIgCisuUkIgIkFueSBzdHJpbmcgaXMgYWNjZXB0YWJsZSBmb3IgIiBQT1BUX0FSR19TVFJJTkcgIiBhbmQgIiBQT1BUX0FSR19BUkdWICIgYXJndW1lbnRzLCBidXQgIgorLkJSIFBPUFRfQVJHX0lOVCAiLCAiIFBPUFRfQVJHX1NIT1JUICIsICIgUE9QVF9BUkdfTE9ORyAiLCAiIFBPUFRfQVJHX0xPTkdMT05HICIsICIgUE9QVF9BUkdfRkxPQVQgIiwgYW5kICIKKy5CUiBQT1BUX0FSR19ET1VCTEUgIiBhcmUgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlLCBhbmQgYW4gIgorZXJyb3IgcmV0dXJuZWQgaWYgdGhlIGNvbnZlcnNpb24gZmFpbHMuCisuc3AKK1xmQlBPUFRfQVJHX1ZBTFxmUiBjYXVzZXMgXGZJYXJnXGZQIHRvIGJlIHNldCB0byB0aGUgKGludGVnZXIpIHZhbHVlIG9mCitcZkl2YWxcZlAgd2hlbiB0aGUgYXJndW1lbnQgaXMgZm91bmQuICBUaGlzIGlzIG1vc3Qgb2Z0ZW4gdXNlZnVsIGZvcgorbXV0dWFsbHktZXhjbHVzaXZlIGFyZ3VtZW50cyBpbiBjYXNlcyB3aGVyZSBpdCBpcyBub3QgYW4gZXJyb3IgZm9yCittdWx0aXBsZSBhcmd1bWVudHMgdG8gb2NjdXIgYW5kIHdoZXJlIHlvdSB3YW50IHRoZSBsYXN0IGFyZ3VtZW50CitzcGVjaWZpZWQgdG8gd2luOyBmb3IgZXhhbXBsZSwgInJtIC1pIC1mIi4gIFxmQlBPUFRfQVJHX1ZBTFxmUCBjYXVzZXMKK3RoZSBwYXJzaW5nIGZ1bmN0aW9uIG5vdCB0byByZXR1cm4gYSB2YWx1ZSwgc2luY2UgdGhlIHZhbHVlIG9mIFxmSXZhbFxmUAoraGFzIGFscmVhZHkgYmVlbiB1c2VkLgorLnNwCitJZiB0aGUgXGZJYXJnSW5mb1xmUiB2YWx1ZSBpcyBiaXR3aXNlIG9yJ2Qgd2l0aCBcZkJQT1BUX0FSR0ZMQUdfT1BUSU9OQUxcZlIsCit0aGUgYXJndW1lbnQgdG8gdGhlIGxvbmcgb3B0aW9uIG1heSBiZSBvbWl0dGVkLiBJZiB0aGUgbG9uZyBvcHRpb24KK2lzIHVzZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgYSBkZWZhdWx0IHZhbHVlIG9mIHplcm8gb3IgTlVMTCB3aWxsIGJlIHNhdmVkCisoaWYgdGhlIGFyZyBwb2ludGVyIGlzIHByZXNlbnQpLCBvdGhlcndpc2UgYmVoYXZpb3Igd2lsbCBiZSBpZGVudGljYWwgdG8KK2EgbG9uZyBvcHRpb24gd2l0aCBhcmd1bWVudC4KKy5zcAorLlJJICJUaGUgbmV4dCBvcHRpb24sICIgdmFsICIsIGlzIHRoZSB2YWx1ZSBwb3B0J3MgcGFyc2luZyBmdW5jdGlvbiAKK3Nob3VsZCByZXR1cm4gd2hlbiB0aGUgb3B0aW9uIGlzIGVuY291bnRlcmVkLiAgSWYgaXQgaXMgMCwgdGhlIHBhcnNpbmcKK2Z1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLCBpbnN0ZWFkIHBhcnNpbmcgdGhlIG5leHQgCitjb21tYW5kLWxpbmUgYXJndW1lbnQuCisuc3AKKy5SSSAiVGhlIGxhc3QgdHdvIG9wdGlvbnMsICIgZGVzY3JpcCAiIGFuZCAiIGFyZ0Rlc2NyaXAgIiBhcmUgb25seSByZXF1aXJlZAoraWYgYXV0b21hdGljIGhlbHAgbWVzc2FnZXMgYXJlIGRlc2lyZWQgKGF1dG9tYXRpYyB1c2FnZSBtZXNzYWdlcyBjYW4KKy5SSSAiYmUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhlbSkuICIgZGVzY3JpcCAiIGlzIGEgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUKKy5SSSAiYXJndW1lbnQgYW5kICIgYXJnZGVzY3JpcCAiIGlzIGEgc2hvcnQgc3VtbWFyeSBvZiB0aGUgdHlwZSBvZiBhcmd1bWVudHMKKy5SSSAidGhlIG9wdGlvbiBleHBlY3RzLCBvciBOVUxMIGlmIHRoZSBvcHRpb24gZG9lc24ndCByZXF1aXJlIGFueSAKK2FyZ3VtZW50cy4KKy5zcAorLlJCICJJZiBwb3B0IHNob3VsZCBhdXRvbWF0aWNhbGx5IHByb3ZpZGUgIiAtLXVzYWdlICIgYW5kICIgLS1oZWxwICIgKCIgLT8gIikKKy5SQiAib3B0aW9ucywgb25lIGxpbmUgaW4gdGhlIHRhYmxlIHNob3VsZCBiZSB0aGUgbWFjcm8gIiBQT1BUX0FVVE9IRUxQICIuCisuUkIgIlRoaXMgbWFjcm8gaW5jbHVkZXMgYW5vdGhlciBvcHRpb24gdGFibGUgKHZpYSAiIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUKKzsgc2VlIGJlbG93KSBpbiB0aGUgbWFpbiBvbmUgd2hpY2ggcHJvdmlkZXMgdGhlIHRhYmxlIGVudHJpZXMgZm9yIHRoZXNlCisuUkIgImFyZ3VtZW50cy4gV2hlbiAiIC0tdXNhZ2UgIiBvciAiIC0taGVscCAiIGFyZSBwYXNzZWQgdG8gcHJvZ3JhbXMgd2hpY2gKK3VzZSBwb3B0J3MgYXV0b21hdGljYWwgaGVscCwgcG9wdCBkaXNwbGF5cyB0aGUgYXBwcm9wcmlhdGUgbWVzc2FnZSBvbiAKK3N0ZGVyciBhcyBzb29uIGFzIGl0IGZpbmRzIHRoZSBvcHRpb24sIGFuZCBleGl0cyB0aGUgcHJvZ3JhbSB3aXRoIGEKK3JldHVybiBjb2RlIG9mIDAuIElmIHlvdSB3YW50IHRvIHVzZSBwb3B0J3MgYXV0b21hdGljIGhlbHAgZ2VuZXJhdGlvbiBpbgorYSBkaWZmZXJlbnQgd2F5LCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IGFkZCB0aGUgb3B0aW9uIGVudHJpZXMgdG8geW91ciBwcm9ncmFtcyAKKy5SQiAib3B0aW9uIHRhYmxlIGluc3RlYWQgb2YgdXNpbmcgIiBQT1BUX0FVVE9IRUxQICIuCisuc3AKK0lmIHRoZSBcZklhcmdJbmZvXGZSIHZhbHVlIGlzIGJpdHdpc2Ugb3InZCB3aXRoIFxmQlBPUFRfQVJHRkxBR19ET0NfSElEREVOXGZSLAordGhlIGFyZ3VtZW50IHdpbGwgbm90IGJlIHNob3duIGluIGhlbHAgb3V0cHV0LgorLnNwCitJZiB0aGUgXGZJYXJnSW5mb1xmUiB2YWx1ZSBpcyBiaXR3aXNlIG9yJ2Qgd2l0aCBcZkJQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxUXGZSLAordGhlIGluaXRhbCB2YWx1ZSBvZiB0aGUgYXJnIHdpbGwgYmUgc2hvd24gaW4gaGVscCBvdXRwdXQuCisuc3AKK1RoZSBmaW5hbCBzdHJ1Y3R1cmUgaW4gdGhlIHRhYmxlIHNob3VsZCBoYXZlIGFsbCB0aGUgcG9pbnRlciB2YWx1ZXMgc2V0CisuUkIgInRvICIgTlVMTCAiIGFuZCBhbGwgdGhlIGFyaXRobWV0aWMgdmFsdWVzIHNldCB0byAwLCBtYXJraW5nIHRoZSAiCisuUkIgImVuZCBvZiB0aGUgdGFibGUuIFRoZSBtYWNybyAiIFBPUFRfVEFCTEVFTkQgIiBpcyBwcm92aWRlZCB0byBkbyB0aGF0LgorLnNwCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9wdGlvbiB0YWJsZSBlbnRyaWVzIHdoaWNoIGRvIG5vdCBzcGVjaWZ5IGNvbW1hbmQKK2xpbmUgb3B0aW9ucy4gV2hlbiBlaXRoZXIgb2YgdGhlc2UgdHlwZXMgb2YgZW50cmllcyBhcmUgdXNlZCwgdGhlCitcZklsb25nTmFtZVxmUiBlbGVtZW50IG11c3QgYmUgXGZCTlVMTFxmUiBhbmQgdGhlIFxmQnNob3J0TmFtZVxmUiBlbGVtZW50CittdXN0IGJlIFxmQidcXDAnXGZSLgorLnNwCitUaGUgZmlyc3Qgb2YgdGhlc2Ugc3BlY2lhbCBlbnRyeSB0eXBlcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIG5lc3QKK2Fub3RoZXIgb3B0aW9uIHRhYmxlIGluIHRoZSBjdXJyZW50IG9uZTsgc3VjaCBuZXN0aW5nIG1heSBleHRlbmQgcXVpdGUKK2RlZXBseSAodGhlIGFjdHVhbCBkZXB0aCBpcyBsaW1pdGVkIGJ5IHRoZSBwcm9ncmFtJ3Mgc3RhY2spLiBJbmNsdWRpbmcKK290aGVyIG9wdGlvbiB0YWJsZXMgYWxsb3dzIGEgbGlicmFyeSB0byBwcm92aWRlIGEgc3RhbmRhcmQgc2V0IG9mCitjb21tYW5kLWxpbmUgb3B0aW9ucyB0byBldmVyeSBwcm9ncmFtIHdoaWNoIHVzZXMgaXQgKHRoaXMgaXMgb2Z0ZW4gZG9uZQoraW4gZ3JhcGhpY2FsIHByb2dyYW1taW5nIHRvb2xraXRzLCBmb3IgZXhhbXBsZSkuIFRvIGRvIHRoaXMsIHNldAordGhlIFxmSWFyZ0luZm9cZlIgZmllbGQgdG8gXGZCUE9QVF9BUkdfSU5DTFVERV9UQUJMRVxmUiBhbmQgdGhlCitcZlJhcmdcZlIgZmllbGQgdG8gcG9pbnQgdG8gdGhlIHRhYmxlIHdoaWNoIGlzIGJlaW5nIGluY2x1ZGVkLiBJZgorYXV0b21hdGljIGhlbHAgZ2VuZXJhdGlvbiBpcyBiZWluZyB1c2VkLCB0aGUgXGZJZGVzY3JpcFxmUiBmaWVsZCBzaG91bGQKK2NvbnRhaW4gYSBvdmVyYWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb24gdGFibGUgYmVpbmcgaW5jbHVkZWQuCisuc3AKK1RoZSBvdGhlciBzcGVjaWFsIG9wdGlvbiB0YWJsZSBlbnRyeSB0eXBlIHRlbGxzIHBvcHQgdG8gY2FsbCBhIGZ1bmN0aW9uIChhCitjYWxsYmFjaykgd2hlbiBhbnkgb3B0aW9uIGluIHRoYXQgdGFibGUgaXMgZm91bmQuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWxsCit3aGVuIGluY2x1ZGVkIG9wdGlvbiB0YWJsZXMgYXJlIGJlaW5nIHVzZWQsIGFzIHRoZSBwcm9ncmFtIHdoaWNoIHByb3ZpZGVzCit0aGUgdG9wLWxldmVsIG9wdGlvbiB0YWJsZSBkb2Vzbid0IG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIG90aGVyIG9wdGlvbnMKK3doaWNoIGFyZSBwcm92aWRlZCBieSB0aGUgaW5jbHVkZWQgdGFibGUuIFdoZW4gYSBjYWxsYmFjayBpcyBzZXQgZm9yCithIHRhYmxlLCB0aGUgcGFyc2luZyBmdW5jdGlvbiBuZXZlciByZXR1cm5zIGluZm9ybWF0aW9uIG9uIGFuIG9wdGlvbiBpbgordGhlIHRhYmxlLiBJbnN0ZWFkLCBvcHRpb25zIGluZm9ybWF0aW9uIG11c3QgYmUgcmV0YWluZWQgdmlhIHRoZSBjYWxsYmFjaworb3IgYnkgaGF2aW5nIHBvcHQgc2V0IGEgdmFyaWFibGUgdGhyb3VnaCB0aGUgb3B0aW9uJ3MgXGZJYXJnXGZSIGZpZWxkLgorT3B0aW9uIGNhbGxiYWNrcyBzaG91bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6Cisuc3AKKy5uZgorLkJJICJ2b2lkIHBvcHRDYWxsYmFja1R5cGUocG9wdENvbnRleHQgY29uLCAKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0LCAKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBhcmcsIHZvaWQgKiBkYXRhKTsKKy5maQorLnNwCitUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBjb250ZXh0IHdoaWNoIGlzIGJlaW5nIHBhcnNlZCAoc2VlIHRoZSBuZXh0CitzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBjb250ZXh0cyksIFxmSW9wdFxmUiBwb2ludHMgdG8gdGhlIG9wdGlvbgord2hpY2ggdHJpZ2dlcmVkIHRoaXMgY2FsbGJhY2ssIGFuZCBcZklhcmdcZlIgaXMgdGhlIG9wdGlvbidzIGFyZ3VtZW50LgorSWYgdGhlIG9wdGlvbiBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50LCBcZklhcmdcZlIgaXMgXGZCTlVMTFxmUi4gIFRoZQorZmluYWwgcGFyYW1ldGVyLCBcZklkYXRhXGZSIGlzIHRha2VuIGZyb20gdGhlIFxmSWRlc2NyaXBcZlIgZmllbGQKK29mIHRoZSBvcHRpb24gdGFibGUgZW50cnkgd2hpY2ggZGVmaW5lZCB0aGUgY2FsbGJhY2suIEFzIFxmSWRlc2NyaXBcZlIKK2lzIGEgcG9pbnRlciwgdGhpcyBhbGxvd3MgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGJlIHBhc3NlZCBhbiBhcmJpdHJhcnkKK3NldCBvZiBkYXRhICh0aG91Z2ggYSB0eXBlY2FzdCB3aWxsIGhhdmUgdG8gYmUgdXNlZCkuCisuc3AKK1RoZSBvcHRpb24gdGFibGUgZW50cnkgd2hpY2ggZGVmaW5lcyBhIGNhbGxiYWNrIGhhcyBhbiBcZklhcmdJbmZvXGZSIG9mCitcZkJQT1BUX0FSR19DQUxMQkFDS1xmUiwgYW4gXGZJYXJnXGZSIHdoaWNoIHBvaW50cyB0byB0aGUgY2FsbGJhY2sKK2Z1bmN0aW9uLCBhbmQgYSBcZklkZXNjcmlwXGZSIGZpZWxkIHdoaWNoIHNwZWNpZmllcyBhbiBhcmJpdHJhcnkgcG9pbnRlcgordG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4KKy5TUyAiMi4gQ1JFQVRJTkcgQSBDT05URVhUIgorcG9wdCBjYW4gaW50ZXJsZWF2ZSB0aGUgcGFyc2luZyBvZiBtdWx0aXBsZSBjb21tYW5kLWxpbmUgc2V0cy4gSXQgYWxsb3dzCit0aGlzIGJ5IGtlZXBpbmcgYWxsIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIHNldCBvZgorY29tbWFuZC1saW5lIGFyZ3VtZW50cyBpbiBhIAorLkJSIHBvcHRDb250ZXh0ICIgZGF0YSBzdHJ1Y3R1cmUsIGFuIG9wYXF1ZSB0eXBlIHRoYXQgc2hvdWxkIG5vdCBiZSAiCittb2RpZmllZCBvdXRzaWRlIHRoZSBwb3B0IGxpYnJhcnkuCisuc3AKKy5SQiAiTmV3IHBvcHQgY29udGV4dHMgYXJlIGNyZWF0ZWQgYnkgIiBwb3B0R2V0Q29udGV4dCgpICI6IgorLnNwCisubmYKKy5CSSAicG9wdENvbnRleHQgcG9wdEdldENvbnRleHQoY29uc3QgY2hhciAqICIgbmFtZSAiLCBpbnQgImFyZ2MgIiwKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiAiYXJndiAiLAorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqICJvcHRpb25zICIsCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAiZmxhZ3MgIik7IgorLmZpCisuc3AKK1RoZSBmaXJzdCBwYXJhbWV0ZXIsIAorLklSIG5hbWUgIiwgaXMgdXNlZCBvbmx5IGZvciBhbGlhcyBoYW5kbGluZyAoZGlzY3Vzc2VkIGxhdGVyKS4gSXQgIgorc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB3aG9zZSBvcHRpb25zIGFyZSBiZWluZyBwYXJzZWQsCisuUkIgIm9yIHNob3VsZCBiZSAiIE5VTEwgIiBpZiBubyBvcHRpb24gYWxpYXNpbmcgaXMgZGVzaXJlZC4gVGhlIG5leHQgIgordHdvIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRvIHBhcnNlLiBUaGVzZSBhcmUgCisuUkIgImdlbmVyYWxseSBwYXNzZWQgdG8gIiBwb3B0R2V0Q29udGV4dCgpICIgZXhhY3RseSBhcyB0aGV5IHdlcmUgIgorLlJCICJwYXNzZWQgdG8gdGhlIHByb2dyYW0ncyAiIG1haW4oKSAiIGZ1bmN0aW9uLiBUaGUgIiAKKy5JUiBvcHRpb25zICIgcGFyYW1ldGVyIHBvaW50cyB0byB0aGUgdGFibGUgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMsICIKK3doaWNoIHdhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uIFRoZSBmaW5hbCBwYXJhbWV0ZXIsIAorLklSIGZsYWdzICwKK2NhbiB0YWtlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6CisuYnIKKy5UUworbGZCIGxmQgorbGZCIGxmUi4KK1ZhbHVlCURlc2NyaXB0aW9uCitQT1BUX0NPTlRFWFRfTk9fRVhFQwlJZ25vcmUgZXhlYyBleHBhbnNpb25zCitQT1BUX0NPTlRFWFRfS0VFUF9GSVJTVAlEbyBub3QgaWdub3JlIGFyZ3ZbMF0KK1BPUFRfQ09OVEVYVF9QT1NJWE1FSEFSREVSCU9wdGlvbnMgY2Fubm90IGZvbGxvdyBhcmd1bWVudHMKKy5URQorLnNwCisuUkIgIkEgIiBwb3B0Q29udGV4dCAiIGtlZXBzIHRyYWNrIG9mIHdoaWNoIG9wdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gIgorcGFyc2VkIGFuZCB3aGljaCByZW1haW4sIGFtb25nIG90aGVyIHRoaW5ncy4gSWYgYSBwcm9ncmFtIHdpc2hlcyB0byAKK3Jlc3RhcnQgb3B0aW9uIHByb2Nlc3Npbmcgb2YgYSBzZXQgb2YgYXJndW1lbnRzLCBpdCBjYW4gcmVzZXQgdGhlIAorLkJSIHBvcHRDb250ZXh0ICIgYnkgcGFzc2luZyB0aGUgY29udGV4dCBhcyB0aGUgc29sZSBhcmd1bWVudCB0byAiCisuQlIgcG9wdFJlc2V0Q29udGV4dCgpIC4KKy5zcAorV2hlbiBhcmd1bWVudCBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlLCB0aGUgcHJvY2VzcyBzaG91bGQgZnJlZSB0aGUgCisuQlIgcG9wdENvbnRleHQgIiBhcyBpdCBjb250YWlucyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgY29tcG9uZW50cy4gVGhlICIKKy5CUiBwb3B0RnJlZUNvbnRleHQoKSAiIGZ1bmN0aW9uIHRha2VzIGEgIiAKKy5CUiBwb3B0Q29udGV4dCAiIGFzIGl0cyBzb2xlIGFyZ3VtZW50IGFuZCBmcmVlcyB0aGUgcmVzb3VyY2VzIHRoZSAiCitjb250ZXh0IGlzIHVzaW5nLgorLnNwCisuUkIgIkhlcmUgYXJlIHRoZSBwcm90b3R5cGVzIG9mIGJvdGggIiBwb3B0UmVzZXRDb250ZXh0KCkgIiBhbmQgIgorLkJSIHBvcHRGcmVlQ29udGV4dCgpIDoKKy5zcAorLm5mCisuQiAjaW5jbHVkZSA8cG9wdC5oPgorLkJJICJ2b2lkIHBvcHRGcmVlQ29udGV4dChwb3B0Q29udGV4dCAiIGNvbiAiKTsiCisuQkkgInZvaWQgcG9wdFJlc2V0Q29udGV4dChwb3B0Q29udGV4dCAiIGNvbiAiKTsiCisuZmkKKy5zcAorLlNTICIzLiBQQVJTSU5HIFRIRSBDT01NQU5EIExJTkUiCisuUkIgIkFmdGVyIGFuIGFwcGxpY2F0aW9uIGhhcyBjcmVhdGVkIGEgIiBwb3B0Q29udGV4dCAiLCBpdCBtYXkgYmVnaW4gIgorLlJCICJwYXJzaW5nIGFyZ3VtZW50cy4gIiBwb3B0R2V0TmV4dE9wdCgpICIgcGVyZm9ybXMgdGhlIGFjdHVhbCAiCithcmd1bWVudCBwYXJzaW5nLgorLnNwCisubmYKKy5CICNpbmNsdWRlIDxwb3B0Lmg+CisuQkkgImludCBwb3B0R2V0TmV4dE9wdChwb3B0Q29udGV4dCAiIGNvbiAiKTsiCisuZmkKKy5zcAorVGFraW5nIHRoZSBjb250ZXh0IGFzIGl0cyBzb2xlIGFyZ3VtZW50LCB0aGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgbmV4dAorY29tbWFuZC1saW5lIGFyZ3VtZW50IGZvdW5kLiBBZnRlciBmaW5kaW5nIHRoZSBuZXh0IGFyZ3VtZW50IGluIHRoZQorb3B0aW9uIHRhYmxlLCB0aGUgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IHRoZSBvcHRpb24gCisuUkkgInRhYmxlIGVudHJ5J3MgIiBhcmcgCisuUkIgInBvaW50ZXIgaWYgaXQgaXMgbm90ICIgTlVMTCAiLiBJZiB0aGUgdmFsIGVudHJ5IGZvciB0aGUgb3B0aW9uIGlzICIKK25vbi0wLCB0aGUgZnVuY3Rpb24gdGhlbiByZXR1cm5zIHRoYXQgdmFsdWUuIE90aGVyd2lzZSwgCisuQlIgcG9wdEdldE5leHRPcHQoKSAiIGNvbnRpbnVlcyBvbiB0byB0aGUgbmV4dCBhcmd1bWVudC4iCisuc3AKKy5CUiBwb3B0R2V0TmV4dE9wdCgpICIgcmV0dXJucyAtMSB3aGVuIHRoZSBmaW5hbCBhcmd1bWVudCBoYXMgYmVlbiAiCitwYXJzZWQsIGFuZCBvdGhlciBuZWdhdGl2ZSB2YWx1ZXMgd2hlbiBlcnJvcnMgb2NjdXIuIFRoaXMgbWFrZXMgaXQgYSAKK2dvb2QgaWRlYSB0byAKKy5SSSAia2VlcCB0aGUgIiB2YWwgIiBlbGVtZW50cyBpbiB0aGUgb3B0aW9ucyB0YWJsZSBncmVhdGVyIHRoYW4gMC4iCisuc3AKKy5SSSAiSWYgYWxsIG9mIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgaGFuZGxlZCB0aHJvdWdoICIgYXJnIAorcG9pbnRlcnMsIGNvbW1hbmQtbGluZSBwYXJzaW5nIGlzIHJlZHVjZWQgdG8gdGhlIGZvbGxvd2luZyBsaW5lIG9mIGNvZGU6Cisuc3AKKy5uZgorcmMgPSBwb3B0R2V0TmV4dE9wdChwb3B0Y29uKTsKKy5maQorLnNwCitNYW55IGFwcGxpY2F0aW9ucyByZXF1aXJlIG1vcmUgY29tcGxleCBjb21tYW5kLWxpbmUgcGFyc2luZyB0aGFuIHRoaXMsCitob3dldmVyLCBhbmQgdXNlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorLnNwCisubmYKK3doaWxlICgocmMgPSBwb3B0R2V0TmV4dE9wdChwb3B0Y29uKSkgPiAwKSB7CisgICAgIHN3aXRjaCAocmMpIHsKKyAgICAgICAgICAvKiBzcGVjaWZpYyBhcmd1bWVudHMgYXJlIGhhbmRsZWQgaGVyZSAqLworICAgICB9Cit9CisuZmkKKy5zcAorV2hlbiByZXR1cm5lZCBvcHRpb25zIGFyZSBoYW5kbGVkLCB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8ga25vdyB0aGUKK3ZhbHVlIG9mIGFueSBhcmd1bWVudHMgdGhhdCB3ZXJlIHNwZWNpZmllZCBhZnRlciB0aGUgb3B0aW9uLiBUaGVyZSBhcmUgdHdvCit3YXlzIHRvIGRpc2NvdmVyIHRoZW0uIE9uZSBpcyB0byBhc2sgcG9wdCB0byBmaWxsIGluIGEgdmFyaWFibGUgd2l0aCB0aGUgCisuUkkgInZhbHVlIG9mIHRoZSBvcHRpb24gdGhyb3VnaCB0aGUgb3B0aW9uIHRhYmxlJ3MgIiBhcmcgIiBlbGVtZW50cy4gVGhlICIKKy5SQiAib3RoZXIgaXMgdG8gdXNlICIgcG9wdEdldE9wdEFyZygpICI6IgorLnNwCisubmYKKy5CICNpbmNsdWRlIDxwb3B0Lmg+CisuQkkgImNoYXIgKiBwb3B0R2V0T3B0QXJnKHBvcHRDb250ZXh0ICIgY29uICIpOyIKKy5maQorLnNwCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFyZ3VtZW50IGdpdmVuIGZvciB0aGUgZmluYWwgb3B0aW9uIHJldHVybmVkIGJ5CisuQlIgcG9wdEdldE5leHRPcHQoKSAiLCBvciBpdCByZXR1cm5zICIgTlVMTCAiIGlmIG5vIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQuIgorVGhlIGNhbGxpbmcgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRlYWxsb2NhdGluZyB0aGlzIHN0cmluZy4KKy5zcAorLlNTICI0LiBMRUZUT1ZFUiBBUkdVTUVOVFMiCitNYW55IGFwcGxpY2F0aW9ucyB0YWtlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cywKK3N1Y2ggYXMgYSBsaXN0IG9mIGZpbGUgbmFtZXMuIFdoZW4gcG9wdCBlbmNvdW50ZXJzIGFuIGFyZ3VtZW50IHRoYXQgZG9lcworbm90IGJlZ2luIHdpdGggYSAtLCBpdCBhc3N1bWVzIGl0IGlzIHN1Y2ggYW4gYXJndW1lbnQgYW5kIGFkZHMgaXQgdG8gYSBsaXN0CitvZiBsZWZ0b3ZlciBhcmd1bWVudHMuIFRocmVlIGZ1bmN0aW9ucyBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gYWNjZXNzIHN1Y2gKK2FyZ3VtZW50czoKKy5uZgorLkhQCisuQkkgImNvbnN0IGNoYXIgKiBwb3B0R2V0QXJnKHBvcHRDb250ZXh0ICIgY29uICIpOyIKKy5maQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IGxlZnRvdmVyIGFyZ3VtZW50IGFuZCBtYXJrcyBpdCBhcworcHJvY2Vzc2VkLgorLlBQCisubmYKKy5IUAorLkJJICJjb25zdCBjaGFyICogcG9wdFBlZWtBcmcocG9wdENvbnRleHQgIiBjb24gIik7IgorLmZpCitUaGUgbmV4dCBsZWZ0b3ZlciBhcmd1bWVudCBpcyByZXR1cm5lZCBidXQgbm90IG1hcmtlZCBhcyBwcm9jZXNzZWQuCitUaGlzIGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBsb29rIGFoZWFkIGludG8gdGhlIGFyZ3VtZW50IGxpc3QsCit3aXRob3V0IG1vZGlmeWluZyB0aGUgbGlzdC4KKy5QUAorLm5mCisuSFAKKy5CSSAiY29uc3QgY2hhciAqKiBwb3B0R2V0QXJncyhwb3B0Q29udGV4dCAiIGNvbiAiKTsiCisuZmkKK0FsbCB0aGUgbGVmdG92ZXIgYXJndW1lbnRzIGFyZSByZXR1cm5lZCBpbiBhIG1hbm5lciBpZGVudGljYWwgdG8gCisuSVIgYXJndiAiLiAgVGhlIGZpbmFsIGVsZW1lbnQgaW4gdGhlIHJldHVybmVkIGFycmF5IHBvaW50cyB0byAiCisuQlIgTlVMTCAiLCBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIGFyZ3VtZW50cy4KKy5zcAorLlNTICI1LiBBVVRPTUFUSUMgSEVMUCBNRVNTQUdFUyIKK1RoZSBcZkJwb3B0XGZSIGxpYnJhcnkgY2FuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgaGVscCBtZXNzYWdlcyB3aGljaAorZGVzY3JpYmUgdGhlIG9wdGlvbnMgYSBwcm9ncmFtIGFjY2VwdHMuIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaGVscAorbWVzc2FnZXMgd2hpY2ggY2FuIGJlIGdlbmVyYXRlZC4gVXNhZ2UgbWVzc2FnZXMgYXJlIGEgc2hvcnQgbWVzc2FnZXMKK3doaWNoIGxpc3RzIHZhbGlkIG9wdGlvbnMsIGJ1dCBkb2VzIG5vdCBkZXNjcmliZSB0aGVtLiBIZWxwIG1lc3NhZ2VzCitkZXNjcmliZSBlYWNoIG9wdGlvbiBvbiBvbmUgKG9yIG1vcmUpIGxpbmVzLCByZXN1bHRpbmcgaW4gYSBsb25nZXIsIGJ1dAorbW9yZSB1c2VmdWwsIG1lc3NhZ2UuIFdoZW5ldmVyIGF1dG9tYXRpYyBoZWxwIG1lc3NhZ2VzIGFyZSB1c2VkLCB0aGUKK1xmQmRlc2NyaXBcZlIgYW5kIFxmQmFyZ0Rlc2NyaXBcZlIgZmllbGRzIFxmQnN0cnVjdCBwb3B0T3B0aW9uXGZSIG1lbWJlcnMKK3Nob3VsZCBiZSBmaWxsZWQgaW4gZm9yIGVhY2ggb3B0aW9uLgorLnNwCitUaGUgXGZCUE9QVF9BVVRPSEVMUFxmUiBtYWNybyBtYWtlcyBpdCBlYXN5IHRvIGFkZCBcZkItLXVzYWdlXGZSIGFuZAorXGZCLS1oZWxwXGZSIG1lc3NhZ2VzIHRvIHlvdXIgcHJvZ3JhbSwgYW5kIGlzIGRlc2NyaWJlZCBpbiBwYXJ0IDEKK29mIHRoaXMgbWFuIHBhZ2UuIElmIG1vcmUgY29udHJvbCBpcyBuZWVkZWQgb3ZlciB5b3VyIGhlbHAgbWVzc2FnZXMsCit0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZToKKy5zcAorLm5mCisuQiAjaW5jbHVkZSA8cG9wdC5oPgorLkJJICJ2b2lkIHBvcHRQcmludEhlbHAocG9wdENvbnRleHQgIiBjb24gIiwgRklMRSAqICIgZiAiLCBpbnQgIiBmbGFncyAiKTsKKy5CSSAidm9pZCBwb3B0UHJpbnRVc2FnZShwb3B0Q29udGV4dCAiIGNvbiAiLCBGSUxFICogIiBmICIsIGludCAiIGZsYWdzICIpOworLmZpCisuc3AKK1xmQnBvcHRQcmludEhlbHAoKVxmUiBkaXNwbGF5cyB0aGUgc3RhbmRhcmQgaGVscCBtZXNzYWdlIHRvIHRoZSBzdGRpbyBmaWxlCitkZXNjcmlwdG9yIGYsIHdoaWxlIFxmQnBvcHRQcmludFVzYWdlKClcZlIgZGlzcGxheXMgdGhlIHNob3J0ZXIgdXNhZ2UKK21lc3NhZ2UuIEJvdGggZnVuY3Rpb25zIGN1cnJlbnRseSBpZ25vcmUgdGhlIFxmQmZsYWdzXGZSIGFyZ3VtZW50OyBpdCBpcwordGhlcmUgdG8gYWxsb3cgZnV0dXJlIGNoYW5nZXMuCisuc3AKKy5TSCAiRVJST1IgSEFORExJTkciCitBbGwgb2YgdGhlIHBvcHQgZnVuY3Rpb25zIHRoYXQgY2FuIHJldHVybiBlcnJvcnMgcmV0dXJuIGludGVnZXJzLiAKK1doZW4gYW4gZXJyb3Igb2NjdXJzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuIFRoZSAKK2ZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBlcnJvciBjb2RlcyB0aGF0IG9jY3VyOgorLnNwCisubmYKKy5CICIgICAgIEVycm9yICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uIgorLkJSICJQT1BUX0VSUk9SX05PQVJHICAgICAgICIgIkFyZ3VtZW50IG1pc3NpbmcgZm9yIGFuIG9wdGlvbi4iCisuQlIgIlBPUFRfRVJST1JfQkFET1BUICAgICAgIiAiT3B0aW9uJ3MgYXJndW1lbnQgY291bGRuJ3QgYmUgcGFyc2VkLiIKKy5CUiAiUE9QVF9FUlJPUl9PUFRTVE9PREVFUCAiICJPcHRpb24gYWxpYXNpbmcgbmVzdGVkIHRvbyBkZWVwbHkuIgorLkJSICJQT1BUX0VSUk9SX0JBRFFVT1RFICAgICIgIlF1b3RhdGlvbnMgZG8gbm90IG1hdGNoLiIKKy5CUiAiUE9QVF9FUlJPUl9CQUROVU1CRVIgICAiICJPcHRpb24gY291bGRuJ3QgYmUgY29udmVydGVkIHRvIG51bWJlci4iCisuQlIgIlBPUFRfRVJST1JfT1ZFUkZMT1cgICAgIiAiQSBnaXZlbiBudW1iZXIgd2FzIHRvbyBiaWcgb3Igc21hbGwuIgorLmZpCisuc3AKK0hlcmUgaXMgYSBtb3JlIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgZWFjaCBlcnJvcjoKKy5zcAorLlRQCisuQiBQT1BUX0VSUk9SX05PQVJHCitBbiBvcHRpb24gdGhhdCByZXF1aXJlcyBhbiBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kCitsaW5lLCBidXQgbm8gYXJndW1lbnQgd2FzIGdpdmVuLiBUaGlzIGNhbiBiZSByZXR1cm5lZCBvbmx5IGJ5CisuQlIgcG9wdEdldE5leHRPcHQoKSAuCisuc3AKKy5UUAorLkIgUE9QVF9FUlJPUl9CQURPUFQKKy5SSSAiQW4gb3B0aW9uIHdhcyBzcGVjaWZpZWQgaW4gIiBhcmd2ICIgYnV0IGlzIG5vdCBpbiB0aGUgb3B0aW9uIAorLlJCICJ0YWJsZS4gVGhpcyBlcnJvciBjYW4gYmUgcmV0dXJuZWQgb25seSBmcm9tICIgcG9wdEdldE5leHRPcHQoKSAuCisuc3AKKy5UUAorLkIgUE9QVF9FUlJPUl9PUFRTVE9PREVFUAorQSBzZXQgb2Ygb3B0aW9uIGFsaWFzZXMgaXMgbmVzdGVkIHRvbyBkZWVwbHkuIEN1cnJlbnRseSwgcG9wdCAKK2ZvbGxvd3Mgb3B0aW9ucyBvbmx5IDEwIGxldmVscyB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbi4gT25seSAKKy5CUiBwb3B0R2V0TmV4dE9wdCgpICIgY2FuIHJldHVybiB0aGlzIGVycm9yLiIKKy5zcAorLlRQCisuQiBQT1BUX0VSUk9SX0JBRFFVT1RFCitBIHBhcnNlZCBzdHJpbmcgaGFzIGEgcXVvdGF0aW9uIG1pc21hdGNoIChzdWNoIGFzIGEgc2luZ2xlIHF1b3RhdGlvbgorLlJCICJtYXJrKS4gIiBwb3B0UGFyc2VBcmd2U3RyaW5nKCkgIiwgIiBwb3B0UmVhZENvbmZpZ0ZpbGUoKSAiLCBvciAiCisuQlIgcG9wdFJlYWREZWZhdWx0Q29uZmlnKCkgIiBjYW4gcmV0dXJuIHRoaXMgZXJyb3IuIgorLnNwCisuVFAKKy5CIFBPUFRfRVJST1JfQkFETlVNQkVSCitBIGNvbnZlcnNpb24gZnJvbSBhIHN0cmluZyB0byBhIG51bWJlciAoaW50IG9yIGxvbmcpIGZhaWxlZCBkdWUKK3RvIHRoZSBzdHJpbmcgY29udGFpbmluZyBub25udW1lcmljIGNoYXJhY3RlcnMuIFRoaXMgb2NjdXJzIHdoZW4KKy5CUiBwb3B0R2V0TmV4dE9wdCgpICIgaXMgcHJvY2Vzc2luZyBhbiBhcmd1bWVudCBvZiB0eXBlICIgCisuQlIgUE9QVF9BUkdfSU5UICIsICIgUE9QVF9BUkdfU0hPUlQgIiwgIiBQT1BUX0FSR19MT05HICIsICIgUE9QVF9BUkdfTE9OR0xPTkcgIiwgIgorLlJCIFBPUFRfQVJHX0ZMT0FUICIsIG9yICIgUE9QVF9BUkdfRE9VQkxFICIuIiAgCisuc3AKKy5UUAorLkIgUE9QVF9FUlJPUl9PVkVSRkxPVworQSBzdHJpbmctdG8tbnVtYmVyIGNvbnZlcnNpb24gZmFpbGVkIGJlY2F1c2UgdGhlIG51bWJlciB3YXMgdG9vCisuUkIgImxhcmdlIG9yIHRvbyBzbWFsbC4gTGlrZSAiIFBPUFRfRVJST1JfQkFETlVNQkVSICIsIHRoaXMgZXJyb3IgCisuUkIgImNhbiBvY2N1ciBvbmx5IHdoZW4gIiBwb3B0R2V0TmV4dE9wdCgpICIgaXMgcHJvY2Vzc2luZyBhbiAiCisuUkIgImFyZ3VtZW50IG9mIHR5cGUgIiBQT1BUX0FSR19JTlQgIiwgIiBQT1BUX0FSR19TSE9SVCAiLCAiIFBPUFRfQVJHX0xPTkcgIiwgIiBQT1BUX0FSR19MT05HTE9ORyAiLCAiCisuUkIgUE9QVF9BUkdfRkxPQVQgIiwgb3IgIiBQT1BUX0FSR19ET1VCTEUgIi4iICAKKy5zcAorLlRQCisuQiBQT1BUX0VSUk9SX0VSUk5PCisuUkkgIkEgc3lzdGVtIGNhbGwgcmV0dXJuZWQgd2l0aCBhbiBlcnJvciwgYW5kICIgZXJybm8gIiBzdGlsbCAKK2NvbnRhaW5zIHRoZSBlcnJvciBmcm9tIHRoZSBzeXN0ZW0gY2FsbC4gQm90aCAKKy5CUiBwb3B0UmVhZENvbmZpZ0ZpbGUoKSAiIGFuZCAiIHBvcHRSZWFkRGVmYXVsdENvbmZpZygpICIgY2FuICIKK3JldHVybiB0aGlzIGVycm9yLgorLnNwCisuUFAKK1R3byBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBtYWtlIGl0IGVhc3kgZm9yIGFwcGxpY2F0aW9ucyB0byBwcm92aWRlCitnb29kIGVycm9yIG1lc3NhZ2VzLgorLkhQCisubmYKKy5CSSAiY29uc3QgY2hhciAqY29uc3QgcG9wdFN0cmVycm9yKGNvbnN0IGludCAiIGVycm9yICIpOyIKKy5maQorVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHBvcHQgZXJyb3IgY29kZSBhbmQgcmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nCisuUkIgInRoZSBlcnJvciwganVzdCBhcyB3aXRoIHRoZSBzdGFuZGFyZCAiIHN0cmVycm9yKCkgIiBmdW5jdGlvbi4iCisuUFAKKy5IUAorLm5mCisuQkkgImNvbnN0IGNoYXIgKiBwb3B0QmFkT3B0aW9uKHBvcHRDb250ZXh0ICIgY29uICIsIGludCAiIGZsYWdzICIpOyIKKy5maQorLlJCICJJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgIiBwb3B0R2V0TmV4dE9wdCgpICIsIHRoaXMgZnVuY3Rpb24gIgorLlJJICJyZXR1cm5zIHRoZSBvcHRpb24gdGhhdCBjYXVzZWQgdGhlIGVycm9yLiBJZiB0aGUgIiBmbGFncyAiIGFyZ3VtZW50IgorLlJCICJpcyBzZXQgdG8gIiBQT1BUX0JBRE9QVElPTl9OT0FMSUFTICIsIHRoZSBvdXRlcm1vc3Qgb3B0aW9uIGlzICIKKy5SSSAicmV0dXJuZWQuIE90aGVyd2lzZSwgIiBmbGFncyAiIHNob3VsZCBiZSAwLCBhbmQgdGhlIG9wdGlvbiB0aGF0IGlzICIKK3JldHVybmVkIG1heSBoYXZlIGJlZW4gc3BlY2lmaWVkIHRocm91Z2ggYW4gYWxpYXMuCisuUFAKK1RoZXNlIHR3byBmdW5jdGlvbnMgbWFrZSBwb3B0IGVycm9yIGhhbmRsaW5nIHRyaXZpYWwgZm9yIG1vc3QgCithcHBsaWNhdGlvbnMuIFdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQgZnJvbSBtb3N0IG9mIHRoZSBmdW5jdGlvbnMsIAorYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkIGFsb25nIHdpdGggdGhlIGVycm9yIHN0cmluZyBmcm9tIAorLkJSIHBvcHRTdHJlcnJvcigpICIuIFdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLCAiCitjb2RlIHNpbWlsaWFyIHRvIHRoZSBmb2xsb3dpbmcgZGlzcGxheXMgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZToKKy5zcAorLm5mCitmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xcbiIsCisgICAgICAgIHBvcHRCYWRPcHRpb24ob3B0Q29uLCBQT1BUX0JBRE9QVElPTl9OT0FMSUFTKSwKKyAgICAgICAgcG9wdFN0cmVycm9yKHJjKSk7CisuZmkKKy5zcAorLlNIICJPUFRJT04gQUxJQVNJTkciCisuUkIgIk9uZSBvZiB0aGUgcHJpbWFyeSBiZW5lZml0cyBvZiB1c2luZyBwb3B0IG92ZXIgIiBnZXRvcHQoKSAiIGlzIHRoZSAiCithYmlsaXR5IHRvIHVzZSBvcHRpb24gYWxpYXNpbmcuIFRoaXMgbGV0cyB0aGUgdXNlciBzcGVjaWZ5IG9wdGlvbnMgdGhhdCAKK3BvcHQgZXhwYW5kcyBpbnRvIG90aGVyIG9wdGlvbnMgd2hlbiB0aGV5IGFyZSBzcGVjaWZpZWQuIElmIHRoZSBzdGFuZGFyZCAKKy5SQiAiZ3JlcCBwcm9ncmFtIG1hZGUgdXNlIG9mIHBvcHQsIHVzZXJzIGNvdWxkIGFkZCBhICIgLS10ZXh0ICIgb3B0aW9uICIKKy5SQiAidGhhdCBleHBhbmRlZCB0byAiICItaSAtbiAtRSAtMiIgIiB0byBsZXQgdGhlbSBtb3JlIGVhc2lseSBmaW5kICIKK2luZm9ybWF0aW9uIGluIHRleHQgZmlsZXMuCisuc3AKKy5TUyAiMS4gU1BFQ0lGWUlORyBBTElBU0VTIgorLlJJICJBbGlhc2VzIGFyZSBub3JtYWxseSBzcGVjaWZpZWQgaW4gdHdvIHBsYWNlczogIiAvZXRjL3BvcHQgCisuUkIgImFuZCB0aGUgIiAucG9wdCAiIGZpbGUgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSAoZm91bmQgdGhyb3VnaCAiCisuUkIgInRoZSAiIEhPTUUgIiBlbnZpcm9ubWVudCB2YXJpYWJsZSkuIEJvdGggZmlsZXMgaGF2ZSB0aGUgc2FtZSBmb3JtYXQsICIKK2FuIGFyYml0cmFyeSBudW1iZXIgb2YgbGluZXMgZm9ybWF0dGVkIGxpa2UgdGhpczoKKy5zcAorLklCIGFwcG5hbWUgIiBhbGlhcyAiIG5ld29wdGlvbiAiIiAiIGV4cGFuc2lvbiIKKy5zcAorLlJJICJUaGUgIiBhcHBuYW1lICIgaXMgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uLCB3aGljaCBtdXN0IGJlIHRoZSAiCisuUkkgInNhbWUgYXMgdGhlICIgbmFtZSAiIHBhcmFtZXRlciBwYXNzZWQgdG8gIgorLkJSIHBvcHRHZXRDb250ZXh0KCkgIi4gVGhpcyBhbGxvd3MgZWFjaCBmaWxlIHRvIHNwZWNpZnkgYWxpYXNlcyBmb3IgIgorLlJCICJtdWx0aXBsZSBwcm9ncmFtcy4gVGhlICIgYWxpYXMgIiBrZXl3b3JkIHNwZWNpZmllcyB0aGF0IGFuIGFsaWFzIGlzICIKK2JlaW5nIGRlZmluZWQ7IGN1cnJlbnRseSBwb3B0IGNvbmZpZ3VyYXRpb24gZmlsZXMgc3VwcG9ydCBvbmx5IGFsaWFzZXMsIGJ1dAorb3RoZXIgYWJpbGl0aWVzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBUaGUgbmV4dCBvcHRpb24gaXMgdGhlIG9wdGlvbgordGhhdCBzaG91bGQgYmUgYWxpYXNlZCwgYW5kIGl0IG1heSBiZSBlaXRoZXIgYSBzaG9ydCBvciBhIGxvbmcgb3B0aW9uLiBUaGUKK3Jlc3Qgb2YgdGhlIGxpbmUgc3BlY2lmaWVzIHRoZSBleHBhbnNpb24gZm9yIHRoZSBhbGlhcy4gSXQgaXMgcGFyc2VkIAorc2ltaWxhcmx5IHRvIGEgc2hlbGwgY29tbWFuZCwgd2hpY2ggYWxsb3dzIFxcLCAiLCBhbmQgJyB0byBiZSB1c2VkIGZvciAKK3F1b3RpbmcuIElmIGEgYmFja3NsYXNoIGlzIHRoZSBmaW5hbCBjaGFyYWN0ZXIgb24gYSBsaW5lLCB0aGUgbmV4dCBsaW5lIAoraW4gdGhlIGZpbGUgaXMgYXNzdW1lZCB0byBiZSBhIGxvZ2ljYWwgY29udGludWF0aW9uIG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcgCit0aGUgYmFja3NsYXNoLCBqdXN0IGFzIGluIHNoZWxsLgorLnNwCisuUkIgIlRoZSBmb2xsb3dpbmcgZW50cnkgd291bGQgYWRkIGEgIiAtLXRleHQgIiBvcHRpb24gdG8gdGhlIGdyZXAgY29tbWFuZCwgIgorYXMgc3VnZ2VzdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzZWN0aW9uLgorLnNwCisuQiAiZ3JlcCBhbGlhcyAtLXRleHQgLWkgLW4gLUUgLTIiCisuU1MgIjIuIEVOQUJMSU5HIEFMSUFTRVMiCisuUkIgIkFuIGFwcGxpY2F0aW9uIG11c3QgZW5hYmxlIGFsaWFzIGV4cGFuc2lvbiBmb3IgYSAiIHBvcHRDb250ZXh0IAorLlJCICJiZWZvcmUgY2FsbGluZyAiIHBvcHRHZXROZXh0QXJnKCkgIiBmb3IgdGhlIGZpcnN0IHRpbWUuIFRoZXJlIGFyZSAiCit0aHJlZSBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgYWxpYXNlcyBmb3IgYSBjb250ZXh0OgorLkhQCisubmYKKy5CSSAiaW50IHBvcHRSZWFkRGVmYXVsdENvbmZpZyhwb3B0Q29udGV4dCAiIGNvbiAiLCBpbnQgIiBmbGFncyAiKTsiCisuZmkKKy5SSSAiVGhpcyBmdW5jdGlvbiByZWFkcyBhbGlhc2VzIGZyb20gIiAvZXRjL3BvcHQgIiBhbmQgdGhlICIKKy5CUiAucG9wdCAiIGZpbGUgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gQ3VycmVudGx5LCAiCisuSVIgZmxhZ3MgIiBzaG91bGQgYmUgIgorLkJSIE5VTEwgIiwgYXMgaXQgaXMgcHJvdmlkZWQgb25seSBmb3IgZnV0dXJlIGV4cGFuc2lvbi4iCisuUFAKKy5IUAorLm5mCisuQkkgImludCBwb3B0UmVhZENvbmZpZ0ZpbGUocG9wdENvbnRleHQgIiBjb24gIiwgY2hhciAqICIgZm4gIik7IgorLmZpCisuUkkgIlRoZSBmaWxlIHNwZWNpZmllZCBieSAiIGZuICIgaXMgb3BlbmVkIGFuZCBwYXJzZWQgYXMgYSBwb3B0ICIKK2NvbmZpZ3VyYXRpb24gZmlsZS4gVGhpcyBhbGxvd3MgcHJvZ3JhbXMgdG8gdXNlIHByb2dyYW0tc3BlY2lmaWMgCitjb25maWd1cmF0aW9uIGZpbGVzLgorLlBQCisuSFAKKy5uZgorLkJJICJpbnQgcG9wdEFkZEFsaWFzKHBvcHRDb250ZXh0ICIgY29uICIsIHN0cnVjdCBwb3B0QWxpYXMgIiBhbGlhcyAiLAorLkJJICIgICAgICAgICAgICAgICAgIGludCAiIGZsYWdzICIpOyIKKy5maQorT2NjYXNpb25hbGx5LCBwcm9jZXNzZXMgd2FudCB0byBzcGVjaWZ5IGFsaWFzZXMgd2l0aG91dCBoYXZpbmcgdG8KK3JlYWQgdGhlbSBmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlLiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBuZXcgYWxpYXMKKy5SSSAidG8gYSBjb250ZXh0LiBUaGUgIiBmbGFncyAiIGFyZ3VtZW50IHNob3VsZCBiZSAwLCBhcyBpdCBpcyAiCitjdXJyZW50bHkgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24uIFRoZSBuZXcgYWxpYXMgaXMgc3BlY2lmaWVkIAorLlJCICJhcyBhICIgInN0cnVjdCBwb3B0QWxpYXMiICIsIHdoaWNoIGlzIGRlZmluZWQgYXM6IgorLnNwCisubmYKK3N0cnVjdCBwb3B0QWxpYXMgeworICAgICBjb25zdCBjaGFyICogbG9uZ05hbWU7IC8qIG1heSBiZSBOVUxMICovCisgICAgIGNoYXIgc2hvcnROYW1lOyAvKiBtYXkgYmUgJ1xcMCcgKi8KKyAgICAgaW50IGFyZ2M7CisgICAgIGNvbnN0IGNoYXIgKiogYXJndjsgLyogbXVzdCBiZSBmcmVlKClhYmxlICovCit9OworLmZpCisuc3AKKy5SSSAiVGhlIGZpcnN0IHR3byBlbGVtZW50cywgIiBsb25nTmFtZSAiIGFuZCAiIHNob3J0TmFtZSAiLCBzcGVjaWZ5ICIKKy5SSSAidGhlIG9wdGlvbiB0aGF0IGlzIGFsaWFzZWQuIFRoZSBmaW5hbCB0d28sICIgYXJnYyAiIGFuZCAiIGFyZ3YgIiwiCitkZWZpbmUgdGhlIGV4cGFuc2lvbiB0byB1c2Ugd2hlbiB0aGUgYWxpYXNlcyBvcHRpb24gaXMgZW5jb3VudGVyZWQuCisuUFAKKy5TSCAiUEFSU0lORyBBUkdVTUVOVCBTVFJJTkdTIgorQWx0aG91Z2ggcG9wdCBpcyB1c3VhbGx5IHVzZWQgZm9yIHBhcnNpbmcgYXJndW1lbnRzIGFscmVhZHkgZGl2aWRlZCBpbnRvCisuUkkgImFuICIgYXJndiAiLXN0eWxlIGFycmF5LCBzb21lIHByb2dyYW1zIG5lZWQgdG8gcGFyc2Ugc3RyaW5ncyB0aGF0ICIKK2FyZSBmb3JtYXR0ZWQgaWRlbnRpY2FsbHkgdG8gY29tbWFuZCBsaW5lcy4gVG8gZmFjaWxpdGF0ZSB0aGlzLCBwb3B0IAorcHJvdmlkZXMgYSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MsIAordXNpbmcgcnVsZXMgc2ltaWxpYXIgdG8gbm9ybWFsIHNoZWxsIHBhcnNpbmcuCisuc3AKKy5uZgorLkIgIiNpbmNsdWRlIDxwb3B0Lmg+IgorLkJJICJpbnQgcG9wdFBhcnNlQXJndlN0cmluZyhjaGFyICogIiBzICIsIGludCAqICIgYXJnY1B0ciAiLAorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqKiAiIGFyZ3ZQdHIgIik7IgorLkJJICJpbnQgcG9wdER1cEFyZ3YoaW50ICIgYXJnYyAiLCBjb25zdCBjaGFyICoqICIgYXJndiAiLCBpbnQgKiAiIGFyZ2NQdHIgIiwKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiogIiBhcmd2UHRyICIpOyIKKy5maQorLnNwCisuUkkgIlRoZSBzdHJpbmcgcyBpcyBwYXJzZWQgaW50byBhbiAiIGFyZ3YgIi1zdHlsZSBhcnJheS4gVGhlIGludGVnZXIgIgorLlJJICJwb2ludGVkIHRvIGJ5IHRoZSAiIGFyZ2NQdHIgIiBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyAiCisuUkkgInBhcnNlZCwgYW5kIHRoZSBmaW5hbCAiIGFyZ3ZQdHIgIiBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIgorbmV3bHkgY3JlYXRlZCBhcnJheS4KKy5SQiAiVGhlIHJvdXRpbmUgIiBwb3B0RHVwQXJndigpICIgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIGNvcHkgb2YgYW4gZXhpc3RpbmcgIgorYXJndW1lbnQgYXJyYXkuCisuc3AKKy5SSSAiVGhlICIgYXJndlB0ciAKKy5SQiAiY3JlYXRlZCBieSAiIHBvcHRQYXJzZUFyZ3ZTdHJpbmcoKSAiIG9yICIgcG9wdER1cEFyZ3YoKSAiIGlzIHN1aXRhYmxlIHRvIHBhc3MgZGlyZWN0bHkgIgorLlJCICJ0byAiIHBvcHRHZXRDb250ZXh0KCkgLgorQm90aCByb3V0aW5lcyByZXR1cm4gYSBzaW5nbGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGNvbnRpZ3VvdXMKKy5SQiAiYmxvY2sgb2Ygc3RvcmFnZSBhbmQgc2hvdWxkIGJlICIgZnJlZSgpICJlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyIKK2ZpbmlzaGVkIHdpdGggdGhlIHN0b3JhZ2UuCisuU0ggIkhBTkRMSU5HIEVYVFJBIEFSR1VNRU5UUyIKK1NvbWUgYXBwbGljYXRpb25zIGltcGxlbWVudCB0aGUgZXF1aXZhbGVudCBvZiBvcHRpb24gYWxpYXNpbmcgYnV0IG5lZWQKKy5SQiAidG8gZG8gc28gdGhyb3VnaCBzcGVjaWFsIGxvZ2ljLiBUaGUgIiBwb3B0U3R1ZmZBcmdzKCkgIiBmdW5jdGlvbiAiCithbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gaW5zZXJ0IG5ldyBhcmd1bWVudHMgaW50byB0aGUgY3VycmVudCAKKy5CUiBwb3B0Q29udGV4dCAuCisuc3AKKy5uZgorLkIgIiNpbmNsdWRlIDxwb3B0Lmg+IgorLkJJICJpbnQgcG9wdFN0dWZmQXJncyhwb3B0Q29udGV4dCAiY29uICIsIGNvbnN0IGNoYXIgKiogIiBhcmd2ICIpOyIKKy5maQorLnNwCisuUkkgIlRoZSBwYXNzZWQgIiBhcmd2IAorLlJCICJtdXN0IGhhdmUgYSAiIE5VTEwgIiBwb2ludGVyIGFzIGl0cyBmaW5hbCBlbGVtZW50LiBXaGVuICIKKy5CUiBwb3B0R2V0TmV4dE9wdCgpICIgaXMgbmV4dCBjYWxsZWQsIHRoZSAiCisic3R1ZmZlZCIgYXJndW1lbnRzIGFyZSB0aGUgZmlyc3QgdG8gYmUgcGFyc2VkLiBwb3B0IHJldHVybnMgdG8gdGhlIAorbm9ybWFsIGFyZ3VtZW50cyBvbmNlIGFsbCB0aGUgc3R1ZmZlZCBhcmd1bWVudHMgaGF2ZSBiZWVuIGV4aGF1c3RlZC4KKy5TSCAiRVhBTVBMRSIKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSAicm9iaW4iIAord2hpY2ggYXBwZWFycyBpbiBDaGFwdGVyIDE1IG9mIHRoZSB0ZXh0IGNpdGVkIGJlbG93LiAgUm9iaW4gaGFzIAorYmVlbiBzdHJpcHBlZCBvZiBldmVyeXRoaW5nIGJ1dCBpdHMgYXJndW1lbnQtcGFyc2luZyBsb2dpYywgc2xpZ2h0bHkgCityZXdvcmtlZCwgYW5kIHJlbmFtZWQgInBhcnNlLiIgSXQgbWF5IHByb3ZlIHVzZWZ1bCBpbiBpbGx1c3RyYXRpbmcgCithdCBsZWFzdCBzb21lIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgZXh0cmVtZWx5IHJpY2ggcG9wdCBsaWJyYXJ5LgorLnNwCisubmYKKyNpbmNsdWRlIDxwb3B0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwordm9pZCB1c2FnZShwb3B0Q29udGV4dCBvcHRDb24sIGludCBleGl0Y29kZSwgY2hhciAqZXJyb3IsIGNoYXIgKmFkZGwpIHsKKyAgICBwb3B0UHJpbnRVc2FnZShvcHRDb24sIHN0ZGVyciwgMCk7CisgICAgaWYgKGVycm9yKSBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgZXJyb3IsIGFkZGwpOworICAgIGV4aXQoZXhpdGNvZGUpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgICBjaGFyICAgIGM7ICAgICAgICAgICAgLyogdXNlZCBmb3IgYXJndW1lbnQgcGFyc2luZyAqLworICAgaW50ICAgICBpID0gMDsgICAgICAgIC8qIHVzZWQgZm9yIHRyYWNraW5nIG9wdGlvbnMgKi8KKyAgIGNoYXIgICAgKnBvcnRuYW1lOworICAgaW50ICAgICBzcGVlZCA9IDA7ICAgIC8qIHVzZWQgaW4gYXJndW1lbnQgcGFyc2luZyB0byBzZXQgc3BlZWQgKi8KKyAgIGludCAgICAgcmF3ID0gMDsgICAgICAvKiByYXcgbW9kZT8gKi8gCisgICBpbnQgICAgIGo7CisgICBjaGFyICAgIGJ1ZltCVUZTSVorMV07CisgICBwb3B0Q29udGV4dCBvcHRDb247ICAgLyogY29udGV4dCBmb3IgcGFyc2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucyAqLworCisgICBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb25zVGFibGVbXSA9IHsKKyAgICAgIHsgImJwcyIsICdiJywgUE9QVF9BUkdfSU5ULCAmc3BlZWQsIDAsCisJInNpZ25hbGluZyByYXRlIGluIGJpdHMtcGVyLXNlY29uZCIsICJCUFMiIH0sCisgICAgICB7ICJjcm5sIiwgJ2MnLCAwLCAwLCAnYycsCisJImV4cGFuZCBjciBjaGFyYWN0ZXJzIHRvIGNyL2xmIHNlcXVlbmNlcyIsIE5VTEwgfSwKKyAgICAgIHsgImh3ZmxvdyIsICdoJywgMCwgMCwgJ2gnLAorCSJ1c2UgaGFyZHdhcmUgKFJUUy9DVFMpIGZsb3cgY29udHJvbCIsIE5VTEwgfSwKKyAgICAgIHsgIm5vZmxvdyIsICduJywgMCwgMCwgJ24nLAorCSJ1c2Ugbm8gZmxvdyBjb250cm9sIiwgTlVMTCB9LAorICAgICAgeyAicmF3IiwgJ3InLCAwLCAmcmF3LCAwLAorCSJkb24ndCBwZXJmb3JtIGFueSBjaGFyYWN0ZXIgY29udmVyc2lvbnMiLCBOVUxMIH0sCisgICAgICB7ICJzd2Zsb3ciLCAncycsIDAsIDAsICdzJywKKwkidXNlIHNvZnR3YXJlIChYT04vWE9GKSBmbG93IGNvbnRyb2wiLCBOVUxMIH0gLAorICAgICAgUE9QVF9BVVRPSEVMUAorICAgICAgeyBOVUxMLCAwLCAwLCBOVUxMLCAwIH0KKyAgICB9OworCisgICBvcHRDb24gPSBwb3B0R2V0Q29udGV4dChOVUxMLCBhcmdjLCBhcmd2LCBvcHRpb25zVGFibGUsIDApOworICAgcG9wdFNldE90aGVyT3B0aW9uSGVscChvcHRDb24sICJbT1BUSU9OU10qIDxwb3J0PiIpOworCisgICBpZiAoYXJnYyA8IDIpIHsKKwlwb3B0UHJpbnRVc2FnZShvcHRDb24sIHN0ZGVyciwgMCk7CisJZXhpdCgxKTsKKyAgIH0KKworICAgLyogTm93IGRvIG9wdGlvbnMgcHJvY2Vzc2luZywgZ2V0IHBvcnRuYW1lICovCisgICB3aGlsZSAoKGMgPSBwb3B0R2V0TmV4dE9wdChvcHRDb24pKSA+PSAwKSB7CisgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICBjYXNlICdjJzogCisgICAgICAgICAgYnVmW2krK10gPSAnYyc7ICAgICAgICAgCisgICAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAnaCc6IAorICAgICAgICAgIGJ1ZltpKytdID0gJ2gnOworICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgIGJ1ZltpKytdID0gJ3MnOworICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgIGJ1ZltpKytdID0gJ24nOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgfQorICAgcG9ydG5hbWUgPSBwb3B0R2V0QXJnKG9wdENvbik7CisgICBpZigocG9ydG5hbWUgPT0gTlVMTCkgfHwgIShwb3B0UGVla0FyZyhvcHRDb24pID09IE5VTEwpKQorICAgICAgdXNhZ2Uob3B0Q29uLCAxLCAiU3BlY2lmeSBhIHNpbmdsZSBwb3J0IiwgIi5lLmcuLCAvZGV2L2N1YTAiKTsKKworICAgaWYgKGMgPCAtMSkgeworICAgICAgLyogYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIG9wdGlvbiBwcm9jZXNzaW5nICovCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xcbiIsIAorICAgICAgICAgICAgICBwb3B0QmFkT3B0aW9uKG9wdENvbiwgUE9QVF9CQURPUFRJT05fTk9BTElBUyksCisgICAgICAgICAgICAgIHBvcHRTdHJlcnJvcihjKSk7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKworICAgLyogUHJpbnQgb3V0IG9wdGlvbnMsIHBvcnRuYW1lIGNob3NlbiAqLworICAgcHJpbnRmKCJPcHRpb25zICBjaG9zZW46ICIpOworICAgZm9yKGogPSAwOyBqIDwgaSA7IGorKykKKyAgICAgIHByaW50ZigiLSVjICIsIGJ1ZltqXSk7CisgICBpZihyYXcpIHByaW50ZigiLXIgIik7CisgICBpZihzcGVlZCkgcHJpbnRmKCItYiAlZCAiLCBzcGVlZCk7CisgICBwcmludGYoIlxcblBvcnRuYW1lIGNob3NlbjogJXNcXG4iLCBwb3J0bmFtZSk7CisKKyAgIHBvcHRGcmVlQ29udGV4dChvcHRDb24pOworICAgZXhpdCgwKTsKK30KKy5maQorLnNwCitSUE0sIGEgcG9wdWxhciBMaW51eCBwYWNrYWdlIG1hbmFnZW1lbnQgcHJvZ3JhbSwgbWFrZXMgaGVhdnkgdXNlCitvZiBwb3B0J3MgZmVhdHVyZXMuIE1hbnkgb2YgaXRzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYXJlIGltcGxlbWVudGVkCit0aHJvdWdoIHBvcHQgYWxpYXNlcywgd2hpY2ggbWFrZXMgUlBNIGFuIGV4Y2VsbGVudCBleGFtcGxlIG9mIGhvdyB0bwordGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHBvcHQgbGlicmFyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUlBNLCBzZWUKK2h0dHA6Ly93d3cucnBtLm9yZy4gVGhlIHBvcHQgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIHRlc3QKK3Byb2dyYW0ocykgd2hpY2ggdXNlIGFsbCBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIHBvcHQgbGlicmFyaWVzIGluCit2YXJpb3VzIHdheXMuIElmIGEgZmVhdHVyZSBpc24ndCB3b3JraW5nIGZvciB5b3UsIHRoZSBwb3B0IHRlc3QgY29kZQoraXMgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suCisuU0ggQlVHUworTm9uZSBwcmVzZW50bHkga25vd24uCisuU0ggQVVUSE9SCitFcmlrIFcuIFRyb2FuIDxld3RAcmVkaGF0LmNvbT4KKy5QUAorVGhpcyBtYW4gcGFnZSBpcyBkZXJpdmVkIGluIHBhcnQgZnJvbQorLklSICJMaW51eCBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCIKK2J5IE1pY2hhZWwgSy4gSm9obnNvbiBhbmQgRXJpayBXLiBUcm9hbiwgQ29weXJpZ2h0IChjKSAxOTk4IGJ5IEFkZGlzb24KK1dlc2xleSBMb25nbWFuLCBJbmMuLCBhbmQgaW5jbHVkZWQgaW4gdGhlIHBvcHQgZG9jdW1lbnRhdGlvbiB3aXRoIHRoZQorcGVybWlzc2lvbiBvZiB0aGUgUHVibGlzaGVyIGFuZCB0aGUgYXBwcmVjaWF0aW9uIG9mIHRoZSBBdXRob3JzLgorLlBQCitUaGFua3MgdG8gUm9iZXJ0IEx5bmNoIGZvciBoaXMgZXh0ZW5zaXZlIHdvcmsgb24gdGhpcyBtYW4gcGFnZS4KKy5TSCAiU0VFIEFMU08iCisuQlIgZ2V0b3B0ICgzKQorLnNwCisuSVIgIkxpbnV4IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IiAiLCBieSBNaWNoYWVsIEsuIEpvaG5zb24gYW5kICIKK0VyaWsgVy4gVHJvYW4gKEFkZGlzb24tV2VzbGV5LCAxOTk4OyBJU0JOIDAtMjAxLTMwODIxLTUpLCBDaGFwdGVyIDI0LgorLnNwCisuQlIgcG9wdC5wcyAiIGlzIGEgUG9zdHNjcmlwdCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSBjaXRlZCBib29rICIKK2NoYXB0ZXIuIEl0IGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGFyY2hpdmUgZm9yIHBvcHQgYXZhaWxhYmxlIGF0OiAKK2Z0cDovL2Z0cC5ycG0ub3JnL3B1Yi9ycG0uCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG9wdC5jIGIvcG9wdC0xLjE2L3BvcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWMzOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvcHQuYwpAQCAtMCwwICsxLDE3ODcgQEAKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcZmlsZSBwb3B0L3BvcHQuYworICovCisKKy8qIChDKSAxOTk4LTIwMDIgUmVkIEhhdCwgSW5jLiAtLSBMaWNlbnNpbmcgZGV0YWlscyBhcmUgaW4gdGhlIENPUFlJTkcKKyAgIGZpbGUgYWNjb21wYW55aW5nIHBvcHQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIGF2YWlsYWJsZSBmcm9tCisgICBmdHA6Ly9mdHAucnBtLm9yZy9wdWIvcnBtL2Rpc3QgKi8KKworI3VuZGVmCU1ZREVCVUcKKworI2luY2x1ZGUgInN5c3RlbS5oIgorCisjaWYgZGVmaW5lZChfX0xDTElOVF9fKQorLypALWRlY2x1bmRlZiAtZXhwb3J0aGVhZGVyIEAqLworZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbChjb25zdCBjaGFyICpucHRyLCAvKkBudWxsQCovIGNoYXIgKiplbmRwdHIsCisJCWludCBiYXNlKQorCS8qQG1vZGlmaWVzICplbmRwdHJAKi87CisvKkA9ZGVjbHVuZGVmID1leHBvcnRoZWFkZXIgQCovCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkxPQVRfSAorI2luY2x1ZGUgPGZsb2F0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJwb3B0aW50LmgiCisKKyNpZmRlZglNWURFQlVHCisvKkB1bmNoZWNrZWRAKi8KK2ludCBfcG9wdF9kZWJ1ZyA9IDA7CisjZW5kaWYKKworLypAdW5jaGVja2VkQCovCit1bnNpZ25lZCBpbnQgX3BvcHRBcmdNYXNrID0gUE9QVF9BUkdfTUFTSzsKKy8qQHVuY2hlY2tlZEAqLwordW5zaWduZWQgaW50IF9wb3B0R3JvdXBNYXNrID0gUE9QVF9HUk9VUF9NQVNLOworCisjaWYgIWRlZmluZWQoSEFWRV9TVFJFUlJPUikgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKK3N0YXRpYyBjaGFyICogc3RyZXJyb3IoaW50IGVycm5vKQoreworICAgIGV4dGVybiBpbnQgc3lzX25lcnI7CisgICAgZXh0ZXJuIGNoYXIgKiBzeXNfZXJybGlzdFtdOworCisgICAgaWYgKCgwIDw9IGVycm5vKSAmJiAoZXJybm8gPCBzeXNfbmVycikpCisJcmV0dXJuIHN5c19lcnJsaXN0W2Vycm5vXTsKKyAgICBlbHNlCisJcmV0dXJuIFBPUFRfKCJ1bmtub3duIGVycm5vIik7Cit9CisjZW5kaWYKKworI2lmZGVmIE1ZREVCVUcKKy8qQHVudXNlZEAqLworc3RhdGljIHZvaWQgcHJ0Y29uKGNvbnN0IGNoYXIgKm1zZywgcG9wdENvbnRleHQgY29uKQoreworICAgIGlmIChtc2cpIGZwcmludGYoc3RkZXJyLCAiJXMiLCBtc2cpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRjb24gJXAgb3MgJXAgbmV4dENoYXJBcmcgXCIlc1wiIG5leHRBcmcgXCIlc1wiIGFyZ3ZbJWRdIFwiJXNcIlxuIiwKKwljb24sIGNvbi0+b3MsCisJKGNvbi0+b3MtPm5leHRDaGFyQXJnID8gY29uLT5vcy0+bmV4dENoYXJBcmcgOiAiIiksCisJKGNvbi0+b3MtPm5leHRBcmcgPyBjb24tPm9zLT5uZXh0QXJnIDogIiIpLAorCWNvbi0+b3MtPm5leHQsCisJKGNvbi0+b3MtPmFyZ3YgJiYgY29uLT5vcy0+YXJndltjb24tPm9zLT5uZXh0XQorCQk/IGNvbi0+b3MtPmFyZ3ZbY29uLT5vcy0+bmV4dF0gOiAiIikpOworfQorI2VuZGlmCisKK3ZvaWQgcG9wdFNldEV4ZWNQYXRoKHBvcHRDb250ZXh0IGNvbiwgY29uc3QgY2hhciAqIHBhdGgsIGludCBhbGxvd0Fic29sdXRlKQoreworICAgIGNvbi0+ZXhlY1BhdGggPSBfZnJlZShjb24tPmV4ZWNQYXRoKTsKKyAgICBjb24tPmV4ZWNQYXRoID0geHN0cmR1cChwYXRoKTsKKyAgICBjb24tPmV4ZWNBYnNvbHV0ZSA9IGFsbG93QWJzb2x1dGU7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBpbnZva2VDYWxsYmFja3NQUkUocG9wdENvbnRleHQgY29uLCBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCkKKwkvKkBnbG9iYWxzIGludGVybmFsU3RhdGVAKi8KKwkvKkBtb2RpZmllcyBpbnRlcm5hbFN0YXRlQCovCit7CisgICAgaWYgKG9wdCAhPSBOVUxMKQorICAgIGZvciAoOyBvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnOyBvcHQrKykgeworCXBvcHRBcmcgYXJnID0geyAucHRyID0gb3B0LT5hcmcgfTsKKwlpZiAoYXJnLnB0cikKKwlzd2l0Y2ggKHBvcHRBcmdUeXBlKG9wdCkpIHsKKwljYXNlIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEU6CS8qIFJlY3Vyc2Ugb24gaW5jbHVkZWQgc3ViLXRhYmxlcy4gKi8KKwkgICAgcG9wdFN1YnN0aXR1dGVIZWxwSTE4Tihhcmcub3B0KTsJLyogWFhYIHNpZGUgZWZmZWN0cyAqLworCSAgICBpbnZva2VDYWxsYmFja3NQUkUoY29uLCBhcmcub3B0KTsKKwkgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJY2FzZSBQT1BUX0FSR19DQUxMQkFDSzoJCS8qIFBlcmZvcm0gY2FsbGJhY2suICovCisJICAgIGlmICghQ0JGX0lTU0VUKG9wdCwgUFJFKSkKKwkJLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisvKkAtbm9lZmZlY3R1bmNvbiBAKi8JLyogWFhYIG5vIGtub3duIHdheSB0byBhbm5vdGF0ZSAoKnZlY3RvcikgY2FsbHMuICovCisJICAgIGFyZy5jYihjb24sIFBPUFRfQ0FMTEJBQ0tfUkVBU09OX1BSRSwgTlVMTCwgTlVMTCwgb3B0LT5kZXNjcmlwKTsKKy8qQD1ub2VmZmVjdHVuY29uIEAqLworCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBpbnZva2VDYWxsYmFja3NQT1NUKHBvcHRDb250ZXh0IGNvbiwgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQpCisJLypAZ2xvYmFscyBpbnRlcm5hbFN0YXRlQCovCisJLypAbW9kaWZpZXMgaW50ZXJuYWxTdGF0ZUAqLworeworICAgIGlmIChvcHQgIT0gTlVMTCkKKyAgICBmb3IgKDsgb3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZzsgb3B0KyspIHsKKwlwb3B0QXJnIGFyZyA9IHsgLnB0ciA9IG9wdC0+YXJnIH07CisJaWYgKGFyZy5wdHIpCisJc3dpdGNoIChwb3B0QXJnVHlwZShvcHQpKSB7CisJY2FzZSBQT1BUX0FSR19JTkNMVURFX1RBQkxFOgkvKiBSZWN1cnNlIG9uIGluY2x1ZGVkIHN1Yi10YWJsZXMuICovCisJICAgIHBvcHRTdWJzdGl0dXRlSGVscEkxOE4oYXJnLm9wdCk7CS8qIFhYWCBzaWRlIGVmZmVjdHMgKi8KKwkgICAgaW52b2tlQ2FsbGJhY2tzUE9TVChjb24sIGFyZy5vcHQpOworCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwljYXNlIFBPUFRfQVJHX0NBTExCQUNLOgkJLyogUGVyZm9ybSBjYWxsYmFjay4gKi8KKwkgICAgaWYgKCFDQkZfSVNTRVQob3B0LCBQT1NUKSkKKwkJLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisvKkAtbm9lZmZlY3R1bmNvbiBAKi8JLyogWFhYIG5vIGtub3duIHdheSB0byBhbm5vdGF0ZSAoKnZlY3RvcikgY2FsbHMuICovCisJICAgIGFyZy5jYihjb24sIFBPUFRfQ0FMTEJBQ0tfUkVBU09OX1BPU1QsIE5VTEwsIE5VTEwsIG9wdC0+ZGVzY3JpcCk7CisvKkA9bm9lZmZlY3R1bmNvbiBAKi8KKwkgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgaW52b2tlQ2FsbGJhY2tzT1BUSU9OKHBvcHRDb250ZXh0IGNvbiwKKwkJCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG15T3B0LAorCQkJCS8qQG51bGxAKi8gY29uc3Qgdm9pZCAqIG15RGF0YSwgaW50IHNob3J0eSkKKwkvKkBnbG9iYWxzIGludGVybmFsU3RhdGVAKi8KKwkvKkBtb2RpZmllcyBpbnRlcm5hbFN0YXRlQCovCit7CisgICAgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBjYm9wdCA9IE5VTEw7CisgICAgcG9wdEFyZyBjYmFyZyA9IHsgLnB0ciA9IE5VTEwgfTsKKworICAgIGlmIChvcHQgIT0gTlVMTCkKKyAgICBmb3IgKDsgb3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZzsgb3B0KyspIHsKKwlwb3B0QXJnIGFyZyA9IHsgLnB0ciA9IG9wdC0+YXJnIH07CisJc3dpdGNoIChwb3B0QXJnVHlwZShvcHQpKSB7CisJY2FzZSBQT1BUX0FSR19JTkNMVURFX1RBQkxFOgkvKiBSZWN1cnNlIG9uIGluY2x1ZGVkIHN1Yi10YWJsZXMuICovCisJICAgIHBvcHRTdWJzdGl0dXRlSGVscEkxOE4oYXJnLm9wdCk7CS8qIFhYWCBzaWRlIGVmZmVjdHMgKi8KKwkgICAgaWYgKG9wdC0+YXJnICE9IE5VTEwpCisJCWludm9rZUNhbGxiYWNrc09QVElPTihjb24sIG9wdC0+YXJnLCBteU9wdCwgbXlEYXRhLCBzaG9ydHkpOworCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwljYXNlIFBPUFRfQVJHX0NBTExCQUNLOgkJLyogU2F2ZSBjYWxsYmFjayBpbmZvLiAqLworCSAgICBpZiAoQ0JGX0lTU0VUKG9wdCwgU0tJUE9QVElPTikpCisJCS8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCSAgICBjYm9wdCA9IG9wdDsKKwkgICAgY2JhcmcucHRyID0gb3B0LT5hcmc7CisJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCWRlZmF1bHQ6CQkvKiBQZXJmb3JtIGNhbGxiYWNrIG9uIG1hdGNoaW5nIG9wdGlvbi4gKi8KKwkgICAgaWYgKGNib3B0ID09IE5VTEwgfHwgY2JhcmcuY2IgPT0gTlVMTCkKKwkJLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJICAgIGlmICgobXlPcHQtPnNob3J0TmFtZSAmJiBvcHQtPnNob3J0TmFtZSAmJiBzaG9ydHkgJiYKKwkJCW15T3B0LT5zaG9ydE5hbWUgPT0gb3B0LT5zaG9ydE5hbWUpCisJICAgICB8fCAobXlPcHQtPmxvbmdOYW1lICE9IE5VTEwgJiYgb3B0LT5sb25nTmFtZSAhPSBOVUxMICYmCisJCQkhc3RyY21wKG15T3B0LT5sb25nTmFtZSwgb3B0LT5sb25nTmFtZSkpKQorCSAgICB7CWNvbnN0IHZvaWQgKmNiRGF0YSA9IChjYm9wdC0+ZGVzY3JpcCA/IGNib3B0LT5kZXNjcmlwIDogbXlEYXRhKTsKKy8qQC1ub2VmZmVjdHVuY29uIEAqLwkvKiBYWFggbm8ga25vd24gd2F5IHRvIGFubm90YXRlICgqdmVjdG9yKSBjYWxscy4gKi8KKwkJY2JhcmcuY2IoY29uLCBQT1BUX0NBTExCQUNLX1JFQVNPTl9PUFRJT04sCisJCQlteU9wdCwgY29uLT5vcy0+bmV4dEFyZywgY2JEYXRhKTsKKy8qQD1ub2VmZmVjdHVuY29uIEAqLworCQkvKiBUZXJtaW5hdGUgKHVubGVzcyBleHBsY2l0bHkgY29udGludWluZykuICovCisJCWlmICghQ0JGX0lTU0VUKGNib3B0LCBDT05USU5VRSkpCisJCSAgICByZXR1cm47CisJICAgIH0KKwkgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJfQorICAgIH0KK30KKworcG9wdENvbnRleHQgcG9wdEdldENvbnRleHQoY29uc3QgY2hhciAqIG5hbWUsIGludCBhcmdjLCBjb25zdCBjaGFyICoqIGFyZ3YsCisJCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdGlvbnMsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgICBwb3B0Q29udGV4dCBjb24gPSBtYWxsb2Moc2l6ZW9mKCpjb24pKTsKKworICAgIGlmIChjb24gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKyAgICBtZW1zZXQoY29uLCAwLCBzaXplb2YoKmNvbikpOworCisgICAgY29uLT5vcyA9IGNvbi0+b3B0aW9uU3RhY2s7CisgICAgY29uLT5vcy0+YXJnYyA9IGFyZ2M7CisvKkAtZGVwZW5kZW50dHJhbnMgLWFzc2lnbmV4cG9zZUAqLwkvKiBGSVg6IFcyRE8/ICovCisgICAgY29uLT5vcy0+YXJndiA9IGFyZ3Y7CisvKkA9ZGVwZW5kZW50dHJhbnMgPWFzc2lnbmV4cG9zZUAqLworICAgIGNvbi0+b3MtPmFyZ2IgPSBOVUxMOworCisgICAgaWYgKCEoZmxhZ3MgJiBQT1BUX0NPTlRFWFRfS0VFUF9GSVJTVCkpCisJY29uLT5vcy0+bmV4dCA9IDE7CQkvKiBza2lwIGFyZ3ZbMF0gKi8KKworICAgIGNvbi0+bGVmdG92ZXJzID0gY2FsbG9jKCAoc2l6ZV90KShhcmdjICsgMSksIHNpemVvZigqY29uLT5sZWZ0b3ZlcnMpICk7CisvKkAtZGVwZW5kZW50dHJhbnMgLWFzc2lnbmV4cG9zZUAqLwkvKiBGSVg6IFcyRE8/ICovCisgICAgY29uLT5vcHRpb25zID0gb3B0aW9uczsKKy8qQD1kZXBlbmRlbnR0cmFucyA9YXNzaWduZXhwb3NlQCovCisgICAgY29uLT5hbGlhc2VzID0gTlVMTDsKKyAgICBjb24tPm51bUFsaWFzZXMgPSAwOworICAgIGNvbi0+ZmxhZ3MgPSBmbGFnczsKKyAgICBjb24tPmV4ZWNzID0gTlVMTDsKKyAgICBjb24tPm51bUV4ZWNzID0gMDsKKyAgICBjb24tPmZpbmFsQXJndkFsbG9jZWQgPSBhcmdjICogMjsKKyAgICBjb24tPmZpbmFsQXJndiA9IGNhbGxvYyggKHNpemVfdCljb24tPmZpbmFsQXJndkFsbG9jZWQsIHNpemVvZigqY29uLT5maW5hbEFyZ3YpICk7CisgICAgY29uLT5leGVjQWJzb2x1dGUgPSAxOworICAgIGNvbi0+YXJnX3N0cmlwID0gTlVMTDsKKworICAgIGlmIChnZXRlbnYoIlBPU0lYTFlfQ09SUkVDVCIpIHx8IGdldGVudigiUE9TSVhfTUVfSEFSREVSIikpCisJY29uLT5mbGFncyB8PSBQT1BUX0NPTlRFWFRfUE9TSVhNRUhBUkRFUjsKKworICAgIGlmIChuYW1lKQorCWNvbi0+YXBwTmFtZSA9IHhzdHJkdXAobmFtZSk7CisKKyAgICBpbnZva2VDYWxsYmFja3NQUkUoY29uLCBjb24tPm9wdGlvbnMpOworCisgICAgcmV0dXJuIGNvbjsKK30KKworc3RhdGljIHZvaWQgY2xlYW5PU0UoLypAc3BlY2lhbEAqLyBzdHJ1Y3Qgb3B0aW9uU3RhY2tFbnRyeSAqb3MpCisJLypAdXNlcyBvcyBAKi8KKwkvKkByZWxlYXNlcyBvcy0+bmV4dEFyZywgb3MtPmFyZ3YsIG9zLT5hcmdiIEAqLworCS8qQG1vZGlmaWVzIG9zIEAqLworeworICAgIG9zLT5uZXh0QXJnID0gX2ZyZWUob3MtPm5leHRBcmcpOworICAgIG9zLT5hcmd2ID0gX2ZyZWUob3MtPmFyZ3YpOworICAgIG9zLT5hcmdiID0gUEJNX0ZSRUUob3MtPmFyZ2IpOworfQorCit2b2lkIHBvcHRSZXNldENvbnRleHQocG9wdENvbnRleHQgY29uKQoreworICAgIGludCBpOworCisgICAgaWYgKGNvbiA9PSBOVUxMKSByZXR1cm47CisgICAgd2hpbGUgKGNvbi0+b3MgPiBjb24tPm9wdGlvblN0YWNrKSB7CisJY2xlYW5PU0UoY29uLT5vcy0tKTsKKyAgICB9CisgICAgY29uLT5vcy0+YXJnYiA9IFBCTV9GUkVFKGNvbi0+b3MtPmFyZ2IpOworICAgIGNvbi0+b3MtPmN1cnJBbGlhcyA9IE5VTEw7CisgICAgY29uLT5vcy0+bmV4dENoYXJBcmcgPSBOVUxMOworICAgIGNvbi0+b3MtPm5leHRBcmcgPSBOVUxMOworICAgIGNvbi0+b3MtPm5leHQgPSAxOwkJCS8qIHNraXAgYXJndlswXSAqLworCisgICAgY29uLT5udW1MZWZ0b3ZlcnMgPSAwOworICAgIGNvbi0+bmV4dExlZnRvdmVyID0gMDsKKyAgICBjb24tPnJlc3RMZWZ0b3ZlciA9IDA7CisgICAgY29uLT5kb0V4ZWMgPSBOVUxMOworCisgICAgaWYgKGNvbi0+ZmluYWxBcmd2ICE9IE5VTEwpCisgICAgZm9yIChpID0gMDsgaSA8IGNvbi0+ZmluYWxBcmd2Q291bnQ7IGkrKykgeworLypALXVucXVhbGlmaWVkdHJhbnNAKi8JCS8qIEZJWDogdHlwZWRlZiBkb3VibGUgaW5kaXJlY3Rpb24uICovCisJY29uLT5maW5hbEFyZ3ZbaV0gPSBfZnJlZShjb24tPmZpbmFsQXJndltpXSk7CisvKkA9dW5xdWFsaWZpZWR0cmFuc0AqLworICAgIH0KKworICAgIGNvbi0+ZmluYWxBcmd2Q291bnQgPSAwOworICAgIGNvbi0+YXJnX3N0cmlwID0gUEJNX0ZSRUUoY29uLT5hcmdfc3RyaXApOworLypALW51bGxzdGF0ZUAqLwkvKiBGSVg6IGNvbi0+ZmluYWxBcmd2ICE9IE5VTEwgKi8KKyAgICByZXR1cm47CisvKkA9bnVsbHN0YXRlQCovCit9CisKKy8qIE9ubHkgb25lIG9mIGxvbmdOYW1lLCBzaG9ydE5hbWUgc2hvdWxkIGJlIHNldCwgbm90IGJvdGguICovCitzdGF0aWMgaW50IGhhbmRsZUV4ZWMoLypAc3BlY2lhbEAqLyBwb3B0Q29udGV4dCBjb24sCisJCS8qQG51bGxAKi8gY29uc3QgY2hhciAqIGxvbmdOYW1lLCBjaGFyIHNob3J0TmFtZSkKKwkvKkB1c2VzIGNvbi0+ZXhlY3MsIGNvbi0+bnVtRXhlY3MsIGNvbi0+ZmxhZ3MsIGNvbi0+ZG9FeGVjLAorCQljb24tPmZpbmFsQXJndiwgY29uLT5maW5hbEFyZ3ZBbGxvY2VkLCBjb24tPmZpbmFsQXJndkNvdW50IEAqLworCS8qQG1vZGlmaWVzIGNvbiBAKi8KK3sKKyAgICBwb3B0SXRlbSBpdGVtOworICAgIGludCBpOworCisgICAgaWYgKGNvbi0+ZXhlY3MgPT0gTlVMTCB8fCBjb24tPm51bUV4ZWNzIDw9IDApIC8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwlyZXR1cm4gMDsKKworICAgIGZvciAoaSA9IGNvbi0+bnVtRXhlY3MgLSAxOyBpID49IDA7IGktLSkgeworCWl0ZW0gPSBjb24tPmV4ZWNzICsgaTsKKwlpZiAobG9uZ05hbWUgJiYgIShpdGVtLT5vcHRpb24ubG9uZ05hbWUgJiYKKwkJCSFzdHJjbXAobG9uZ05hbWUsIGl0ZW0tPm9wdGlvbi5sb25nTmFtZSkpKQorCSAgICBjb250aW51ZTsKKwllbHNlIGlmIChzaG9ydE5hbWUgIT0gaXRlbS0+b3B0aW9uLnNob3J0TmFtZSkKKwkgICAgY29udGludWU7CisJYnJlYWs7CisgICAgfQorICAgIGlmIChpIDwgMCkgcmV0dXJuIDA7CisKKworICAgIGlmIChjb24tPmZsYWdzICYgUE9QVF9DT05URVhUX05PX0VYRUMpCisJcmV0dXJuIDE7CisKKyAgICBpZiAoY29uLT5kb0V4ZWMgPT0gTlVMTCkgeworCWNvbi0+ZG9FeGVjID0gY29uLT5leGVjcyArIGk7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogV2UgYWxyZWFkeSBoYXZlIGFuIGV4ZWMgdG8gZG87IHJlbWVtYmVyIHRoaXMgb3B0aW9uIGZvciBuZXh0CisgICAgICAgdGltZSAncm91bmQgKi8KKyAgICBpZiAoKGNvbi0+ZmluYWxBcmd2Q291bnQgKyAxKSA+PSAoY29uLT5maW5hbEFyZ3ZBbGxvY2VkKSkgeworCWNvbi0+ZmluYWxBcmd2QWxsb2NlZCArPSAxMDsKKwljb24tPmZpbmFsQXJndiA9IHJlYWxsb2MoY29uLT5maW5hbEFyZ3YsCisJCQlzaXplb2YoKmNvbi0+ZmluYWxBcmd2KSAqIGNvbi0+ZmluYWxBcmd2QWxsb2NlZCk7CisgICAgfQorCisgICAgaSA9IGNvbi0+ZmluYWxBcmd2Q291bnQrKzsKKyAgICBpZiAoY29uLT5maW5hbEFyZ3YgIT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworICAgIHsJY2hhciAqcyAgPSBtYWxsb2MoKGxvbmdOYW1lID8gc3RybGVuKGxvbmdOYW1lKSA6IDApICsgc2l6ZW9mKCItLSIpKTsKKwlpZiAocyAhPSBOVUxMKSB7CS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwkgICAgY29uLT5maW5hbEFyZ3ZbaV0gPSBzOworCSAgICAqcysrID0gJy0nOworCSAgICBpZiAobG9uZ05hbWUpCisJCXMgPSBzdHBjcHkoIHN0cGNweShzLCAiLSIpLCBsb25nTmFtZSk7CisJICAgIGVsc2UKKwkJKnMrKyA9IHNob3J0TmFtZTsKKwkgICAgKnMgPSAnXDAnOworCX0gZWxzZQorCSAgICBjb24tPmZpbmFsQXJndltpXSA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKy8qKgorICogQ29tcGFyZSBsb25nIG9wdGlvbiBmb3IgZXF1YWxpdHksIGFkanVzdGluZyBmb3IgUE9QVF9BUkdGTEFHX1RPR0dMRS4KKyAqIEBwYXJhbSBvcHQgICAgICAgICAgIG9wdGlvbgorICogQHBhcmFtIGxvbmdOYW1lCWFyZyBvcHRpb24KKyAqIEBwYXJhbSBsb25nTmFtZUxlbglhcmcgb3B0aW9uIGxlbmd0aAorICogQHJldHVybgkJZG9lcyBsb25nIG9wdGlvbiBtYXRjaD8KKyAqLworc3RhdGljIGludAorbG9uZ09wdGlvblN0cmNtcChjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogbG9uZ05hbWUsIHNpemVfdCBsb25nTmFtZUxlbikKKwkvKkAqLworeworICAgIGNvbnN0IGNoYXIgKiBvcHRMb25nTmFtZSA9IG9wdC0+bG9uZ05hbWU7CisgICAgaW50IHJjOworCisgICAgaWYgKG9wdExvbmdOYW1lID09IE5VTEwgfHwgbG9uZ05hbWUgPT0gTlVMTCkJLyogWFhYIGNhbid0IGhlcHBlbiAqLworCXJldHVybiAwOworCisgICAgaWYgKEZfSVNTRVQob3B0LCBUT0dHTEUpKSB7CisJaWYgKG9wdExvbmdOYW1lWzBdID09ICduJyAmJiBvcHRMb25nTmFtZVsxXSA9PSAnbycpIHsKKwkgICAgb3B0TG9uZ05hbWUgKz0gc2l6ZW9mKCJubyIpIC0gMTsKKwkgICAgaWYgKG9wdExvbmdOYW1lWzBdID09ICctJykKKwkJb3B0TG9uZ05hbWUrKzsKKwl9CisJaWYgKGxvbmdOYW1lWzBdID09ICduJyAmJiBsb25nTmFtZVsxXSA9PSAnbycpIHsKKwkgICAgbG9uZ05hbWUgKz0gc2l6ZW9mKCJubyIpIC0gMTsKKwkgICAgbG9uZ05hbWVMZW4gLT0gc2l6ZW9mKCJubyIpIC0gMTsKKwkgICAgaWYgKGxvbmdOYW1lWzBdID09ICctJykgeworCQlsb25nTmFtZSsrOworCQlsb25nTmFtZUxlbi0tOworCSAgICB9CisJfQorICAgIH0KKyAgICByYyA9IChpbnQpKHN0cmxlbihvcHRMb25nTmFtZSkgPT0gbG9uZ05hbWVMZW4pOworICAgIGlmIChyYykKKwlyYyA9IChpbnQpKHN0cm5jbXAob3B0TG9uZ05hbWUsIGxvbmdOYW1lLCBsb25nTmFtZUxlbikgPT0gMCk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiBPbmx5IG9uZSBvZiBsb25nTmFtZSwgc2hvcnROYW1lIG1heSBiZSBzZXQgYXQgYSB0aW1lICovCitzdGF0aWMgaW50IGhhbmRsZUFsaWFzKC8qQHNwZWNpYWxAKi8gcG9wdENvbnRleHQgY29uLAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBsb25nTmFtZSwgc2l6ZV90IGxvbmdOYW1lTGVuLAorCQljaGFyIHNob3J0TmFtZSwKKwkJLypAZXhwb3NlZEAqLyAvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBuZXh0QXJnKQorCS8qQHVzZXMgY29uLT5hbGlhc2VzLCBjb24tPm51bUFsaWFzZXMsIGNvbi0+b3B0aW9uU3RhY2ssIGNvbi0+b3MsCisJCWNvbi0+b3MtPmN1cnJBbGlhcywgY29uLT5vcy0+Y3VyckFsaWFzLT5vcHRpb24ubG9uZ05hbWUgQCovCisJLypAbW9kaWZpZXMgY29uIEAqLworeworICAgIHBvcHRJdGVtIGl0ZW0gPSBjb24tPm9zLT5jdXJyQWxpYXM7CisgICAgaW50IHJjOworICAgIGludCBpOworCisgICAgaWYgKGl0ZW0pIHsKKwlpZiAobG9uZ05hbWUgJiYgaXRlbS0+b3B0aW9uLmxvbmdOYW1lICE9IE5VTEwKKwkgJiYgbG9uZ09wdGlvblN0cmNtcCgmaXRlbS0+b3B0aW9uLCBsb25nTmFtZSwgbG9uZ05hbWVMZW4pKQorCSAgICByZXR1cm4gMDsKKwllbHNlCisJaWYgKHNob3J0TmFtZSAmJiBzaG9ydE5hbWUgPT0gaXRlbS0+b3B0aW9uLnNob3J0TmFtZSkKKwkgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKGNvbi0+YWxpYXNlcyA9PSBOVUxMIHx8IGNvbi0+bnVtQWxpYXNlcyA8PSAwKSAvKiBYWFggY2FuJ3QgaGFwcGVuICovCisJcmV0dXJuIDA7CisKKyAgICBmb3IgKGkgPSBjb24tPm51bUFsaWFzZXMgLSAxOyBpID49IDA7IGktLSkgeworCWl0ZW0gPSBjb24tPmFsaWFzZXMgKyBpOworCWlmIChsb25nTmFtZSkgeworCSAgICBpZiAoaXRlbS0+b3B0aW9uLmxvbmdOYW1lID09IE5VTEwpCisJCWNvbnRpbnVlOworCSAgICBpZiAoIWxvbmdPcHRpb25TdHJjbXAoJml0ZW0tPm9wdGlvbiwgbG9uZ05hbWUsIGxvbmdOYW1lTGVuKSkKKwkJY29udGludWU7CisJfSBlbHNlIGlmIChzaG9ydE5hbWUgIT0gaXRlbS0+b3B0aW9uLnNob3J0TmFtZSkKKwkgICAgY29udGludWU7CisJYnJlYWs7CisgICAgfQorICAgIGlmIChpIDwgMCkgcmV0dXJuIDA7CisKKyAgICBpZiAoKGNvbi0+b3MgLSBjb24tPm9wdGlvblN0YWNrICsgMSkgPT0gUE9QVF9PUFRJT05fREVQVEgpCisJcmV0dXJuIFBPUFRfRVJST1JfT1BUU1RPT0RFRVA7CisKKyAgICBpZiAobG9uZ05hbWUgPT0gTlVMTCAmJiBuZXh0QXJnICE9IE5VTEwgJiYgKm5leHRBcmcgIT0gJ1wwJykKKwljb24tPm9zLT5uZXh0Q2hhckFyZyA9IG5leHRBcmc7CisKKyAgICBjb24tPm9zKys7CisgICAgY29uLT5vcy0+bmV4dCA9IDA7CisgICAgY29uLT5vcy0+c3R1ZmZlZCA9IDA7CisgICAgY29uLT5vcy0+bmV4dEFyZyA9IE5VTEw7CisgICAgY29uLT5vcy0+bmV4dENoYXJBcmcgPSBOVUxMOworICAgIGNvbi0+b3MtPmN1cnJBbGlhcyA9IGNvbi0+YWxpYXNlcyArIGk7CisgICAgewljb25zdCBjaGFyICoqIGF2OworCWludCBhYyA9IGNvbi0+b3MtPmN1cnJBbGlhcy0+YXJnYzsKKwkvKiBBcHBlbmQgLS1mb289YmFyIGFyZyB0byBhbGlhcyBhcmd2IGFycmF5IChpZiBwcmVzZW50KS4gKi8gCisJaWYgKGxvbmdOYW1lICYmIG5leHRBcmcgIT0gTlVMTCAmJiAqbmV4dEFyZyAhPSAnXDAnKSB7CisJICAgIGF2ID0gbWFsbG9jKChhYyArIDEgKyAxKSAqIHNpemVvZigqYXYpKTsKKwkgICAgaWYgKGF2ICE9IE5VTEwpIHsJLyogWFhYIHdvbid0IGhhcHBlbi4gKi8KKwkJZm9yIChpID0gMDsgaSA8IGFjOyBpKyspIHsKKwkJICAgIGF2W2ldID0gY29uLT5vcy0+Y3VyckFsaWFzLT5hcmd2W2ldOworCQl9CisJCWF2W2FjKytdID0gbmV4dEFyZzsKKwkJYXZbYWNdID0gTlVMTDsKKwkgICAgfSBlbHNlCS8qIFhYWCByZXZlcnQgdG8gb2xkIHBvcHQgYmVoYXZpb3IgaWYgbWFsbG9jIGZhaWxzLiAqLworCQlhdiA9IGNvbi0+b3MtPmN1cnJBbGlhcy0+YXJndjsKKwl9IGVsc2UKKwkgICAgYXYgPSBjb24tPm9zLT5jdXJyQWxpYXMtPmFyZ3Y7CisJcmMgPSBwb3B0RHVwQXJndihhYywgYXYsICZjb24tPm9zLT5hcmdjLCAmY29uLT5vcy0+YXJndik7CisJaWYgKGF2ICE9IE5VTEwgJiYgYXYgIT0gY29uLT5vcy0+Y3VyckFsaWFzLT5hcmd2KQorCSAgICBmcmVlKGF2KTsKKyAgICB9CisgICAgY29uLT5vcy0+YXJnYiA9IE5VTEw7CisKKyAgICByZXR1cm4gKHJjID8gcmMgOiAxKTsKK30KKworLyoqCisgKiBSZXR1cm4gYWJzb2x1dGUgcGF0aCB0byBleGVjdXRhYmxlIGJ5IHNlYXJjaGluZyBQQVRILgorICogQHBhcmFtIGFyZ3YwCQluYW1lIG9mIGV4ZWN1dGFibGUKKyAqIEByZXR1cm4JCShtYWxsb2MnZCkgYWJzb2x1dGUgcGF0aCB0byBleGVjdXRhYmxlIChvciBOVUxMKQorICovCitzdGF0aWMgLypAbnVsbEAqLworY29uc3QgY2hhciAqIGZpbmRQcm9ncmFtUGF0aCgvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBhcmd2MCkKKwkvKkAqLworeworICAgIGNoYXIgKnBhdGggPSBOVUxMLCAqcyA9IE5VTEwsICpzZTsKKyAgICBjaGFyICp0ID0gTlVMTDsKKworICAgIGlmIChhcmd2MCA9PSBOVUxMKSByZXR1cm4gTlVMTDsJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCisgICAgLyogSWYgdGhlcmUgaXMgYSAvIGluIGFyZ3ZbMF0sIGl0IGhhcyB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoLiAqLworICAgIC8qIFhYWCBIbW1tLCB3aHkgbm90IGlmIChhcmd2MFswXSA9PSAnLycpIC4uLiBpbnN0ZWFkPyAqLworICAgIGlmIChzdHJjaHIoYXJndjAsICcvJykpCisJcmV0dXJuIHhzdHJkdXAoYXJndjApOworCisgICAgaWYgKChwYXRoID0gZ2V0ZW52KCJQQVRIIikpID09IE5VTEwgfHwgKHBhdGggPSB4c3RyZHVwKHBhdGgpKSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworCisgICAgLyogVGhlIHJldHVybiBidWZmZXIgaW4gdCBpcyBiaWcgZW5vdWdoIGZvciBhbnkgcGF0aC4gKi8KKyAgICBpZiAoKHQgPSBtYWxsb2Moc3RybGVuKHBhdGgpICsgc3RybGVuKGFyZ3YwKSArIHNpemVvZigiLyIpKSkgIT0gTlVMTCkKKyAgICBmb3IgKHMgPSBwYXRoOyBzICYmICpzOyBzID0gc2UpIHsKKworCS8qIFNuaXAgUEFUSCBlbGVtZW50IGludG8gW3Msc2UpLiAqLworCWlmICgoc2UgPSBzdHJjaHIocywgJzonKSkpCisJICAgICpzZSsrID0gJ1wwJzsKKworCS8qIEFwcGVuZCBhcmd2MCB0byBQQVRIIGVsZW1lbnQuICovCisJKHZvaWQpIHN0cGNweShzdHBjcHkoc3RwY3B5KHQsIHMpLCAiLyIpLCBhcmd2MCk7CisKKwkvKiBJZiBmaWxlIGlzIGV4ZWN1dGFibGUsIGJpbmdvISAqLworCWlmICghYWNjZXNzKHQsIFhfT0spKQorCSAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBJZiBubyBleGVjdXRhYmxlIHdhcyBmb3VuZCBpbiBQQVRILCByZXR1cm4gTlVMTC4gKi8KKy8qQC1jb21wZGVmQCovCisgICAgaWYgKCEocyAmJiAqcykgJiYgdCAhPSBOVUxMKQorCXQgPSBfZnJlZSh0KTsKKy8qQD1jb21wZGVmQCovCisvKkAtbW9kb2JzZXJ2ZXIgLW9ic2VydmVydHJhbnMgLXVzZWRlZiBAKi8KKyAgICBwYXRoID0gX2ZyZWUocGF0aCk7CisvKkA9bW9kb2JzZXJ2ZXIgPW9ic2VydmVydHJhbnMgPXVzZWRlZiBAKi8KKworICAgIHJldHVybiB0OworfQorCitzdGF0aWMgaW50IGV4ZWNDb21tYW5kKHBvcHRDb250ZXh0IGNvbikKKwkvKkBnbG9iYWxzIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgaW50ZXJuYWxTdGF0ZSBAKi8KK3sKKyAgICBwb3B0SXRlbSBpdGVtID0gY29uLT5kb0V4ZWM7CisgICAgcG9wdEFyZ3YgYXJndiA9IE5VTEw7CisgICAgaW50IGFyZ2MgPSAwOworICAgIGludCByYzsKKyAgICBpbnQgZWMgPSBQT1BUX0VSUk9SX0VSUk5POworCisgICAgaWYgKGl0ZW0gPT0gTlVMTCkgLypYWFggY2FuJ3QgaGFwcGVuKi8KKwlyZXR1cm4gUE9QVF9FUlJPUl9OT0FSRzsKKworICAgIGlmIChpdGVtLT5hcmd2ID09IE5VTEwgfHwgaXRlbS0+YXJnYyA8IDEgfHwKKwkoIWNvbi0+ZXhlY0Fic29sdXRlICYmIHN0cmNocihpdGVtLT5hcmd2WzBdLCAnLycpKSkKKwkgICAgcmV0dXJuIFBPUFRfRVJST1JfTk9BUkc7CisKKyAgICBhcmd2ID0gbWFsbG9jKHNpemVvZigqYXJndikgKgorCQkJKDYgKyBpdGVtLT5hcmdjICsgY29uLT5udW1MZWZ0b3ZlcnMgKyBjb24tPmZpbmFsQXJndkNvdW50KSk7CisgICAgaWYgKGFyZ3YgPT0gTlVMTCkgcmV0dXJuIFBPUFRfRVJST1JfTUFMTE9DOworCisgICAgaWYgKCFzdHJjaHIoaXRlbS0+YXJndlswXSwgJy8nKSAmJiBjb24tPmV4ZWNQYXRoICE9IE5VTEwpIHsKKwljaGFyICpzID0gbWFsbG9jKHN0cmxlbihjb24tPmV4ZWNQYXRoKSArIHN0cmxlbihpdGVtLT5hcmd2WzBdKSArIHNpemVvZigiLyIpKTsKKwlpZiAocykKKwkgICAgKHZvaWQpc3RwY3B5KHN0cGNweShzdHBjcHkocywgY29uLT5leGVjUGF0aCksICIvIiksIGl0ZW0tPmFyZ3ZbMF0pOworCisJYXJndlthcmdjXSA9IHM7CisgICAgfSBlbHNlCisJYXJndlthcmdjXSA9IGZpbmRQcm9ncmFtUGF0aChpdGVtLT5hcmd2WzBdKTsKKyAgICBpZiAoYXJndlthcmdjKytdID09IE5VTEwpIHsKKwllYyA9IFBPUFRfRVJST1JfTk9BUkc7CisJZ290byBleGl0OworICAgIH0KKworICAgIGlmIChpdGVtLT5hcmdjID4gMSkgeworCW1lbWNweShhcmd2ICsgYXJnYywgaXRlbS0+YXJndiArIDEsIHNpemVvZigqYXJndikgKiAoaXRlbS0+YXJnYyAtIDEpKTsKKwlhcmdjICs9IChpdGVtLT5hcmdjIC0gMSk7CisgICAgfQorCisgICAgaWYgKGNvbi0+ZmluYWxBcmd2ICE9IE5VTEwgJiYgY29uLT5maW5hbEFyZ3ZDb3VudCA+IDApIHsKKwltZW1jcHkoYXJndiArIGFyZ2MsIGNvbi0+ZmluYWxBcmd2LAorCQlzaXplb2YoKmFyZ3YpICogY29uLT5maW5hbEFyZ3ZDb3VudCk7CisJYXJnYyArPSBjb24tPmZpbmFsQXJndkNvdW50OworICAgIH0KKworICAgIGlmIChjb24tPmxlZnRvdmVycyAhPSBOVUxMICYmIGNvbi0+bnVtTGVmdG92ZXJzID4gMCkgeworCW1lbWNweShhcmd2ICsgYXJnYywgY29uLT5sZWZ0b3ZlcnMsIHNpemVvZigqYXJndikgKiBjb24tPm51bUxlZnRvdmVycyk7CisJYXJnYyArPSBjb24tPm51bUxlZnRvdmVyczsKKyAgICB9CisKKyAgICBhcmd2W2FyZ2NdID0gTlVMTDsKKworI2lmIGRlZmluZWQoaHB1eCkgfHwgZGVmaW5lZChfX2hwdXgpCisgICAgcmMgPSBzZXRyZXNnaWQoZ2V0Z2lkKCksIGdldGdpZCgpLC0xKTsKKyAgICBpZiAocmMpIGdvdG8gZXhpdDsKKyAgICByYyA9IHNldHJlc3VpZChnZXR1aWQoKSwgZ2V0dWlkKCksLTEpOworICAgIGlmIChyYykgZ290byBleGl0OworI2Vsc2UKKy8qCisgKiBYWFggIiAuLi4gb24gQlNEIHN5c3RlbXMgc2V0dWlkKCkgc2hvdWxkIGJlIHByZWZlcnJlZCBvdmVyIHNldHJldWlkKCkiCisgKiBYWFggCXNleicgVGltdXIgQmFrZXlldiA8bWNAYmF0LnJ1PgorICogWFhYCWZyb20gTm9yYmVydCBXYXJtdXRoIDxud2FybXV0aEBwcml2YXQuY2lyY3VsYXIuZGU+CisgKi8KKyNpZiBkZWZpbmVkKEhBVkVfU0VUVUlEKQorICAgIHJjID0gc2V0Z2lkKGdldGdpZCgpKTsKKyAgICBpZiAocmMpIGdvdG8gZXhpdDsKKyAgICByYyA9IHNldHVpZChnZXR1aWQoKSk7CisgICAgaWYgKHJjKSBnb3RvIGV4aXQ7CisjZWxpZiBkZWZpbmVkIChIQVZFX1NFVFJFVUlEKQorICAgIHJjID0gc2V0cmVnaWQoZ2V0Z2lkKCksIGdldGdpZCgpKTsKKyAgICBpZiAocmMpIGdvdG8gZXhpdDsKKyAgICByYyA9IHNldHJldWlkKGdldHVpZCgpLCBnZXR1aWQoKSk7CisgICAgaWYgKHJjKSBnb3RvIGV4aXQ7CisjZWxzZQorICAgIDsgLyogQ2FuJ3QgZHJvcCBwcml2aWxlZ2VzICovCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYJTVlERUJVRworaWYgKF9wb3B0X2RlYnVnKQorICAgIHsJcG9wdEFyZ3YgYXZwOworCWZwcmludGYoc3RkZXJyLCAiPT0+IGV4ZWN2cCglcykgYXJndlslZF06IiwgYXJndlswXSwgYXJnYyk7CisJZm9yIChhdnAgPSBhcmd2OyAqYXZwOyBhdnArKykKKwkgICAgZnByaW50ZihzdGRlcnIsICIgJyVzJyIsICphdnApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisjZW5kaWYKKworLypALW51bGxzdGF0ZUAqLworICAgIHJjID0gZXhlY3ZwKGFyZ3ZbMF0sIChjaGFyICpjb25zdCAqKWFyZ3YpOworLypAPW51bGxzdGF0ZUAqLworCitleGl0OgorICAgIGlmIChhcmd2KSB7CisgICAgICAgIGlmIChhcmd2WzBdKQorICAgICAgICAgICAgZnJlZSgodm9pZCAqKWFyZ3ZbMF0pOworICAgICAgICBmcmVlKGFyZ3YpOworICAgIH0KKyAgICByZXR1cm4gZWM7Cit9CisKKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqCitmaW5kT3B0aW9uKGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0LAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiBsb25nTmFtZSwgc2l6ZV90IGxvbmdOYW1lTGVuLAorCQljaGFyIHNob3J0TmFtZSwKKwkJLypAbnVsbEAqLyAvKkBvdXRAKi8gcG9wdENhbGxiYWNrVHlwZSAqIGNhbGxiYWNrLAorCQkvKkBudWxsQCovIC8qQG91dEAqLyBjb25zdCB2b2lkICoqIGNhbGxiYWNrRGF0YSwKKwkJdW5zaWduZWQgaW50IGFyZ0luZm8pCisJLypAbW9kaWZpZXMgKmNhbGxiYWNrLCAqY2FsbGJhY2tEYXRhICovCit7CisgICAgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBjYiA9IE5VTEw7CisgICAgcG9wdEFyZyBjYmFyZyA9IHsgLnB0ciA9IE5VTEwgfTsKKworICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIGEgc2luZ2xlIC0gaXMgZ2l2ZW4gKi8KKyAgICBpZiAoTEZfSVNTRVQoT05FREFTSCkgJiYgIXNob3J0TmFtZSAmJiAobG9uZ05hbWUgJiYgKmxvbmdOYW1lID09ICdcMCcpKQorCXNob3J0TmFtZSA9ICctJzsKKworICAgIGZvciAoOyBvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnOyBvcHQrKykgeworCXBvcHRBcmcgYXJnID0geyAucHRyID0gb3B0LT5hcmcgfTsKKworCXN3aXRjaCAocG9wdEFyZ1R5cGUob3B0KSkgeworCWNhc2UgUE9QVF9BUkdfSU5DTFVERV9UQUJMRToJLyogUmVjdXJzZSBvbiBpbmNsdWRlZCBzdWItdGFibGVzLiAqLworCXsgICBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdDI7CisKKwkgICAgcG9wdFN1YnN0aXR1dGVIZWxwSTE4Tihhcmcub3B0KTsJLyogWFhYIHNpZGUgZWZmZWN0cyAqLworCSAgICBpZiAoYXJnLnB0ciA9PSBOVUxMKSBjb250aW51ZTsJLyogWFhYIHByb2dyYW0gZXJyb3IgKi8KKwkgICAgb3B0MiA9IGZpbmRPcHRpb24oYXJnLm9wdCwgbG9uZ05hbWUsIGxvbmdOYW1lTGVuLCBzaG9ydE5hbWUsIGNhbGxiYWNrLAorCQkJICAgICAgY2FsbGJhY2tEYXRhLCBhcmdJbmZvKTsKKwkgICAgaWYgKG9wdDIgPT0gTlVMTCkgY29udGludWU7CisJICAgIC8qIFN1Yi10YWJsZSBkYXRhIHdpbGwgYmUgaW5oZWlyaXRlZCBpZiBubyBkYXRhIHlldC4gKi8KKy8qQC1vYnNlcnZlcnRyYW5zIC1kZXBlbmRlbnR0cmFucyBAKi8KKwkgICAgaWYgKGNhbGxiYWNrICYmICpjYWxsYmFjaworCSAgICAgJiYgY2FsbGJhY2tEYXRhICYmICpjYWxsYmFja0RhdGEgPT0gTlVMTCkKKwkJKmNhbGxiYWNrRGF0YSA9IG9wdC0+ZGVzY3JpcDsKKy8qQD1vYnNlcnZlcnRyYW5zID1kZXBlbmRlbnR0cmFucyBAKi8KKwkgICAgcmV0dXJuIG9wdDI7CisJfSAgIC8qQG5vdHJlYWNoZWRAKi8gLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJY2FzZSBQT1BUX0FSR19DQUxMQkFDSzoKKwkgICAgY2IgPSBvcHQ7CisJICAgIGNiYXJnLnB0ciA9IG9wdC0+YXJnOworCSAgICBjb250aW51ZTsKKwkgICAgLypAbm90cmVhY2hlZEAqLyAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwlkZWZhdWx0OgorCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwl9CisKKwlpZiAobG9uZ05hbWUgIT0gTlVMTCAmJiBvcHQtPmxvbmdOYW1lICE9IE5VTEwgJiYKKwkJICAgKCFMRl9JU1NFVChPTkVEQVNIKSB8fCBGX0lTU0VUKG9wdCwgT05FREFTSCkpICYmCisJCSAgIGxvbmdPcHRpb25TdHJjbXAob3B0LCBsb25nTmFtZSwgbG9uZ05hbWVMZW4pKQorCXsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmIChzaG9ydE5hbWUgJiYgc2hvcnROYW1lID09IG9wdC0+c2hvcnROYW1lKSB7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBpZiAob3B0LT5sb25nTmFtZSA9PSBOVUxMICYmICFvcHQtPnNob3J0TmFtZSkKKwlyZXR1cm4gTlVMTDsKKworLypALW1vZG9ic2VydmVyIC1tb2RzIEAqLworICAgIGlmIChjYWxsYmFjaykKKwkqY2FsbGJhY2sgPSAoY2IgPyBjYmFyZy5jYiA6IE5VTEwpOworICAgIGlmIChjYWxsYmFja0RhdGEpCisvKkAtb2JzZXJ2ZXJ0cmFucyAtZGVwZW5kZW50dHJhbnMgQCovCisJKmNhbGxiYWNrRGF0YSA9IChjYiAmJiAhQ0JGX0lTU0VUKGNiLCBJTkNfREFUQSkgPyBjYi0+ZGVzY3JpcCA6IE5VTEwpOworLypAPW9ic2VydmVydHJhbnMgPWRlcGVuZGVudHRyYW5zIEAqLworLypAPW1vZG9ic2VydmVyID1tb2RzIEAqLworCisgICAgcmV0dXJuIG9wdDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBmaW5kTmV4dEFyZygvKkBzcGVjaWFsQCovIHBvcHRDb250ZXh0IGNvbiwKKwkJdW5zaWduZWQgYXJneCwgaW50IGRlbGV0ZV9hcmcpCisJLypAdXNlcyBjb24tPm9wdGlvblN0YWNrLCBjb24tPm9zLAorCQljb24tPm9zLT5uZXh0LCBjb24tPm9zLT5hcmdiLCBjb24tPm9zLT5hcmdjLCBjb24tPm9zLT5hcmd2IEAqLworCS8qQG1vZGlmaWVzIGNvbiBAKi8KK3sKKyAgICBzdHJ1Y3Qgb3B0aW9uU3RhY2tFbnRyeSAqIG9zID0gY29uLT5vczsKKyAgICBjb25zdCBjaGFyICogYXJnOworCisgICAgZG8geworCWludCBpOworCWFyZyA9IE5VTEw7CisJd2hpbGUgKG9zLT5uZXh0ID09IG9zLT5hcmdjICYmIG9zID4gY29uLT5vcHRpb25TdGFjaykgb3MtLTsKKwlpZiAob3MtPm5leHQgPT0gb3MtPmFyZ2MgJiYgb3MgPT0gY29uLT5vcHRpb25TdGFjaykgYnJlYWs7CisJaWYgKG9zLT5hcmd2ICE9IE5VTEwpCisJZm9yIChpID0gb3MtPm5leHQ7IGkgPCBvcy0+YXJnYzsgaSsrKSB7CisvKkAtc2l6ZW9mdHlwZUAqLworCSAgICBpZiAob3MtPmFyZ2IgJiYgUEJNX0lTU0VUKGksIG9zLT5hcmdiKSkKKwkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKwkgICAgaWYgKCpvcy0+YXJndltpXSA9PSAnLScpCisJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CisJICAgIGlmICgtLWFyZ3ggPiAwKQorCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworCSAgICBhcmcgPSBvcy0+YXJndltpXTsKKwkgICAgaWYgKGRlbGV0ZV9hcmcpIHsKKwkJaWYgKG9zLT5hcmdiID09IE5VTEwpIG9zLT5hcmdiID0gUEJNX0FMTE9DKG9zLT5hcmdjKTsKKwkJaWYgKG9zLT5hcmdiICE9IE5VTEwpCS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwkJICAgIFBCTV9TRVQoaSwgb3MtPmFyZ2IpOworCSAgICB9CisJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisvKkA9c2l6ZW9mdHlwZUAqLworCX0KKwlpZiAob3MgPiBjb24tPm9wdGlvblN0YWNrKSBvcy0tOworICAgIH0gd2hpbGUgKGFyZyA9PSBOVUxMKTsKKyAgICByZXR1cm4gYXJnOworfQorCitzdGF0aWMgLypAb25seUAqLyAvKkBudWxsQCovIGNvbnN0IGNoYXIgKgorZXhwYW5kTmV4dEFyZygvKkBzcGVjaWFsQCovIHBvcHRDb250ZXh0IGNvbiwgY29uc3QgY2hhciAqIHMpCisJLypAdXNlcyBjb24tPm9wdGlvblN0YWNrLCBjb24tPm9zLAorCQljb24tPm9zLT5uZXh0LCBjb24tPm9zLT5hcmdiLCBjb24tPm9zLT5hcmdjLCBjb24tPm9zLT5hcmd2IEAqLworCS8qQG1vZGlmaWVzIGNvbiBAKi8KK3sKKyAgICBjb25zdCBjaGFyICogYSA9IE5VTEw7CisgICAgY2hhciAqdCwgKnRlOworICAgIHNpemVfdCB0biA9IHN0cmxlbihzKSArIDE7CisgICAgY2hhciBjOworCisgICAgdGUgPSB0ID0gbWFsbG9jKHRuKTsKKyAgICBpZiAodCA9PSBOVUxMKSByZXR1cm4gTlVMTDsJCS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKyAgICAqdCA9ICdcMCc7CisgICAgd2hpbGUgKChjID0gKnMrKykgIT0gJ1wwJykgeworCXN3aXRjaCAoYykgeworI2lmIDAJLyogWFhYIGNhbid0IGRvIHRoaXMgKi8KKwljYXNlICdcXCc6CS8qIGVzY2FwZSAqLworCSAgICBjID0gKnMrKzsKKwkgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisjZW5kaWYKKwljYXNlICchJzoKKwkgICAgaWYgKCEoc1swXSA9PSAnIycgJiYgc1sxXSA9PSAnOicgJiYgc1syXSA9PSAnKycpKQorCQkvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwkgICAgLyogWFhYIE1ha2Ugc3VyZSB0aGF0IGZpbmROZXh0QXJnIGRlbGV0ZXMgb25seSBuZXh0IGFyZy4gKi8KKwkgICAgaWYgKGEgPT0gTlVMTCkgeworCQlpZiAoKGEgPSBmaW5kTmV4dEFyZyhjb24sIDFVLCAxKSkgPT0gTlVMTCkKKwkJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCSAgICB9CisJICAgIHMgKz0gc2l6ZW9mKCIjOisiKSAtIDE7CisKKwkgICAgdG4gKz0gc3RybGVuKGEpOworCSAgICB7ICAgc2l6ZV90IHBvcyA9IChzaXplX3QpICh0ZSAtIHQpOworCQlpZiAoKHQgPSByZWFsbG9jKHQsIHRuKSkgPT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCQkgICAgcmV0dXJuIE5VTEw7CisJCXRlID0gc3RwY3B5KHQgKyBwb3MsIGEpOworCSAgICB9CisJICAgIGNvbnRpbnVlOworCSAgICAvKkBub3RyZWFjaGVkQCovIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCX0KKwkqdGUrKyA9IGM7CisgICAgfQorICAgICp0ZSsrID0gJ1wwJzsKKyAgICAvKiBJZiB0aGUgbmV3IHN0cmluZyBpcyBsb25nZXIgdGhhbiBuZWVkZWQsIHNob3J0ZW4uICovCisgICAgaWYgKCh0ICsgdG4pID4gdGUpIHsKKy8qQC11c2VyZWxlYXNlZEAqLwkvKiBYWFggc3BsaW50IGNhbid0IGZvbGxvdyB0aGUgcG9pbnRlcnMuICovCisJaWYgKCh0ZSA9IHJlYWxsb2ModCwgKHNpemVfdCkodGUgLSB0KSkpID09IE5VTEwpCisJICAgIGZyZWUodCk7CisJdCA9IHRlOworLypAPXVzZXJlbGVhc2VkQCovCisgICAgfQorICAgIHJldHVybiB0OworfQorCitzdGF0aWMgdm9pZCBwb3B0U3RyaXBBcmcoLypAc3BlY2lhbEAqLyBwb3B0Q29udGV4dCBjb24sIGludCB3aGljaCkKKwkvKkB1c2VzIGNvbi0+b3B0aW9uU3RhY2sgQCovCisJLypAZGVmaW5lcyBjb24tPmFyZ19zdHJpcCBAKi8KKwkvKkBtb2RpZmllcyBjb24gQCovCit7CisvKkAtY29tcGRlZiAtc2l6ZW9mdHlwZSAtdXNlZGVmIEAqLworICAgIGlmIChjb24tPmFyZ19zdHJpcCA9PSBOVUxMKQorCWNvbi0+YXJnX3N0cmlwID0gUEJNX0FMTE9DKGNvbi0+b3B0aW9uU3RhY2tbMF0uYXJnYyk7CisgICAgaWYgKGNvbi0+YXJnX3N0cmlwICE9IE5VTEwpCQkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisgICAgUEJNX1NFVCh3aGljaCwgY29uLT5hcmdfc3RyaXApOworICAgIHJldHVybjsKKy8qQD1jb21wZGVmID1zaXplb2Z0eXBlID11c2VkZWYgQCovCit9CisKKy8qQHVuY2hlY2tlZEAqLwordW5zaWduZWQgaW50IF9wb3B0Qml0c04gPSBfUE9QVF9CSVRTX047CisvKkB1bmNoZWNrZWRAKi8KK3Vuc2lnbmVkIGludCBfcG9wdEJpdHNNID0gX1BPUFRfQklUU19NOworLypAdW5jaGVja2VkQCovCit1bnNpZ25lZCBpbnQgX3BvcHRCaXRzSyA9IF9QT1BUX0JJVFNfSzsKKworLypALXNpemVvZnR5cGVAKi8KK3N0YXRpYyBpbnQgX3BvcHRCaXRzTmV3KC8qQG51bGxAKi8gcG9wdEJpdHMgKmJpdHNwKQorCS8qQGdsb2JhbHMgX3BvcHRCaXRzTiwgX3BvcHRCaXRzTSwgX3BvcHRCaXRzSyBAKi8KKwkvKkBtb2RpZmllcyAqYml0c3AsIF9wb3B0Qml0c04sIF9wb3B0Qml0c00sIF9wb3B0Qml0c0sgQCovCit7CisgICAgaWYgKGJpdHNwID09IE5VTEwpCisJcmV0dXJuIFBPUFRfRVJST1JfTlVMTEFSRzsKKworICAgIC8qIFhYWCBoYW5kbGUgbmVnYXRlZCBpbml0aWFsaXphdGlvbi4gKi8KKyAgICBpZiAoKmJpdHNwID09IE5VTEwpIHsKKwlpZiAoX3BvcHRCaXRzTiA9PSAwKSB7CisJICAgIF9wb3B0Qml0c04gPSBfUE9QVF9CSVRTX047CisJICAgIF9wb3B0Qml0c00gPSBfUE9QVF9CSVRTX007CisJfQorCWlmIChfcG9wdEJpdHNNID09IDBVKSBfcG9wdEJpdHNNID0gKDMgKiBfcG9wdEJpdHNOKSAvIDI7CisJaWYgKF9wb3B0Qml0c0sgPT0gMFUgfHwgX3BvcHRCaXRzSyA+IDMyVSkgX3BvcHRCaXRzSyA9IF9QT1BUX0JJVFNfSzsKKwkqYml0c3AgPSBQQk1fQUxMT0MoX3BvcHRCaXRzTS0xKTsKKyAgICB9CisvKkAtbnVsbHN0YXRlQCovCisgICAgcmV0dXJuIDA7CisvKkA9bnVsbHN0YXRlQCovCit9CisKK2ludCBwb3B0Qml0c0FkZChwb3B0Qml0cyBiaXRzLCBjb25zdCBjaGFyICogcykKK3sKKyAgICBzaXplX3QgbnMgPSAocyA/IHN0cmxlbihzKSA6IDApOworICAgIHVpbnQzMl90IGgwID0gMDsKKyAgICB1aW50MzJfdCBoMSA9IDA7CisKKyAgICBpZiAoYml0cyA9PSBOVUxMIHx8IG5zID09IDApCisJcmV0dXJuIFBPUFRfRVJST1JfTlVMTEFSRzsKKworICAgIHBvcHRKbHUzMmxwYWlyKHMsIG5zLCAmaDAsICZoMSk7CisKKyAgICBmb3IgKG5zID0gMDsgbnMgPCAoc2l6ZV90KV9wb3B0Qml0c0s7IG5zKyspIHsKKyAgICAgICAgdWludDMyX3QgaCA9IGgwICsgbnMgKiBoMTsKKyAgICAgICAgdWludDMyX3QgaXggPSAoaCAlIF9wb3B0Qml0c00pOworICAgICAgICBQQk1fU0VUKGl4LCBiaXRzKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwb3B0Qml0c0Noayhwb3B0Qml0cyBiaXRzLCBjb25zdCBjaGFyICogcykKK3sKKyAgICBzaXplX3QgbnMgPSAocyA/IHN0cmxlbihzKSA6IDApOworICAgIHVpbnQzMl90IGgwID0gMDsKKyAgICB1aW50MzJfdCBoMSA9IDA7CisgICAgaW50IHJjID0gMTsKKworICAgIGlmIChiaXRzID09IE5VTEwgfHwgbnMgPT0gMCkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgcG9wdEpsdTMybHBhaXIocywgbnMsICZoMCwgJmgxKTsKKworICAgIGZvciAobnMgPSAwOyBucyA8IChzaXplX3QpX3BvcHRCaXRzSzsgbnMrKykgeworICAgICAgICB1aW50MzJfdCBoID0gaDAgKyBucyAqIGgxOworICAgICAgICB1aW50MzJfdCBpeCA9IChoICUgX3BvcHRCaXRzTSk7CisgICAgICAgIGlmIChQQk1fSVNTRVQoaXgsIGJpdHMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJjID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworaW50IHBvcHRCaXRzQ2xyKHBvcHRCaXRzIGJpdHMpCit7CisgICAgc3RhdGljIHNpemVfdCBuYncgPSAoX19QQk1fTkJJVFMvOCk7CisgICAgc2l6ZV90IG53ID0gKF9fUEJNX0lYKF9wb3B0Qml0c00tMSkgKyAxKTsKKworICAgIGlmIChiaXRzID09IE5VTEwpCisJcmV0dXJuIFBPUFRfRVJST1JfTlVMTEFSRzsKKyAgICBtZW1zZXQoYml0cywgMCwgbncgKiBuYncpOworICAgIHJldHVybiAwOworfQorCitpbnQgcG9wdEJpdHNEZWwocG9wdEJpdHMgYml0cywgY29uc3QgY2hhciAqIHMpCit7CisgICAgc2l6ZV90IG5zID0gKHMgPyBzdHJsZW4ocykgOiAwKTsKKyAgICB1aW50MzJfdCBoMCA9IDA7CisgICAgdWludDMyX3QgaDEgPSAwOworCisgICAgaWYgKGJpdHMgPT0gTlVMTCB8fCBucyA9PSAwKQorCXJldHVybiBQT1BUX0VSUk9SX05VTExBUkc7CisKKyAgICBwb3B0Smx1MzJscGFpcihzLCBucywgJmgwLCAmaDEpOworCisgICAgZm9yIChucyA9IDA7IG5zIDwgKHNpemVfdClfcG9wdEJpdHNLOyBucysrKSB7CisgICAgICAgIHVpbnQzMl90IGggPSBoMCArIG5zICogaDE7CisgICAgICAgIHVpbnQzMl90IGl4ID0gKGggJSBfcG9wdEJpdHNNKTsKKyAgICAgICAgUEJNX0NMUihpeCwgYml0cyk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgcG9wdEJpdHNJbnRlcnNlY3QocG9wdEJpdHMgKmFwLCBjb25zdCBwb3B0Qml0cyBiKQoreworICAgIF9fcGJtX2JpdHMgKmFiaXRzOworICAgIF9fcGJtX2JpdHMgKmJiaXRzOworICAgIF9fcGJtX2JpdHMgcmMgPSAwOworICAgIHNpemVfdCBudyA9IChfX1BCTV9JWChfcG9wdEJpdHNNLTEpICsgMSk7CisgICAgc2l6ZV90IGk7CisKKyAgICBpZiAoYXAgPT0gTlVMTCB8fCBiID09IE5VTEwgfHwgX3BvcHRCaXRzTmV3KGFwKSkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworICAgIGFiaXRzID0gX19QQk1fQklUUygqYXApOworICAgIGJiaXRzID0gX19QQk1fQklUUyhiKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudzsgaSsrKSB7CisgICAgICAgIGFiaXRzW2ldICY9IGJiaXRzW2ldOworCXJjIHw9IGFiaXRzW2ldOworICAgIH0KKyAgICByZXR1cm4gKHJjID8gMSA6IDApOworfQorCitpbnQgcG9wdEJpdHNVbmlvbihwb3B0Qml0cyAqYXAsIGNvbnN0IHBvcHRCaXRzIGIpCit7CisgICAgX19wYm1fYml0cyAqYWJpdHM7CisgICAgX19wYm1fYml0cyAqYmJpdHM7CisgICAgX19wYm1fYml0cyByYyA9IDA7CisgICAgc2l6ZV90IG53ID0gKF9fUEJNX0lYKF9wb3B0Qml0c00tMSkgKyAxKTsKKyAgICBzaXplX3QgaTsKKworICAgIGlmIChhcCA9PSBOVUxMIHx8IGIgPT0gTlVMTCB8fCBfcG9wdEJpdHNOZXcoYXApKQorCXJldHVybiBQT1BUX0VSUk9SX05VTExBUkc7CisgICAgYWJpdHMgPSBfX1BCTV9CSVRTKCphcCk7CisgICAgYmJpdHMgPSBfX1BCTV9CSVRTKGIpOworCisgICAgZm9yIChpID0gMDsgaSA8IG53OyBpKyspIHsKKyAgICAgICAgYWJpdHNbaV0gfD0gYmJpdHNbaV07CisJcmMgfD0gYWJpdHNbaV07CisgICAgfQorICAgIHJldHVybiAocmMgPyAxIDogMCk7Cit9CisKK2ludCBwb3B0Qml0c0FyZ3MocG9wdENvbnRleHQgY29uLCBwb3B0Qml0cyAqYXApCit7CisgICAgY29uc3QgY2hhciAqKiBhdjsKKyAgICBpbnQgcmMgPSAwOworCisgICAgaWYgKGNvbiA9PSBOVUxMIHx8IGFwID09IE5VTEwgfHwgX3BvcHRCaXRzTmV3KGFwKSB8fAorCWNvbi0+bGVmdG92ZXJzID09IE5VTEwgfHwgY29uLT5udW1MZWZ0b3ZlcnMgPT0gY29uLT5uZXh0TGVmdG92ZXIpCisJcmV0dXJuIFBPUFRfRVJST1JfTlVMTEFSRzsKKworICAgIC8qIHNvbWUgYXBwcyBsaWtlIFtsaWtlIFJQTSA7LSkgXSBuZWVkIHRoaXMgTlVMTCB0ZXJtaW5hdGVkICovCisgICAgY29uLT5sZWZ0b3ZlcnNbY29uLT5udW1MZWZ0b3ZlcnNdID0gTlVMTDsKKworICAgIGZvciAoYXYgPSBjb24tPmxlZnRvdmVycyArIGNvbi0+bmV4dExlZnRvdmVyOyAqYXYgIT0gTlVMTDsgYXYrKykgeworCWlmICgocmMgPSBwb3B0Qml0c0FkZCgqYXAsICphdikpICE9IDApCisJICAgIGJyZWFrOworICAgIH0KKy8qQC1udWxsc3RhdGVAKi8KKyAgICByZXR1cm4gcmM7CisvKkA9bnVsbHN0YXRlQCovCit9CisKK2ludCBwb3B0U2F2ZUJpdHMocG9wdEJpdHMgKiBiaXRzcCwKKwkJLypAdW51c2VkQCovIFVOVVNFRCh1bnNpZ25lZCBpbnQgYXJnSW5mbyksIGNvbnN0IGNoYXIgKiBzKQoreworICAgIGNoYXIgKnRidWYgPSBOVUxMOworICAgIGNoYXIgKnQsICp0ZTsKKyAgICBpbnQgcmMgPSAwOworCisgICAgaWYgKGJpdHNwID09IE5VTEwgfHwgcyA9PSBOVUxMIHx8ICpzID09ICdcMCcgfHwgX3BvcHRCaXRzTmV3KGJpdHNwKSkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgLyogUGFyc2UgY29tbWEgc2VwYXJhdGVkIGF0dHJpYnV0ZXMuICovCisgICAgdGUgPSB0YnVmID0geHN0cmR1cChzKTsKKyAgICB3aGlsZSAoKHQgPSB0ZSkgIT0gTlVMTCAmJiAqdCkgeworCXdoaWxlICgqdGUgIT0gJ1wwJyAmJiAqdGUgIT0gJywnKQorCSAgICB0ZSsrOworCWlmICgqdGUgIT0gJ1wwJykKKwkgICAgKnRlKysgPSAnXDAnOworCS8qIFhYWCBJZ25vcmUgZW1wdHkgc3RyaW5ncy4gKi8KKwlpZiAoKnQgPT0gJ1wwJykKKwkgICAgY29udGludWU7CisJLyogWFhYIFBlcm1pdCBuZWdhdGVkIGF0dHJpYnV0ZXMuIGNhdmVhdCBlbXB0b3I6IGZhbHNlIG5lZ2F0aXZlcy4gKi8KKwlpZiAoKnQgPT0gJyEnKSB7CisJICAgIHQrKzsKKwkgICAgaWYgKChyYyA9IHBvcHRCaXRzQ2hrKCpiaXRzcCwgdCkpID4gMCkKKwkJcmMgPSBwb3B0Qml0c0RlbCgqYml0c3AsIHQpOworCX0gZWxzZQorCSAgICByYyA9IHBvcHRCaXRzQWRkKCpiaXRzcCwgdCk7CisJaWYgKHJjKQorCSAgICBicmVhazsKKyAgICB9CisgICAgdGJ1ZiA9IF9mcmVlKHRidWYpOworICAgIHJldHVybiByYzsKK30KKy8qQD1zaXplb2Z0eXBlQCovCisKK2ludCBwb3B0U2F2ZVN0cmluZyhjb25zdCBjaGFyICoqKiBhcmd2cCwKKwkJLypAdW51c2VkQCovIFVOVVNFRCh1bnNpZ25lZCBpbnQgYXJnSW5mbyksIGNvbnN0IGNoYXIgKiB2YWwpCit7CisgICAgaW50IGFyZ2MgPSAwOworCisgICAgaWYgKGFyZ3ZwID09IE5VTEwgfHwgdmFsID09IE5VTEwpCisJcmV0dXJuIFBPUFRfRVJST1JfTlVMTEFSRzsKKworICAgIC8qIFhYWCBsaWtlbHkgbmVlZHMgYW4gdXBwZXIgYm91bmQgb24gYXJnYy4gKi8KKyAgICBpZiAoKmFyZ3ZwICE9IE5VTEwpCisgICAgd2hpbGUgKCgqYXJndnApW2FyZ2NdICE9IE5VTEwpCisJYXJnYysrOworIAorLypALXVucXVhbGlmaWVkdHJhbnMgLW51bGxzdGF0ZUAqLwkvKiBYWFggbm8gYW5ub3RhdGlvbiBmb3IgKCphcmd2cCkgKi8KKyAgICBpZiAoKCphcmd2cCA9IHhyZWFsbG9jKCphcmd2cCwgKGFyZ2MgKyAxICsgMSkgKiBzaXplb2YoKiphcmd2cCkpKSAhPSBOVUxMKSB7CisJKCphcmd2cClbYXJnYysrXSA9IHhzdHJkdXAodmFsKTsKKwkoKmFyZ3ZwKVthcmdjICBdID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIDA7CisvKkA9dW5xdWFsaWZpZWR0cmFucyA9bnVsbHN0YXRlQCovCit9CisKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIHVuc2lnbmVkIGludCBzZWVkID0gMDsKKworaW50IHBvcHRTYXZlTG9uZ0xvbmcobG9uZyBsb25nICogYXJnLCB1bnNpZ25lZCBpbnQgYXJnSW5mbywgbG9uZyBsb25nIGFMb25nTG9uZykKK3sKKyAgICBpZiAoYXJnID09IE5VTEwKKyNpZmRlZglOT1RZRVQKKyAgICAvKiBYWFggQ2hlY2sgYWxpZ25tZW50LCBtYXkgZmFpbCBvbiBmdW5reSBwbGF0Zm9ybXMuICovCisgICAgIHx8ICgoKHVuc2lnbmVkIGxvbmcgbG9uZylhcmcpICYgKHNpemVvZigqYXJnKS0xKSkKKyNlbmRpZgorICAgICkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgaWYgKGFMb25nTG9uZyAhPSAwICYmIExGX0lTU0VUKFJBTkRPTSkpIHsKKyNpZiBkZWZpbmVkKEhBVkVfU1JBTkRPTSkKKwlpZiAoIXNlZWQpIHsKKwkgICAgc3JhbmRvbSgodW5zaWduZWQpZ2V0cGlkKCkpOworCSAgICBzcmFuZG9tKCh1bnNpZ25lZClyYW5kb20oKSk7CisJfQorCWFMb25nTG9uZyA9IChsb25nIGxvbmcpKHJhbmRvbSgpICUgKGFMb25nTG9uZyA+IDAgPyBhTG9uZ0xvbmcgOiAtYUxvbmdMb25nKSk7CisJYUxvbmdMb25nKys7CisjZWxzZQorCS8qIFhYWCBhdm9pZCBhZGRpbmcgUE9QVF9FUlJPUl9VTklNUExFTUVOVEVEIHRvIG1pbmltaXplIGkxOG4gY2h1cm4uICovCisJcmV0dXJuIFBPUFRfRVJST1JfQkFET1BFUkFUSU9OOworI2VuZGlmCisgICAgfQorICAgIGlmIChMRl9JU1NFVChOT1QpKQorCWFMb25nTG9uZyA9IH5hTG9uZ0xvbmc7CisgICAgc3dpdGNoIChMRl9JU1NFVChMT0dJQ0FMT1BTKSkgeworICAgIGNhc2UgMDoKKwkqYXJnID0gYUxvbmdMb25nOworCWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdGTEFHX09SOgorCSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnIHw9ICh1bnNpZ25lZCBsb25nIGxvbmcpYUxvbmdMb25nOworCWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdGTEFHX0FORDoKKwkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZyAmPSAodW5zaWduZWQgbG9uZyBsb25nKWFMb25nTG9uZzsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19YT1I6CisJKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmcgXj0gKHVuc2lnbmVkIGxvbmcgbG9uZylhTG9uZ0xvbmc7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlyZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisJLypAbm90cmVhY2hlZEAqLyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwb3B0U2F2ZUxvbmcobG9uZyAqIGFyZywgdW5zaWduZWQgaW50IGFyZ0luZm8sIGxvbmcgYUxvbmcpCit7CisgICAgLyogWFhYIENoZWNrIGFsaWdubWVudCwgbWF5IGZhaWwgb24gZnVua3kgcGxhdGZvcm1zLiAqLworICAgIGlmIChhcmcgPT0gTlVMTCB8fCAoKCh1bnNpZ25lZCBsb25nKWFyZykgJiAoc2l6ZW9mKCphcmcpLTEpKSkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgaWYgKGFMb25nICE9IDAgJiYgTEZfSVNTRVQoUkFORE9NKSkgeworI2lmIGRlZmluZWQoSEFWRV9TUkFORE9NKQorCWlmICghc2VlZCkgeworCSAgICBzcmFuZG9tKCh1bnNpZ25lZClnZXRwaWQoKSk7CisJICAgIHNyYW5kb20oKHVuc2lnbmVkKXJhbmRvbSgpKTsKKwl9CisJYUxvbmcgPSByYW5kb20oKSAlIChhTG9uZyA+IDAgPyBhTG9uZyA6IC1hTG9uZyk7CisJYUxvbmcrKzsKKyNlbHNlCisJLyogWFhYIGF2b2lkIGFkZGluZyBQT1BUX0VSUk9SX1VOSU1QTEVNRU5URUQgdG8gbWluaW1pemUgaTE4biBjaHVybi4gKi8KKwlyZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisjZW5kaWYKKyAgICB9CisgICAgaWYgKExGX0lTU0VUKE5PVCkpCisJYUxvbmcgPSB+YUxvbmc7CisgICAgc3dpdGNoIChMRl9JU1NFVChMT0dJQ0FMT1BTKSkgeworICAgIGNhc2UgMDoJCSAgICphcmcgPSBhTG9uZzsgYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR0ZMQUdfT1I6ICAqKHVuc2lnbmVkIGxvbmcgKilhcmcgfD0gKHVuc2lnbmVkIGxvbmcpYUxvbmc7IGJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdGTEFHX0FORDogKih1bnNpZ25lZCBsb25nICopYXJnICY9ICh1bnNpZ25lZCBsb25nKWFMb25nOyBicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19YT1I6ICoodW5zaWduZWQgbG9uZyAqKWFyZyBePSAodW5zaWduZWQgbG9uZylhTG9uZzsgYnJlYWs7CisgICAgZGVmYXVsdDoKKwlyZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisJLypAbm90cmVhY2hlZEAqLyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwb3B0U2F2ZUludCgvKkBudWxsQCovIGludCAqIGFyZywgdW5zaWduZWQgaW50IGFyZ0luZm8sIGxvbmcgYUxvbmcpCit7CisgICAgLyogWFhYIENoZWNrIGFsaWdubWVudCwgbWF5IGZhaWwgb24gZnVua3kgcGxhdGZvcm1zLiAqLworICAgIGlmIChhcmcgPT0gTlVMTCB8fCAoKCh1bnNpZ25lZCBsb25nKWFyZykgJiAoc2l6ZW9mKCphcmcpLTEpKSkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgaWYgKGFMb25nICE9IDAgJiYgTEZfSVNTRVQoUkFORE9NKSkgeworI2lmIGRlZmluZWQoSEFWRV9TUkFORE9NKQorCWlmICghc2VlZCkgeworCSAgICBzcmFuZG9tKCh1bnNpZ25lZClnZXRwaWQoKSk7CisJICAgIHNyYW5kb20oKHVuc2lnbmVkKXJhbmRvbSgpKTsKKwl9CisJYUxvbmcgPSByYW5kb20oKSAlIChhTG9uZyA+IDAgPyBhTG9uZyA6IC1hTG9uZyk7CisJYUxvbmcrKzsKKyNlbHNlCisJLyogWFhYIGF2b2lkIGFkZGluZyBQT1BUX0VSUk9SX1VOSU1QTEVNRU5URUQgdG8gbWluaW1pemUgaTE4biBjaHVybi4gKi8KKwlyZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisjZW5kaWYKKyAgICB9CisgICAgaWYgKExGX0lTU0VUKE5PVCkpCisJYUxvbmcgPSB+YUxvbmc7CisgICAgc3dpdGNoIChMRl9JU1NFVChMT0dJQ0FMT1BTKSkgeworICAgIGNhc2UgMDoJCSAgICphcmcgPSAoaW50KSBhTG9uZzsJCQkJYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR0ZMQUdfT1I6ICAqKHVuc2lnbmVkIGludCAqKWFyZyB8PSAodW5zaWduZWQgaW50KSBhTG9uZzsgYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR0ZMQUdfQU5EOiAqKHVuc2lnbmVkIGludCAqKWFyZyAmPSAodW5zaWduZWQgaW50KSBhTG9uZzsgYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR0ZMQUdfWE9SOiAqKHVuc2lnbmVkIGludCAqKWFyZyBePSAodW5zaWduZWQgaW50KSBhTG9uZzsgYnJlYWs7CisgICAgZGVmYXVsdDoKKwlyZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisJLypAbm90cmVhY2hlZEAqLyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwb3B0U2F2ZVNob3J0KC8qQG51bGxAKi8gc2hvcnQgKiBhcmcsIHVuc2lnbmVkIGludCBhcmdJbmZvLCBsb25nIGFMb25nKQoreworICAgIC8qIFhYWCBDaGVjayBhbGlnbm1lbnQsIG1heSBmYWlsIG9uIGZ1bmt5IHBsYXRmb3Jtcy4gKi8KKyAgICBpZiAoYXJnID09IE5VTEwgfHwgKCgodW5zaWduZWQgbG9uZylhcmcpICYgKHNpemVvZigqYXJnKS0xKSkpCisJcmV0dXJuIFBPUFRfRVJST1JfTlVMTEFSRzsKKworICAgIGlmIChhTG9uZyAhPSAwICYmIExGX0lTU0VUKFJBTkRPTSkpIHsKKyNpZiBkZWZpbmVkKEhBVkVfU1JBTkRPTSkKKwlpZiAoIXNlZWQpIHsKKwkgICAgc3JhbmRvbSgodW5zaWduZWQpZ2V0cGlkKCkpOworCSAgICBzcmFuZG9tKCh1bnNpZ25lZClyYW5kb20oKSk7CisJfQorCWFMb25nID0gcmFuZG9tKCkgJSAoYUxvbmcgPiAwID8gYUxvbmcgOiAtYUxvbmcpOworCWFMb25nKys7CisjZWxzZQorCS8qIFhYWCBhdm9pZCBhZGRpbmcgUE9QVF9FUlJPUl9VTklNUExFTUVOVEVEIHRvIG1pbmltaXplIGkxOG4gY2h1cm4uICovCisJcmV0dXJuIFBPUFRfRVJST1JfQkFET1BFUkFUSU9OOworI2VuZGlmCisgICAgfQorICAgIGlmIChMRl9JU1NFVChOT1QpKQorCWFMb25nID0gfmFMb25nOworICAgIHN3aXRjaCAoTEZfSVNTRVQoTE9HSUNBTE9QUykpIHsKKyAgICBjYXNlIDA6CQkgICAqYXJnID0gKHNob3J0KSBhTG9uZzsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19PUjogICoodW5zaWduZWQgc2hvcnQgKilhcmcgfD0gKHVuc2lnbmVkIHNob3J0KSBhTG9uZzsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19BTkQ6ICoodW5zaWduZWQgc2hvcnQgKilhcmcgJj0gKHVuc2lnbmVkIHNob3J0KSBhTG9uZzsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHRkxBR19YT1I6ICoodW5zaWduZWQgc2hvcnQgKilhcmcgXj0gKHVuc2lnbmVkIHNob3J0KSBhTG9uZzsKKwlicmVhazsKKyAgICBkZWZhdWx0OiByZXR1cm4gUE9QVF9FUlJPUl9CQURPUEVSQVRJT047CisJLypAbm90cmVhY2hlZEAqLyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmV0dXJuIGFyZ0luZm8gZmllbGQsIGhhbmRsaW5nIFBPUFRfQVJHRkxBR19UT0dHTEUgb3ZlcnJpZGVzLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIG9wdCAgICAgICAgICAgb3B0aW9uCisgKiBAcmV0dXJuCQlhcmdJbmZvCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9wdEFyZ0luZm8ocG9wdENvbnRleHQgY29uLCBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCkKKwkvKkAqLworeworICAgIHVuc2lnbmVkIGludCBhcmdJbmZvID0gb3B0LT5hcmdJbmZvOworCisgICAgaWYgKGNvbi0+b3MtPmFyZ3YgIT0gTlVMTCAmJiBjb24tPm9zLT5uZXh0ID4gMCAmJiBvcHQtPmxvbmdOYW1lICE9IE5VTEwpCisgICAgaWYgKExGX0lTU0VUKFRPR0dMRSkpIHsKKwljb25zdCBjaGFyICogbG9uZ05hbWUgPSBjb24tPm9zLT5hcmd2W2Nvbi0+b3MtPm5leHQtMV07CisJd2hpbGUgKCpsb25nTmFtZSA9PSAnLScpIGxvbmdOYW1lKys7CisJLyogWFhYIGFsbW9zdCBnb29kIGVub3VnaCBidXQgY29uc2lkZXIgLS1bbm9dbm9mb28gY29ybmVyIGNhc2VzLiAqLworCWlmIChsb25nTmFtZVswXSAhPSBvcHQtPmxvbmdOYW1lWzBdIHx8IGxvbmdOYW1lWzFdICE9IG9wdC0+bG9uZ05hbWVbMV0pCisJeworCSAgICBpZiAoIUxGX0lTU0VUKFhPUikpIHsJLyogWFhYIGRvbnQgdG9nZ2xlIHdpdGggWE9SICovCisJCS8qIFRvZ2dsZSBQT1BUX0JJVF9TRVQgPD0+IFBPUFRfQklUX0NMUi4gKi8KKwkJaWYgKExGX0lTU0VUKExPR0lDQUxPUFMpKQorCQkgICAgYXJnSW5mbyBePSAoUE9QVF9BUkdGTEFHX09SfFBPUFRfQVJHRkxBR19BTkQpOworCQlhcmdJbmZvIF49IFBPUFRfQVJHRkxBR19OT1Q7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiBhcmdJbmZvOworfQorCisvKioKKyAqIFBhcnNlIGFuIGludGVnZXIgZXhwcmVzc2lvbi4KKyAqIEByZXR2YWwgKmxscAkJaW50ZWdlciBleHByZXNzaW9uIHZhbHVlCisgKiBAcGFyYW0gYXJnSW5mbwlpbnRlZ2VyIGV4cHJlc3Npb24gdHlwZQorICogQHBhcmFtIHZhbAkJaW50ZWdlciBleHByZXNzaW9uIHN0cmluZworICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgUE9QVF8qIGVycm9yLgorICovCitzdGF0aWMgaW50IHBvcHRQYXJzZUludGVnZXIobG9uZyBsb25nICogbGxwLAorCQkvKkB1bnVzZWRAKi8gVU5VU0VEKHVuc2lnbmVkIGludCBhcmdJbmZvKSwKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogdmFsKQorCS8qQG1vZGlmaWVzICpsbHAgQCovCit7CisgICAgaWYgKHZhbCkgeworCWNoYXIgKmVuZCA9IE5VTEw7CisJKmxscCA9IHN0cnRvbGwodmFsLCAmZW5kLCAwKTsKKworCS8qIFhYWCBwYXJzZSBzY2FsaW5nIHN1ZmZpeGVzIGhlcmUuICovCisKKwlpZiAoIShlbmQgJiYgKmVuZCA9PSAnXDAnKSkKKwkgICAgcmV0dXJuIFBPUFRfRVJST1JfQkFETlVNQkVSOworICAgIH0gZWxzZQorCSpsbHAgPSAwOworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIFNhdmUgdGhlIG9wdGlvbiBhcmd1bWVudCB0aHJvdWdoIHRoZSAoKm9wdC0+YXJnKSBwb2ludGVyLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIG9wdCAgICAgICAgICAgb3B0aW9uCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBQT1BUXyogZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgcG9wdFNhdmVBcmcocG9wdENvbnRleHQgY29uLCBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCkKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgY29uLCBmaWxlU3lzdGVtLCBpbnRlcm5hbFN0YXRlIEAqLworeworICAgIHBvcHRBcmcgYXJnID0geyAucHRyID0gb3B0LT5hcmcgfTsKKyAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIHN1Y2Nlc3MgKi8KKworICAgIHN3aXRjaCAocG9wdEFyZ1R5cGUob3B0KSkgeworICAgIGNhc2UgUE9QVF9BUkdfQklUU0VUOgorCS8qIFhYWCBtZW1vcnkgbGVhaywgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgZm9yIGZyZWUuICovCisJcmMgPSBwb3B0U2F2ZUJpdHMoYXJnLnB0ciwgb3B0LT5hcmdJbmZvLCBjb24tPm9zLT5uZXh0QXJnKTsKKwkvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHX0FSR1Y6CisJLyogWFhYIG1lbW9yeSBsZWFrLCBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZS4gKi8KKwlyYyA9IHBvcHRTYXZlU3RyaW5nKGFyZy5wdHIsIG9wdC0+YXJnSW5mbywgY29uLT5vcy0+bmV4dEFyZyk7CisJLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR19TVFJJTkc6CisJLyogWFhYIG1lbW9yeSBsZWFrLCBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZS4gKi8KKwlhcmcuYXJndlswXSA9IChjb24tPm9zLT5uZXh0QXJnKSA/IHhzdHJkdXAoY29uLT5vcy0+bmV4dEFyZykgOiBOVUxMOworCS8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCisgICAgY2FzZSBQT1BUX0FSR19JTlQ6CisgICAgY2FzZSBQT1BUX0FSR19TSE9SVDoKKyAgICBjYXNlIFBPUFRfQVJHX0xPTkc6CisgICAgY2FzZSBQT1BUX0FSR19MT05HTE9ORzoKKyAgICB7CXVuc2lnbmVkIGludCBhcmdJbmZvID0gcG9wdEFyZ0luZm8oY29uLCBvcHQpOworCWxvbmcgbG9uZyBhTlVNID0gMDsKKworCWlmICgocmMgPSBwb3B0UGFyc2VJbnRlZ2VyKCZhTlVNLCBhcmdJbmZvLCBjb24tPm9zLT5uZXh0QXJnKSkgIT0gMCkKKwkgICAgYnJlYWs7CisKKwlzd2l0Y2ggKHBvcHRBcmdUeXBlKG9wdCkpIHsKKwljYXNlIFBPUFRfQVJHX0xPTkdMT05HOgorLyogWFhYIGxldCdzIG5vdCBkZW1hbmQgQzk5IGNvbXBpbGVyIGZsYWdzIGZvciA8bGltaXRzLmg+IHF1aXRlIHlldC4gKi8KKyNpZiAhZGVmaW5lZChMTE9OR19NQVgpCisjICAgZGVmaW5lIExMT05HX01BWCAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyMgICBkZWZpbmUgTExPTkdfTUlOICAgICgtTExPTkdfTUFYIC0gMUxMKQorI2VuZGlmCisJICAgIHJjID0gIShhTlVNID09IExMT05HX01JTiB8fCBhTlVNID09IExMT05HX01BWCkKKwkJPyBwb3B0U2F2ZUxvbmdMb25nKGFyZy5sb25nbG9uZ3AsIGFyZ0luZm8sIGFOVU0pCisJCTogUE9QVF9FUlJPUl9PVkVSRkxPVzsKKwkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKwljYXNlIFBPUFRfQVJHX0xPTkc6CisJICAgIHJjID0gIShhTlVNIDwgKGxvbmcgbG9uZylMT05HX01JTiB8fCBhTlVNID4gKGxvbmcgbG9uZylMT05HX01BWCkKKwkJPyBwb3B0U2F2ZUxvbmcoYXJnLmxvbmdwLCBhcmdJbmZvLCAobG9uZylhTlVNKQorCQk6IFBPUFRfRVJST1JfT1ZFUkZMT1c7CisJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisJY2FzZSBQT1BUX0FSR19JTlQ6CisJICAgIHJjID0gIShhTlVNIDwgKGxvbmcgbG9uZylJTlRfTUlOIHx8IGFOVU0gPiAobG9uZyBsb25nKUlOVF9NQVgpCisJCT8gcG9wdFNhdmVJbnQoYXJnLmludHAsIGFyZ0luZm8sIChsb25nKWFOVU0pCisJCTogUE9QVF9FUlJPUl9PVkVSRkxPVzsKKwkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKwljYXNlIFBPUFRfQVJHX1NIT1JUOgorCSAgICByYyA9ICEoYU5VTSA8IChsb25nIGxvbmcpU0hSVF9NSU4gfHwgYU5VTSA+IChsb25nIGxvbmcpU0hSVF9NQVgpCisJCT8gcG9wdFNhdmVTaG9ydChhcmcuc2hvcnRwLCBhcmdJbmZvLCAobG9uZylhTlVNKQorCQk6IFBPUFRfRVJST1JfT1ZFUkZMT1c7CisJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisJfQorICAgIH0gICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKworICAgIGNhc2UgUE9QVF9BUkdfRkxPQVQ6CisgICAgY2FzZSBQT1BUX0FSR19ET1VCTEU6CisgICAgewljaGFyICplbmQgPSBOVUxMOworCWRvdWJsZSBhRG91YmxlID0gMC4wOworCisJaWYgKGNvbi0+b3MtPm5leHRBcmcpIHsKKy8qQC1tb2RzQCovCisJICAgIGludCBzYXZlZXJybm8gPSBlcnJubzsKKwkgICAgZXJybm8gPSAwOworCSAgICBhRG91YmxlID0gc3RydG9kKGNvbi0+b3MtPm5leHRBcmcsICZlbmQpOworCSAgICBpZiAoZXJybm8gPT0gRVJBTkdFKSB7CisJCXJjID0gUE9QVF9FUlJPUl9PVkVSRkxPVzsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZXJybm8gPSBzYXZlZXJybm87CisvKkA9bW9kc0AqLworCSAgICBpZiAoKmVuZCAhPSAnXDAnKSB7CisJCXJjID0gUE9QVF9FUlJPUl9CQUROVU1CRVI7CisJCWJyZWFrOworCSAgICB9CisJfQorCisJc3dpdGNoIChwb3B0QXJnVHlwZShvcHQpKSB7CisJY2FzZSBQT1BUX0FSR19ET1VCTEU6CisJICAgIGFyZy5kb3VibGVwWzBdID0gYURvdWJsZTsKKwkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKwljYXNlIFBPUFRfQVJHX0ZMT0FUOgorI2lmICFkZWZpbmVkKERCTF9FUFNJTE9OKSAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorI2RlZmluZSBEQkxfRVBTSUxPTiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2CisjZW5kaWYKKyNkZWZpbmUgUE9QVF9BQlMoYSkJKCgoKGEpIC0gMC4wKSA8IERCTF9FUFNJTE9OKSA/IC0oYSkgOiAoYSkpCisJICAgIGlmICgoRkxUX01JTiAtIFBPUFRfQUJTKGFEb3VibGUpKSA+IERCTF9FUFNJTE9OCisJICAgICB8fCAoUE9QVF9BQlMoYURvdWJsZSkgLSBGTFRfTUFYKSA+IERCTF9FUFNJTE9OKQorCQlyYyA9IFBPUFRfRVJST1JfT1ZFUkZMT1c7CisJICAgIGVsc2UKKwkJYXJnLmZsb2F0cFswXSA9IChmbG9hdCkgYURvdWJsZTsKKwkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKwl9CisgICAgfSAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdfTUFJTkNBTEw6CisvKkAtYXNzaWduZXhwb3NlIC10eXBlQCovCisJY29uLT5tYWluY2FsbCA9IG9wdC0+YXJnOworLypAPWFzc2lnbmV4cG9zZSA9dHlwZUAqLworCS8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworICAgIGRlZmF1bHQ6CisJZnByaW50ZihzdGRvdXQsIFBPUFRfKCJvcHRpb24gdHlwZSAoJXUpIG5vdCBpbXBsZW1lbnRlZCBpbiBwb3B0XG4iKSwKKwkJcG9wdEFyZ1R5cGUob3B0KSk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworCS8qQG5vdHJlYWNoZWRAKi8gLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworLyogcmV0dXJucyAndmFsJyBlbGVtZW50LCAtMSBvbiBsYXN0IGl0ZW0sIFBPUFRfRVJST1JfKiBvbiBlcnJvciAqLworaW50IHBvcHRHZXROZXh0T3B0KHBvcHRDb250ZXh0IGNvbikKK3sKKyAgICBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCA9IE5VTEw7CisgICAgaW50IGRvbmUgPSAwOworCisgICAgaWYgKGNvbiA9PSBOVUxMKQorCXJldHVybiAtMTsKKyAgICB3aGlsZSAoIWRvbmUpIHsKKwljb25zdCBjaGFyICogb3JpZ09wdFN0cmluZyA9IE5VTEw7CisJcG9wdENhbGxiYWNrVHlwZSBjYiA9IE5VTEw7CisJY29uc3Qgdm9pZCAqIGNiRGF0YSA9IE5VTEw7CisJY29uc3QgY2hhciAqIGxvbmdBcmcgPSBOVUxMOworCWludCBjYW5zdHJpcCA9IDA7CisJaW50IHNob3J0eSA9IDA7CisKKwl3aGlsZSAoIWNvbi0+b3MtPm5leHRDaGFyQXJnICYmIGNvbi0+b3MtPm5leHQgPT0gY29uLT5vcy0+YXJnYworCQkmJiBjb24tPm9zID4gY29uLT5vcHRpb25TdGFjaykgeworCSAgICBjbGVhbk9TRShjb24tPm9zLS0pOworCX0KKwlpZiAoIWNvbi0+b3MtPm5leHRDaGFyQXJnICYmIGNvbi0+b3MtPm5leHQgPT0gY29uLT5vcy0+YXJnYykgeworCSAgICBpbnZva2VDYWxsYmFja3NQT1NUKGNvbiwgY29uLT5vcHRpb25zKTsKKworCSAgICBpZiAoY29uLT5tYWluY2FsbCkgeworCQkvKkAtbm9lZmZlY3R1bmNvbiBAKi8KKwkJKHZvaWQpICgqY29uLT5tYWluY2FsbCkgKGNvbi0+ZmluYWxBcmd2Q291bnQsIGNvbi0+ZmluYWxBcmd2KTsKKwkJLypAPW5vZWZmZWN0dW5jb24gQCovCisJCXJldHVybiAtMTsKKwkgICAgfQorCisJICAgIGlmIChjb24tPmRvRXhlYykgcmV0dXJuIGV4ZWNDb21tYW5kKGNvbik7CisJICAgIHJldHVybiAtMTsKKwl9CisKKwkvKiBQcm9jZXNzIG5leHQgbG9uZyBvcHRpb24gKi8KKwlpZiAoIWNvbi0+b3MtPm5leHRDaGFyQXJnKSB7CisJICAgIGNvbnN0IGNoYXIgKiBvcHRTdHJpbmc7CisgICAgICAgICAgICBzaXplX3Qgb3B0U3RyaW5nTGVuOworCSAgICBpbnQgdGhpc29wdDsKKworLypALXNpemVvZnR5cGVAKi8KKwkgICAgaWYgKGNvbi0+b3MtPmFyZ2IgJiYgUEJNX0lTU0VUKGNvbi0+b3MtPm5leHQsIGNvbi0+b3MtPmFyZ2IpKSB7CisJCWNvbi0+b3MtPm5leHQrKzsKKwkJY29udGludWU7CisJICAgIH0KKy8qQD1zaXplb2Z0eXBlQCovCisJICAgIHRoaXNvcHQgPSBjb24tPm9zLT5uZXh0OworCSAgICBpZiAoY29uLT5vcy0+YXJndiAhPSBOVUxMKQkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisJICAgIG9yaWdPcHRTdHJpbmcgPSBjb24tPm9zLT5hcmd2W2Nvbi0+b3MtPm5leHQrK107CisKKwkgICAgaWYgKG9yaWdPcHRTdHJpbmcgPT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCQlyZXR1cm4gUE9QVF9FUlJPUl9CQURPUFQ7CisKKwkgICAgaWYgKGNvbi0+cmVzdExlZnRvdmVyIHx8ICpvcmlnT3B0U3RyaW5nICE9ICctJyB8fAorCQkoKm9yaWdPcHRTdHJpbmcgPT0gJy0nICYmIG9yaWdPcHRTdHJpbmdbMV0gPT0gJ1wwJykpCisJICAgIHsKKwkJaWYgKGNvbi0+ZmxhZ3MgJiBQT1BUX0NPTlRFWFRfUE9TSVhNRUhBUkRFUikKKwkJICAgIGNvbi0+cmVzdExlZnRvdmVyID0gMTsKKwkJaWYgKGNvbi0+ZmxhZ3MgJiBQT1BUX0NPTlRFWFRfQVJHX09QVFMpIHsKKwkJICAgIGNvbi0+b3MtPm5leHRBcmcgPSB4c3RyZHVwKG9yaWdPcHRTdHJpbmcpOworCQkgICAgcmV0dXJuIDA7CisJCX0KKwkJaWYgKGNvbi0+bGVmdG92ZXJzICE9IE5VTEwpCS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwkJICAgIGNvbi0+bGVmdG92ZXJzW2Nvbi0+bnVtTGVmdG92ZXJzKytdID0gb3JpZ09wdFN0cmluZzsKKwkJY29udGludWU7CisJICAgIH0KKworCSAgICAvKiBNYWtlIGEgY29weSB3ZSBjYW4gaGFjayBhdCAqLworCSAgICBvcHRTdHJpbmcgPSBvcmlnT3B0U3RyaW5nOworCisJICAgIGlmIChvcHRTdHJpbmdbMF0gPT0gJ1wwJykKKwkJcmV0dXJuIFBPUFRfRVJST1JfQkFET1BUOworCisJICAgIGlmIChvcHRTdHJpbmdbMV0gPT0gJy0nICYmICFvcHRTdHJpbmdbMl0pIHsKKwkJY29uLT5yZXN0TGVmdG92ZXIgPSAxOworCQljb250aW51ZTsKKwkgICAgfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqb2U7CisJCXVuc2lnbmVkIGludCBhcmdJbmZvID0gMDsKKworCQlvcHRTdHJpbmcrKzsKKwkJaWYgKCpvcHRTdHJpbmcgPT0gJy0nKQorCQkgICAgb3B0U3RyaW5nKys7CisJCWVsc2UKKwkJICAgIGFyZ0luZm8gfD0gUE9QVF9BUkdGTEFHX09ORURBU0g7CisKKwkJLyogQ2hlY2sgZm9yICItLWxvbmc9YXJnIiBvcHRpb24uICovCisJCWZvciAob2UgPSBvcHRTdHJpbmc7ICpvZSAmJiAqb2UgIT0gJz0nOyBvZSsrKQorCQkgICAge307CisJCW9wdFN0cmluZ0xlbiA9IChzaXplX3QpKG9lIC0gb3B0U3RyaW5nKTsKKwkJaWYgKCpvZSA9PSAnPScpCisJCSAgICBsb25nQXJnID0gb2UgKyAxOworCisJCS8qIFhYWCBhbGlhc2VzIHdpdGggYXJnIHN1YnN0aXR1dGlvbiBuZWVkICItLWFsaWFzPWFyZyIgKi8KKwkJaWYgKGhhbmRsZUFsaWFzKGNvbiwgb3B0U3RyaW5nLCBvcHRTdHJpbmdMZW4sICdcMCcsIGxvbmdBcmcpKSB7CisJCSAgICBsb25nQXJnID0gTlVMTDsKKwkJICAgIGNvbnRpbnVlOworCQl9CisKKwkJaWYgKGhhbmRsZUV4ZWMoY29uLCBvcHRTdHJpbmcsICdcMCcpKQorCQkgICAgY29udGludWU7CisKKwkJb3B0ID0gZmluZE9wdGlvbihjb24tPm9wdGlvbnMsIG9wdFN0cmluZywgb3B0U3RyaW5nTGVuLCAnXDAnLCAmY2IsICZjYkRhdGEsCisJCQkJIGFyZ0luZm8pOworCQlpZiAoIW9wdCAmJiAhTEZfSVNTRVQoT05FREFTSCkpCisJCSAgICByZXR1cm4gUE9QVF9FUlJPUl9CQURPUFQ7CisJICAgIH0KKworCSAgICBpZiAoIW9wdCkgeworCQljb24tPm9zLT5uZXh0Q2hhckFyZyA9IG9yaWdPcHRTdHJpbmcgKyAxOworCQlsb25nQXJnID0gTlVMTDsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKGNvbi0+b3MgPT0gY29uLT5vcHRpb25TdGFjayAmJiBGX0lTU0VUKG9wdCwgU1RSSVApKQorCQl7CisJCSAgICBjYW5zdHJpcCA9IDE7CisJCSAgICBwb3B0U3RyaXBBcmcoY29uLCB0aGlzb3B0KTsKKwkJfQorCQlzaG9ydHkgPSAwOworCSAgICB9CisJfQorCisJLyogUHJvY2VzcyBuZXh0IHNob3J0IG9wdGlvbiAqLworCWlmIChjb24tPm9zLT5uZXh0Q2hhckFyZykgeworCSAgICBjb25zdCBjaGFyICogbmV4dENoYXJBcmcgPSBjb24tPm9zLT5uZXh0Q2hhckFyZzsKKworCSAgICBjb24tPm9zLT5uZXh0Q2hhckFyZyA9IE5VTEw7CisKKwkgICAgaWYgKGhhbmRsZUFsaWFzKGNvbiwgTlVMTCwgMCwgKm5leHRDaGFyQXJnLCBuZXh0Q2hhckFyZyArIDEpKQorCQljb250aW51ZTsKKworCSAgICBpZiAoaGFuZGxlRXhlYyhjb24sIE5VTEwsICpuZXh0Q2hhckFyZykpIHsKKwkJLyogUmVzdG9yZSByZXN0IG9mIHNob3J0IG9wdGlvbnMgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLworCQluZXh0Q2hhckFyZysrOworCQlpZiAoKm5leHRDaGFyQXJnICE9ICdcMCcpCisJCSAgICBjb24tPm9zLT5uZXh0Q2hhckFyZyA9IG5leHRDaGFyQXJnOworCQljb250aW51ZTsKKwkgICAgfQorCisJICAgIG9wdCA9IGZpbmRPcHRpb24oY29uLT5vcHRpb25zLCBOVUxMLCAwLCAqbmV4dENoYXJBcmcsICZjYiwKKwkJCSAgICAgJmNiRGF0YSwgMCk7CisJICAgIGlmICghb3B0KQorCQlyZXR1cm4gUE9QVF9FUlJPUl9CQURPUFQ7CisJICAgIHNob3J0eSA9IDE7CisKKwkgICAgbmV4dENoYXJBcmcrKzsKKwkgICAgaWYgKCpuZXh0Q2hhckFyZyAhPSAnXDAnKQorCQljb24tPm9zLT5uZXh0Q2hhckFyZyA9IG5leHRDaGFyQXJnICsgKGludCkoKm5leHRDaGFyQXJnID09ICc9Jyk7CisJfQorCisJaWYgKG9wdCA9PSBOVUxMKSByZXR1cm4gUE9QVF9FUlJPUl9CQURPUFQ7CS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwlpZiAob3B0LT5hcmcgJiYgcG9wdEFyZ1R5cGUob3B0KSA9PSBQT1BUX0FSR19OT05FKSB7CisJICAgIHVuc2lnbmVkIGludCBhcmdJbmZvID0gcG9wdEFyZ0luZm8oY29uLCBvcHQpOworCSAgICBpZiAocG9wdFNhdmVJbnQoKGludCAqKW9wdC0+YXJnLCBhcmdJbmZvLCAxTCkpCisJCXJldHVybiBQT1BUX0VSUk9SX0JBRE9QRVJBVElPTjsKKwl9IGVsc2UgaWYgKHBvcHRBcmdUeXBlKG9wdCkgPT0gUE9QVF9BUkdfVkFMKSB7CisJICAgIGlmIChvcHQtPmFyZykgeworCQl1bnNpZ25lZCBpbnQgYXJnSW5mbyA9IHBvcHRBcmdJbmZvKGNvbiwgb3B0KTsKKwkJaWYgKHBvcHRTYXZlSW50KChpbnQgKilvcHQtPmFyZywgYXJnSW5mbywgKGxvbmcpb3B0LT52YWwpKQorCQkgICAgcmV0dXJuIFBPUFRfRVJST1JfQkFET1BFUkFUSU9OOworCSAgICB9CisJfSBlbHNlIGlmIChwb3B0QXJnVHlwZShvcHQpICE9IFBPUFRfQVJHX05PTkUpIHsKKwkgICAgaW50IHJjOworCisJICAgIGNvbi0+b3MtPm5leHRBcmcgPSBfZnJlZShjb24tPm9zLT5uZXh0QXJnKTsKKwkgICAgaWYgKGxvbmdBcmcpIHsKKwkJbG9uZ0FyZyA9IGV4cGFuZE5leHRBcmcoY29uLCBsb25nQXJnKTsKKwkJY29uLT5vcy0+bmV4dEFyZyA9IChjaGFyICopIGxvbmdBcmc7CisJICAgIH0gZWxzZSBpZiAoY29uLT5vcy0+bmV4dENoYXJBcmcpIHsKKwkJbG9uZ0FyZyA9IGV4cGFuZE5leHRBcmcoY29uLCBjb24tPm9zLT5uZXh0Q2hhckFyZyk7CisJCWNvbi0+b3MtPm5leHRBcmcgPSAoY2hhciAqKSBsb25nQXJnOworCQljb24tPm9zLT5uZXh0Q2hhckFyZyA9IE5VTEw7CisJICAgIH0gZWxzZSB7CisJCXdoaWxlIChjb24tPm9zLT5uZXh0ID09IGNvbi0+b3MtPmFyZ2MgJiYKKwkJCWNvbi0+b3MgPiBjb24tPm9wdGlvblN0YWNrKQorCQl7CisJCSAgICBjbGVhbk9TRShjb24tPm9zLS0pOworCQl9CisJCWlmIChjb24tPm9zLT5uZXh0ID09IGNvbi0+b3MtPmFyZ2MpIHsKKwkJICAgIGlmICghRl9JU1NFVChvcHQsIE9QVElPTkFMKSkKKwkJCXJldHVybiBQT1BUX0VSUk9SX05PQVJHOworCQkgICAgY29uLT5vcy0+bmV4dEFyZyA9IE5VTEw7CisJCX0gZWxzZSB7CisKKwkJICAgIC8qCisJCSAgICAgKiBNYWtlIHN1cmUgdGhpcyBpc24ndCBwYXJ0IG9mIGEgc2hvcnQgYXJnIG9yIHRoZQorCQkgICAgICogcmVzdWx0IG9mIGFuIGFsaWFzIGV4cGFuc2lvbi4KKwkJICAgICAqLworCQkgICAgaWYgKGNvbi0+b3MgPT0gY29uLT5vcHRpb25TdGFjaworCQkgICAgICYmIEZfSVNTRVQob3B0LCBTVFJJUCkgJiYgY2Fuc3RyaXApCisJCSAgICB7CisJCQlwb3B0U3RyaXBBcmcoY29uLCBjb24tPm9zLT5uZXh0KTsKKwkJICAgIH0KKwkJCisJCSAgICBpZiAoY29uLT5vcy0+YXJndiAhPSBOVUxMKSB7CS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwkJCWlmIChGX0lTU0VUKG9wdCwgT1BUSU9OQUwpICYmCisJCQkgICAgY29uLT5vcy0+YXJndltjb24tPm9zLT5uZXh0XVswXSA9PSAnLScpIHsKKwkJCSAgICBjb24tPm9zLT5uZXh0QXJnID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkgICAgLyogWFhYIHdhdGNob3V0OiBzdWJ0bGUgc2lkZS1lZmZlY3RzIGxpdmUgaGVyZS4gKi8KKwkJCSAgICBsb25nQXJnID0gY29uLT5vcy0+YXJndltjb24tPm9zLT5uZXh0KytdOworCQkJICAgIGxvbmdBcmcgPSBleHBhbmROZXh0QXJnKGNvbiwgbG9uZ0FyZyk7CisJCQkgICAgY29uLT5vcy0+bmV4dEFyZyA9IChjaGFyICopIGxvbmdBcmc7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBsb25nQXJnID0gTlVMTDsKKworCSAgIC8qIFNhdmUgdGhlIG9wdGlvbiBhcmd1bWVudCB0aHJvdWdoIGEgKCpvcHQtPmFyZykgcG9pbnRlci4gKi8KKwkgICAgaWYgKG9wdC0+YXJnICE9IE5VTEwgJiYgKHJjID0gcG9wdFNhdmVBcmcoY29uLCBvcHQpKSAhPSAwKQorCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKGNiKQorCSAgICBpbnZva2VDYWxsYmFja3NPUFRJT04oY29uLCBjb24tPm9wdGlvbnMsIG9wdCwgY2JEYXRhLCBzaG9ydHkpOworCWVsc2UgaWYgKG9wdC0+dmFsICYmIChwb3B0QXJnVHlwZShvcHQpICE9IFBPUFRfQVJHX1ZBTCkpCisJICAgIGRvbmUgPSAxOworCisJaWYgKChjb24tPmZpbmFsQXJndkNvdW50ICsgMikgPj0gKGNvbi0+ZmluYWxBcmd2QWxsb2NlZCkpIHsKKwkgICAgY29uLT5maW5hbEFyZ3ZBbGxvY2VkICs9IDEwOworCSAgICBjb24tPmZpbmFsQXJndiA9IHJlYWxsb2MoY29uLT5maW5hbEFyZ3YsCisJCQkgICAgc2l6ZW9mKCpjb24tPmZpbmFsQXJndikgKiBjb24tPmZpbmFsQXJndkFsbG9jZWQpOworCX0KKworCWlmIChjb24tPmZpbmFsQXJndiAhPSBOVUxMKQorCXsgICBjaGFyICpzID0gbWFsbG9jKChvcHQtPmxvbmdOYW1lID8gc3RybGVuKG9wdC0+bG9uZ05hbWUpIDogMCkgKyBzaXplb2YoIi0tIikpOworCSAgICBpZiAocyAhPSBOVUxMKSB7CS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwkJY29uLT5maW5hbEFyZ3ZbY29uLT5maW5hbEFyZ3ZDb3VudCsrXSA9IHM7CisJCSpzKysgPSAnLSc7CisJCWlmIChvcHQtPmxvbmdOYW1lKSB7CisJCSAgICBpZiAoIUZfSVNTRVQob3B0LCBPTkVEQVNIKSkKKwkJCSpzKysgPSAnLSc7CisJCSAgICBzID0gc3RwY3B5KHMsIG9wdC0+bG9uZ05hbWUpOworCQl9IGVsc2UgeworCQkgICAgKnMrKyA9IG9wdC0+c2hvcnROYW1lOworCQkgICAgKnMgPSAnXDAnOworCQl9CisJICAgIH0gZWxzZQorCQljb24tPmZpbmFsQXJndltjb24tPmZpbmFsQXJndkNvdW50KytdID0gTlVMTDsKKwl9CisKKwlpZiAob3B0LT5hcmcgJiYgcG9wdEFyZ1R5cGUob3B0KSA9PSBQT1BUX0FSR19OT05FKQorCSAgICAvKkAtaWZlbXB0eUAqLyA7IC8qQD1pZmVtcHR5QCovCisJZWxzZSBpZiAocG9wdEFyZ1R5cGUob3B0KSA9PSBQT1BUX0FSR19WQUwpCisJICAgIC8qQC1pZmVtcHR5QCovIDsgLypAPWlmZW1wdHlAKi8KKwllbHNlIGlmIChwb3B0QXJnVHlwZShvcHQpICE9IFBPUFRfQVJHX05PTkUpIHsKKwkgICAgaWYgKGNvbi0+ZmluYWxBcmd2ICE9IE5VTEwgJiYgY29uLT5vcy0+bmV4dEFyZyAhPSBOVUxMKQorCSAgICAgICAgY29uLT5maW5hbEFyZ3ZbY29uLT5maW5hbEFyZ3ZDb3VudCsrXSA9CisJCQl4c3RyZHVwKGNvbi0+b3MtPm5leHRBcmcpOworCX0KKyAgICB9CisKKyAgICByZXR1cm4gKG9wdCA/IG9wdC0+dmFsIDogLTEpOwkvKiBYWFggY2FuJ3QgaGFwcGVuICovCit9CisKK2NoYXIgKiBwb3B0R2V0T3B0QXJnKHBvcHRDb250ZXh0IGNvbikKK3sKKyAgICBjaGFyICogcmV0ID0gTlVMTDsKKyAgICBpZiAoY29uKSB7CisJcmV0ID0gY29uLT5vcy0+bmV4dEFyZzsKKwljb24tPm9zLT5uZXh0QXJnID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworY29uc3QgY2hhciAqIHBvcHRHZXRBcmcocG9wdENvbnRleHQgY29uKQoreworICAgIGNvbnN0IGNoYXIgKiByZXQgPSBOVUxMOworICAgIGlmIChjb24gJiYgY29uLT5sZWZ0b3ZlcnMgIT0gTlVMTCAmJiBjb24tPm5leHRMZWZ0b3ZlciA8IGNvbi0+bnVtTGVmdG92ZXJzKQorCXJldCA9IGNvbi0+bGVmdG92ZXJzW2Nvbi0+bmV4dExlZnRvdmVyKytdOworICAgIHJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKiBwb3B0UGVla0FyZyhwb3B0Q29udGV4dCBjb24pCit7CisgICAgY29uc3QgY2hhciAqIHJldCA9IE5VTEw7CisgICAgaWYgKGNvbiAmJiBjb24tPmxlZnRvdmVycyAhPSBOVUxMICYmIGNvbi0+bmV4dExlZnRvdmVyIDwgY29uLT5udW1MZWZ0b3ZlcnMpCisJcmV0ID0gY29uLT5sZWZ0b3ZlcnNbY29uLT5uZXh0TGVmdG92ZXJdOworICAgIHJldHVybiByZXQ7Cit9CisKK2NvbnN0IGNoYXIgKiogcG9wdEdldEFyZ3MocG9wdENvbnRleHQgY29uKQoreworICAgIGlmIChjb24gPT0gTlVMTCB8fAorCWNvbi0+bGVmdG92ZXJzID09IE5VTEwgfHwgY29uLT5udW1MZWZ0b3ZlcnMgPT0gY29uLT5uZXh0TGVmdG92ZXIpCisJcmV0dXJuIE5VTEw7CisKKyAgICAvKiBzb21lIGFwcHMgbGlrZSBbbGlrZSBSUE0gOy0pIF0gbmVlZCB0aGlzIE5VTEwgdGVybWluYXRlZCAqLworICAgIGNvbi0+bGVmdG92ZXJzW2Nvbi0+bnVtTGVmdG92ZXJzXSA9IE5VTEw7CisKKy8qQC1udWxscmV0IC1udWxsc3RhdGUgQCovCS8qIEZJWDogdHlwZWRlZiBkb3VibGUgaW5kaXJlY3Rpb24uICovCisgICAgcmV0dXJuIChjb24tPmxlZnRvdmVycyArIGNvbi0+bmV4dExlZnRvdmVyKTsKKy8qQD1udWxscmV0ID1udWxsc3RhdGUgQCovCit9CisKK3N0YXRpYyAvKkBudWxsQCovCitwb3B0SXRlbSBwb3B0RnJlZUl0ZW1zKC8qQG9ubHlAKi8gLypAbnVsbEAqLyBwb3B0SXRlbSBpdGVtcywgaW50IG5pdGVtcykKKwkvKkBtb2RpZmllcyBpdGVtcyBAKi8KK3sKKyAgICBpZiAoaXRlbXMgIT0gTlVMTCkgeworCXBvcHRJdGVtIGl0ZW0gPSBpdGVtczsKKwl3aGlsZSAoLS1uaXRlbXMgPj0gMCkgeworLypALW1vZG9ic2VydmVyIC1vYnNlcnZlcnRyYW5zIC1kZXBlbmRlbnR0cmFuc0AqLworCSAgICBpdGVtLT5vcHRpb24ubG9uZ05hbWUgPSBfZnJlZShpdGVtLT5vcHRpb24ubG9uZ05hbWUpOworCSAgICBpdGVtLT5vcHRpb24uZGVzY3JpcCA9IF9mcmVlKGl0ZW0tPm9wdGlvbi5kZXNjcmlwKTsKKwkgICAgaXRlbS0+b3B0aW9uLmFyZ0Rlc2NyaXAgPSBfZnJlZShpdGVtLT5vcHRpb24uYXJnRGVzY3JpcCk7CisvKkA9bW9kb2JzZXJ2ZXIgPW9ic2VydmVydHJhbnMgPWRlcGVuZGVudHRyYW5zQCovCisJICAgIGl0ZW0tPmFyZ3YgPSBfZnJlZShpdGVtLT5hcmd2KTsKKwkgICAgaXRlbSsrOworCX0KKwlpdGVtcyA9IF9mcmVlKGl0ZW1zKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3BvcHRDb250ZXh0IHBvcHRGcmVlQ29udGV4dChwb3B0Q29udGV4dCBjb24pCit7CisgICAgaWYgKGNvbiA9PSBOVUxMKSByZXR1cm4gY29uOworICAgIHBvcHRSZXNldENvbnRleHQoY29uKTsKKyAgICBjb24tPm9zLT5hcmdiID0gX2ZyZWUoY29uLT5vcy0+YXJnYik7CisKKyAgICBjb24tPmFsaWFzZXMgPSBwb3B0RnJlZUl0ZW1zKGNvbi0+YWxpYXNlcywgY29uLT5udW1BbGlhc2VzKTsKKyAgICBjb24tPm51bUFsaWFzZXMgPSAwOworCisgICAgY29uLT5leGVjcyA9IHBvcHRGcmVlSXRlbXMoY29uLT5leGVjcywgY29uLT5udW1FeGVjcyk7CisgICAgY29uLT5udW1FeGVjcyA9IDA7CisKKyAgICBjb24tPmxlZnRvdmVycyA9IF9mcmVlKGNvbi0+bGVmdG92ZXJzKTsKKyAgICBjb24tPmZpbmFsQXJndiA9IF9mcmVlKGNvbi0+ZmluYWxBcmd2KTsKKyAgICBjb24tPmFwcE5hbWUgPSBfZnJlZShjb24tPmFwcE5hbWUpOworICAgIGNvbi0+b3RoZXJIZWxwID0gX2ZyZWUoY29uLT5vdGhlckhlbHApOworICAgIGNvbi0+ZXhlY1BhdGggPSBfZnJlZShjb24tPmV4ZWNQYXRoKTsKKyAgICBjb24tPmFyZ19zdHJpcCA9IFBCTV9GUkVFKGNvbi0+YXJnX3N0cmlwKTsKKyAgICAKKyAgICBjb24gPSBfZnJlZShjb24pOworICAgIHJldHVybiBjb247Cit9CisKK2ludCBwb3B0QWRkQWxpYXMocG9wdENvbnRleHQgY29uLCBzdHJ1Y3QgcG9wdEFsaWFzIGFsaWFzLAorCQkvKkB1bnVzZWRAKi8gVU5VU0VEKGludCBmbGFncykpCit7CisgICAgc3RydWN0IHBvcHRJdGVtX3MgaXRlbV9idWY7CisgICAgcG9wdEl0ZW0gaXRlbSA9ICZpdGVtX2J1ZjsKKyAgICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKCppdGVtKSk7CisgICAgaXRlbS0+b3B0aW9uLmxvbmdOYW1lID0gYWxpYXMubG9uZ05hbWU7CisgICAgaXRlbS0+b3B0aW9uLnNob3J0TmFtZSA9IGFsaWFzLnNob3J0TmFtZTsKKyAgICBpdGVtLT5vcHRpb24uYXJnSW5mbyA9IFBPUFRfQVJHRkxBR19ET0NfSElEREVOOworICAgIGl0ZW0tPm9wdGlvbi5hcmcgPSAwOworICAgIGl0ZW0tPm9wdGlvbi52YWwgPSAwOworICAgIGl0ZW0tPm9wdGlvbi5kZXNjcmlwID0gTlVMTDsKKyAgICBpdGVtLT5vcHRpb24uYXJnRGVzY3JpcCA9IE5VTEw7CisgICAgaXRlbS0+YXJnYyA9IGFsaWFzLmFyZ2M7CisgICAgaXRlbS0+YXJndiA9IGFsaWFzLmFyZ3Y7CisgICAgcmV0dXJuIHBvcHRBZGRJdGVtKGNvbiwgaXRlbSwgMCk7Cit9CisKK2ludCBwb3B0QWRkSXRlbShwb3B0Q29udGV4dCBjb24sIHBvcHRJdGVtIG5ld0l0ZW0sIGludCBmbGFncykKK3sKKyAgICBwb3B0SXRlbSAqIGl0ZW1zLCBpdGVtOworICAgIGludCAqIG5pdGVtczsKKworICAgIHN3aXRjaCAoZmxhZ3MpIHsKKyAgICBjYXNlIDE6CisJaXRlbXMgPSAmY29uLT5leGVjczsKKwluaXRlbXMgPSAmY29uLT5udW1FeGVjczsKKwlicmVhazsKKyAgICBjYXNlIDA6CisJaXRlbXMgPSAmY29uLT5hbGlhc2VzOworCW5pdGVtcyA9ICZjb24tPm51bUFsaWFzZXM7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlyZXR1cm4gMTsKKwkvKkBub3RyZWFjaGVkQCovIGJyZWFrOworICAgIH0KKworICAgICppdGVtcyA9IHJlYWxsb2MoKCppdGVtcyksICgoKm5pdGVtcykgKyAxKSAqIHNpemVvZigqKml0ZW1zKSk7CisgICAgaWYgKCgqaXRlbXMpID09IE5VTEwpCisJcmV0dXJuIDE7CisKKyAgICBpdGVtID0gKCppdGVtcykgKyAoKm5pdGVtcyk7CisKKyAgICBpdGVtLT5vcHRpb24ubG9uZ05hbWUgPQorCShuZXdJdGVtLT5vcHRpb24ubG9uZ05hbWUgPyB4c3RyZHVwKG5ld0l0ZW0tPm9wdGlvbi5sb25nTmFtZSkgOiBOVUxMKTsKKyAgICBpdGVtLT5vcHRpb24uc2hvcnROYW1lID0gbmV3SXRlbS0+b3B0aW9uLnNob3J0TmFtZTsKKyAgICBpdGVtLT5vcHRpb24uYXJnSW5mbyA9IG5ld0l0ZW0tPm9wdGlvbi5hcmdJbmZvOworICAgIGl0ZW0tPm9wdGlvbi5hcmcgPSBuZXdJdGVtLT5vcHRpb24uYXJnOworICAgIGl0ZW0tPm9wdGlvbi52YWwgPSBuZXdJdGVtLT5vcHRpb24udmFsOworICAgIGl0ZW0tPm9wdGlvbi5kZXNjcmlwID0KKwkobmV3SXRlbS0+b3B0aW9uLmRlc2NyaXAgPyB4c3RyZHVwKG5ld0l0ZW0tPm9wdGlvbi5kZXNjcmlwKSA6IE5VTEwpOworICAgIGl0ZW0tPm9wdGlvbi5hcmdEZXNjcmlwID0KKyAgICAgICAobmV3SXRlbS0+b3B0aW9uLmFyZ0Rlc2NyaXAgPyB4c3RyZHVwKG5ld0l0ZW0tPm9wdGlvbi5hcmdEZXNjcmlwKSA6IE5VTEwpOworICAgIGl0ZW0tPmFyZ2MgPSBuZXdJdGVtLT5hcmdjOworICAgIGl0ZW0tPmFyZ3YgPSBuZXdJdGVtLT5hcmd2OworCisgICAgKCpuaXRlbXMpKys7CisKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqIHBvcHRCYWRPcHRpb24ocG9wdENvbnRleHQgY29uLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgICAgc3RydWN0IG9wdGlvblN0YWNrRW50cnkgKiBvcyA9IE5VTEw7CisKKyAgICBpZiAoY29uICE9IE5VTEwpCisJb3MgPSAoZmxhZ3MgJiBQT1BUX0JBRE9QVElPTl9OT0FMSUFTKSA/IGNvbi0+b3B0aW9uU3RhY2sgOiBjb24tPm9zOworCisgICAgcmV0dXJuIChvcyAhPSBOVUxMICYmIG9zLT5hcmd2ICE9IE5VTEwgPyBvcy0+YXJndltvcy0+bmV4dCAtIDFdIDogTlVMTCk7Cit9CisKK2NvbnN0IGNoYXIgKiBwb3B0U3RyZXJyb3IoY29uc3QgaW50IGVycm9yKQoreworICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgIGNhc2UgUE9QVF9FUlJPUl9OT0FSRzoKKwlyZXR1cm4gUE9QVF8oIm1pc3NpbmcgYXJndW1lbnQiKTsKKyAgICAgIGNhc2UgUE9QVF9FUlJPUl9CQURPUFQ6CisJcmV0dXJuIFBPUFRfKCJ1bmtub3duIG9wdGlvbiIpOworICAgICAgY2FzZSBQT1BUX0VSUk9SX0JBRE9QRVJBVElPTjoKKwlyZXR1cm4gUE9QVF8oIm11dHVhbGx5IGV4Y2x1c2l2ZSBsb2dpY2FsIG9wZXJhdGlvbnMgcmVxdWVzdGVkIik7CisgICAgICBjYXNlIFBPUFRfRVJST1JfTlVMTEFSRzoKKwlyZXR1cm4gUE9QVF8oIm9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCIpOworICAgICAgY2FzZSBQT1BUX0VSUk9SX09QVFNUT09ERUVQOgorCXJldHVybiBQT1BUXygiYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSIpOworICAgICAgY2FzZSBQT1BUX0VSUk9SX0JBRFFVT1RFOgorCXJldHVybiBQT1BUXygiZXJyb3IgaW4gcGFyYW1ldGVyIHF1b3RpbmciKTsKKyAgICAgIGNhc2UgUE9QVF9FUlJPUl9CQUROVU1CRVI6CisJcmV0dXJuIFBPUFRfKCJpbnZhbGlkIG51bWVyaWMgdmFsdWUiKTsKKyAgICAgIGNhc2UgUE9QVF9FUlJPUl9PVkVSRkxPVzoKKwlyZXR1cm4gUE9QVF8oIm51bWJlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsIik7CisgICAgICBjYXNlIFBPUFRfRVJST1JfTUFMTE9DOgorCXJldHVybiBQT1BUXygibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIik7CisgICAgICBjYXNlIFBPUFRfRVJST1JfQkFEQ09ORklHOgorCXJldHVybiBQT1BUXygiY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0Iik7CisgICAgICBjYXNlIFBPUFRfRVJST1JfRVJSTk86CisJcmV0dXJuIHN0cmVycm9yKGVycm5vKTsKKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuIFBPUFRfKCJ1bmtub3duIGVycm9yIik7CisgICAgfQorfQorCitpbnQgcG9wdFN0dWZmQXJncyhwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiogYXJndikKK3sKKyAgICBpbnQgYXJnYzsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoKGNvbi0+b3MgLSBjb24tPm9wdGlvblN0YWNrKSA9PSBQT1BUX09QVElPTl9ERVBUSCkKKwlyZXR1cm4gUE9QVF9FUlJPUl9PUFRTVE9PREVFUDsKKworICAgIGZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY107IGFyZ2MrKykKKwl7fTsKKworICAgIGNvbi0+b3MrKzsKKyAgICBjb24tPm9zLT5uZXh0ID0gMDsKKyAgICBjb24tPm9zLT5uZXh0QXJnID0gTlVMTDsKKyAgICBjb24tPm9zLT5uZXh0Q2hhckFyZyA9IE5VTEw7CisgICAgY29uLT5vcy0+Y3VyckFsaWFzID0gTlVMTDsKKyAgICByYyA9IHBvcHREdXBBcmd2KGFyZ2MsIGFyZ3YsICZjb24tPm9zLT5hcmdjLCAmY29uLT5vcy0+YXJndik7CisgICAgY29uLT5vcy0+YXJnYiA9IE5VTEw7CisgICAgY29uLT5vcy0+c3R1ZmZlZCA9IDE7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2NvbnN0IGNoYXIgKiBwb3B0R2V0SW52b2NhdGlvbk5hbWUocG9wdENvbnRleHQgY29uKQoreworICAgIHJldHVybiAoY29uLT5vcy0+YXJndiA/IGNvbi0+b3MtPmFyZ3ZbMF0gOiAiIik7Cit9CisKK2ludCBwb3B0U3RyaXBwZWRBcmd2KHBvcHRDb250ZXh0IGNvbiwgaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKyAgICBpbnQgbnVtYXJncyA9IGFyZ2M7CisgICAgaW50IGogPSAxOworICAgIGludCBpOworICAgIAorLypALXNpemVvZnR5cGVAKi8KKyAgICBpZiAoY29uLT5hcmdfc3RyaXApCisgICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCWlmIChQQk1fSVNTRVQoaSwgY29uLT5hcmdfc3RyaXApKQorCSAgICBudW1hcmdzLS07CisgICAgfQorICAgIAorICAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwlpZiAoY29uLT5hcmdfc3RyaXAgJiYgUEJNX0lTU0VUKGksIGNvbi0+YXJnX3N0cmlwKSkKKwkgICAgY29udGludWU7CisJYXJndltqXSA9IChqIDwgbnVtYXJncykgPyBhcmd2W2ldIDogTlVMTDsKKwlqKys7CisgICAgfQorLypAPXNpemVvZnR5cGVAKi8KKyAgICAKKyAgICByZXR1cm4gbnVtYXJnczsKK30KZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wb3B0LmggYi9wb3B0LTEuMTYvcG9wdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjNiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG9wdC5oCkBAIC0wLDAgKzEsNzQ0IEBACisvKiogXGZpbGUgcG9wdC9wb3B0LmgKKyAqIFxpbmdyb3VwIHBvcHQKKyAqLworCisvKiAoQykgMTk5OC0yMDAwIFJlZCBIYXQsIEluYy4gLS0gTGljZW5zaW5nIGRldGFpbHMgYXJlIGluIHRoZSBDT1BZSU5HCisgICBmaWxlIGFjY29tcGFueWluZyBwb3B0IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhdmFpbGFibGUgZnJvbSAKKyAgIGZ0cDovL2Z0cC5ycG0ub3JnL3B1Yi9ycG0vZGlzdC4gKi8KKworI2lmbmRlZiBIX1BPUFQKKyNkZWZpbmUgSF9QT1BUCisKKyNpbmNsdWRlIDxzdGRpby5oPgkJCS8qIGZvciBGSUxFICogKi8KKworI2RlZmluZSBQT1BUX09QVElPTl9ERVBUSAkxMAorCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgQXJnIHR5cGUgaWRlbnRpZmllcnMKKyAqLworLypAeyovCisjZGVmaW5lIFBPUFRfQVJHX05PTkUJCSAwVQkvKiE8IG5vIGFyZyAqLworI2RlZmluZSBQT1BUX0FSR19TVFJJTkcJCSAxVQkvKiE8IGFyZyB3aWxsIGJlIHNhdmVkIGFzIHN0cmluZyAqLworI2RlZmluZSBQT1BUX0FSR19JTlQJCSAyVQkvKiE8IGFyZyA9PT4gaW50ICovCisjZGVmaW5lIFBPUFRfQVJHX0xPTkcJCSAzVQkvKiE8IGFyZyA9PT4gbG9uZyAqLworI2RlZmluZSBQT1BUX0FSR19JTkNMVURFX1RBQkxFCSA0VQkvKiE8IGFyZyBwb2ludHMgdG8gdGFibGUgKi8KKyNkZWZpbmUgUE9QVF9BUkdfQ0FMTEJBQ0sJIDVVCS8qITwgdGFibGUtd2lkZSBjYWxsYmFjay4uLiBtdXN0IGJlCisJCQkJCSAgIHNldCBmaXJzdCBpbiB0YWJsZTsgYXJnIHBvaW50cyAKKwkJCQkJICAgdG8gY2FsbGJhY2ssIGRlc2NyaXAgcG9pbnRzIHRvIAorCQkJCQkgICBjYWxsYmFjayBkYXRhIHRvIHBhc3MgKi8KKyNkZWZpbmUgUE9QVF9BUkdfSU5UTF9ET01BSU4gICAgIDZVCS8qITwgc2V0IHRoZSB0cmFuc2xhdGlvbiBkb21haW4KKwkJCQkJICAgZm9yIHRoaXMgdGFibGUgYW5kIGFueQorCQkJCQkgICBpbmNsdWRlZCB0YWJsZXM7IGFyZyBwb2ludHMKKwkJCQkJICAgdG8gdGhlIGRvbWFpbiBzdHJpbmcgKi8KKyNkZWZpbmUgUE9QVF9BUkdfVkFMCQkgN1UJLyohPCBhcmcgc2hvdWxkIHRha2UgdmFsdWUgdmFsICovCisjZGVmaW5lCVBPUFRfQVJHX0ZMT0FUCQkgOFUJLyohPCBhcmcgPT0+IGZsb2F0ICovCisjZGVmaW5lCVBPUFRfQVJHX0RPVUJMRQkJIDlVCS8qITwgYXJnID09PiBkb3VibGUgKi8KKyNkZWZpbmUJUE9QVF9BUkdfTE9OR0xPTkcJIDEwVQkvKiE8IGFyZyA9PT4gbG9uZyBsb25nICovCisKKyNkZWZpbmUgUE9QVF9BUkdfTUFJTkNBTEwJMTZVKzExVQkvKiE8IEVYUEVSSU1FTlRBTDogcmV0dXJuICgqYXJnKSAoYXJnYywgYXJndikgKi8KKyNkZWZpbmUJUE9QVF9BUkdfQVJHVgkJMTJVCS8qITwgZHVwZSdkIGFyZyBhcHBlbmRlZCB0byByZWFsbG9jJ2QgYXJndiBhcnJheS4gKi8KKyNkZWZpbmUJUE9QVF9BUkdfU0hPUlQJCTEzVQkvKiE8IGFyZyA9PT4gc2hvcnQgKi8KKyNkZWZpbmUJUE9QVF9BUkdfQklUU0VUCQkxNlUrMTRVCS8qITwgYXJnID09PiBiaXQgc2V0ICovCisKKyNkZWZpbmUgUE9QVF9BUkdfTUFTSwkJMHgwMDAwMDBGRlUKKyNkZWZpbmUgUE9QVF9HUk9VUF9NQVNLCQkweDAwMDBGRjAwVQorCisvKkB9Ki8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxuYW1lIEFyZyBtb2RpZmllcnMKKyAqLworLypAeyovCisjZGVmaW5lIFBPUFRfQVJHRkxBR19PTkVEQVNICTB4ODAwMDAwMDBVICAvKiE8IGFsbG93IC1sb25nb3B0aW9uICovCisjZGVmaW5lIFBPUFRfQVJHRkxBR19ET0NfSElEREVOIDB4NDAwMDAwMDBVICAvKiE8IGRvbid0IHNob3cgaW4gaGVscC91c2FnZSAqLworI2RlZmluZSBQT1BUX0FSR0ZMQUdfU1RSSVAJMHgyMDAwMDAwMFUgIC8qITwgc3RyaXAgdGhpcyBhcmcgZnJvbSBhcmd2KG9ubHkgYXBwbGllcyB0byBsb25nIGFyZ3MpICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19PUFRJT05BTAkweDEwMDAwMDAwVSAgLyohPCBhcmcgbWF5IGJlIG1pc3NpbmcgKi8KKworI2RlZmluZQlQT1BUX0FSR0ZMQUdfT1IJCTB4MDgwMDAwMDBVICAvKiE8IGFyZyB3aWxsIGJlIG9yJ2VkICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19OT1IJMHgwOTAwMDAwMFUgIC8qITwgYXJnIHdpbGwgYmUgbm9yJ2VkICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19BTkQJMHgwNDAwMDAwMFUgIC8qITwgYXJnIHdpbGwgYmUgYW5kJ2VkICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19OQU5ECTB4MDUwMDAwMDBVICAvKiE8IGFyZyB3aWxsIGJlIG5hbmQnZWQgKi8KKyNkZWZpbmUJUE9QVF9BUkdGTEFHX1hPUgkweDAyMDAwMDAwVSAgLyohPCBhcmcgd2lsbCBiZSB4b3InZWQgKi8KKyNkZWZpbmUJUE9QVF9BUkdGTEFHX05PVAkweDAxMDAwMDAwVSAgLyohPCBhcmcgd2lsbCBiZSBuZWdhdGVkICovCisjZGVmaW5lIFBPUFRfQVJHRkxBR19MT0dJQ0FMT1BTIFwKKyAgICAgICAgKFBPUFRfQVJHRkxBR19PUnxQT1BUX0FSR0ZMQUdfQU5EfFBPUFRfQVJHRkxBR19YT1IpCisKKyNkZWZpbmUJUE9QVF9CSVRfU0VUCShQT1BUX0FSR19WQUx8UE9QVF9BUkdGTEFHX09SKQorCQkJCQkvKiE8IHNldCBhcmcgYml0KHMpICovCisjZGVmaW5lCVBPUFRfQklUX0NMUgkoUE9QVF9BUkdfVkFMfFBPUFRfQVJHRkxBR19OQU5EKQorCQkJCQkvKiE8IGNsZWFyIGFyZyBiaXQocykgKi8KKworI2RlZmluZQlQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxUIDB4MDA4MDAwMDBVIC8qITwgc2hvdyBkZWZhdWx0IHZhbHVlIGluIC0taGVscCAqLworI2RlZmluZQlQT1BUX0FSR0ZMQUdfUkFORE9NCTB4MDA0MDAwMDBVICAvKiE8IHJhbmRvbSB2YWx1ZSBpbiBbMSxhcmddICovCisjZGVmaW5lCVBPUFRfQVJHRkxBR19UT0dHTEUJMHgwMDIwMDAwMFUgIC8qITwgcGVybWl0IC0tW25vXW9wdCBwcmVmaXggdG9nZ2xlICovCisKKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgQ2FsbGJhY2sgbW9kaWZpZXJzCisgKi8KKy8qQHsqLworI2RlZmluZSBQT1BUX0NCRkxBR19QUkUJCTB4ODAwMDAwMDBVICAvKiE8IGNhbGwgdGhlIGNhbGxiYWNrIGJlZm9yZSBwYXJzZSAqLworI2RlZmluZSBQT1BUX0NCRkxBR19QT1NUCTB4NDAwMDAwMDBVICAvKiE8IGNhbGwgdGhlIGNhbGxiYWNrIGFmdGVyIHBhcnNlICovCisjZGVmaW5lIFBPUFRfQ0JGTEFHX0lOQ19EQVRBCTB4MjAwMDAwMDBVICAvKiE8IHVzZSBkYXRhIGZyb20gdGhlIGluY2x1ZGUgbGluZSwKKwkJCQkJICAgICAgIG5vdCB0aGUgc3VidGFibGUgKi8KKyNkZWZpbmUgUE9QVF9DQkZMQUdfU0tJUE9QVElPTgkweDEwMDAwMDAwVSAgLyohPCBkb24ndCBjYWxsYmFjayB3aXRoIG9wdGlvbiAqLworI2RlZmluZSBQT1BUX0NCRkxBR19DT05USU5VRQkweDA4MDAwMDAwVSAgLyohPCBjb250aW51ZSBjYWxsYmFja3Mgd2l0aCBvcHRpb24gKi8KKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgRXJyb3IgcmV0dXJuIHZhbHVlcworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9FUlJPUl9OT0FSRwktMTAJLyohPCBtaXNzaW5nIGFyZ3VtZW50ICovCisjZGVmaW5lIFBPUFRfRVJST1JfQkFET1BUCS0xMQkvKiE8IHVua25vd24gb3B0aW9uICovCisjZGVmaW5lIFBPUFRfRVJST1JfT1BUU1RPT0RFRVAJLTEzCS8qITwgYWxpYXNlcyBuZXN0ZWQgdG9vIGRlZXBseSAqLworI2RlZmluZSBQT1BUX0VSUk9SX0JBRFFVT1RFCS0xNQkvKiE8IGVycm9yIGluIHBhcmFtdGVyIHF1b3RpbmcgKi8KKyNkZWZpbmUgUE9QVF9FUlJPUl9FUlJOTwktMTYJLyohPCBlcnJubyBzZXQsIHVzZSBzdHJlcnJvcihlcnJubykgKi8KKyNkZWZpbmUgUE9QVF9FUlJPUl9CQUROVU1CRVIJLTE3CS8qITwgaW52YWxpZCBudW1lcmljIHZhbHVlICovCisjZGVmaW5lIFBPUFRfRVJST1JfT1ZFUkZMT1cJLTE4CS8qITwgbnVtYmVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwgKi8KKyNkZWZpbmUJUE9QVF9FUlJPUl9CQURPUEVSQVRJT04JLTE5CS8qITwgbXV0dWFsbHkgZXhjbHVzaXZlIGxvZ2ljYWwgb3BlcmF0aW9ucyByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUJUE9QVF9FUlJPUl9OVUxMQVJHCS0yMAkvKiE8IG9wdC0+YXJnIHNob3VsZCBub3QgYmUgTlVMTCAqLworI2RlZmluZQlQT1BUX0VSUk9SX01BTExPQwktMjEJLyohPCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKyNkZWZpbmUJUE9QVF9FUlJPUl9CQURDT05GSUcJLTIyCS8qITwgY29uZmlnIGZpbGUgZmFpbGVkIHNhbml0eSB0ZXN0ICovCisvKkB9Ki8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxuYW1lIHBvcHRCYWRPcHRpb24oKSBmbGFncworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9CQURPUFRJT05fTk9BTElBUyAgKDFVIDw8IDApICAvKiE8IGRvbid0IGdvIGludG8gYW4gYWxpYXMgKi8KKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXG5hbWUgcG9wdEdldENvbnRleHQoKSBmbGFncworICovCisvKkB7Ki8KKyNkZWZpbmUgUE9QVF9DT05URVhUX05PX0VYRUMJKDFVIDw8IDApICAvKiE8IGlnbm9yZSBleGVjIGV4cGFuc2lvbnMgKi8KKyNkZWZpbmUgUE9QVF9DT05URVhUX0tFRVBfRklSU1QJKDFVIDw8IDEpICAvKiE8IHBheSBhdHRlbnRpb24gdG8gYXJndlswXSAqLworI2RlZmluZSBQT1BUX0NPTlRFWFRfUE9TSVhNRUhBUkRFUiAoMVUgPDwgMikgLyohPCBvcHRpb25zIGNhbid0IGZvbGxvdyBhcmdzICovCisjZGVmaW5lIFBPUFRfQ09OVEVYVF9BUkdfT1BUUwkoMVUgPDwgNCkgLyohPCByZXR1cm4gYXJncyBhcyBvcHRpb25zIHdpdGggdmFsdWUgMCAqLworLypAfSovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKi8KK3N0cnVjdCBwb3B0T3B0aW9uIHsKKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogbG9uZ05hbWU7CS8qITwgbWF5IGJlIE5VTEwgKi8KKyAgICBjaGFyIHNob3J0TmFtZTsJCS8qITwgbWF5IGJlIE5VTCAqLworICAgIHVuc2lnbmVkIGludCBhcmdJbmZvOworLypAc2hhcmVkQCovIC8qQG51bGxAKi8KKyAgICB2b2lkICogYXJnOwkJCS8qITwgZGVwZW5kcyBvbiBhcmdJbmZvICovCisgICAgaW50IHZhbDsJCQkvKiE8IDAgbWVhbnMgZG9uJ3QgcmV0dXJuLCBqdXN0IHVwZGF0ZSBmbGFnICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqIGRlc2NyaXA7CS8qITwgZGVzY3JpcHRpb24gZm9yIGF1dG9oZWxwIC0tIG1heSBiZSBOVUxMICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqIGFyZ0Rlc2NyaXA7CS8qITwgYXJndW1lbnQgZGVzY3JpcHRpb24gZm9yIGF1dG9oZWxwICovCit9OworCisvKiogXGluZ3JvdXAgcG9wdAorICogQSBwb3B0IGFsaWFzIGFyZ3VtZW50IGZvciBwb3B0QWRkQWxpYXMoKS4KKyAqLworc3RydWN0IHBvcHRBbGlhcyB7CisvKkBvd25lZEAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqIGxvbmdOYW1lOwkvKiE8IG1heSBiZSBOVUxMICovCisgICAgY2hhciBzaG9ydE5hbWU7CQkvKiE8IG1heSBiZSBOVUwgKi8KKyAgICBpbnQgYXJnYzsKKy8qQG93bmVkQCovCisgICAgY29uc3QgY2hhciAqKiBhcmd2OwkJLyohPCBtdXN0IGJlIGZyZWUoKWFibGUgKi8KK307CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBIHBvcHQgYWxpYXMgb3IgZXhlYyBhcmd1bWVudCBmb3IgcG9wdEFkZEl0ZW0oKS4KKyAqLworLypALWV4cG9ydHR5cGVAKi8KK3R5cGVkZWYgc3RydWN0IHBvcHRJdGVtX3MgeworICAgIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbjsJLyohPCBhbGlhcy9leGVjIG5hbWUocykgYW5kIGRlc2NyaXB0aW9uLiAqLworICAgIGludCBhcmdjOwkJCS8qITwgKGFsaWFzKSBuby4gb2YgYXJncy4gKi8KKy8qQG93bmVkQCovCisgICAgY29uc3QgY2hhciAqKiBhcmd2OwkJLyohPCAoYWxpYXMpIGFyZ3MsIG11c3QgYmUgZnJlZSgpYWJsZS4gKi8KK30gKiBwb3B0SXRlbTsKKy8qQD1leHBvcnR0eXBlQCovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcbmFtZSBBdXRvLWdlbmVyYXRlZCBoZWxwL3VzYWdlCisgKi8KKy8qQHsqLworCisvKioKKyAqIEVtcHR5IHRhYmxlIG1hcmtlciB0byBlbmFibGUgZGlzcGxheWluZyBwb3B0IGFsaWFzL2V4ZWMgb3B0aW9ucy4KKyAqLworLypALWV4cG9ydHZhckAqLworLypAdW5jaGVja2VkQCovIC8qQG9ic2VydmVyQCovCitleHRlcm4gc3RydWN0IHBvcHRPcHRpb24gcG9wdEFsaWFzT3B0aW9uc1tdOworLypAPWV4cG9ydHZhckAqLworI2RlZmluZSBQT1BUX0FVVE9BTElBUyB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsIHBvcHRBbGlhc09wdGlvbnMsIFwKKwkJCTAsICJPcHRpb25zIGltcGxlbWVudGVkIHZpYSBwb3B0IGFsaWFzL2V4ZWM6IiwgTlVMTCB9LAorCisvKioKKyAqIEF1dG8gaGVscCB0YWJsZSBvcHRpb25zLgorICovCisvKkAtZXhwb3J0dmFyQCovCisvKkB1bmNoZWNrZWRAKi8gLypAb2JzZXJ2ZXJAKi8KK2V4dGVybiBzdHJ1Y3QgcG9wdE9wdGlvbiBwb3B0SGVscE9wdGlvbnNbXTsKKy8qQD1leHBvcnR2YXJAKi8KKworLypALWV4cG9ydHZhckAqLworLypAdW5jaGVja2VkQCovIC8qQG9ic2VydmVyQCovCitleHRlcm4gc3RydWN0IHBvcHRPcHRpb24gKiBwb3B0SGVscE9wdGlvbnNJMThOOworLypAPWV4cG9ydHZhckAqLworCisjZGVmaW5lIFBPUFRfQVVUT0hFTFAgeyBOVUxMLCAnXDAnLCBQT1BUX0FSR19JTkNMVURFX1RBQkxFLCBwb3B0SGVscE9wdGlvbnMsIFwKKwkJCTAsICJIZWxwIG9wdGlvbnM6IiwgTlVMTCB9LAorCisjZGVmaW5lIFBPUFRfVEFCTEVFTkQgeyBOVUxMLCAnXDAnLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KKy8qQH0qLworCisvKiogXGluZ3JvdXAgcG9wdAorICovCisvKkAtZXhwb3J0dHlwZUAqLwordHlwZWRlZiAvKkBhYnN0cmFjdEAqLyBzdHJ1Y3QgcG9wdENvbnRleHRfcyAqIHBvcHRDb250ZXh0OworLypAPWV4cG9ydHR5cGVAKi8KKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworLypALWV4cG9ydHR5cGUgLXR5cGV1c2VAKi8KK3R5cGVkZWYgc3RydWN0IHBvcHRPcHRpb24gKiBwb3B0T3B0aW9uOworLypAPWV4cG9ydHR5cGUgPXR5cGV1c2VAKi8KKyNlbmRpZgorCisvKiogXGluZ3JvdXAgcG9wdAorICovCisvKkAtZXhwb3J0Y29uc3RAKi8KK2VudW0gcG9wdENhbGxiYWNrUmVhc29uIHsKKyAgICBQT1BUX0NBTExCQUNLX1JFQVNPTl9QUkUJPSAwLCAKKyAgICBQT1BUX0NBTExCQUNLX1JFQVNPTl9QT1NUCT0gMSwKKyAgICBQT1BUX0NBTExCQUNLX1JFQVNPTl9PUFRJT04gPSAyCit9OworLypAPWV4cG9ydGNvbnN0QCovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKy8qQC10eXBlQCovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBUYWJsZSBjYWxsYmFjayBwcm90b3R5cGUuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gcmVhc29uCXJlYXNvbiBmb3IgY2FsbGJhY2sKKyAqIEBwYXJhbSBvcHQJCW9wdGlvbiB0aGF0IHRyaWdnZXJlZCBjYWxsYmFjaworICogQHBhcmFtIGFyZwkJQHRvZG8gRG9jdW1lbnQuCisgKiBAcGFyYW0gZGF0YQkJQHRvZG8gRG9jdW1lbnQuCisgKi8KK3R5cGVkZWYgdm9pZCAoKnBvcHRDYWxsYmFja1R5cGUpIChwb3B0Q29udGV4dCBjb24sIAorCQllbnVtIHBvcHRDYWxsYmFja1JlYXNvbiByZWFzb24sCisJCS8qQG51bGxAKi8gY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQsCisJCS8qQG51bGxAKi8gY29uc3QgY2hhciAqIGFyZywKKwkJLypAbnVsbEAqLyBjb25zdCB2b2lkICogZGF0YSkKKwkvKkBnbG9iYWxzIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgaW50ZXJuYWxTdGF0ZSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBEZXN0cm95IGNvbnRleHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcmV0dXJuCQlOVUxMIGFsd2F5cworICovCisvKkBudWxsQCovCitwb3B0Q29udGV4dCBwb3B0RnJlZUNvbnRleHQoIC8qQG9ubHlAKi8gLypAbnVsbEAqLyBwb3B0Q29udGV4dCBjb24pCisJLypAbW9kaWZpZXMgY29uIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIEluaXRpYWxpemUgcG9wdCBjb250ZXh0LgorICogQHBhcmFtIG5hbWUJCWNvbnRleHQgbmFtZSAodXN1YWxseSBhcmd2WzBdIHByb2dyYW0gbmFtZSkKKyAqIEBwYXJhbSBhcmdjCQluby4gb2YgYXJndW1lbnRzCisgKiBAcGFyYW0gYXJndgkJYXJndW1lbnQgYXJyYXkKKyAqIEBwYXJhbSBvcHRpb25zCWFkZHJlc3Mgb2YgcG9wdCBvcHRpb24gdGFibGUKKyAqIEBwYXJhbSBmbGFncwkJb3InZCBQT1BUX0NPTlRFWFRfKiBiaXRzCisgKiBAcmV0dXJuCQlpbml0aWFsaXplZCBwb3B0IGNvbnRleHQKKyAqLworLypAb25seUAqLyAvKkBudWxsQCovCitwb3B0Q29udGV4dCBwb3B0R2V0Q29udGV4dCgKKwkJLypAZGVwZW5kZW50QCovIC8qQGtlZXBAKi8gY29uc3QgY2hhciAqIG5hbWUsCisJCWludCBhcmdjLCAvKkBkZXBlbmRlbnRAKi8gLypAa2VlcEAqLyBjb25zdCBjaGFyICoqIGFyZ3YsCisJCS8qQGRlcGVuZGVudEAqLyAvKkBrZWVwQCovIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0aW9ucywKKwkJdW5zaWduZWQgaW50IGZsYWdzKQorCS8qQGdsb2JhbHMgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBpbnRlcm5hbFN0YXRlIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIERlc3Ryb3kgY29udGV4dCAoYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24pLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJTlVMTCBhbHdheXMKKyAqLworLypAbnVsbEAqLworcG9wdENvbnRleHQgcG9wdEZpbmkoIC8qQG9ubHlAKi8gLypAbnVsbEAqLyBwb3B0Q29udGV4dCBjb24pCisJLypAbW9kaWZpZXMgY29uIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIEluaXRpYWxpemUgcG9wdCBjb250ZXh0IChhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbikuCisgKiBUaGlzIHJvdXRpbmUgZG9lcyBwb3B0R2V0Q29udGV4dCgpIGFuZCB0aGVuIHBvcHRSZWFkQ29uZmlnRmlsZXMoKS4KKyAqIEBwYXJhbSBhcmdjCQluby4gb2YgYXJndW1lbnRzCisgKiBAcGFyYW0gYXJndgkJYXJndW1lbnQgYXJyYXkKKyAqIEBwYXJhbSBvcHRpb25zCWFkZHJlc3Mgb2YgcG9wdCBvcHRpb24gdGFibGUKKyAqIEBwYXJhbSBjb25maWdQYXRocwljb2xvbiBzZXBhcmF0ZWQgZmlsZSBwYXRoKHMpIHRvIHJlYWQuCisgKiBAcmV0dXJuCQlpbml0aWFsaXplZCBwb3B0IGNvbnRleHQgKE5VTEwgb24gZXJyb3IpLgorICovCisvKkBvbmx5QCovIC8qQG51bGxAKi8gLypAdW51c2VkQCovCitwb3B0Q29udGV4dCBwb3B0SW5pdChpbnQgYXJnYywgLypAZGVwZW5kZW50QCovIC8qQGtlZXBAKi8gY29uc3QgY2hhciAqKiBhcmd2LAorCQkvKkBkZXBlbmRlbnRAKi8gLypAa2VlcEAqLyBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdGlvbnMsCisJCS8qQG51bGxAKi8gY29uc3QgY2hhciAqIGNvbmZpZ1BhdGhzKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBmaWxlU3lzdGVtLCBpbnRlcm5hbFN0YXRlIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJlaW5pdGlhbGl6ZSBwb3B0IGNvbnRleHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKi8KKy8qQHVudXNlZEAqLwordm9pZCBwb3B0UmVzZXRDb250ZXh0KC8qQG51bGxAKi9wb3B0Q29udGV4dCBjb24pCisJLypAbW9kaWZpZXMgY29uIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJldHVybiB2YWx1ZSBvZiBuZXh0IG9wdGlvbiBmb3VuZC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEByZXR1cm4JCW5leHQgb3B0aW9uIHZhbCwgLTEgb24gbGFzdCBpdGVtLCBQT1BUX0VSUk9SXyogb24gZXJyb3IKKyAqLworaW50IHBvcHRHZXROZXh0T3B0KC8qQG51bGxAKi9wb3B0Q29udGV4dCBjb24pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtLCBpbnRlcm5hbFN0YXRlIEAqLworCS8qQG1vZGlmaWVzIGNvbiwgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZXR1cm4gbmV4dCBvcHRpb24gYXJndW1lbnQgKGlmIGFueSkuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcmV0dXJuCQlvcHRpb24gYXJndW1lbnQsIE5VTEwgaWYgbm8gYXJndW1lbnQgaXMgYXZhaWxhYmxlCisgKi8KKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8gLypAdW51c2VkQCovCitjaGFyICogcG9wdEdldE9wdEFyZygvKkBudWxsQCovcG9wdENvbnRleHQgY29uKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZXR1cm4gbmV4dCBhcmd1bWVudC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEByZXR1cm4JCW5leHQgYXJndW1lbnQsIE5VTEwgaWYgbm8gYXJndW1lbnQgaXMgYXZhaWxhYmxlCisgKi8KKy8qQG9ic2VydmVyQCovIC8qQG51bGxAKi8gLypAdW51c2VkQCovCitjb25zdCBjaGFyICogcG9wdEdldEFyZygvKkBudWxsQCovcG9wdENvbnRleHQgY29uKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBQZWVrIGF0IGN1cnJlbnQgYXJndW1lbnQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcmV0dXJuCQljdXJyZW50IGFyZ3VtZW50LCBOVUxMIGlmIG5vIGFyZ3VtZW50IGlzIGF2YWlsYWJsZQorICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovIC8qQHVudXNlZEAqLworY29uc3QgY2hhciAqIHBvcHRQZWVrQXJnKC8qQG51bGxAKi9wb3B0Q29udGV4dCBjb24pCisJLypAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZXR1cm4gcmVtYWluaW5nIGFyZ3VtZW50cy4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEByZXR1cm4JCWFyZ3VtZW50IGFycmF5LCBOVUxMIHRlcm1pbmF0ZWQKKyAqLworLypAb2JzZXJ2ZXJAKi8gLypAbnVsbEAqLworY29uc3QgY2hhciAqKiBwb3B0R2V0QXJncygvKkBudWxsQCovcG9wdENvbnRleHQgY29uKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZXR1cm4gdGhlIG9wdGlvbiB3aGljaCBjYXVzZWQgdGhlIG1vc3QgcmVjZW50IGVycm9yLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIGZsYWdzCisgKiBAcmV0dXJuCQlvZmZlbmRpbmcgb3B0aW9uCisgKi8KKy8qQG9ic2VydmVyQCovCitjb25zdCBjaGFyICogcG9wdEJhZE9wdGlvbigvKkBudWxsQCovcG9wdENvbnRleHQgY29uLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisJLypAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBZGQgYXJndW1lbnRzIHRvIGNvbnRleHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gYXJndgkJYXJndW1lbnQgYXJyYXksIE5VTEwgdGVybWluYXRlZAorICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBQT1BUX0VSUk9SX09QVFNUT09ERUVQIG9uIGZhaWx1cmUKKyAqLworLypAdW51c2VkQCovCitpbnQgcG9wdFN0dWZmQXJncyhwb3B0Q29udGV4dCBjb24sIC8qQGtlZXBAKi8gY29uc3QgY2hhciAqKiBhcmd2KQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBZGQgYWxpYXMgdG8gY29udGV4dC4KKyAqIEB0b2RvIFBhc3MgYWxpYXMgYnkgcmVmZXJlbmNlLCBub3QgdmFsdWUuCisgKiBAZGVwcmVjYXRlZCBVc2UgcG9wdEFkZEl0ZW0gaW5zdGVhZC4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBhbGlhcwkJYWxpYXMgdG8gYWRkCisgKiBAcGFyYW0gZmxhZ3MJCSh1bnVzZWQpCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MKKyAqLworLypAdW51c2VkQCovCitpbnQgcG9wdEFkZEFsaWFzKHBvcHRDb250ZXh0IGNvbiwgc3RydWN0IHBvcHRBbGlhcyBhbGlhcywgaW50IGZsYWdzKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBZGQgYWxpYXMvZXhlYyBpdGVtIHRvIGNvbnRleHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gbmV3SXRlbQlhbGlhcy9leGVjIGl0ZW0gdG8gYWRkCisgKiBAcGFyYW0gZmxhZ3MJCTAgZm9yIGFsaWFzLCAxIGZvciBleGVjCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MKKyAqLworaW50IHBvcHRBZGRJdGVtKHBvcHRDb250ZXh0IGNvbiwgcG9wdEl0ZW0gbmV3SXRlbSwgaW50IGZsYWdzKQorCS8qQG1vZGlmaWVzIGNvbiBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBQZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gYSBmaWxlIHBhdGguCisgKiBAcGFyYW0gZm4JCWZpbGUgbmFtZQorICogQHJldHVybgkJMCBvbiBPSywgMSBvbiBOT1RPSy4KKyAqLworaW50IHBvcHRTYW5lRmlsZShjb25zdCBjaGFyICogZm4pCisJLypAZ2xvYmFscyBlcnJubywgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBlcnJubywgaW50ZXJuYWxTdGF0ZSBAKi87CisKKy8qKgorICogUmVhZCBhIGZpbGUgaW50byBhIGJ1ZmZlci4KKyAqIEBwYXJhbSBmbgkJZmlsZSBuYW1lCisgKiBAcmV0dmFsICpicAkJYnVmZmVyIChtYWxsb2MnZCkgKG9yIE5VTEwpCisgKiBAcmV0dmFsICpuYnAJCW5vLiBvZiBieXRlcyBpbiBidWZmZXIgKGluY2x1ZGluZyBmaW5hbCBOVUwpIChvciBOVUxMKQorICogQHBhcmFtIGZsYWdzCQkxIHRvIHRyaW0gZXNjYXBlZCBuZXdsaW5lcworICogcmV0dXJuCQkwIG9uIHN1Y2Nlc3MKKyAqLworaW50IHBvcHRSZWFkRmlsZShjb25zdCBjaGFyICogZm4sIC8qQG51bGxAKi8gLypAb3V0QCovIGNoYXIgKiogYnAsCisJCS8qQG51bGxAKi8gLypAb3V0QCovIHNpemVfdCAqIG5icCwgaW50IGZsYWdzKQorCS8qQGdsb2JhbHMgZXJybm8sIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgKmJwLCAqbmJwLCBlcnJubywgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi87CisjZGVmaW5lCVBPUFRfUkVBREZJTEVfVFJJTU5FV0xJTkVTCTEKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJlYWQgY29uZmlndXJhdGlvbiBmaWxlLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIGZuCQlmaWxlIG5hbWUgdG8gcmVhZAorICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBQT1BUX0VSUk9SX0VSUk5PIG9uIGZhaWx1cmUKKyAqLworaW50IHBvcHRSZWFkQ29uZmlnRmlsZShwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiBmbikKKwkvKkBnbG9iYWxzIGVycm5vLCBmaWxlU3lzdGVtLCBpbnRlcm5hbFN0YXRlIEAqLworCS8qQG1vZGlmaWVzIGNvbi0+ZXhlY3MsIGNvbi0+bnVtRXhlY3MsCisJCWVycm5vLCBmaWxlU3lzdGVtLCBpbnRlcm5hbFN0YXRlIEAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFJlYWQgY29uZmlndXJhdGlvbiBmaWxlKHMpLgorICogQ29sb24gc2VwYXJhdGVkIGZpbGVzIHRvIHJlYWQsIGxvb3Bpbmcgb3ZlciBwb3B0UmVhZENvbmZpZ0ZpbGUoKS4KKyAqIE5vdGUgdGhhdCBhbiAnQCcgY2hhcmFjdGVyIHByZWNlZWRpbmcgYSBwYXRoIGluIHRoZSBsaXN0IHdpbGwKKyAqIGFsc28gcGVyZm9ybSBhZGRpdGlvbmFsIHNhbml0eSBjaGVja3Mgb24gdGhlIGZpbGUgYmVmb3JlIHJlYWRpbmcuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gcGF0aHMJCWNvbG9uIHNlcGFyYXRlZCBmaWxlIG5hbWUocykgdG8gcmVhZAorICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCBQT1BUX0VSUk9SX0JBRENPTkZJRyBvbiBmYWlsdXJlCisgKi8KK2ludCBwb3B0UmVhZENvbmZpZ0ZpbGVzKHBvcHRDb250ZXh0IGNvbiwgLypAbnVsbEAqLyBjb25zdCBjaGFyICogcGF0aHMpCisJLypAZ2xvYmFscyBlcnJubywgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBjb24tPmV4ZWNzLCBjb24tPm51bUV4ZWNzLAorCQllcnJubywgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBSZWFkIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIC9ldGMvcG9wdCBhbmQgJEhPTUUvLnBvcHQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gdXNlRW52CSh1bnVzZWQpCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MsIFBPUFRfRVJST1JfRVJSTk8gb24gZmFpbHVyZQorICovCisvKkB1bnVzZWRAKi8KK2ludCBwb3B0UmVhZERlZmF1bHRDb25maWcocG9wdENvbnRleHQgY29uLCAvKkB1bnVzZWRAKi8gaW50IHVzZUVudikKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgY29uLT5leGVjcywgY29uLT5udW1FeGVjcywKKwkJZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBEdXBsaWNhdGUgYW4gYXJndW1lbnQgYXJyYXkuCisgKiBAbm90ZTogVGhlIGFyZ3VtZW50IGFycmF5IGlzIG1hbGxvYydkIGFzIGEgc2luZ2xlIGFyZWEsIHNvIG9ubHkgYXJndiBtdXN0CisgKiBiZSBmcmVlJ2QuCisgKgorICogQHBhcmFtIGFyZ2MJCW5vLiBvZiBhcmd1bWVudHMKKyAqIEBwYXJhbSBhcmd2CQlhcmd1bWVudCBhcnJheQorICogQHJldHZhbCBhcmdjUHRyCWFkZHJlc3Mgb2YgcmV0dXJuZWQgbm8uIG9mIGFyZ3VtZW50cworICogQHJldHZhbCBhcmd2UHRyCWFkZHJlc3Mgb2YgcmV0dXJuZWQgYXJndW1lbnQgYXJyYXkKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OT0FSRyBvbiBmYWlsdXJlCisgKi8KK2ludCBwb3B0RHVwQXJndihpbnQgYXJnYywgLypAbnVsbEAqLyBjb25zdCBjaGFyICoqYXJndiwKKwkJLypAbnVsbEAqLyAvKkBvdXRAKi8gaW50ICogYXJnY1B0ciwKKwkJLypAbnVsbEAqLyAvKkBvdXRAKi8gY29uc3QgY2hhciAqKiogYXJndlB0cikKKwkvKkBtb2RpZmllcyAqYXJnY1B0ciwgKmFyZ3ZQdHIgQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBhcmd1bWVudCBhcnJheS4KKyAqIFRoZSBwYXJzZSBhbGxvd3MgJywgIiwgYW5kIFwgcXVvdGluZywgYnV0ICcgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyAiIGFuZAorICogYm90aCBtYXkgaW5jbHVkZSBcIHF1b3Rlcy4KKyAqIEBub3RlOiBUaGUgYXJndW1lbnQgYXJyYXkgaXMgbWFsbG9jJ2QgYXMgYSBzaW5nbGUgYXJlYSwgc28gb25seSBhcmd2IG11c3QKKyAqIGJlIGZyZWUnZC4KKyAqCisgKiBAcGFyYW0gcwkJc3RyaW5nIHRvIHBhcnNlCisgKiBAcmV0dmFsIGFyZ2NQdHIJYWRkcmVzcyBvZiByZXR1cm5lZCBuby4gb2YgYXJndW1lbnRzCisgKiBAcmV0dmFsIGFyZ3ZQdHIJYWRkcmVzcyBvZiByZXR1cm5lZCBhcmd1bWVudCBhcnJheQorICovCitpbnQgcG9wdFBhcnNlQXJndlN0cmluZyhjb25zdCBjaGFyICogcywKKwkJLypAb3V0QCovIGludCAqIGFyZ2NQdHIsIC8qQG91dEAqLyBjb25zdCBjaGFyICoqKiBhcmd2UHRyKQorCS8qQG1vZGlmaWVzICphcmdjUHRyLCAqYXJndlB0ciBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBQYXJzZXMgYW4gaW5wdXQgY29uZmlndXJhdGlvbiBmaWxlIGFuZCByZXR1cm5zIGFuIHN0cmluZyB0aGF0IGlzIGEgCisgKiBjb21tYW5kIGxpbmUuICBGb3IgdXNlIHdpdGggcG9wdC4gIFlvdSBtdXN0IGZyZWUgdGhlIHJldHVybiB2YWx1ZSB3aGVuIGRvbmUuCisgKgorICogR2l2ZW4gdGhlIGZpbGU6CitcdmVyYmF0aW0KKyMgdGhpcyBsaW5lIGlzIGlnbm9yZWQKKyAgICAjICAgdGhpcyBvbmUgdG9vCithYWEKKyAgYmJiCisgICAgY2NjICAgCitibGE9YmxhCisKK3RoaXNfaXMgICA9ICAgZmRzYWZkYXMKKyAgICAgYmFkX2xpbmU9ICAgICAgICAKKyAgcmVhbGwgYmFkIGxpbmUgIAorICByZWFsbCBiYWQgbGluZSAgPSBhZ2FpbgorNTU1NT0gICA1NTU1NSAgIAorICB0ZXN0ID0gd2l0aCBsb3RzIG9mIHNwYWNlcworXGVuZHZlcmJhdGltCisqCisqIFRoZSByZXN1bHQgaXM6CitcdmVyYmF0aW0KKy0tYWFhIC0tYmJiIC0tY2NjIC0tYmxhPSJibGEiIC0tdGhpc19pcz0iZmRzYWZkYXMiIC0tNTU1NT0iNTU1NTUiIC0tdGVzdD0id2l0aCBsb3RzIG9mIHNwYWNlcyIKK1xlbmR2ZXJiYXRpbQorKgorKiBQYXNzaW5nIHRoaXMgdG8gcG9wdFBhcnNlQXJndlN0cmluZygpIHlpZWxkcyBhbiBhcmd2IG9mOgorXHZlcmJhdGltCisnLS1hYWEnCisnLS1iYmInIAorJy0tY2NjJyAKKyctLWJsYT1ibGEnIAorJy0tdGhpc19pcz1mZHNhZmRhcycgCisnLS01NTU1PTU1NTU1JyAKKyctLXRlc3Q9d2l0aCBsb3RzIG9mIHNwYWNlcycgCitcZW5kdmVyYmF0aW0KKyAqCisgKiBAYnVnIE5VTEwgaXMgcmV0dXJuZWQgaWYgZmlsZSBsaW5lIGlzIHRvbyBsb25nLgorICogQGJ1ZyBTaWxlbnRseSBpZ25vcmVzIGludmFsaWQgbGluZXMuCisgKgorICogQHBhcmFtIGZwCQlmaWxlIGhhbmRsZSB0byByZWFkCisgKiBAcGFyYW0gKmFyZ3N0cnAJcmV0dXJuIHN0cmluZyBvZiBvcHRpb25zIChtYWxsb2MnZCkKKyAqIEBwYXJhbSBmbGFncwkJdW51c2VkCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MKKyAqIEBzZWUJCQlwb3B0UGFyc2VBcmd2U3RyaW5nCisgKi8KKy8qQC1mY251c2VAKi8KK2ludCBwb3B0Q29uZmlnRmlsZVRvU3RyaW5nKEZJTEUgKmZwLCAvKkBvdXRAKi8gY2hhciAqKiBhcmdzdHJwLCBpbnQgZmxhZ3MpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzICpmcCwgKmFyZ3N0cnAsIGZpbGVTeXN0ZW0gQCovOworLypAPWZjbnVzZUAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIGZvcm1hdHRlZCBlcnJvciBzdHJpbmcgZm9yIHBvcHQgZmFpbHVyZS4KKyAqIEBwYXJhbSBlcnJvcgkJcG9wdCBlcnJvcgorICogQHJldHVybgkJZXJyb3Igc3RyaW5nCisgKi8KKy8qQG9ic2VydmVyQCovCitjb25zdCBjaGFyICogcG9wdFN0cmVycm9yKGNvbnN0IGludCBlcnJvcikKKwkvKkAqLzsKKworLyoqIFxpbmdyb3VwIHBvcHQKKyAqIExpbWl0IHNlYXJjaCBmb3IgZXhlY3V0YWJsZXMuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gcGF0aAkJc2luZ2xlIHBhdGggdG8gc2VhcmNoIGZvciBleGVjdXRhYmxlcworICogQHBhcmFtIGFsbG93QWJzb2x1dGUJYWJzb2x1dGUgcGF0aHMgb25seT8KKyAqLworLypAdW51c2VkQCovCit2b2lkIHBvcHRTZXRFeGVjUGF0aChwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiBwYXRoLCBpbnQgYWxsb3dBYnNvbHV0ZSkKKwkvKkBtb2RpZmllcyBjb24gQCovOworCisvKiogXGluZ3JvdXAgcG9wdAorICogUHJpbnQgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2Ygb3B0aW9ucy4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmcAkJb3VwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBmbGFncwkJKHVudXNlZCkKKyAqLwordm9pZCBwb3B0UHJpbnRIZWxwKHBvcHRDb250ZXh0IGNvbiwgRklMRSAqIGZwLCAvKkB1bnVzZWRAKi8gaW50IGZsYWdzKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyBmcCwgZmlsZVN5c3RlbSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBQcmludCB0ZXJzZSBkZXNjcmlwdGlvbiBvZiBvcHRpb25zLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIGZwCQlvdXB1dCBmaWxlIGhhbmRsZQorICogQHBhcmFtIGZsYWdzCQkodW51c2VkKQorICovCit2b2lkIHBvcHRQcmludFVzYWdlKHBvcHRDb250ZXh0IGNvbiwgRklMRSAqIGZwLCAvKkB1bnVzZWRAKi8gaW50IGZsYWdzKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyBmcCwgZmlsZVN5c3RlbSBAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBQcm92aWRlIHRleHQgdG8gcmVwbGFjZSBkZWZhdWx0ICJbT1BUSU9OLi4uXSIgaW4gaGVscC91c2FnZSBvdXRwdXQuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gdGV4dAkJcmVwbGFjZW1lbnQgdGV4dAorICovCisvKkAtZmNudXNlQCovCit2b2lkIHBvcHRTZXRPdGhlck9wdGlvbkhlbHAocG9wdENvbnRleHQgY29uLCBjb25zdCBjaGFyICogdGV4dCkKKwkvKkBtb2RpZmllcyBjb24gQCovOworLypAPWZjbnVzZUAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICogUmV0dXJuIGFyZ3ZbMF0gZnJvbSBjb250ZXh0LgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHJldHVybgkJYXJndlswXQorICovCisvKkAtZmNudXNlQCovCisvKkBvYnNlcnZlckAqLworY29uc3QgY2hhciAqIHBvcHRHZXRJbnZvY2F0aW9uTmFtZShwb3B0Q29udGV4dCBjb24pCisJLypAKi87CisvKkA9ZmNudXNlQCovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBTaHVmZmxlIGFyZ3YgcG9pbnRlcnMgdG8gcmVtb3ZlIHN0cmlwcGVkIGFyZ3MsIHJldHVybnMgbmV3IGFyZ2MuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gYXJnYwkJbm8uIG9mIGFyZ3MKKyAqIEBwYXJhbSBhcmd2CQlhcmcgdmVjdG9yCisgKiBAcmV0dXJuCQluZXcgYXJnYworICovCisvKkAtZmNudXNlQCovCitpbnQgcG9wdFN0cmlwcGVkQXJndihwb3B0Q29udGV4dCBjb24sIGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCisJLypAbW9kaWZpZXMgKmFyZ3YgQCovOworLypAPWZjbnVzZUAqLworCisvKioKKyAqIEFkZCBhIHN0cmluZyB0byBhbiBhcmd2IGFycmF5LgorICogQHJldHZhbCAqYXJndnAJYXJndiBhcnJheQorICogQHBhcmFtIGFyZ0luZm8JKHVudXNlZCkKKyAqIEBwYXJhbSB2YWwJCXN0cmluZyBhcmcgdG8gYWRkICh1c2luZyBzdHJkdXApCisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MsIFBPUFRfRVJST1JfTlVMTEFSRy9QT1BUX0VSUk9SX0JBRE9QRVJBVElPTgorICovCisvKkB1bnVzZWRAKi8KK2ludCBwb3B0U2F2ZVN0cmluZygvKkBudWxsQCovIGNvbnN0IGNoYXIgKioqIGFyZ3ZwLCB1bnNpZ25lZCBpbnQgYXJnSW5mbywKKwkJLypAbnVsbEAqL2NvbnN0IGNoYXIgKiB2YWwpCisJLypAbW9kaWZpZXMgKmFyZ3ZwIEAqLzsKKworLyoqCisgKiBTYXZlIGEgbG9uZyBsb25nLCBwZXJmb3JtaW5nIGxvZ2ljYWwgb3BlcmF0aW9uIHdpdGggdmFsdWUuCisgKiBAd2FybmluZyBBbGlnbm1lbnQgY2hlY2sgbWF5IGJlIHRvbyBzdHJpY3Qgb24gY2VydGFpbiBwbGF0b3Jtcy4KKyAqIEBwYXJhbSBhcmcJCWludGVnZXIgcG9pbnRlciwgYWxpZ25lZCBvbiBpbnQgYm91bmRhcnkuCisgKiBAcGFyYW0gYXJnSW5mbwlsb2dpY2FsIG9wZXJhdGlvbiAoc2VlIFBPUFRfQVJHRkxBR18qKQorICogQHBhcmFtIGFMb25nTG9uZwl2YWx1ZSB0byB1c2UKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OVUxMQVJHL1BPUFRfRVJST1JfQkFET1BFUkFUSU9OCisgKi8KKy8qQC1pbmNvbmRlZnNAKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRTYXZlTG9uZ0xvbmcoLypAbnVsbEAqLyBsb25nIGxvbmcgKiBhcmcsIHVuc2lnbmVkIGludCBhcmdJbmZvLAorCQlsb25nIGxvbmcgYUxvbmdMb25nKQorCS8qQGdsb2JhbHMgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyAqYXJnLCBpbnRlcm5hbFN0YXRlIEAqLworCS8qQHJlcXVpcmVzIG1heFNldChhcmcpID49IDAgL1wgbWF4UmVhZChhcmcpID09IDAgQCovOworLypAPWluY29uZGVmc0AqLworCisvKioKKyAqIFNhdmUgYSBsb25nLCBwZXJmb3JtaW5nIGxvZ2ljYWwgb3BlcmF0aW9uIHdpdGggdmFsdWUuCisgKiBAd2FybmluZyBBbGlnbm1lbnQgY2hlY2sgbWF5IGJlIHRvbyBzdHJpY3Qgb24gY2VydGFpbiBwbGF0b3Jtcy4KKyAqIEBwYXJhbSBhcmcJCWludGVnZXIgcG9pbnRlciwgYWxpZ25lZCBvbiBpbnQgYm91bmRhcnkuCisgKiBAcGFyYW0gYXJnSW5mbwlsb2dpY2FsIG9wZXJhdGlvbiAoc2VlIFBPUFRfQVJHRkxBR18qKQorICogQHBhcmFtIGFMb25nCQl2YWx1ZSB0byB1c2UKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OVUxMQVJHL1BPUFRfRVJST1JfQkFET1BFUkFUSU9OCisgKi8KKy8qQC1pbmNvbmRlZnNAKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRTYXZlTG9uZygvKkBudWxsQCovIGxvbmcgKiBhcmcsIHVuc2lnbmVkIGludCBhcmdJbmZvLCBsb25nIGFMb25nKQorCS8qQGdsb2JhbHMgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyAqYXJnLCBpbnRlcm5hbFN0YXRlIEAqLworCS8qQHJlcXVpcmVzIG1heFNldChhcmcpID49IDAgL1wgbWF4UmVhZChhcmcpID09IDAgQCovOworLypAPWluY29uZGVmc0AqLworCisvKioKKyAqIFNhdmUgYSBzaG9ydCBpbnRlZ2VyLCBwZXJmb3JtaW5nIGxvZ2ljYWwgb3BlcmF0aW9uIHdpdGggdmFsdWUuCisgKiBAd2FybmluZyBBbGlnbm1lbnQgY2hlY2sgbWF5IGJlIHRvbyBzdHJpY3Qgb24gY2VydGFpbiBwbGF0b3Jtcy4KKyAqIEBwYXJhbSBhcmcJCXNob3J0IHBvaW50ZXIsIGFsaWduZWQgb24gc2hvcnQgYm91bmRhcnkuCisgKiBAcGFyYW0gYXJnSW5mbwlsb2dpY2FsIG9wZXJhdGlvbiAoc2VlIFBPUFRfQVJHRkxBR18qKQorICogQHBhcmFtIGFMb25nCQl2YWx1ZSB0byB1c2UKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OVUxMQVJHL1BPUFRfRVJST1JfQkFET1BFUkFUSU9OCisgKi8KKy8qQC1pbmNvbmRlZnNAKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRTYXZlU2hvcnQoLypAbnVsbEAqLyBzaG9ydCAqIGFyZywgdW5zaWduZWQgaW50IGFyZ0luZm8sIGxvbmcgYUxvbmcpCisJLypAZ2xvYmFscyBpbnRlcm5hbFN0YXRlIEAqLworCS8qQG1vZGlmaWVzICphcmcsIGludGVybmFsU3RhdGUgQCovCisJLypAcmVxdWlyZXMgbWF4U2V0KGFyZykgPj0gMCAvXCBtYXhSZWFkKGFyZykgPT0gMCBAKi87CisvKkA9aW5jb25kZWZzQCovCisKKy8qKgorICogU2F2ZSBhbiBpbnRlZ2VyLCBwZXJmb3JtaW5nIGxvZ2ljYWwgb3BlcmF0aW9uIHdpdGggdmFsdWUuCisgKiBAd2FybmluZyBBbGlnbm1lbnQgY2hlY2sgbWF5IGJlIHRvbyBzdHJpY3Qgb24gY2VydGFpbiBwbGF0b3Jtcy4KKyAqIEBwYXJhbSBhcmcJCWludGVnZXIgcG9pbnRlciwgYWxpZ25lZCBvbiBpbnQgYm91bmRhcnkuCisgKiBAcGFyYW0gYXJnSW5mbwlsb2dpY2FsIG9wZXJhdGlvbiAoc2VlIFBPUFRfQVJHRkxBR18qKQorICogQHBhcmFtIGFMb25nCQl2YWx1ZSB0byB1c2UKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgUE9QVF9FUlJPUl9OVUxMQVJHL1BPUFRfRVJST1JfQkFET1BFUkFUSU9OCisgKi8KKy8qQC1pbmNvbmRlZnNAKi8KKy8qQHVudXNlZEAqLworaW50IHBvcHRTYXZlSW50KC8qQG51bGxAKi8gaW50ICogYXJnLCB1bnNpZ25lZCBpbnQgYXJnSW5mbywgbG9uZyBhTG9uZykKKwkvKkBnbG9iYWxzIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgKmFyZywgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkByZXF1aXJlcyBtYXhTZXQoYXJnKSA+PSAwIC9cIG1heFJlYWQoYXJnKSA9PSAwIEAqLzsKKy8qQD1pbmNvbmRlZnNAKi8KKworLyogVGhlIGJpdCBzZXQgdHlwZWRlZi4gKi8KKy8qQC1leHBvcnR0eXBlQCovCit0eXBlZGVmIHN0cnVjdCBwb3B0Qml0c19zIHsKKyAgICB1bnNpZ25lZCBpbnQgYml0c1sxXTsKK30gKiBwb3B0Qml0czsKKy8qQD1leHBvcnR0eXBlQCovCisKKyNkZWZpbmUgX1BPUFRfQklUU19OICAgIDEwMjRVICAgIC8qIGVzdGltYXRlZCBwb3B1bGF0aW9uICovCisjZGVmaW5lIF9QT1BUX0JJVFNfTSAgICAoKDNVICogX1BPUFRfQklUU19OKSAvIDJVKQorI2RlZmluZSBfUE9QVF9CSVRTX0sgICAgMTZVICAgICAgLyogbm8uIG9mIGxpbmVhciBoYXNoIGNvbWJpbmF0aW9ucyAqLworCisvKkAtZXhwb3J0bG9jYWwgLWV4cG9ydHZhciAtZ2xvYnVzZSBAKi8KKy8qQHVuY2hlY2tlZEAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfcG9wdEJpdHNOOworLypAdW5jaGVja2VkQCovCitleHRlcm4gIHVuc2lnbmVkIGludCBfcG9wdEJpdHNNOworLypAdW5jaGVja2VkQCovCitleHRlcm4gIHVuc2lnbmVkIGludCBfcG9wdEJpdHNLOworLypAPWV4cG9ydGxvY2FsID1leHBvcnR2YXIgPWdsb2J1c2UgQCovCisKKy8qQC1leHBvcnRsb2NhbEAqLworaW50IHBvcHRCaXRzQWRkKC8qQG51bGxAKi9wb3B0Qml0cyBiaXRzLCAvKkBudWxsQCovY29uc3QgY2hhciAqIHMpCisJLypAbW9kaWZpZXMgYml0cyBAKi87CisvKkA9ZXhwb3J0bG9jYWxAKi8KK2ludCBwb3B0Qml0c0NoaygvKkBudWxsQCovcG9wdEJpdHMgYml0cywgLypAbnVsbEAqL2NvbnN0IGNoYXIgKiBzKQorCS8qQCovOworaW50IHBvcHRCaXRzQ2xyKC8qQG51bGxAKi9wb3B0Qml0cyBiaXRzKQorCS8qQG1vZGlmaWVzIGJpdHMgQCovOworLypALWV4cG9ydGxvY2FsQCovCitpbnQgcG9wdEJpdHNEZWwoLypAbnVsbEAqL3BvcHRCaXRzIGJpdHMsIC8qQG51bGxAKi9jb25zdCBjaGFyICogcykKKwkvKkBtb2RpZmllcyBiaXRzIEAqLzsKKy8qQC1mY251c2VAKi8KK2ludCBwb3B0Qml0c0ludGVyc2VjdCgvKkBudWxsQCovIHBvcHRCaXRzICogYXAsIC8qQG51bGxAKi8gY29uc3QgcG9wdEJpdHMgYikKKwkvKkBtb2RpZmllcyAqYXAgQCovOworaW50IHBvcHRCaXRzVW5pb24oLypAbnVsbEAqLyBwb3B0Qml0cyAqIGFwLCAvKkBudWxsQCovIGNvbnN0IHBvcHRCaXRzIGIpCisJLypAbW9kaWZpZXMgKmFwIEAqLzsKK2ludCBwb3B0Qml0c0FyZ3MoLypAbnVsbEAqLyBwb3B0Q29udGV4dCBjb24sIC8qQG51bGxAKi8gcG9wdEJpdHMgKiBhcCkKKwkvKkBtb2RpZmllcyBjb24sICphcCBAKi87CisvKkA9ZmNudXNlQCovCisvKkA9ZXhwb3J0bG9jYWxAKi8KKworLyoqCisgKiBTYXZlIGEgc3RyaW5nIGludG8gYSBiaXQgc2V0IChleHBlcmltZW50YWwpLgorICogQHJldHZhbCAqYml0cwliaXQgc2V0IChsYXppbHkgbWFsbG9jJ2QgaWYgTlVMTCkKKyAqIEBwYXJhbSBhcmdJbmZvCWxvZ2ljYWwgb3BlcmF0aW9uIChzZWUgUE9QVF9BUkdGTEFHXyopCisgKiBAcGFyYW0gcwkJc3RyaW5nIHRvIGFkZCB0byBiaXQgc2V0CisgKiBAcmV0dXJuCQkwIG9uIHN1Y2Nlc3MsIFBPUFRfRVJST1JfTlVMTEFSRy9QT1BUX0VSUk9SX0JBRE9QRVJBVElPTgorICovCisvKkAtaW5jb25kZWZzQCovCisvKkB1bnVzZWRAKi8KK2ludCBwb3B0U2F2ZUJpdHMoLypAbnVsbEAqLyBwb3B0Qml0cyAqIGJpdHNwLCB1bnNpZ25lZCBpbnQgYXJnSW5mbywKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogcykKKwkvKkBnbG9iYWxzIF9wb3B0Qml0c04sIF9wb3B0Qml0c00sIF9wb3B0Qml0c0ssIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgKmJpdHNwLCBfcG9wdEJpdHNOLCBfcG9wdEJpdHNNLCBfcG9wdEJpdHNLLCBpbnRlcm5hbFN0YXRlIEAqLzsKKy8qQD1pbmNvbmRlZnNAKi8KKworLypAPXR5cGVAKi8KKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvcHQucGMuaW4gYi9wb3B0LTEuMTYvcG9wdC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY0MzdjCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvcHQucGMuaW4KQEAgLTAsMCArMSwxMCBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IHBvcHQKK1ZlcnNpb246IEBWRVJTSU9OQAorRGVzY3JpcHRpb246IHBvcHQgbGlicmFyeS4KK0xpYnM6IEBQT1BUX1BLR0NPTkZJR19MSUJTQAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi9wb3B0LnBzIGIvcG9wdC0xLjE2L3BvcHQucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0NGFjNAotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wb3B0LnBzCkBAIC0wLDAgKzEsNzk2MyBAQAorJSFQUy1BZG9iZS0yLjAKKyUlQ3JlYXRvcjogZHZpcHNrIDUuNThmIENvcHlyaWdodCAxOTg2LCAxOTk0IFJhZGljYWwgRXllIFNvZnR3YXJlCislJVRpdGxlOiBib29rLmR2aQorJSVQYWdlczogMTEKKyUlUGFnZU9yZGVyOiBBc2NlbmQKKyUlQm91bmRpbmdCb3g6IDAgMCA1NjcgNzAyCislJURvY3VtZW50Rm9udHM6IFphcGZEaW5nYmF0cyBQYWxhdGluby1Cb2xkIFBhbGF0aW5vLVJvbWFuCislJSsgU3RvbmVTYW5zLUJvbGQgU3RvbmVTYW5zIFBhbGF0aW5vLUl0YWxpYyBQUENvZGUKKyUlKyBTdG9uZVNhbnMtU2VtaWJvbGRJdGFsaWMgU3RvbmVTYW5zLVNlbWlib2xkIFBQQ29kZUJvbGQKKyUlRG9jdW1lbnRQYXBlclNpemVzOiBMZXR0ZXIKKyUlRW5kQ29tbWVudHMKKyVEVklQU0NvbW1hbmRMaW5lOiBkdmlwcyAtayAtbyAifC4vZml4YXBwZW5kaXggYm9vay5wcyIgYm9vay5kdmkKKyVEVklQU1BhcmFtZXRlcnM6IGRwaT02MDAsIGNvbW1lbnRzIHJlbW92ZWQKKyVEVklQU1NvdXJjZTogIFRlWCBvdXRwdXQgMTk5OC4wMy4yMzoxNTIzCislJUJlZ2luUHJvY1NldDogdGV4LnBybworL1RlWERpY3QgMjUwIGRpY3QgZGVmIFRlWERpY3QgYmVnaW4gL057ZGVmfWRlZiAvQntiaW5kIGRlZn1OIC9Te2V4Y2h9TgorL1h7UyBOfUIgL1RSe3RyYW5zbGF0ZX1OIC9pc2xzIGZhbHNlIE4gL3ZzaXplIDExIDcyIG11bCBOIC9oc2l6ZSA4LjUgNzIKK211bCBOIC9sYW5kcGx1czkwe2ZhbHNlfWRlZiAvQHJpZ2lue2lzbHN7WzAgbGFuZHBsdXM5MHsxIC0xfXstMSAxfQoraWZlbHNlIDAgMCAwXWNvbmNhdH1pZiA3MiBSZXNvbHV0aW9uIGRpdiA3MiBWUmVzb2x1dGlvbiBkaXYgbmVnIHNjYWxlCitpc2xze2xhbmRwbHVzOTB7VlJlc29sdXRpb24gNzIgZGl2IHZzaXplIG11bCAwIGV4Y2h9e1Jlc29sdXRpb24gLTcyIGRpdgoraHNpemUgbXVsIDB9aWZlbHNlIFRSfWlmIFJlc29sdXRpb24gVlJlc29sdXRpb24gdnNpemUgLTcyIGRpdiAxIGFkZCBtdWwKK1RSW21hdHJpeCBjdXJyZW50bWF0cml4e2R1cCBkdXAgcm91bmQgc3ViIGFicyAwLjAwMDAxIGx0e3JvdW5kfWlmfQorZm9yYWxsIHJvdW5kIGV4Y2ggcm91bmQgZXhjaF1zZXRtYXRyaXh9TiAvQGxhbmRzY2FwZXsvaXNscyB0cnVlIE59QgorL0BtYW51YWxmZWVke3N0YXR1c2RpY3QgL21hbnVhbGZlZWQgdHJ1ZSBwdXR9QiAvQGNvcGllc3svI2NvcGllcyBYfUIKKy9GTWF0WzEgMCAwIC0xIDAgMF1OIC9GQkJbMCAwIDAgMF1OIC9ubiAwIE4gL0lFIDAgTiAvY3RyIDAgTiAvZGYtdGFpbHsKKy9ubiA4IGRpY3QgTiBubiBiZWdpbiAvRm9udFR5cGUgMyBOIC9Gb250TWF0cml4IGZudHJ4IE4gL0ZvbnRCQm94IEZCQiBOCitzdHJpbmcgL2Jhc2UgWCBhcnJheSAvQml0TWFwcyBYIC9CdWlsZENoYXJ7Q2hhckJ1aWxkZXJ9TiAvRW5jb2RpbmcgSUUgTgorZW5kIGR1cHsvZm9vIHNldGZvbnR9MiBhcnJheSBjb3B5IGN2eCBOIGxvYWQgMCBubiBwdXQgL2N0ciAwIE5bfUIgL2RmeworL3NmIDEgTiAvZm50cnggRk1hdCBOIGRmLXRhaWx9QiAvZGZze2RpdiAvc2YgWCAvZm50cnhbc2YgMCAwIHNmIG5lZyAwIDBdCitOIGRmLXRhaWx9QiAvRXtwb3Agbm4gZHVwIGRlZmluZWZvbnQgc2V0Zm9udH1CIC9jaC13aWR0aHtjaC1kYXRhIGR1cAorbGVuZ3RoIDUgc3ViIGdldH1CIC9jaC1oZWlnaHR7Y2gtZGF0YSBkdXAgbGVuZ3RoIDQgc3ViIGdldH1CIC9jaC14b2ZmeworMTI4IGNoLWRhdGEgZHVwIGxlbmd0aCAzIHN1YiBnZXQgc3VifUIgL2NoLXlvZmZ7Y2gtZGF0YSBkdXAgbGVuZ3RoIDIgc3ViCitnZXQgMTI3IHN1Yn1CIC9jaC1keHtjaC1kYXRhIGR1cCBsZW5ndGggMSBzdWIgZ2V0fUIgL2NoLWltYWdle2NoLWRhdGEKK2R1cCB0eXBlIC9zdHJpbmd0eXBlIG5le2N0ciBnZXQgL2N0ciBjdHIgMSBhZGQgTn1pZn1CIC9pZCAwIE4gL3J3IDAgTgorL3JjIDAgTiAvZ3AgMCBOIC9jcCAwIE4gL0cgMCBOIC9zZiAwIE4gL0NoYXJCdWlsZGVye3NhdmUgMyAxIHJvbGwgUyBkdXAKKy9iYXNlIGdldCAyIGluZGV4IGdldCBTIC9CaXRNYXBzIGdldCBTIGdldCAvY2gtZGF0YSBYIHBvcCAvY3RyIDAgTiBjaC1keAorMCBjaC14b2ZmIGNoLXlvZmYgY2gtaGVpZ2h0IHN1YiBjaC14b2ZmIGNoLXdpZHRoIGFkZCBjaC15b2ZmCitzZXRjYWNoZWRldmljZSBjaC13aWR0aCBjaC1oZWlnaHQgdHJ1ZVsxIDAgMCAtMSAtLjEgY2gteG9mZiBzdWIgY2gteW9mZgorLjEgc3ViXXtjaC1pbWFnZX1pbWFnZW1hc2sgcmVzdG9yZX1CIC9Eey9jYyBYIGR1cCB0eXBlIC9zdHJpbmd0eXBlIG5le119CitpZiBubiAvYmFzZSBnZXQgY2MgY3RyIHB1dCBubiAvQml0TWFwcyBnZXQgUyBjdHIgUyBzZiAxIG5le2R1cCBkdXAKK2xlbmd0aCAxIHN1YiBkdXAgMiBpbmRleCBTIGdldCBzZiBkaXYgcHV0fWlmIHB1dCAvY3RyIGN0ciAxIGFkZCBOfUIgL0l7CitjYyAxIGFkZCBEfUIgL2JvcHt1c2VyZGljdCAvYm9wLWhvb2sga25vd257Ym9wLWhvb2t9aWYgL1NJIHNhdmUgTiBAcmlnaW4KKzAgMCBtb3ZldG8gL1YgbWF0cml4IGN1cnJlbnRtYXRyaXggZHVwIDEgZ2V0IGR1cCBtdWwgZXhjaCAwIGdldCBkdXAgbXVsCithZGQgLjk5IGx0ey9RVn17L1JWfWlmZWxzZSBsb2FkIGRlZiBwb3AgcG9wfU4gL2VvcHtTSSByZXN0b3JlIHVzZXJkaWN0CisvZW9wLWhvb2sga25vd257ZW9wLWhvb2t9aWYgc2hvd3BhZ2V9TiAvQHN0YXJ0e3VzZXJkaWN0IC9zdGFydC1ob29rCitrbm93bntzdGFydC1ob29rfWlmIHBvcCAvVlJlc29sdXRpb24gWCAvUmVzb2x1dGlvbiBYIDEwMDAgZGl2IC9EVkltYWcgWAorL0lFIDI1NiBhcnJheSBOIDAgMSAyNTV7SUUgUyAxIHN0cmluZyBkdXAgMCAzIGluZGV4IHB1dCBjdm4gcHV0fWZvcgorNjU3ODEuNzYgZGl2IC92c2l6ZSBYIDY1NzgxLjc2IGRpdiAvaHNpemUgWH1OIC9we3Nob3d9TiAvUk1hdFsxIDAgMCAtMSAwCiswXU4gL0JEb3QgMjYwIHN0cmluZyBOIC9ydWxleCAwIE4gL3J1bGV5IDAgTiAvdnsvcnVsZXkgWCAvcnVsZXggWCBWfUIgL1YKK3t9QiAvUlYgc3RhdHVzZGljdCBiZWdpbiAvcHJvZHVjdCB3aGVyZXtwb3AgcHJvZHVjdCBkdXAgbGVuZ3RoIDcgZ2V7MCA3CitnZXRpbnRlcnZhbCBkdXAoRGlzcGxheSllcSBleGNoIDAgNCBnZXRpbnRlcnZhbChOZVhUKWVxIG9yfXtwb3AgZmFsc2V9CitpZmVsc2V9e2ZhbHNlfWlmZWxzZSBlbmR7e2dzYXZlIFRSIC0uMSAuMSBUUiAxIDEgc2NhbGUgcnVsZXggcnVsZXkgZmFsc2UKK1JNYXR7QkRvdH1pbWFnZW1hc2sgZ3Jlc3RvcmV9fXt7Z3NhdmUgVFIgLS4xIC4xIFRSIHJ1bGV4IHJ1bGV5IHNjYWxlIDEgMQorZmFsc2UgUk1hdHtCRG90fWltYWdlbWFzayBncmVzdG9yZX19aWZlbHNlIEIgL1FWe2dzYXZlIG5ld3BhdGggdHJhbnNmb3JtCityb3VuZCBleGNoIHJvdW5kIGV4Y2ggaXRyYW5zZm9ybSBtb3ZldG8gcnVsZXggMCBybGluZXRvIDAgcnVsZXkgbmVnCitybGluZXRvIHJ1bGV4IG5lZyAwIHJsaW5ldG8gZmlsbCBncmVzdG9yZX1CIC9he21vdmV0b31CIC9kZWx0YSAwIE4gL3RhaWwKK3tkdXAgL2RlbHRhIFggMCBybW92ZXRvfUIgL017UyBwIGRlbHRhIGFkZCB0YWlsfUIgL2J7UyBwIHRhaWx9QiAvY3stNCBNfQorQiAvZHstMyBNfUIgL2V7LTIgTX1CIC9mey0xIE19QiAvZ3swIE19QiAvaHsxIE19QiAvaXsyIE19QiAvanszIE19QiAva3sKKzQgTX1CIC93ezAgcm1vdmV0b31CIC9se3AgLTQgd31CIC9te3AgLTMgd31CIC9ue3AgLTIgd31CIC9ve3AgLTEgd31CIC9xeworcCAxIHd9QiAvcntwIDIgd31CIC9ze3AgMyB3fUIgL3R7cCA0IHd9QiAveHswIFMgcm1vdmV0b31CIC95ezMgMiByb2xsIHAKK2F9QiAvYm9zey9TUyBzYXZlIE59QiAvZW9ze1NTIHJlc3RvcmV9QiBlbmQKKyUlRW5kUHJvY1NldAorJSVCZWdpbkZvbnQ6IFBhbGF0aW5vLUJvbGQKKyUgQEBwc2VuY29kaW5nZmlsZUB7CislICAgYXV0aG9yID0gIlMuIFJhaHR6LCBQLiBNYWNLYXksIEFsYW4gSmVmZnJleSwgQi4gSG9ybiwgSy4gQmVycnkiLAorJSAgIHZlcnNpb24gPSAiMC42IiwKKyUgICBkYXRlID0gIjIyIEp1bmUgMTk5NiIsCislICAgZmlsZW5hbWUgPSAiOHIuZW5jIiwKKyUgICBlbWFpbCA9ICJrYkBAbWFpbC50dWcub3JnIiwKKyUgICBhZGRyZXNzID0gIjEzNSBDZW50ZXIgSGlsbCBSZC4gLy8gUGx5bW91dGgsIE1BIDAyMzYwIiwKKyUgICBjb2RldGFibGUgPSAiSVNPL0FTQ0lJIiwKKyUgICBjaGVja3N1bSA9ICIxMTkgICAgIDY2MiAgICA0NDI0IiwKKyUgICBkb2NzdHJpbmcgPSAiRW5jb2RpbmcgZm9yIFRydWVUeXBlIG9yIFR5cGUgMSBmb250cyB0byBiZSB1c2VkIHdpdGggVGVYLiIKKyUgQH0KKyUgCislIElkZWEgaXMgdG8gaGF2ZSBhbGwgdGhlIGNoYXJhY3RlcnMgbm9ybWFsbHkgaW5jbHVkZWQgaW4gVHlwZSAxIGZvbnRzCislIGF2YWlsYWJsZSBmb3IgdHlwZXNldHRpbmcuIFRoaXMgaXMgZWZmZWN0aXZlbHkgdGhlIGNoYXJhY3RlcnMgaW4gQWRvYmUKKyUgU3RhbmRhcmQgRW5jb2RpbmcgKyBJU08gTGF0aW4gMSArIGV4dHJhIGNoYXJhY3RlcnMgZnJvbSBMdWNpZGEuCislIAorJSBDaGFyYWN0ZXIgY29kZSBhc3NpZ25tZW50cyB3ZXJlIG1hZGUgYXMgZm9sbG93czoKKyUgCislICgxKSB0aGUgV2luZG93cyBBTlNJIGNoYXJhY3RlcnMgYXJlIGFsbW9zdCBhbGwgaW4gdGhlaXIgV2luZG93cyBBTlNJCislIHBvc2l0aW9ucywgYmVjYXVzZSBzb21lIFdpbmRvd3MgdXNlcnMgY2Fubm90IGVhc2lseSByZWVuY29kZSB0aGUKKyUgZm9udHMsIGFuZCBpdCBtYWtlcyBubyBkaWZmZXJlbmNlIG9uIG90aGVyIHN5c3RlbXMuIFRoZSBvbmx5IFdpbmRvd3MKKyUgQU5TSSBjaGFyYWN0ZXJzIG5vdCBhdmFpbGFibGUgYXJlIHRob3NlIHRoYXQgbWFrZSBubyBzZW5zZSBmb3IKKyUgdHlwZXNldHRpbmcgLS0gcnVib3V0ICgxMjcgZGVjaW1hbCksIG5vYnJlYWtzcGFjZSAoMTYwKSwgc29mdGh5cGhlbgorJSAoMTczKS4gcXVvdGVzaW5nbGUgYW5kIGdyYXZlIGFyZSBtb3ZlZCBqdXN0IGJlY2F1c2UgaXQncyBzdWNoIGFuCislIGlycml0YXRpb24gbm90IGhhdmluZyB0aGVtIGluIFRlWCBwb3NpdGlvbnMuCislIAorJSAoMikgUmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGFzc2lnbmVkIGFyYml0cmFyaWx5IHRvIHRoZSBsb3dlciBwYXJ0CislIG9mIHRoZSByYW5nZSwgYXZvaWRpbmcgMCwgMTAgYW5kIDEzIGluIGNhc2Ugd2UgbWVldCBkdW1iIHNvZnR3YXJlLgorJSAKKyUgKDMpIFkmWSBMdWNpZGEgQnJpZ2h0IGluY2x1ZGVzIHNvbWUgZXh0cmEgdGV4dCBjaGFyYWN0ZXJzOyBpbiB0aGUKKyUgaG9wZXMgdGhhdCBvdGhlciBQb3N0U2NyaXB0IGZvbnRzLCBwZXJoYXBzIGNyZWF0ZWQgZm9yIHB1YmxpYworJSBjb25zdW1wdGlvbiwgd2lsbCBpbmNsdWRlIHRoZW0sIHRoZXkgYXJlIGluY2x1ZGVkIHN0YXJ0aW5nIGF0IDB4MTIuCislIAorJSAoNCkgUmVtYWluaW5nIHBvc2l0aW9ucyBsZWZ0IHVuZGVmaW5lZCBhcmUgZm9yIHVzZSBpbiAoaG9wZWZ1bGx5KQorJSB1cHdhcmQtY29tcGF0aWJsZSByZXZpc2lvbnMsIGlmIHNvbWVkYXkgbW9yZSBjaGFyYWN0ZXJzIGFyZSBnZW5lcmFsbHkKKyUgYXZhaWxhYmxlLgorJSAKKyUgKDUpIGh5cGhlbiBhcHBlYXJzIHR3aWNlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYm90aCBBU0NJSSBhbmQgV2luZG93cy4KKyUgCisvVGVYQmFzZTFFbmNvZGluZyBbCislIDB4MDAgKGVuY29kZWQgY2hhcmFjdGVycyBmcm9tIEFkb2JlIFN0YW5kYXJkIG5vdCBpbiBXaW5kb3dzIDMuMSkKKyAgLy5ub3RkZWYgL2RvdGFjY2VudCAvZmkgL2ZsCisgIC9mcmFjdGlvbiAvaHVuZ2FydW1sYXV0IC9Mc2xhc2ggL2xzbGFzaAorICAvb2dvbmVrIC9yaW5nIC8ubm90ZGVmCisgIC9icmV2ZSAvbWludXMgLy5ub3RkZWYgCislIFRoZXNlIGFyZSB0aGUgb25seSB0d28gcmVtYWluaW5nIHVuZW5jb2RlZCBjaGFyYWN0ZXJzLCBzbyBtYXkgYXMKKyUgd2VsbCBpbmNsdWRlIHRoZW0uCisgIC9aY2Fyb24gL3pjYXJvbiAKKyUgMHgxMAorIC9jYXJvbiAvZG90bGVzc2kgCislICh1bnVzdWFsIFRlWCBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBpbiwgZS5nLiwgTHVjaWRhIEJyaWdodCkKKyAvZG90bGVzc2ogL2ZmIC9mZmkgL2ZmbCAKKyAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZiAvLm5vdGRlZgorIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmCisgJSB2ZXJ5IGNvbnRlbnRpb3VzOyBpdCdzIHNvIHBhaW5mdWwgbm90IGhhdmluZyBxdW90ZWxlZnQgYW5kIHF1b3RlcmlnaHQKKyAlIGF0IDk2IGFuZCAxNDUgdGhhdCB3ZSBtb3ZlIHRoZSB0aGluZ3Mgbm9ybWFsbHkgZm91bmQgdGhlcmUgZG93biB0byBoZXJlLgorIC9ncmF2ZSAvcXVvdGVzaW5nbGUgCislIDB4MjAgKEFTQ0lJIGJlZ2lucykKKyAvc3BhY2UgL2V4Y2xhbSAvcXVvdGVkYmwgL251bWJlcnNpZ24KKyAvZG9sbGFyIC9wZXJjZW50IC9hbXBlcnNhbmQgL3F1b3RlcmlnaHQKKyAvcGFyZW5sZWZ0IC9wYXJlbnJpZ2h0IC9hc3RlcmlzayAvcGx1cyAvY29tbWEgL2h5cGhlbiAvcGVyaW9kIC9zbGFzaAorJSAweDMwCisgL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciAvZml2ZSAvc2l4IC9zZXZlbgorIC9laWdodCAvbmluZSAvY29sb24gL3NlbWljb2xvbiAvbGVzcyAvZXF1YWwgL2dyZWF0ZXIgL3F1ZXN0aW9uCislIDB4NDAKKyAvYXQgL0EgL0IgL0MgL0QgL0UgL0YgL0cgL0ggL0kgL0ogL0sgL0wgL00gL04gL08KKyUgMHg1MAorIC9QIC9RIC9SIC9TIC9UIC9VIC9WIC9XCisgL1ggL1kgL1ogL2JyYWNrZXRsZWZ0IC9iYWNrc2xhc2ggL2JyYWNrZXRyaWdodCAvYXNjaWljaXJjdW0gL3VuZGVyc2NvcmUKKyUgMHg2MAorIC9xdW90ZWxlZnQgL2EgL2IgL2MgL2QgL2UgL2YgL2cgL2ggL2kgL2ogL2sgL2wgL20gL24gL28KKyUgMHg3MAorIC9wIC9xIC9yIC9zIC90IC91IC92IC93CisgL3ggL3kgL3ogL2JyYWNlbGVmdCAvYmFyIC9icmFjZXJpZ2h0IC9hc2NpaXRpbGRlCisgLy5ub3RkZWYgJSBydWJvdXQ7IEFTQ0lJIGVuZHMKKyUgMHg4MAorIC8ubm90ZGVmIC8ubm90ZGVmIC9xdW90ZXNpbmdsYmFzZSAvZmxvcmluCisgL3F1b3RlZGJsYmFzZSAvZWxsaXBzaXMgL2RhZ2dlciAvZGFnZ2VyZGJsCisgL2NpcmN1bWZsZXggL3BlcnRob3VzYW5kIC9TY2Fyb24gL2d1aWxzaW5nbGxlZnQKKyAvT0UgLy5ub3RkZWYgLy5ub3RkZWYgLy5ub3RkZWYKKyUgMHg5MAorIC8ubm90ZGVmIC8ubm90ZGVmIC8ubm90ZGVmIC9xdW90ZWRibGxlZnQKKyAvcXVvdGVkYmxyaWdodCAvYnVsbGV0IC9lbmRhc2ggL2VtZGFzaAorIC90aWxkZSAvdHJhZGVtYXJrIC9zY2Fyb24gL2d1aWxzaW5nbHJpZ2h0CisgL29lIC8ubm90ZGVmIC8ubm90ZGVmIC9ZZGllcmVzaXMKKyUgMHhBMAorIC8ubm90ZGVmICUgbm9icmVha3NwYWNlCisgL2V4Y2xhbWRvd24gL2NlbnQgL3N0ZXJsaW5nCisgL2N1cnJlbmN5IC95ZW4gL2Jyb2tlbmJhciAvc2VjdGlvbgorIC9kaWVyZXNpcyAvY29weXJpZ2h0IC9vcmRmZW1pbmluZSAvZ3VpbGxlbW90bGVmdAorIC9sb2dpY2Fsbm90CisgL2h5cGhlbiAlIFkmWSAoYWxzbyBhdCA0NSk7IFdpbmRvd3MnIHNvZnRoeXBoZW4KKyAvcmVnaXN0ZXJlZAorIC9tYWNyb24KKyUgMHhEMAorIC9kZWdyZWUgL3BsdXNtaW51cyAvdHdvc3VwZXJpb3IgL3RocmVlc3VwZXJpb3IKKyAvYWN1dGUgL211IC9wYXJhZ3JhcGggL3BlcmlvZGNlbnRlcmVkCisgL2NlZGlsbGEgL29uZXN1cGVyaW9yIC9vcmRtYXNjdWxpbmUgL2d1aWxsZW1vdHJpZ2h0CisgL29uZXF1YXJ0ZXIgL29uZWhhbGYgL3RocmVlcXVhcnRlcnMgL3F1ZXN0aW9uZG93bgorJSAweEMwCisgL0FncmF2ZSAvQWFjdXRlIC9BY2lyY3VtZmxleCAvQXRpbGRlIC9BZGllcmVzaXMgL0FyaW5nIC9BRSAvQ2NlZGlsbGEKKyAvRWdyYXZlIC9FYWN1dGUgL0VjaXJjdW1mbGV4IC9FZGllcmVzaXMKKyAvSWdyYXZlIC9JYWN1dGUgL0ljaXJjdW1mbGV4IC9JZGllcmVzaXMKKyUgMHhEMAorIC9FdGggL050aWxkZSAvT2dyYXZlIC9PYWN1dGUKKyAvT2NpcmN1bWZsZXggL090aWxkZSAvT2RpZXJlc2lzIC9tdWx0aXBseQorIC9Pc2xhc2ggL1VncmF2ZSAvVWFjdXRlIC9VY2lyY3VtZmxleAorIC9VZGllcmVzaXMgL1lhY3V0ZSAvVGhvcm4gL2dlcm1hbmRibHMKKyUgMHhFMAorIC9hZ3JhdmUgL2FhY3V0ZSAvYWNpcmN1bWZsZXggL2F0aWxkZQorIC9hZGllcmVzaXMgL2FyaW5nIC9hZSAvY2NlZGlsbGEKKyAvZWdyYXZlIC9lYWN1dGUgL2VjaXJjdW1mbGV4IC9lZGllcmVzaXMKKyAvaWdyYXZlIC9pYWN1dGUgL2ljaXJjdW1mbGV4IC9pZGllcmVzaXMKKyUgMHhGMAorIC9ldGggL250aWxkZSAvb2dyYXZlIC9vYWN1dGUKKyAvb2NpcmN1bWZsZXggL290aWxkZSAvb2RpZXJlc2lzIC9kaXZpZGUKKyAvb3NsYXNoIC91Z3JhdmUgL3VhY3V0ZSAvdWNpcmN1bWZsZXgKKyAvdWRpZXJlc2lzIC95YWN1dGUgL3Rob3JuIC95ZGllcmVzaXMKK10gZGVmCislJUVuZEZvbnQKKyUlQmVnaW5Qcm9jU2V0OiBzdG9uZXNiLnBmYQorMTEgZGljdCBiZWdpbgorL0ZvbnRJbmZvIDEwIGRpY3QgZHVwIGJlZ2luCisvdmVyc2lvbiAoMDAxLjAwMikgcmVhZG9ubHkgZGVmCisvTm90aWNlIChDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTAsIDE5OTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkLklUQyBTdG9uZSBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIEludGVybmF0aW9uYWwgVHlwZWZhY2UgQ29ycG9yYXRpb24uKSByZWFkb25seSBkZWYKKy9GdWxsTmFtZSAoSVRDIFN0b25lIFNhbnMgQm9sZCkgcmVhZG9ubHkgZGVmCisvRmFtaWx5TmFtZSAoSVRDIFN0b25lIFNhbnMpIHJlYWRvbmx5IGRlZgorL1dlaWdodCAoQm9sZCkgcmVhZG9ubHkgZGVmCisvaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgorL0l0YWxpY0FuZ2xlIDAgZGVmCisvVW5kZXJsaW5lUG9zaXRpb24gLTEwMCBkZWYKKy9VbmRlcmxpbmVUaGlja25lc3MgNTAgZGVmCitlbmQgcmVhZG9ubHkgZGVmCisvRm9udE5hbWUgL1N0b25lU2Fucy1Cb2xkIGRlZgorL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMSAwIDAgMC4wMDEgMCAwXSByZWFkb25seSBkZWYKKy9VbmlxdWVJRCAzODc4MiBkZWYKKy9Gb250QkJveHstMTU4IC0yNTAgMTU0MCA5NDZ9cmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCis0MDUxNDlCNTczQUVDOTM3OEJBRTQ2Njg1QUFGNzg0OUU1QzlBNUM4Qzg3Njc0ODcyNTU4OUZCMTRBMDQ5ODA4RDM5QTc1RDU1RjY0NjQKKzExQTlDMzUyNkYxODg3QUEyQkFFNTNFRTRCQTYzNzdDQjA5NDA5OEJCMjU5MDgyOERCOTZGRkQzQTI4OTU3OTUyNERCQkM3OUQ5NTk3RAorNDdBNzkxOTJFMDFDMzYwRjA2QjkzQkZGODlBM0M2NDJCQzQxMDMzN0Q3NDM0OTlBN0Y4QjFFNDc2RkExQkRCMEIxOThGNjdDQUUzRjU3Cis0OUExQUNDNDg3OUY2RUJDRDg0NzQwRDYyQzUyNDg1OTVCNTMwRTZDM0QzQ0RDM0FGNTQzNjlFQUZERURDRDk4NDhFMkQzOENEMDkxQkYKKzJBQ0FEMTBERjFDODc4NzJBQUJEMDg2RDYwNDc1RUQ2MDQ2RTI0MEYyMjMyRkUyRjAwMjU5MjI1OTMxNTE4QjdCNDI5MTM3QjE0Mzg0RAorMTVGNTgyNDY3QTgxOEMyMEMxQzYzMTZDNTY3MzZDMTlGMUQ3NDY0MjMxRDY5ODAwRDk0Q0Y1MDEzREMyMzdEQTFFQzE2RkQ2M0QzMTU0Cis0RkFERjgzRjE1MkQxNDk2RTNFMUI1MEU2NTdENTE5NTJBNjVEQTIyMjRBRTNDMjkwQTk0ODIyNkYwMDVDMzdBQkEyRjZDQUE3MzIzNjcKKzlEMDNBMUY5MjRBMzMyRkNGNzEzQzNBRkY2ODVEQ0QxNEY5NTBBOUY1MEY0NjkzOTc1OUY5MTVGNzgwRjY4RUIxRThBMkE2REQzNzBERAorREVGNUE1MTY1MkNEMEM1REVDQkNDOTQzOTY5NjI5MDRCMTkwNjlBQ0FCMjI3QjZENEQxNDg1MkE2NTM2MkQyQkZFM0IzOTM2RDhBQjNGCisyMzE4QTk5QTQ2OTEzRDg2OEVERjE5ODRGODY4Nzg1RTNCMTEwNzY0M0JDNEU1ODIwNkU4RTVFNzFFNUUxM0E4MjJBMjg5QTdDNzU1OUUKKzA3QkJEODgyMjg0N0M1NkVDMEREQjEyMjAyNjMzQ0FDQTk5MEI1ODQ0QjUyNTNFQkY3MjE4QzJDNDkxMjExRDE4NzlBNEYzNkJBRDlCNgorOTM1M0Q2MzY1MDZDNTJGMjQ4MThFNDQ2NEUwMkM0MUFBQTE3QUY3QkYwOUZCQzM3QzMzNUE3QkNBNDA0ODFDMTM3MTgyOEQ0QURFNjMwCis4REYwOURDMDhDNjQxMzc3Mjk1Q0Q3NTQ4NURDMTQ3MzI4MTlDMkRCMjFDQzQ5OTczM0ZFQ0FFMUNBOTQ5MDdBMUYxNDRGMEVCOUJGQzIKKzk4RTQ3MUFGMzA0QkMzNjI4Q0QzOTAyMDJGRkY1OUE3QkQxNEQ5RjlDQzk5MzY4ODI2REU2NDQ2Q0Q0MEE2OEFERURCQkU4QzM4ODc5OAorMEZFNTc0NDQ4QjE5NkU5ODdDMkEzOTJEQTg2NURBNDZFNjUyQUFDOEY5QTQ4MjZENUFEMTc3NkZFMkU1RDJERUVGQTAxMTUwN0JFOTM1Cis5RTE5RTJBRjM0NjQzMTM1NjkxRTNBMjIxQjRCMEFCMEQxOERDMzk5M0Y2NDY1NDg5Q0U1RUZBMEQyRkVDMDg3ODgxOTI3QTQzNEU1MUYKKzk5NjgzQUEwNDYzNjk3QkI5NjE0QjZDRjUyNDczMzBCQjczOTNGODM2QTc4OUEzNzc0NjI5QjI3RTFGODJBRTRDMDFFREJFOTVDMjM3QQorMEVBQzc4QTVBN0ZGQ0MyMzMyRENEQjcyNUJERTkxMDFBOURFNTNBNkNDQTY0QTk4NDI5NDcxQkE4MDE4QTNFM0MyRDI4N0I2MzE2RkJGCiswOEMzRDJCQjVBNjExRDFCRTg0NkIxN0MyRjBDQUFFMjk1NUJCQTdFRTREODREQkZBNkJCNUQ1NEI1RDkwRTIzQzIxRDM0NTYyMTQ0REEKKzRGNUE0OUU2NjZDMUU2RjdGMThCMkIzM0IyQkM0QTdGRTcyMjQ0MEQyNzJDRTUzMzU0QjM5NDQyRjNCQzg5RTVGOTM5QjcxNzU0NDhGMAorMDJENkE2MEJDMjk3Qzc3MDc0NTIyMkZEQUNDOUQ0NTZCNEY4NjlFN0JENEU4MDJDMDFENTE3QUQ3NTJCQTUzM0RGMUVDRjRGOUE2Q0YwCitERTgzMDZDNTVBOTA0MDVGMjNEMTgzNEQ3NkQyQjQ0NTJFNDUwNEFBOTUzQThCNEREQTRGMEM5NjczMjlEOTIyQTY4NjE1QjFCNzFGNzMKK0U4QkI2ODJFQ0JFM0M3NDE3QTIxOERDMzg2QjAwOTVCMzg1NzVFQkJBNTU1ODFGNzY4QkE1RDVGMjAzQTc2MjVGRTc4ODU3RUYyQjkxOQorQkFFNERFMDExNjUwNkZFMkM0NzZBNjQyMzQxNEZFRjU4MzNERkUwMEQzRUFENkM2QjVGMzE2MjVDRDc2RkIwQTQ5RDA0QzFERDg1QTdFCis2OTJCRUNFMENDMzJDOUE4QzA0QUMyMDlCNUQxRDc3QjdCRDIxM0I3MTg1NUZCRTgxRjc1N0Y0NjEyN0U3MjUzODIzRTczMkE2MDlEQ0YKKzE2Qzc5NDEyRDFGMEExNTE3Mjg4QTgxQjQyMTY1QjQ3REE2NkVDQTVFOEUxRjZBMzlBNDc0NDg2QTNENEI2NjlCQzY1Q0Y2MzEzNkFDOQorMjQzRTdBNDkyQ0ZFMjIyQ0I0RjU1QzJFRDRCQUE3NTU2REVEQUQ0MjVCRDcwNkFFRUQ4OTVFQUM3NjcwNEFGNjM2NjI5NUVGQjRBOTFCCis1NDhDMjE3NkQ0QTMwQjEwMjY0ODlFNzBEOEQ5ODFEMTEwREU0NkUwRDVERjNBMjg3MDU5MjIwMTQyREIwMTAwMDkyRkJEOUUxNjQ4NEIKKzdDREZCQUMyQjU5NUZEMzUzNTlENjVENTM1MUQ1QUExQUY4RUU5NEU2QTI1OUE1NjhGM0Q2MjE5RjI1MzhFQjlFMzFFODhEMkE3RDhCMgorMTVGODhDNTgxQUZBQUFFNjdBRjU4NzM0M0FCNkFCMzYzNkFFNTE5Q0FCMDBDRDBBNzlFQUU0REJDQjU2RTc2RTQ2RjE0REQ3RjAzNzU5CitEMTBBNEY3OEJDNzE0QjYwRTNDQzU2QkMwNEM0RkU2OEM1NTQ5QkMxQTQ1NzdGMkFGNTc4RjE0NDFFRUU5MTc4RTY3ODhDRTAzRUUxNkMKKzhDM0U4MERFRTNGMEQwMTZBQzA5QjBCNjJCNDZFQkU1NDdGMEMxMDQ2NkU4QkM5QzNBQzIzNUY5MUY1OTlCMjQ0RjhEQUMzQjlGQTY2MQorOEEwOUQ5QTYyRTlFOTA0Q0NFMzNCQjFEQTFGNkZDODFFMUY5N0ExQzU2QTIxMDdGNzIxRjgzNzE4MERGMjRGRjExMEM3QUVENjI4RTdECiswQjQ2NUQ1MDY0QTZEQjBFMTc4QzQwMEI2NUUyMzk1MUU3NTYyQThDODkwQkFCMDc3NEMyQUNDRUQwN0U0ODdENTRFNjg4RTVBRjM1NDYKKzY2MUIxMzMzNkVCMUE0RUY0ODRCRkU0Q0FCNjFCRkE0N0I3RjIzMkQ0NkVGQUY1MEQ1RTMxQTgzMDVFRjcyN0RCMDkxQUIwQjkzNDMwRQorNjFGQjkzOEY3MjEzOTBFRTI3MUQyQkE1RDhCMzNCQUZENUNCM0YyNEM3QTRBREVGRjZDMEU0MkQ5M0UxQjlEQUJEMjVGODkxODExQTA5Cis0NTdCQzk0RTEzRjFCNzFGNjI4OTY5Njc5NzQwRDkxQzE5NzE1OThBMUQ0QzI0OEY4NDBCQkVGMkJDRjc0RkIxRUFDNkQzRDU4MzA2REQKKzYwN0NBRUIxOEE4QjE5RUI3NzVCQ0JDNjYwMkRFRDZEQzI3M0Q0QTAxOTBFRjhEMzBFMDU2NzVCQzdCM0VFMUY2RDU4NDMxMUM2ODFGMAorQzlCN0Q2MEQyNUJFQ0MzQ0E3QkM4M0IxN0U3RDQyODMyRDkyQ0I2NjM0NTY2OEY0NTVGODZBMzlENTk1MzRCODQ5NjdENTU0MkQyODhCCiswMDE4RkExODNBNDI3MTE1MEY1NDlEMDUzMkU2OTJDMzEwNzdBQ0Q4RjkwNTI5M0NDMTZDOTkwMURFQUFFNkIzMjY2ODBBNTk0OTM3MDcKKzg5NTI2NEY4ODFENjkzQkJDQTk1NUE2RjAzQjU4QUUwRDgxNTQwRTI2QkM5QTIxMDRENEFCMjBDNUNEMUQ0RkEzREIwOUEzODI0NjQyNQorRTVCMUZFMUVGQkU2QzMyQUY2MDlFQkU3MUNBNURFNEUyNEQ4Q0RDQUYxQzNDODQzNTkxMjZEQUE2QUQwMDk4QkY3NDI4NDQ1NTk0M0Y1CisxMTUzNjA3OTlGMTBCREQ2NTdEMDBGRkJDMjAzOTgxNjc4NUFENkU1RUZBODQ0NEYzQUVBQThEQjUyRTJGM0NCRUE4MTVDNEVDMDkwNzYKKzFEMDNFODc0MDEzMTdBMTI1NjdEQTM1QTlERUQ5NTk3NDZGRDU2MTNFMUQ3NDk3RDA0RjgwQ0FBMzQ2M0QzRjNFQjc5MTJDQ0I2RUY4NworOEI0ODc0ODVBMjc1RDE1NEUyNTQ5RjNDNDI0QTczMEY2NkY2NkFDOUU2RkFFMDk5RTcxNTA0QUQ1Qjc2QjRGOTdDN0JFMTVENzBFNEE0CiszQ0IwMUUwOUNENDdGNDFCRjA0Nzc1NzQzNkM4ODZBMzZCOUM1RjJDNTFCMTYxQTM5N0RGQzU0OTRDMkVDQjVBNENDQ0MwNzVEQkUyRDIKK0UzN0IyMkYxNEMzNjY1MTgyMjAwODMwRjY3OTZDMUM5ODQxRjI0NDUzMjg2NTE1RTNGNkI3MDFFRjhDMEJFNjVCODMwNUEzRDJBMDUyMgorQ0E1QTMwQ0ZFNUNCRkM1MEE5QjZFN0QzOTI1RTUzMkFCNUE1OEQ0QzZDRUE1RkFFMUMxRUVEMkUzOUM4MTVFNjRCQ0M5NkRFMkFGODVFCitGNUJDMTgzMUVEQTNCMUJBNTQxQjdEQjVFREY2RTA0MjI0NkE4NTM0MzUzQjIwRTk5QTBBRERCNDZCMzJBRjExREVEQzJGRTFCMzIyNjMKK0YwNTRFNzUyRjY4NDI3RjVBMUI3MUVEOTUzRkMyNzJGRERFQTU1NTA2Q0M4RkRFOEYzNUM2MTlFMzcyOTYwNDgwMjRGQTYzMDNBOUZGRQorNkM5QkUzRURFNEJFNTc5NEFEMUE4RTc2MUIzQ0RGMTM3QzdBMjlDNjREMEQ4RUUxQ0YwNzFGOTA5NkRFRTg0M0VENDBGMUQ0QTU0M0E4CitDRTI4RjcwNDNEMzhBNzRFOTI5RUFFQUI2QkE5NUNERDE3RTUxQkRENzc2OTFGMDg0NkY5RUVFNDhDRDVDQUY5MDVDRTA4MTRGM0M3REYKK0ExN0Y0MzAzODRDRjFCMjAwNEYzMUUwNzk3NUNFNEE2QkM4OENBRDBBODA1Q0Y4OUQxNjdCREQxNUM5RjBGODQ0MjE2NkRFM0RGQTY4NworNUZDMDhBMzVEMjIxQTE1MTY5OEI4MDNCRDY3MDY0NTcxQUU1N0I2Nzc5N0I1RjA2MThCNkI4RjNEMTQ4MjlCODdBREE3ODM4RDY1QkNFCitENTI3Q0UyRkY5OTg0NTU1QjhBNkI5MTVBNjgyNjNFNjQxNDE0MDhGQ0I3QkJGMUZGN0I4QzA0MzcwNUE4ODAzQURCODQzOTdCODYxQkQKKzY0QTNBN0JBNzgxQzQ0Qzg0N0E2OEYxQTlFOEZGNkVEN0JFODgxQjA4QzhFRDNBMkJBRkFCOTE5RDdEMzZEMzY3NzJEQUFGODEyQTc0QQorRUMzNjhFQTYyMkRCNjkwM0NCQTMxMzRFNzU1QzYzQjAwMjBFRTcyRUE2OTlBMzk3NUJBNEIxQ0Y3MDMwRTY2QjM2QkRFOEE2NkJEMEIyCis3MEM3QTJFQzA4NEI4MzgzRDAyMzI2OUI5MzFCOUNBMDM2RkNBMzYyQTlEQTZEQzlERERGQzExRjcxNUIxRjJBNjAwOThDNTZCNkI2OEQKKzUyQkFGMzNCRjBBRUUyRDg1NTFGMEM4ODA5MzQyODk0RjYwRDM0OTBEOURBRDEzMTdBQjJGNzBFMzEzOTI0RTlENjgwQzYxMEQ0MUNDMworMTkyNEUxNDU4QUQyMjBGRkUwQjM4NDQwNERGM0FBNjdFNzMwNUEwODM2QzVDMTk1NTEzRUMzRDA2ODZCMzY4QTY1REQzREU5QUVGNUQ0CitFQTI4Mzc2QjRBQ0MxRDAwRUIzOEY2RDRFRUQ3RTAyNUVFMTdBMUQxNTdDMUU3MTg3OURFMTZCRjQ2RDU4RTFCQjQ2QjJDRjlDQkEwODIKK0MwQTk0NTY3QTVDODc0RThFNjQ3N0EzQ0QwRDZFNDhGOENENEU0QUMzNzMwRTMzRUM4MDc5QjRDQ0UwRUJEREE1RTQ4RUQxMzYyNkY5MAorODg4QTI4OTI0NDhERDA3NUVBM0E4NDZEMUM4RTZFM0YwRkYwM0I4RDYzRDA0QUVERkM2NTk4NDBBOTQ5Mjc1Mzk0RUIyMUI4NUU1NDRDCisyOEJGMEMyQUI3MTEzRUJFNEE4QTNEMDU3OUVGNDhDMTVEOUQ4MkEwOUU5NjM0NzQyMjA3M0E0NUUzMTk3NDkwRDU5RkU1RTk4MTg2OTcKKzA2NUE0MTlFOTU3NjhEQUY3NjhFMUQ5Mzg0MTRFQ0RFNTE1OTI4MUY0QkIzNUVFRDhENjVEMzY1MTkwNjIxN0ZGQzA4QUZCQjA3NTQ3NAorRDBGNkI3NTE5Q0UzNjY4MDkwQjExNUEzNTBEQzNFOTBEQjM1MEEyOTA4MjI0MDVDN0FENjcxM0YzQkMyOUZFRTBBNEUzMkY5Qzg1RkRCCisyMzJBNDU4RjU1REIxQ0EzMzVGQzk0QTQ3MkMzOTBBMzIyNDIyQ0FENjA5NDQzRjU2NDVFNkM0NTIzODU3MEI2ODlBN0FCMzA3QjYzREIKK0I1OThGQ0YyRUIyQTcwRjZDNEM5Q0I1REMzMDc2OTM4QzREMkM0MDA5MzBEQzI2MjUyODVFQjQ0ODMyOTQ1MDlBNEIwMTgwMDJCODI2MQorQUVGNTcxQjA2RDhFOUJEODZFOEFBNDBDRkVEOEU5MkQwNTVEMUY2NTNGRjY4RjJFREY5NDYzNzk2QjA3MEEyQjM2NkJBMjc0QTA3Q0E4CisyODNCMzBDRjc5MjMxQ0RERTRBMjk0OUY0N0Q4QzE4QzE1ODM2NzNGQkM1QUUxOEUwQTU0RDMyQjA5NTMyMkNGRjVERjM4MzFGOTEwNjgKK0U5REM3MTNFRjFCMjgwRDQxQzRCQkVGQjI2MDk1RkNENTdBNUZGNzQ1RTBBMjRDMDM3QjgwOTNGRkYyRTEwREE3RjZGNkE0ODEyNjBEMworMjM3MTU4Q0U1MDYxOEE4QkRCMUNFMUNGNTU1MUI0NTk4OTE3RTRENDAxMzdFNjc5OTNEOTZENzVENkMzODUwRDkyRDUzNzM1NDFEN0U2Cis1RTdDQ0ExNDc4QTVGM0QxMTdBQjhFRjJGODBGMDI0ODlFN0Q5ODk5QTQ2QjRCMUMzMEU2MUQ2NTdBRUQ4NDhBMTQ0REMyNEYxMUExRjcKKzE4MjAyMDI5QzgxOTI2QUE3NkQ5RjdFNEI4Q0RFMzg4NDhFNzAyRUM2ODQxMTE1QTBGNTg1MzM0RjQyNDQ1QUVBQUU3ODdCRjI3MkEyNgorMzU5NEU0RjYyMzU4RTdFREFBQUE2MzAyOERFNzg4NzI0RUUwNEQxNzUxQTU5QkQ5NUQ5REMyRjJFREYwMjU2Q0I0NEVEM0UyMjEwQTlCCitBRkU4MjgzMzkyNkVENkRBQkE2MDE0MUQ3NDBEQjAzMThGREQ5QTdEM0I0Q0VDOEYyQzk1RTNGQTZFRjYwMTM3MzdGMEIxRDQ4RDI0RDYKK0ZFMzg5QzJFRjVCRDEyQUQ4QzZEMkFCQUY5MDE2RUZDN0RFOERCREE2RkRBMjE3MjdFRjhFMDA3QjE1NUQzMTFEN0IyNzk3NTcxNjdGNAorRDFCMjQ3MzUzNEMyNDA4RTQwMkFBMDUwNEY4NTNBQ0JCQjVDRURFMjA4MTM3RjJEQTZDMjEyMzBGRTI3MTVDNDVFRjAwM0FBOTAxM0Y4Cis1NEE1NTM0RjNBRDNGOEZGMDU1MEJBRDM3MTY0NDlERkIzQTZBNEY0NjBDNzJFRkUzRUM1QUEyMjBFOTAyQzNDOUYwNjJFOEVCNDEwNjkKKzVCM0Q2MDI1NDVCQkMyNEQ2MTZGMDk3NUIxNkU4QzdEMzQxNUY3OTI1NTUzNjc3MDRCOTJDRUM5QkZENkE4NTFDODFGNUQ5NzE0QUY4QgorRTZGOEM5OTJBQjFDMTNENTFGNDZDNUUzMkY3OTczMUVBMzJEOUM1MjZEMkFBQTBBMTU4NDY5MkEwMjRFMEY4NUJGOUUxMzgzQ0RBMUM4CitGQzZCRTM2Q0EzQzEyRTRGRjM0RjExQkE2MkQ5NTk2QjM5ODM2RUI1OUI2MUJDNUY1REE5N0Q4MDMyMTVCQTFENDM0MzMzN0ZCQjVENzIKKzBDREVBMDgxRUM0MDMyOUZGMzEwNTdCRUE3Njk4QUU0REUxRjBCNzVENEQ5MDI3Rjc0MUY1ODdCNEI1MjRFQjEyMjg3REZEMEI5MEFDNAorQkVCMjc1MzhBNzg1NUI3OTY2NTc2QjY4RjE2ODJCOTkwQ0I1RkY0QkEyOTRGMjc4REM5ODk1NkM1OEZBQ0NCQUYzODNCNzA4RkU0NjY2Cis1Mjc2MUU5NEJCM0U1RTY1QzdFOTA0NjQzRDU0QzY4OTIwQzBCMTA3MkI3OTBBRUY5OTIyOUQxRjc3NDVDQjQwM0YwN0MwMjNGQTZBMzAKK0UwQTAwRDRBREU3MDUxQThCNTlBREIyOUQ0NDEzMEFCMDNCN0ZCMzAzNjUwRTlFRjU1QzQ5OTc4QTk0QTU4Mzk3NEI2QjkxQTBBNDA2NQorQjQ3REJBMzRCQ0VEQTE5RDQ0QTNGRDgzRTdGRDIzQ0JFQjZEMTY5OTAyM0I3MDRCOEMwRTJGQTgwMUNFMTVBOThFQ0RCQjA0OThCQkEyCisyM0I0NDRDMEE3NUUwRTRERDk5NUQ0MEFBNEY5RjAzQzBBRjg1QkM1NzQyMTgyRDYyOEIzQzBEMUY3NkExQTlDN0UwMkNCMjI5NUNGMjYKK0EyRjczNzYwQkM0NzJFMjI3OENBRTU0RDk3NjJGQTI3QTkyNDY5NjUzMjZBMENEQkNBRTk5NzYwOEQwQTFENTMyNkU3OEI2NzgwRTE1QgorQUU2ODg4Mjc2NjVERDc4NkU2Mjc1OTY5NDQ4RTMwMzAxMjQ4NkJDQkU0MTMwRDg0OEI0NjY2NkQ2NjBEMDc5MzU1OUFFM0U5ODREREQxCiswNEM0RDU2QTA2Njc4N0I0QUE0RTFERTgxODNCMDc4QThERTQyRjA2NjNEMzNEMzVCQUNCMTlBMkQ4MkE2MkM1MkJFNkQzQzZFQTZDNUUKKzNEQzlDNDlCQjc0RkIxRTQzMDYyOUY0MzdERkU2N0RCNERBQzczNTkwMjU4ODczQjZEODA4RThEQUQ0RkZGRTY2MEYwOUQ1MjA3QUE3RAorN0Y0NUVFREU2RUNDMzJFQThGOEJBQTA3NUVGMjM2QzcyRjk3NTlGNDRGNTlGREI0NzhFQjgxODc2OEVGNzQwQjlDODkyMzk4QjM1Qjg5CitDNkY0NEVGQTFFM0JBRjM4NEQ0QkVDNjhEODE3QUU3QzQ0OURFMDYxRDUzQzc1NjhGMjcxNDM2NUQ1QzgwNzI5OEQ2RjcyRTRENUQ4QUQKK0I4N0FDRTE5RTQwNTdFMjE4ODExRUQxMkY4NDkwNkY0RkY5QkVENDY2MDcyNjNBRjFDRTRFNEZDMUE3RDA2RDU5NzI1QkZBRjlCMTkxQworMTdEOTEyQzY3NzI2RDg4Q0U4MDVFQ0Y5MzA4MUExQkVFMjgxQTAzNjRFRjBDRUZCQTkyRkNENjQzM0I0QTQ0QUM4M0M0NDkzNTkwMUQ5CisyRTMyMTg0QTMxRkU3NjYxQjc2MzZCNzBGRjYyRDk3QUU5RDc0NDBBM0E2MTJBNjhERkQ3MTc2NDQ1RjA3MzQ2RkQyNURBNUQ5MTAwNzAKKzVCN0FDNkY5MDZCQ0JDQUZFMkJCM0EzRTI5NkQ1ODA2NjBCNUY3QjJCODI5OTUxRDI5MUE3NTlDRTVEQUJDNDdFOTAyMUMxNEFGODBENAorRTI1OUVFMTMxNjkyNTdFRTI0QzAzNzNBN0NBQzE3Qjk1NDlBMzk0MEZDNjU4QkMzNUZDNjM2NkM3QTlFQURGREI2RkYxNUNGQ0UwMzhECitCNUYxRTBCMkEzM0NCOEM0NUQ3OENFMDNFODM5NEUwRUE5RDY3NzA4QzExRjdFMjVBREE0Mjk4RDVDODlEOTc3QkYxNzU1NUFDNzA1NzAKK0JFMDc4MTVDOENEMjA0RTNDQ0NEM0U4OUE2QTRCOUJCMUEwNUZENkRENEE1NkREQzBBRTU2RDdGNTgzODEyNDYwOTVFODYyNDUwNTVCNworNzYyRDA5ODExNDgwRTlBMTcwMEZCMzkwQkJENDVGRDA1RjEwNTRFRTY1QTlGQ0E4MkIyOEYxNDUzRDcxOUQ4RUExRTM4RTE0NzVEOTRECiszRDFCMTZGNjVDQzQ1ODJDQzMyQ0JGNUI5REU5MEU5NkQ5MkEzOUY2NjcwOTBCOEI0N0UwRUFDQkJFODVGODg1RkI1NUY4M0IxOUIwMzAKKzUyRDRFRDU1MkMxQ0E3NzgwQTRBQkYwREIwMkY0NzZENkE0OTRCMzYzOTk4QjRCRTgzMkNGREJERkIyOEUwRDJGNkRCREYwNDI5MUU1MworRjhDRUU5N0Q2MDU3RTY2OEYzNTk0NzVGQTU3NTQ0MUJDNzdGQTZGRjMxNzA2MjFEMTAwMkIxQUI0MEMxNTVCOEY0MEY3NERDODIyQjlBCis5Q0VFRjc2NjJDOUNFQ0UxMDgyQUUyNjk5NTNBQ0FFMkU3OEUzRUIwMTFGNzIxRTZENjVCODk3Njk5REY2QkUxRDE0Mzk4OUZFMDdCRTkKK0UxRUVBQzRBN0ZBQjJCQjg4ODQxRTMzRTlBRjBFMTA5QTE4NkY3MkI2RDk1OEQyREJEOTJFMDcwQjYxRkE4QUM5REU2MEQzQjBCRTA4OQorNTBDNTk3RDAyNTUxQjNCMTBBMEU1MkU0MDU3MUJGNkFGNDA0N0IxOTE0RkE1NjUxRUFGMERFMEQzMzJFRTk1OUY1OEY0RERFMUQ4RDRECis2RDg0N0RFNTBFNEE0N0FDMEMyRUU3M0ZCNjdDRTdGQTIyRjI0MkQ0RTY5RURGMkNDMDUwREFEREIyNUY4OTU5RTkwNjBBRjBFMkFCQ0QKKzJFMDIyNUExQjlDNDc5MkVFOTg4NTE3QjNBNTY3REEwOUYzRTEyRTA1MkVDREM5MUE1NzM3QzQ0MDI2NTEzRTQ2RDdCMEM3Mzk5QjAwNgorQjE1MDVGM0I3RjQxODgzQTE0QkE1QjE4MEU4MEM2M0RENUQzN0VDNUU5MEMzOEY0NkRDODhGMTFGRDVDMTU3MDQ1NTk0MTk0OTYwNkNBCis1OThDQTIwMTA1NjhEQzBCNDlGRTVFNUVCNURGQjdFM0FGMTk1QTIzRjUxRjg3RjU4OThEMTBBMzQwNDNGMjM0MDlBOTU1MTkzNTY2MTcKKzA3M0VDODNDRDMxMkFGNjk2MUVFQTQwMzc3RUFCMEIwQzE1OUMzOTA2RjA0OTJFOTQ0MTRBQkI4RkYzNEYxRkI2RDMzNTk0RENCNUE2NAorRkFBN0EwMkM3NDk3OTlCQzE0NTUyRjIwNTEyMkUyMjIwOEVEQjYzM0ZBNTAzMTFCMzk4Qjk4RUZGQzBGRUI1Q0FFOEIwOTUzQ0QxRDBGCiswNTcwMUMyOTE5RDVERTU4RUVBMkNBNEFFREQwNjQ0NDkxNUIxNjkyNTUwNEQxNTlGMDUwQUFBMjAzNDczQzI5ODA1RURGNUE3MUFBRDIKKzA2QzYwMTI2NkVEMkI5MDlFNjg4ODdGOTRCNzYxNEU3MjM5NTBFQTk4MThGNzc5MzA0MEJCOEY3RTM1MDBCRTQ0ODk4QjkyRTFCREM5NworQkNDRjMxMkQzNUE4NUU2Njc2NjlGMTVCREI0Mjg4NEU3QTI1OEMzNkM3Q0Y0OTQ3ODUyODY0RkY0NkVGQ0Q1NjgxN0M1OEE3QkRGMjlGCiszMTExQTE4OEE1RjlGMjU1RkUwNDI1NUIxNDI3Q0NEOUQwQ0FGNkQ5OTkyQzZGRDQ5M0UxMUFBQTgxRTEzRkM2OUM1NjlBNTczQTc5Q0MKK0QzRDI4NTlCMDUxQjdFQzdDQjU1QTI5MjlFNTE1RkMxNUIwOEFEQTUwMzY5QzEwODA4QjgzRUZCNjQ0NUI0RTU3RThCQkJENzVENkE2QQorNjJGNzIyODc1QzZBNjVCQTM1NUJGMjRDRERGNEY1NjExRDQ5MThFRDlEREM1MkU1MjdDNDlBMjg0M0JBMzY0NkYzN0IwMTAzRUQwODM4Cis1RDY4ODM0NzgzRjI5QzIxRkM2NkY1NUE3QjExQ0REMTU0ODEwMzEwQ0IwQzA1MzY3RDJGMTJENzQ5RjVCQUZDQTg2QUYxNjE2MEU5MEUKKzFFNjYwOURCRkVCMzAyQkI3MzkzMjM3NzMxRkY5MEVGNTU1RTFBMTk0Rjg4QkIwNUZDRUJCNkIwNTczNzI3MzFDRjFEMTRDQjQ3RTQ3QgorNjlBM0UxMTU4RjE3NDFEQTQ1MDU1NDFBODMyRDAzNjJDRDREMTZFQzU0QkIxNkU0MENDNjgyQ0U2MTMyRTM2OUMwQkFBMkFCRDdBMzVGCitDMjc5OTk4ODFCMDJEOUMyMkRGREQ1NkNENzUyMENCODNBOENGQ0I0QTE3REM3OTkwNDNGMjVENjlCRjM0NjBERUVCRjE4QzI1NzlGMDUKKzJCNjlCOUZFNUU2Qjc0NjdBMTVEQUMxMEYzRDM1MDBCN0VCMEQ0MUU4Q0JCMEQzREQ3QTY5RDI4NDU4MzczQzY4MUZBNzYzQkFGRkM1NworMjRFMUI1OUYyMUFBODgzMEU3MzkxRThCRjhDRDY0OUY3RjM4MjYyNjQ5MTQ1MDVBM0IzNjcwNTY1NUFGM0MzRkY1MDYzMzJBNDNENzUzCitEMTVCRjBBNDE1RDZDN0Y4RjY1M0VFQzBBNjY4NDBFN0I5RTc4QzhBQjA1NTY0MTcwNzFDQURCODYxRDlDRTk1OUNENDY0MUVGMkNERUEKK0I0NTA1ODc3NTJCNEFCRThGMUU2MTczMkM0OUM1NzI0MTc0NkU5MTNCOTlEMjM1NjhGNjI3QUE3QTIyQjlEMzM3MkYyNEE5RjFCOEFDMworNDI3RTU5ODgwOTA4NEQ0QkNEQ0M4RTI5Qjk3NTAyMEU3MzdGQkRFMUJFMUFGNzRDRDAyQkRENzgxMzg4RjM5QTE4OUY2NTgzMDc1QTU3CitBNUIyMUUxQTVFOTNBRDE3MEMzNzY3QjU0M0JGQ0MxNTJFMzI2Qjc2OEQ5OEJEREQ0MDNGQ0FDMDdFQTM5NUEwMTlFNjQ1MDY1QjBERDgKK0REQUQzMzk4Mjk5QUFCRTYxRDIwRDg1RTk5RkI4MUM2M0MxNTIxMkI0OTZBM0UyM0Y2NEY0MEFCRTYwQkQ4NTI3Rjg1QTc4OTBCQjdDMQorQTMxRjlGQUQ1Nzc2Q0JGODUyRERGOTA5OTYzMEEwQjExMEREMUZEQjg3RkEwNzRFQzU0OTNCQjIxODg5NDBGMjk3OUEwMUMxNDYzQURFCitCNjg4QTNDMzMzOTI5M0IwRTFFQTdGRUI1MjAzMzM1RDI1NThFQkI4QkRCNjVGMTNEQzJFQjhFREQ2QzI3ODREOTAyRDZCMjAxMzVGN0MKKzg4NjYyOTkxQ0RDOTFFMkI5OTgwRkQ2OEIxN0I2MkU0NDY5Mzk4NEI3NjYyNDdBOUYxMjFBMTJFMjgwQUVDNEQzQzc2NUYyODU3MzM4QworODg3MTAyNjYwNTM3QUUyOEVCQzc3NzFENDAyQkUzODFFNkFDNzVEMDcxRDZFNjZCRDUzQ0MwMkVDOTY4NTFCN0Y2RUNBN0E5NDY0ODM0Cis3MEYyQUYxODI1OTJGNTNGQkNGN0YzRDA4NzhFMTRCRDNBNzI2MzM0NjE4N0ZCMzI1MEYxNzI2NkYxMTA2MkJERTc3NEFBMzk5N0U4MTAKKzJCQTlDN0JDMzdBMEI2OURDRDc4ODA3MDcyNURFN0Q4RERFODA0QjNCNTM4MDI0RjJENjdERjdCOUUwMDlBMjBDMjNGRkE1QjM2Q0VGMQorRjIzRDdBMTJGNjY3QTE3NTBCQkYyQjIyMkM4RUQ4MjQ5OEE5QzY0NEFBRTdBQzI1OTg0MEYzODgxNzQ3RjJCNEVBREU3RDk2MUU3NEVFCitBMTc4NjNCNzQwRTFBNjcyRjI3MDk3Mjg3M0VGM0JDREE0Mjk0RTcwMDhBRTNGNDcwQTg5MTU5MDA1NDMxRDlDQkQxQkRFQjBCMzQyMDIKKzQxRDQxODY4N0JEMDQ0QjlERUEwOUY0ODAxQkYxMTkzQjEwQTZCOTY0NzhDOTM4QUE2N0NCRTM1ODAxODdGMkNDMjYwNDkxMkJFNkFCMQorQ0M5RDEwRTE1REQyRDAyQzU1QzZFRjgyNEU0RThEQ0QxQzFGOTI4NzFBQUU0QTMzNDU1RjE1RDcxQjQzNTlFMTVDRkIyOUY4RkZCMUZECitGMDg4OTc4QjkyQjQzNkE4RjQyQ0Y4MDYxREM5ODY5NEE3NjI3RUEwNjg3MkREMjRGRDVGNkNBRTRBMDkxMDZCODJBRjZEMEE0RjEzMUMKKzFEMjVBMDYyNjQ5RkU4QjZGQTE2OTI5Mzg0RDRDMTVDMzAxODc1QjA1Qjc4NDgxMzkxQTQ5N0RFRjNENkUyNDc3Njk4NUU3QjlEMDExMQorODQ1MkIzM0VFRTA4NEExQTVDRUI4ODY2QThFN0Y3MDE2RDgyRDA1ODhDOUVDMDA2NzFEQjc5RjIyQkJDOTA0MjA0MTM2RjJBOTdCMjdECitCMUUyMEE1NzFBODkzMTJGN0YxRkRBRTFGOUFBNjZFRUI2QzdCNDczRkVDOTBGRkU3NUVEQ0JCNTNDRDRGNDYyNUQzRTA5Qzc5QUY4QTkKKzA4Mjc5NzU3QUM0OTk1QUI1NzVEQzQ3NjJCMzNCNjYwOEE4QTg1RDVFQjM5QzUyQzFDQTQ1MjA0N0VEMTgzQTAzMTE0MkFFMDYxRDJDMQorMUM4QThGQUM0OEI1MjM5RDI3RTE5NkFEMTk2MTMxNThDMkIyNEJGNjZFRjVFQjA0MEM1NzFCNjc3OTE5OTZGMThFN0M1RTQxMjVCOUNCCis1MjU5MTEzMjUwMUQ0RTNFOUE0M0IxMTFCRTc2RUMwNkU3MDg2NzQ5NEM0REQyN0MxMzdFNkJFMzVDMzJDQUU5Q0E0RjVDRTM5MzRBREEKKzg2NUYxOEMxNTI2OTdDNkIxQ0YwNjA0NTE3QUQ4QzZEMkFGNENDMDBEM0UzNTRFMkQyODVFRTJGMDYyMzdDOUZDQjAyQTNBNEE2MDE1NworQ0NCMEEwRjM1OTE1NTY5QUFBNjRBOTVDN0REQTAwRUUyNzE4RTJDNjA3MkY3RTVEODhBODhCNTcwMjFERTRGRUMzOUM0NzQ0NjAwMDczCitCMkQ4MUE2NjgxMDlBNjUxNjY3MEExRjNFRjc4QkY0NjUxOEU5NUQwMjI0MzA4OUQ4OUE0OUZERDc4QThFRTE4MzU5NEVGOTM2RjcxQTEKKzhGQjVGOTMzMTg2MDJENjQ5NkZGMzVGRkZGNzlGRUFFMjIzNjM4NkYwN0FBODQzMDBCMDY3QTlFRDRGRUJGNTFCNjlGREZCQjk3M0ZDQQorNjIxMjVGRUU0NDYzQTA2QjhGRkNGNUM2NjI5ODRDMUNENENBREVDQzI3NTcwOTI2OEM0RkZBRTc3NEUxMkI2MTc5NzM3NjBFMzY5RDFCCis4Qzc5RjAwNDcxMzEwRURCQjM1NjkwMjJCRTBGQUEyRTlERUIxMkU4MUM0MEE4RUQzODAzRkYzRTQwMDkzM0I1MDkwNUYzRUIyMzE1NDcKKzE1Nzg4NzE0ODczODg0NTY2NzgxN0ZFQkVCMDBEMTc2OThEQkE5RDFFMjM2RDU5NkRERjNFQkRGNDZBMzM0Njc1N0NDMDEyNjU3RDBFNgorQTBEQzc4Mzk5RkY0Q0E4M0IyNTQ1Q0YzRTM3NEYxNkRCMkE1REMzNkIzREY5QUUwRkFGRURBQzkzNzlGMEVFQTNGQTE3NUNBMEU5RkQ2CisyRTExRjEwMzY5QjIxRkFCOTlENzIxRURBOUIxMzUxOTgyMkRGOTk5QjUxMkE4MDYxNTgyRjdDMEU4MzYxMTJEMDIzQzQ2MTc4NDhDMkMKKzZGOTIzRjhCQkUyNzAxN0RFN0NFQUIzQzg1N0Y2QTE1MUJEOTk4MjY2REY2MkQ3ODg1QTNDMzgzNjNGNTk4NjYxNDE5MUQ2OEMyOTg3NworNTY3QjE0MDhENERBMUM1QURBOTFBNzVBMUE1Q0IwN0M3RDU4NDNDRjcyNDYyMzNCRkIzMjNGRkY0OTVFRUFGNzJEOTZBOEVERDhDMzIwCis1NzY3NDUzNkIwOEU3NjA0MDc0MkVBRjY1RUIwRkVFNTBENEIwQkZDNjYxQjFFRDVBNDM2RDY2MDFBODEzRjM2MEJDMUE2QzhEOERBMzQKK0REMTU2MEY4NjQ4NjhDODhBNEI3MkM5NUM4MkEwMzI4RDQxNkVBNkEyQTc1RTVGOUFFNjU4RDYyMzlFNTRFNzg2NkNGOEM3RTM3RjkxMQorN0U5RDk0MEYxQTI0Mzk5MjRFQTYzMEMzMTA0MTZEMUExQjk1QzNFOEJDQkQwRjFEQTZCQjNGNUFDOTM0MkZBRDE0NUVERDk2QzQyNTBGCis4OUI1QjVFNUYxMDY3RDRCMkUyRTUyQTE4MkZBMzgzQUQ0NEJDNERFQ0ExRDIwNzRCQjZFQjFERkJFN0RGMjVBRjNCMDI3MUIwMjdCMTEKK0JGNEIwRjFCNTZFODM0QTA2NjdBOEIzMEM5QjYxRTNCNDQyODNENTcxQTExNjY3QTREQzEwRjdCNkUzQjMzNDc2NENCMTAzNTcwOTBCMgorNzRGN0JGNkI5QTE5RUNCQUVBQzBBOTQyRjk1RjgyQTYwNEM1MERENzFGMkNGRTVCMUI4NjhFNjlDMDc3Q0RERjVDODI5OUNBNkMxODE2Cis5M0FCMEU0M0Y4OUFEQkYzQkI5NEUyRTNDRkIwMURFNDdCRUM5RkFBNTlFREM1QjZENTA3NjVCNkVCMDk5OTU3NTVDNjA3NEMyMTA2QTYKK0ZCMTQ4RkI5ODNDRkUwNkVCNEVBQkU4MjdGOThDRjE1ODM3NUE3QzlDNzQ1RDNGNzkwN0M2OTUyRDBDQkYyOEY1RjFERERBMzFBOEJDNQorNUEyNEZBMzVFNTU4NEY2MUY0QUNBMjU3NzNEODZDNDZCN0EwNDJCRjAwMzA4NkQ4ODc5NTA1RkI0RTRBODhCMzc3MjQyNzZFNUFFRTA5CitGRDgyNDI5ODE0QzBCNjAxQ0UyOUY3NjgxQkIzOTAzRTY0NjE5QkE1N0Q0QzczOTlFM0JCNzM4MTA1QzY0MDQxNjVEMUZGMkU0REI2NTQKKzI3MkMxMTE4NTg4NkI5RjlDQkI5NEZFMUQxRjdDQ0JBNkUwRTQ5NDRENkM1OUVBQjVCRTdGNjlGREMxNDk2QTc3OUM2MzM5MUUxRkE2QQorMzhBQ0QxMUU4NkY2ODg2MDBGRTFDQjM5ODRCNTI3RkQ4NTZEQTAyRjhGMEQxRDI0N0RDRkMxNzIyMTEzOUMzMTI0OThBQ0Y4RDlFODEyCis0QTY0QTUxMUFDQjY1MDFFQURFOUY4NzkwRDRGNkU5QzNCNDJCQzA0QzIzRTZBRDJBNkU2QTU0MTc4QkMzOERDNjg0QjAwRkI1NDlBOTIKKzgxNjI3MDU2RjQ2QjY4MzZBNjg4OTgyMTE4NzYwNTgzOTRENUJCMjYzMjAxQkM2OUU2OEYwNTBEQTAzOEI3Rjg2RUVDQzExN0MzN0M3NAorQUFCMEM5QzRGOEI0NjUyRTJGODNGMDkyN0FEQjJBN0JFOTAzMzI1NUM2MzE5NTZERENCMTdEQjJGRTM3NUQ3OUJEODEwQUM0M0EyRkUwCis4QjUxRDdCQTk2MTkzNUIzRDlCQkM3ODVCMERFRDY4RDg0QzkwRDNEQzNCMjI1NDFDMkIzQzFBNTNERTk5REExNkU2RUM2RDE0NzZDQkYKKzU1MTRFM0JDQUQ0MjdDOUM4ODc1QUVDNTkxQkI1RTIxQTJDQTQzQzE0MDUxRDcyQzE4QkVENzM2MTJDRTVCODhBOEE3MUMxMTRBNTYyMworN0ZFRkM1NDU4M0EzMDQxQTZFODcxQzhFN0RDQjRDQzQ1N0JBRTczOTBERTY3NDk5MkVGMkUzREM1QUNDODA4Q0VGMUI2RjNENTgyMTRDCitGNTAyNDQxN0JEOTAxMzQzRjJGMDk2MTU3Q0UzMUVDMEVBNkNCRTgwOEM4RTUwOEU2MDAwRjAxNjcwRTU1MkRFMDBBNEVCNEQ3QkQyNTQKK0Y4NDBDQTZFRTZDNzVCRDk2RTk0NDM1MkQ5QUVERUU2OTQxQ0UzRUU4REEzRTg1MUQ4MTEzMDlFM0I1RUNDNjEwRTk4RERFRTI2MjQ3MworM0Q2MURCOTYzNTMxMjI1OUNGREE4OTUzREY0RDAxQTlCODU3REI2NTMyQ0VENURFRjJBREI1ODMwQUNEQUMzQkRDODlCOTU4MzQyNTVDCis0NDEzMTAwQjE5Q0Y0OUE1NDc1QzVDOTg1RjgyRDFDNDM3NTBFOTMzQzU5Q0JDM0Y5MkY1Nzg1RUI1NDMzOUNGNzQyRjQ0QTJCNEQ3N0YKKzY5NDU5MkNFMkY5MjZEQUZFMUYzRDJDRTUyRjQzQzE2QTIzMzFFMDI3RkYzRTI0QzEwMkQwOTQxMUI1NzhCMTQzNTgyQjU1MTAzMjQ3RgorNzg2NkIxQjg3MTI3NzYzRUFFOUJBMDYzNzQ2Qjc4NUUzOTJFRDExRThENEE2QzI1QUUzOURBN0FGNkYxMjUwNkJGOUFGQ0FCODlENzdFCisxNEM2NzU3QTZFODA2QzBGMUExNkEwRTQyRUVDRENFMTk5OTZBREVERTQzRTQ3N0I4NEU1MDNDN0FERTg0QjFENzlFQUE4QzNFMEQ0Q0YKKzk0MzQxNkI1NUVBQ0Y0RDNFNjIxNzhBMjk0ODZBOEYzMTE5MDcyODIwRjM3QjIwNEExQkQ0ODI1RTc1ODY1MEU0QjA2NjA5Qjg2N0NERgorQTM2RTUwQTgyMzZDQjlGQzg3RkQ4MTNEOEU4NDcyOTRCNUI1REQ2M0RCN0E1NTM5MTdENTgzODNFQUY2OUJEMDk2RUQ2NTg1MzZDQTlDCitCODNEQTk2N0VDQzQ2N0U4MzI5RUJGQzQ1MEZDODZDOTYwRDIzQUJGRTBBNjY5ODI4N0E1NDA1RjU0MDgzRDVDNkE5NDlGNzNDMDVFQ0IKK0RGNTIxQkZEMEEzNTgzQ0QzOEFEN0IyMzI0RkU1Nzk1ODIxMkI0NEVDNkNCQ0ZCRTY0OTFENUYyN0Y5MUE3QzY4QkY3QUU5MTIzOUJDMQorMDZBMzdEMTQ0RjcyOEE5Rjk0NTJBMTdDM0UzQzgxNTAxRTYxOThCQUU5NThFMzdDOUI1MEMxQUYyN0MxOERGQzE0NTc5NzcyRjlGODc2Cis5RDFDNEJBMUNFODZBODhCMUVCMEQ1RUE5RjUxREMwOERERUI1NzM3QUNERDU4RDg1NjY5ODc5NUIxQjNFRTI1RTdCREFDOUU1MEM2QzMKK0Q2Q0U2NUZCMzRBRjRDOTNBNDk3OTYzMjRCN0RCNDQxMEE1MDY4MDM5MkJGQTVBQURGMjM0REYyNTg2MTc2QkM5OUEwNEZCQTdFMkEwNworOUY1Rjc5QzdEOEFENjhGOTNCMkYzQjdCRUFFQUMxQ0Q0RTQzMzhBOUNEMDIwM0QxRTA0QkMwRkMzMTY1RkNBNDEwM0VFQjcxREZEMTE5Cis1MDU0NzM0MEFDODM2MDVCODg1QzJGMkIyMzVCQjFGQTFGOEZBMENBQzJFQjY0NjE1REY1QzI0RkIyQ0ZBMjU1NEI3RkMyQzVDRjc0NDAKKzNDNURDRUZDMjJDNzE5RTk4NTUzQjBFQ0ExRDA4NDgxQTEzMEZEQUI2MTk5Q0ZENUZDQkY2MTBENEUyRjUxQTE3NjMyMjcwQTA5NkE3MAorRjFFRDIzNDVFMTk2ODQ0Q0FGQUIxQTk3OUZBMUNCQTU0NTE4QUZGQjUwN0M1OEU4NkUyQ0NBNDE3ODE3MkI0ODhEN0FENjEwQjUzMkU3CitGQjEwNkY5NEU5MEMwNjJGRkQ2N0ZERDE4QTcyQjNGMjY1MjQ1MzgwNzkwMTczN0RCODg1OTAzNTg4NEQyODkyNjZFNDAyQkY4RjQ3MTgKKzUzQUFCNjgwNkJFMUJDMzlGRkQ5NzU1MkIwMkJCMDgwOTI2RjkwOTVENTZGMkVDMkNCMDQ5ODBBNzZGNkRFRDMyQjlGODc5MDM0QUUyQworQTYyMkUwRTIxNDdFMzM1ODRFREVBNUQwMDNBRjc1MTI1NUI1MTk1OTk1NkQxRTI3Q0ExMDhDNkVEQTlDRjVDQUY1M0NDNDY0OTg2MTIzCitCOTU4MkQwMTc2QjY2ODk5MDRENTc0NEI5MjVGMTJBRUUxNzQ5MkVEM0ZGRjA0OEUwNzYxMTlGRDFGOEZEMkE0QTFCNzBBNjM2OTMxMkYKKzY0RjQ0NjY0RDFBQzUxOTQ2NEEwRjJBREYzMDE4QjM5QTg4QUYwN0M1MkIzQ0NCQzlERUJEOTkzN0ZCMjMzMDkyOEMxRTVGRjU2QkQ3MworQzRFQkI5NDNBMzAwM0U0MkQ5MTNDMTVFRkU1MkVDMTdGMDFDN0YyNjNGNzk1NDYyQkU2MDVBMjkxMENFQTc5QzZCNzI0OTVDQzU4RjgxCitDRTgzMjk3QjIxMDYzMTlFQzYwOTdDMzhBNzM5NDM3ODE2NEI3NzM1NTAwNDUzOTc0QUJBNUUzQkUwNDU0Mjg5M0FFMTVDRDVCMzRBRDUKKzAzMkI4RDFGMkFCNjgzQzc0M0I3REQzQ0VBMUMzOUEwMDE0RTkyNjRFNzY1NTY1MTUzOTAwM0EyQkRDNTg3RjMxQjYyRTNCRTFCN0Y5RAorNUYxMzRBRTc2OTQ5RjVBQTYyOUQ1QTYzRkMyMzk5MjAxODAyNDZFQTFGRjYxNzZERDQ4MkUzM0FEMjU4QjE1NUQ1NUNENjZCNDRBMjgxCis3MjNDRDNDQ0I2NkEzNjJGMTFFNEQ1OEY5REQwMDZDRjE2NTFENkFGRDkwM0FGODdFNzI1NDRDRDM3MjU2NzAyMzJEN0REQThBQjE5M0QKKzJDMDg3MzZBNDlEMUZBQUFFODYxQTY2NEE5REE0Mjk3NzI5NDcxMDdGMjkxN0Q3RTc3MTdBNDUzNUQ0NjREMzRCM0M2NUIxRTc3NDQ0QQorNDcwRUFDQTY4RTREQUIxMjI0MjBGMDFGOEE3RDIxM0QwMDQxOTA4QTg2NENBQTZBNjIxRjE0QzE0RTQwN0YwQkM1Q0M3MENGMEJDNEZDCitDRDJGQUY4Q0QwQzVENUZCMjA4MDAxMEUwMzhDMEYxMThENzYyQzA5ODk4Njg2RDhEQkZDMjlDQ0RENDZGMDhFRkQ1OTkzMjgxMDFCRjUKKzE2QTU3MzZGMjBBREQ0QUMxQzE1MEJEM0JFQUQ1ODVEMUQzNjIyNjFDNzM1RjI0Q0ZCQkQ0QjY0NjgyRTM0OTI2Q0IwNEY5RDMxRTA5QworQTYzMzVBRUIzQzQ3REUzOUQxNjAwRDdGNjIyMTNBNzFDNzRBMEY4MTk2NURDNUIxQjNENzIyNzYzNjY5MEI4ODJGMzgxMjZEOTAxQTlDCitFNDE4QkM2RDNEOTIzRkJCODAxNzYxRkU3QjgxQTU1REUzRjJFNDI2ODgyNDZBMDY0NDFGQUUxNEYyM0REQjk5MzY3MTkwMUY5NzQ1MEMKK0VBNkRCMTBCMERCMTNBMjNDRTBFMjFDMjdDMUNENkFCNTI0RDI1RUZDMTNEQUE0NTBGRDgwQkJEQzYzNzYwNjVBMTRENzQ5RDQ4RUUxRQorOEM4M0I4MzNCNTEwMDI3RjlDODlGNzMxOUIxNTA5QjY5OTE2MkI3RjlDNUI4QTczOUFDQzEwMDY2MzlDMjk3QzIzQjhBNjYyMTNGNDdFCitBODczRjg3RjFDQzE5RjU4MUVDMDI2REU1ODRCQzA0OUM0OUJEQ0ZFODlDMDAxNTA0RjQxREUxN0Q4NEY5NzM4MjY4ODZGNEU1MjQ2QkYKK0ZCODdBREYwNzI2Q0VDN0E0RjE2N0UwMzg0QjkxNTI2ODk0QzJEMDA5MEQzOEVBQjE0NjFDNjA3RUYzNTlFNzQ2Mjg4NTRERUUxQUVDMAorNURBODk0NTk5NUEzRDY4NjcxRThCREQ5OTQ2QzIyMjI5NEIwQzQ2ODBFRjJGREMyMjRBMEM3QUZBOUU1NDY2QzdCMTQ1N0NFM0RDN0I4Cis3QjBDMzUxN0RCODMzRUREMzAyQkFDRjNDMzdCQUU0NjE3QkE2MjA2RDVEMUM3N0RENTM1NDdBN0JCRTBDOTQ4RDIxNzI0NkMyOTRDNzAKKzVCMjU0QTk2MENDNUMyRjVFMzUxMjAwMzYzNTZENzYwNDUyODg3MjM3RDcwRDFFMkYzRDZCNjRBMDE3MUZDNTc4ODU5QUJCNjJDMTQ0NAorRDNGRTA3MTlERDg1RTdBODgxMkY3QTVDMEI4QkVBNzIwN0UzMUM3QzU1MjgwMzQ4MTcyREM1RUIyNzU4OTgwNDRDMDBDMkQ5MjU0NUEzCiszNjJGN0I0MkUwNzNDNzVCRjE3OUQxM0IwQkU3NkI0ODM2RDA2OUZFMDFDMjg3QjM2N0QwMkREQ0VDOTQxMkMyRkJFQzNENEIzMjdBMTAKKzc2NTg2NzUwQzg5OTRBQ0UwREUxNzMyN0IwMUY3NEEzODEzRDNFRjlGQkI5QzlDNTQxNEYyRTlDQzFERDlEMDYyOTdEMTc0REZEMkRFOQorQ0U3QkM5NUY1ODBCNEYzRjI2ODMyQUVFNTM1QUMxNkEwODdBMDEyREU0N0JDQzY5MkI3QzA1QjYwMTVDRUUyMjEzMjNGN0VBQTE5MUVCCis4NkZBOTREQkVBQ0YwOTk2QThDOEQwMTMzMDFBN0JGNjRDMjQzNjEzNUMzQ0NGMjI5NEIxRTIyNDYxODQyNjFCOUE2QkQyRjRCOThBOTEKK0U0MUVFRjlCRDA3MDE4RjVDQjlCMDA2MEFBNzY2NTFDRTE0MDVFMDhFNDU1QkE2ODlDRDJFNkEzMTI3MDA3QkI0QjMxMUMyMzgwNDY4OQorRUNGNjBEQTc5NzIzNzNEOTY1MjUwNDJDMzYwRjVERTA5RENGRjk0MEU3MkNENURDMEE5MTU0QjYzMUFDMUYyRTM4QUEyQjg1NTFCQkM5CitBRDVDQjc0Q0Q4NkY1Mzg4QUE3NUI2RDkyQjFFMzdBNEY4NzVBNjcxNDkwODM3N0Q3OEJDOTZERkFCN0VCRTA0N0JFNEQ0MkM0MTZGREUKKzUwQTMzRkNBOUU2NTYwMEEyQzdBNzU3NUQ2MDU5MDgyQzNGQTBERjNDMzFFODJEM0ZBMzk2OUNFNDM5NjVFQTQ5RjA2NjNDRjJBMkM3MQorRUU0QUQ1QzdEODUzQjUyQjZBQTBGNDFBQjNENDdFNTEwRDhCRjY0QUZCMUU4QjhGNzgyQzk4Q0QyODdERUI5QUZFRDM5MzM1NTIwQjcyCitCOEI1Q0ZFMkE2QkI3QzFBQjBFQjc0NkVDRjZGN0FGODZDMTgzNjEyQjBEQ0Q1ODNGQUM2NzhEOTYwMjk1N0U2MUMxODdGMzlCM0E2NTQKK0IyMEM3OTJCREE5RDgxRkE5NzRBOUU4ODY0QzFBODZGOUFCNzI5MThGRUJGRTQ3NTE2Mjk5QUUxRTlCMjdGNDZGM0MyOTU5QzVBQUFEMAorQTVDM0MzMDY1MTE0RTg5OTU2RjVGQTM2RTE2MTc0NDcwREI4REIyRkUwODM5NkVBNUVEN0Q1MEFGOTg5RDhEMTQzM0UwREU3MTE1QTQxCiswMTE1QURFMEJBNzRFOEE0REJDRTNEOUI4N0NBNzY3QUUzODAyODBENTFGRUE5QTBGNjIzQUIxNzVDMzQ2MkI5NDgyREY2RDBCRThGOEQKKzQyMDc4MkRCQTYzRDVGNDM5NjZBODhFMzc1MkIyNzAwNDhFQUZFOEJBMjkxRTcwQjhCREY4RkI0MzNBNUE1N0M2NjlCNEY3RDM1QzhENworM0M1MjcwMERFRkJENENENDJFMUYyQzhFNDQyRDE5QzAzMENCMzVBRDY2QUVGN0VGMDIzM0JCNEUwOEZDQjQ4Qzg3MjM5OUFGODU5OTM4CitBMDJCRTVGOTYzOTFGQzY0RTI5N0FDNzkwRDcwMzAyRDUxOTc5Q0Y1NDU5RjRERjJBNDFCMjc1OTJEMDUzOERCQUMzOTRDMzdFQ0YwRTIKK0MxMTZEMEEyQTJDNkFEQUI1QjA1NDJGODZDRTU0MzZDRjk4OUE4Njk1NjZBREU0RDc2NEU0MjNCRTU4M0FDQjEyNzhDN0VEMzYyQzAyMworRjhBQzQ4NTUyOTAwNkExODkzREQ1QTk4RDA1MDU2NTU0M0VENkE0RjNCMDMwOTJFMjdFODkxMzc2NUU1REVDMUZGRkJBODA5ODIzNDBECitBQUFEQ0E3QTk1QTI0RUI1RjM5MkRBOTlGRTNFNkMzNDk0OERENENCQzQ2OUJGMkI1M0E1MEYxNjJEMDU5NjNENzNFNzlFQzg4QTlEOTQKKzA1MjA5OTQzMTc5M0NGOEEwQ0NBRUE1Qzk1QjE3NDYwNjE2QTEzOTI3NTMyMDQzQkU5RkE3OUZFMDIzMUQ1N0ZFODYxRkMwRDMyREY5MAorRTlGM0VBNUQwMjhFMDYyODE2MThFOTg0QTE2OUY1MDA2NzU2MzQxQzFCMkNDQjlCQjVDNkNCRDJFREY3MUE1MjQ0RUU2NDZEQkVDRDI2CiswRjU0N0I4Q0YwM0YyNjg5RUI3RkFERTU2RDM2NDNBQjhEQzdCODlBNTE5NDQxOTgxOEZCNjdERDVDNjZFNzg2NkVCQjAxMkMzNjVFMjcKK0JENEJFRjRBNkZBOEFCRTQyOUJFRTM4NzE1QUYzNUFBM0YyNzUxRTBGRDk4MERDRjZBRjk0QThDRDZBNzY5NEI2RkE3MUYyRkMyRkU2MQorODc4ODREMDI5RUE3QkI5NTFFQzFGRUMzNkMxMDAzOTU5NDNDOEEwNDBFNUYxMzI1RUY4RUI2NjhCMDg5OTlGMDQzMUMyQjM2NzYxRkZBCitGNkUyMTc5MEU1MTExMzUyNkI5MkRGNzZBQjIyQjk3NjFCMTFBMEE2NjczQzhFMDkzQURCRUZCMUIxOEZCN0NGODBGNDNEMUQzOEYxNzYKKzc4NTk3QjRGNjM5MDc2NEQ2MEExQzc5N0RDMDkyNkREMDFCN0QwOTQ0OEM2NzFGQTVCNTFCOTNBNTg2NDBFRUI2MkU4MEM0RjM4MTBFOQorOUFDOTk5NTBEOEFFMzE4OTE1MkJBMEFDN0Q4RkE4NDMxREZGMUVBM0NENEZEMDdCMjcyQTU2M0U2N0MzRkRDMzE4OEJENjIxQkNGMEJFCis0MEFFRTE5MkEwMkJBNUVDMzZDNUE0NUUxRTE2MDk3RjQyODRCNzRBRkNEODY5MEIyNEVEOEMxNEQyNUM3RURBN0NCNjM5MDQzQTIzMTcKKzhBNTgwOTQ3MzNGRTczODg3RjdGQkJDOTk1MTUwQjZFNTRGNUNBREU2NTMzOEExMkEwRjM4MjQ5ODRGNUIxNkFBMENCREZGMzMwQTQwOAorNzExNkVGQzE3OUREMDNDREZDMjMxMkVGNDlGQ0Q1MDE3MzI4NzVBOTYxREZBNzVERjJBRkVDMDcxMUREOEEyMTVDNjlCOUVGREUwOTVFCitCMDMyNjFDNjNDODhCNkM2NkMzREJFREEyMjIzNDIwNzEzMTkyRkMzOEFGMEREOUM0RTQyRjNCQUQ5RTEzMDZBQzg0NzFBRkFCODk1MUMKKzEwQ0MzRkE1MUUwOTZBRjI4RDczRkFDNUNGQUY0MTBGODNFREMwOEY3QUY4NkEyODBBMjMzNjc3NDNGRUNBNzEwNkVFMEQ0NjAyNjFDOQorQUVERTgyNkQzQzFCMTZEQkU0QzBERTBFRkY5Rjc0NENBMjYyNDZERkY5NTBCMEZENkYxNDYwMjUwM0Y1OEE0RjNCNzc2RDk0RTNDRjQ3CitDREEwM0MwNEQzMUU3MUJEMDI4MUMyQTY2RjJEODAyMUE1RUIyNTAwQTcwRDczQjU1NTE5QUFCODdERkQ5NDE0M0E2MjNGQjI1MEQwQ0QKKzMxQjM4RDhFRDJDNUVFNUM1QTc4REIwMjIwQ0M1QTA4MTAwM0Y2OEQ4MzY3RjM1MDExNUZEQjI0RjJBMTkxQUZFODVCOUY4QzlEQTY1NAorODRDM0ZEQzk5NDg4OUY0MkQ1NjE2Mzg0MDRDQUY4OEI4MzFFNjVENkQyNjIzQUE4RTgyQTA1MERBNzI3Rjg4NkVBQTdEQkM0MDEyQUNBCis1MUZCMTVDQzQ4MDE2QUFGOUY4MjAxMkVDQzZCM0E0QjVDOUY2Mjg3OTU4NThEQjcyNUI4Mzk3NzIyNzQ5QzFCRjA2ODI2ODNBOENENkMKKzU1MTg1QTMwQzNBMjE5MTM2Qzg1MzBDQzMyQzhFNTdDRDNGNjY2Nzc1NDlFRjNBOUM1OEIwMzZDMkNFMjFFQTNBRUQ1ODkwMDIzMDE3NgorOEZBMUNGRUUyQTVBRjQxNEEwOUY1REMzQ0E3N0M3MEFDMTU3MjBCQTA4QjVDNDk4QTVDNkY2QzUyMUMzNjQ3NURCNkU3Njc3ODE5Mjk1CitBRUVGOTVFMkZDODkxRTFDNDVDRTcyOUM4QTEwMzJFMDIyMDFDMUUxMTJEQkQ3NEMzMjAzRTJGQkUzODkzMjJEMjY2REMyRUUxNTUxOUQKKzFFN0YwOTA3QzYxNUYyMjg3MzNEMjQyN0I1NUMwRDM3MzVBRjI1QTE1RjBFQjBBN0YzMzc0NzU1NDU0ODY5Q0Y4RDgyNUM5OEI4RUZBMgorNDVBNDRGQTcyNkFDN0ZEQ0NBMUI4NTg1QTZFRTY0ODk3NjQzMTM3QjY1NjhDMEQ2RUM5ODU5MDJDODcwNzgzRjI2MDJENTcwMTc2NTkwCiswRTc5RkM3QkM1QTQwREMyOUU5NkZFNjU1NzVDQzYzREYxRTRGMzk0MjVCMEVDMTBDQzM3MDQ1QTBCNUZBRUQyNDdDMTdFRjkxODA0OTIKKzRDODg4QTM5REFBMUQ4RjI4RjJBNjgyQTlBNTIyRDVCOEFFNjY2OEMwMkU5RTA0RTJGREQ5MzZFMkEwQ0FEMURBQzNDQ0Q2RTM2RjBBQworMUQyNkY5QkIyNTZBN0FCREQwQjUzMkI3QjQ4N0MxQkNCOTNBNjExNDgyMUExRkM4NUVBNkRBRTRGQTg4OUY1NTU2ODBBOUVCODkzQjJCCis4RTYwRjk5NzM0MzgzRUEwNjA1QTQ4QTJCRUEwNzUyRDBDN0E0MkMzNkQwRUMyNTJBNTIyRTU1MzYxQkU0NDA5QkVEQkJDNTUwMDQyODkKK0FDRUZDOEUxMUNDOTg5NjA5NTIxQ0Y4RjU1NjEyRjI1MDMwQzVBMzg4MzQwRkNDQTc5MUYxRTRDMTRGMkFFMzMzMzU4MUIwRDgxOTExQQorQTA2RDIyRTQzQTVDRDU2NEU4MUVGQzA5OEYzRDhEQ0QxMDdEQzg0QjI3QjZDQUFEQkY2Q0VCNzM1NzgzQ0Y0NTM5NDNGNjA4OTc2NjBDCis4MThFMTQ1NzAxN0E1NjUxMkRBRDgwQzY0ODVGNjc0OTcyNEI4M0REREVFRTBEQzU4QTBGRkY5RUM3MUYwRkNDRDkzREU5QjJERjA3MEMKKzc2NkNGMUNEMzA2Mjk2MkNGMUFFMjI5OUVDRDkwOTI0QThEN0M0ODY0MUEwNzY0RDAwMERCQ0ZDQkVBMzIwNURERkY2NDY1QzE0NkVCMgorMkU5OTA3OEVBNkNCNkY2MkQ2ODdCRDczMUU1NkVFNzA4MTU3MDkzNUZCNDNGMzlGRUVFOEY4NkVGOTEwRkYwQjk0NENFQTg3ODk5MEFDCitGNDZDNDg2Qjk3NkQ4REZFODkwNUJBQzZGMkIwMUM2OTU0MTY2RjUwODZDNDQ4MDRDN0ZGNjQwRDY4OTY5N0UxQkY2RUNEMkQ2RkYyMEIKKzFDNjk1Qzk2Qzc4QjkyMzYzMEI4QzIwNjRGNENGNTc0MjQ5QkQ4MTI0OTg1RUNDMEQ3NjJFRDBCRkI1MkUyMDQyRUI5MDAwMTBEQUIxOAorMTM1Mjc0MTA5RkExMDE1NzcxMEZGM0I2OTVGREEwMjExRjJEN0U0Q0Y3RUEzOERCRUQ1ODVGRDRBNUE2RDRGRkY0NjBGQTJDMjJBQjE1CiswNTJENDBFRjYwQTM1RjM2MjY1NjQyNTAyRkQwQzM3QTI2ODEzMDFDODYwODFBNDAxNkU5ODFFM0Y2QTE4NEE1MTMzRjRBMTk2RjM1RDYKKzIzNDQwQ0ZERUE5OUY1OEM1MUE5NzRDMTVBM0E2Qjk2RUZDQTI1RDE3QjAwODFFNjQ0MUFCMkVERkEyNTQ4NTY1QjlFNzE2NDIyOTBCRAorN0MxQTcwNzdEQ0IzNDYxNkE4RkZGMzVFRTRFQUUzNjI3RDJGMURBRjUyMDIzRTE3QjE4NEVFNEY3NEMyQjZGQkE2M0QyMUZBMzQzM0YxCis0NEI1MjE1NjRCODFGQzJCMjBENjQyMzZERTdGRkMwOTc4MzVBQzNGOUUzMjM2MkYwNEUzMDYxREY4OEI2QTk5MDFDMzE4NDBFMzFCQzIKK0M1OTA3MDZCNEI3MzQ0MTY1NDNDM0IyNDc3RTgwREMwRjRGRTk1MTg3QjM2RTVFQkUwMjA3NTM1MEZGRjg2NDg2QzQ4NTQ0M0Q0OERDRAorMUZGNEFGMTg2MjQwMzAxMUVBNjMwQTA0MDM0RTBBMzRBQTdEQ0QxOTI2QTJBNEExQjUxNjBCNzhCMzEzNDQ1MTYxRjBBNUJBNjU2RDBCCis2OUEyNUY5Q0EzMkJBREMyQUIwQTUwNzZENEM2MzU3QzM5MDNBNEQ0NTc0MUQ0NEE1RTQwMDBGODUxMDJGRUZGNDUxMzc1OTVDNDM4QjIKKzhGQzJBNUU1RUMyQTlERjNCNDhCMDhBOTlFQzJFQTcxNURFMjNDMzdBQTYwM0Q5RkM0RkQ3NkFBQjFBMzU4MzI2Mzg3NjU0NEY3QUZDQgorOUI2OTlDQUE1MTc1NUIxQzQ4NzFBODc0NkZGQjYxODMzMzlBRDg1M0MyOENFNzIwN0U3NzJGMzI4NkY4MDE5MDg3OTVCRDhDNzAxMDMwCiswQUYxNTM0NUY1NzQ2ODREODc4MDdBOEQwQkY3QjAxNTAzMEU5MjExNkU1QTA5Q0RCMzE1NDYwQkMzQjU5OEQ1OUVEN0YzQjU1MUMxRjcKK0M5NjE1MkRGRjdCQzhGRDM1NkIyRTM5MUIwQ0I5MjcwRkFGQjk4NkUxMUM4RUEyMzUwQjY3MkJENkFBMzZGMDk2N0Y1N0RGRTk4Q0VCRgorQTlBQkZCQzdCNUQyRUVFRTk5NTM5OTUxNjk5QkY5RURDNUNGMjFCNEU3QzY2QTkyRTFDNDhBMDIyMEE2REUxREMwODQzNUJFOTRCN0VFCis5MkFENkQ0ODIyOTYzRkZGODE1NkU5RURGNTI0MTMyQzE3RkQyMzZFMzU1ODBERDZEODFBMjAxQkY4MEYyRDg5M0M5RDU2QjUzNkY0Q0QKKzJDMDYzQzBBQTczNUNFODQ0MTAxN0I0OTYwMjc1M0I3NzZBMjhCQTUwRTMzNDI2ODFDNjZBODgxQkFFRDQ5NEMzMUQwNjU3MDQ5RTQ3OQorMUMwQjE4RjcxOTBCMUNENEZGQkQwQTA0NUM5NzA0Q0FFQTkyOTJGQkE2QjYyQ0ZBMkU1Rjg2NzRCQjE0QUY4NENCQ0E0MkZGM0RCNUNCCitCNUEzN0YyMDkyNkIxNzA2NjcxMTE2MTYzMDlFMkIwQTQ0OTRBQjJGNjI4QzlGQzBENjI2RjAyQ0M5QUE4OTRDRDJFNkM0RkJFNDA3MjcKKzM3MTY4MDkxQUI5NTM2RTNFRTZEMEQ3M0Y1NTFFMzA1MzhEN0JEN0Y5MTREOUU4MTYwNDRCM0MzN0JCMzdCMjJGMDIyMUFENUY3MTVCNgorRjEyODhEN0U0REYyRkU0REFGNEM2NUQwOTdCMkE3NTdGMEVBOTc1NjVCODQzN0I0MkY4NjZGQ0MxQjZFRkQyRUZERThBRTlEODg4MTRCCis1QkJEQkFCQUFGQjYwNjdGMTM4MkVENUE1OUM4MDNCRTVBOEYzN0REQTE5OTE3N0UxQUQwRUFBNDhFMTI0OTI4OEI2NUQyODFERUIyMUMKKzA1MUZCRUE3MTY1QUU1RUU4REE5QzM1ODk2QjUwMDhBNjgzQzk2QUNCNDFGODkxREFGNkIwN0FCRDhGOENFOEMwQjYwRjAyNDRENEY0NworRkMzMEY4NEFEMDc5Nzk1RTZDOUNEMzVENTI1NUM2MEU4RTBGRjczNkVFNThCQkJBQzAxOURERjM3MDk5MkY5OEQwRTU5NUZBOTJFOTExCis3NjU5Qjc2NjdFQkMxMkQyQjAxMTU4RTc4MjMxRTY4OTM2QUM4MDAzQTFCNjBCMjBBODVFODlGNjI1NDYxMTBFMDlBNzUxNEI0NDdDNzQKKzQ0N0Q2Qzc3MDdGRURBMzYzNkYzQjAwQzQ3MENFMEQ0QTIzMzM2QzU2QkI4QjM1MzJDM0Q3QjlEN0VFNEE5NDY4NERENzhCNzQ2MjYzNAorMUY5NjgzQUQ0RDgwQTM1OEI2ODRGNTIyRTg0OTc1RDEzOTZGMDE2M0E0ODU4RkEyQzE3NTQyMTk3N0U2MkVCNTFFN0E3MzM3NThCNzZDCis2RjM3OEJGMjM1ODYwRTgwOEQ5MDQzM0JGRkRFMDFFRjA5NDgwM0NEQkU1ODUzRDZCN0E0QjMwQTg1RTgzRkVGNUY0MzUzRkMxRjgxNDMKK0UxM0EyNTU2MDAyMTY5Rjg2MDQ5NDQ2RDkyQzU0ODU2RDI1QTkwRjI3MEVGOTYzNjI3QkM3ODkwQTAxNTZDMjFGM0EyQUZCREM0NUJEMAorMEM3QTRCQ0U2QzA0QkJFMTkwMzJDOUNGNzJFMjYzOTVEOUEzMUUzQzVEQkQwNjFDNzEwODI4MzgzMEQ0Q0IwQ0VFN0Q2REVGQzBENjQyCitERTM4MzMzQkI3MjEzMkM5RTk1NkZENThERjRCNDhDNzRCQUU1RDhFOTc2MEFCRUE5NzUyMDk5NEE2Rjk4QzQyQzAxNzYwMDExQjE5QjkKK0UzREM3OTc4OUE5QkU3NTA1MjQ3N0M5NkY3ODFEMzA5QzdDQTQ0OTM5QTNEMEE0NThFRjI1RDU0NzVGOTkzODA0OTJFNTA4Q0MzNkQ0QQorMkJCMUFGODdCOEQ3QjA2Mjc1MEQ4RkMxRjg3Qzc3NEE0Q0Q1RURGQTBBN0EwNEU3RjlGMjczRjkwMzE3RTJCMDE3NEMzOThGM0U1ODNGCiswODVBQjRFNTgyMDA4NDcwMzUyNzQzNTcyQTc2QTZFQUFBMkRFM0QwRkIyNTE3RkFBODMyRUVGMDg3NzIxRDIwOTJGQTQzQzYxNjVEQUIKK0YwOTBGNTlCRjlFMURGMkVBNDcxNzIxMTI4NUI1MUM3Q0VDRjNFREI5OEI0RjQxN0NBMDE1Njg4OEY0QTk1REU2N0I3MzIxOTI1NkVGNQorNEY1NTMwMzhENERCREM2NERGN0I3MDRGMkI4RUE3QTM2RUE1QTQ2NzBFM0ExMkNFNkUyNjg2REI4RUU2NTFDNkY1RjMwODcxODM1MzA0Cis1NENBREEwMzYzMERCQUI0MDdCNDU3MjM4NDZDMzk5QTJFNDdDOUY3RUFDOTVDODZGNEFEMjExOUQ0OUI2MTZEMjgyMDVDQjg4MTdFNDcKKzRBOTFDQ0I1ODYyOUJDOUIyREUwQTE0M0UzRUE3MERFMjQyOUZGODNBMjk3MkFERjRCOENFRTBEQkYwQjIyQkY0N0FBRTY0MzYyN0RBQQorNTY1RkY0NzNDNEYxRjdCREZEOEQzMjBFQ0U0NzIzNTJCRjAzNzE1Mjg1NUZCOTA0NjcwNUQ4MzE5RDc4QzNFOEQwRDZBMDk1NTY1QzRECitBRUIyQzJBNjIxRUY4MTYxNkZFQTQ2Q0Y4QjUxRDBCMjNBOUE0N0E5QjZBNzA0NkVDMkY1MkUxQTlGMUVBNjEyNTc2RTZCMDI2Q0RFMDIKKzlDQjFBMDE2OERERTRBNzI5RERCREI3RDlEREQyNTM1MDBDNjQ0RTBENEQ2ODBGMzdBMDc5MzE5QkRFQkZDOUMyNDdDNjc1RTgyMDJEMgorQjA5NjY5RTNEOTBGNkYyREZDN0M2ODk5RThGQzlFNDgxNjdEMjkxQkE5RDBCMzNCQTBGMUYzMzFBQjY1Nzg3MzRGMkE0RDI3QjlCRTQwCis5M0MxQTEzNTFGOTUwRTk5QTgwNUUyRjE2QzkwMEM2MUI3QTFGQ0IzQjNCNjZGNjZDNUQwNzQwMjE1OUJDREJEMTVGMzBDNTk5MTczMTYKKzI1NUI3N0UwRUJBQTNCNEY4MUQ1QUVENDM4QjMyQkY4MTVDOTQ3NzJGRERBMTIzRUE0QkRGMjkwODE0MjJDQTkzNEE4QkVGQkE5RkFDOQorM0VCQTYxOTQyNjVBQzU5RkJFMEI1QkIzQkIwNTZFOTYwNTVBOTYxRDU2MjlEMENBODhFRTBBNjcyQjk5NDY1NDJDQTFBRTgzRjFCQUQ1CitCRUVDNTczMzZFNDkxRTgwNjdFRjI2MEVCOEJERTYzNEU4MTYzRDJBMjYzQkM4MTU5NjhERjlFQjc3NzA0ODY1MTlDMTMyMDdFM0FEQTAKKzA5QTc1ODAwNTVEN0UwNEZCNzJBRTM2NEZBNTE0NDEyMkNEN0E1MEFBRjE4NzA1NzFBMEE3RjE5QjUyODA1OTU2Qzc4MDYyQjE3RkI3MQorNThBMzE5M0Y3Q0VFQTk2QTE4QTA1RjZBRTJFRDQ4NDgyMEM0MDJCRDBERkRGQUVBNDgyMzhFMzdGNDI4MzcxRkVGNzlBMUI5M0YxRjJCCitCQzAyRjJGREFBMTI2RDg5MDRFNkU0Q0VFRUFERDdGNkVEMDM2QTJFN0QxQjZGNURBN0Y1OThGRENDN0FDN0JCMTc1REVDNDVENEZDREMKKzRBODZFMkUzQTlBNTFEMDBCMzM5NDVEQzdFMzg3NzE1MzJGM0E3NUI5MDE3QUVCRTFGREQ3NDUzNTZFRUI1NEMxQzMxMEVGNkMxQjg1RAorQjBEMDlCMEM2MUJFM0FBQjA4MEI1OEUyNzkzODNEODYyNzk2NjgwMjY4NjI4M0I1MDcxNDMwMjJCQTI4MTE2NUJEOTk1NUM4MzNCMUZDCis2OUEzQTIwNzFBNUY1RDY2NEEyRTdFOURCREM4NUI2NEE0ODY4NEEyREM2RUU5OTEzQjU2MzNBOThGMTlBNTQ2RENBNjcyNzM2MTAxMEYKKzIxN0U2MEFDRDE5NDZEMEQxQTJCMEEzMUE2MTAzRDhFNzQzOEZBRjU1NDM0MTE5MkUyQjMzRkMyMkM1Nzc1NzY4MEIwQzQ0MTQ3QUEwOQorMjdDQjQxRTQ2NEU5NEUwRTBERDhFQkVEMTg3M0Y5RkRDQTMxMkE0QUJGMTQ2NDgyMkRFNUU2Q0E3MjNCOEIyRjNCMjNCNzM2OEIxREEyCitEQURFOEMyQjU4RUY3MUIwNjhCRUJBMzNERUQxQjI3OEQzQjgxRDhBRDQ0REZCQUI3MkQ0QUFEQkNBQzFEMDFGRkE5MDFDQzNGREM1NkQKK0RCRUY0MEJERUM0QkVBQjY0OTE2RjlDRkRGMjFGNUIxMTg0MzNCNjcyQkUzMDgyNjdGMUE4QUFFODVFRjI4MDgzNEZGOEZDNjEzOEEyQworNDE3NzNGQkEzNzYxMjUwQUY3NDRCQTA2ODZCNkJFOERGMzY5NzQ4Q0IyQTMwRUMzMzQ0OEFDQjFBNzA0RDFCQTAxQzIzNjVGQjEyMDdFCis5OERFRkRDQzYxQ0RBNTRCMTIwQTc0MDYxRjhCMzI0NEQxMkY2QjMxQkVGQkUyQUM0NjI5RTZCODAwOUM4MjM5RDQyN0RCMkFDOUNDNUYKKzcwRjU0ODcwRDU4QzI4NkM4RENFMERFODlCNkUyRDBCNjMxOUFEMUExMEQ5MUYxM0M4RkU2MUQ3QTNCMkUxRUExOUUzOEYxMjczM0JGNQorMzczMkI0RjNGQzZBOEUxMkZCMDFDMEYwM0MzOEY2NDVFODFFNjRFMTYzQjRDM0UzREI3QjZERTAzMjFFNzg3MjZDMDc3NUUzQUYwRTY1Cis1NEIwMzdCMzE5MkFCRjFENjg4ODEyQkJCRDRFNjQzMzAxQkZCREZFMjdERTRDOUNFRDhEOUE3MDVDOTRBMjJGNTk5Q0Q0QUI3MkQ1MTIKKzQyM0IzRDQzOTZCNDJDOTAxQzQyQjk1OEM0Njg4MjY3MjQ0OTQ0MEYwQzc4QkIzMzIzNjg2MDc3MEI5NjAwOEQ3ODYzRDM3NEQwNUM3OQorQjIyMUIyMDMyOTA2NDYxM0E3QjdGRTE4MjhFNUE4MEVDNDVDNjRFQjA4NTYzNTc0Rjk5MkI1NjczRTUzNDU2Q0EzRThENEZEQjgxRTE1Cis2QTgzODY5QkE5NUM4QTZFOEVBQjgwNDQzOEVCNUJDNUI2QjczRkQ0OTNFMThFNEM5NUUyMTdCODQ3RTQyMkE5NDdEOUFEQjE0RkYwRDIKKzA2NkY0MzI1QTUwQkEwN0Y2ODgwMkQ4NkQ1MTY1M0IyNjQ4MzJCNEQ2MTAyMTA3RkUwNDk5NEY4REIwNDY0QzM3RjNCMERDODdENDVBRAorRkNCRjk1QjFCQjIwNjIwRjA3QUU0MjBBQTY2RDc1ODVFRTg0QTNBQjczRkM4RjFFNUZBQjNDRjJGRjM4NERBOTY2OURBOTFCMDEzMkQ2Cis5QkNBN0JDMjFFQjdBRkQ4MjkwMkNDRDlGNjQyODQ5QjBBQjYyMEE5MEIzQjU3NTU0QTU3QzE3RUVGNTFBODMxMkY0MjgwMjJENUVCRTAKK0YyM0I1MkMwNkE3QzNGMTdENEJDNTY3MDBDNjcwMUYyRTAwM0JEMTM0M0I0MTZBRTM2Q0JFNkQ2RDA2MkVBQ0FFNDU2OUZENTVCNTlEMQorNTVFQjJFMDgwMUQ4QzgyMTIxMTNBOUJCN0JBNUJGNEFFODlENDM0QjJCODM4QzkxMUQ4NDU0MENBRTFFMkJDOTVERDI4QTI3OEYzNTcwCis0MDREOTFEM0MxOEJFNDY4RTZGNTRCQTZCODRENjMwN0EyREQ1NTg3REFEMjMwQUIyMzgzRTY5NTdFOUFDMUE3NUVDNkRCMDgzNUYyNDgKK0M5RUU0ODAzMThFMUJGQjAwQUIwRUNCQjFGMTYwMzAwRTBCNkIyQzU2MkQxQjg1NkY1NDkyNzVGOThGRTE0ODBCOTQwOUEyNkJCNTVERAorRjVFNjdBRUYxNjI4OEIzRjRDOUZFQTU4NEE4QUE2MTY2NEI3M0JFRTBBNjJBNUQ4QkFCRjE4NDRGOTdGN0FCRkI3M0IzQ0QxOTAyNUY5CitGRTdDMDg5Qjk2MzBCRjU1QzIyREQxNDg0OUZCMzU0MzEyMkNGQjY2OUI1MTUzM0MyOUY3OEU1MUY1M0M0OTRCMjIwMUNENUZERUE0ODgKK0YyNTlDNTRGNzkxMkU3NjUzNjBBMEQxNDNCNTlGNDlCOTM1MDA2MDY2MjA5RDExRkY5Rjk1NDFGMTFBRTRGN0M3MEVDQzRGRjc4RkU4RQorMDIwNUUxRjk3RDkwRkFBQUQ3RDEyRTIzOUMwMDlDQjk3QjFBQTdGNzA3QjdEMDE4RjEyNTYzQ0ZGNjVBQzJGQjE0RDdFQTYzOTAxMDYyCisyRDVFM0QyQTc0Q0I4RUZCQ0EzNERCMjQwRDEwQzlGQzFGMkVEQ0Q0OENFMDk4QUYxRkMwMUMzRkI0OUEyNzk1NzQwNURBODkzMDdBMUUKK0E4NzdFMUQ0QjBBRkM5OENFMDIzNUFDMkMyMUQyRDczQjVEQkFDNjhBMEREMDc5NkFDREE3NkExOTI4NDEyRUVBNTA1M0YxRTJFQzc4QworNjVENDQyNzdDMjU4QTlCMjExRUNCOEEzRDQ5QzM0Qzg5QURBOTk0ODJBREQzRkNGNUFDNzQ5NUFDNDgzRjkyQ0M4MDc0QUY2QjU3OTcyCis2QjQ5N0Q1QTQzN0U3RDM3QjRDQzc5MTNGRTIzMDQ3RDg4NjE1MkMwNDFBRTNCNUQ3MDA2MzY0OUM4QUE3MzM1QUQzQkZDMTA1QjkxNDAKK0M1QzRCRUY3RERBMzE1NkVCODg0MUEwNzA2NEFBMkEwRUE1RTdFNjgyOEE2NkNCMjI4NEE2RDVENDE4OUI2REY5QkU3NDU1NUI4ODFCNgorRjgyNjkxN0IyRDA5REY2MzNGQ0FGQTUyQjZFM0E4QjBFNjcwNjIzQUU4MjVBNzQ2QkI3RUE5RUYzRjUyRUUwNUYwQTdFODcwQTYxNDAxCis5NkQ1MEIwRkUyMDY0MzY3MTRCNzREQzdCMzY3M0Q5MzU2Rjg4NURBQTdGNzlBNzM2NzY5MTJCODQ1NzlGMEY0OTc4RjMyN0NDQkUwNjMKK0QwOUQyMkRCMDEyMjJBRkI0NDM0MDQ1QzkwQTE3RDBCNTI2NjU3OTU4MDcwRjdBNkFCNTU1OTYxREI2RDc4RjQ3OTMzMUUzNzMwNUQ1QQorMjA3MkFFMTk5QzlDMzFCMTJERDYxRDEwRTMxODg5RTZERTVCRkRCQjUxQzkwNTQ4QkY3RjUwMUJEMzNERDMzQjVGNjc5RjhFODQ2MDA3CitCRTA5QzM5MDUwQUFGMDM0NjRBNTdDQTcwRkQwODNFMkVEQzJCQUY1REQzRTBDQjM3NUREM0EyNzgyODk4MjczNTE4RDdBRTA5QjVBRkUKKzI3RjI1NjBGRDc2ODkxMjgyRjdCNjg5MDlDNkZCOUY1NDlBQjlCNEU2NjRDQTI1OUUwNjUyRTY2Q0M1OEMyNTBEMjg1RkQyNTM1NjYwRAorN0M5RjRFRENGRDg3NEY0QUZEQzY3RDFCOTA5RTA1NzZEMTU5REU2OUZCQjREQTMwN0ZFMzdDQ0IwMUU3QjdDNjY4Mjg3MkZBRkZENTkwCisyRjMxQkFDNjhFNjhDQjNBMDNCQjgyNEI1RjM1NjE2RUMwRUI0MzQyN0JFN0IzOTc2OTA2QjZFNzJGOUQ3MEI4RDY5NzU4RDRENEVEMUIKK0Q5QUI0MDVCMEU5RTMyNDAwRUI2QzVFN0ZCMDA2OTk3RDVBQzUyNjVGQjU1NzFERTREMUUzRTMxMjNBNzI1RjM3MTUzQzg3NDQzOTQwNworOEQxNzg2QjlDMjQ2MzM5OTAzREYxODU1NjQ5RkYxQjk3QzkxOUE4MThBM0M5ODZBRUYyOThGMkM5MDFGNDdDNDRFNzI2QkNERDE2QURBCisyREU0NjdGMzQ4RjI3MzM2NDI0MkU4MkU2QzcwMkM3NzFCOEIwNjEyMzgwQkJEQkUyOTc2MEYxOTBFQTdFRjhGMUMyQjk5OTFCNzAxREMKKzJEMTgzOEFBODI4Mjg1NkYzRUZDRUEyNzQ3MThBMzkzQjEyOUM3NjhENTBENzFCNTg0OUVDQTY4Q0IxMzE2RkE2RDFCODNDQTlGRkJBRQorQzQ2ODE3ODM5NjI1OEUwNzczOTNGMEVBNkVGRDIzOUM1NTRBNzIyNTIyOTBFQzFDRUQyNDMwNjJCMUM0MjE0NzMxODVENEUwN0ZGQkE0CisxMUEyQUExNkEwQTY0QUEzNTUwRjk3RDc3OEJEN0ZEQTY5NjJCREEwQkQ5NkYzNTlFQ0VFRERBMzUwNjI0OUZEMDc5NUVBRDFCNEE4RDcKKzY4QkZBMTk4OTU1RjM2MEJEMUY1N0VEOUQ5MzZFMUE3NjVFQjJBMTNGRDczOTI4NzREMUFGQjQ2MTYwMEQwNzdCRUE4MzE3NUY3QkM0RAorNzMyMzM0Q0U2RjBDODU1NjQxNEMzNUUzQThGMjYyNkVDRDg1MjM5OURGQjc4MzUyMEY5MTgwNzgyMkYzNEJGMUM5OUFDNUE4OTU5NEU1Cis1Q0UyNUNBNDdEOUFCNDExRDc0QzQ4OTg0MkM4NTEwOUMxMkFCMjVCMDEwNUY2RDgxNkNEOTYzQUI1MzIzMjNGOTIzOUNCMzg2MUJBMjIKK0IxMTEzOUYzNUE0RTlCODQzRDJEOUI4MzJEQzgxQ0VCQkIwNjQwNUIwRjZGMTk4MzJFOTdFQkQ1NkI1ODczOUM4M0QyQjAxNUNFRDI3OQorMjc2QzlFQUMwQzFEOTJCMTA5ODZBQ0I0MTBBNDZEMEMzQkQxNkIzNEI0QTQ4QzhFMkQ1RTQ3NDYxOTU5REIwM0QwRjJENzZBMzc1NTM1CitBRTg4MThFQUVERUMxRUVBRDE4MUIxOTMwQzU4Mjg3NTFGRDEwMDJBMTgwODdBMDNEMjg3NEUyMEVCN0M0OUEwMjkwMUM5Mjk3M0MyMzUKKzA5MDFEQkQ3RjI5NjVCQjE3RUQ3OEYzQ0QxMjU2OEFGMTVCRjA0QzlEMzY2MzgwREMzQzE4NEE5N0U0QTcyRTlGOENDMDJDRkI3RUU3RgorNDk1NkNBOTI5QTZFMzJBQTJCMjgwN0FGMzcyODk0QUYyRTlDMzdBMzcyRjUxRDlFNDVFNjg2MDFGRjZGMDY1MjQyMTBGMDU2N0I3NzlDCis5NzY2MThBMzBCNTlEMjY5QjgwODc0MUREQTdCMDAzNjU5MDcyMzc0NjkxMTAxRDNEMDlENTA1QzYwQUNCQUY3QzEyMkJGOEZENkVBRDUKKzczMjhFNjBCNjkxNjgwODA3MTlCNkRCRkJFNjVBMzFDMjdGQTNDNDU2RjNDRkY0QkVDRDZCMzIwNDhDQjIwQkU0NzdCRkQzMzcxQTAxNAorMEMyMkFFRkU5QjEzQjBDNzE4OUFCRkI0MzY5OUU0M0U1QjJENEFENzMxNjAxMkY3NTlFRTZDRDQ5ODI4NEM4MUFBNUFCQTgxOUNGOUY0CitDODMzQzdGNjJCMkFFNzc5NEZFODg4RjBDRTBGMEQ3RkEyMUE2QzZBOENEQjFBQUQ4MDJGRTZEODU3NzdBREI2REMxQ0M5NTU4N0YyRkQKK0E4NEFDMjY1QTE4NDlGNjY4NzNGMTRCRTg0NzUzQzQ5OTU2MjU3OUYyMzYxNzUxRkI3QUM4MDkxMDdGMDJDRDNEOTUzRTQ3RUVGRUVERAorMzgxNzhGREE5MEEyRkQwMUI3RkFFNTIzOTVCOTcwQUI3QjRGOTIzMTc1RkFFMjk4MjhDRkREODI0RTIxQ0U5RkNDQkRCOURGOTg0QjFCCitGNjQwRDg5OTVDMUQzMkRDNjVBRjI4QTg5OUM1RTk3QjgyODg4NTcwNEU2OEEwRUFGNjA1ODE5MUMxRjZEN0M2Njg3RjIwMTlERThBNEYKK0I1RjY1QTA0NjlCRDgyM0U3N0U2RUY2REYxNzc1MTdBQzc3NERGRTU2ODkyM0M0NzRDOUU3QzVGQ0VBQTdFQzEyNDE5NjAwOTNBREM5RgorM0VDRUZBN0IzMzQ0RjVFMDY0QjhGRjAyM0U5RTFEQzE4NTY2Q0IxRkY5NjBERkJFNDcwRjQyMjIyMTBDNUE0MUVDM0U4RDRDNTZDRjlDCitCOTlFNjhDRkIwQTI2RDlENjk4REJCRTk1RDQwN0ZCQzc3RjlBQjNFMzNCOTREREQyMjk5Q0JFNDBCMEYyMDg2NzJBQUZCQzM2QUJGMDcKK0YzOUVDRUVDRTNBMkFFMEVEQTM0QTc4Q0IzODk5MzY2OEI2MDkwOUZGMUE5RkIxMEVFNzQxNkQ5QTE2QTc3MTFCNzZCN0JBMDNEMDEwRAorQUUwNDU4MUZFMDFBMzc5NTM2RTRBN0M5MTNCNzQxRThBNjEzNUI2Mzk4MzAwQjIyQjhFMDdEM0IxNEE5M0JBNzYxOTVBQzAzQTFFQjFGCitFMEZFMURDQ0NEMDQ4RDE2Mjk0RjM2NTE3OEZBODUzQkY3NkU3QjkyMjA3REYyN0E0RDFFRTU4NzNDOUE0MEVCQjQyRTE4Q0I3REU4MTIKKzFCQTU0QTQ3OUVDOTZBNzI3RUU1ODFERTU1RjQ2RjUzNkNEOTQ3RkVENzA2QjBDMkNCQ0IyRUQ0QzIzOTlGQzhENEI2NDlDQTVDQjhERAorNkIzRDhBRDY0RDZCQjM5NUQ5NDVFMTMzRTI0QkE1NzM3N0U0QjgyQjc3QzcyOUFDN0Q1RUU5MTUzQjJFMEMxQUY0MDE0Q0RBODY0NzZGCitFQUYxRTU2QjdEODY0MjE4MTQwNzE4ODZFRTMwREQ4RTZFRjNGMzFCMEIxNzkzNjdGNzQ1QTUyOTFDQzYzMDBBNTM1RTgyOTEyRTg0QjUKKzI3QTI4M0REMTM2M0M4RDZCNTJDQjJGQzJGRUU1OUQ5NTA5Mzk1QTM4QTQ2RjIzNUExQjQzMzg0M0E4N0MyRjA3QTY2QkMxMjAwNjZBRQorQ0Q2QkMwOTM2ODA2MDUxMDAxQkVFRDFBMTM1OUU2MjZENzdBOTc4MjQxMjE5N0RFMTcyQkEyM0QwNzFFOTMwRDEzRTBEQkNGNTlDM0U2Cis3OTY3ODI5RjZDOTBCNTAwRDJENzZBRTNGQjVFNkM5MjQwRUVFODhBRkRFNUYyQ0NCMDRCMDM2QjdDOUZBQUY2NzlFNjVDOENDN0MwMTMKKzMzOUI1NkJFMjg1RDVGOTg1NDA4REFDMDJBRUYxMEE4NjVFRDFGRDM0Q0ZDMDNGMDg3QzE3NTUwOUIyRUVGQjM3NDRDNTgwQjMxQjA5NworMzI4RjM2MEU5OUE0ODBGQkQ3QTg3N0REQkU3NThFNjU3NDlBNzUzRUQ4ODAxRjY0NTA0ODhCQjgwQzUzMDNCMDUwMTFFRjVDNjgyMEY1CiswMDhCNzFEQTNFNjI3NjFCNTU5ODQzQzU5QUJCN0U5NUU0MTM2ODhDNDA5MDM1MzhGNDUyNDMwQjY1QkMxQjlDRkRDNzcwNTFCQUFFNjAKKzlDNDEzRTAzNzBFNjRCNTdDNTlFN0UwMkI3QjA3NzY4REE4NDMyNjIyMUM2MUU4QURDMEI4RjdFM0IzRjAyODk3MzMwRjgzOTdCQTMxOQorOTRBMDc1MTE5OTk5ODkzNTA1RjVCNjY1QTkzNDk4RTk4Qzc4RUZBOEFCN0IyNjdCOTlDN0UwNzBDRTJEMjY5MjkwNTI0OThCRTMzNkJDCitFRTdBODFGRDQ0ODU3MkUzMDJEMTc3OUI0MTNBOEFBQUZDMUQwMDU0NjFFM0RENjNCNjRFRDY5NENFQTgyQ0E5NjE4NDIxRkY0NjVCODQKKzY5NzM5QTVGMkJERDJGODBGRENDNjRBMkE2Qjc3QjE2NEU4RjA0OTBBM0ZFNzE5Nzk3MUMwRTI3QkQxNDU5QzdDQjc1NkI1QTM0NjBEQgorRjkxNEM4NzM2RDdGRDc0QTQzNzE3NDFGNjcwODQwQzdDMTU0RDcwRUJBQkIyQjA0MERDODY0NDgzQ0JBMUFFOEI2MzBGMzg2OTlCRThDCiswMzE2QkY1RTI1RTgxQUNFNjQ4MkIwODRFNzBGMDAwRDYxMjFGMjgwNDM3RUEwRTQzQjNGMTRCNTA1MkE2MUJGMDZDMzk3NEU3NTNGRjcKKzU1N0UxMUY3MEQ3MEZFMjk2NTIzOEFGMTVERTNBNEE5Njg0MjcxMzU4RTgxMzQ3QUNERTgyNDQ4MEQ1MTAwNjIxMTg0MDY2MUQ0OEUwQgorNzU4NjYyMDg2QzU2ODgwNjVBN0M1QzAzMjE3MTI0MDczNDk1RTNFN0ZFRDcyMzgzRkNCOEFBMjQ2RjI5NzM5RDNBODNEQUFGOENCOTY0CitBMDIzREZEMTMxRjAyMjEyM0JGQ0M3ODJDQzIzN0NEN0M4QzA2MTFBRTFEOEZEOENDMTUyMTFGQUVFMTNENjk0ODdGOTk2OTVGQzMyRkEKKzJEMkQwRUVGQTM2NzFGNThCRTVBMTA1MTdGNzg3RkZCQTA1MEI5NDEwRDBERTRFNEFDMkY2NzFBMjNGMUEzNzMwRjlFNTNDRTFGMDczRgorRjZEODI0RkQ0Qjc0MkI4NTA5Q0VDNzNBOEJDM0Q3OTAxOTgxRTVDNDYwNkU1REYzMUNDNDIwODIzNUZBMEIwRUQ3ODREMUI0NzE3MkY1CitCOEJFMUFFNDYwRkUxNDVGM0RBRDI4MzUxNjFDMjk2OTREMDg3NDg3REI3QTIzRjgxQTIxODYyNjA5RTc1NjdDRDkyMkJDNDM5MEVCMUEKKzY5OEYwNzE5QUI2NkVBMDAxRTg4Rjk3MTc3NjUxNjRGRjU4MkU3NUI5MzRDRjY2RUJDMTkyMUEwMERGRTY1Mjk0MDUwMEM0QzU4Qjg5RAorQjZBMzQ4NUFEODA3QjkwNTM0MjQ5NjY4MzM4NDdCOUQ5QkIzMDk1MzBBODFFMUVBODE4MDI1M0UxMDhFODRFRTcwRkZGRTgxODgwODcwCitFRjY5OTA4REY5MkE0ODAzMEJGNjI0MDMwNjc0OTRDMDlEOThBODk2MjQwRTg0OEUzREM0MDhGQzQ1RDIzNzY3OUY4QzcxNUJFOUMwMzEKKzMxN0RCODhBOEMxRTM5ODU1ODBCRUU0QjlDMUQyMDk0Q0JCNjJGRTZBNUQ2QzVBMzdDMzhGODBBNDEwRDI2N0QyRDBCRDUwMkY2MUM4OQorRTkzN0M2N0YxNDJBRTg3RkRCMTM1M0NERjI5MTA2RjQzMkY5REEyNDEwRjY5QkMxQjJBOUYyRjZFNTZGM0JFRDJDMzdCQUFDNEE5NUJFCis3NzQ2QTk4QkQ5QURGM0Y0MkU4MUI3N0M3MkFCQTczOTE5NUExODg1MjE0NTk2NEExOEVFRTI0MkYxREI4NThGQjk3OEFFRERFREI1QTAKK0M3MzVGMTI3RTZGMjZCNDE0NjcyRDcyN0ZEMDE3NTREMUY0RTZGMUY3NjNGNkYxNDM4MEQ4M0JGMDFCRkM0RTUyNUE1MTA1NzlDNUFCNworMzA0MEY3RUZCMUJBN0UwQUYxMUQ4MTQ4M0UyOTVDNDY3RjU3NjAwRDlDRUIxQzkwMzY1MTNBNTFERDJEMjNGRTVCNDYxQjlBNjExOEY2Cis4QjUwNkJERDEzNTdGRERCMjU0RENCRDJGMjg4QjRERTg5QzMwNUUwMkI2NTRFRjExQUEwQThERTUyOUIwOTNCREY3NUJCRjQ5NUE1NzQKK0ZFMjI3M0M5ODAzNkUzRDk5MDk1NkMzRkI4MzJEOEE1MkU4NDg2NDVGMUYzNzAzQTkwN0JERkU1MjJBMEU0MEE0NkY2MkM2NjFDMEI3NQorRTkyNjZDOURBREQ4MTFFQzhFRDZENjc1MUYxREZFNEUzMjdDRENCMEIzOTYyQzZBMkI2RDVBQTc4MEEwRkRFODE5QzE4NzAxMTFGNzg4CiswMThERDUzRjFBNzcyOEI0MzBFQUYxRDk1OUIzRTFBNTFBRjI2Q0NGRDI2RUFFOUM0MDgzQUFBQjI4M0QxQkRGOTREQkZFMTcyNTVCNTMKKzJFQUFGRTFBMEI5RkI5NTM1QzNBNzYxMkNFRDgxODY4NTQ0N0QwNEFEOTgzQzI5OUJFMEZGMTAxMjFDQjE2NzI0NEFGODMzQkZBODRBNQorNTg1MzcxOEQ3NUZENTFGODNFRUJCOTk4NDA3MDE1NzlDODU2NTU4OEMwRkI0MjkxQjlCNUNEREYxOUFGN0IxQzY3OTNENzRCMERDODBFCis0NjhBQjM1NjcxNTI2NTA1NTA1MEY0QUI1NTU2N0M2OUJBRkREN0U2MTdFOTM1QkY2NjgyRjlFMkM0Q0MyNDMyNDRDQzI0NzI2NzAxNzQKKzZCQTNFNzQzQTk2MDNDNDMwOTVCQjhFNkQ5ODYwMDcxN0Q0NTJDNURBREIyMzcwMzY4ODlDOTc3OEY3QkI4QkIxNkQ2QzI3QjlEODQ0NworOEU2OTA1QjUxN0JCRjYyNzQ1NUNDMjFBNTI0NTJENEQ5N0JDRTRDQzM4OTkyMkRFRDFFOTUwQzY2RjgzM0NBMUVDNEIxMzVDQTUwNEExCitGMTIwOTk1MzM4RDBDM0E5QTgxQkZDODFENjNGRjlFNkM1M0U0RUY2QTA3QzUxMTIxNEY1RTREN0JCOURENjAzMjQ1NDU0MkFCNjQ5RjcKKzZGRjFEQTM4RkZGOThGOUQxMDRGNUUwMzhDMjA3NEMyQzREOTcyQ0Y4NEQ4MTNDNUQ1MTM2QUZEMjA0RDEwQ0JGMkI1ODY1MDQwQzAzQgorMTg4OUFERkQwMEM4QUUzNjEyNTQ4NTY0NzZCODFGRjg3MDRDOTRENkVEQ0U3RTlDNjQ0QUQ2OTc5MUQ1MTk3OEYxRTE4RjdENDNGMzIwCiswMEY2MUIwNjgzNTIzM0Y5RUM3M0FBMUVGQkIxMzQ1ODNDMEIyREUzOTgzN0E1QTNCNjUyODI5Q0UzRTNDNEZDMjlDMTdDMzc5MjU2NTgKK0NBRUVGNTNENTk3QzY3NUU2MDlDMTlDQjU5QTA1MjI0RjQ3Qzc3RDc5OUE3RUM1QkUwRjhFRTk0MjcxQUI0RTBCMkM1NTczN0ZFNUUzNQorNjkyN0RGQUYyRTc5RjgxNUMyRkNCOThDMTk0RjI3NjEyNjg0RTRDMzM1QjhBOTVGRDc5RUE5QTVDNTlGQ0I3NjFBMEQ4NUMzRDFGRTI0CisxODYzRkFEQ0I3QjgzMkZGRjlCM0I4OTJBMUVFMUYwMEJDQkI1MjQyMDM1RTQwRDY3OEY4NTUyQUI0NjEwNTM3MEI1RERDNDlEMzBGRjEKK0UzOEMzODc4MTAyNDk5RUE5Nzg5QTVFMTc2NzAxMTdDRDQ0NDhFNUEwNERBNjhFNjY3MDVDMUI1RUZDNzRCNTBBQjU1NjcwMDgzNDI1NQorMjkwMjlDQTA3RDY0NUJFRjMwQTBCMTRFMTczOThENUJGNEZFOTBBODE5RUEwMEIwN0ZCREM4NDU0RjkwMjIwMzg2Nzk5Qzg5RDNGNTU2CitCRDZCMERGMzFDRTdFQjZENjM3QkFDNUVDRUY0MkQ0Q0JFNDM3Q0E4QzNFOTc1MENGRDU5N0NENUE2NjExOUFFNDVERTM0MTg3MDJFQjQKKzdDRDdFQ0M5MDBFMjE4M0UwRDNDOUMxMzlCOEE3NTUxQjlENUJEQkI0QUIxN0VFRDc2NUQxQ0FCRkE0QjNGNTEzNDM3OEIzMEZERjY5NgorRkUwNjBCNkQ4MjNBN0Y2RDM1Qjg2NjUyNzYxMEIyOUI1RTY5RDU3MTFGQzgzNEUyQzYwQzExODU3ODg4RUJFMkFBOURDREI5ODVBRDVFCis0NDAwN0FFQjg5RTExREEwOEY2NjZCMDQ5NEFCQkVFNEMwMzQ4NjkyQTZBOTkwMkJCN0U0RDE0NzRFNDhBNDEwOTI4RDIxNTU5ODY5NjgKKzJCNDhCQUFDMTAwOTBGMkY4NTg1RDQ2QkIxMzYxMjIyMDI0MTc2Mzc2NjQzM0E3RjIzNTk5QTQ2MkM1RTM5QUVCOERCNzEyOTlEQzhFRgorQTI2OEVFM0IwQjhBNTIyQjVBMDg2MTk0ODNBQUQ2QTA0Q0YxMDdFMjY4REE2NzUxQUIwNDk1NDI0MUNBQjg3RjY3OUZDQjA0MTQwRDFBCis3QjRFNkVCNkE3NUI3NjUyNUE4NkExRTUyN0NFNTZDNTQ2RTZERTNGNkM0MkMxNzE1MzdDOEM4NkIwNDZBRkEzMzhBQTlBNzZDOTdGQjEKK0U3QkZCMTYxRkE1N0VFMzhCM0E3NUMyM0ZEQzRCNDlCQkEzQzM0RTM0OTBBMEEwNDBFNTU2OUUyNDU2QUU0MEQyODk0Njc4NDQwOEU2RgorMUM3NUQ4QkY4MTMxOUUzRDNBOTQ2QjI4NjdFODg0QjU4RENDOTdGODQ2Njc0QUM5M0YyNTcwMTI2NDgwQTA5MzJEMUNDM0RDQjk0RUM2CitFOTFBRTFEQzRDNDQyQTU2QjE1QkZDMEIyMkFFNUU4NkE0MDNDQjhBMkU3RUFBQUM5OTZEQThGOERBNUY3RDE0NTgzMEMwNkE3QjUwRTkKKzkxM0E4REFGNjNENTk2ODcxQzIzMkVCQUFCRkQ2Q0JBRkM5QURCRURFRDhDNzY2MkVCMzlCRDMwNkE5RTM4QzlDRjlGNzFGRDcxOEZBRQorRDg4QjQ0MDlFNjRBRkY3QjZFMDdFQUQ4MUQzQTUwNzEyMTkzRjlDQzIzNDMwM0M1NUNGREZGQjBBM0E3ODI5OTQyQzRGQzU1QTg5Njk3Cis3OTk2MUFDNTNDRjFGQjI1NjZBODUxMEFEODEwOTg5RDZDRjkwNjdBNEQ3MkIyMEMwRUIxRThGNDQwMzk0QjcxQTA4M0Y4NjRERUEyQjAKKzQ3NkI4MDc0NTlBRUI3N0QwREM2ODQ1NEYyMjZEMDRDM0Q0QkVFNTRDOUQxRjdGOTAxM0E4QUUwMUUzNzQzNUNCOTA0NzJGMzU3ODZFNgorNEZCQjA3NzFCREIyRkNFMEFEMDU3RjkwN0RFREYxOEE5RDg3MDZBNDhBMjg4RDgyQTQyMUQxMjZEQjQyMTExQzdCQ0EyMzMzQzdCQTkxCiswRjc5QjY3M0FDMjdEQzJCMUMwNDUyNjIxRjBCQzhFQUY4OEM3RURERUU4RUE4OEEzMUIzQkQ3QUU1MDlENjg5NTkxMDJFOUZGM0NGQTMKK0NGRTgxQkVEQkNDREE2QTc0MkMzMTA3RDU3RkRDOTNENEVGQjMyOEM4MEE1RjY1MkI0QzVCNjA3QTdEMzY4NURBNUZERDU0RjJGMEQyNgorRjJCM0Q3MTk4NThFM0U5MDJCN0ZCNDlFMDZCMUI1REM3QTNBM0MyQ0U1RERDNDcxODE2QzczOUFGRThDNUE2MTdGNkExMDlENkQ0MTJBCisyOTlCNzhBRjk5NzA3QTY2RDU4RUM0MDYxNTVCRjlFMTM0MEIwQ0RDN0VDRkI0RkYxQUQzREIwQTBEMDUxOUZCQjVFQzY1MTNGOTgwMTEKK0RFMEMzN0M2NUU5N0NCN0NDNkQ2OEMyMjRCMUQ0QUQ5NkVBOTcxMjcwQkM5QzIzMDZEMEZCRDYxRjU3OURCMzE4Mjg5RURDQ0I2NTMwQworMzY4MzRCMzk2MERGMzhCQ0QwQjdGNzIzOUU4NEEwQTY0RUM2NEMxQzZDQ0MwODdBQjY4NTg3MDg2ODdDOEQwMDgzMTY4NjM5MTczMDZBCis5RUNGQkJGNzI2MUZDQUU3N0UxMEFBMTgxMTJFRjNDNDYzQ0Q4NkE2QjhDQ0JGRjlFNDk3Qzk0RDE0MkY0NDQxQ0QzMERGMDc3N0ExMTUKKzZFMzk2RUUwNTRCMEMzMDAyMUYzREQ5QjVDREFFQzY3NTY0MjY0RjNBQTJGMTJBNTkwMEY4REFEODU1NDJFQUUwMzQ0QjA4NkE2RjE3RAorMjhDMjNGRDlDQTJGRkIwRTc0N0I4RjdCNDdBRTk5NDY5RTVBRTg5QkM4RDNBRjgwNkMzN0QzRUJFRTc5ODI4Q0VGMjYyMjkzNjUwMzcyCis4M0M5NjQyOEIxQTQ2ODY1M0MxRUM5NkEzMUZERTI3OTY4MTM3MUMyNjNBQjVBMThGMEVBODZFNDcxMTFFRjA3MkM3MkFFQ0FDMjU4NDEKKzNGRDhFODI4RjVDQTM4Q0MzRkZGQjg0NzE0OEM2OERDQ0E5MDUxQ0NDNUE5NzFDODNGMzA5ODdCODc0QzY2NDI0RkI5MTBCNTU4ODE5NgorMjY3MTk2MEE3QTk1QTBENTM1RDAwNzk4MEE1NkU1QUIyQTJDRDA1RTk5NEIyQzcxNTU2RjM4OTY0MTYxRDQ5NjUyNzVFNjcxMjMzOEM2CisxNEQ0ODQ2RkQ4NkJGRkFCN0FFOEQyQkUxQzU4QzI1OUQ0NkY3Q0Q0N0RCMzMxMzVCMzdFMkNGRkE3NTdDOTc2Rjg2MTdCNkJCMDA3QjQKK0VDMzlCMjc3OTU4NjE2REFEMTNDMEM5RkVGRjg4RjRCMEFFMURBRjg3N0Q3MTA4MTQ3NERGQTQ4RjZGMjU3NzM0MEE4NUVGNzFDNENENgorODY2NUQzNTUyMjlFODRFMzA4RDc2MjI0M0JDMEVEMzg1RjE4QUMxNEVCNjZGRDMxQUI2RjI0RkQ3NTYwOUYzODlCMDdDMDJGQUEyRjM3Cis2QTg4OTdDMjg2OUYwQjRDRjE2MDdERTM4RkQ0MUNGRjE3MUIwRDRCMzlDRTJBMjhCMkMzOTVBN0ZDRTNFMDRGMEQ3QUU2RjBCQjVEMjMKKzlFNjIwRERFNzlCMkNGRDVCRENCNTU0MEJCRjNEMkY3QzVBQkIxRjRDMzc2REIyRDE2QkU4MjNERUM0OEY2NEJGOTI4RUI4OUYxREZGQgorMjI4NDVCRjk3NzQwQzAxRDU2QjMyMTMxMkYyNkNFODkwQ0ZGODk4NUQxNjNGNDA2MjY4QUU0MzE4QjEwMzEyNTA4OTMxOTI4N0ZCMTkyCiszRjlGQUE4NzdEQzNFRDg2Mzg2MUFEQ0ZDREFFNzYxOEZBRkZBQjM1ODExMURFODQyMEE1QjZFNTlDRTZBMUI0ODdBNUVEQjI4RkE4MTMKKzZGQzU3MzA3N0I4RjM2RkIwMDE3RTMxMTlCNTYwMjNCMkUwRTBGMjhGNDQyM0MxMUEyNjRCOUJFQTVFNjQ0NkFGN0U5MDk5QjE0RkVDRAorQjI5QTBGODg4NEE4ODI4MDg3QTYwQ0ZCNjlGQkY2MzM0QzVDNkU5RDc1NEVERDQwM0JGRTAwNzU5NjFBRkY2RTk3NDVBMDQ3RjY3MTBFCis0RDk0RTJDNDMzMThFNkVEMEFBNjgwQjcwN0M3Njg1ODhBNjcxNjY2MENCNjYzNTJDOEY2RTRCODAwOUJCNzYxNjExRDc1NUU3MjIzNEIKKzQ1QkQzNUQ4NEY1NzU1OTQ0MUE1NzEzOTk4MzBDRTQ4NTAwOEMyQ0QzNUMyRjUwQkUzOERFNzQ0M0ZFMTg2Mjc1NkU2NTc3NjI2RTEzRgorMzhCMENGQjVFOTA0QzZBNTExN0UzNkE3QUVBNDFBMEJEQUNDMjVCMERDQTYxMzgxQUFFMTM1OUE5OEQzOThCOEMwNEVEMzA2MEY5RTY5CitBODE2NDBCRUU2RDJEOTdDMzAwMzA2OUI3NjNDMUEwMjRGNDc2QzgyMTU1NzY3NjNGNEM4RUE2MUQ1MTgyQUEzRTM0QjAzRTgxNEM4QUEKKzE4QTk1MEMwRjlGNUU3MjEyQkIwODIzQTY5NzcwOURBNjQzM0U5RTBGQzhEODZGRkJDRTk0RDhCMEUyNDlBNjA1RTRGM0IzOEZDMDQ5RgorQkJGNDAwRTlBMzIwRUNCRTEyN0FDNTBDQUE5RkIxRjVBQzEyMDdBOUU2RTdCRjQ0REM5NEQwMDg3MDlFNjk2NzExQjg3RUY3NDVFMTdBCis4RDVCMzg2MTFEODNFNUUyNkQ4NzIwRUVERjRBRDY0NTVFODc5NDMyNkUzRENDQjA0MTY3OTM1Q0I3Mzk4NEM3MkRDRDAzNkIyNDE5MEYKKzJCNEZBNjg5NkUwMUIwMTc3N0RDNjAzMkM3MDE3MTMyODI5RkU5QjM3MEM0OUMyNTYyMDYwMEE5OTlGODdGMUE3Qzc3OTBEMDQ3RDk2MAorNEVDN0EwNzQ2QkZEMEQ4NUUwMkE2MjZEMTUxMzA5MjE2OTlBMzNFRDM5RDE4NjM0RjU2RkM4MTQwMkU1ODlFNjY0NEQ2MDU0MTJFNTNBCitGQjM2NkQ1QTk5NzdFMjIwNEZGN0RDOTQ5RkI3NTg3RTc2OTUwRjAxMjdDRUZGOEYzQ0FEQUNENjdEM0QzQjQ0MzBFMzc1RTgwRjNFMTcKKzlDMzFFNjlEMzNGMjAzNEQ2MkNFRjk3MTEyQTIyMzBBNEVBQURDQTM2QzcxNTdDNDg5NDI0NUM2RDYwNzUzQUFBQ0VBNjE0OUY1NjQ2RAorQkVBNkRGNTc5MThFM0NFMjBBMTg0RDY1QzIyRUYzN0U2QzFDN0I2MTg0NTc0M0NGOEM1MkRFNDJEMTIxNkMyMjg3MEMwRTdBQTJGNUMxCis4MUY3QTE1RERDNTcwMjBBMzBBRkY4RDRGNjQ2MkIzOERBN0U3MkMxRTI5MDIxRjAyNzcyMzVGOEExOTkwODlCNTM2NUU3RTY3RTVCMEEKKzNGQTZDMjIwOTFCQTBFOTZFQ0Y0OUQ3MTYxRDEzNEI3RkQxNzAxMzUwRkJCMkY5OUI1NEE1MUI0MThCNTY3QjU2NDdEN0Y5QUQ3QjRFRQorNURENjcwREY4NDY5RkMxODc3NEU4QUI0RDZFRjRCNEY1NzUxQ0YwMTIyMEFGQTVDM0RFRkE1Q0ZDQzI5RjdDMTgxQjY2N0ZCOUM4NjMyCis1QkY0QkFDMTBBRjIzOEFCMkQyQTc0NEE1MDk0MjdGNjU0RjlCODVGQzkwOEZEREE2MEIzMUNDOTJFODM3QTc4RDM4Njg0Qzg0REYzOEIKK0YwMTQ0MzBCQzQ5QTMwNDQ1N0IyRTdEOUI3MzlCMDkwMkQ2QkVBMDQ5MkQ2QzE0M0I3RENCNDYyQkRBN0RGMEM1NEMzQzc2QTUyRTM1NQorNEYzQTE3NDk2NTZEMTUyMDEyMTk0ODEwMkFERTYwNUU2NTk3OTM2RDdDQ0NBNTFBQjdEODBBNERBQUEwOTk5MkI5MDVBNDkxMDk5QUM3CisxMjBGRURBODhDQTU2MUExOTlDQUYzRUNENkFFQzdCOTk5OTRBODQxNkVFRkJCRjlBMUJEQ0VDNjcxQTZCM0ZGOERFQzU5QzlERkQ3OTUKK0REQjI0OTI0N0I5MThCRTYzN0EyMDRDMjc1RDQzREI1NTA2RUU4REM3ODc1MjVCM0U2NzlDQ0NEM0VENDNCNTgwOTYyODFFMkJBQjM1OAorQzUzMDM0NjVFNDZEQkVGNjk3QjVERDMzRUY4QTY0OERENzA1MzIzNEE1M0IxNzk1MzlDNDU1RUI5RTFBMTdCNzJGNzA3RkUzMENCOTVECiswQzI4OTExRjg2NDMzODlDQzY5OTVDNThDNkI4M0M4OEFGRDNDNTk0MDUyRjM3MzY3ODgyQzI2QTg5MzZBNDc5RTQyNjk5N0Q4OUZFMEMKKzNBQjkwOTFFNDgwREFGOTE4QkMyNkE4N0NBRUY3QkQxQzY1ODJDNzNGNzVCODVENTlCNzA4RDlDNzZGOTUzMzc2MzQxQ0JBRkQyMEYxQworODg3NkY2RUU1MzhGNjEyODNEMDNGREFCQjNDQjI4ODhDNUYzOTQyQTY3MDUxN0U4RERDOThCNjIwNDM5NzAzOEI5NTFFMDIzQjQ2NTFECis4RTNGMTk3MzNDOEQ2NjEwODI3MzQ4ODgxQjU3MDU3MUZBMzU5Qzg0MDU2OERFREJBRkU5NDFCOURDN0RBRDhDM0UxQjE5MDYwNjQyMEUKKzFEQUNGMzk2NTMzN0M1MUE2QkVBRjJGMkU1RUM2MENERjgzOUUyREVDOUIxMzBDMjNCRUU5RjY1QjQ2NjI2RDIwMjczQTNBNUJEMzlFMworQkIyNDdCMURFMUNGOTI5NUM0MDlCOTFBRjQ3QjM4RDQ3MjAwRTBEQ0QzMTdCNERFM0FDRDc1MUU5NjdBQUY5REE3RjZDMDI2RDAxMTcxCiszRUUwRjg3NUVGRDdCMzFCNzNBQ0Q2NkM2Qjk1OTQ4NDkyQjU0QTdCOTg2NUIzRjMyREQ3MjI5MTNGM0Q5RUZCNDBFNEYwM0ZGOUU5MjgKK0FBRTNBQzFDNEYyMzlERDg4QkFENTBBMkJCNDQyRDFBMDY2MUIzRjQ3Q0UyQkNDRjFBNzZBODYwNEM3OTEwODczQkRFMkMyRUZCNDExMgorNjBDOThDNzUxOThFREY1ODQ2RUY2RUJDMUJGOTQyNTBEMzRGNjQ2QTQzRDAwRTNBNDJBQ0M0RTNFMUE0NEEyQjBCN0ZENzQwMDNDNjFGCiswMEFCQzkxMTRCNjkzNkE1MEM2NzU0NEVGNjJGRkIyRjE5Q0QxRTVBQzU1RUFFRTU0N0M0NkVEOTFBMTNDNzYwMjVBQTdBRTk1RTBCMEMKKzREMjQwOEU1M0Q3RUM0ODQwOUQyMUIyREVCQjA0QzcxMjE0ODdDNTBBQzdGQTg3OTBBMkVENTc3QTlBQjZFNDA2M0YxREI3QkRDNzdCQgorNDU0MkVDMTU1NzNDM0YyRTNDQjc2N0RFNTJERTJEQ0NFMDRGMzhBNThGMDZGMDhGMEE1NDFBOThEMzUzOENCNDFBQTVEQUIwNDUzOERDCitFQUQxQkQ2QjQxQzcxNTQyRUNEODM0RjgyMTg0QTdGNTFBNEI1MEI1OTVFNTBFMDRBNTIzNDA5NDA0OUYxMEExRTkxQkNBOEMyRjdCRkEKK0FCNjM4QkJBREY2REQwMkQ0OUIyQ0M0MDZFOUZENDBCNzM0QkE3NzJBMDQyOUJEOTlDQ0QwMUYxMTJFMUVFOTVDQjdFOUY0OEQ1QTlCQQorNTg0NjM2QTAzQjUyRjk0RkJDMDcyNEExRUQwRTVFMDUyMEU1QkFBNDMwMTc3M0VCOTg3MDlBQjAzNUFGMjhENjE1MjMwRDNFRTBERURGCitDRDMzMDU2Q0U4QzIyQTFGQzhCN0IzQzIyNTZCRjdCN0M3QzhEMUNENjY5QUIzNThFNTdBMUY2QTQwMEQxOEZBNTlGRDVERUIwQzI2MDEKKzAyQzU5MTEyMjE2QkM2RThDMDgxN0VCNUJFMzQyMEJBMEMyQTQzNjMwMjFFNTdGRjgzRjA5QjUwMjY1MjZCOTQ5QkZBMzM0MkE3MERDOAorODFERDU4ODgzM0JFQTUzRTA2RDI5MjU0QjQ4MDIwMThCMDAyQjA2QjYzMzc0QTZDNkYzMzU1NjI0NzlEMDM0N0RDN0MxNEUyRTM4NzJCCis0QzRDNTVFMTk4RUEyOEIzNUEzQjk0Q0ZBODhERDNGNTJDM0MxOTI0NzVCNkM4QjY5NjhCNDlEMkZCMTYyMzg1NUUxRDE2NjI5NEUxRUEKK0M4MzM3QjNERjlCMUIzRjI4MTE0Mjg2RkEyNEM3QTU2NzMxRjA1NDE3QzQwODcyREYwOUM1NUMzRTgxRDkzQzRERDAxN0JBQzlBMkNCNworNEFCRDEzRTk2MjJEM0M1MzNFQzYwQjRBNkMwM0UyNTNBM0U1ODZEODMxRDcwRTQ3NTAxQTFCNTIxRTJEQTVENjdCQjE5NDk1MDNDQkMxCis2OTNENjkzOTI1MTMwOTI4QkFFQzYzOUY4MERCNDIwREYxMEM4NTUzMzg1RTc5RkY3NUQ4QkQ5NzAwNDE0NzQ3NTcxODQwMjBGQTAzQzcKKzk3RUNFMTBDOEI1NEUzQUM1NkYzMzAxNDRGMjI1M0I4MTY0NDFENzVEMEVBNTVENzM0MkU3Q0Q3NEIzQjUzMTE4OTZCNDNGNEJEMUREMworODJBNkE4QTBDMzc5OURGMjRCRTRENjU4RTZBQTJBQUM1MTIxNUMzNDk1QTc5Q0EzMjM5MjdBNjkwMzQ5NTlDQjAxRDU5NzhFRTFEQTlGCitCMjk4ODQ1QTRBMkI0MEVGREY3Qjg1OTk2MDk0NzU2Qzk5RERBM0M4MzVFQUMzOTgyNkMwNDhGRkQ1QzVDNTgyRDg2OTgxODgwNDgyNTQKKzY2Mzg3RUMxQ0IxNkJDNTA2NTMzRDYyNEJGMjMzM0NBNTZDMzcyOTVCQkQ0MUVBNUM4N0RBRUM4MEMzNjg3QzM3QkMzRTUxNEJDRTQ4RgorQjRBRkU5QkI1QjE2RTM2MzIxQjFDMEEyOUE0MjNBRDlBREYxNTcxOEJDOTQ2RDcyMEFGNUMyMEMxOTIyQTY4REEwRjM2ODM4RDAyREJGCis3Q0Y0RDAxN0JEMkNCQjk2QUIxQjU0QkM4Qjc1MTMwMTA5QUI1N0NFNEUxMzcxMkNGQjRGRjA5OUNCRTgyODJDMDdEM0M2MTQxNzk0MzMKK0IyNjM2OTZFN0UzRTQ1NDNFNDg5QTlCQkRFMEFFREU2RUMwRjE3MjMyMTRBQzBDMUM4RjY2MkRDMDU1ODZFNzU2NEQ0MDVEREVBOUJCMAorOUQ3MjdBRjVFNzVEN0E1Rjk3MEZCNDEwRTFEQUQ1MkJCMTNFNzlGQkZENzMzNDAxNTBFMkZBMDhFQkE5NEM1OTEwMEQ3Q0M3NkJFM0RDCis1QUY0QzU4MTFFMTc1RTREQTNDODU3MzIwNTkzQzVFMzhENjZFNTY1RjFDMDZGQ0ZFOUExQjhDODg1QTAxRUMzMDIxRDRBMkU2QTdBRUMKKzI0Q0Y4MzJBNkU3MzE3MzI4MzVGQzBCNjdFNEQ3MjZEOEYyMkZCRUNFNUFBNjRFRjk3MjQwN0RCNDA3RUM5Rjk4NzZBQUZGMkZDQUMzNQorNEJBRkU0N0ZGNzVGMDZBMTdEMkZDMEIwNUEyOUVEOTYzQzczRjA0NjFBQTU5OUUwMDUxRTQ3RjU4NTRDOTc0NzI0QTVBNTNCNzM4OTA4CisyNEQwQjQ1OEEyOTlBOTk0ODA3NTk2RENFRjA3QTFFNDBDNUZFNzU1N0U5NDk5RDZCRkY3NzRCNzkxNkYwNEQ1ODRCODE4RjBEQTEyOEEKK0ZGODU2QjQ5NDM4NUY5QTlCMkFFREM0NjgwQTZGOTcyRTI1NDRDQTI0RTk1MjczRDM5NEZENUJFOEQ5MDgzRjlFQTgxQThGQkY0NEVFMgorOTQ3NzE3NjdENkZBRTYwNjE3Qjg5OTc0MTdFQzZCQzc5NkVCMDIwOUU2QjhEODc4REFDQTY0MUVDMzI5QjBBRjk0RTMwM0EwQUQ2MTFECis1RTJDMkM4QzkwMDg1NzczMEQxRUYxMUUyMThERjdGMEVBQ0Y3RTU1RjEwQjVGN0M1NkU2QUY0MTRCMDYwNDUzQzBFQkU0ODExOEI5NjQKKzU2RDM4QzhBOTIzRjQyQUM1Nzk3RjEzQzg2OTU1RjdDMUZGRTI5ODgxQUI4MjQ0OTM3N0YzQzhFOUUwODk2N0I2RjY2RkU5MjVFOUI3RAorNDc0Q0Y4MEJGNEY5QTI0RTQxNTgzNDg0QTBBRURCOEVEQjAwNzVERDNCNzU2OUUzMjYxQTE3MDZGOEE5NUM2NjIxQzYxRUE5OURDNjcyCis3QkY1MENBNzVFMzRBNjEyRDAwNEM3Q0I4MTk0MUFBNDUwRkI4MjZFRjlBNTFBRjhEM0ZBMTdERjFBMTg0Q0VGQUUzM0Y5QzdFNjNCRDcKKzA0NTI3OTU0MjAwRkU0MzYyMjBGMkNBQ0YyMzRCQjA4OEI1REVGQjUyQjI0NDkyMzhDMDg3NUQzOTVGOEUyMkZFQUVGMDk2RURCRjM5MgorQUZENkZGNkMwN0VEMDQyODhGQjczQzQwMUUyOUFGQzJBNzZENEMzRDAyQzRGNDg5NTVBOEYzMkQzMjM4NTczMzNBQkRGMzAyMkJBRUEwCitBRTZFNDUzMUMxOEFDRjc1MDQxNkM1NEM4MzREMjVFMjQ2MzMzQzEzNDU2RjJCODY2Qjk1OEI5MjlBQkI4RTQ5NzkxNzYyMjM2NUI1RTMKKzg2RkYyMzU1NzQ4NzY3Njc1ODhDQjI0QThDMDZGRTBENDk1QUEzMjgzNUNDNjM2NUE0ODE3ODhFQTI0OTcyRkI4QkUxMjY1OUFDRDhGMgorMjg3QzIzMTM5NjY0NzM3MTM1MTQ5ODY0N0NFRTlGNjJDMjY3MEU4RUY0ODc4ODUzMEJCNUIwMDZEOTNBMjlDRDRBMkUzNTREMkM4NUFBCiswQUIyQzgwMEFBRkM4MUYyNEM4MEE1OEM2RkJCQjg5QTg4NzI2MEQwMEM1OUVGNDAyMTc2QzgwREIzQ0Y0NEIwQTI4MUJDNjA0MkJEQzMKKzNBRUU4OEFEOEE1NzY3NEY2NTI5MDM4NkM3MzE5MzM0NjA4MkY5NDc3RUIwNEE5MjFCM0VFOTYwMzQ5QkRBQjlFNTMyNkI1QzU3RTIyMworNTI3QjFBMzE3MzE4MzM5M0FERjg2MjY3RjEyN0I1MkM0OTMyMEI2RUQzNjI4NUU4QURBRDA3QzBDOTFFNDc5MzczNjk4RTcwOUExODcwCitDM0I5RjY2NTVERjRFNUI5NkU5MkQwRTJGMkExNUM1RDZGM0Q4OEFDQUY2Rjk1RTlCQ0M1MjI0MTc5OUVCNzExRENFMTVBNjhERDUyNDQKKzZFODMyRjUwMDg3M0IwNDVBQUJBQjgxNkVCNjhGQUE3NUUwRTE4QjVGMzIwMDJGMjgzRDZCRTEyMTU4Mjc1OENBNTlBNjVDQTQzQzI4QQorNjhCQjlFNDA3RThGNzY3MTUyQTM1RThBOTBFNkE2REVFQ0JFRkVGQTJDRTc3OUJDQ0I5Nzg2MjI0MEZBNzJCOTJDMkUzNDI4Mjk0REM1Cis0QUQ0RjdDNjYxMUUyRDZCMjVEQjNFQjQ5OTVFODk0RDVBMTc4NjNENEM4ODMwNEU3N0VGNjk2NjMzQUU2RjIyNDM0MkQzOTFGN0UzRDgKKzJGREMyNEUyODg3RjQzRjQ4MzRFQkVDM0YyQjMyQUQxMzM5OTk1ODIyNTUzQUM2OEZEQTk1MURCNEJDOTVCMDM1NUE5OTYxMTNFNDgwMAorOEEzODdFQjhDRERBMEM0RDBCMjQwOUJGOUNFRTJCMzdFMUY2RjRCNTVFOUJFMjA5NkI4REI1QTYxN0YxQ0ZFMTJCRjkxQTIxQkFDOTIxCis0NTNFNDJFNERENUVDQjVBNDc5MDc4RkY4Njg4QkNGRjU2QTRDRDUwNDdBQkUxQkI0RDNFQUE5RkEwM0NENDhGQjRBMjgzRkNFNkZGRjEKKzE4ODVEQUU2QUZCRjFDNzJFODM5OTk4OEMwRUU2MDEwREM0MURENTk2NTMwRkE3NkVBRTU2NjJDRkZBMzUxNDZBNzVFNTU0NDQwNDlERgorMUIyMEM2QTk5RDgzOEI2RjhDNDExQkEwMjJENTBBQ0M4NDdFRjk0RTUyOTA4RTgzQjYyOTNFNzE5QzQzRTJDNDJDOTUzQTdFQjEzOTVGCitENTJBQTFCNkU2NkY3NzY0Qjc3Q0EzRUQzN0M2MDZFRkI5MzE3Q0QyNzkyOTQxMzM0NUM3NkFFQTQ2MTlDMDhBNEEwMEVGNzcwMjAwQjIKKzZCRTczODE1OTcwOTYxQUY3RjJGNzkxNEI2NEY4NEExQkQ0M0Y5RDE4NkVDRUE4NjU2QjhFQkRDQzdFRkEzNUFEMzVENUVCQUIwQ0EwMgorQTE5OUJGM0Y3NTE0NDc4RDg5RUJBMDdCMjgyRjAwQjU1QkVBOTBENEU4NTQzRkVBN0U2RDQ4OTk0NDA1NDg4MEIwOUVBREE0MURCNERCCiswNjU5QjhEOTZDRUQ2N0M4QTdDMThERDVDNDFDNTBEODE0OUU4NUE5MENDMTc4N0U4NjM3NUVDQzM4NjM2OTQyMERFNzVBQjQ0QUVCQzgKK0ExRDAzNERDODA0NTQ3OTM4OUUyMzE4ODJCRTY5QzE3RUU1N0VBQkUwMDg0OEYxMkQ0MDRFMEM0NDM0MEUyMUZDREE5NUU3QTc1MTVENgorRjYwNkM2MDBBNDg4MzM3QjRGRTMwRkRFNDBCMTlGMzI5NEE4MTAyREJGNTcxMDlGNDk0QzI0NTlFOTMyNTc2NkRDNzEzNzVDNDE4QjExCis0QjAwNjIwQkI3RTJCMzhDRUZBNjc5MDEwMDY5REI1QzZCNENFQjdEMzE3MTZBQzA1RTBBQjhDNDExQzg5OTE4QTE5Rjg5NTc4RDdCQzUKKzEwQ0E4NkJBOTk2RjQyNjNEMkI3Qzk4QUI1QzhBREU4RTdENUI5NkQ0NjdFQTQ4NDk1OEM4QjUxNEUxNzU3NDFBRjcxNTE4N0YwRTgwNworQjlDNUIxOUI2MzJCQjQyQjc0NTE4NzY4MTcxNDUyNjg3N0VCRkI1NjhCMzEzM0Y0Qzg2RUMzREUwQzZEN0RBRTE2NjBGMUUxMDQ0NTIxCitDRURFNkI4RUQzQjAzQzE2MDMxQTdERkM2N0MzMkM4N0ZBODNBNUUyOTg5ODM3NUE1QTVDM0YyMDhCQjNDQTcxOEFEMDZEMEU3QkYyRDEKKzA3RTdGNjdEQzYzOUM1RDk1NkI3OUZCMjJCREMzNzI4NDY2NDZGNjA3NjA4NTVBNEY5RjEzNUY2Q0IxQkIwRUZFRUQwMDMzQjA5RkNGMworQTM0RTFBQTc2NTYwRjM2MTE1N0UwQzJBMTY3NUJEOTRFMEJERDFDNzI5M0U3Njk5NTE2QTEzMDRDRDNBMERBNTY0NkFDQ0M5NTQ4NTZCCiszQTYyRDM4RUE4NzlFQjBCMDcyNjQ0N0QwRTE5ODUzNTEyNDU1MUJGNkY5ODIxMDU0RDhCODQ1QzQ0MUE5QzI0ODFFMUFDM0U1NDJBQUEKKzU1MzY5MUQ3RDZFNEIzMDM4NTlBNTA4NkE3QURFMTgxMDZGMTc0NzQ1RjM4RjZFMzE4MkY5MjYwRkU5RTlDMTlFRUY0NTM1OUQ2QjlERgorREQwMDMxRDFGODdEQTg5MTUxQjFCRTRBRjU0QjY2NzBFQkQ1NThCQjMxOEYyMTg0RUNFRTkxNTJBQ0EzNUUwOTk5NDBGMDk0QUEyQUM3Cis1NjQ4MzVFNjlFNUM5QzQ3REM3RDk2MjVBQ0IxRDQyNDNGRjFEOTkzQ0Y4NTQ2MzlDMTI2REQ4Q0UyMUEwMjI0MTE5QUNBNzMxMzQ2QTYKKzRBQzhDMThBQTIyRkIxQTE5NjhCMEE2QjA1Q0YzQTFENUIyNEQzRUFBN0M4RDIzNzZENDIyOTAyNjQzRDNGQUIzRjhFN0RDOEIyNDE2MQorM0RCQUJCMTcwMjM4QTFBMTlCNEM4QTQ3MDNFMkIwQTJBMDMzRTcxNzIzRjU1N0MzMTREQjQyQjE1OUU3ODRCMTgyMkJFMUY5OTBEMTY3CiswRTUyMkI5RkIxQjNBNjAyQjEwQUUwOEE4RTdFM0IyQ0ZFNTEyMzZENzZCNzQ0NDU2RTVBNjg5OTUyOTQ3NThBNDJGMTAwNEU4ODYzQ0EKKzBEM0FFNDU1RUNBRDEzNTAxNjY5QTFEQjQxRjdFODUzQkIxNTMxQTRCOTQ5QUE1QkYwQTVFNDc4QTU3MDVENUVFNDUxMDQ3NjBDNzI3QQorMDY4RTcwNTdBODA4RERBMzBDRkJDMDMxNTdFMTQxQUM1RTlFMEEzMTU5NjdDMjExN0VFREIzOEY5QzY2QTM0RTEzOEIyOUUzREU2QTAzCitDMzREMEEzNzc0MEREMDRFRjhGOUQwOEU1NDVGREVCQzU3MTA0M0EwMjE2NUU2MDg2Mzg5REM3QkEzQkZGQTUyRDk0QkQ0QzFBMjdCODUKKzlCOEVDQzY3OTk0RUJEMzcwMjcwQjU5OThCOEYyNDZFQTRGRTBFQTY5NjNBRTNFMzM5ODg0NUE2Mjg1NjA2OEE4QTg3OEI2Rjg5NEE3RAorMjgwNDFCRDMwQ0Y0RjBCQkI1MDUzQUE3REQ4NkEyQjk0RjM3OTRDNzhGNjE1QzY2OTI3NDYyOUYzOTJGQjJEMzIwQkI4MkVEQTk4NDVBCis2NkIwRUYwMzg0OTg1QjkzOEZFOEEzRjQ3QjAwQzJEQzU3NTk0OUI4QjkzMkYzQUY0MjNFMTdGNzJCQzNCQjlCNjNBODE5NDVDQTEzM0IKK0NEQTVFQkM5Q0I4QjhCOTY5QURCNUNFNjBDQTZGNzQ2QzYzREE1QzUxNkRCNDEwRjg2REJGODc4OTAyRTc1M0EzMzhEM0ZCMDhDNjBFOQorNDFBQzMwNERENzY3QkY0N0Q0OUJBN0ZCQTExMDM5OEJFMjFFMEY5RjAxQjZERjRDRDMyNTZBNzgwM0U1QkE5MzVERDZDREUxMTc1MEQ1CitERUUwNjA3QzE0QTlBNEREMDM3QjY4NUY4MzAwOTRDNUJBQ0QyMjgzRDU4NTRGNTM2MEVDQzkyNDEwOEY0QzEyOTE3NkFGNkU2MjQ0NTgKK0JBQzQxRTA0MzY5MTJDQzUyODFFQTk0QUY3OTEyMTlGMUQwNENBMzA2OUYzMEI1MEFFNzlCRDhCODU3NkI5QUI3NkU2MDMzNzg3Q0UzMgorM0JEMjUyNDBDMDBGQTAzRkFBMjUzQkQ4M0VGQjhGRUNEMkRDNDVDMUZEN0NDMTk0RkI2MUNCQkVDODgwNDdDRThBRUREQkQ5MjA2NjZCCitDMjY3NkUyMUEzOTE5OTg2RkQ1NkFGNTQ0MDI4MEU3MDgzRjA0OTg3RjAyNzJCRUVDRjhGM0I1MjYxMDA3MjAzNzAyQzlGODJCNjQwQUQKKzJFNkVDRjlEMEJBODFFNURBQTk1Njg4RDY1NDg3M0RDOTE3N0EyRTcxNjJERDIxQTdCNDBDQjNDODVBQjQ5NDY5QUJGOEYxMzNGODA4QgorM0MyREEyQTUwMDhFMjVBMTNBNkQwRTQ5RkNGRkMwQzhEM0U1QTI1N0E4QzhENkIxMTI0RDcwMTdDQzAyNjNDRDk0RjUwRDMyREFFMTI1CitDNjZBMEFBNzE3ODM5QkRBRkJFODg5MDgzQzAxRDVFNDE5OTRCN0NENTJFNjNBNUZCRDREODk2MzFBOTNCMzc3MDQwREFFOTlDNUJEQkYKKzY4QzIxNDJGRkYzRjJCNTNERDVFMTgyRkY2QUQzNEEwQkY2REYxOUY1OEUwNTg0NTAxMjM5ODE1NDk1REFEMTQ0RENFNzQ4NzQ0ODk5QQorNjU2MDAwRTI4M0EyMzdFNzRFRDU4RTI0NTJGMUI2RTczQTJEQzYyNkMzRTUyMTU1MDM2ODIyOTg0RTVFNzJDNjY3QzJFM0Q3OTBGRkFCCis1QzBBNEFBRTAzMjU4NzJBRTk0ODg0Mzc3NjJGNEM3MEJDMEEzNjlDMDkxRUFCOEEzRThGNDA0NDY0Qjk5RDI2RDZDMzVCMDQyRTEwRDgKKzk3RTAyOUExMDQ0MzA3NENGNzM5NDlFQUQwRENCN0UwQjhEMzlCRjM4MDZGMzlEM0UzQzIwNDUyN0MxNzE5OEYyMUZDNzZGQTVBQkQ2QQorQkFGQjIxQzk0MjE0NjQxM0YwM0UwQ0RFMjQ3QThDQ0Q3QzcyNkU5OTM5NzZGMkQ3MzBFNDMwNTQyMjlBNDVDMEZFQzA5REJDQ0E5OEZFCitDMkM0OUIyQzZCMDE1RDM0ODgxMjU0Q0YxMTI0NjUyMUQ3ODVEQTEyQzQ4QTQ3MzFDM0FGMTM1M0Y5OUIwREI5Njk1M0Y1RTQyQjNDMzcKK0VBNDYwODc2RkQ3RUIwMzZGN0JDNUQ4NjMwMzU0Q0ExODkwMUM1NjFBNDZBOUUyMDFDMzBFNjJGMjNGM0Y3QjBERERGRjU5NkUxM0Q3RQorMDBEMjU2RTY4MzM0OTVCQUZERTcyM0FGNTlFNzBEODQxQjUwMjgyNjFGQUM3MjNBRTRFMzdBREFDQjAyNzcyREZENjMyMUZFQjY1NzI5CitENjVDQ0Q1OEIzMTJGQTY4ODQzQUNGQUI3RURENzhEMzFBRERCNzM0QjY0N0U4N0M3Q0UyNUEwNDM2QTBENDk0OTlGQTI3MkZDQzg4RjIKK0UwQ0U1RDczODJEOENCRjc5MzA0NjdBQTNDMkIxQkY2N0U2ODM1NzNERUIzRUI1N0Q5RUVBNUUxODU3ODZEQzk3MjFBNEI5NUFDRjMyRgorMDlENUFEMkMwNjYyOTE5OEQxNUE3NEZENDFEODk3MkUxRkQ3N0NCNzFBOTMzRDIzNUUzN0U4OTNFMEE0REUxRDUwNzE3RTEyNTM2NUE5CitDQkMyQjgyOTFENzM3NUFFMjM0MDgzMzkzOUJCMEYxMzlGQTM5MkYyOTM0NzI3NjZBMkVENDA1MDk1QkQ5OTA2NjBDQzZGNDA5NTRFOTYKKzcxRjk1NTdENTg0MjY2QzZGM0JGNDFGNEZGNkUwQkI3QUJFQjI3MkFGOTlEMEE0NDM4QkRCNEFGNjc4OUI5MDQzMUI3REVEQ0NCMEQ1RQorMzVCRjg3MjYwMDY3MEIwRjE1QzE5RjM0QkNCRkM1OUM0QTJCRTM5NzhGNkExODREQjRBNDc0NUI0MDFCQUNCOEM3N0RCNjJEM0FCQjg1CitGREEyMTI5MTIzMjVDNTVDNUE2RDMzQTI0RDc2QzdCRjcyQTZBNzEwREFBNzM5MkE3RjdDQjBBNjMzOTUwNUFDOTM1RDM0NkM5QjVFMkQKK0QyRTg1NjA4MzkyQjNBMjUyMzczMzdFQzhGNTg1NkJGM0YzRUQ2RTE1MTQwNTNGNEZBQ0QxMkE5NERBRkQxQzEyMjQ5QTY3RTNGMDgwNQorMDhDQkU2OTE2QjJERjNEOTQ3OEM3MzdBMTQxQUY3QzU0RTg4MzJERTgyMjgxNzM2NEVGMzYwOTY1OEM2NTkyM0VENjY2RDg2MzgwQjk5CitBREY3RUEwMkM5REFFMTExRENGMzk5ODc4Q0VBNjBGNUQ1QjdDMThEMjQ0QUU3NkQ2Qjk3OEJBMTdEREI3MUQzREZDMTIyNTIyMDJCMzkKKzZCMDNFMzZFMzc2QTU0RTEzMDVBMDBEMDc0NDE5QThEMDRENTNDM0RBODI4QTM2QzhGNDBDNDM5Q0Q3RDU4QTQ4OTYyRTdCRTk5MkE5QQorQTgyRUM4NTM3QjI2OEFBMTNGRDFCODgyNzVEODdCRjAyNDREN0I2MTUzM0IxNjczMEJCOUVGQTY0M0E1Qjk2QzRFOUMxMDc1NUE4NUE0CitGNEM3MUFDNEMzREREMzA4REZGQTA2NjE2MkI4QjdGNzVGN0JFQzhEQTQwQzUxOTRCNzU5NzM2MzgxMzQ5QTYyMUM0MDdBMzRCOTA4OEUKKzlFQkUzNDY1MDU4MkNENzU4RTI2OTg0NzMyOEFDNDNFQjc5QjU3MjVGRDdFNTE2QjhBOTc0Mjg5RDhDNUJFOTBDMzAxMzIzREVFRkNDMAorQTE4QUY2NjMyQUE4QjgwQzhEMTg4Q0VDMjc1QTkzRjY4Q0Y4N0ZCN0M2QzE5QkZGMkMwNzAzQ0ZEMTVFQ0NBMTYxNjBBQ0Q2RTNFMTZCCiswMEZCQzI3NjE2Q0UwMDNGRjlBNjA1Njk2MzRERjZENDM5OTdBNERDMjNBRkFBOEMyQ0U5QzQ0NkI2NzM1ODFGRTlGMzBBOUEyMzIzRTQKK0MyOEM3QzlGQkEyN0EzQjVFQUZDQ0E4MkQ4NUIwNUNEQjZCMzlBN0M2QjM1ODRGNDhGNEUzQTFGMDEzQURFNDcwMjM4MzBFNDdFRDhDOQorNUNGRjNGNjQ4QzM4QkVBMUFGOTEzNUUxNkM4N0E0MjMxMTk5NUUwOUU3RkI1MUYwNkE4NzEwMkJGQTgyNjNDMzIwNjdCMjZCMDk0MUM4Cis0RjJGNjIwMzVENThFOTE1M0Q4OUQ4MDhBQjcxNTQ1QTFCQURBRDE4MTdEMERDMjgzNkM2MjA0QTBBMDQxOEEyRDYyRUZDMkZBQTYzQzcKK0E5RDBBNUNEQUE1RjBFNDkxMjY5QjEyN0I1QzcxNkMzRDVDRUU2QkFFN0ZEOEM0Rjg2QzA2MzJBRTc1N0FFQTU1RjE1Q0MwRjk1RDdDQworQzQxRUU5QjFBRDkzNDlDNEY4MUYwOTk4RUQxMEIxRjY4NjI3MkUzNzM4NjBBQzJFQkI5ODZDMjU1OERFOTg5REZBRDk1REJCRjlFQjU0Cis1NjM4NEEwMDc4QzEzM0U5MUFDOUNGNTM2NUExRTczMzgzNEIwNzAxQjRGRTQzOTY0NTE3RjBBQTFDMDExQkI2QTcwMjlGOEQ1QTIzMzMKK0I2N0RBM0UwMTlGMEQ4RDdENTMzQUQzMjkxQzJDQkIxRUU5MjBFOTUzMTI4RDA2QkJDNTE3QzUxOEFFOUEyREQ0OUI5MzNFOTE1QUVFRAorOTgxMEM2MTkwMzVBQkY5REMxNDdGNjUzQURCMTI2ODE2OTAwMkUwMzJBNDI1MDEyMDBBNjg1RDE5MDcwRjEyRjkxMzdCQjFEOUYyQThBCis0NUM1QjUyRjU1NzczMDVBRjk0RDlDNTExRTVFODJBQzY3QTIyMTY0ODMzNDcxQ0JCODY2OEREQzg4RDlDNTAwOTE3MTgzQzVFMTRBODIKK0YxRDlBMEFBM0RGMkQ3QkU0REU4NDRCRURFNTU3MDBBMjQ3OEUxMjE1NTVDN0Y2NTI5RkZCQjA1MjAyNkM4MDc3NkI0NDdGMUY1QkUwRQorODVBQUYyQ0YwOUJBM0IwOTE3MjUyRDY4RDY3MTAwNUQwRkEzMjhCRDIyNTU1M0Q5OEYyQzQ3NkUwODBCRThFMDNBRjRBNzY1MTU2M0ZCCitGRTA4QzIzMEYzQTk1NkYyRkFGN0FCRjg2OEMwOENFMzNBN0ZFQURCQjhFNkQ2QUYzOEE4MjFDQ0Q4QjRFRkZDMDJGRTIzQTM3QzY5MUYKKzY5MjdENDVGNTcxMERENUZBQzc1MDVGQjNBMERDMzFDNzY2ODQyQjQ4MkJCNzdEREIzOTkwMzQ2RjYyN0UwRTE2NTdEQThBQkM4RUE3NworOTYzRDZDQjgzOEQ5QzRFNThDOTQzQzNBMjcyNTgyQjNFNjM3NzEwNzBBNkY2MkJCRTdBNEIxMUI4Q0I1NTA1NDdFMTdFRDVERTZFRTE2CisxQkQ5MTE2Q0JBMEUwRUVFOTEwRjk4OTQ4Rjc0MEU3QTU0MzAxNzY3MjJCQkNEQzRBQjY2QkQzNTQxNDQzQjA5NjA2M0M4MzlFNTNCMDUKK0E1NUU3MjIzNUJFMjIzRDI4NkM0MzE5RkQ1QTUxNjMyNUM4QkQ0ODBEMTg2N0YyMDEzNTk5ODQ0RkQyNDc4QjNCNTI1NDI4MTVDRTk0NQorRkZDOEZCRUFBRjlCMDcyQ0I0OTg4MjUzRUY3MEU0MkExRUQzMTVGRTJDNzU3MTM2N0U1MjE3QURGM0FFNEZCNjc1NzVDRjQ5QjFBMjY5CisxNUU2NTNCNUE4NkUzRkFFMUM3RDA0RTFBQzIxQ0E1RDdFN0JEQkVBMEY1OEM5OTYyQjQwQTE2OEZEN0EyNEI0QkYxMDk2NDU0ODFFQjEKKzE4RDQ5QkI5OUIzNTQxNzU2RTBEQUMwRTIzMjdEMUZBQ0FFRDlGN0E3NjkzRkMxQTE1QTU3MTVGMUZEMUJGQkNBN0QyMzJGQ0Y5NjYzRgorQjBDQjM1MjU3MEE1ODA3RDE3MEU1QjZDNjcyN0Y3ODI4Rjg3RkRDOUQ5MzAxQTg0MkM1M0EzOEM2MkM4MDRDQkQ2MTE5OTJCM0ExQzhFCitDNzEwM0U3NjI5NEY3RTZBNTA5MTZCOENFQTgyQkU1QjdFQjc3N0FCMkU3QThDOTU1NDE0QzhDNjFFQTMzMEJEMThDNzQxRDVFQjZFMTUKK0E2REE0NkIzMDM0NUY0RDU2Q0VBNTk1Q0M0ODM4QkJGOTkzMzlCQ0U4MjU4MjMxNjg0NzUxM0NFRjQzQjdERUFBQTE3QzdGM0RCODJBMQorMzQ3MUNFODFCRjc4OTQ3MjFCODBGODE2NUJDQzNGNzYwMUQ1RDNERjE3RDJGMzdDNThDNUU5RDg3RjM5OTBFODM4RTU1RThCRkY3MDg3CitCQjc5QTFERkMzMjE2MDJCMzg2Rjk4RDFEOTdDQkIwN0Y2RDdCMDZGOTAwQTc3RTQ4NDdDQ0Q2ODlCMjNDMjc3RTY0NzYzMDBENEQ5Q0UKKzJCNUJCNUNBMjA2MkJGRjBFRjJCQjNENEFCRTJBOUY5OTBEQ0Y3NDU2OEQ3Q0RCNzE3RTRDREIwN0I5NzYxNDUwOEVGMzRFRTkwMUJBQgorQjQ3N0Y3NUM0MUIyQUFFQThGNDZCMjE4REQwREU1QkQ4MkYxNzE3Rjk2RTE0QURGOEQ3MzY2Mjc0RjNDMDc3NjgxRTBDRjMzQUREOTUzCis4OTIyRDUzOTA3N0M1NjQzMTkwOUVFOEMxRUZGNzQ2N0M5QTVFMjE1MzUwMjc4NTM0RTVBOTJDNkJFQzcyRDRDMzREOEQxM0NDNTQ1QkUKKzU0M0JCQzM3MTQ0M0YyRDM0NjczN0EzQzM5MEEwRjdFMjg0RDlDNDY2OUQzNzQ4MzlEM0VEOEE0MDIzRjFGOTlGRDkzNTk4NzU1MDA1QgorQzJBMzRERkNDNEQxOUNCRDQyMkVENEU4NTdENDE5QkUzQjlFMTJFMDFEMDMyN0M1MUQzNTg5RTgzMzI1ODk2MDE4QzlCMDQxN0ZEODc2CiswQUVCQzVFMERDODM2N0NCQUIxMUIyOTg5RjRFQ0MxQUVGODdEOTM1NzIyOTEyRjE4MEE3MERGQ0U5NDBERTM4ODJBNDE2RTI5QkExNEEKKzlDODZFNzczODBDRTQ2NDU4M0YzODVGRjE2RjdGQkRCNjA3QUE3NDU1REE3MENEOEEwRDk3MTQ5NjNCRjc5MUQyRDVFMkU1NTBEMTBERAorMTA1Rjg4REFCMUJDMUY2ODhCMUVFOEI0MDE1MUU1MzNCNkQ1NkZBQzNBNEE5OEJBRDg4MDE4NjQ3MDlBRkY2REZCM0QzRUVENUE1MzJCCis4M0U5MUNEODEyNUE3QTdBQjY2NjhGMDY2QUI3OTY4M0M2QTNGMTI5QzVBREE5NDMxQjA2QUJGMzdBNzI0MzgwQ0VBMjUxRDY3QjVGRDIKK0I5Qzk3MzM0Mjk3QjlEQjhFODVDQkNDRDEzOTExQUY4REMyNDE1RDFEOEU3ODA0ODM4RDNEMDNGOUQxNDNCOTIzRjVDNUI1OEUyOEI3NAorODIzODY2NTA2NUExNUE1NEI0M0NFOTYwODlCOEU3REI5MDY5QjJCNTMyMTBGNUEwM0QxRUNEMkY4M0UxMDQ0QUE1NjFBRTY1NjgzQTQzCis5RkZBM0UxRkI2MEMxQ0I2NEYzMkZBNzFFM0ZCNTU3REYzQ0FCRDg3RkQyRjk0NUVCM0M2OTYwMjI4ODA4RTFGNzdCMjNERjhDN0I1QjEKKzg4OUJCNEMyNzM4RUU1RDYwNzc1OUMzM0Q1RDYxNzQxOTRBQTlGOEY5MEQ5NjlFQTNEQUU4MzRCMzgxQTJFMDhFNURDOUVCNTQwNjc5RgorOTRENDkwRjc3M0ExMDlEMjYyRTA4Q0FFNjBFMkU1NzY5MEU4Q0Y3NTZGOUFDMTEyODQ0Q0FDRTAyQUM5NkY1MTIzMUZEODNCQjlGRjcwCisxMDJGQ0ZFM0RDQUNDOEJGOUU5OUJEN0E5QzlDRDkyNzlCNjRCMzYwMjQ0MjYyNEVGRkE2MDYzMjZCRjk2REI5RUVERDE2QTUxNTQ1MkEKKzdGMjVFRDNFNzhBQ0UxNUZFQTJDRjlGMUQzQzZBMDU0MUQ0NDFBOUQ5NEVEOUZCRTk0N0FGMzVCNzBCMjFDREJDMDI1MjlDMjY1MDcyQworOTk2NDJFREM4NzhEOTJBNzY2NEYzN0Y1RDlEQzE3M0Y2QzI4RjkwMDU4NkM0ODk2MDI0MUUyOTMyRjExMzk4NEJBNTM0RkUyNDU3RjQ1CisxNkU3RkVCQzdBNzY3M0U4QkNENEM4QjA1QThEOUM3MzgxNjRBNDNEQjdGNTgxRkFBODcyNEQxMjAzNTU3M0JFODAwQzAzMkFBREIyM0QKKzlBMjc3QkVDMzg3RTI5RjIwMUU1RjQwOTFBNERBQTQ3OTJBQkZGRDY1NzYyRTY2MzdFMzU1Qjg4MzQ3OTEzNzBEQjc5RkZCQUU5OTEwOAorOTIwMzZCNTcxM0Y2NEEyODc1MDkyODI1NjE2QzY0QzY4MjdCRkM2MEY4QzBEMUVCMEZBRjA1MTYzNDhBNzg0NkI2NTdDODA5MDMwMTEyCisxRkUzQjBGMUVCOTkyQUJFNzNGMDg0MkE1RUUxMEQ2NDM2NDQ3NDcxMDQ0RUI3RDkyNDdCMTY5QzNGN0MzN0I1MTA5QTVFNzY1MEFERDEKKzE2RTUyQzIxMDIyRkM5OTE3NTZCOTNEMjEwQzY1RjVCN0Y2N0NEMzhCNDg2M0Y5MEQzQTE3NDI4NzVERjhFNkIyNEQ5RTI3RDcyNjUyMQorNDMyQ0JEMjI1RTBERjM2REMzM0I4RThCRUQ5RkU4OTdFNzcwOTg4MzJCOTE1NjcyNURDMzhFRTgyNTk1NDgxQTc2RDE2NkIzNzA1NUVFCis4NEVFRjE4OTlEMjQ5REU0MjgwRjdGMTVDNzZDMDQ0NTY1OTQ5RTlFNEQ0MzhGMzI3RTA1MjY1RTM0RkFGODEyRTY2MTc3MDY1OEYyRjIKK0JCQkZDQzkzM0FFREFFN0JFMTdBNDA4ODBBMTUzNDA5QzM1N0Y4MzBGMUY4NDdEOTExMTEzNTQ2OEQ3QTM2QkNCMUU2OUNDRkY1N0UyNgorMjBEOTdEOTg4NjY5RDczMkE5QTRGNEVEMEIxQjZCNTQyRDcyOUM5RDJGRTE1REQ4NTg0RUNENDU4QTEzMDVEQzcyOUM0NzcxNEI2REEwCiszM0EwRDBFMjIxNTcwMzk3RjYxRTY3QzA1NkY2NkVGNTBCRTU5MUE2REMzRTMyNDY5MDhCOEVGNDk3M0Y3NkM0NDAzQjE3MTc1QjA0NkQKKzIzMEYxN0I5OEEyMTdEMzQ2RjA3OTZBNzdCNkYxOUI0QjA4ODlGMDlBMDNCNEY3QkVGM0IyNDEyMThBODVCNUMzNEM0NDIwQjg3RjBFOAorQUQ5NDJEMEEyMzJCNjZGQkJFNDlEMjg2NEY3QUMyRTU2NTJDQ0U5MUMwRkE2RkFFNzk5NzFGMkQwMEU5NzIxNTFCNjExOTExOTBGOUU2Cis5Q0M3QTUxQjc3NzdBRjBFRkNBRTBCMkZCQjYyNjIzNUQwQjk0MjEzNEE4NUVEMDE2OEQyRTBFNTg2NTREOTRCQ0ZBRDFEMEVBQURDMDAKKzExOTM5MDUyMjU5RjE5MzMyNERCQTQ3OUJGNTdBRkRFMDUyMzdBMDg0NDQ4ODhGMDhGOUJBMTE5MTc1Qzc3NjQwMjQ5MERCMjlGQTk2RQorQjBCREM2ODRDQUE4RTBDQjQ4RUNDMEY0MEEwQzhGMThFMzdFRDA0MTIyMDA3Q0U0RTExRTFGRjM4OUVCQzdERTlGMDc4ODhFQzFERUI5CitBNUMwODNFNTc4MzBDMUQzMDNEMDM0NzNDRjY0OUM4M0QwM0IxNzA0NUYzQjc0QTMyNDU4RkI5NkM1ODU2RjAyQjcyODI2QjY0RDQ4NjYKKzEzQzdGMDdEMkEzNDQxQzcxNTQyRUNDNTZENjVGMkE4MEI1NzQ0NjA4RDBEQ0RDMTQyMDRCQzAwRUQ4RUZCNjdGN0MzMTc5NDAxMUMwMworOTNDNjQ1ODVFQzhCNzQyN0I4MjQ2N0VBMzJBOTAyRkExQkRFNjkxRkM3N0NDNjE5NTJDNzJGODZCMkZCQTI0MEQ5RDBDQzU2NUQ4MDA2Cis0QjBEOTUyNUNFMDlGQkMxRjdBNjEwNEVBNUY1QUY5Q0FDNEExQzE4OTJCRjc4RUQ1NTAwRkI1QUZFQzI5NTMyQUU3RUQ5OTFDRUMyOEQKK0Y5QjA3NkU5NUM2NEI5MUUwRDI2MkQ0RUFGRTFDMjdFMjQ0QzM2QjUyNzY0NjY1MkY1NEMyM0UzQkU1OUU2QTBBMkIxMjNCQjMxMDFGRAorRDkxQkIyRjNCMzEzQ0EwQjAwQjExMzJBMzg4NjE3MkFEQTBBMjM0RDgwNUNEOTVCMkQKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislJUVuZFByb2NTZXQKKyUlQmVnaW5Qcm9jU2V0OiBzdG9uZXMucGZhCisxMSBkaWN0IGJlZ2luCisvRm9udEluZm8gMTAgZGljdCBkdXAgYmVnaW4KKy92ZXJzaW9uICgwMDEuMDAyKSByZWFkb25seSBkZWYKKy9Ob3RpY2UgKENvcHlyaWdodCAoYykgMTk4NywgMTk5MCwgMTk5MiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuSVRDIFN0b25lIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgSW50ZXJuYXRpb25hbCBUeXBlZmFjZSBDb3Jwb3JhdGlvbi4pIHJlYWRvbmx5IGRlZgorL0Z1bGxOYW1lIChJVEMgU3RvbmUgU2FucykgcmVhZG9ubHkgZGVmCisvRmFtaWx5TmFtZSAoSVRDIFN0b25lIFNhbnMpIHJlYWRvbmx5IGRlZgorL1dlaWdodCAoTWVkaXVtKSByZWFkb25seSBkZWYKKy9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCisvSXRhbGljQW5nbGUgMCBkZWYKKy9VbmRlcmxpbmVQb3NpdGlvbiAtMTAwIGRlZgorL1VuZGVybGluZVRoaWNrbmVzcyA1MCBkZWYKK2VuZCByZWFkb25seSBkZWYKKy9Gb250TmFtZSAvU3RvbmVTYW5zIGRlZgorL0VuY29kaW5nIFN0YW5kYXJkRW5jb2RpbmcgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMSAwIDAgMC4wMDEgMCAwXSByZWFkb25seSBkZWYKKy9VbmlxdWVJRCAzODc3NyBkZWYKKy9Gb250QkJveHstMTc5IC0yNTAgMTI5NyA5NDN9cmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitFQjdFRUI4OUJCOTQ2RjE0MzczOUE4MzUyOURFMzM4MUYzNzg0Q0MwNDlEOUEyMzJFN0UwODg0RjBGMjc3RThDNkU2QjBDOTVGNUUzQ0QKK0RGRUZGMkY0NjBDRTA2RTJGQzg1QzY4N0IyNDUyRjY2NjQ5M0FCNkM1NUEyMDc1QzYxRjREQUZGQjA1NDc2M0I5NDkyRTYyNEY1RTRBMworOEYxMUUzQkM3NkVEREFBNUMyMjhCQ0QyMEYxQkYyMjgzRTgxMzNGMDdGNUFBOTFCRkY5NjgwODk4NUQ4QzE3MzZFOEJDNzU4NzgxMzM4CitGMTJDQzYxODgxOUQ0NzZCNzY3NENCRjZBN0IzRjEwMjVBNzI5MUM3QzA3NEIzMDU1RjI4MjQ5ODQ4NEM2RjBGRjhGNjQxRDBDRjZGRjgKKzhFMUFCRDgzMjk2MUI4OTk1ODM4QzlDMEY2QkQwNzU5MjQ1MTI4ODU0MzlCOTM2OUIzN0FCRDlGNDc0QkY4NjQ2QkY5REFENUM1RUMxNworNzlBQjhERTgyQzNEMDk4RTZBNjYzN0Q5QjRDQzcxNzRBQkRERUZCRDMxODBGMEU2MkUxRTY1MENGMkRBREFBN0M3QTZCMTk5MUVGOUM2CitCNTA0NjY5M0FGRDhCMUNFQzcwRDg1NDA3MDI3ODY0RjcxNEU1OTlERjlFNEU2Nzc2Q0Y4NDY3MjE0REFCNjkwMkVENUI0MEZBRTQyNDQKKzgyRUQ0NUE3QkVDQjI2OTQxNzI3MjgxRjhFMEIzQzE1RUMwNDUxMzM0NDAwNzBBRDcyNzM2RjREODdBOTYzMzVDQ0FGOEU2QUEzODIyOQorOENCN0VEQTQ5Rjk2M0E5RTExOUNCNzBCOTUyMEU1RDdBQUVERDU0OThGMEVEMUM4QjM5MDI2MzdFNzE3MzRBN0Q3RTI0MTJENUVCNzkyCitCN0I2MEJBOTM1NTYyOEJFRTNERkRBNUU5M0IzMDI2RUMyODg2RDQwQjIyNjg1QzhFOUJFNUUzOERFMzFGQUI1NTFBOTc4RDA5NUM1NUMKK0UzRkVDNEQ2RUQ2NUM3MDhGMzY3NkY0Q0U1RjgzRjYxNEMwMkM4RjEwOUYxQTdGRTkzQzYwMzBEMzAzMjI3QUYwRUY4NDNDNDVGMTVCMgorMjc5Nzg1MkNGRUEyNkQ3OUFFMjkzNEU4QjY4MzczMkIzMDZGOTEyNUFEQUExQTgwMkM4QjgyNjA1RDczOTVEMEYyMkM3N0NEMUIyMEUyCiswMkJDMDgyMDE1RTI5M0M4RjFEOEQ3OEEwRTQ1NjU1NDAzNzFFQjNCNTEyNTZCQTcyNzZCMkZBQkEyQ0RGNDdEMzRDNDQ1RDAyNTVBNEIKKzIzQTg4Q0I0NDNCOTk3ODEzRUFDRUJGRjUxRjVCOEM5QjFCOEVDNTk2OEExOENBMjZCREFFMkYwMEFFMDM0RERCRTREREQ1OThFQ0U2MAorNTJBOUJBRUM0MjBGRTI3OEIwOEY2NEJFRjEwNjlCRDFGRDRBQjhCMkExM0VEM0REQ0ZGODA3NjUwMUJDOEEwMTU2NzE1RUMxMzJGNjM2Cis3MTFFRTlEMEQ4Qzg5QzkzMkVFNUQxNkY4MDk2QTlDNDU2RENFN0Y1OTUxN0Y4NUZBNDA5QjYxMTBERkMyMkEyMzkxQTAwNTQ5MkJGRjAKK0M4NjEwQTkyMDREMzlBRUU1MTI3MUQzNTVDRTIwMUE1NzE5ODQyMTEyQzg4NjMyQUZCMDk3QzM2OEVBQjg5N0RDMTk1N0IwMjk2MkUyQgorM0U0NzMyRjY1MjdDMjVCQzc2QUMwNDNCNzMwMENCMTUzRjY5NzFDMDMzNUZEM0M2QUU1QUY3QzVEQTU2MjFEMDNGQUVGRDNCOEFEQjk4Cis4MjcyQzYzODA3MDgyMTBCRjE0MDgwOUU0QTE5MTE5M0YzNTQ3QjJFNEQ0M0Q0RTk4MUY3MTQwQjk0NDczQjkzOUJFNDU4RTNCNjlCODkKKzMzQURCQjgyREE4MEJBMDFCMkZGOTg3OEJFOTM4RDdFMUU0QTZFNzlCMjFDMEI1M0VFNTEwRDYzNzdFMTc4RThFMzU1NjEyNUU0NEQ5NworMzJFQ0Y3QTdDNTkxQUQyOEI5QzY1MTYyOUNDNUE1NkJGNjExRTJDMjE5OURFQzU3RDYxQzA5OUU1RENFRjU1MjdCOUIyMjk5RkE2NERGCitCMzQxMDE5M0I3N0NGNjAzQTA3M0QwNzg1RTFCQTlDQjFFM0YwQUI4ODU5QTg3Mjc4NzY5QkI2RkNCMEMwMUVCQ0I0MEY4MEJFRUM0RUUKKzAyODNDQjQ4MEUyQjMxODYzQzIxMjhFRDVBQTk1OTQ0RUQ3NDg4MDVGOUJCQzcwRkE3OUY3QTQwQzE3NUY4QTY1NUMxMUMwMUZBOUMyQgorOUUwQTZBOEZFNUFGNUQ2RTM0MkVEMTUwNEJDMzMyRUEwRjE3ODgwODE4MDhBQjhBNDkzQTA3OEFFQ0FCQUJCN0QwRDcxODNBRDBBQkQ2Cis1NzYxMTk0NTZEMEI1MEIwQUM2QzZDM0RERDQ0QzY0RDREMTFBNzZEMkMzRjVGQzUzRTYyNkIxMkU5MkQyMkI3NTdFODk3NDlBMUNFMjYKKzJDODFGNzY0NkQ5RjI0RUUwMzUwQzMwOUMwRDlBNjVEMTM0RkJEMjE2RDNFQ0VCNTQ4NDVCRTZGQTdENjdFMkRENkIxRjEyNjJBRUVGMAorQTEzNEE2RTYzOUEyRTNBNkM4MTEwMDA0MDU3QkY5REE0ODcyOEY1MEQ0ODYxNjAxMjJGQjdERTY1ODdENDMyNTg5NjAwMzYzQ0I3NjIwCis3MjhFMTA0MDVDOUI1Q0Q3NTIwRjQzRjY0NzJGNENGNzFGREY4Q0Q5NUU3ODk1MDQyMkRFQTgyQkJBRDJBMzdFRkMwMUI3N0MyOTYwRUQKKzlBNkYyMTMzMzQxODNDMzRCNUJDOEY5MDVCRjM1Q0ExNjA0RjU5M0YxOTM5Qjc1ODI0MjNCMTk4NjRGMzNDNzIwREU2RDNCMjNCM0Q4MAorNjc0NzYxQ0E1OUIxNTYxRjYwOTRFNDMzNzE0RURCMTc1MjNEMjkzMDc5NTBGRTY3QjExRkRFMkFDMUU0ODMwM0RCRkVGMDZFRjFCMDBCCis1NzIwMUQ3Qzc4Q0E5RUMwNzk3NjAwMjE1MTMyQUJDMzVGQzgxODQwOTIwQTMxMUU4QzdCM0IxOTFDMjBGNzZENjY4RDA4MzhFNUEyQkQKKzcxM0Q4RkVBQjY4Q0VBQzM2NUFGRUI5ODc0ODBDNUE3NDJCM0Y4NUQyQzZCM0REQzQ2RTJCQzFDMjdCMzE2RjZDMkU5NDQ4OUU2RDZBOAorOTBBOEMyMkI3MUE3NEI4OTcyMTBFMTQzQkZEMTdFRkY1NThCQjY3RUZEMjE0RjY5QkJBMkEzNDZBRjk1MzM4NDA5MzE4QTlDOTVEOEY3Cis3Njc0OTg1NEE3Q0M0QUVGNDA0Q0U0MTUyOUMzMThDMjE2NUUyODIwREJBNkIyMEU2QzQyMzE4Mzk2NTIyRkFCODAyNzI4OUE5M0IzMTYKKzlGQzNFQ0VBRDYxRDA5OTUzRDIwNkE4MTYzMEJGMThCNkYxMUUyOEM3NDhGNzFCNUZEMTA1RjkxM0JFMjZGQ0U5MjdGMDYxMUM3RDIwMgorQUFCQTcxNEI0N0I3NTRFOEU4QUNBNThDRkQ3NDIxQzVCODc5M0M4MzIzNkQzNzVFRjVFQzU5QkM3MUI1QTYzQzJENEZEMDFBQjcyMDY0Cis2MzRBMzU5MkJGMTIxNEUxOTJGNTIzODlGNkFCNEE4OURDNENCQzFBOUY0QjI2N0EwQkNCNjEzNzQ4N0Y4MTNFRUEwQzYzMTBDRUVDRDcKK0RBQjc4MUE4QzE4RTA4QTFCMjBCRDJDREY1OERDNzJDOUQ1N0VDNDcyMjU0QUJGQjE1N0VFNTRDOTY5MTUwREQ5N0EzMEVDN0E3OEI5QworRjhDMTYzRkE2MTg1QjFFMzk5Q0ZEMEI5MzE2QjcwRkMxMUExNTJGNzFEQzRCOUM5MDJCRDA1RjFBQTdBNjU1RUNCMUU2OUZGQkY3Q0VECis3MUI2NjQwQUE4QzUyOUFGODIyRkQ0RDE3M0NBQ0Y2NkRCMTlGMzVBQkEzQUVCQ0REQ0VFRUEwNjFCMDYwMTE1NTNCODZBMTI5MTg3RjkKKzI2RDE4RkQ2NDQ2NjAwMDFDN0MxRUJCMDJDMzM0NEVGMEU4OEY5M0FEQzhGMzM0RUM0QUJEMTVENDVDMzMyMjFBNUJCRUVDNDhBMzIxMworMkJFQzI1N0Y0QTE1NEUyQjA0MDE0NTQxMzhCODM0OEM5QjUyNzg5RTFFQ0I1QzAxRjdFOEIwRUFCMkFGMzlCODFGRjRBN0EwNjk5NjQzCisyNjdENzhDMUI3OTQyNDNBRTdFNEE1RTU5NzJEMjY1M0JFODUyOUZGM0FERTE1QjhEMkQ5Q0VEQjVCMTI3RThFQURENzREMkU0NUZCNEIKKzQ3MDRCMkJDN0RDNkI5MDBBNjZCNUYxOUY0QTkyREY5MkQzNDMzQTcxMDRCODY5RTMxRUVEMDExMDFEQUY5QUQ1RTQyNEE4NTVDQkQyQQorOUYyNDA0MkFFRjc2NzE5NjE2NjY3NEFFQTlCNEQ4Qjg3MUY4NEVBNzc2RUNERjVGOTgxQUVCQjU4RDEzOUIzM0YxODhBQjJBOTlCODE2CisxRUZGOEQ4OEU2QTU3QzQ1OTU2RTdFQ0RGQUQxRDM1RDZGNTFCM0JENjJGNjlFMTVGRUE1NjQzNTVBMDU1NjNBMTMzREFFM0U4MjUxQUQKKzZCQkU1QzJFNTlDRDAwNkQ4Rjg3QTUxQkNFMDcyQkM0MDA5OERFMEJEQzMwNzhDMTcwNUNBMkI1MkM3QTM2Mjk3NjJGNTk5N0M2MkVCNworOTJBRDUyRTVGNTFBMDM1QTk0NzExMEI0MURBRjJDM0Q0MEY0NUU1QzdDREUwOUI1Mzg4MEIxNjE1OTBCNzA2REFGRDNBOTg0MzZGODJFCis3OEU3RjdDMERGQ0I2ODA0QjcxOUVGMEFFNzY2MzdDMzhEMDJGODA3NURDNjNGRDQ4RDg1QUE4RDY1OThEQTFENDg5QkRBMkJEOTEzN0IKKzU2RUZCNkJCMzcyMjFGNzNERTdCQkYwN0ExRTZENDY1N0FDNTZFRTJCQ0E1MzU2NUFCQjU3MkM4NEEwRDAyM0FDOTQ1NjgxRUVFNUI4RgorNTY2NzlFNTU0QjcxM0VGMjc3RDg0M0NEOTk3MkFGRTg1MUQ3QTIxMzgyNEZFQkNBRUYyRjE1OUQxRDk0NERFRkQwQzdGMkZGMDE0NTY4Cis1QTBGNzcwOTM3NkZBNzc1NUZBMEU5RTJFQUY1ODI3RTJGMjNBNDUyNTAyRjBDNjlDNTFBOTJCRjAxQzNDQ0Y5NDdCNTYwNDE2NENFQjAKK0Y2NTE5MjI0MDE3RDhGMEFDODg4N0M2RTgzRjBGRkNCRDBEQUE1NzUyM0QyMDlFQ0RDMjdDNkNEQzZBNzA5RDM4NEFDMjRGQTMzNTBGMgorNzI1OTNDNUZDMDVGQ0ZCNEYyRUIwRDU0MjRCOTU4RjNFNUI4M0QyNDYyQzhFMzE4QTk5NEI1MEMxRTJBRTFEMEZGNzk4ODM3QzZFNUM4CisyM0Q0RDZGOEQzNDA0M0NGQjJGRTlBOTQyNzExOTgyQkMxMTREMTQyNEI3RTM1OEYyOTdCMjI0RERDQzYzQUIxMzAzREM4Njc1RjEyQTcKK0IzODgzOEQ4RjM0OTVEMjBBRjNENDUyMDI2Mzk3QTAwMkUxMTJCODI2NkFBNzZBQTRDODA2NkRGNDM2NDdGQjJEQkY3NEU4RDM3MTQ2NgorRUY2QzA1QkI0Q0ZGMzZDM0I0NkQ2NjFCRDBCRURDQTc1M0NCMDZERjA3RUMzRThGMkYzOTQ4OEE4N0E3N0I5RkQwREE0Nzc4N0Q0RTg0CiszOTA1REVBQzJBODNGRUVGQUEwQzJGOEExOEQ3NTY4NTVCM0ZGMDIxODhGREE2RjU1NTE0MEUyMjM1MjgxRjFFQjBFRDBFMEY2RjI2NDUKK0MzNkE0MjM1NzlBN0VEMzUyNzM4QUFEMUI1OUZEQzcyNjIzMjZFNTgwRDM5MjZBNkJDRkI3MzNERjcwRkU4QTU1Q0I5NDhCN0I5Q0E1RAorRkQzRUNBNTk4RDcyMzgwMzMyMTZDMDM4NDAxODMxNzU5MkYyNkUxNzA4NTkxNzdENkVDMjg1RDM2OEE3MjYyMDEwNUM0RjY0NzUzQkIzCitDQ0RERjc4MTMzOTUyNDQ4RERFQUYxRDk5RDQxM0EzMTkyNTU2RDVFQ0RBNjA1RkY3NUVEMDYzNUQ1ODc0RjNEQ0NBNDZGQ0JCRENDNDYKK0I4ODNGNzE2QjZDNDQ0RDc4Q0UyNkRGNzQyQTkwRDlDODY4N0Y0QzdCOTM5RjQ2QUNDQzREOTI4MUMyMURDMDBBNUM3NDRDQ0I1NENFNQorOTI5MjEyOUYwMjdBRTA3MkI0OEFCMkY1NTBDMUZBNEIzNkI5OTAxODBGNkVCNkVGODg3NjYwRDUxNkE1QUQ5MDVBQUFEOTRDN0U4OTJDCitFODAxN0NBQjQxMDhEMUZGOTQwMTA2NjJERUQ2NThDNkFCN0IwMjYwMEY4NEZFN0Q5OTA3REIyMTNDOTFDMzI0QjI1MTVEODMxRjk5QUUKKzVBMUUwQjg1MjFCOUZFRDEyMzA5RUEwRTZBQTEzRDFDRDlBNUQ2QTQ5NDNBMjY0NzNBQTIzRjE3NTM0OTQ5MEE0RjlEQTc5NUFCRUUxNgorQjE0RjhCQUM4QTJBRDZDNjY0NkFFMkI0ODJCOEIyREMwMTZBQjE0MjlEQUE2OTdDQjMxNUNCMTVCNTg3QTFCNDkyN0YzNDVDNzc4NjMxCis5OUREMzQyRDJFODVDMjE4Rjc0MUFCNDRCODIxOTc4QUM4NjlERTI1MzQ3ODg2RDE2M0E4MENDQ0UzRUJCODQxQjdENjZGOUY0RTE3MDYKK0ZBOTBEQzJBMjYxRUQ0OUQ2OUFBMjFFOTVDNEYyMDQzNjM1OTg3N0YzOTBFMjZFRDhFN0FGRDM3MTYzMjAxQkU0MzRCODlBQTcxNDRCOAorM0U4OTc3RDQwRDg3M0MxNUZDRDEzNkU3MTFCMTMyOTJDOEZBMEI1OTQ1OThFQ0Y4REZGNUE2OTZFRTg2ODc1NEM2MjYyODE0NDRDMzBECiszMTY3REJGOUI5NDQwQUUwREI4QTkzN0VBNkExMTgzNEQ0NzI2QTVDMjEzODhDOUFCRjU0REE4MkZGRURBNUI3MkZBNTNFNjcwNEM5MTYKKzM4N0I4RUMzNjA4NUY0MTlBM0FDNzk2RDRDQUY0QzMyMUVDNUY1QkVENzYxMkY1Qzg0MTBGOUY0QzU4NEU3NjJDNEZENjFCMzY5NjVERAorNkQzQzRBNThGMTVCRkRGODNDNTY1RjQ1N0Y1NkRFM0Y4QkZERTM2Q0ZFOTY0QTcwRThFMDVEMzFBNkNCODdCMDNBNEE4Q0VEOTgwNTUxCis1QkM3Rjg1MzVEMjNDRDc1M0NGOUQxQ0RGOTBBNzE0MjA0NUU1Q0VFQjlEOEJDMkE4RUUyRjRCN0E0OUNGNkQ2QTBGRkEyMDRCQjU3ODgKK0Y3QUM1QkE1Nzk4NUJFRkFBOTgzMTUwOTc0RkMxMDQ4RTgyNEQ4NzUwNkI3ODc0Mzg3RkVENjgyMEYwRTgxMkZBNTM2REY1QUY0RDc4MAorNDQ5QkE1NEQxQjJBNDQ4OUUwRjg4MTU1NzIwMEM4MEE3RTk2MDVGNzUwQkZDOTJBMzBBMzg5NDNGRjZDNEQzOTcyNzk3Qzk3QzkzMjdFCis3RTREOTc0RDQ0MDQ0Nzk0QjM2NjdDRUYwODcxQ0VFODA3QzcwQzhBNzI3REQ5Mzg0NEI0RUM2MzZBRjIyMDhCMUY0RjQwNzcwRjQ1MTkKKzdDN0MzQkQzNkIwRTE2NjJGRjUwN0U2NzI4RTg2RDM1OTk1NDk4Mzk3MDczOTdFMUI2RTgzN0ZCNTZFNzQ3REU2OEZGOENDQUJDODM1OAorOTVGOTUxNzg0MjhEMTY1QUZEOUU2M0I0RjMzMjc3NzMxNDY5QzBGM0JBMkNGMzA0RUY2OTZFNzMzNDdDQzMzNkY1Mzg1ODFFNEU2RkQzCis4N0ZGQjNBNTE2MDcwNDU3N0UwMTE2RTUzMjdBRjEzMDIxOUFEQTg1QUM1MkNERTA4ODRGMEY3MzU3NkYxNTA0QTAyMEM3NTJGOEJGODMKKzhCQ0ExQzZFRDBCMTRCMzgxRkIwMkNDQUU0MkM2NEE4QTY1QTgyQjNDOUVDOUQ4NzE2QzA4NjEyMUQ4QTZCMThGMEU0MTFCRkUxNzdDRgorQjE4RjlCOUJDRDUzQzJBQ0Y5NzVBMTg3MkNGQUNBRTMwODk4NDRBOEEzQjZBRTAyRUQzREU0RDIwNzdDN0MzNzc2OTQ2RTJBNUQwRDNECisxOTA3MkRCQzE0ODQ5OEYwNEYyM0Y4QjE3RjRCMjk0RUM5MzlGMzZGREUxREU2ODE0NTNCNzdGN0ExQkZFMkQ3ODQwQTMyNDgxNTI0QUIKKzMxODZCMDZDRkVBNkQ3NTkzNTU3QUFBNjQwNjE4RjgzRDhDMjJGM0UwNTY0NUM0Nzg1QUVBOTRBNzM2QUM5MkJBMDg5MDJGQ0REMDg5NQorRUJGOTc1MzcxRUI3REYwMTNBNTlFNTFFMzMzNzI3RUExNjBCNUZDQ0EwMDNFMjdCRTdDRjY2NUY0Q0E0QkJFN0IxNEZDNzU4MTVFMDUzCisyMERDRUFDNkQwMzJENzE0OEI5REJFQTlENjI3MjRCNUM1MkQ0OTk5MDAyMDdEQUFBREMwQUU5QjJDQ0Q4MUI0Qzk5QjkwMUIzNDg4QkEKKzBFQ0MyNzUxNEE3MzBBQUI1OEE3QTYwOTM3QjU1QkUzRDI5RjY4QjVCOUM3NzZEQ0JGNEJDNzEzRkVBMDkxQkE2MDgzQ0IyMEM5QzBCMAorMThEOTRDMTAxMjJERDRDQzdDMDQyMTcxQjI1NTRBODRGRDQ4OTAwOUI4NkYwODA1MjZCODIwNzNEOThEMUQzNkM0MTEzODYyNDJENjAwCisxMEE1ODQ0QUY5MUREM0M5NTUyMDVBQjBERkM4Q0FBMUIyOUMwRkJEQjBFRUJDNjk4MTVEOUQzQzcyQjUyNTU4MjQzMUM3MDBGMDk1NzkKKzkwRkVDMkEwNkUzMTY3OTc5NUZGMEIwRjgzQUFGODM0QUEyNDg2MkYwNTc2RDMwNkZEQzI3RjkwMzMwRUIwNDMwNTQ4RDQ1RUY3NUNGMQorODU5QkE5ODQzOTU4M0Y5RkNEQzAyREE0MjZDOTg5NTVENjI0NkU0RDVGMTQ3MUM0QUM0RkZCMTk0N0FDOUZGN0ZDMENBNDFGQkYwMUQyCisyQjgyOENFQUM3MDMwQTZGNTZGOEIwNTc2NDQ4OTY1M0E3NzE1OUFCQTRERUU0MkIyMTEwQTY2MzREQTE1NDIxODhENUU1NzcwMjE5NTAKKzY5NEI1NzFBQzM1NTBFM0JDMkNCM0E4MDJBMkU4MzBBM0I1QzdEQjc3NTE2QkZBQzNBN0M4MjdENzlBQkQ3NUYxMEI3RUE1QkNBNTJCNgorOTBGRDE5RTA0MjZEMjUyNkZDNTkxQTM0NTQyNjZCNEUzODExNEQwRjE2NTFERERFMDk5NUM0Q0U5QTZERjhGQjBFRjAyRTc0NTM1QzM0CitGMUY1NjNFQzk0ODIzMUNEMTU5RTJDMTcyQTg0NzNFN0MwOEJDNTlGRjNEMDgxMEMwRUMwRDFEOUQxMDM4RTg4MkYwNUM3RTNBMEJFMUUKK0Y5OEY5REQyQTYwQUY5OEMyREJGMzJCOUY1MDAzRkUzQjA5QkEwMUE3NzQ0QkZBOEMzNjlCN0I3RjczQ0E2OTE1Q0RFRUJBMUQ3MUY4NAorOURGNERBMjNGRTAxOTVERkI2QUE0NzFFQTEwOUQ2RTREN0U4MDFBQzc3Q0ZGNzNGNEVENTg5RDAwOTA2QUEwODQ1Qjg0RDQ0RDc4MTg4Cis5QjRCNUI5NDc1OEYwMTNFQTE0MTE3MTUyNUFFMTQwMDQ0QzhEQ0RCMzc0NzZCRkFDOTI2MjhGQTE3NzIzQ0M0MzRDODIyRUYzMDdCRTIKKzRENzI5NTUyMjBCNERBQkYzNzk1OUI0NkFEOUM1MkZDMEY1RkIzREVDNzJCRTVGNUU1RjBCQzFDRkZDMDlEOERFRjVDQzZCQzk0QTQ1NgorRjM3QUFBRDlBNjJFNzA1QjZERDg0NEM1NjRCMjcwOEJEOEI3RkU1RjNDNjIxMDRCMzQ5QTJEODhGQzEwRUJDMUQ0OTAwQTVFRjZDNTNGCis4QzE4MjUwREJDNEJDNTExNzMzNjRCNjAzM0UxRTVEMzU0M0FEOTVFREMzQTA3QzYwMjczRTlCMDUyQzYwMDQzMUY2M0QxRTRERTBCRkMKK0U4NjA1MzdCRTA1MzdBMEEyQzlCQzUzOTExNEJEREI1QTM5NTE0MzdEOENDRjQ1N0REMUVDMEIwRkZCN0I5QUZCMjQwNUFGRkUzM0FBOAorNUYzM0ZEMDZDRDcyQjM4MkQwQTZDNkRCNDBCRUREM0ExNkM2OERCOThBRTZBRDgyQ0JCNjBEMUJDMjBEQTkzMkJGQTRGQTcwMzMzNDU5CitBMjhEM0I5OTk2NkI5QjRGMkU5OTNFOERFNzgwQjg5MEFCRUEzN0Y3MTQzRjk3MDJFOTlFMUY1OUY4RUUyN0FCMTVDQ0NDMDUxNUEyQTQKKzdERkY1NkREOEMzOUUxNDQyNUZCQjJCMzMxMTVENzg2NUFEQjY2OTczQ0QxNDQ0NkU1MzUwQjI4MUNBMkQ4NTVEMjMxMkQzREY1RjU4RQorNjk4NThDQkJCMDU4MDk2NDg0RUQ4Q0E4REI1MzRFRjEwMzgzNEI4RUYzMzgzNEI4MTc5RDlBNjE0M0I4OEIyNDRGNUY4NzczNzI4NDA1Cis4RDM1MTg2QTgzQTE1Q0RDOUNCMzJDOEE1ODg1QjVFQkE0RjczQjgxRUE0MTI4RDI0NDgxODcwQjcyMjNBMEYwRjI4ODhFNzdEQzAxQjAKKzJBQzgzMzc4NDZDMkE1MDM1NzI0MDMxRDc0MzdGRDExODA2MjYwQzJCRTdFRjY0NDA5RTdBNzVBRDA0N0Y3QUVCMUNFM0ZDQkQ1M0RFQgorMEYzOUJBNUE2M0I2QzBFRjkwQzlBM0QyMTY4MzM5NkEyNTBCQUEzN0VEM0M4MURCREZEQjIyNTNFQzBCMDlBMTg4RDc5MTE2ODIyMkI2Cis2QTA1RjAwQzEzM0Y0MjIwMjM5RjY1QTg4MTEyNzE3RThCMzE4RTkwNUJGMjhENThFRDE4NDkwODQ3MTlGMUZCMDE3NkQyNkM1NkFDODEKKzI4NjgwRDFBRDA3RDNFRkMxMTkyNURDNDVDQjc4NkU1M0YxMzVCN0RCQkY2MTA1NTRCNkQ5QkMwQkQzNjIyNkU1NUMyM0ZDODczNTFBMworM0MyNDE2QzhGMjgxN0IzQ0E2OUZCMEQzMzJDRUQ4QzBFMzNDNkY0MERCRjg1REVFRDEwQTdFOUUyOTQ4NTEzRjMxOTBERUU5MzEzMkQ1CiszMjA0NUNCRkY2RTQzREExNDVDREUyRDU2MUUzQkEwNzhCNzJGOTUwQTgwMTcwMjVBQTVGMkZDRUUwOEFCNEU3OUQ4RDE3RDQyMkM5NzgKKzE2NTY5ODhBRDYyMDVERTY5MDM1RURCRTUxNkQ3RTUyQTgyNDlCNEZFRDRFNUQxNzdEODcxODhGRTM1MTVDNTFCMDlFOERBNTczRkMxRgorODZCMzE5M0VFOTM1Q0UyN0U1MjEzMTcyMEQ4MjY0QzU4MEFDMDg3MjE4MjYyQjM3QTE5NEVFODU4OUI4QUIzMDg1NDVDMkU1QUUyM0IxCitCRTRFRTNCQzlFOTlDODg5MENENEExN0NDQ0VCNzQwRjc2NkQ5MTk1REZDOTU4QkM0Q0VCRDI5MUQwNEZFNjkxRENDNEJBN0RDMjBDQjYKKzI5MzhGMEFBOUM0QTUxRkE3RDZFMjEzRTFCMzZCMEUzMTlGMUU5OEJCREYyOTk5QzkzMjVFQUVCODYwNjlGMzE1OEMyRjJFNzkzNjVGMgorMjhCRUYwRDkwOTQ4RDA3RTUzQjlDNDVGODI2RjhBODc4M0Y0OUNGMDM3RDRDQjJDOTJGMkY2RTY2QzEwNDM0M0E4OTk1QTg2RTNEQzBBCitBOUE2MjU3N0ZGREVDRkVDQTJEN0QyNzgzM0U5MDNGQjA0OUI5MTc4M0U0MUQzNUQyMTZERjM2OTdGRjAzQjUxRUMzQUNDQTE3RTkxODcKK0MzNzIzNzc0OTA4MzlFNDkwMTM2Q0IzMzQzQzg3RDVBMDRBRDZDMTM3QTVGQ0VBQTkxRkNCRUNBMjYyOUMxMzJDQjJCQUJFMzkwOUM3MAorRUM1NUE4RkYxRERBMDVCOEIyQTBEMkE1MUJDNzQxMUI2QTZGMzU2MDlFNkVFMEM2MDdEQ0M2RUFGOTVFNDNFNjJGMTA0MkREMERBRjkxCitFOUFCQzIxMkQyRTJBOEZFRUFEMEQzMTBCQzhERjQzMjAyODkxNTQwQkYwN0ZDQTJFQUQxQTI0QkNBRTVFNEE2MTdFNzI2QUM0RTkyMTUKK0UwMUY3RUEyQ0Y3NjhCNzE1ODExMEUzRDE2MDEwRDI3Qjk1MkU4OEEzMkU0NDU3NDNDNkJGNTk4NDk3MEQ1MTg5OTgyMjFDQzk1QTQ3QQorOUY2MjdBRjBERTE0NzkzQzk3QzFERTU1Qjg1QTA2MjgxNkFEQURGMjNDRUJDNDM5MTZCMUM5NjZFREFBMTQyNEIyM0E1NTJFNTE1MDRBCiswOEFGQkI4MTgyRTlBMTExMjRFMTI5MjQ0QjE5QzdCQUUxQ0FBRTJDRTM0OTA2MDc1REJGNzRDQzg3RTQ3ODI3MjU0MURGRkZDRDMyRTMKK0MwN0NGOTYwRjY1NEY2NzQ0NTlGQjEzNkZFNkQxODEyMUZFRDg3QjkwREMwNUMyNDc4REJEMTIxRDNBNDhBNjg3REEwQkY1QTg4MkEwMAorMTQ5MEI4M0FCQzkzMkNDMDExRTQ1OEQ2NEE2RTNEMkNFMEY1QzlCMUQ2OUJDN0RFNjhDQTBERjMxNzM2MkZGODFCRDI3RjZGRDk5NjFGCis5M0Q5QjExNDk5QjhFQ0I5NTQyOEVBMDA3QTQ2NDlCMTYwMzNFOEQ1OTFGRkM3QjRDQjZFRTA3RTZGNzA2ODc5OTZBM0QyRTg1RURDMzEKK0MxREVFQjVEODRDMTY5MDc5QzE2Mjk3NTQwQ0EwQ0JBMTMwOTI0QUE3Q0I3NUMzNTdCNTkyRTA4RTQ3NzE2MjA1Q0VDOUEwMTc4RjU0QworOTI4QTMwQ0RGNUYyRTk3NkZGMDE3NDAxMjUwOEYyNkVFRDAzNDE3RTM5NzMzMkZEODA2RTExQjQ4NjY0OUJGMTdGMkVFOUEwQjg2MEFCCitDQTQ0QzMxNzg0REYyNUI1NjgyNTc5MDg0N0NCOTQxMUIyNDg4RkJBQUYwM0IwQjBGQTJDQzFCMEM1RDMyMEI2OUZGOTg3MTNBODc4QUIKKzNGNjU2QUI0NUZDNTYxRjYxRDAwOTAzMDFGRTdDQTdDRUVFNkI3NkU1N0FCMjIzRDEzQUZENTg0Mzg0RDBCQjVGMDdFNjk5MTU1MUUxRAorMkIzQzUyMzIwMzkzNzdBNjZGMTE0M0RBRjI1RTgyMzc3NEI4Njg5NzI5MTc2Q0U1NEYwRDUzQUEyMUU3QkY2NDU3QUJEQTY3MTBENTkzCisyNDdFOTNBNUNCMjNDMjRENTNFQjBENkM3RkQ3M0U5NEJBMTVCNkQ0NDNCMTBBODM4RDM0RDk2NkFFQUU4MUI4QTIwODk1RTM5QjgxOTgKK0QwN0RGODVGRTlEMDYzOEIyNzQ1NEU1NEQ4NDlDODNFMzE0OTlDNzVCMkQyRTg1MUQ1Qjg5NjYwODM2MUZCNTYyM0ZDMEZBODVDMjYzMAorMjk4Qjc1RDNCRjFENTNENzc2MjExOUVEQUNDMzhFRkFFNDEyNkRDRjI5QjNENzFDMEVGQzc1QUEyREYxRTk1NjcyQjZDN0QxREY3NEY5CiszODhCN0NEM0NCMjFGQTQ2RjAwMEUzMzBEM0E1NTYzMjZBNkYzN0FDREUwMDQ1QzBEOEQwMEFCRThBODY4RkI0RERDMjFDM0REOUM3RDYKKzIyRjBCODAxNjVDQzREODQyMjdCN0FFOTkyN0M5MzZERjdGRThGODkzRTMxOUM0NUJCOUY5REM1RTYxRDM3QUVERjlFNTIyQ0JCQjIwQworMjQwNUExMzc4NDIyNjZCNDhGMkJFRERDQjkzMjA2NjRCREQ2Njc5QjcyMDMwRTFCMDFCNUU2OTc5QzU5MkQ2NDlDQTJEQTU2QzAxOUJCCiswOUY2RTEzOTgwM0FDMDEyRDMyOTNCMUU0Q0M5MUU4NjI4NEFBNjg0MUI2QjlFQUQzMUQ2NzI3MTQwMzlENzMzMzZFMDIzODk3MzJBQkQKK0FCQjhDMTQ3REE5Q0Y0MDcxMTQwNUExMzI4RUUxOUUwRTZFMUVBNjVERkE4OTIxOTk0RjJCRjMxMEZCODVBMDhGNEJBQTdGQzU5REJERAorMzUwMDA2MjAwREYyN0MwOTlGMjIyOTg2MkNBNUU5QzA4NTFCRTRFMzJEMDA0NzVGMjU4MzM0MzU5MDEwRDgxNzhDQTREQkVFODIyMzJDCitEMjFDM0NGNjY2QTBFQkY0QkQyMDMwMEMwQTcwMDE2ODA3RTQyRDE1RjlFRTI0QTE5NEVEMDRCNEM2QUVEODg0REM3MDg4QjZFMzc4NTEKK0ZBRkQ3QURGQ0Y3RkFCQjBFNjMzOTQ2QjkwMjkxNjBGMTBCNjI2MTMyODlCOEM0NkIyQjc0RkRENDdCRDRGNEU3QjUzRTk2REY4RjlDMworNjk5MjU1MDhEMzQyRTE1QTREMDk0M0IyMjM2NUI4RDhGOUNCOEY1RDAwREU2QTQyRkNGOUZGNDNEMzY0QzAyREZEMkY0NEY3MjgxOUU2CisxNkI3ODhBNERDQkVDMUI1RjlBRUJERTRGMzhBMjU0QjRFRUE0QTM0RENBRUE4NURDQjdGOUYyQkY0N0JCODdFOTU1MjQwMkMzNzI2MjgKKzk1NkVFNThBMDFFODZCQUUxRTA4M0Q3MTI5Qjc4MzdENkU1N0I3REU4QzE3OUJEREU2NTI0RDlGNzU2MTg3MjUwMjY4NTRDMEIxQTE4RgorQTY2MkNENjMyNDI4NUFGNjVFNEQxRjg2NjVGMTUzOEYyRDg1RkY3RDUwMkIzQkZENEQzMTBBMzA4OEE4RUU2NzgwRDU0MUQ5QUM0Njg3CiszMUEyN0REN0RBODBGRUJCNkY2MEMyN0JCQ0EwMkRDOThBQzU0MENGNDVFM0I2RDUyREU0NkI3QzZFOTg1MDhERERGQ0IwMjBBQzU1MzMKKzEyRjA4QzJBQkYyN0I2QzM0QUQ5Rjg0MUVCNzgzNzNGMkYzNjdBMjhFRTNFMjFEMkJDRkNFNEMxNEMzNEMzNjM4OTc4QzQwQjEzNkFDNQorOEQ3NDdFRTA2RTE5N0FCMDdBREYzNzA5RTczODMzQkM3ODY5MTdEM0VDMDQ2NUVFNDg5NDhFMzk3RjhGNzI1NkVENEQyNjE3OTRCMjhFCiszOUQ2RDRFRkZDRUU2RENGMEMxNDI1NkRGNjgwMjZCQUEwRDUwQTczN0UzMDM5MjNFNkQ5NTZERjNGQ0UyOTgzRkY0NDNCQzFFRTE1OTUKK0VDNTdFODZFMzc3MEY3M0I4MDJBMTUyRkJDRjZCNDM5NEVFMkRCMzBEQUJBNjlGMDEyNEU2QTc0QkZFRDc3MTVFNDY5MTUwQzI1NTNENgorNEZDQjU2Nzg2RDMzNEYzMzVGNEVDNjgzNkE2MTNBMjYxNTI5RkE4NUI1MzQ2OTU4NUE2ODNCQjlDQ0FEQzI0QUM1N0UzNUJCQTZCMDg2CitGMzg4MTE2MTMyNzkwNkIxODVFOTU4RTcwMEE3MEJFODI2MjdBOEY0RjQ5REEyMjAyNEJENUY2RDBFRjMzNTdFQUMyNDE0NjE1RDRFRDIKKzEzMEQzRDhERjIzQzUyRDJCNTczNzJCQUE2OEJGMTkwMUI4NjNFNkEzNkVBMjMwOTQ5NzFCQ0UyNjJGREQ1QTY4QjBCMjBGMEU5RkUwQgorMERBRTMwQ0E1NkZBRDk0QzlDRTQ5ODc1QTREMDZFNzc0Q0RDNDY4NDU4NjZCQ0Q2MTEyMjg4N0RCODVCMjA3RTI4ODAzNTM1Njg3RTM5CiswMjhGODJEOTQzOUZCNkI3RjM0RkZGMUJEOEUzQzhFMUM3REYwM0RGRjhFM0MwNjAyODQwNUYyRTZBQUY5N0E1NDA3NUIyQTFFQkNFNjEKKzNBNUNGN0M3MzA0MkQ3NDgyNEEwNEQ1QjIwNjY3MzAzNDhCMDdGMTg4QTg3MjVFQUIwRjA3NkJFRjI1REE4QjgyQjM2QjA2MUY4NjZBNworQkYyM0U2MDk3ODBBOENBNkMxRTdBNTJBQTJERjRENUVBMjJFNkM2NDkxQjVDNEE2NDhGMzc4MzhBN0IxRjdCREQ5ODg0MDY1MzM3MkEwCis4NkE3QUZENTZDRTJCOTczQjVGRjIyNEUzNDkzMEFERkEzMDcxREJEMzM5NjE4QjI0NUFEMjdCQUZDODA1QkYyQTQ5QTRFMjk2RjE3RDkKK0VCMjU3MDBGOEU4RjBDOUU4NTQ4RkFCQjIzRDJDRDhDRUJFODYyMURGQjY2MTE1RTYwNjMwQTFGQUUzODk3RkQ3MjI2OUIyNzUwMzg0MQorNTk0M0Q3QTJCNTcyOUE1REM4N0UyRjhFQzgyNTg2RDJBMjk3OTAzM0MzMTg5RUU1Q0VDQzk3QzI3NkI3NTFFN0EyNjkwNDdDMEI0NzMxCis5RTM4QzhBNUVGQ0ZCMEJEOTBDNTQ1NTYzOTcxRjdEREZCNzZDMjhERDVEMjk3Qzc5MDdEMjBDN0QwMjBGMDQ1NTdGNTU3QUQ2NkU1MUYKKzlENDJGNzk2NzM2OTk3QkM2NDg4ODMxNDRDREQ5RUI0Nzc0MzFBQjk1ODNDNThBOTRGQjczOTVFNUY3Q0MwRkY5NDM0QTk3RjU5MTU4MAorNDg1MDlCNzAwODE2OEI2RTg3N0NCRkUxNDA4M0MxQ0MyQjE5N0NEQ0Q5MzA2OEQwMzUxMDJCMDI1RDUyQThBQTQ3MjFFMDE5REQwMkE3Cis5OTNFNUM3NEE2NENDNEQ0MjJEQzAzMjEwQTI2NEY3MzU2NTE0RjEzQjU1NUMzNzM1NjZBNUQ3OEU2MjcwNjVBRDM2QzI2NTEzMjQ2RTAKKzAxQzlDMTU5NTIzNTdBOEQ4RTc1ODFFQ0M4QzBBODZBODgwQzczQUM1MTlCQjEwQzFCOTcyMERGNjUwMUZFRkRDRTU1Q0IxQ0RCREZBRAorNDJDM0YyMTQ4RUEzNTg2MUMzOTE0NzhCOUE4RDA1OEZBMTIxQjRBMjYzOUU3QTYyNjU1MEY2RTE4OTIwREEwNzk0MEY1NzNBQTI5OUY3CiswNDNGM0VDQkZDNjI2QzE2QkVGOTJEOTM0Njk0NkEwRTdCQ0FDNTI4QUUyNjRFQTM3OTczMjk1N0FDMzVFMkM3REVGQjQxN0ZERkJDRjQKK0IyOUNBQUYxMTMzNUMxQkRBQzUwRDk1QzBBM0YwNkUzNjdGQTBDQzQ4MzE3QUNENzJEQUEzNUE3NkNBM0ExQUMyOTc1QkEzRTM2OTAxNQorRjRBQjhDQUFFOUI4MDREQzQyQjdFMTlFRjlCNzNDM0VGMzk2OEI0Q0JGNEM3MDk3QTRBRERGODM1OURBQjFDNkUyQzQ0MDc4OEY4QkNGCitEMjcyRDgzNjZDMjMyQjcwRDUwRTIwOUU3NjYxMzRGMEMxRjFFQ0RFRjI1RTA1MjAwRDlFNjZGRDZEMEU2QTZERjVDRDFBNjJBNEU3RkIKK0RCNTRCNDk1Q0RFNURCMEZEQTg1RURBNEQ2MjgzNzRFMEU2RUE0NTFFQUU2NzQ1OUQ5MkFDODRFMzhGRkI1MTU2RDFGQzBFRDI2NEQ5QworMDUzMTkyNzYzNjFGNTE5MkIzRkUzQUMwNTIxNTRFMjQyNUQ3NzY2NkUzODdCODg4NDFGMkFCODA2MkY5OENDMTFBRUU1ODcxN0JFODY3Cis2QzI2RUQxRDA2ODM5RkI4NjJEMkQ2RjE0MjE3RURGQzQ0RDM2MjgwOTBENEU0QUU2RDhEMDhDMjkyNURFQzYyQ0MyREVFNENERURBNjUKK0YxRkNCMjJENTBENTczNDk1NjY5MkNCQkFGMjVBNTE4RDIxMTJGNTRFNkQzOEY5QzJCOUNENjZBMzhCQ0EwRTgyQUFFM0RERTQ1QzNBQworRTc2MUI5QTEyQjEzNTc3MjU4OUU0MjVBM0I0RTIyOUUwRTgyNDkwNjkzMjhCNkEyMjJDNDZEQUY0RjdDNjFGREFDMTk2N0M3QUY2RTEzCitDMzgyOTNGNEEwQUUzREY3MDBFNDBDMkRFOUY4QkM4MDI2ODZGMjM5RjdGMEM3QjQ3RTAyNjFGNEJFOEI1QzE3NEVFODZBRkIyNDhGMDgKK0QwQ0Q5NDU3ODg2N0Y0NzMxNjE3MEE5MDlDMDUwMTk5MTUzNDNDNkM0Q0UwQzk5NEFBMTA1RjcwRTU4RTU3NjU2NEE0QjJCMDg5NDREMworMTgwQ0VCRTY2QkU4OTRDODQyQzA5NkY5MkNBNTNFNjcwNEM5MTYzODdCOEUzNzREMUI3MTc2MUYzOTMwNDIyQjBERjhBNEUyNDc4NUMxCis0RUVFOTIwRTNDOEQ2OTcyNzk4MTRBNkQwMjc2RkVDRDY2RURGMTI3NDExQTA3RUY5RDIyRUJBRkU3QUY0M0M2QjYxMjJDQjBCMTREREMKK0QzMzY3QzhBQUM1NTlBRjg5M0FFOUJCNzNGNzg0QkIxMEU2NjU3RjM0NEFENjkzMzBDMjRBNEUzQzQ0NkU4NkUwN0Y1QjU5NkQyQzk4NAorNEMyNENCREY1MUNDQUVFREQ0RDYyRkY0OEM3RDlGNzRDOTA0NTFGQzkwRjQ4NUYyQzJGNkMxMjU1NTZBNTk5MkJBRDhDODdERkZERDlBCis3QzA5MkFEQzlBQzIyMjBDMEVDQ0JBQkExQjRDNDk0QTRERjQwQ0U2QkM0MTJEMzdEMjdGQUZDODNGOTU1NEM2NjRCN0UxNUIyQzRGOUEKKzZCQ0UxNzJGRkRDODg1QzhENUE2RTQzMDlENDcwMzFDQzFBNTdEMTVDRjMwRjQxM0M3MDA0NDVBMTE4MDU4NzgzNjM5NkVDRjdBNDUyNgorQkIwQUNBNTFGMjkwNkNFMTQ2RjhDODRBMUIxRkUyNDU0RURFRTE2NTcwRDU5NEU3OUI4OTRDRkMzQUIxNjBBMDE5RTUwNzM0N0U3NjNBCitCNkNEM0FERjQ2MzkzRTA1NzlCQTQyNEREODUwMjQ2Qjg3MkU4ODE2OUVGRkQyNkU1OTBBMTkyRUYzNTM1REZGRDdDNTQ3RjIzNTgwNDIKK0ZDNUM5ODM4QjNBRUQwMUYxMDk2QkJGQTM1NjVBQkZGQjZGMTNEQTA4ODBCNTYyNjYyRUREQkQxNEZFNzEwRURCRTY2QTNFQTFGRDgwNAorODVEQTUzOTBEM0Y5QUE3RDJGQzdBNkNFNjdBRDc4QTE4MUJCODUyNEI3RDIyNDNBMjJEOTM2RDYzMUZEM0EzOEI2RDdFRTQyMTBFM0Y5Cis2N0U1MzZENzI0QjVFOTUwNkYyQzJGOEVEOTg0RDBBNzZCMjhDRUY2MTgwOUVGNDlEN0MxOThCRkVCQkI5MTIzMzAyNjUwNEE1NThDRDQKKzdCNzk4NUExNDU4QjE0QTU3MEYyQjIyQjE5NkFBMEU5MzlENUY4QjQ0MzlDNTNEOEMxNzg2NDM3NkM1Mzc1MTMyOEUzOTFCQTA5RDI1NAorMDYyQUEyNkNCQTYzNERBRkQ3RUFCNEEyMDY5N0Q5RDY2RUY1OUEzNzE4RkYzQkNBMEE2OUEyMDNFRTBBNzBDQzU2NDI2NEVCRjQ1NjdBCis3MUE5NTg5ODYzNENCNzY4RTg1QzFDOTQxOTRFNkM4QjAzMjA3MzVERkRFQzg2MEQxMTBBOUUwRjBGMUQwQjM1MjhCMjRERTVDODUwMjEKKzdGMjhENDIwM0Y1NjBCRDE5RENGMTQ1RThBMjhGOTA2NEMyNDU5RDRGQzgwQUFBODFBRTEyREU0QkUxMjQyMDY0MUQxRjgyRDYwNDE2QworRERDRkU3ODI5ODQ5NTVBMTBCNTc2RkQxQTM4QzE2NTI0MzFGQkVBMEY2QTAwQzQzREVGNTA1QjE1Nzc3REJGRkNEQ0RFQ0JDQjg0NkFFCis1NzAxRDRGOTRDQkQ4MzVDRUI5OEJFRDZFRTczRTEwMUNDNTU1MDE2MzdFRjYwMDkzNTc3MDk0OTNBM0IzQTEwOTJGMEFDODk2MzY5RkIKK0VFQzg4N0IyREM5Q0Y1MDc5MjA2MzRBNkE3RUE0OUM1RDA2RDZBNzNEMDZGQ0Q4NTBCNDkzNzVBMEM2RTk0Q0RFQUNGRTZBMzQ1RDBGMAorMjIyMEU3MUZEMjg5MDkzQjAzMDFDRTlEM0EwMDA2MkUxQjE2ODI1RjZCNDQ4RTJCOTc2MzFCRjdFRkU3NEFGRjgzMTU3MUREOEM2RDY0CiszNDBEMkQ3NDk4M0VGMTkzMUIwRThCMUQxOTE0REJFRDIyNjM4QjQyMDJFNDE0QkRDMDkwQjI2QkYzN0U5OTAwRDg2OTFDRUU4MkJCMTUKK0NCMkZCRDdEODcxMjBEQzFCQ0U2MDg2RTZDQkY2RTVFQ0FBM0I5NTRENUZCMTRGOTg3RjE3OEE0NTIwRjZDMEJENjMxQTNDOUZDMkQ3QQorMjdBODdGRDY0NjZDNzFGOTkwOTNENDU3QjIzNzgwNzQ4MEEwQkJGOUIzRTlBOTMyRjJCNTREREUwNjRERjYwODg1NUI1NzI5MzM0NEI2CitFRTY3ODE4OEM4MjBBQTk3NENDOTNDREQxOUMyQUZBREFCNzEwOUNDMzU3Q0ZCNjMzQzNBQzZFOTRDMzc3NjA0QTk3MTQzQjJDNDZFMzQKK0VCQTYyNEY5RThEMEVFMkY3MDczMDkzMUQxOEVGNDhCQzJFOUQ4OUJDQ0VERjQ0MEFEMjFCQTBBQkJGMDdGMUYzQUVFOTFDNjgwQkIzMAorMzVFMTE3RkVBMTg3Njk5QzY0MzI3OTU1MzY1Mjg1OUI0RTRGMTRGMTA4RUMxN0MxM0JDNEY0RjBGMUE0RjNFQjhFMTA3MDcwRUREODBCCis2NTQ5Njg1NzBEMTBERDk2RTNBRjNEMUNFN0U5MTg4MDExOUMwQzEzQkExOTU5NkIyNzYyRjAxOEU0QjUxMzFDOTI5QzdCMjEwREEyRkMKKzE2MTAwRkNEOENEQTM2MURDRjkxQzk0MzFEMTVDREYxOUVBNjE5MTJEQjkxMDAxQTBBQkU2MzZEQkIzMUJBRURDQjY1RjhENDBDNzQzNQorQ0U4QTE4ODE2OUYwMEQ1Q0NBQjA3NTBFQTM3RDIwRjE4Mzg2MDcyQjVFMDUzREQxRjJDMUM4MTVFNTA0MzBEMDg0RDIyNkUxMDhDNzgyCisyQkU0MDI1QzdCNkZBRkE0NDkyRDFBNkI5QUVDOENDQkFEOTYzOThBM0EwMjgxODEwNTlEQzMyOTAxRDlCNjVBNENCQzk3MEMxMURFQTEKKzQ1NjRDODMyRjQxQzVDMjc4RDk3QUFFODk5RkQxNTgxRjAyOTVFQTkwOENEQzQ1RkJGRTQ2OTczMEY3NkE2NjU3MDVCM0ZBOEFDMzAxQgorNDAzMEFEQzhCMDgyMDY2OTNFQ0NDRTUwOUZCQzlDNDAxNjM5NDlFNDVEMkUwNzJCQkRGNkVDMTdCNTZFMzlCNDlDNTU2NUM0OTI4ODMzCis0NEY1MDdFOTI2ODRDNjRCRTI0RDM3MEZEMUJDRDJFODA0RkMzMkM1REMzQzZDRDJEMkM4QzQyMjE4MjBFN0RCRjI0Mjg1RTBERjc2NjMKK0EzNDhDN0E5MEJCRUNCREVGMzIxRDkxMjhEQ0ZEMTY1NzY4MEMwNjY5NjA4NEEyRDE3ODJDRkE0RjVGMEE4MkNDODU5MzAxNDdBQkNGMgorNjBCQzU0MTgxQTUwQUIxMkJERjUyNDk2NTA0MTVBMjZEMDlBQTFGNTVBMEJBREYxMkI3NjBBMzMzRDNEMzVGMTVEQUU2OEJFNTg1NjA1Cis3NkRBNkU1NzI3MTFGMDkxOTJCMUM1MDU3MkJFQTYyM0VDODZFMzNEMkQ1MTU4NTE2MDk5MjMwRUY4RDRBMDNGNEFFMjlDRkUyRTQxOUQKK0FCRTg5QzJFRkYyN0I3OUEwMTE3NjE1OTYxRjg0NzVGOUFENzBEMkNBNkZGRDJCOENCNjI5QTIxNjYxMDYxNTkwOTVGREE3ODg3ODA4MworMzhFMzQ5Q0VCNzIwNjlEQUM3NDJGQzgxMjY3MzQ3RDA4OENGOUQ3NkM5OTNGRTcwNzhDOEZDRjM2NzJDNTY4OEM2RjZDQURENkMxODE4CisxN0VEQzZGQTY3RjFEOEI2RTQyODYwOEI2NjdCRjY5QzdEM0IzRTA2RTc2Mjc1NkNEOUEyMDUxMDI3MjlBNjJCRDBEMDY1NzkwRTQ4MTQKK0EyQkU4MjVCQkUyOTQ2N0NGMTM0MzlBRjhEREJENzEyQ0FFRDUxQUU4MDIzRUUyRUYzRTgyQTMyMjExQzE1MkEzQjAwRkI1OUUzQUQwNgorMTY5MTE3RkEwNTk5OTVCODU4MjdDNzA3MzZFNUM1QjkyQTdBMDUwQUY1ODZFNDI3NEUyQjhFQjMwMUIxQTQ0QTc4QkRGQjdBMUNENUJECisyMDQxOUI0NkE3QkFDNzJEOEI3NkFCNzlGNDNERENGNzM4OENFNjk5NTNCMDcyMjlDQjA4NTM3ODQxNzUzQTc3OUY4REIzNTA1OEJDQjcKKzlGRTBCOTJDOTVFRjJGNUJCNEZGOTJBMTdDQ0MxN0M3NTQ3RUU4MTJCRTAyREM4N0E5N0I3MEEwN0I0N0YyNTA5NkNGN0ZCMjhFRUE5NQorOTMzMzJEOEZENEMwNTQ5OUMwRjBCNURDMTZCNjA0ODZDNzk0NUEyNEM4RjVFRjI0RUNGMjZCRTM3REMxQkQxNkNFMDhEOUY5NkJDNDg1Cis3M0MxRDdBODg3MkEzOTBBNEZENUUyMzc2NTg0NUM2OEVENTk0NTZENjZFQjRCRTY5N0Y0NTRCNzFCRjZFOTc2QkZEN0M3ODE5QkRGQTEKKzREOEREN0Y3NzdCNDk5NzczQUM0NTc5MDJEQzEzMDU0NEEzMjk1N0U3MjNBQUYwRUU4M0Q0NkRDNkFDMTU3OEVFMDNDNTVCODlGM0ZEQgorQUY2MEM4QURCNUNFMTBEQUI2MDBCREVGQjVGNzkzQjBBRDhBNDc1N0E2NUFBNDkzQkJCQkI2MDNDRkRBREIwODc4Q0Q4MzA0MzM3MEI1Cis3RjFDMTlFMDJENUVDNDNEN0YyMTI4QzhGQzlCMkFFQzRDOENCMzg2REFCNjAyOTY5QTA2RUQ0OTk5NTRDMEZBQUEyNzNCRTE3QzJDNzAKKzU5ODk1QTc5NjFDOTEwNUZFQ0RDMTUyQTFDREU2ODE0RUJBNkUzQkZCQThDRTExMDM5M0UxMDQ2RkQ1MUExMDNCRTE5NEY0QjlCNUJGNworMTIzOTZEQkEwMTJCRENBMEVEMzhGNjEzOTRCREE4ODYyRENENzBDODIwRDMwMUE0MDBCNTdGMTBGMTExN0E0QjA5MzczRTlCRjRBNzJCCitFNjIwNEMzRjU2Q0I5NjYxQ0QxNzVGNzJCMjM1MUE2Q0FBNjQwMUNCNTY5Q0UzMzM5NDI5MDE1QUIxQzY5ODRGNTE4QzZDMEQ2MDY0RDcKK0EzREFGNkVFRjk0OUVDNjMzQTY3MDcwRDU4NzA3RDZFNkUwMUYyNjZEM0Y1NTJCNzc3MjFBMEQ1OUU4RERDODZGOTg4MzMwMDlENzM0MgorOEZEMzdDQkIwREU5Qzg5NEU5OTY2MjgxOUMxOTZFOEE5RkRDQ0U0N0M0QTRCQTFGMUVEMUQ5MERDMjMwQTU0MEIyNkMyMThCOUIzMEUzCis4QzIyNkEyM0IyODgyM0RDNkQ4NEQ0OUE2RTM0NkNCMkY3RjlGNzFGQjEwNkE1REZCMzZDMTZDREZGMUQ2NTFBOTc1NkJCM0IwRjAwRUYKKzBBNzBEMjhERUM3ODFGRUQ1QUQ0MTc4NDQ2OUU4OEVDREI4NzBDRjg4Q0U5OUZGOEI4Qzk5NDc4MzAwQTMxREU4MTA1NDU1Q0Q1QTZCNworNkEzREJCNTE5Qzg3QzFCNjFCMTVFRjI1NEIzODQ4Mjg4OTY4Nzg5QzFGNUQ0NzlCMTBBRDkyNzJGQjc3NDM1NzY2QkE0MEFDOTg4OTEzCiswN0Q4QTQwQzE0RUQwQjc4MjkzNDQ5MUFDQzgyQTI4NEE4ODZEMjA0RDQ1RjFENTcxQUQxNDNBQ0E3Qzc0ODFGQ0FEQzIzNjZGOEFBMTQKK0RFMTlCODI1NzRCMkZEOUVFRDcxNTNBNUI0Nzg3N0QzRDU3OUM3NEY4QjkxRDUxNTVBRjBGMzQ4ODJDOUUyQzdFQjMyMDZCMUI0MTIwOQorOUU3NzZEREQ0RTJFMjRGREFBOTg1NTdFN0M4NzM0N0Y1NkUxQjFENkRCNzg2MTg0ODk2NkI2RDBERDIzMkZDMkNDRjg5RUJBNTI2MDBGCisyMDg0MjMxN0JCRjRGOEI0NEFDNEFDQkZFMEE0Qjc3NzIyODIzN0U1MkQyMkRFNEEzQjhFM0FEM0Y4NjQ1NjdGNzg1NzUwQjIwNjRFQUIKK0ZGOTY1N0IzNjIyRTVEMzlGNkJBREZDQjY5MDNERDdEQTkzNTAxOENCMzZDNjk0NTZEMkM4MkVENjk1NEU0MDY5NDJEMEVFMzEwQ0EzNAorODAzMzA5NjAzRDc3QkQ0QkEyNDhDMDJGQ0UzMzVCQTk1REVBOTRGRjg0REQ4MDU0Mjk2NkM1MDAwQjYxMEE1NTkxOEFDMkNBODZEODM3CiswQzlDOUY0QjU0MTI4NzU1NUQzQjEyM0EyN0E4MzU0NURGMjhDNzk3MEZCQkRCN0Q3MjE0QzcyN0FFNjg3RDAzNDg1RUE1NTVCNEJFREUKK0M0NTg4RjQxRjExOTVCQTc1MThDNjZGRDQ1NEE5NURBNkJGMTQ0NEMwNkJGRUFBNzU0NzBGQzVBOTE5NjU2OEE5RkM3M0RCMjg0OUQ5OAorODcxQ0UwMDU1MzEyODQ3RjM3NkQ3QzEwNUI5NUZCNDFBQUU2MjlCRkUyNDFFNTJBQjkxM0JBQTVBNEY2NzVDREYyNTY0NjMwMDQxNjI3CitFMkE5RDhDQzE0NDg5MDgzODY0RTgxMjFEREYzMUM2QkU5RTBDMUYyOEYyRTQzNzE2QjQ4QjJDODUwQTZBRTRERUZFNEM3MkI0M0ZGQkMKKzdBREMzMDc0MzcwNDFGOTA4NzYzQkM4NzYyQzczNUFEMjg1NEZDNDk2NEI4Nzg5RUQ4MjVCNDY4RkE3MkQyQUVBNkUwRkI0ODdFNjdCMAorOEMzMDExOUFERDJDMERFREIwNzM5ODcwRUEwMjBDM0FFRkNDMzA2QjQ2NTdFRjcyN0M3QjlENDRFOUVGQTlEMUU5NEVGNDVGMDQzMkEwCisxQ0EzNERGMzcyRDEyODY2MzlEM0Q2MjFCQkVBMEEyNzlERTE3RkFCQUNGN0MzNzAwRUUwQUI5NkI5MUU5QzY1RDAwMzA3QUY1QjdEM0MKK0M1RkU0NEU3NDlDQzk5NzQ1RUJDMURBRDRFRTRGQTMyMDlBOEY2Qjc5RDUxQkNCMTREMTZFNzE2RTU3MzQ5Q0M3MjcwRjc1NjNERDg5MQorMUY2MUVBM0Q1ODdFMEE3QUI2RDVGNTJDNTFDRUVFNTAwRTFBNUI4N0U0Njk4Rjg1ODcyQTc4RDI2OERDNTg5RURGMjM1OTU1OTU3NkJFCis2REZDMTdBQ0IzQUYyMUNDRURERTlFMkVBQzU3NzkyMUQ0QjY2NENCM0E5OTE2MjE0RjE0RTBFRTBBNUE3OTRGNTJBRUIyQTg1QzFGREMKKzc1NDQ4RjZFOEIyODU4M0M4NDk5NUQyMzUzNDU5NTM5RkRCRDNBNzg3MDQwNDdBOUNBNEY4QkZFRThGQzQxNEU2QkE4NUYwREYxRDk3RAorMDIzNERDRTJFRDY4RUUwRTk2RUQ1NzJCNjZEMURBRkQyREQyRjBGRTdCRUNDQjRDODUxMjk4RkRCOUY4OTRDQUQ4NThBRjQ5NjhDRjlCCiswMDFGQTE1QUU0QzdFMzhGRTI0NjAzOUZEODM0Q0NFRkM5NDY1MkVEMDEzQUU2RDRGQkY0QTQxOUM0RDFBRUUxOEFENjgxRThDQzg2NzIKKzRCOUVCMUM1REIxM0U4MzlCMjE4QkY2QjcxQUVGOUFCMjMwRDM3RDg0OTRBNjk3MDVDNDcwQUNCNDc4NzVDMzg4MDk0NjU0NkE1Njk0NAorOTgxNjAyQUMyMkIzNzk0N0JDRDFBMzYxNEY4Njk1REUzMTQ3MzgzMzAyQzBGMURCRDNBNDFEQUQzNjEzODFFMjVGNTFDNDkyMjkyMkU2Cis0NTU1Q0E2M0IyRjUwNkU0QzFFQTdGQkNENzA3QTFDMjg3OUVFNEU5RUM0OEMwQUI5M0ZBN0MxQzlEOTk0MDk2MUI2RUU3M0JBMjlENDgKKzA3Q0REOENGRTA1QUFBRTcyNEFCNzE4QjJGMEYzRTZDNTBGNUY1M0Q5QkE1NzJGQzE0RUM2Mzg3OEFFQ0RBRjk5MEE3RjUwRUJDMzFBNworMTYzQTUxN0YxMTcyMUNDODYyRjUxNTZBNjg5MjM0ODYwQkEyQ0ZGMTlENkZCMzBFNjI3MkY4QUU5OTI1Q0E2QkE5NUY1NDMyMzNCNjNGCisyRUU3NDZFREQ3MjVGNUYyRjUxNTE2RjFERjE0MzlGOTA2MkExQjJCMzIwNDQzNEYyQzIxODg4RDM4QTRGRjY3NkE2Qjg1MEUzQTY4MTcKKzA0OTFGNTMyMzExNkVBMTFCRTEwQTA0OTA0NzBGNTkyMDQ0Q0Q0MkFFRTE3NDkxRjI1NzREQzIyOTMyRTc1ODMxOTBFOTNEMTgyRkQ3MgorNUZENkVFMDFBNjNCQ0IwMTQwMTlBNjkwMjc3RThFNDIyQ0ZBNEIwQTUwRkFFMDcyRTM2RjRDNkYxNDE5M0Q1NDRGQkUyMTZBNzhBM0E0Cis2ODlBNEM2RUNCOEJCMTQ5Q0I4RjZFQjZEQjAwMjk0MDlBNDhDQjdCNDU0RkRENzk2RDYzOEE3RUM3NDNBMTVFQjVFRTY1REQ5M0Q2QTIKKzNERkRBMDRCOEIwNDBCODU2Qjc2NkZFQTQ2NUU3QUNEMDVDQUE4QTNGMTNCQTREMkIwNEFFNTUzOUQ0MjRCRkEzNDIyNzA5MEZEMTgzMQorN0VBQUE4MzUyOEIzRDQwRTVDMTA4RTM5RUIyRUNGRjIzMURBMTRFOTkwM0VGRUNFODA3MTNGREJDQkFDOTA3NzM0NEZBODZEN0Y3NzMyCis1MzVBMjZFQkQ4OUE4MDY0OUIyNkYyNDdDNzEwRDcyNTM2MTI3OEU3NzMxODcwMDk1QUFFQkNFOUI5QzA0QTczNjk4QTI4Q0U1MDlGOUQKK0ExRDg4RTlBOENFQ0NEMDIwM0MzQTNCOERCRkM1NjA2M0VDQjE3REFFNjBDMjZBODA4MTRGNzFGRTEyQjIzRUIxNUJBNTc0M0I0RjlFMQorMjRGQ0RDOTlENDdEOEE0NDlBNEU3QkJFN0RFOENBMzZEOTQ2NzU2REQwQjk0NDM4RUU4MEE2NzQzRTY4M0I1NzIyM0VDNkYyMDYyQjMxCiswNDIzMTNFQ0UyQThFNjQ2MzYxRUU1RTI3OEVFNTk3RDc5Q0QxNkRGREMyNDAzNEMwRjJFMDNDNTREREE5MTMyQjM3QUQ5M0Q1OTg2NTEKKzU5RERBNzkzQzJDQUZDNzY1Mjg3RjdCOTQzMTkxQjA2OEI1MjBDRkFDQzEzNEY0N0Q0NTQxMjFFRjE3NTMwNjU2Nzg3NjBEOUE2QjkyNAorQzkwRDdDOUQ0MzI5NjdFNERFMDZCQzVBRUUxMjU1NERCQ0JFMzY2MTlDMDg2NUIxOUM5RTkzOUYyODY2NzdENDY0OUM2MkRDNzlBQUI1CisyNEFDOUI2QThDQ0E2NkM0NkM4RUUyRTVEREQ0RTExM0I4QkMwRTM1Njg2N0IwMDFBQUQ5OTJGMUM4NTk0MENCMjU3MzYyMUM5OTg2QjYKKzJFODMwRTA4MjNGQTQ2RkI2NEFFOUVBN0E2N0NFQkYwQjhBRjVEM0FENkFCMzY2RTUyRDYwQjUwMzYyMjJERjY1RjUwNzhGNzAyMzZBMQorMjVBNjVCRkMzNDVGNkE0MDBBODFERUVDRDA3MTgzRkI1RDEwQTI2NDBGNkQyMUQ5OEI4QzJFMDY1MEMyRERCOEFENTM5Qjc3MTlEMDMwCitCMjIwQjkxRTE3RkYzQTVGRkZERUU0RDY2RDBDNDU4NkQ5RTRFREQxNUE2NDM5M0RFNjEyQThBMjA4Nzk5MUE3MjZDQkI1OTE3NkFFM0IKK0Q0OEM3OUYwRDdDODg0RTgzM0RBQjI5NDQ5OTUwOTgyNTdGMzAwRDI3QzQ1MDRFM0FEQTcxRjRDRDlDMzA2RDgyRkExNUMxMUZDNzA5OAorMUVDREI1OUU4REM1Nzg3ODgzMTdCQkNBQkVBNzlEQTg4ODI5MDczNERDRUI4RTVFRDhGN0Q1MUM2NDEwNDI4MUVFMDBEOTUwNzdENEE1Cis4Q0U5MDJBOEQzREI2Mjk3Q0ZCQUI5QjRFMEVGNzdEQjMyM0UzNEE1MkIxQTkzOENFOTUxQTE5ODk2NDBFQTQ5MzVBNDcxRDEwNzQ5RUYKKzcyODk0NzM4NkRBNUVBQTlCRTAxMTdFNDBDRkNEODA1QURDMDFFRjNCMTUyODE5QkNEMzMyREZFNUZBQ0UxNkMyMzY2OTM3MUU2MTA4MQorOTQ3ODM2MTRDRDQ2QTY4ODVFNTQzQzAwMzU1QjFCODFBQzkxN0QwNTMyNUZEMzk1QkY2MTk1ODc2RDRGNDZDRjczOUQ3NDgyNjU3NjA3CitDN0FFOThDN0RFNkQzOTdGNjA1NURGNjdGMTg4NDgzNkUyRDY4NUM4MDY0RDgzNEE3NzE4RUI0MUE4NDNEOTk0RTA3MEQ1NDg4RTI4NDIKKzNBMzAwNjhDREYwMUY4NEEzNEVBMkM0N0E0MzQxRkE5OEM5MDExRkFFRTUxQ0JEOThEQUIyNUM5OEI3OEMwOTU3QTBGRkQwMjJCQ0M5NworNjQxRjg1OERDNDQ1NzE1QUI0NjExMTZBRTk1Njk1M0YyMDQ4RkIxQTk5MEQ3NzUyRDNFRjFDQjY3Njk3NTgzNjgxRjk2QjM4NUZEODcwCiszQ0UzNUVFRTYxMUU4MERGQjBBOTkyRjg3QkVCNUI3MjRFQUIxMzBCMjU1M0Y0QjA1OTlFNzk1QzQ3NDNBQjMxMjQ2MEI2NUNENTNERkMKKzY0OEU4NTNDMDMyRjBBOUQ3NjBGMjQxRjYxNzQ3MTBDRDE2MDJDRDc4REM0MDUzMTZCMERBNDNENUUyRDRFQURBMUUzNjg4RjMyQzZCOQorNEYwMkVFMjlFRDc5ODQ4QzQ1OTg5MTE4NzQzMjk1N0EwRjQyOEQyNTZFMDE1RTg2QzEyRTY4Njk2QUZBNEQ4OTBGQjg0MjI1NDgyMkUwCis3OUFBMzIwQkMxQkQ0ODBDMEEyRjI3NkQ4MzNGQjNDOUQ4NzQ2QjUyRUVGNEQwREMwQjYzRDAxRjYxRjk1MTJDMERGNkU5MTFBNDEyNUEKK0NFQUVGNDlBQzQ4OEYxQTM5NTg0M0Y3NjBERjAxODM4MzM5QUM1QjUzRTc2MEVCRTI1NkEwNEYwOTJDQ0VCQUZEOTIxOEFERDQxNjlFMQorODJEMkYyMDc1MzIwMDg1OUE3NzZCMjM2RTZFNTQwMEM0MjU1RTdDREQyMkQxRDYxMzU0ODBFMTY1OTJGQjY4MDE0MkU1QUJCMDlCQzBECis3QjY0M0JCRTA4ODhFRTVENUEwMDA4ODE1NzQ4QjIzNTZFNzE3ODEzQUIzQUVCMjBBNThDMjkxQzQ1NTkwODNFQTU0N0U2QkRBMDc1MjEKKzM0MkFFMUQ0ODlGMEVDN0U5QUI0QTI0QUE5OENDNDQ4QUYzQTE5ODkxMEU0NkNGODI5Q0IzNTE4MkRCNTNDQzA0RUEwMDBFMDVGNDRCQgorNDk1QTY3OTczNkUxRDNBRDc4ODU5QzE4QTlDODJFOUI2REE5NkFERjQzOURBQzEyMjY5REUyQjc0NTg0MTUyNUM1QjM5REVGM0ZGNERFCis0MDVDN0ZGQTMwQzI5QkY5RUE5NzlCOTc0MUREOUMwNzIwQzI1QkU0MkRGRjEzQkFEOTEzMjdEMTVGQ0Y5MEU3NTg4MjAxQjY0QzJFNzMKK0RFODEzODczN0YxQjQ3NDBCM0M1NEI3OEZCNDU4MDgxNUM1RDQ3QUIxODcwQTU0OERCQzIwRDExOEY4QThBN0VGQTVENTM4M0Q3MDY5RgorRTBBM0Y3RURFNDNBRjFFNDExRjNFNDE5RjE4RjM0N0VENTE1M0Q5QjhBQjJFQjU4NERGMkE4NzQ3MDYwMTQ1QzA3NENDMkQzMDhGRUZCCitCNjM4NDFFQUZFNTZDOTA1QjRBNEIxM0E5RkU4MEU5Q0JERTQyREZDRUU2QTNGNUJDOTg2QzJDNzQwNDAxQjQ1MDkzOUE2RUM0NEU1OEMKK0NCQTc5NTVCN0EyOUVEM0REMjhDN0Q2M0ZCQjA0RjhGQzgyNUE2MEM2Mzk5REE3NjJEMDQ1QzUxODJGMjQwQThFRTdBRjRGNDA0MDM5MAorOTk0MkM4RjUzM0IzQkM1Qzc2M0IwREM5NUE4MzREMUU1RUYwRjkwQkFEMDdFQzA3MzgwRTc1QTk1RjU3QjhDMUM0NkEyOEVENkE0NTVBCiszQ0RCMDVDNTY5ODFEQTEwMDY4RUIwQkQ5RUVGMEIzQjMxQTc2RjY2MEU5RDM0MEQzNzdCM0Q4QjYwNjhBNzIyOEY3Mzg2RDhGMEQ0MTAKKzM3MDFEREZDRTVGNjc4Q0JGNkU3MEZEQUFCQUY4NkI5NUUyQTczMTQ4N0RGMDZCNEQwMTFFMzgxMjBCRUNENkI4QzlEQUUyMkM5OEMzOQorMUZGOEQwMTlGQUM1NzgwNjlGNkY5RUFFRUJEREM2N0FBQkQ0MTI2NzY0RDE2Qjg5RTRGOEE5OUM5M0E5NjFCOTMxMjJBNEQ5QjM4OUFFCisxQzY2NEMzMzg4RTFFN0Y5MDcxMzIxRjVBMjJEOTE4MDJCNUI5NkJCODlBQjdEMEQ4NTMyNDhCMDFFQjc3RTUyQjI2NDYzQUQzMTdGNzgKKzQ3QzYyODgxRjIxRDI1NzhDQkIyODU1QUEwMkE1MEJFRjU1NzlEMDlBQUVDQUY1OTgzNUU5RTk0OTI0NUExQ0Y1Mzk4M0U2N0NENUY3RgorQ0E1REJBNUY0QkE3NDFFN0U0OUM0MDY1MjJDMzgwQTUwQTM2MzMzNDIwNDJFQzMyRjgwQ0RDRkQ3MjVDOTA3MkIyNzFBQzgzNzIyRjczCis0QjNBOThGN0M1MTZDN0NEQTgwNkExRkFGOTdDRTQ2MjEwQzQxNTNBODQ0QTM1Mjc5MUU2QUU1OTQ2MTlGNTFDNjU2Q0YwN0I3ODNENjEKKzY0QkZGRUQ4ODA5QTFFNTAyQTUzM0NBM0MxMjcyN0ZGRjQ4NTJDMDk4RDFDMkYwRjkyNUIzQTAyOUVGQjZGRkY4MERBQjhEQ0Y3QzlDQQorRkE1RjdEOTU4QTg1MDREQkUyRTdBMkMzRjI2MUQ3MzZDRDQ4OTRGRTAwMDlDNkMyNEJDN0Y3QTlFRkQxMkU2QUVCNEQxQTYwQUQ2MjU3Cis0QjhGOEI3QzU0OTU0RUQxQ0FFOTU1MTFGMTY4ODZFNTEwOUE5OTMzRDg0RkYyNjZFQzREOTREQTg5NjE5QzgyRDM3NkE2MzUwN0NGNEUKKzIzM0JDNzBCRTBENjYwQjZFQjQ3MkY0RUI2QjhEODVDOTYxMDhDNUQwMkQwRDM5QTZEMDI0MjlENjBEMDEwRTFDMTNBODFFMUFCMDAxMgorOUZEREIxQzA5MDBFQUQ3ODQ1QjMwQjFDQzc5NTUyMEEzNDNFMEZBQjhCQ0U0RDlGNjQyRUM3RjUxODQ2RjVGRjNCODdFRUM0MDQyM0UxCitBOTE5MzFGREY3M0JBRkRGMzgzRTU1QjI1NTU2NjY3OTk3OUYzN0UyNTZENjA2MTIxRjBDMzExNkJFRTAwODk3QTdDMUMyOTgwQzc4NUUKK0EzN0UwNUYyRTMwNzAxODFGMTdEOERGOUMxMDQwMjIxOTcwRjYyODIwMkFERkJDRUE2Q0NFQ0RBNjE2MzdFNDBBQkFENkIwRjYzOUMyMQorNzM1Mjk4RjM1RUFCRDM3RkFEMzEyNjI0NzMwOUVGOTU3MEFBNEQ3RjJBRkY5NTk4OTRDMDg5RDc3ODc4RUI1RDM3MDVGOEZDQjc0OEFDCiswMENENzc1MzVCNjcyRkZEMzZFMTYyRDg1MzcwMTM5QzBGOEU3NjQ1QTY2NUMxRDIzQzZDNDVDMENBMDZBODlGMkNGMkYyM0MyN0E1RkQKKzA3MEY1NzU0MzlBNUZGODhEOTIzNURGNTc5RDg1NDk2MkUwMjVDMzQ3MDc3MjU2QTVGNEREM0M1RkFFMTBBNUMyODAxRjkzQzA4RTAyMgorOTYwMENFNUNCMDAxQ0JGNzFFODEzRTExNkM1NjE0NzMwNDk3NkNDMjU4MDFCQzAyMzlFRTZEMTJBRjJEMkExMEU3MjhBNEJFQzI0OUUwCitCRTUzNDIyNzJGNkE1MDgyNjQyMjZDQTg0NzlCRDk0NkUyQkVENDA1Mzc5RDA3NDhENEE3MDdFMEVGRjYxNzVENUU1NzExN0EwNEZEOTgKK0MwMzQwNTM4MUFGNDQzMzNGRDczNDZERDdENDZGNzFDRjVBQTFBODcyMDVFRUY4RDdCMUNDRTk3MUY5QkREQTQ2NzYyOUJFMTU1NkNBNAorRkU0NzlERDc3MzgwRjIyRTkzNjg1QzEyRDY0MUVDMzIyN0ZBOThDOTBEOTI2NUQ3NTA0QjdDREIzQ0NEMDkyRjRBRTA0ODdFODlDQTc1CitEQzAxN0RBRjlDOUM5NDc3OEZERkM3Q0YyNDE5RDMxN0FFRjJENzA4NTdFNTI3QTVGNDlGQTI2RkYzRUU1NzdBMEE0NEVGNTQxQzdENjQKKzA2MkY3REYzRUZCQkQwRkQ3QkE2M0Y1RDRGMUZGRjQwMTNGMTQ5MjE1NTIxRjVFOTEwOTI1NTNGMjk3M0UwQkUxQUZGNkI1ODc2RUU2MQorM0EwODE5MTdBNDE5ODI5MjQ1NURGN0EzMzc5NTQyMzRFMkE0NDEyNzVFNUY0QTQ3RUIxOUIzMzYyNzc4QkE3MDg3ODg0N0Y0NzhFMzQxCitCRTA5MjU3REQ5ODIzQkIwNTg1MTJENTg4RkE4MjY2OTExQzU4NDZFQTVBRkM4ODY1NDk1Mzg3MjFFNDc3NUVFQjgzNTRGNjRFMjBEQUQKKzRCOTEyOUM2RTkzNzAyNDE0MDhCQTRBRTFFMDkwNTlBMEYyQzVFNDQ0M0ZBRkZDNzYyRDJFRDJDQUM5RjZFQzI0NDY2NjIxMjE3ODQ0MAorQTJEMzA3NEE4QjVEQ0JEODEwRkFDNTE2MjdBODFGQzlENDBGQzMyNTgxQ0MxQkE0MzhCNTA4NjUwNTA3NjVFQUFFMUYxRTk5QzFEODlBCitBNkNEMzgzOEE1NDU5RkJGOERFQTIwQzk1MzE4MDFDMDM3RDUyODhGNkNFMTlBQjgwNzNCNTk1MUQ3Njk5RDNEM0M3RjkzN0I1QjUyMUEKKzM1QUUxMjc5MTEwMjg3MUEwQzI3QUFFRjk2MzExOTIxODJBNUM0MEI5QzgzOTU5QTk2MjA3ODAyREVFOTI2MTFGRjM3Nzg2NjREQjFBRAorRDMwOUJGQUY1RUJBQUU0QjhBNEZGMDA4QzBCRTQyRjExNTFFOUQxRjQ2MENDRjAxOEM0MjcwM0UxQTI4MzZDQ0RBQkYyNkI0NzQ0REVGCis5RTExMUM0RkI4MUZFODlCNEI5QkMxNUUyODgwODU3RUIzNEIyMTk1MkM1NUY4QzYyRTgyNTRFQzMwMEZDRTFDRDVENDY2NTdCOTAyQTEKK0Q4MUFDREFFOTJFNENDREJFNEMzOURGNzQ3QkY5Q0Y4QjFDRkEzMzE0QzQ1M0ZERTIzRjUyRTNBQjFBRkQ2NkFGRTEyRjZERDUzRkM1QQorRjIzNkYxMjI4RUVDOURDOEM4QURFODE3MzNENkJGQUJBNjY5ODlFREM2NzYyNDc1RjBFNzAyMjgwMDlEMTMwMURENUFDNjU4M0JFMTA4CiszN0Q5MEVDMUQwRTRDNTQzRERBNjY0NTk2OUZGMzRDN0JBMjFERjJBRDNCOTUyN0VCMTA0QjcwNDk4RUU5RTYxRkZGQjJGQjM4NDM0MDQKK0Y4REMzMjJDODk0NjM1OTQ2NEFDMDU3MzcwQzc2QTkwRUQzQzAyNTREMzhFRkI1MTZCOEI5OUUxNTYwODU3RUJCNUNCODg1NjZBRDI2OQorNTY2NTJGMUQzMzRGMDFGQzhGMDE4NTQ2QTdGNDlGRDE3MTAzQkI1RUYyQTZBM0I2QzI2RjlDRUJGRkM3NDE5RDcxRjYyQUE1QjIyMkY5Cis5M0VCNUEyMjdDNzNFMzEwQTNGMzRDMTlBM0Y3Q0U5QTEwNTM2REU1MEJEODFDNDExODIyMkMxNjNEMENFQjhBMTZERjZCNEVCRjJCMDYKKzg0MERFRDA4MTA2RjI4REY5M0UzM0FDMkM0MDc1QjQzNzIzNjkwRjlDODkwRDRGOTFDRjVBQzg3NEI0Q0E3QkNFMkYyOTYyRTUzMjUyNgorRjREQUI3NDRGODNDRjkwNUFBNDM3N0JFNkYwNTc1OEVCNDQ2MTJCQ0JENTJBNTY5MkI2MEJERTEwNTg2QTExMTMwMDVEOTE1QTc0REZCCis1RTQxOTIxMEIyRTVBODZFNTgxNEVEMzRENURBRUQ2RUVDMzgwMjg1MTE2OTYxNUI2QTI3NDRBNUJDQkE1QjY3RTkzM0ZFMkQzRDczOTgKKzA1NkQ3QTMxNkE0QzdEMEE3NzkwNDA1QzdBM0QwNTE3RTE3NDgzMUFBNzk4M0E4N0ZCQjRDNUQyNEYyREZGQkY4NTc3QThCMzBBMjA5QgorMjc0NjY3MzJGNjAwQjYwRkY1MDNBRTVCQ0VGMDhCMjlBOTcxNUVERDdFQkMzREE0RTE1MjE4Qjc2RDhGRDYwNjY0QjYxRTJCNjgyQjFGCis1NkNFNEI1QjEzQUMxQjBFQTRFREQ2QUQ3NzI0NEFCMTY2QUNDMjNCMTAzNzkwRkNGMzJGNDFCN0MxRTE1RDc4NkE4NUJEM0I4MUE0NEQKKzM3NzQzODdDRkJENDFCNDNCNDY3OEFGNDIxNzRFRDc2QjlDNzBGNEJDMTgzRDAxQzUyNUVDQTc1NjBBN0RDMTJFMDgwNEY4QTZGQ0UwNQorNzYwMzYxQjkwQTE1NjkxNUVGQjk1Q0ZDNTVBRDRERjk5RDc3QTY1Mzc2ODZBMkE2MEQ5RjkyNkREOUJBM0ZCRDhCNjUxRDVCNjlCRkQ1CitBQkVEN0QyQzhCMzI1MzlENzUxMzQ2MTU3NjFGQUY3ODNBNkVFNEMzMUI0NzIwNDgwOEM5MTU2QTZFQzJENzAwNDlEQjM1QTcyMDc0NDcKK0IzNDZEQTI0MzVEQkY0NkFGN0IyNEM2RTRCRTFCNzVCMzBFNUY2ODY4M0EwMzA1MkIwNUJCMkRENzVBNTEyN0NFQzRGRTExMjg0RjAzQworQTlDNDEwMkE5QkIwMTMwRUI5OTkzM0E3NDc5REI1OTc5NjA2NDBBM0VCOTBCRjBFREY4OUQ5M0E4QjczOTIxRTlFN0M0Rjc4MkVERkIwCis3MjMzNzcyRDIzNDNEOTBFMUU1ODFGRjIwRjUxODFDNjdFMDUwQTE0QUU0MEVGQUExNkZDRDYyRkQ5QUFENDE5RTMwMUQ2ODkzRTIyOTEKKzhCQkEzMTM0NUE5RDk0NzIwOEVBMjM5MjRCOTI1N0VFNzUzQTcxMDRFNDFFQTEwRDcyQjZFNzJFNTA3MDUzQUUzNUJDMjBBRTVGMzY5RQorQjBENzgwRTUzNzQwNjc4MEE1NUFFN0MxMTNBODFGNEUxMDA4RkFGMjc2RjU5OEUyNzYzOTlCNERGMTFBRkU1MUNGOEQyMkEzNUIxQkNECisyNDdEQTcwMzc3Q0JGN0E5NkU4RENFQzE5NjU4Rjg4RDZBMjE0RDNGQUQzNTZCQURDNjUwQTQxQjM2RjEyQjExRUM5QjE0OUZCNkE0OTEKKzEwREVGMjAzQjhGODY3MkZDQkEzMTc5NzRGMTdFQkFGMkM4MUNCMzk4QTA2QjYyRjYzNUVFMDEwRTE5NEEzOEVENEFCMzBDN0U3MDc5QworQUQ1MUVGQkE4RTA2OUI4MTFBMzVCNDU5QjM1MzdENjgwMUQ3NDdCRkRFQzVGODlGNDY1RkQyOTZDRTM5NkY4OTQ0OTIyRDVGODJBMTJBCitBREZBRTM0QjZENzIzODI4QzhBMzAyOTJFOUU4QUQ4RkI4RDk3QURCRDlBQjIyRTVFNDU1MjNCREZGNEMxNzIzNjg4MTYzQkM3RUNEREYKKzQ0MDUyQjY5NjE2N0MwQUNBMUI0QTgxMTM1RTBCODM3QUNDRDIyREFCQjVERkU0Njc2NUVENEJDMDU1NkI3RkIyNzIzOTgxMkZEMzA4OQorRkE0ODNFQUU2MEMxMENFNkQzQjhGQjBBRTMzRjA3MDIyRjk2RTFCOTVEQzgxOEM2N0FFREExRDQxQkUxMTcxMjU0OEQwNTY4QTA2MkI1CisyNkE0NTY5QjlCQjVGNkVBRUMyRDE3NkY5MjRBQkZDOTk3OEUzQUZDNDI3RUIyQkE0NkM3NjhGODNFODZGM0I4MTc4NzA0RTZBRjRBRDIKK0VBNERGNDdFODk4OUYzMjdEODU4MTI3OTBFQTg4OENEQzkyMEQxNUI4MEU1MUY3Q0ZDNDRBMTE4OTEyN0QyQzk0NjhENTAyMzFDQTgwNQorMDNERjJDMjAwN0VGMjdEQTlDNDk4Qzc3OEYzODM3NzM1RUU1RURBQzQ3RjRBMDFDMkEzOTFCRTAyMzAwNDE1NjY1MjM0OUYwNjJCMUVCCis1MDRFNUFCQzgyMjgyQTQyM0U0NzM0MjAwMjAwOTc3MEQ2NDZFQTUwRjkzM0YwQkM1RTYxNDNGQTRCMTczM0RGQzZERjZFRDdERTZERDQKK0ZCODM4OEM3Q0E4MUM5MjEwRUEwQTk4QjAyNzVCNzRBMEUwRjUxMEM5MERGNzFDOTNCM0E5RkRCNkE4NkRGRjI5MjEzODIzNTJDOEZFRQorMUEwQTJFNjAwM0IwMDU0NjVDMUYzMUI2NjdGNUJERDlBQ0U3NDUzMUQwRkRENTZDRUFCQkJGNUUwQTU1NjMzRTI4Rjc1MEE3QzI1NzFECisyN0ZDQkUxQjAxQzM4N0Y2RjM2RDIyNUEzMEM2OEJEMTg1ODQzRjQ4N0MyRTk4QjU2MjlBNjI4N0NCQUYyMjY3ODgwQjJGNDg1OTYzMjAKK0Q3QTFFQzg3RENFNUM1MjgzRTAzNEFGNTgyRjU5MkI3RTBCMTg1MjA5QUIwNzQ4MEE5OEU2NzY2MDNGN0Y5MkY5NkY5QUU2RUJFODBBOQorNUU2MjVFRjdGNEI0Njk0NThCMkE3REFBNEI4RkFFOTEwMzY1MjY2M0YzNTNDMzVGODhGRkZFQzQxMjk2ODA5RDUyMTA0RTFENjI5OTk4Cis3MzVFMUNBNEQzNjQ0MkJCOEJENkMwMkVFNkUyNzM3NEIyNUNCQUU5NzA1MUZERTdFM0VCODFFQTdGNkQ4Q0JEREE0NUYyOTIzMjQ1NkQKK0MxQzcwQjYwODY5RDYzQTUwOUU5QUEzM0REMDAxODdCRUQ1QUExMjJBQzhBQ0FFNUI1QTAyQzg1QTRDMEI2ODE5M0IyRjQzNTVFQTc3OQorREY0NEY0ODgyNzJFOTIyOTdERjFDOEU3RkFFQ0M0RUZCMDMxRTAyMzJFQzAzMkYxRUNENEY2QzM3QjY3MDdBMjhGMUNGOUEyNjgzRkM4CiszQjk3MjVGMTk0OEQwMjA5MzEwNjVDQjUyMUIzNDkzNEQyQ0VGRTk0NThBMUNDN0VDNTUyOEExODNGMjcwQUFDMDhDRTgxODRCOTA0ODIKKzYyMjFDQkNBNERBRkRDRTg4MEQzOTFENkM0RDgyODlCQjQ1RUNDNzNDOTRERUJBQUJCQ0ZENTI5RUQ5QjVGRTU1RTVENkE0OEVCMDk2OQorRUEwM0UxNUI4RDdEQThENTRDQjE1RTAzNzBDOEUzOUNCODAxNThDNkI3RDQwQzI5NTFENzMzNDVCRjNEODJFNDlDOTc2QTBFOTE4QjEwCisxQzIyRkZENTUxQzY4NUEzQzdBRDE3REM5OTE1QTgwODE1RUIxMTQ1NTBFOUJBREZBQzJFQUQxN0MyOUQwQzgzNDg3MUNEODg1NjNGOUMKK0MyQ0Q4QjE5MEQwMkVFMzQ2QTgyQzUzN0RGMjk5OTcyMjU4NEE5NTg0NUJCMzY3RTRGN0Q2NzVGRDA2N0RDNDJGRUQ1OTU0NzNDOUI1NQorMTkxMUE1NEIxNEREMTMwQkM3Q0FENzhDNDY5REJBOTY2MDk2RkE2OUZCOTAyN0MxNTQyQjhCOTVCREE0RkMyMjY4M0RBRjIyQzhFQkE4CitFMzU4OTI5RUFFNkMxOThDN0Y5NzMwQzVEM0JBRDYzMTk2NTE1QzRCRUFBRDI3QzI2ODQ0Mzk4QkQ2NEQ3NTBCQjA2QTI0MDM5N0JDOTEKKzQ5MkFDRTBEQTdGNjA1MEJCQjE1NzQwRENCQkZDMkRDNjdDQzc0MEFFOEVFOTE1MTkyNzE1QkQ0NzJBNDVCQkYzM0FBNUUzRTkzRkU2RgorNkMzOUUwOUQ4RUYzMDY4RDNFN0QyQkU3Njg2MzJCNkMyRjFGMkIwRjA4ODQ0QzVCRDdBRjJFRkE2Q0VEMjg1NjQ2NzUwRjcwRUE4MTlCCisxOEIwMzcxQjNERjdCQzREQTJCOTBFOEZGQjlFM0RDMDY2QjlFQ0RGMDFBMDJCREJEODgyQUI4OEVGRDdGQ0YyNDY3RDRCOENDMzIwMjQKKzFGRDY4QzZDOTc0MkM1RTI1MEJBNjYyQTg1NkRBNzE5NEMwQURFMzZCREZCMzY1NjJDMjkxMzJERUQzQkFBMEE4N0E3NjE2NjlDRTNCMgorNTZFMTFBNkNDNDJCREM2RjBBRTA5Rjg3QzBEN0ZFNjg4RUY4OTQ4RjY5MjEwQUNCMTQ4QTkzRjU5RkMyRUY1QjIxQjhFODFCNzFEMTg1CitEMzdFMENGMzZCMkYzM0JCRDc3Q0QzNjA0N0U5OTg4NzA0QjA2MjlGQ0FBMzE4MDAwQURGQzRCMzcwRkE1QjIxOEExNjFBRTdBOEQ5OUIKKzg4OTA3MDI5QkM4MzEzNENFOUY5MkIyMTczNUJBMTVGMEZFNTQ3RUE3OUY1QjJEOENDOTZEMTBFMUIwMzczQTEzRUQxODUwMEVFRjQ2MAorRERGMkNBRUNCMEY0NEE0Rjg4QTYwOTBENjYwRTg3OUFDQzAzRkQ4NUI0OTA5MDgyRERGQjdDOTA0MjhFMkE5RkU4QjYwMzc3REQxRUNBCiszRDA4ODVDNTQwMDQ3M0NGMjEyREZDMkVGMzA5OUM3M0EzN0IzODg2REE4QzEzOUZCRUZGODQ5MTE2ODdEMURBOTYzRDBFOTY5MEJFRTMKK0YxOTFBNUUxRjdCOUQzRkVCMEE0OTdBQ0FDRTY4RDQyNjYwRDk0Q0VBNTgyNUExOUI2NUMxQTM5NENBQUVCNjhCRUQ1Qjg4NkY5NEQ3MAorODQwN0M2REZFODE4NDQ4QTQ5QUMzQTlCRTEwQzg5OTFCRkE1REEzQzk0QkY2MDhGRUNDQzA2MDZCRjZBQTBGMUVEMUFFRkVFQURGMEE0CitENTIyNjUyM0M0QzZBNzdGMEZDOUE2QzczMTg4MjZBQjhGQTI4NjMyNDIyOEFCQ0QyNkQxREYyRkZGMTY1MEJENzE4NzlBRTVEOTIzMzcKK0VCNkVBQkY5QTU5OTMwODg5OTc1MjIxOUZGOEM5N0NBNzJDMTEyNDZERDExMUYzNDg2NDZGMjNBNjI5ODBGNjQ0NURDQ0ZFMDM1QUE0QworNUIyRTk3M0E3ODdFRjhFREEyNjBCRjgyOTg3OTRCNzZGRUY3RjZDRjc5RENBOTIzRjlBREMyQjA1MjREOUEyRDRENDI2OUVBNzA5QzM5Cis1RDc1RTNGMjNGOTJGRkRDRjdFOEJGODY5MUQ1MkRGMTMzMjk3RTRBRUI5QjE2NjhBQzA5NzQwOTQyODQxMUM3ODg3NDI3REU5QzAzQUMKKzFGMjI5QkI5ODMzMjUyNThFM0QzNkU5M0QzMDBGM0EzMUUxQjQ4NjFBMUEzMUQ2MTczMTM1OTA0NEZCMTA3NkU5OEMyQ0FGMjRDNzdEMgorNDU5MzU2MTU2RTFEOTU3MEQ5QjdGOEVEMzBFMTRDOTVEODYzOEFGNTQxMEVBRTM0QzQxQTM1RTU1MjgwMjI0OERBOTIzQkVBQTE1M0IxCis0RTYyNzM1QkQ1RTA5RTIzRTU2MTZGMTBGNUI2NkZFMUQyMzhFQTU5RTI5M0YwNDU5MDQzRTQyNTM4RTE3QUVDNzZCQjA5QzRBNjM1M0MKKzMwRTRCNzU2QTg5RTQwQjlEOUNBNkZFMUQ0MDU2Njc2OUNDNkZFM0IxNDQyODk5N0VENEEyNEIyMzk2MUVGMjFBNjFEODc5QTI5NjdEQQorQ0ZGOTA5MTgwRjUyNjA0QUY4QzRCRDQ3RjZBOTQ3NEM0MkE3NTI4NjFFODMyQjdCOTMxNjFCQzEyMjRCODY3M0E1M0JEQzdGNjYzQkNDCitEQzcxQTlBQ0FBNTk0NDg2NjA3QzE4MEMzMDM4NDg4MUMzMjQ1NTQzNTc2ODVDMTQ5QTBEOTZBRjZBMzdFNEUzRDIwRDUwMjFGMTEyMzgKKzFENENCMUY4Njc0MDM1MDcxRkM2MzQ2MzgwNzZDMjQ4MEIwRUFDRDMwNkE2MkZEMjJFQTg1OTkwM0YyRjMwRjFGOTlDODdGMzI0NURGRQorQTRBQjUxNDFEMjgwQzVFRUFFNjlGNDRENDdEMzU5QTAxMUExRDAxRkU4QkVBRjNCNDM0NzhGOEI0N0E0RjM3NTA4ODYxQTJEREQ3NzA4CitCOUQ0NzQyQjZGRkExNTZCNjRFQkMwQ0Q4RkY1NjI0RkI4MDkwMkRDRTU5Qjc4MDZBNDNDODYyMDA2ODY5RDBDRkNBM0VCMTM0NzM5NTIKKzQ5MkNGREFERTFFNDU4QTU1REIwNzhCMUVGNThEQzVENkMzMDNFQUFBNDE1RjQzREU5RjE5QTUwODE0N0ZBQkZGQkZBQjY5ODYyRTUyNworMTk1MjNERjAxQkRGMjJDQTc3OUQ1ODcwNTVEMzc1MzlCQkY4RDhCRDY4NTNFNEU2OTlFNjVGN0VDNkU1RDA5NjYwMUQwOTM0MEJEMTE2CiszODU0NEE0NUFENkU1ODY2M0ExQzQ5NURDQzFGQTc5QzgzNTFENjlEMjk4QjQ5ODM4MkFFNDcyNUYxOEY4NkYzMTVDNTg4QkVEOEJGQ0MKKzY2NTVDRjJFNEFCQjQzOTI4MUQxOTk5OTRCRjIxRTQ3QTJFODREQkUzN0QzNjM3REIzMkU5NjFCNUM0MEJFREIzNDVDODIxOTdEMzI0QworMzUwQkMzNDRGMkVGOTBFNkI0OTZCREJDMUJCNEEzNTlCNzA2MzNCMEEzNTA3NkZCODZCRTEzNDNDQkQzOUU2REQ3NzY3MUFGNjcxQ0Y0CiszNjRDMUNEOUJDN0JDMTUxRkMwRkVEQjEzNzkxMUNBNTkwRjM3N0IzNTk5MDA5OUFGMzc1NkMxRkYyMTg2NTZEMTc2OUIyRTVBREU3RjcKKzU3MUU3MTMyQ0ZCRUZCNkYwQkNEOUY0MTY0QzMzNzM4Q0E2MjkzNEUxMzhFRTVBNUZBNUU4MUMzQzFFMDREMUMxQUNDQUVBRDhEMTVBQworNEZDQkIwRkZFQkU1NzczNDIyNzJBOEJFNUZERTYwNjgzMEMwMjg5QURDNDE0MThDNzI4MkIwQ0I1MjM0RDhCNzVENjY4ODIzQTMyQjczCitFMTQwMjI4RThFODAzMTE1REYzOEQxRDYyMTM3MThCRkJGQ0IyMkIwNDA1MTA4QTVDOEJEMzAwOUQ2MEJGRUVEMUIxNUU3QTVEMjFGMTEKKzk4RjA5MUUxMUI4MzlDMkJBODA5QTIyNjUyRjU3QjMwMDdERUU2ODI3QUMyMkE5NjU1NjM5NENGOTA1MUI5MUIxQ0M0MkEyMEVBRkI4QQorMkQzRjk1QjcwOTBEQTc5QUEzRjQzNDIwNDVFREUyNDdBQzYzRDhEODAwNkZFNEMyQTYxN0M5QjBBRUJGMjc1MzA0MjQ3Mzc2MkU1MDUwCisyMDYyNzQwOUFFOEY5NzVFMDU0N0MwN0Q0MTQxMDVBQkZFRTQ5Njk4NUMzNDIzRTFGM0FDNzEwNzZGQUFEOTc3ODNDQTQyNTA5NTFBQjMKKzM3OUI0NTYyRjJBNzc0NEY0MUZDNDBFMDQ1QTc5NkEzQzc1Njk4MUQ3RjM1QTM4QjZBNTdDMTJCOEY4NzcyRUYwNzUzNTkxQzY1RjYzMgorNzI5NzMyRUZFN0YwNTNDMjdBNERBQzk5MDdGRUJBMDQwM0NFOEE5MDJGNzFBMjc4REU5QTU2MTY0NjMyNTY5MTRDMUJEMTE3QTY2QjhECis2MjkyOEEwMEI3RkJCNjZFMzMyOTlENjczQjY4MkJEQjZBMzA3OTBDMkEyREQwNkYzRDgyRTE5Q0Y0OUMxQjlDNjc2QTQ0MTNDRDRFNzAKKzcxOEY5MkZDMDA4OUE3MjU3MjY4Rjc1Q0IzRTUzRjhENDc4MUMzN0U4RDVFMzdEMkM5MTlDNjE5QTMzQjRDNzE0MUNBNzEwN0QxREFDNworNjkwMTYzNTVDODlDMURGMkRCNzgyNzIzQjcxMzU3Q0MwQUY2NzRGMEYzNkUxODQ4NTA4OEFEMDhCOEI5OTVENUE5Q0RGRDUwNzBDRUZFCiszNzQyNEMyOTA5QTM4QkQ2NkRCRTY0NDAzOTZEMDJEQzI5ODBGMUMwMTNFOUMyQzE2MUY5MjdDN0I4MDNCMzRFQjdDNTdGQjIzNDlGQjIKKzc4ODUxNTg4NUI3QjJFNUJDQzcwMDFBMTA4RkJENDczRjM0ODEwQzI3NzRFNTQ5MzUwMUZBMjg4MkJBNTk4NUVBOUFFODRBRDA3NjgwNworQUVGRUZDODA4MUFDOEI5OUY4ODM3MTk3RUVCRDJENzM0RUY3ODA4NkYwMjAwOTFGNDQwNDU4MjNDRjcwNDYyQTg1NkM1OTIxNTgzREI2CitCMjA5NDczNDk0RTc4RDFEODFGMjg1Qjg1MDA1MkIxNzg0MzczREI2MkZBNkNFOEVERkI3MEVBQ0U0QzJBMDFDQ0E5QkI4NkVDNjFFNTQKKzVFNDM5OTQ2NjIzM0Y3NzE0MzkyRjUzRUFGODIzNzg4RTdGNDc1RTA2NkU3MThBM0E1NEE4MTgwNTA1OEIzMTI0NDczOUI5RTNENUJBRQorRDg5NjkwMUQ5RjAxNEZGNjI3Mjg4NDdBQjcxOUFEMkNBMzMyRDk4Rjk5NTMyRDdBOTNDNzAzMDI3MUY1QkE1MjMwMDk1QkVFODEwNkE3CitEMzNEMTZEMkQzQkQ3NjA2NEFEMjY0MzE5MjJCN0NGNDMzQkNGM0FGMDJDNTNDNTlEMzk4NzI0NzgyMjdFNjQ1ODI4RjJGRjFDNEIzQjUKKzlCRUQ5RjgwNjFDNzRGNzkzNDhBRDYzOUM0RjNBNjdFMjdGRjk5OTU5QjkwOUUzQUREREY5ODVCNzE5MzU5RjgwMzkzODc5OEUzNkRFNQorNjU1NDQ4RTY1NDcyQ0NFMkQ2QTc1MzdBNUY4NTVBNTA0NkM1RDdDNjRENzdGNjM2RTMxODU5MkIzMDQwOTgxMTEwRTY2NEZBQkI1RkVFCitCOUIxNEM0OEQ3NEU3QTQ1ODIyNzREM0JFMDdFOEQ2N0MyRjI5NEQyNTkxNzk2QTI4ODBDMzI1MzA2MEJBMjZBRkYwMEM1MDNENjE0REYKKzcyQkY4QjkxRTgwRTcyMkM1RjRGNzQ5NkExN0FENkI1MzU3REUwMUM1QUM4MTM2QTNGNEI3RjcyMkQwOEVBRkIzNDE5Q0I3NjYzOEEyOQorQkRGMjQyQkM2RUQ0RkI3MTI3RDc2RjUxQjhFNzc4NTBDNzdBM0Q5RkZEOTRFODE0REQwNzJDNkFBRTkwMUYxQ0I5OTk2MUU3OTMyNEQ0CitBRDBEOTdDRTAwRjdBNENEQ0NCRkQ3RDVBOUE4MjI3MEIyRkM3RTg4NzU3NzQ3RkVBRkU5MTdBQ0M5QzA3NTA3RjJDODc1MzA0NjVCMkYKKzdCRTNCNjIwNDdGMTFFRUIwRkU3NTEzQzlBN0VDQkFFRkRCNjc4RjI5NUNCRjdCNTVDREQwN0ZEQzExQTk3NjRBMzFDMUE3Nzg4N0QzQworRjlDMTNERjdEOTg3RTcyNUM0QkQxRTdGODBBODQzOEY1NEZDMzY2OEUyQ0NBRTQyQTU4QTA4MzU0ODI1QkI4N0JEMTQyNEExOTE5OTczCiszQjQ5QjZBM0E1NDY3QjNBOTlGNzBCNjNFRDM4NTQ5MTY4REQ1RkVGMEE2NjIwQkQ1QjgwNTA5NjgzNzdDN0VDQzRERjZBNDNDODUyQzUKKzcyMzM5QzBFNTRGOTk1NDcyNDBBQUY5NDg3Qjc0OENBODdBQjIyNzhCMTYyMjkxOTkxNTU2REZEQ0I1OTVDMjhEQjA1RDZENTUxMDgyNAorOTYxM0RDQUQ3MTQ0QTFFQzZEQTI1OUUxNkZEQUNFNzEyMkNFMUExNzFGQTAzNDZBOTE1NUIyNURDQThFNkJBNzMwMDQ1MTg5MURDMjFDCis3REI5MkUzQUQyMTgzQkI0RERBNzBDNjY5RjFGNTVGQ0MxOTFCNTk4MjNCMDE3RTU1RDE1RTlDMEVCNzk5QkJBREJCODkzNUFEOTBDQkQKK0ZCQTE1NkNCNTAzQTIzMzNBNEVCQTkyQ0EyRENFOTJDNUI2ODdBNEU0M0Y3M0JCN0YwOUI2MkZBNkJFN0UxNDk1MzE4Q0U0RTdCQTM0MworRDA4QTdDQjUzRTMyQjA1RjYzRDgzNkQ4QjU2Mjk2NTFBQTRDMkRDNjhBRjJFMTNGNDkyNzY0NTBGNjZCNTZDMUVGMjk5NjA0Q0YwOTMzCis0QzdCMTU0QzkyM0Q0MTA3RDA1NUFDN0VGMEYyODQ3OEZEMDZDNTRGNjYzQjE3MERENThBNDFGMjkzOTA0RUM3QUFGNkM4RTRERkRDQzMKKzdCMDg3MDJCQkQ4RkZCMzNCMDA3MDQ0QUNFRTdBQ0UzNDY0RDU0MzNBNTNBRkI2QjdFRTc1NENFRDgzMEExQzU0MEVCNTc3OEMyMjdDNAorNUNDN0JGQjk0ODUwNTQ0REU2QzBEMTk2MDg3NDU3NDI4NEIxRDAyNTZCRkI3RTU0ODNGREVEQUYzMUFDRjc4MjJBMkI5REQyN0VBMUEyCitCQTg5MUQ3MkM5QUUyOEYwNzQyMTFENTI4NzU4QzZFMTY4RkJCQjEyNzQxOTkyODlBQ0EwMzdEMUE2NDFBREVEN0YzMDBBNEIyN0M5NTQKKzYzQkVGOEE5QkQ0OUQ0OTYzMDA2NTVDMUFDQjcwQTJBM0ZGODlFMDY1QkU3OUY1RjI5MkVDNkY2QkQ2Rjg5ODdCN0E4RTJGNjY0MkU5MQorMThBQkFCNzFEQzcwNTk4MUMzMEM1MUM3RkU2QTEwODI4QThFRkVGQzQzRUZDQkI2QkNDNUE4NDkyRTAxNjlGMDM0OTI5NjhEN0YwRUExCitDNDMzOTUxOUVFMzZBMUU5MTAzNDY3MEE4NUIxOTNGNURCNjAzN0M1OUI1RTQ2MTgzRkZFNDY4QkRDQjc5NDkxOEJCQzhBRUIyQkE3MTUKKzA5MDhEQTBCNjM2NTNDMEJEQ0NGODBCQjY0RjM2RDBFNUU4RDQ2ODVCODBDRkM3RTNFNkY0REE0RkRENEJCOENBOERFNEFCRjE2NTAzQgorRDlGNkMzQzNCNkY4RjlDQjI5MkM5REFFRkNDNjhFRkFCMTYzODhBRkY5MjJCMzJCNTI1N0IwMzNDOUQ4RkMwNzhBRDI5NkQ0OUNCOEEzCiszQTMyQUYwMUZDMTkyQkE3OTJDM0ExNUU2QzVCN0E0QUZCMUMyRkIwMERGMTgwNzYyMjk1NTBBREQ0QTk5MTAzN0M1RDkxQjdDRkQ0QTMKKzVEMDhFOEZBODVEMTZDQzJDNDhGM0YzMkJBODk0Q0NCQTJDNkEzRjk2NEJEQ0I4QkM0RkI5MjI2QzdGODg5OTkwMEMyNjdDNzBFM0VEMworQzA3OTdGRDczNzdEMzA0NEQ0M0MwRTgxNzJCQjBGQjc0NkE3MDYyOTZENzBDRDIzQTVDRTI1ODg1MTU4QzgzRkEyQzlGMTBBQzFFMEJECis4Qzg4REQ2RDU4MTI4OUNFMTRBQTg4QjEwMkE0N0Q0RTUyNTQ2RUM2RkZFN0U4NDUwQUZFM0YwMTcwNkIyRTNBRkREQ0NFNERBQUI0MzEKKzU2MzhFMjhGQTQ2Njg0NThDQUIyNDY2NzY4QzFGM0Y4ODgxQ0VBOUU5QTdFRDU3QUU3QUZCNTNEQzU5MEU2MDFBRDExRUNBMEU1Q0IyRQorNEJFQTg5NUY2MjcxQjg3NUQwOUVEQjlENUI4RDkyNjQ3QjY3OTU0ODI0RjBBRDRERjFDQzlFODJGOTdEQjYzOEJCMTczMjJFQTI2QzZFCitDNEE1RTAyNDMzRDExQjZBMzdEMkFDMTBEQTZEMTAzNUIyM0YxQzZDODBCN0MzODJGMUVGQUM0NjIyQzA0MEQxMDhFRUU5MUMzOTdDQUMKK0UxRURDNzYxQzFFQkRBRkZDRDYxMjdCNDg2MjFFNjY2QTVBNUMzM0EzQkQ0RjU1OUM3QzJDQTdGRjNDNEJEREIyODhBMzA0M0UwOTQ0MQorRDM1Q0I1NEYxMjE4RkZDNDA5N0QxRkE2MDkxMTE4OTQ5NkExNkI0MEQzNEVEQTY0QTkyMjVFRjAwQjg3NTg4NTEyN0QyQTQ0MURFQ0VDCitCMkJGNkYxNEY2QTM4MTVBNzgwQTRERkNCNjIyN0M3MzU1QjM3N0VBNjFGOTI4RTk0NDg2Q0RDMEQ0MkVFOTI0OTRENTA2M0FCRTJEQ0QKKzREMjlFODk2NzgzNUJFNTg5NEQzOEYwOTM5OUU3MDQxOEQyMURCRDhBQzY3OTM2N0VBOURFRkE3MEJBRjYyNUY5NEY1NkNDRDFEQTZERQorQUNGNTgzRTk3NjNCQ0QwRUJDRDlFRTU4MTBDRDkzMzBGRUFGNUZFNjBCRTNBRjhBMTVBMUQ1OENBMkE5QjA3ODVCQzA5QUJDNTNGODZBCis2NkNDQkQ4ODE1RjNGOEI5QjE4Mzk2QjA0NURFM0I0QTAwRDU5RDQ3RjUyQjUyREU3QTUyQUIyNkY1RERBMDVFM0I5NzUxRUUxMUE2RjcKKzkyNjY1NEZDN0Y5MDlFQkI3NDIzMjk1Mzg1MDQ0QjhDNDRBMjAzMjAzMUQ0NjIwNDlGRkQ3N0NBOEYzMTc4NzI2OEY2NEZERjAwMzk3QQorQTg5NDk0MzA4QUQ5RUYxNURDRUY1NUJBMEM1QUM0RTQ0MzVBNTJEMjIyNUJGRUI0MzhDOTIzMENDNjkxMkRCMThGQ0QwQTZEN0Q0Qzg5CitCQjZCNjk5NzRCMENEQzI4RDA5NzRDOTRDMDVBNjExRUVDRTg2NjE0MEEwMEY0QkY5ODI4QzUzNjNEOUE2RkE4RkM5NzQzNjgzNzAzNzgKKzJFRUMxODlCNEFCOTYwQThCQTc1RUY0MzJEN0Y3QjgwNTFCMkQwMTJGRjc2RjFBNTVCQUJBMTZEQjlFRTVDOUJERDU3REE5QTg3QUNEMQorRDE4NzJFQjU2NzdBMTRDQzIwRjgzNzM5RDk1QUFEMEIzRjI2NTA2OTc2QjFDODIyQUE4Q0I0QTk2OTYwMjIwQ0IyNDUzREZCQjZFRTY3Cis2N0ZDNkMxNTRFQTkyN0ZBMDFFNjk3RDJGREU3M0Y5ODQwMDQzNDgwQTU4NDMzN0U3RjQ2NkY1MjQ4NTcwODQxQTczNDRBMzcyMzJDQkIKK0YwODhFQ0JCQkE5QURBODlBOEI4RDAwRUE3QUQ4RkEwMkE0Rjc5QUYyMUZCOEZDNDg3NTI4RTNGN0IzMUYxMUMzRjI2NDZGRDc4MTU1QgorRkIxMDI0NTk3ODU1NEQ4Qzk1QkE1OTkyNTI4MTVBNDk5NUE1MDcwMjYzNDg3NTg2MjZDQTM4NkYzMTc0OEY3MEMyREYxNDgyQjZDOTg3Cis1Q0I3NTQ2QjNCMUI3NTZGMzE2OUVBMzU4OUExRDBBNTQzRkIxNjU3OTUyMzQ0NjQyNDNBNkRFMTJBRkE3NkQ1NzdFQTU1QTRCNzY0RDAKKzIxQkJCNEYyMDNFRDY2QTRGRUMzQjUxMzMzQTU3Nzc2QTIxMjdERkM1OUVFMjgyMjkyMDBDOUI5M0ExRkQxRTg0QjlENUJBOEEyMkZDMAorMjRDODQ0RkY4MzUxMjU2RUJEQTI4Q0Q3OEM5REM3ODJFNUJCODVEMTg4QjRGQUU2QTQyN0MyNTFCRTJDNzk0RDhDNzdDQTM5Mjk2MDM5Cis5RUJDOEJFODREQjlDNzgzMTlCRDM4QTQ0MTE1OEE5OTlBNzRCMDRDNEM1MjQ2RDY5ODJFRjdEQ0Y4RDhBREIzMDRBODUxMTI2N0ZGQUMKK0MxQUJFNDZDOUVFMUNCQ0FENjM2NjVBQzYwNkNBQzdENTZFOUJDMzYwOUIzRUY3MjE3NkI0OUI2M0M5MEEwMTMwQ0QxODNCOTBBNkE0MAorNzk2RTRDQjkwOTFCQkEwRkZDOEQwRjhDRjJCMDE2ODAwQjFCNDM5QjVEQjZGRUEwQzM5OUY4QzFBMjJCMTg5NkUwNDg3QTA4NDc2RjY1CitGNTA1NzE3QUUyQkNBMzEyRUM4OTFCQUY5NUI0M0Y0OUM1RjcxQzNCRjRBOEIzRTBFMzdEOTNBNzBEMDZDMkZCQkJERDc3RTdBMDYzN0UKK0JCREEyN0MyN0M1MzlFQTNBRDc5MzZFNDU0NDU4M0RDQ0ZCRkFGNzM3QTYxNTU3QjBGRUQ1MjQ3MUI1QTU3MzNBMTU1OEM5QjUzRkQ1NworRDM2MTMwNjk0NUE2MTUwRDFDMEZDNUVERjUyMUYxN0Y0RDcyNDM0OEQ1RUZCODZFOEZBODA4RDJDRjAxOTc3QjQzMUQzRTlGNEU4QTNDCitDQjFDQ0I0QjE3NTBDQTI5MzZBMzYyQTYxMEIwNUM3M0UzODJENzYxMTgwMjRFNThFRDUxMkIyMTJCMURBQkVFQ0RBNzE5NkM3NUJERUYKKzMwNDk0NTUyNzg5NTZGNjBGQTAwRDQ1MDcyOUNDRDBGMDFCNEE2M0FEMzBEOTJCMEMxNEMxNThCMTgzNjQ3QjY1NUFFREVBNjEyQ0ZBMAorQkU4OUY3OUMyMkYxRjJENkFBQjIwQ0MzODIzNTVCMTE1OUQxNkI3QzI5RURCRjA2RTY4MzFCMzk1RUE3QTQxMDJDOTlFNDAwRjkxMUEzCitGMzA2NTg5QzVERTZDM0ZDQ0Q0MDJCNEUyNUU4NUM2NUIzMDFDMzk2QURBMDlENkE0NTc3RjM4RDIxRUVBNkZCQThENTBCNUZDMzFDOTUKKzc0MEE5QTc0NDZCOUZDQjVEMzdBREMzMDEwMDBBQUJDN0Q4RUE4REQ1OUE2M0RBMEZBOEY3MDM4QkIxRDlCMjk0ODYzNTQyNEM4MEJEMQorQ0FGQ0IxMUZCQjg1NDk3QkM0QzNCQ0FFMkEyNEI5MzczQ0JEMDA1NjgxODM1RDZGQTc3OThBNDVGQjAxQzUxREI4NDJCNkQ0NzM3OTAxCis4MzQ5QUU3RDhDNUE0ODA1MDI4QjFEQjRGNjM0ODY5QTNCQ0EwNjAyOUU4QkVBMDI4MzIzOTc2MjdEREZFOEJBQTQ0QjA1RDVFQjU1QjkKKzI2NTVBMzg3RTM0MDczMDhFMzRBRDIwMzhDNzgwMzc5OTUzMzlFMDQ3RDkzMTBCOEVFQTg1RkUyNzU2MzZENkM1QzE5NTg2NzAxRkEyMQorRUJCNzQzNEE0OTE1Q0E3MUJCMEU4MzNDMTY3MTJCQzYzREU5OEI1MjA5QjBBNzMwMTgwQzVENjAxMkZBODFFQUUwMDFFMUMxRTE0RDgwCiszNENFNjQyQTMxRUZBMTJCM0ExNUVBNTNCRDg5QzQ5MkNENjY3MDUzOEI3QkZEQ0M2MjlBQ0JGQ0FFRTRGQzRDRUEwNzBDQ0ZDQjc1NjAKK0I0RjkzM0UzRDlEMjU5RjcwQ0MzNjk3OTAxOTI5QTFGMTYwNUVFOEEwRTAxRUU4NUQ0RkZGQjE2N0RFNkQ5MTZGMjYzMERFQjhDRjMxNworRjQ5NEM0Q0FDM0VFNzNCRTM5MkVGOTZGQkQyMzJFNEE3NzYwMjJFRTA0MTQ2NTUyRjBFMUQ2NkI0QkMxNDMwMjk4NkZDRUY3NkYxQjdFCisxOTY3NTNBMkI0QkNBODdGODA0ODk2QjczOTJGRjhFNTE4MzQ0ODg5OTYxN0YwMjAzODZFNjg4RTdFMjYyODZDRTVEMDYwQjAwQjQ4NUQKK0VEMjY0RDE5MUE1QjUyOEE0RTUxNjgzMjY0MDM1NEMzMUQ2MUVDNEY3RkE3MDEyNUI1QzYzNDlGREUzMDY5NEU5NTA0QzBBMDgwRDI1MgorQjkyMjMwNTg3NEYzOTM1NEEwRkMxQTE5NjAyMUUyOUM1MTZENjJBNzgzQUMyNTk0QzI4RjY5RjY4MDMzMTRGNjc0NUFFNjY4NUUzODFCCitGQUY4M0YxNEI4NDY0RDdEQTQxOThCRTQ4RTc2MDExQkU2QjMxNzFFQUQzNzBDQTY5OUU3MDc2MDcxQjJGRjE4NTZGNkJEQzYxRjNGMDEKKzAzNEFERERERjU2Q0M0OTE0QUQ3NDI4Mjg1OUM2MzJCOUIxNDI5M0NEQkJEOUZGOEZENDQwM0NGREI3NjFEM0NCRUZGODQzOTFFM0Q1QQorMDZCNUQ5MzJERUYwODYxRUJFNkREODg1QzlDMzFEQTc2NUZDRjM1ODg0NzMzM0M5NjZGRDM5RTUwMDBFOTgzNUEzNUYzQkE5M0ZBMjBDCis0QzQ1OUE4RjREQUVERTJDOTlFRkJBMTNFQzBCODJBQjU0NkNGREY3QTk3ODc5NjQyRDk3RjY5QzIxNzM3QjIyMjgzQjYzNjQ5NEM5RUEKKzEyOUExNjFCRDhDOURENTY1QkZCMkEzNTUwM0I1QkY4QTk1QUE2OTYyN0UyQTFCQkJCRjVCQkVBQTc0QTU4Q0NCMTFGN0NGQTQyMEI1RAorNzBCM0UzOTJENTRBNTJGRTU5RUM5QTMwMTdCRDJEODNCNEU5MEUyNEQ5RkNDNkQ4MTZFOTc1NTQ0Qjk2QkIxRjQ0NDNDREI4MTkxOEE3Cis3RkREQUIyNUQ5QkY3MkQyMERFMTc2ODkxMjFFQzU3NTdCQjE4MzI0QUMwRDVGMzI0REJEODlCNzJGMjI3MUZBMzYyQkM4Q0NBQ0ZFQ0QKK0NDMjUzMzFCRThBQjhGRUQ0NkE2RTY5MUYzQUE2QjA3MDFGNTgyQ0E4NzUzRjY0ODgyOENEM0ZBQjZFNDNDQzkyQTkyNEYyNDVGQzYwOAorMzUwRjgyQ0FGRjc3RUM5RTJFMjRGOTg1NDM2RUNBNEFEODRFQjI0NDM1QTVDNEIzMzAxOThCMjNFODI1RDFFQ0M3REM1NTgyODg2RTkwCitEMkVBN0NCQUM5MDM3QjExQjE1NkFEQjgxMTBCNkZCNzk1QkZDNkQzOTdCMzlGRjc5RDhGQkJENDJBMDBDNjAyMEM2M0IwMTFDREUyREYKKzI2OUY0NzU0RTg5Q0YzRjE4RjJCOURFQkUzODUwQTg2QUFDMEY1MDA2QjUyOENFMzBCRkYwNTUxMTBEOEFGQTY4OEJBM0I5RjBEMjRBRQorNTAxNDNGMDlENkVFNjkyNkJGQTJFNDYwQjVCM0M0ODZGMzgxMEM1Q0Y2OEY2N0ZFMkE5REQ3RkU5QjM5QkRCQjI0RDZFNTlEMTIxMDhDCis1MDE2MDA3QkI5RkMyMjc5MTYyMkMwNDQxMzJCRTZCQjhGN0Y5QzI3OEM3NTVERUYwMDRFMzEwRUFDRDhGMzk5MzNBNkRGNTZCRUJDNUYKK0I3MkI0REMzM0VCMjU1QjY0NUNFREZFREI5MDBCNkU4QjFGQUE0RUQxNTIyMjJBM0U2RkVBOEQ4QkZDN0M0NzdFRjhENzU1N0I3MEU0OAorNjkzRjhDMERDRDExOEVGNTQ0RTc4MkMyM0REM0FBM0Q2NkM5MDg1MUFDMDVCNTgxODgzMUUzQUFGMUM0REU5NTI5Mjc1REZBQ0FGNDhBCisyQTg3QkVCQ0Y0RUU5NDg0MTUzNDEyMjc0NjFEODYyN0QyMTg3Q0M5MTg0REQzMzQzRjU1NERFQkIyNjhCNjVBRDgzMTQ5OTZCQ0FENTUKK0Y3NUI1OTgzRjYyRUZERjEwQzU4MEFFNDc4QjZDM0M5MjU5NTQ5MEE5RTNBRjhEMjc5MjQ2QUZGRkNBM0YzRjdFNzlGRURDQjY1MkNGQworNTdDQzMxQjg5RTE4QUE2QzVGODM5RERDM0VDQ0VBMDI2NDc5NENBMzE2RUVFMjRBOTNBMjVFMkREMTJGMDExNUI2Q0I2NTAyMjdGQjI2CiszMEFGNENGNTVGN0FFNDcwMTMxMEUxMTYzNkEzOUM5RkQxRDM0MzY1MjRDNTdBQUY0MDlEMjQyNzZEQ0MwQTVDQkU0N0VBRTYyNEQ4MTQKK0EzQTA5NEM1Qzk2MEMzNTY2Nzc4RTg1MEJBMDRDQ0I1OEU1MDE2Q0JFMzk5QTIwMUI3ODhBNDQ4Rjk5NjlDQjFDODlFQkQ5NThBRDgzRQorNEU5RTIwMDFENUE3MTIwRTczREYwRDcyMkFBM0RDMUNEMDZGMTFCMkY4RTkxMUI3OTRFNTBCNTBGQUEyOUI0OUFFMDFCNUMzNjFGMDhFCisyN0JGRjhEQkMxNkY0RTRFQzAzNEIzQUIxNUYwNkMwOEM5RUY0QjVCMDU0MzI3QkIzQTVEMjVFNDFGM0VERDUzRTJGRjRFRjM4NDEzRUMKK0Y1RTY5MzIyNUMyNTVBOUUxRjQwNjBCMUZGRjhFMzgzNTdEMDY1NDlDNTE3RjQ1OEI2MkE4RTEyMzk4NTk4ODcyNkRCOERFM0M5REIzNworODQ4MERGMEQ3MzFCMTAwOTUxNjQzNzUxMkYyQzdGODk4NjI4MzMwQjBCMkIyOTYwQ0Y4MTVBQUQ5MTcxRTgwOTdDOTMzRUFGQ0EwMjZCCisxRURBMkZENUUxRTVGRUExQ0Q3NjA0MTI0MjM0Q0QwNEY1MEFCNTlEQkZGMTMxODQyM0U0RkE2RkNDNkI3RTkxRTRGQkRBMTQ5NDA0RUQKK0U4RTEzOTkzRjY1RjEyRUQ4MEI2M0ZCMTM3NzE3OTkwRjQ1MDJBNjFDMDBEQUJEOTM0NUU5NEYwNDMxMzNBQkVFMjJEMkI3RkYwREYyMQorQzQxOTVDM0UyRjdBQkQ2Mzk5NDFFNDc4ODI0NzBBNkNBQUQwQjRBOEM5NkI0RTRFMURCOTE4QjhBOTI2QUI0MEUxODU5RDcxOUZEMzgxCitGREEzRjE0OTAwNzZFQUY1RDE3MzExQ0JCNTlBMjZEMTk4Q0YwMzZCNUQ2QTU1MTY2NEUyQzIwNkM5MTBGOEE3MzY5MTgzQkI5NTMyOUMKKzA5N0E3RENCOTkyNTA3RjQ3OUNGNTQ2RDY0NUQ1MkYyQkJCNDUyRUJDQUI0MEZENDEwOTQ2NEQxNjBCOTdBQ0FGMjI2REY3NjNGQjAyNAorOUFDOTdCNzFGNzM1Q0JGQTU2RDJFNkFDRDc3MTBDRTlCQzIxODlGRTUzRjVCQjQxQzU4QzBGRjFBMUM1NDQyRkRDNzZEMjFFNjI3M0Y0CisxODk2RDczOTRDRUE2Qzc1MDA5NTBBQjg1RkFDNUM4RDRDRjE3NjY2ODBBMENGQTI0M0EwMEI3REUyRDE4MERDRDE0MTdDRjI1RDdBMzAKKzVBMUIxNzUzNEZEMUQ4NTk1RkU3MDRBMzZCNDAyRjg2OEU1MzRGRTdDQUNBRDAzOUUxM0NGRjRDRTU5RDM4MkMxMDdGQjlERDk4NjIzQQorMEZDMDRGOTMzNzAxMDAzMUFBNDdCNzkzOEYxMTEzMzVFQjY4QUZDQzg2RTQ3N0Q1RTc2QTFFNDc1OEM3MzE5OTM4OTQ0ODUwRTcxMzMzCiswRjIwRTlBOURGOTY5MTczMDE4Q0ZGNTk0ODcxNjc2NDIwMTM2QkIxQTNFMENDODlDMjMyN0Y2OEIwQTQ4N0Q5NTQ2M0QxODNFQ0NGMDcKKzRCQTY4NzBFQTkzMzJGRjhCMjY0QUE3Nzk2NTBBMDBBMDRDRDVENDQzQ0EwOTQ1M0RDOTYxRDMxOTNCRDIyMkQxRjgwQkEwQjlDNDE2MgorRDIwQ0I4MDFCMUQ2RThERDNEOTdDRjA1Qjg0MUJBQjNERjIyRERCQjA2REQ2QTY4MkM2QTFFM0NFNTk1QTI4Q0FBRDk4NDA3NTdFQzZGCis4QkU2NkQ2QjlDQTNGNkVERDVCRUI2MzI0ODczQzBFQzdCOEIxMDg3MzFGM0U2QkM2NTg4RDY5RTRDNzU3M0Q0N0JCREQ5M0QwM0UwNTAKKzA3NkI5QTBFRUJEN0MwMjBCREM2NDEyN0FCNTg0MjQyOTFCMUJDNzBBOUYzRDMyNkM2N0Q5M0FEMjRGNjdDRTlBRTZCREM4MjlEN0REMQorNjFFRjNDMUE0Nzk5MUY1NEE4MDdDMDhBRTBBRjI0RDZCOTUyRTY2Q0I4RTkxOTZFQTAwRjNBRkRDQjE0MTNBMzM3NjNFMjQxMDk3NTlCCitDREI1OUMyMjU3QzI4NjRDNDU4NzE5QkUxN0Q5Mjk5MTFDN0ZENzIxNDg4MTU3OTFBMTJFQzJEMkEzREQ2NDA3MzMwQ0UwQjRERkMzQTIKKzQ0MEZGMEQ2OTc0QjkyQjgxRkJGMDRCMEZDNEU0NDI5QjAwOUMzODhGQThGREVBMDI5QUFENzAxNTFGNUJGNzZCMTM5MzNEM0Y1NUI1QQorQzAwREZEQ0VBOTFBREM3M0QzRENFRjI5RUMyNjFFMDdCOTY0MjFFNjQ4NjVGREUxRjhFRkI3QjVBQjEyNzNENUMyQkQ1MjYxQUNFQURECis3ODUxNTA0RDE5QTkxRjI5NUQ2NjRCNDQwQUE2MTYzNkI2MkQwMkEzNDFDRUYxNDU5MjBDMzk2QzQyMjQ0Q0YxM0VCQjIxRDRCQzg1RDkKKzk1QTU3NTYzQ0JBMEQ0RDA0NkFDMEIwRDFCNDBEMUJDREIyNkU1QUI4NkExNzIwMDA1NTA0QkUzRDczRUUyMjAxOEYzNjQyQjFEOENGNgorNDU5NkExNUFCQTg4ODkxNkU5RjEyQkNCMTVFQjgyMzMzN0RFOTAwMTVGRkY1RDFCODdERTg0NDk1RjY5NkJBN0UxNzA0QjQyODEzM0RCCis1NDkxNkE0QkI3RTMxQkYzNkNDNzRBQzFCMUMxQUFDQzE3NkU0NEI0NUNFNjg2NEVCRjcyNEQyODgxOUNBODBGQ0QxQkNBQzlDNkU5MkMKK0U2MkQzMDRFMkQxOEEzQzg4MjA3NERFQUZFREYxQzU1MTA0RjYyOTQ4MUU2RTQyRUU0NTA3MkJCQUIzMDc0RUI1QUExRDQ5NThCRkZCNgorRTU0MUZDMTg0OUU2RjU0MDIxNjVGNUM0Rjc1MEY3MkNGRDkwQkEwM0NDRUQ3QzUwMTQ3NDVCMEY5NjQyRTI3MUZCRjY2NDVBRjQzMEQwCitFOTI5ODRCQjRGOTZDOTkzRTMxODZDMEQ4QzI4OTdCNjkyQzBBMEQxOThGRjlFNDRDNjQ4RkMyNzIzRjhEOEE1NDdGN0VEMDhFODlFMDIKK0MwMEQyNkE1MEJDOEExQzcxNEJERTUzNDU4MDE3NkM3RjVEMzE1MzUxNEZDQTIzQzJEOUNGM0I2RUZGN0NGNjgzNzEyQkI3QUIzQzdEMgorQTNFNjY0MjdFRDBCNjI1QzA4OEEyQTU3RUVBQTJDNDY3RkFGMEFDNTcyODQ5NTQ1MUFDQTA4QUU1NTA2RjU0MTA0MTFEMkIwOTEyRDNBCitGNkEzOTFGQzdBNEQ3MTA4QzFCMkZGMEQxRjlEMDlDMjM5NkNBODVFQ0I0ODg1QjM4NkY1RkY1MDYxQUI3OEQ5RDkxNUIyRDNBQTA1Q0MKKzE5MkNFMjc1MUI4RTFDOTlCMDQzQjI0OTUwRjI1RDU4QkU5Mzc3REMxQjkxOThDNURGQjVGRDZBMEI5MUVCOTBBNUYwMTI1N0FCQjE1RAorREU4QjM3NUIwREQ1NUNCMThCOEE0MjU5NDcyNDg0NEZCQjg5RkNBMjIxNTUzNkJEOUNBRDg2NjFDQTZDOTJFMzJBRDQzMkY1ODEzODNBCis5MENERTA1RjM0RkFBNTg1RkRFN0RBNDI4ODlFQjM0NzUyQUIyNkQyMUQxMzkxOEJCQURDMjNEOUMzNUI4OEM2RkRFMzFFQUMyQTQyOTUKK0Y0MTU5Q0UxQ0M5NDJCOTgzMDEyOUExQjk0NzRGMTU0QTE3NUYzQTcxRDg2RjFCREI0QkJGMTUwNjY5NDg5ODRCNEZFOTAyQzNGOEYzQworMEE0NkU2QTUxRDg2MDU0RDY4M0MwQTExRUQwRjE1MUY3OTA1REU3M0M1ODkzMzkxNTNFOEI0NzA4RjZEOTRDRTAyNTgxQzgzN0M0MUYyCitENjU1NTZGNUE3MDZDMDZGRkFENDM2NjlDQ0REQjJGRkZCRTAxRENENDYzODBFREMxNkUwODk0NUVCRDc0OUFEMkFFREQ3Q0JDN0MyRTIKK0UzRTRGNjY2QUFBRTdBNzE4QUI1RkI2QTY3Mjk3RDhGOUZGNzY4RkQyMTZFNERCNDY0NTM4M0VDNDUyRjMzQzEwNDNCMjNFRDk3ODNDNQorQzc2MzMxMDE3RURFQTgyRTI5Q0NBOEY0MzZEQjczMTU2QTcxMzMzRTg4NTFDQkNBRjJBNzIxQjdBNTc4MDBDRDcyQUFERjQwQjY2MjBGCitCOTMyNDM1QUZFM0ZFOTg2NzIwRkU3MTNENDI0QTNGMEU5MzYxNjg5NjBFMTcxQjlCNUI4NzIxQjY5OUMzOUI3MEU0MkM4RTA0MzBFNjYKKzlCREQyODcwQjdDNEM2NjQ0MEMxMDZEQkRCQTc2NjU4MzhGOUM2Q0Y2NzQ2RTE1REI3MjVGNTAwQUQzRDNFMkJBMkM3OTk3RkYwRDUxMworQzkxQkI1QzQ4MjRENTFCODlFN0ZGM0NFMjZFRUQzNUU5QTJEREE3NDIwMDI2RDg5Njc0RjdEMzE4NEU2Qzc2RDRCNkQzMkYyOEIxNzBDCitBOTI4QjU4Q0E5MjVFNjlGMDRBMjJFODVFMUVCQjg2MkM1QUIwOTk2RjA1QzYyRTZEQThEQjBCNjE5NUI3MkQ0NzNFQTIzQ0I4Rjk5MDAKKzNDN0YzNUQ1MUQ0ODBEMDU0N0JBQkY5OTNCOTIzNTQ5M0Q0NDcyMzJCMzYyRDM4MkZGOTJCQTEzNTU5RjY5QTdFOTVDMTc5NzZBNUExQQorOTc5RUE2ODcyMjdCRDk2OUQwNkU3MzAxOEZCMDk3MzE5RkE2MkQ3Q0VDOEIwNDQxOUREQjQ0MzU5NzIzODJDMDRGRjlDNTcwNURGQkE2Cis1NDg1NjFEMzFDRTAwNDU3NTU5NTM0RTUzMTM3NzE5MzE2OUE4NDQxNTJDRDA0MjIyM0I0N0I3MTY2QTZDRUVEMkI3NDZBQzIxMjUxRUIKKzkwMEY5M0ZDNkY2MjVEOEZERTZFMUQ1Mzc0OTUwRjREREQ4MTc1NDhFQkRERUYyMDEyM0ZDRUQ0QzNERjdBN0Y3Q0U2NUU5QjVGQzNENAorRjA3OUIyODFEN0MwM0RDQkU5QjhEODc5MzVENDJDQUUzRUNFNTRFRUJFNDFDMDBDRkM5OEU2NDc4MDkzNUFENjc1OTYyQkU5REQ5OTA1Cis5QkMxREI1OTdERTc3OEMxNjhGNDQ5MkMyNjE2NzA4NTAzMkU1MTE0ODRBQ0U2RkRDOENGODg1REUyMDBGRjBBOTkwMjI2RDA2NDBCRjMKK0Q3OEY1MzU3Njg3NTIwMEU4NTYwODlCMTFBNTdBNjU3RDM3RTBCQzVCNjA0NjY3MDM3NzExNDM5NkI4Qzc0MEI1QzE2NkUxNUFERDVGMAorOUJERDBDQzNCRDExQzM0MkI2OUMyRDkwRTU1MDdEODNEM0Y2RkQzREMxNDRBMkQyQzgwQTAyRjQ1NTE0M0YxNTk0OUI4MTM3NEJENDM2CiswRTM1OTFGMEVFMjYwMjMzRjg0QjUwQ0FBQzUwMTNENkFCNjEyODM3MTE5QUMzQUJCNkIyREJGMEFEQzA2RUI0RDQyOTVFNDhGMUI2REYKKzYwRTZDOTgzMzJBMzgwQkI5OTdCNzY5RjdDNjk5ODI3QTZFQUNCOUUxNEI3OUNGQkY4M0UxMUFBOEI5NkEzRUU5MEEyQUVENDAzNTI5NgorMDU4MzRGMTQ4OUNDRTc1NDQzRTc1MzgyRDFCNDEzRDhFMEFCNEY4QUE3QzY5QTNFNDk5RkMwMDc3REZDOUM4QUUxNTVGNUVCNDAzNTc5CitCNjI5M0U4MEJFMzcyMTk3RjMzQUUxNkIzRjQxRjc1RkQwMzUwRTMyNjdEOTYzRDdEMzlBQUU5RjY3NDFFQjFEMjQyQjNGOUNCMzk5N0EKKzA1Nzc0MjFCODE2MTY0QTUyNTk0NTdGNTY3MjRFN0ZENTYyQUU2NzEzNkQ1QkY3NUFBRTkyOTM0RjczMjQwQzk4RjI4OUM1NjZCODU4MgorRUZGRjM0NzcxRTlBMUMwNEZBMDFBQTk2QzI1OEEzQzcwNTUwODc3MjE5ODFGNDM0M0NCODdGMDdGRDQ5Qjk1NzZDNEY5NDI5QkNFQ0EwCisyMDAyNzk4NzYwOUY2QTQ5RDczOTg0ODE5Qzk0MEFBMTcwMUE2QzcwMDg2QkRFNzIwRTFGQ0IwQzZGRkYxNEUxNTk3OEU0NjJBM0Q1QUIKKzREMEYyMjJBOTkwRUZCNkQwOUVDNjdCNDY3RUZDODgyNzVERjI1OThGNTk1MTg2REU5MUYzOThBRDhDQTNEMjMyRUU2RkJCRjJCOTU5NQorMDczNUUwRjYyNUI3MDlDRDRFRDEyNkMwNjM4OTRCRkE1RkFDNEY0QjdBODA5MUZCOUQ5NEQyOTRFM0MyODQ3ODE0ODIxODREOUFBQkQ4CisxRjcyM0IxRjlEOEFCMkM3MTU3RjhFNEE2MzZGMjUzQ0NFM0VBRDE4QTBGN0Q4QzM4Qjc2Qjg4OTEzQjhFOERGMTIxOTAyQkNBMUVFOEMKKzRDQTJCMDVFRkI1RkZEOEMxRUU0NzAyODg1RUJFOTY3NTVBMkQ1ODEzNzhGNzE2NDY4ODZEQzE0MDIxNkQxM0FENEMzQjNGMkMwRDJDQworRDhEQ0Q0RDlFRjY5OTUxMzVENjIxNEVDNEUzRDY1M0ZFQjExQzIyRjVFQkZGNDNFRTU1MjMwQTg2QjhFNzhFMzEyQjdBQkFBQjdCNzQ5CitGN0M3MzcxODUwNEIyODY4N0FFQUY3MzFGQjgzRUE0QzBCOUI1NDc3Q0M1MkE1RDBCRDQyNTJGQUIwOTVGNTU4NTUzRkFFQTU3ODRCOTQKKzE2ODNFMERERTQzQTNDN0IxOUE2QzhBNEQzOUZERkJFNTBGOTY3MDk1QjIwMkY1QTE4NDI0NEMzMUMyMTQ5RTczQ0NFN0UwRDMyRkVFMgorNTg0MjVEMEJDRURGOUJEMkZDMjQ5NjA4QzZFQ0JBRDRCN0VBQTY0RDdEMDFGMzMzQUUzMzREMTczRTg1OUYxNjMzOTZBODhBMUUwOUEzCis5NkY0N0EzRkQ0NDU3MzFGMThFQTdCRDI2QzYyMUUzNDlFMzE0MTU5Qjk5REM0NDMyQUJDOUZDMkU1Q0JEOEUxNjJEOUNCRkM3RjVEOEEKKzkwQjdBMTk1QTdCNTE3QTkxQkQ4QUY1MTdFQjI2QThFQkZFMzBDRTY2N0JDMzc2ODcwRTQwNUY0REVFQTNDRjQzMzFCMUE4OUIxNDJBMQorRERGMzQzQjUyNDE5NTI4NjI4MDQwRDE3M0VCMDgyOEM3QjAwQkE2MkJGNURFNDk1NkIyM0ZFNjJGNTU1REM2RUFEQUZFMTgzMTVGMjY4CisxNUQzREUxQUQ1Qjk4MDhGM0EwMTZEQjY2QjE5Njk5OTJCRTdDQzY3NkVEQzI2Qjg3QTExQTg5Mjc4QTgyREIwNEJGNDFDQjIxQzgwNUYKKzJEMkNCQjlCNEU3ODFGNkI0REM3NTU4ODBFRjA1NEM3NDg3MEI4NDczMzJCMzQ0REQwNTZGMUEzRDczMTkxNjJFNzgyQTYyNUUxMTEwQQorQzgwREUxMENCMjZGN0U2NzBCRjk5N0VFRUJDMzFDMERDODc1QkE2N0JGN0VFOTZDNzAzNDdERkUwMkZDNjRGNEY3NjMyQjJDRDFEODJECiswMjZBMkQ3QzE0NTM2RTdDOEFERDE4NDkxQ0YyQzAzQjk0QkRGNEE1NDUxMUI3QzlBNTE1RjNFRkJGMTIwNDkxMTEzRTdFQjU4RkVEMDgKKzFGMTZCRTMyRUU3RDFCRDY0Q0QxMzQ4MzRGMjA2RTYzNkY5REExREY3RTM5MzY1OTgyMTQ5MEU5MkE4MUNBRDg3NTczNjcxM0Q2RUIyNgorOTNFMDkwNkM0MzQ3Njk5RjU2MzJBN0QzRkVFNjJDNUJEMDk1NjRBRUJFQ0MwQTA5NTAwRjEyMTZCMkJDQzhEOUFDQ0U4NTkxMEJDNDA2Cis3MTY3MDExN0VDMjc5REQzQUUyMTIzMjlCNTBFNTVERTFERkE0RDM0RUVFQjUzM0FGNTQwNzMzMUNFOEZDQjJEMzlGMkRDNTk2NTRGQkIKKzkwQTgxNDU2ODkxNDU0MTRBOTU5NTFDMkU0MUE2NDM3NUIzQjdDN0VGRTg1MEZDMTUyREIyMjI2RjUxMTkwNkNCMDFDNEQ0ODdEQzdENAorNjY3Njc4NDgyREEyQTBCNTc3MjhCQkJFMDRGRDc0MjBDNDkyODk4MzFEQzhBNjI3QzgyMjM2QjM3NjREQ0RBMzk5RDVDOEVCMEUwOTE3CiswQTFDQThFNDNCNENDMkMwQUJFQzVCNjBBMEFFRTVERjczOEI3NkMwOEIzNTQzNzJCQzI4QTFFMzk4MTU5QjlCNjg2MzQ1OEVGNDBCREIKKzgxMDczMUE0NTk5NkE2NEVDODA4ODlCOTRBMTJDNkM1RTNDRkNFN0ZFRTA5MzFBRDNCRUFEMzFDNjBFMDdCNzNCMTgyOEM4NjkxNjk3OQorNTQ2MDJBQTYyMjZBODMwOTAyQkJCQ0M4RDI1NDk0QTdCMjRBNjdDRTJCMjU4QTgwNTBCOTY1OUQzRkJEM0UzQjA0OTlBN0ZBRDkwODUxCiswREFBNEUwQThGQzM5QkE2QTg3MTkwNUJFQzM1MzUwMzJCRDJGQzY0MUY1MzI3NEVEOEE0N0I4RDhGNjkzRTcyMkUyODQ4MEIzM0FGNzkKKzc4MEYyNDY5NzlDMEJBOTExMjA3MUU0NUM3MzVBQzM4RTBBMkZBRTYxRUQ4Q0VDNDgxMzA2NUVCRDFFQjMxRkI1RjBERjM3MzIyQjNDNAorNzlENkQ4QUJFN0QzMDIyRTFCMTA5OTFGOURCMDNEMzM5NEJENzFBRDc3NjNEOEEyODdBMkYxMUEzRjRDQjg3RjBBNEQxREZDMTFDOTM2Cis3NzY5NjYwQkYwNjA5NjUxNTRGQkMwMjU1RDZDRDQxRTc3QUJGNTI4OTIyODA5RDE0MUE4MDY3OEIxRjU2NDg1MDkzNzM0MjAxMUMyQ0QKK0E3MTkzQTRCRERDQTNGQjE3NzNGRUNENDBCMzdGMzY3NTA3RUJFMkM0RjY5Nzc4QkRERTU0REY5RUY3MDU4M0RDOThGODBFRTk4NEVDRgorMjk2NDY0NjdBNDgxMTVCNUI0MERDMkM3MjUxMDBBNUJEQ0Y4NTI0RUU2MUI4NDFBNDVDMTU4MzIzNkVEN0JEOTdGMzdFMEE5NDg2OTAyCis1NUE3OEE0NTYzRjI1QkJDMTk1N0UyNjdCQ0MyOTMyQjU5RUU5RjYyRkQ3RUMwNTMwNDFBRTkwQTE2NUU0REM0MTJGM0I1NTI1OTMyQTAKKzVEMUI3MjlFRTA0OUU5NUZEN0RERkM0MTI4OUVEMzA1NDMwQ0I5QTBCQTBFMjk4M0M0OTY2QUQxRTRDNjM0RTY3ODk5QzE1Q0FFODRENgorQzZBMEMyRDZBMjc0MkQ3NDFFRTVGQjg5N0UwMDRGQTZBQTQ4QUJBNzMzMkZCREYwOTcxQTQxNDhGRTczQUY2RDQwOTQ4ODlBODdBQjA2CitGRUZCOTdFMTFFRDc4QzNGQUQ3NjM3NkMzNjIwREVFRjgwQkJGN0IyODYyOTAxNjVGNTlCNzhFMjFGOTZGQzJFRjAzNkQ2NUIwMTU4OUMKKzE0REMzMDBDQTJCRUY1RTVDOTQxNEE0QjdGNEUyNDM0REZDQkFFMDUxMEM3Q0FBRjVGODZBOTE3QkRDQzg1QTBDN0QwQkNBMEFDRUY0OAorRTU0QkUxRDk0MzMyNEU4MjZFMUU5RDNGMEE1NEQzNjQ3NEY3NDMwMEY5NEUwRDczOTFBMTM4ODQ0NDA5MTVEMUY5MUY1QkFGMzEwMjMwCis5REMxOEEyQTc1RTg3REE3MjI3NjRFNzk5QTExQ0U4OTgzMzIwNUI5REZGMjU5NDhFNUQxRjNBM0NCMUU2MTFDRTI5OURCNzM0M0YzMjAKKzAwRjI2QTEwQzRFNjM1ODM1OEE1RjY1NUQxNUQzODFBNkQ5ODAwMkQ4M0RFMjlCMUFDOTQzQTRDNkY0MjhENzZFNjA3NzAyQjc3NzRDRAorREFBM0VENzExRjM1MkY1QTY1REYwMUJDQjBCN0IyNUNGODAxRTI0QTRFMzk3Nzg0MEQwQzZDNDJENzFDNzVBQUEwMEYyNjVDRDI1OUI3CitDQTBFQzI3Q0YwQjEyMDM5NTE1MkYyOUVDMTczNEZFNUY0MEFFQjRCQ0NCNkQ5QUEwQzVEMzhGRTczMjRGRUVDQUM1MDEzNDQ2RUIzQkMKK0U3REQ0NjgwNDdEMEI3NzA1RkVDODk4NzAwNzNFNUVGODI5RDRCNzgyQThDNjdFMTM0QUNBMUZEN0ZGNDQwNUUxRDM5OUY4NzZGOTM2MQorNEVGODhFMkY2NUUxM0IxQ0NCMEQ5MTQ5QzU5MTI5MzkxODQzMTUwQUQ0OTI1Q0Q5NUEzQ0QwNTc4N0VEQzIzNkI1RkIwMDcyRERBQjE0CitBMTQ4MDUzQTRFMDYxNjk5ODA0OTBCQTBFNUI4QkQ0NkRDQ0QwNjNBRURGMTlCQjRBQzZGMTM5NjI5NjQzNUM0OTc1NkQwNDNCMTFDRUQKK0NFNjZFNzExMDhGQjZBNUYyOTdBNDc2RUY0MTRBRjc1RDgxMkQ0RTQ4MzBBODA4OTQ4MDkyMzVFRjFDNDM1MjhEMEFGRTM5Mzg3MjhBOQorNTY4NTA0OUQzMTU0OENCNUZCRTI4MUMzNTAxRDA1MEU4QTNFQTUyNUE1NTUwNkZGQTMxRjAxNjQ5MTlCMzBBOUI0QUZDNzAyMjUwNDhFCis5MzUxN0UyMzRCMEQ2NzFBOUY3NEFFOEREMTU1RDM1REQ3MkM2QzhGRDM1OUI1MDIzRUY1QkM3NEE1OUQxNTlFMjZCQTY4RjNEMEQ3RDEKK0Q5MEYxQjY0QTRDRDI3MEMxREI2NzgzMkM4MTRCNDRBQUIyNDQ3RENCMDBGNzNDMURENTA4MEM3NjE2MTExQUNCNjI4OUEwMzYyQjVGRQorQzM5QjA5RDYyRjkyNEE5OEMzN0YxQzNEM0QxOEI3MDE4RTZGNkQ2Rjg1MTQzNkFGNkNFQjY2NjkxNDNEMzBDODVGOTU4REIyNzQ3MjEzCis3N0I1QjczNzM4Rjk0NDI1ODYwMDhDMzhCODQzRTlBNTY3RjdFQTg3NkEzQTMzRTE4MjdGMTJCNjc1MTZBQjJBNjc4RjEzMUQ4RkFGNjIKK0RGOTIzQkQ2QzRDNUMyREUwQjlCMjI5NTQxQTAyRTkxODVBQjZDN0E1NkY0RENGQjU5MTI4ODgxRDg3QzdBODg2NjE0MEFFRjBDNkM0QQorQjI1M0IxOTBFMDQ4QTMxMEY1MjRDRTQ1M0VCQTcwRDk2NzYyNzE0Mzg0M0ZDNEQxOUU0RTcxQ0NGRDNGQTg0QjcyQzUxQkQyMTFCMkQ2CitFOTY5NTFFQTNBQTFFOUI2NkU1NUUwMTE3QTQzRjBERjhFNUNBQUZBQTZCRkQzOEM3MUQ2OEFFQjg0QkUyQUEzQjhDMEU0NTE0MDU4MzYKKzU5NzAzRDc5NTY4QjdERThEOTU1RDFBRjMxNDZGNTE0RTVEODdDQ0VFOUYzMDhFRDgwMkI0OURBRjM0MkY4RjQ1NTUzMDlCREMwOUIzQgorOUExRDEzRUYzRkU2REI4NzVCNzc1QUEzQTI3QjJDMUFBRjY4Mzk4RDFEN0VDODc1MEI3QkNFQzJCNzZGMjdFQjE2RjVFNDk2REYyQTI0CitEMTRCNkQ2QzM4MzA2MTZFMzI2QkQwQzQ1MDBEQjE2NDc0RjU3MDNDOTU1NkU3NjBFOTNGNzEwMUUyNTFEMTRGMUU0MjVCQThCQjczQkEKKzEyRjU3NkE3NzhCREVGNzc0MkJFQjIyOEJBRUU1OUQ0MkUwNTY1NjI4MUM0OEU5ODJGRDA2OTkxNzgyNUYyQTA2RDkxN0MzOUE2RTk5MAorNjBCNTcwMzdBODc5OEEzQzlCQkYzNjFDODI2RjZEMEU1NjVDRDRBNDY1NzcwOTA4MjU5REVDQTQ1MkQ0NTkyMkU4N0RCQ0Y3Q0M5Njg3CitBQzdBMkU1N0IzOUI5QzkxNkMwMEVFRTM0MjJCNzk1Mjk4NDdBMTFFRDhFM0VBNEJENjUyMjQwMzM5OTU5QjE5OTYxMDc3MjE5QzdEM0QKKzdBQTE1M0NFMzM0QjkyODhBNENGQzVCRDM3OEM4RDFBQjQyRTZEQTdBRkU5QTNEQTkyODMyQTIzNUQ2MTVBQURCNDE0REYzM0E3ODgwQworNDc1NzU4N0NDREMyOTgxMzcyMTE2NDQ0NjZDMDc3NjE4QjZBOEI1NDQ4NEQ2MjQwMEI5Q0ZFQ0JFQUExQUJDREI3RUU3ODAyMkRGNDZCCitBM0JGNEUzNkRBRDc1MjBBQzE2REJCRDg5NUZBQTg5Q0UwNkEzRkMyODMxNTNDQzg2MkRGNTQxOUFDQkMyN0RGNTNBMUMzMkI0QjUwQjkKKzM0REQ3NTMyMjdBQUQzNURBQzBGNzc4NTU1MjRCRThCQTNDMEMxMTUxMUU5RTg1QUM0REZDOUY0QkI5N0JEQTc3ODY0QjE2MkRCQkIzNgorMkE5QzA4Qjc2MDQ4QTg4RTg4RkZEMDk4N0NEMDlEMTY2OTU0QzU5Q0NCNjZBQzYxQTY1MUU0MkRBODUxRDdENzI3M0U2MEZBOERDMzMwCitEMTFBNkQ4MDg3Q0IyNzY1QUYwODVDMDlDRTA1Q0FFODlCMTEwQzZBRDJDNDUyRkQ0RUQzMjZDQjY2QTQ4RTBGMDlDRDZEMEM1Mjg3REQKK0RGRUU5RTczNjhCRjQxRTE5MzVEQkEyMzI2N0M5OTk3OTNGMkVGOUI4REY4MjYwQTczNjQyRjMyMkUzQkYwQzc5QjFFQjk5ODA3NkQwOQorREUxMDRGMTQ2RTZFQTZFRkVGRDg0MjYzNTYzMUFCMkFFMzY0NjE1Q0QzMjg5NENBRERBMkU2NzkzNTRCQjRBREVEQTM1NzYzRkNCMThBCisyRkUxNzQ3NjJEMzE2RjEwNzkwRUE4ODhDRDc2NzI2REEzRDEzNDU4RTdBNjY4OUExNDlCNTcwOUI0NTU4NjY1Njc3MTJEMjFFNTgxOUMKKzVBN0I4QzRGRDk1Mzc3QTI4QjczMDMzRTEwQUM0ODZDNzIwNzZBNjE2ODEzRjA1NkIxQjM5Q0Q5Mjc5QjY0QjlBMzgyQjUwNkYzRjI1MgorRkQwRjUxMDdCOUNGMzZENzhCNUVGNjBERDk3ODRDQTcwRTBCREVFRkY2NzdGNTBGNTA2RUM4M0VGMzNGODMyMzQ0QUZCNjdGOUFCNEQzCiszREIyNEJFM0Q3QTAwQjhBNjBFRUNDN0VCNUZDOTEzQzA1RjY0MUM3MTU0MkVDQzkyMjlGNjc4MDlCOEFBMDE3NUVGMzFFQ0RGNjgyREEKKzM5M0E5MzQzRkExOUM0QUFCNTJFOEZEMzEwRjFBMkVBNDk4N0VGNkVDQTBENkVBRkE0MTQ1NDVBRjk5Mzc2RkIxM0JENzQ0RDFBMkVDRQorMzBFMkRENDdCNTg3OERFNUU2MzEyRUE3NkQ2OTlBRDZDMjE3QkFEQ0Y1MzVCNDZFMkVCNzgwMEE4NEQzMDgzQTYyNzBCQjJDNUE1RDFDCiswMDU3QjQyNDUzMUVCNDhFRUIyOUU0NDVCMUJBQjI3NjM3RkQ0OTU1NTM1RjYyQTFFRDU5QzgwN0YzODE2RDQ2QTk2QUEzQjAxNjAxOTAKKzVGQzdGMjNBRjE3NUNDREJBQTA2MEVENkNDMUFBRTE1NUYxOEMwRkEwRDg0MzlCREI3M0MzNUJGNDE1NzExNDJGOEM4QTY5Njc4NzA0MQorOTlCMzAyQzQ5QUYwMkM0Q0Q5MjlEMkNBN0YwNDAzQkNDQjZCQThCM0REMTJCMDgxQTk2MTA0ODc0MzYyNzRGMEFDOEMyMUI3MjJDNTM5CisyMjYxMTAwOUI4NTgxMzUyRDk4OUVFMDY1RkIyRDFBODE5MUMxQjBCNzEyQzcwMkM0RkI1NjZBMTlGMzgyQjRBQzhFODQwREMyREM0NTYKK0JEOTFGN0JGRTJGMUVCMjI1RjZBRTE1NjJGNkRFOUQ0RDZENDZCQjI0MjYxMjZBQkE5RTdCQkQyMUYxNThCM0ZBOUEwNDBBMTg1MjhENQorOTQ2RTZDNUI0MzIyMDcwQjM5MjQwM0FGMThDRTBERTlDQTA5RkZDRUQ2RjY2RjdDNjQ2QzNERjE0RjUxMjFCMzRFNDFEQkJBNjUzMzcwCis1NDk3QTQ0OEM0MTE1REYwMUU3REY3NTNFRjYxRDlCODYxODc5NkFBMjZFMEE4RTc4M0E2REYKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislJUVuZFByb2NTZXQKKyUlQmVnaW5Qcm9jU2V0OiBwcGNvZC5wZmEKKworCisKKyUgR2VuZXJhdGVkIGJ5IEZvbnRvZ3JhcGhlciAzLjUKKworJSBDb3B5cmlnaHQgKGMpIDE5ODcgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisKKyUgQURMOiA3MTIgMjg4IDAKKworCislRm9udERpcmVjdG9yeS9QUENvZGUga25vd257L1BQQ29kZSBmaW5kZm9udCBkdXAvVW5pcXVlSUQga25vd257ZHVwCisKKyUvVW5pcXVlSUQgZ2V0IDQzMDM3MzggZXEgZXhjaC9Gb250VHlwZSBnZXQgMSBlcSBhbmR9e3BvcCBmYWxzZX1pZmVsc2UKKworJXtzYXZlIHRydWV9e2ZhbHNlfWlmZWxzZX17ZmFsc2V9aWZlbHNlCisKKzE3IGRpY3QgYmVnaW4KKworL0ZvbnRJbmZvIDEzIGRpY3QgZHVwIGJlZ2luCisKKyAvdmVyc2lvbigwMDEuMDAwKXJlYWRvbmx5IGRlZgorCisgL05vdGljZShDb3B5cmlnaHQgKGMpIDE5ODcgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuKXJlYWRvbmx5IGRlZgorCisgL0Z1bGxOYW1lKFBQQ29kZSlyZWFkb25seSBkZWYKKworIC9GYW1pbHlOYW1lKFApcmVhZG9ubHkgZGVmCisKKyAvV2VpZ2h0KE1lZGl1bSlyZWFkb25seSBkZWYKKworIC9pc0ZpeGVkUGl0Y2ggZmFsc2UgZGVmCisKKyAvSXRhbGljQW5nbGUgMCBkZWYKKworIC9VbmRlcmxpbmVQb3NpdGlvbiAtOTAgZGVmCisKKyAvVW5kZXJsaW5lVGhpY2tuZXNzIDM2IGRlZgorCitlbmQgcmVhZG9ubHkgZGVmCisKKy9Gb250TmFtZSAvUFBDb2RlIGRlZgorCisvRW5jb2RpbmcgU3RhbmRhcmRFbmNvZGluZyBkZWYKKworL1BhaW50VHlwZSAwIGRlZgorCisvRm9udFR5cGUgMSBkZWYKKworL1N0cm9rZVdpZHRoIDAgZGVmCisKKy9Gb250TWF0cml4WzAuMDAxIDAgMCAwLjAwMSAwIDBdcmVhZG9ubHkgZGVmCisKKy9VbmlxdWVJRCA0MzAzNzM4IGRlZgorCisvRm9udEJCb3h7LTEgLTI4OCA2MDYgMTA0Nn1yZWFkb25seSBkZWYKKworY3VycmVudGRpY3QgZW5kCisKK2N1cnJlbnRmaWxlIGVleGVjCisKK0Q5RDY2RjYzM0I4NDZBOTdCNjg2QTk3RTQ1QTNEMEFBMDUyNTM5MkVFQ0FDMTYzRTU4NEE5MTA0RDk5QUQwQkMxQjFGM0Y3MTIxRDFEMAorCitGMkM2MEREMjA2QjBEM0M4QzQ1MDYyMEI0NzMyMENBMEFFQjg5Mzc1MTFFNDU2QUFERThFNjZCMzAxQjFFM0U5REZFMTdFMkY3OUVDRkUKKworQTcwOUZGM0RBRTE5QjRDMTY5REY2NzczRURBNDE0RDAyOTE1QTZGMEZBRjhCMjRGQkIwNzc3QzY5N0JFOEEzN0Q2M0EzOTBBRDlEQUU0CisKKzk1QkI3RTYyNjcyMUZGMkZEM0ZCMTQ3QzgwRDIyQkVBQzM3QzI2MjREODE4RDU4QzhERjAyMDlGNUNFNzZBQ0RERTU3QTMwM0Q5MDQyQgorCitGMEE2NzREMDk1Njk3RjkyNUY1MzJEMTgxNEJFQThGOEE1QjUyMjNBMzJCQzRBOTU0MDJGMkM4NDMxODE3NTg3NTJGQzMzMDk3MEU4MTcKKworMzk3NzQxOEVCNEY2NEZENUU0NTVDM0U0MTY1QzlBQjNEODUwNEQ5NDZGNkI1QzNGNDkyOUQ0NjNFMUQ2RTZCNTgxMERBRDZDN0E2NTI5CisKKzBDQzZEQjk2MEExRjk0MzQwMEE4RjYzNjREQjM3NDJCRTk2QjVDQjRCNzhDREM1NjM0QTlFQjNDNjJGREM0ODFDOUMxMDFFMDQ1QzYyOQorCiszQ0Q5RDQ5MUI3NzQ4MkQzMjc5N0Y0Q0MwQkZGMjA1NzZDMjYwNUVDQURBREQ3NzVCMjE2NUZFRjBGRkEwRjREODg1MjJEMUJGQkIwNUYKKworQkM1MDYyQUY1NEJCM0ZFMkMwQjM3MUU4QzdCRUEwQzY0NEEzMkEzREFGRkJDMDhCQjYzQTk3QzE4QTI2NkIzMTBCMUMxQjkyMDk0MzQ4CisKKzYwNDc4RDI4MkQzOTQxMjNBRTA2RDhFRjQ1NzI3OEJEMjZGRDZFRUY5Qjk1QjVDQzdEMzFFMUZFNDYyRDhBNUZBQ0FGNUNFNUY0MkI0NQorCitFMTM5NUEzREM2MEYzN0Y1Q0M3NTJDRDgxOTA2RjI4RDM5NTNENjFGNTUwNzUwODFFMTQ3NDVGREQ2NTlCNUIwQTI3MUM4QTQyM0EwRjYKKworNzhCMUNFMjRFNTczQTI0QjEwQTVCQzM3OEE5RTQ0MTAyOThFQUREOTBDMTU5NTI1QjM1OEY3MjE0OUQyNDI5MUM5MjNGMkM5MUQ3N0ExCisKKzMyMzQ3RjVGNDcxRjExMzlCOTkzOEU4ODBDQzVCMzQwOUIzMzg1OUZFODcwRDI4Qjg4MkI5NkQ4QjUzN0JGMjI5RURBRkRFOEMzRjZDRQorCis3Q0Y1MUYxOEM1QjUwRTMxNUU5M0U0ODk2Qjg1RDk5OEE0M0Q0N0JDMjU2MDE2MDEzOUZBMDQ4MTNCM0NDNUM0Q0FENTI3QThCRjhBMjEKKworNzUxRDFGRjAzMjYxMDQxMDg2NURDNDNDNDk5MDgwRTMxNjJDMUJGNzQwNzdGOEZERDQ1NDE4QkE3RDY5MEMyM0ZFQkU1RTlEQkM3REZFCisKKzBBQkJBNDMwQUUyMDZDMTY2RkRDQ0FDRUEzRDREMzQ2RjkxOUZGODI5MzExMUZGNjI2NDYxQzI4QTlFRjIwNzJCMjk1N0Q5OEExMkI3RAorCis0MDcyRUEyOEYwNzc1NUFFOUQ4M0I1RDg2REY0QjJFQzgxMDIzQkRCNURFMjYyRDFBRjNGRDg0NEU5NDk2RkJGQ0I2MURBMjAzODg5MDkKKworN0NDMTNDQTlCQzY5NUZGOEVCMTBCNTlBREU1Mzg0RDJGQkUwRTc0MUY5N0REMTBDRkNGMTY4REYzNDMwNzVGMzRGNjNDMjU4MkE1M0I5CisKKzJDRUFDNTcyRURGRkVGNTRCMkY4RkY1RDYxN0FDRURERTU5MDQ2QzREMkQ3QUFFMEYxNDdEOEQyRkMzNzY5QUUxNTkwNERFREU2Q0Q0RQorCisxQTk0NEU1QUJBQjE4MTQ1MEMzNkM3NEI5M0Q4Q0ZGRUVCM0I1ODc2RjlGQTdCMzUzMEEwRTZERjk2NzBFMkJBOUNFNzY3NUY5RjEzNDYKKworRUYzRjVEMzgyMDJBNTBBOENENkFEMjAzMjUwRjI5MzJFRkMwOEM4QTRGNzg5NEE0REMxQzgwRjJCMkJCMkM3MTY4MkQyMThEMTQ4MUIxCisKKzE4OTY0RjMzQjE2RjVCRDM1MjJEMTZGOUYzNzM5RjA2M0Q4RDA1NDYzMDM3MDYwNDMzQ0U1RjJGODQyMzFFQkZEMUEwNTI0NDk3NTU1RQorCis0MTg1NkQxNzNDNzBBRTBFM0RCOUUxQkY0QzJDQ0I5NDU4QjBDNEZGMzkzQkY2MkZCRTRFNEU3OEM1M0Y2NzYyOUVEMzc4RUQ2OTU5MTYKKworNTIwODNCRkQ0MzJEMDVGOEZDRUEwRkFBNUJDMUI0Q0U5RUY2OThFQzIzNDU4NzE5NDRERjdBQTRDNEZDMzYxNkFENDRFOTc4NUUyQjQzCisKK0I3MzgxNTlDODQyNjFGRkQwNEFCQUQwRjgyMDMzRjFEMzY3NzM3RjA0RjcwQ0IyODEyNjMwRDE3MEEwOEU5RDY5NzZGMTM0ODM4RTIyQgorCis4MkRDNjBDQjRCOTMyMTU1MTVERjVBRTBCREQ3RDlGMTUwQjEzNjRBNDlGODg2RjdCMTk2REQ0QTM1ODcxNUNBRDhFQzI4MkY5MDYyQTAKKworNkQ2RjJDRTBCRTFGQjcxOEY0RjBDMDI0MjQxNkZEQTdBOUNGQUQxQTY3MDAxREY3QUI3QUMzODQwRjc3NkE0N0QwNTE5QTcxMTYzNzRBCisKK0Q3NjIwQ0Y1MjdERTYzNDM5NDhBN0NFNjc2MzMxMUZDRTdGMzE4MDMwNEMzREY1M0NDRTdERjg1RTlCMjFBOEE1NkVEMkNCMDA3MEM4NQorCis1NjQ2OERDNkQ2RUM0NzU4RjM0NDIzRjZBRTlGMUY5NzNGRUUzOTQ3NjlCNUFEQTRBMDhDOTBBQUJENUQwN0UwRjA3RTg5MzU4MDEzN0QKKworMDlDRTk0QTZDRjNCOENEMkE2NTBBNkY4QzQyRjMzQTVCRjAyQTJGMDRDQzBEQTIyNEZFRURGQTU5RjMxM0U4RTVCQTk4QTJCOTVDNTlFCisKKzA4MTA0N0VBMTcyREE4NTY5MzQ1QTYyRkMxMkFERTE3REVFNDk5Q0JFMDhFQ0Q3QjE4QTc5NTUzQjNGMzkxREQ3Qzk2OTlGRjIwOUI0QgorCis4MTc0RDIxN0RFQzMyOEMwQTg5MzkxOTdFNkM0MEM2MTUzRjZBNDlFNjlBRDdBNzMzMzM4NkIzMDMwM0ZEQUQ4NjhEQjU4QTlFNUExM0MKKworQUM1NUVCNzZBMkQyNDFGOTMyMzQ1MDhCNDM2RDAwODE3ODNFNjRCOTQzMTI2MDExNTcyMEVDQTEwMTU2QUZDNjc2RTAxMkE3MzdFRkE1CisKKzBFREZFQTM5NkUyQzEyNUNEQjc4QkVDMjY2Rjg5NEZFODE0RERGQkQyNEYyRDFEREQ2OEE5NzczMzM0RkQzOUU3QTcyQzAyM0VCRTBDQworCitBNkU1RDZFMEUzQzY3RjMxODdCNEZBQjkwNjMwMkVCODEwQkJDNUFDREVCRDQ4MkUwMEYyODFEQUM0QTg3QzgzRkRGMDhGMkUxNUJEMTcKKworOEE3N0E0NzkyRjY5QzIzNDg2RkVEMjM0NERGMjYwNDNENzZGNEM5QkJGNTRCMkJGNDI1MTgwNDQ1RDk1NjNEOTlERDhGRUUzRjhEMkMxCisKK0E2NjBBQUVCQTZFMEFDRkFCNUNBRkE3NzQyQUJGMTcyNDRFQzlCRDQzQjc0RTY0NjU5RDAzMzY5RjI1Mjg1MTM0MDk3NkFBMThCRUEyNgorCisyQjkyODc1NjY0NjBFRDA1NDkyM0Q4Mjc5N0EzMUMzRTRCRDE0RkNERjlGMzBDOTRCNTAzNjQzNjhDMUJCMThBMTBCQ0Y0NzMyNUQ4MzMKKworRjNEREQ4MTU3MjVGNjI4RTkyNDJDQzYyMTU1NTUwRDU0RTFCNjk4RkU2NkRGMjlCNzk4MTc3NTdFMDJEMDUxOTBDRUE1Qjc4QzM1RDA1CisKK0ZGODdFNUIyQUNBOUU3RTkxRkQ1MjMzREFBN0Y1Mzc4OTE5QkQxMTAyOEYyNTQzOUUxRTM1QTVEREREOENFNzEwRjRERTE2QzFDQzBDRgorCitGQjFBOUJCOUYyQjg2MzU2MDlERTY0NzlFODNCRUU4RkFBNERFM0UyODkzMkJEMThFMDdFREMzMjZCMTQyODkwMUE3N0EzRDIzRThCNzIKKworNjY3OTZDREI4QjVCMTgwRTc3OUZERDlEQjczQUVFNUY0NUY3MkZCNTVDRUE2QjlFNTJBMkY3MjQ5N0EwRDhDMTJDNEUxNzYwNjBGMzk4CisKKzc1ODRFNUMwQThGNkI3NDkzNTM0OUMxNTNBRkM1NjQzNEYyN0YwRTI0OENCRjlFNjAwOTkwMEE3QjIzMzE1QTBEODM1Q0EwOEREM0EzNAorCis2OTdGMzgxRTNERjhDRTY1NURDM0IyRDM4M0IwMDJERUI0RTg3QjBCN0JFMTQxMzBGNTRDQzNCNDMzQ0NDQzkwMzRFMDIxNzA5QjZGN0YKKworOEMyNURBQUU2OTJCQ0IzOTk1OTVEQ0IwMDk3OEZBRTM0NTRENDhFQTEwNTIzNjlCMEZCQjRCMzQwRDNBQzZDMzI3OUFBQkM2NTI2Rjk5CisKKzM2MkM3NjkzQjBDMDE2N0E1MzlDRjRDOEVFN0M0QjZGREJFNjIzNUQwNjY5RkY1MjVFMDVFMTI3QTBFMkZCRURBQUZBQTgyRTg0M0VFOQorCiswQ0MzMkE5QTgwRUQ5ODU0MkUyM0Q3ODE5RjU1NTFEOEIwNjU2MjhENDUzMjA4MUIwMEI3MjhDRTJDNjc4NTUwNDU0NzVEOUQxNDMyQzEKKworQzgzRjEyQTNBNjI4RDMwMjY5N0I0MThENjY5OUM5RTQzODA3MDREMDVDMDI3MEE3MzYwMTVBNTlCMkM0QUYyRUMzODRDRjBGMDU0OTZGCisKKzAxQzk3N0ZEMzlDNkU3NzhGMzhENUU0MzhEQjVCNkIwNUUzMzNBQTZGNEQ3REVFQ0M2Q0I0QjA5OEUxRTUxMzhFOTgyOUQ5M0IyMUYwNQorCitGQ0QzQjVBMzE2QkIzNDUyQzUxNkIyQjg5MzVCMUJFODBFNjRBN0E3MjI3QkU2QUU4NDJBRjExQkZBRjM3MkFFNEU0MUY4RDk5RDI4MTAKKworNDI3RjcwOUI5N0UzQ0MwREU0QzhDRjU5QTRCNTk1ODJGOUI5Mzg1QjRGOEU4MjIxMDdBNzlDQTQ0N0I5Rjg4NTQ3N0RDNEI2NUI3QkFDCisKKzMwQTQwQjUxNDFBOUEzRkJBRTk5RjY4QjI3QTNDRUNCNzQxOTEwM0JBREI3NzBFRjYyN0IyQUUwQzRGNkYzNjhCMUM1QjlBRUYwODA0QworCitGRUNEODIyRDZEOEVERTlGNDJFMTdFRTJBNkQzODVGQjA2RUIxN0MxREZGQTI1NjI2RTY2OTlDNEQzQjc5MUZENjVGMkVFNUQ2OURGQkYKKworNENDNkUwNkY3RjRFREU2NDJCMTYzNjk5QjIzOTgzMERFMEQxMjBFMUY0OTZGNDAyNkEzMUQ0NjlFODZDMzVCMDEzMTBEOUI1MjFGNUQ4CisKKzYxNEFEMjgxRjE1OUUxOTdGOEE2NkM1MzI1QTI5NDYyMTZDQ0NBOTY5QzRGNkQyRkMwNTA4MEJENTBBQzNENDMwMjZCODlDMkU2NDBBMworCis1OTY0NTU1QTA3MzQ5NTM4OEQ0ODdFOTE5QzdBNDAwODYyMTdCMzJGRThCNTIxNUEyMTIyMDRENDQ3MjhFMUYyNDVDOTEzODA2NjkzQzEKKworQ0M4RkVEMTJCRkFGMTRDNERFNERFMEJBMzJENzZBRjUyRjZCMzE2RTlFNjQ1MzhBNzJCRDQ2MUREMkUyNDE1OEM3NTM2MjAzMTgwMENBCisKKzIwRjcwMzg3NTQzQkNGQ0ZFRUYwRDFCM0U3RTEwOEUxMDZEOEIxNzJCNEJDNDBGODNBRTRENThDRjhDQ0IxMjMwRDY5ODFBRjAwQTcxMgorCis5RkExQUREQzFFRURGMjNBMzM5REY5M0RGNDVBM0ZCRDc4MjlCRDg0MENFODZFQTJDQTI0RTAyMEEwRkREQzI0NjY0RUE0MkJEMTVDMzIKKworQTJDRDFEN0MzMjdDRjMyOTQ4MEI3MjExOTI2RkRGNDRGRjFGNzNGRDI0OEQ5ODA5NTZDRTE3MDI3MUM3N0RFRTU3MTY0QkEyRkVENTEzCisKKzVDMzc3N0UxMDk1NkM5RTM4MkQwMkI4ODgyNjFCQTIyRkJBM0Q1Mzc0QkQyMTMwMDEzRkYyRUFGQTRDRTRDMTIzNURENTEyOEZEREFCMQorCis2MzA1OUY0QTdCOTExQjk2QzU4NzUyNjUzM0JFNzI1NTc0OUVGQjQxQUQwMzJDQzAwQ0FBMjBDMjUzMUU0REMwOUVBQzQ4QUZCRTA0MjUKKworNDMxRkMyOUNBNDhBMzc0OUFDOUIwMTJDQkIyMDlGNzdEOTMxNTk5RUVDODY0NUVGMTg3OTNFNzlEMzVDNjNENEYxQTcxMzQyODRCRTUwCisKKzAwREZCMzJFQUY5MDIxRDNDOERFQzJCMTE5RTM3NkIzRjJFOTQ3MzFCMjNGREJGOEJGNkQzNkFEOTE3NEY1Njc1NkI5MDIwNzUxMTI2NworCis4REIzMEVGMkYzNEY3OTIxQUVFQjNBMDBCNkVCRTY5RDE4RjZEMUQxMEM1QjVGNUNBNUYzN0ZFQjk3NTQ2MTkxRjE3RTFGODk3NjM3RDIKKworOUFDMzY2MTQ4QTlEN0YwOUIwNjE0RjYzMEY4MjlGMTU1QUREQThFNzA0RUM1QzQ5Rjk2M0JBRTg5QTlBNjYxMTE3NzY1NUVCODVEMkNBCisKKzAwNzVERjU2NThGRDY4NjQxQUE3QjMxQjhFMUVFQzhGNzE1RDZERTlENDIyMjc0QkNEODM4MjA4MkQ2MjVCQzgxMkY1REMzRjg2RUMwQQorCiszNzZCQjU5NkMyMzNGMDFDNkY1NDc4MDkwOTY3MTY5NEU5MDJDQzFCOTZFRkIwQUFGMkI0MkJDOEJDQTAxRkY2REIyMzQ4RUY3REFEM0UKKworN0U5NjYxMTg5RkMyN0Q2OTEyMjQ0N0JGODFGOTQ2NkE3M0VGMDRENEQ0QkE2MjhCNjNCRkI4NEFFODhCNDcyOTY1RUNBRkREMzRGN0FGCisKKzhCQ0E1MTA3N0MyQ0YzNjRGMTUyQTY1MzQ3NDg4QkNCOTQ4Rjg3RTk5RTEwRjQzMEIyQjA5NjRFRDYxMTRDQjY5QUM4MTg2RTQ4NkQzNworCis2RjU3QzQzOEI4OTU5QzM2MEZCQzM1NTBBM0ZDNkI5NzNCNjAzRjY0RDJFRjk5NDU1QzgyRTExMDc0MzRBMEVDM0VFNEUxRkMxMTI5QTkKKworRkYxMkEyMzI0NkI0MTBDNzRFMTNGRkIwN0RGQjZBNjIyN0E3M0EwQjZCNDUxOEEwQkEyRkI2MDA3QjIxQUE4MUE3RUM3NDdDNTI1RjJBCisKKzhFNkMyNTY5QTlFOTUwRTBCQUExN0E1QzlEOUExRTUxNTUxNDdFRUE0RERFODMxQUQ4Q0Y2OUM3ODE0RDc2QjUwMzkzM0Q5MUFBOTNFOQorCitBOTc1MDhBQUYyOTgzOUUxNzc4OThENzlCRkQyNzcwMDU4MTlBRDg3RDkzMzhDQUYwMkFDQUM0NEY4OTFGOTI4MTNFN0RBNjlDODJEN0IKKworNkVBNzE3NTY0QkNCMUQ0NzBCMDkwRERCQjFFRkIzMDg2MTNBRDYxRjVEMjczMzhGREM4MTcyQjI1ODAwOUNCN0E1RkZCODcyRTQzQzg4CisKKzIwRkMzQjhEQUUyRUFDRjg3MEQ3QzVBODhENDI2MTk4MjgwMEFBQjM2RTk0OTY4QTRDNUMyNEVDNUIwRTUzODE3MEU4QzZGOUFENjFEMworCitFNkM3MTNCNjMxOUU4REJFNzA3NENDMjIyODc3MEFFNTE2NDkyMjhBOUZDMTg0QUZDMUJCN0M2NzYyOEZGMzAzNjA0NTkzNTJFQUQ2QjQKKworQTJBNjlBM0QzOTE4MkU1NkNCQjI4NjRBMkMxMTgwQTdDNzc3RTcyNjlDNTc0M0Q1QTczOUI1M0QzQTJDNUJCQzlBQkU4MzM3QzM1Njc5CisKKzZCREE0MDEwMUQxMUVFQjQzQkI4RUJGQTczRTRFNzAwN0EyRUE0NDNBRkVEQTY3OEUxQjE0QTJBQTJBRTZBMDZEMTIzOThFNjhENjM3MQorCitBNDU3ODU5QzBGRjI1QTgxQzVERUMzQUY0ODI3MkNDNUZBQzA0NEFGMkU3MUQ1MTBFNUJBQUFDOEE1MDU0MkQ5Mzc5ODgwQUU3QzlEMkQKKworMUM4MjJCNTQ3N0RBRjUxNTBCODRGQjlBMUEwNjJDOUFFRjlDMDNGODlFMDI2OTYzN0YwNTZCRjY1QTkyQ0VBREUzMUYyRTNENEM5NTg5CisKKzA3MDFBNEEwNjQ2MDVDRjc5RTkzM0E4NTE4NUI1MEQxNEE0NzY2NTYzQTk1MkQ1QTNDOTlDMTZDRTdBNTBCQTY4Q0VEOTg1NDlERDM5NQorCitGNjY5OEJFNEY3OTc2QUQ1QTAwRTczN0FBMzNDQTUxRjRDNzMwOEI2NkIxMEJGNjM2QjNDNERDODg2NkYxNTA5QjA4MUIxNzgwNTkzNDAKKworQkQ5ODQ5QUI0ODdDQUEwMDRCOEU2MDI0MTEyNTQ1N0M5MjIzNDBCMUJDODE3ODg1QjcwMzkxNEIwRkM1OEYxMzkxMDE2RkUxRTNEQTA0CisKK0FCNUYyMDU2QUUwREM4QTY4MUM4REU2Q0Y1RkExMjVEMkM3RjU5NjdERTg0MUYwNzZBRUU4NzkxRTZDMTdEN0Y2OThGMjA1MkE5QzY0MQorCiswNDkyNEY5RkQ4NUJCQUY3N0Q5RUU4NzExRjE0N0Q3MzBBNkY4OURCMjk2NUNCNDUwRjA4MjA0MDJDMkU1MkNCNTc5NzdCQTBBNzdFMEIKKworNzY4Mjg0NUYzRTQyNjZCNzczMDRGMTYzQUIyQ0ZENDk0OTQ5MTdEMkM1OTYzQTcwNENGRTQ2QzY0M0VBN0VDRTQ0MUY4MkUyNzI0NDRBCisKKzgyNDJCRkE2Q0I4MTNCNjYxQ0M5NDMxREE5QzFFMUU5QzZBODYxQzZDMEVCMzA1M0QxRDYyQ0I3NzQyMDlBNzU4NkY5Njk0QjU1OERDRAorCis2MjVCNTVBMEU5RkJDRTVDMTVBOUEwMDJCQzk0Nzg5MDg1NTNFOTUzMDJCQUQxRTREQzlDMjUwQUVGMTcwNDk1RkM4OThGREVCQTM0NUIKKworQjRBRjcwNjMzNENFQzUwOTFGOEFDNEEyMzgyMUQwRkVEQzYxNjdBMTVGNDU2MzNBMzBEREE4OEVDM0M4QzZFMjM1QTVBM0MxQkYxQkJGCisKKzAzQTg5NkNENzgwNEMyOTdENkJBRTEzNERGRTRFMzg4ODcyQTA1QjkyMDM0QUU3MEREMENFQkNENTcxNjU1QjE1MDc4QTI3MTlBQjMyQQorCis1MjhFNjEzRjJCRTNENUFDNUYzQzkzOEQyM0JBMjBEREZGMTQyMjU2MDcyNkI2MkJDQjFCOUVBMDlEQTFBMjhFREI1NUY1Q0EyRDRFMDUKKworNTBFMTIzMTE1N0E4MTk3OEU3QjA1RkNFQkM4NTVFNTRBOTM2REQ0MDUzQTQyQUJBQkY4MjBFM0U0RDM3Mjc4OTA5RUQ0OUU0OUM2MjEzCisKKzk1NzU4NjJFREI5ODNCRTRFQUZGQTZCOTQ2Q0Y0REUwNjhGRUI3NDA5MjdDMTk5MzVEMjVEQ0IxNUU4MTc4NDcyMTQ3NzRGMjkwQ0YwMworCitFODYyRTc2MzM1Q0QxQ0U0NjE4OENBMzk2OUYwQjNGOUYxREUxNzRDOUU0ODBDNDc4MkNENURENkRBNEYxOUI1MUY1RjA5Qjc4Q0NCRDMKKworRDVBQzgwREU4NDkyNzhERDVBODRCRTBGOUQ2NzIyOTExM0ZDNEJDQzQ4MjlGODlFRjYxRThFRUI5M0Q0OEYyNjMwOTgwNzM5OTZDRTcyCisKKzA1NDM1NTg5NTg4RkJERUE5MUMxOEY4QkY1M0M4MURDRDEwQzc0QTYxMzlCNUE2OEVDRTdBQ0QzQTQ4NTcyMzIyNERGMDAxNzdCMUQ2QworCis0OEQ3RDkyRDBBNUE5RTU1MEQ1RTA2MTc2NUI0OTYxNkM2NTMwNTkxNkU5QzBDNTI3RjZBOEVCNkNFMDMxRUI4ODMxMUE5Njg2MTU4QUEKKworQjUyNkJEQzdCMEVEMDFFRjJFODRFNDk1RDEwQTUwQzdCRjg3NTM2QzRENEJGQUMyMkNGOTVDNTg0NjJBN0RFRThFNjcxNzUyRTk4NDI5CisKKzhERUQ2NDQ1MkFCODQ2M0E4RDREOThDQjdFMjEyMURDRTY4MEQxM0NENTJCNENBREM3Mzg2OTJGNkM1QzMyQUIzNzhDQjJGRTRGRkQ2OAorCisxMUIyRjk5QTZEMEJCOUJERUJDREM4MjdERDc3NjAzQkE1ODE0MjI2RjM5REI5QUE4M0FFMkI5MUMwQzYwMjBFOTM0MTkwREM2MTAxMzYKKworQUM2Q0ZDNUI2QjVFODZBNjZEQTI1ODI0MDYzNjRGRDFBRkIxNDM2MENBMTZFQkQ0RkVFNkRENUI1QzQyRTdBRENERTlCNTQ2NjFDRDI1CisKKzE0NjRENUM3Rjg5QjYyQzk5RURBQTY5N0E5NkFFODVDMUQyODBCRUE2RjcwMDExMEIyRTM5QzBEMDlCRDE0QTU0OEQyOTc4ODgxRUYxQQorCiszOERBRkIxOTdCRDc4RDYyQTE3QzM0Mzg3M0YyNzlFQTg0MTU1RDc5RTE3ODg3QzhDNTZCOEU3REVEMzhEMDY0RUI4MTFBOTUzQkVDQjAKKworMzlDOUVGQTQ1NDI0RDY0NTVCODY5RUVBNUEyNTJEOTQwQ0YwRTQzRDUxNjJFRTQwOEU3NUYyRUYwQkUyREZDRUU2NDQ4RERBNTI5QkU3CisKKzU3Q0U0REUzMUI4MEE0Njc2RDIzRkMwRTkwMUI4OUNGMDJBQTA1NjJCRTY2MTg1RjkxMDM3QjFCNTY4MDlGRjEwNDZBNkZDMzlDOUI5QgorCis3RUMyN0JBNEFERjIzODc2MEE1NzVBNDcyMjczQkI2NEM1RTJDQjc3NjIwN0YwMDMxNUI3MzUzNEE1Mzk3NjQwMDkzNzJBNzRDQzc2MTIKKworOURBNjE4OEEzODM5NjdEQzExNjVDMDdDN0IxRjkzQjM5QzZDMjAxNDQ5MTA2QTBFQTEyNzY2MzRBNjE2MkFBRkFERDIxQzYxQzFENTYwCisKKzFCQUE2NzkwMjc4NUNCOTBDODdCNjExRDNBNkEzQjk0NzAxM0JBRDhDNjBBM0Q0RDMzOUEzMDI1QkVDNzRCNkREMzg3QjdBRkFCODMxQQorCis4N0I3QTcxQTM3RDI1MTUyM0M0ODY0MkIxRDQ3OUQ4MzY4RUIzMUY4QkI4MzU1RUZDQ0U1REREMTMyM0ZDOTlBNTZCMTA4OUI3NTJBMTMKKworNTI3NzBCQzdFMTgyMUEzOTg4OTBCMzE2NTBFOEVFMTRCMEQ0OUJBQTkyNDU4QzE1QzI5NDFFNDM0Nzg3RUM0QkQwMzRDNDBCQjBFMjA5CisKKzZDQjI5QjE3NTM4NzcyOUFCRjA5NjJFQkQwMjQyNEYwQkI1MDk2ODdCMDNBMzlBM0JFOTY1ODc2MUYwNzAzQzVEODM5QjYwQzRGOThGRQorCitGQkZCQUUwNzIwMkUyQ0EyMkFBRUUxNDVEREMxMDQwOTAxMEUyQTU5QjkzNDQwMUVBRjY3QjhFQjQ5OUVDQjkyQjM3NUNGRThENTQxMjUKKworQ0I2QjIwQzk5NjhCQUZDNDVEMUE4QkM2NUQ5OEQ3QjcwMkU2MjQ3OTRFQkE4QzFFRkM5NDMzRkYyQkMzOTcyRjU3RDhGQUJGMjdDRTQ0CisKKzJGQTMyQUI4M0FFNURCQURBRTAxRUREMTgzNDAzRDI3MkFFM0ZDRDc1QkNDNzUwQzkwREY3RDBCNTI1NTUxOEFBQjBDOTJEMzBBMDE2NAorCis1OUQ5ODIxQkQ3RTFENEM0RjQ2NEUxOUIwQUVCNzgyNzYxOTBENzI2QzFENzY3NDcwOEQwQTc0Q0QwNTkyMEMyQThGQ0NDODU4MUZFQjkKKworOTk4RDczNUQ4MTE2MjM3ODBGMTI5RjBBQUFGMTEzRjc1RUIyOEYzODNDOUI4QzBDN0EyMjIxQzNBNEJGNjQxOTYxRjM4REU5REFCRDMzCisKK0E4MDNFOTQzNkU1Qjk4NDI1MDM1ODFCM0Y1NDQ1QUZBMDM5Q0IxMEM5MzZDOEIwQzA4REQ0OUJFQUUxMTkwQUQ2MTFGM0YyM0ZBNzdCRAorCis3MUE4MEExRjkxQjdGMzc2MEY1RkEzNUJDRDc2RDgwMzBGQUM4NzJDNjM3MjE3QjA3Q0FBNDUyQzcyREUzRjgwNUY1ODgyMEJGMUVDQ0UKKworMjMxMjI5RkM1QjY4RTVGMUIyMDI1OURDOTJBRjQ4MUZEQTkyRDA3RjI3NjA3N0Q3ODNBQTQ1MzQ5OTE1QjVGODFDOEM5Njk3MzlEQjU2CisKK0Y0NTIyRDAyRDU0N0RDNzYyNDBENjlDQ0YyRDY4NDI0MjAyMERFNjBFQ0EzN0Q3RTI4NDZDNTA0NUY2QjJEMTA1QjdENUEzQ0E1REU2RQorCis3M0E1NjcxNUQ1REU1RjNFRUUzNTU5RTY1N0E1RUExM0M5NzE2RTNBN0FDMERFMjVFMTcyMEQ1MkVDRThBODRENUQxQUVBMDRERjBGN0QKKworRDg0NjU0OUJBRUI1QzUwMzJDRjNDMjUxQTVBNjNBOTlERjFBMzNEMDU0OEE3MjczNUZEOURBODI2N0JCNEI1N0E1QzU4RDQ0NTdCQjEyCisKKzQyQjUxNTI3MDNFNjJCNjRDMDJBRkE2ODJDNjVDNDExMkIyODM4RDlCRDhDRUM2QkQ5RDFCRUE4ODJFNTA5MDA0NkU5RjIyMDg3RTZDQQorCitCNjlGNTMyNUYwQzY5QTQ4NzRFRTgyMEQxOEI2NERDQ0FBREU2RURCQTNBQzc1OEU1NEE3QzlCNkVEQkM0MDU1MERCRDQ3NTgwMTc4NDIKKworMUE4QzVCNjk2N0Q4NThEQjk4MzYxODQ0NTlFMjYzNDBCQ0NBNzYzNkE4NEI3QjNDQzk1OTZBOTA3NTI4NDU1RjQ2NDZCNUJENzg5RTk0CisKKzlERDBEMUY0MEMwQUYyMUUzOTcxOTk2RkFBRkZCQ0MxNEUxOTAzMDkyNEQwRDM4QTk0OEVBNTUyOTcxQkE2NTA0NUYyODE3NTY0RDU5MworCis0QzI5OTBDNkNDREUyNjMyOUYyM0Q4QjM2OUYzQUFGNzRBMTI1Q0ExRkQ1NTJCQzcxMjJEMjExMDlGRkIzNkNGRTM4N0YyMkNEMDlDRDMKKworQ0NENDdFRkRGN0Y2NzEzOTdDREZDQjNGNDU3QjJFNkZEMkUyMjczQUEyNjhDNEMzOTRCMzYxNDUxMzFFRjJENEQxMDcyOUY2NEFCREM1CisKK0VCQzdCMjBCRDA3MkVDMTcwNDMyOTgyMjgwMzQxNzM1Mjk3QTdDRERDQkRFRjg0ODNGMzRBRjdBNzk3MTYwNDAyQjEwQ0NBMUM3OEFFMworCis5QUI2MTcwQ0Y2RERBMTlFRjBGMjJCRUIyODMyNzdFMDY1NDQ4ODFCNkIwRDUyNTkzNkE4NEVFOTFGRTBCQThDMjk4NUI2RTMyQUY5NEUKKworREYzM0U2Q0M3MDQwOEYzQkM2NzA3MEE5MEUwNjQxQkM2OEI4Q0U4RkRCNDZCREUyRkU4MEJENzA3MEYwQTk1MDVCMDk1OUIxNTA5RTg0CisKK0NDNjY2Q0E3Q0U0RUVCNjMxQjZFOEQxOTgxNjYxMUI1QUNFOTU3RTEwNENDRjM0MzlDMkMyNzc0MUNFQ0E2RjI5NTZCMEM1RTBCRDdDMgorCitCNDE3QzM3NUI2MzBENENBRUY0MjhBODg1ODRBM0QxOTYyMzMwQTMxNkI5MDU4QkIxMzI0RkNEOTA4NzgxQURCNDdCMzk0MjVBOUZFRjcKKworNkFEQUY0OTk3NzVGNjhGOThGNjVFQUY4MEJCQzlENDAxNUQwNUU4MTZEMkVGOUExRkE5MUIwMUUwNUI2OUI5RTFCRjc1MTMwQjRDN0Q5CisKK0FCMjlEOTVDMDdBNEMzRjJERTAwQzdDMjEwOEY3QkREMkYxMDNEOEE3QkUwMkFGRDEyRDFFRDI2QTAxQUVGNkIxOENENjMzNjc2NTg5OQorCis4MDU2MThFMDQwNUMxOENFN0YwNkVGRDc5NkVDOTUzMkVDQUY2OTY2Rjc2RUUzMzU0MTk0NTRGRjY0N0ZGMTQxNjJDRkUxQUNFQURDMTUKKworQTIyRkQ0RTZEQzc4QTkzRDUxQTYwNzY1NTNDMkQ3MDczOTlEMjdFNUFGODgyODEzQkQzMjQ4QjkxMTBBQkEzQ0RFOEQzRTZCQ0QyM0YxCisKK0RBMTQxQkU2RDQ1QTlFNkUzNkZBRTFEQjBDMDgxOTI3MDY3NjUzNjUzNkVBMTNEQTRGMDdENUJCNjI3N0Y3RTRDNjA5RTRFMTZFMkVBQworCis4ODA2RjI4RjQxOTFFNzEwOTZFMjQ5NUU2NERCMjM4RTIwRTBEMTMwMUIzRjM0RDlGQjRFNkU2MTA2QzAzQjYyNDBFMTBDMEZEMDFCNkMKKworMzUyRTlCQjkzMDBDMjQ2RDBDMDIwRjJCNDE4RDc2QTA0NTY3ODRFNThBNzVBQTVDNzI1RTVGOTI2OTM5MkE5MEQxODVEQkRCNUNFMkZFCisKK0FFMzFFQ0RCM0I2Mzg0M0FCMjk1ODI0MUJCRkVDM0MwNENFMEFBMTQ3QzUwNEE0NURCRTA1NTAzREQ0OTNBMDM4NTdCQ0Q3RTRCMzdBQgorCitFODU3Mjg5MkFGRjRFMjcxRjUxMEM3RTA2NDlDNThCM0UzQ0Y3NUI4QzNCQzA4RUIzNEFCNUY3NjU4MTNFOTlGOTlBREUyNTlDNDUzMjcKKworMjY3MkY5REMyNUYwMzE3OTdDNDI2OUU4Q0FFQ0JDM0U5MkQxQTU5RkQxMjg1QjQ2NTAwRjlBMkQ2NzlFQkVDRTQ4MDk0NUQ3OUE1MEI5CisKK0Q1RDFBRTkwNzI3RERGRDZGOEM1RUIwM0IyRUE3MEMxNjk4MjhGQzc1NUJDNDE5M0NEMDI3RUI1MkVBMkRDN0FGMDlDMDg2NTY5NTEwNgorCis1QkQ3OEFGNTdDMjg5Njk3NjU1QTM0MzJBNDU3NzkyQkJDODg5NDlDNDBGNEJEQzA3MTc5Mzg1M0Y5RTg3Nzc4MzlDN0Q3RjkzNjM5Q0YKKworNDJGMUU0NTIwRkNCQ0FFQkMzQkNDNTNDODMzMzQwMzNDMjVFNTBDNzJBM0JFMEYzMzdDRDE0OTk2MzI2QzE2OUIzOTIxRTM0NDJDQ0RFCisKKzFBNDQ0Qzk0QUM4RDJFQ0U2MzI5MDhBRUQ0QTE2MkE3NDAyMTU1NUNBNzNCMjM1NzE1Qjk2NUNDODY3NzI3RTQ4QzNCNkIzOUI5ODlFNQorCiszM0I5MkJBRTQwQTBGQURGQzhCQ0U4NUQyQTdFQjZBMUM0Q0VFMjE0NzIzNDU0MjFGOUI4MEM1RUU2NDFDOTEyOTU0NDhBNTEzMDZDQUEKKworNDE5MTZERTlEQjRBNzhDNzM4MTA2NzMxNEE4QjM5QjEzRjU0MDIyODgyMjg2NzI0QkNBMkMxMDY4Nzk4OEU0QzREREJFRjVFMkQzNkY0CisKKzM2QzlGNjQ5NUUwRDQwQUI2RjM1RTdEMEQ1Q0I4QzJBNzUzQjRDMzU1RDBDREFERjQ5RkJFRUJBNTIzOUE5MEE1NkQ4MjZBOUJFMTJCQworCis2MjY3N0YwN0NCMUNBNUFEM0E4QTM5RTEwNTc3RTVGRDk1RTgyRjJFRUNCNEQ0RjdCNTVERkY4MzU2NjM4MjI4NTFCN0I2NkZCNENBNEMKKworNzU4NzYzNDM3QkQ3RkZBOTU1OTE0QjI2N0MxOEE1NUQ3QzkxM0M0QjhCQkFDRTg4NUY1ODA2QkE3MjY1MTY3MDAzMTk4RjNDMzIzNkNDCisKKzk4MkVCQTc4RDAxRjQyNzBBRjU2MzYxMUI4NEM4MzlGOUY0MTRBMEZEQjRDRTBFM0FDMEE2NjI5Mzc4NzQxQjU5OTNCNDBDQTE5MDI0MworCitDMzBDNTU3NTlDRDU0NUIyODQzNDA0OTk0RDAyRUQyNzFEODA3QjIxMkQ0RDM5MDY3NjI0QzU2ODVEMDQ5MzVGN0M5MzZFREMwRDZGOUQKKworREExMTIyMjhBRjA1MDk3NzgwRUY2QjNGN0UzNzY1QjdEM0I5RDlCMjkyNDAwRDdFOTMxQ0Y5OEI4NEU1QUU1MUQ2RkQ3NDFFNkY4NDAxCisKK0QwMjYzMDlERkE5MjUxMENEMjI1NEVCMjM0RTZCMkEwNEFFQ0RGMzlDMDMyMjdEMDcwOTZDNEJFQTU3ODY2RDkxMDk5RThDRjVGMEUxOQorCitBNTg3QTQ5OEQ2QkIzQjQ5MkVEQ0U2MDBFNDYzQTBCNkNFREQwQzMzQzI3MEY5OUZGMTI5MDZFRUQ2NjI1QzYxNDQyRDdBRTNBODA2MEQKKworODUxMjE5MjBFNkI5NDBFQjlFNTUwMzdGNDBEOTc3QzY3NURGNkU4MjVDRTQ2RkQ5QTFBMzkzOEQ5QTE0NzZDMEUwQTU3NTI3MDAwNEQwCisKK0I1NjEyNkM1MEE2MkZDMjExREUyOEQzNEM0MDRCRTAxN0E4MjMzNTI2NzY2MDlBNTAwMDE4MkVGQzNEREE2N0QwM0ExMkNCQjI1Qzk5QQorCis2MTgyQzZEM0Q5MkNCQkIyRjNCMkQzRjNCN0ZDOTBERjBDNjAxNDRBMjMzRTcxRUQyMkQ0MTEzRUZEOTU0MjA4MTgwMkFBN0E2NzhDOUEKKworRjY4MTE3OTBBQ0IzNjU0REZERjgyNzE0NTk4NzU2RTM2NTE4MkE3QkRFRTMxMUI3NDY4RkUwN0MyRjlCODI5QjY1RjI4N0Q1NTQ0MEZFCisKKzMyMjQwQ0NFNTIxRTM4RDcxOTk5QTg0QUJENkY2QzFGQUMyMzk0NUJERTk3RDFCMkVFODIzNEEyQTEyRjRGNjFBQTkzMTZDNzk0OUQ3NAorCis2NjBDNDU5RTJBRjIxNjk5RkQzMzRGQjQxRDVBMkNCODY5QTQ1NTUxQkUwNjJFRjMzNjM4MDhBQ0E1Qjg2MUM1Q0MwNUEwRjc0REM2MjAKKworQjc2MkNGMTI2MDEwMEY3QUY0OTc1NTVFM0EzODdEQTlCODM2RjJCMUZBNDQ2NTRDRDVCOUMzQzZGMTFENUI1NTUyRTJEODI0QjdCMUVECisKKzlFMjU5N0IxODQ5REZBQzYxMDQxMjg3RTk5Njg1NUIwRUNGRDIxRUVGNEEwQUVEQjQ5Mjg1NjlEMzQ2MTNDNzRCNDZEN0Y0NkI1NUVENworCis1NTMyMjE3QkM3N0IxRTA3NUE0QjVGNzgyRDJGRTU3NDhGMTJCNTBGNzE0NkFFRjUwNkE0MUE2QTMzNjQ4NTREOEFFNENBMTg0NDg2MjYKKworNjM2OEUxODE4NzQxNDg5NzBCODlBRjc1OTY3RTYxRUE3MjEyMDgxRjg1QUIxN0RGREVEQzZGMEZBRjdGNDE1QjNDQ0RFNzU2ODhFODVDCisKKzFEQzkzOUQ3Njc3NTVEQ0JBNjIyQkRCMzYzMUUxMjBCRUZCQTM3MzNGOEJEQjBBOUQ0REY4NzM3MjQwMzg1QTZFRDY0MkEzQjZCRkNFMgorCitEM0IwNkIxNkY5OTRDRTQ5QkRERjM1NUE1RThGMjhDNERDQjZBRkFGNjM1NEE5N0Q0OTBCNTRCOEJGQjlFRTJDQkY1QUFFNjY5RTMxNDkKKworNDQ2MUU3MEE2MDE1Njc2NEYyNTUyMEVBMTNGMTI2MjNGMzI4MDM0MzgyMjg3NjY2MEE3RjY2MDNCNTlBQzM5RDQyNUIzODIxN0FCNEJECisKK0UxMjEyMEVBNjExOUYzMkUwODBDREU0QUU4REZBMjFFMjNEQkZBQjAzNzQyMUIyMEMzQTUxRjRBRTJGQjVERjQ1ODVFRDI4OTE0NzQyNworCis2ODNGNDNFQ0M4MjJFMDY4OEU2QUI0NzYxOTAzOEQ0Qjk0MDRDQkJEOTMyNEJGMzI3NzNFOEM5NUY5Q0RCMENENjg3NDhERjA2Njk3MEMKKworQUQyQkY4RTQ0MjQ5NDBDRjZDNkU0MURGMkJBMDdERjQwODVBMEU2REE2MDgwRkQ0M0ZGRUEwQTcxQUE3RDAwMTY5RDgyODNDOTEwQkM2CisKK0YwMDY0NkRDOEZBNjUyMkM4NUJGNDZBODYzODM2RjY0Q0U3M0E2RkJDMDUzOEUzMEJFNjM5MzBCMEVDMUU0QUM0MEExMjIwQTk5NjQwQworCiszOUY4MTFDNDJBQjc4MzI1QUY5NzRBMjdBMEMyQTFBMjc4NUEzNkVDMzE2MDQ4RTU2ODY3QTFGODVGNzhCMzYxNzFGMTI2Qjc3QzExNEMKKworQjdBOEUwNUFEOTJEQzY4NjBENTg5Mzk2NEU4OTg5OThDNjM4MzZDQjVDQUNFMUVFQTFDOUM4MzdBMUUyMkFGREM0QjM1RTE0OUZCMEUxCisKK0JGMjQ4QTI1ODQ3NjA0REQ2OTYxREYzQUVDRDFBOUY2MUMzNkUzRTFFNEFFMUI5RjI4RkFGMzUxRkRBMTEzNjY0QkJGRUNFMEI3QzVFMgorCiszMTgzRjg0MjVCRTY5MDZBNTYzOThFMzM5MTMwMzNFNTFFMDY0MDhFMDAxRDlDODYyRTM2QTkzMDM5QUY0N0Y1RjMwMUI2QjVGMzc3NUIKKworNEIyRDQyNThCODY2NTU5MDAxMDY2QzZFRkM0OEM1NUY0QzNGMENEREQ4RUY1MjVFREZBRDZGQzA2MjEzODE5QTlCQUUyRTU1NzdENDA0CisKKzZFNDY1NkJBMkYzNDIyN0M1RTM3RjBENzdFOTY0Nzc5QUZEQkM2ODQwNjE2Q0YwMjkzNkYyODFGRDM1M0YyQTVEOEU3ODE0QUM2QjI4QQorCis3MUJCNTcyNTNGODUyODEwQjdEREQ1NTkwQTUyMkM1MEI1NkJFMjUxREM3NjQxRTBEMUUyNzFGOEM0Q0NFQkFCNjVCNkU3MEY4NkE3QzgKKworMzJENTVBQTNFNjFEQ0FFNTA0RUM0QUNEQTdDMjc0QUZFOUJDN0U3NTYxMEM4NjFBQ0RERkE1RERDNEU4RUJDQTI0QTc3MUJGMENBM0E5CisKKzhCODhBNkVDRTUyRUZBN0M4RDU1Q0YwRUU4NTBBOTlDOTIzOUE0NDY2QjU1OEI2RDAyMEZCRUE4RDIyQkM2QUFFNDI5MkI5MEM5QTk4MworCis2RjdGNEM1QTU4OEU2Q0MzREEzMzEzRjVGRUJENEU1RDJGN0U0NTRFQkNDOTkzOTc0MkM2N0U3QzAxRTUxMEQ1MDdFQzMwQzZFNkQzNDAKKworNTEwRUZGMzQ5M0IyMjA5QTdBQzQzQjQ4NDkyMTg3MjMxNTY1N0QzQkFGNTlDQUUzOERFQTQ4RjM5NEU0REYzQThDOTMwQzYxQzU0NjEwCisKKzMwMEQ2NkE0MjNBNENFMjM5MkE3QTQyMjg4M0VERjA4NzY2MTE5QzJEN0I3QzczODQ4MjFCRDZGQ0QxQjc3QjFCRUMxNERCMTVGMTA4NworCitFODlBREY0NjcyMzExRkYzNjhFQUI2MENCQjZFQ0VBRDM0QTc1MDdBNzgxQjFEQUQ1NTdFRDE5QzdBNUI1RTMzNDg1MTI2OERDMjE4MjQKKworNTNDRkI3RUY0N0QxNUJBQ0E2ODQ1MzMwMUU5NTEyNUE1Q0QzNUZERkYxRTZFREI4NUFFN0MyMjgxODA0MjRBMjg0MkVENDc1QjMxQUY2CisKKzI0MEE0ODBCNkY2RDdEMzY1MjgwOEY4ODcyRjg1OTg0Mzg0M0Q4NjJFODFFMzU5NEFDM0FGNTc3RTc5RjY0NzMyMjM5MkU0RTYzQ0MwOAorCis5MzdDMjk3NkZGNzQ5RTE2QzU4REEzOUI5MDM1RDgwMkQwRjBBOUQxRERBQzE4OTRGQTcxQkEzRTQxODQ5QzEzMzQ0NTE5MUQ0MUQyNUMKKworQjM3QTgzMzdDODc2QTU5NzNFQTEzNTY3Mzg5RkY4OUM2NjhFMEQxM0UyMjU5NjRERERDM0RCQzk0OUI0NkUwRTc1QTJCQUJCNkUyQUY0CisKKzUzRjY1QUNEQ0Q0NUEzOTRCRjIwNjMwODAyQkQ5Qjk0MTg0NTlCQzc3MzZFMzcyNDRGOTIxNUYyRDZGNTM0RkVFQkIxRjg0MTk2MjczNworCitENDhEQTdENkIzMEE3MUJDNDE3M0I2RTAwQURCNEVGQkE5MUNFNjMzMkNDNTE3QjM5NzAxRTA3NjcwRDNEMUE5QTg2QTcxMDJFNkE4MEQKKworQzFFQzZDRDY0NEY1NTExRDA5MzhEQTA5NkY4MEI0OUNBMzQ0NEMwRDk2REQ3OUQzRjg4MzJEMDQxMEYwNDMwMTI4QzYwNTZERDA5RjM0CisKKzRDRDdFOEQ3NDM3ODlCRjNBRURCODE4MURFQjFBMjExQUE1MzIwRkNGNzkwNDg5NzMyQ0U2QTk4MkIxNDAzQ0M5RTJBRTZCQjlBQjVDNgorCis4NjNDMzIwOTI5QjM4NjFBQzEwMTFGQTYyQzQ0Q0ExOEIxMENERDlERURDRUI3M0U5MTQ1QjczQzQ3MUM2RjgyOEREMTg4ODA0Rjk2RUYKKworREMzRDIyNkEyQTVENzE1NUY3RjhCRTc4MjFERDM5RUY0NTBCNURGQjE0REI2QzRGNTY4Q0FEQ0ZFRDhDNzAyNjc1QkExQzA0Q0U2RDYyCisKKzgzOTcyN0ZFNkY4QUVGNTk2OTNCQTM4QTJCOTAwRDBEMDJDNTZEMkM2MzI4MzNEMkQzNjBBREUwN0FEQ0Q0Q0JCNjIwNTE3RDdEMEIyOAorCitFMzQ2MkU2RUUyRDMwODU2QkRBNTNERjREOTdGQUIwNTlCMDY1N0U4MTU5MjFBQ0IxNkUxQUI2Q0M3MkZCQUZCOTI5MEExRUQ0MzJBMzIKKworQ0VGN0Q4Q0ExOTM4NTgyNzg1RDEyQzlEOUIxMDhEQzU2NEE5RjgwQjhDNzVCNUIwMkExRTFDOUM1Qjc5MzUyNkNCQkFCOTA0MkY0NzlECisKK0FCMUQ5RUU5QzE4MTg0NjkyQzgxQUZFMkNERUYyNkNBNDE4ODAwNDc0RTZCNzQyQkI0NUNGMDJBQkNEODZDNTJCRTEwQzc3N0RGRjk4MQorCis0NjRENjI0QTdCNkU0NTVGNkY4RDVCN0Y4NEZBQkUyODhERTNGQzRDRTRBMjM3NjZGM0Q3NzE0NjNBQjFFNTU1RjJFMUVDQjYxQjZBMkMKKworOTg3QjQzQzUzQjYzNkRENDY2QjU3RUZBRDA5ODExQzcyOEVEMzEzQjk1MDc4OUIyNjJBMTdFQTkzMkE3NDVFRjQzQThFRkRBMTZEMDVFCisKKzlCRTQ5RDNCMDVEN0VFNjMwNDM0NjQ1QUQyNDVCQkI1NjAwQjhBQUNFMzI0MUYzNzA2QTNENUI5RUZGMEE3OTNDNTZBODY1MEVDNENDMgorCis1NUU0QTAwMTM1NkJGNzI4MTAzRjU5ODkwNTQwREI5QjNGMkNBQ0Y3ODg0OTVGNjNCQUYxRDM2QjRGRTEwQjg2Mjg3RjIxMzY5NUU0OEQKKworNUJFMjBFRTcwMjUyMjJDOEFFRTRGNUExN0Q3NjMzMjMyNDYwNjIxRjdGMzk1QTIyNUQ5OTRBRkY4RDA2QzgzNTFGQzgzRjBDN0ZCRkVFCisKKzMyMzUyQzFBM0UzNTY1MUQyMTk3MTMwMTlDQkZGNzhFQkMzQjE0QzVDM0UyNTY5NUJDNDQ1ODIwMDhGQzA1M0Y2RTdGQTgzNTlFODU1NAorCitBN0M0RUE5MDYzMjI1OTMwMkVDRkI5QjVGMUY5NzIxQTM3RURFOUI2QUNFNzhCRDdDNjhDNzNBOTYwMzQ2RDYwOENGRjcxNTI2ODFFREEKKworODE2NTY1NDFBRDRFRjY0QjRCODhGQkU5ODEwNkFGRjZGMjA1MUE4NzFGN0FBQzUzMzdBOEFBMkExNkY1OUIxMDQ0N0VBREQwODRGQjAzCisKK0MzNkU1RjBBNDc4MUU0RDgzNDAyOTQ0NzE0RjE3NkZDOTQyMEUyMUVGM0EyOEZFNjVDQzlDQUNBRTEyODQwMUJBQjRFMzMyMkQ2MzAxQQorCisxOEZFQzU5NUMwNUJCRjVDNDRDNjVEMDI3RkMzNjk4RjY2QTA3QTU2NzkzNzEyM0Q1OUYxNkI5MjkwQjcwQjgzOEZCRDRDNkQxMkM0NjAKKworNjkzMDk4ODFEREU1MERFMDIyNEYxMDIzMUEwRkJCQzE5RjU3RTdCNkIyODg2MjJGNDA2NzZENTNGNERBRTI3QzZFMzBERDMxNzU5QTMyCisKK0VDMDMxNTg3NURCNzc5NDg2QzlCNEY3MzM2NTE2QzUyQzUzN0Y2RjI1OTUwREM2NzFBRjNDNzQ5RTIzNTdBNDhFOTlEMDMyREFDOUY5MAorCisyNUIxNjJENjcyQTAxOTA4ODQyQjI4QzJBOUU4RkIxM0JDNTQxMUNCMTM3NUEzQjI1ODcxRTc3MzdDMkIxRkVFNEQ0Mzk0OURCMTU2N0QKKworRTJBQUU0NEMxNTA1ODcxNjkwMDYyMzU4MDg4Mjk0RTQ5MjlENTUyODQ3QTZBOTRBMDc1QjdEMEI4OUQ3REJBNjQ1RDI2Qjg2RjdGN0Y2CisKKzQwRDdBRTRCNDc5NTZERDVBQTA1NERFMTk0QTU3NTZCOTUxMjJGMTgyRDFEMDI1MDRCRURCRUUwQUNFREFGQ0EwREFEODQwOTI1ODJGQQorCiswNjAzRjAyNTI0MDM3NUIxMUU4QzI1MkE1NDE3RkExQUE0Qzk2REQxQzRBMzY5QzJFNTk0QjIwODlBM0VGQjlEOTM2MjI0REUyNUE0MjEKKworNTg4NzE4RTYxNzdDOEUzMjA2NzlFQTFDNjM5QUJEM0U0QkI2NTNEQzE3QUVFNTI2NEU5OTFCRkY2Mzc2OUE3QzA3RUVGNkIwRTZDMUE3CisKKzM3MUI4ODlCOEJERDE0REE0M0VFQjI1MkZDRDgyNTU1NzUyQzI1RERFOTJERUExMUUzMTAwQzhCQkIwRTJEOEQzOEMyOUU3RUQ0MjMzOAorCis5ODExQzIxRTRCRDE2MkZENzVBQjFBMEU1QTU3OTM1MkNGREU5Q0M4RkNEM0E0Q0MyQjVDNEQ4NENCNUE2RTJFNTJBNTJBM0Q4RUY0NDUKKworMzdDNkY4MTI2OTREQTUxMTlDRTlCNzhBMkM1RjEyNDU0QjFCQThBRDZCRTVEMjA4ODkwNkMzQTExQTRDQTgwQjIxMjA0MzRFOTJCNTI2CisKKzE3M0QwN0M1MzBFQUZGNjFBMjcxMkY3QkNFMzYxODE5N0I4QjYxNzVDRUFFOTMxODZCNzMwOENBQTkwQkQyMDA1NEQ5RjQ4RDEzQjQwRgorCisyQ0I4MUEwOEQyMDIxOTVGM0IwM0VCN0UxNEExN0Y1NDE1RTQ0Qzk4MUQ0N0U0Q0VCRDQ2RkMyQ0U4MkIzRDBGNEVCRDI0Mjk4NUFFNTEKKworMEJCNkYzQzFBNzAyRTg2RUNEMjc4Q0EzMjI1NzVENzVFQ0Q4Njg5OEYwMTM0OTlEMEE3RkMxRkMxMjdBNkE2OTQ2M0JDNDQwOTdENDdFCisKKzhBQkM1MEVEMzZFNEVGRUNCNkU1NTUzQzM1Q0I2Q0Y2QkI0Nzc5Q0YyMkY1RjY5NzBGMTVGNTQxNTlGRTVCQUQ3RDU3QjVERDVCNUJBMgorCitCMkUyNTA2OUVFNzdCMDY5NzdCRUZGMThEMjE1OTRFNkREREUyRDQ0QzdERjEyQTgwMTIxRkI5QTIzQkZBMTZGNEE3RUM3QUMyQjJBQTYKKworREJDNzUxNUUxOENFMzlCQUJDMDRBQ0IxQ0I4QzBBMDFBM0FGMTY5MTgxQzQ3QUFDQUEwRjBEODAzRUU0QzQwRkYwQzBGQTEwOTYzMTAyCisKKzMzMEYwQkEwNTZERUVBMDJBMjQwNTY4RDhERkMzRjAxREJDNDJEQTJBQUQxN0NDOUE1RjFERjEyREEzM0JGNUNBRjhCMjJCRDUyMURFMgorCitFQTJCODMxMTM1NDE3RTgwNDEyQjI0NDY0NEIwRTZEQTQwREQzRTVDMkEyODNBNzU5NTBGNjg2MTY3NzE5RUE2OUFFMURCQjAwRDczNTYKKworRkFGMzMxMEQyNDA2NkQ0OTQxRUY3MDY4NkRDODU5Q0Q1MzNCRUFGRTlENUJCNEU0NzBGMzhCMDkxMDRGRDZCNjNBMUJDNjFDRkIyN0I2CisKKzcxMEVGMDkyREVBQzc4MzEzMjQ5QkY2NjYwOERCNTA3RjA4RDhCOUNCNTVCQkVFMUNBRjc5QzgzRDYxNjY0ODE2M0Q1NkRGNjM3RTUwNgorCitEMDZDQjQ1Q0I3MENEQUI5MENEODdGRUQ5MzRFMEFFQURDOEM1NkI3MEM2ODdCNDRDMzBCODQzNzZBMDJDMDQ4NzBFMDY5MEY3RjQzQzkKKworNjUzNjMyNDA5MkM3RjRDRjdCNjQ5OTBFQTRDNURCNDU2RkRENzM0NkZDRjU1MTIxQTUyNjVBNEIzMTY5RkQ1RDhBREMxNEExNzVGNzVFCisKK0Y4RTg2REFGNzBGQzRGMUU3QTAzMTgxQURDNkYwRjlDREU0MkREMkI0QTg1M0U4MUU5QTQwRTE3QUU4QjBCOTVGQzYwRTYzNUM3QjQ2MAorCis0NzdCNTgyRTdGNDVCMDBENzhBNDcwMzQxNEE1QUIyQTMzNDU2REFCNzI0NzUxM0NBQ0MxMzcwQTAyRDNFMEIxQkJERjU5OTEzODVGQTIKKworOUUwM0Y3Q0EyMURDMThEQUY2MTJGQ0FGQThFMzVEQjM2NjM4NTAxODFFMDQ2OTU0OTM4NzE1QjI0QzRGM0Y1Njk0NDJCNTgxNEYyMkJFCisKKzg5QzYwRDkxMjQwOEQ1MDUxRkFCOEM1NzcyMkZGNjk0MkQwNDVBMkQ2MkIyQTY5Njg2N0RFRjM5MTVFRTE5NzM1NjFFOEVEMTY1NEI0OQorCiszRTk5QjI3NzU2MDUwNjZCMzZCRDE1NkExMzQ3RTA2QjMwREIxMjkyMTRCRUJGRUVEODgwQzBCNTgyOTBDNUY2Mjk1RDI0M0VDNDZDNkUKKworMTIyRjZFMkVFRjRDN0RCNUFEOUVGQTQ5M0NGQjAxMTczQzhDOTJBNzZBNUY5MDBERjAyMDMwMzJDNDkwMjA4RUU1RThDMDA4ODcwNEE2CisKK0JDMUQ2OUI0Q0QyRkUxMjJGRDhERTU3OTgwMUIxMTBDNzZGRDhGQUM4OEMyNDU1OEIxMjdCQjkwNzQzRERFNzFGREU5N0IxREFDN0I5NgorCis0QzRFNUREOEVBRDlGMEU5OUQ0NTFFRDkyQjRERERGOEI3NjY0MzcyN0Y4RDAxMUYzRTUyN0ExNkE3MDNDRDhBNTk3RjE4Njg1QUUwMEMKKworRDQ0OTQ0QTc3QjY5RDA5MkIzQTYxRUM5NDBERDhGNjRDMTg1MEFGN0M4RDE3QjY5MDIzOTcwNzAwMEJBMUEwQzBDMUQyMzY0ODgzOEEyCisKKzFDMEJGRjkyNDBFQkE2REI1ODMyMjE0QUNDOENGMDIyQkFEMzA1RjY1OTRBOUM1QjdGQkZDMzg4MTk1OEExNzBCMDI2Nzg3MEU0QjgzMQorCitGNjg5NTFCQjk5NTJGNzkxMDdCQ0RGMjRCQTRCNDFFRTJGQzMxQzA3RTRBNEE3MzQwQjM2QjFDRDEyMTc4OUQ2MzNBQTk1ODU2M0I4MEYKKworQTZDQjU2RjExRUFDNUI0Njg4MzlFOTU2NjZBOTZCN0RGOUQzRUIxNkY1NkQ2OUJEM0RENkRDNkQzNDQ1OEIzRDU2RDU1RUU5QkIyRTUyCisKK0VCMzU3ODg3REIyQjhDMTJEMDY0RUYzMUUyQjUzRUM0OEE0OTY0RkVGMDBEREYwQ0IyNkU2QjJGRkE1RjU4NjY2NDlCQzM0MTVDMEU2NQorCisxMEMwOTgxNDE1OEM4QjM5MUI3NEEzRDdBMDdFRjczODUxOTNCQ0JBQUYyNkVEMDg2MTkxRkZCODMyOEJGMzUxMUI0Q0Q1NEM2MzY4NzcKKworQTkxNjg2NjE3NERGMDI2MDgwMTYzOUIzMDI0QjlDOTY1MTE2QjJBNjhERUM4RTE3MUE2MjBBQjQ3MUY2NzMzOTFBMzFCMDgxNjY1RjI3CisKKzgyNkU5QUMyQTMzRENCMDU2NTEzNEU0MDdDNjE4NzE1RTE0NkNFQ0ZENThFQUY0MEQxNTc1QTgwNURGMTJCNzFBQzNEM0JCQTQ5MTNDQQorCitEODQxODVCQjdGREI2QTJFREM5MDRFQzBGRThEOTUyNTVGQzUwMTc0QTUwNkRGOTM5RkMwRkU4QzZERDREMjc1NjZDMzI1NjlFQTIzMzkKKworNTgzRDRGQUE4MkUwMEZGOURCOEQzMjM1RDAwQUMzQzFBQzU4MzA2RDJFMDJENjVENTRERUU2REY2RUNGMzM3MjZFMjQ0NEY2MERCRkEzCisKK0RGRjRGNkZENEFFODgzNzZCNTA3RTcyMUM5RTlGRTAzMEQ3N0I5NUFCMjlDNkRCNzAzRkE0NTUxNUE0MjRCMjEyQUNGOUQ2NThEODQ4RAorCisxMjA4ODNERUVFNzgzNDVBMzU2NzlCRjgyRDdDMjYyOTcyNTlEODY5N0EwQzIyMUUyNkM2RUFCRjNBNzI3RDk1MTIyMUNFRTc0REZERjEKKworNUEzMzM2MERFQTM2REQwMDYzNTE1QjVERDE3QzIwNEUwRjRENDkzNUZEMEJCRUU3NzVEQkZGQUUyMzJBQTAxOEEwNEE1RTU5RUM2M0RECisKK0REMEI4QjExNDUwRkZGOURBMEQ0ODk0Nzc4ODc3RTBDNjNDODI0ODlEM0Y3Q0Y2N0I2MUVFMDhBNjExMzBGQjc3RTE1QjUwQjdFODdBNAorCisyRjZGODM3RDUwRkEzNjY1NTI4REY5MTZCMTg3QjExOTU1QjA0MjRBNzYwM0YxRjZEQzFFMkJGNDFFQUM2RTk4RTlGMEY1RjQ0NTgwQTAKKworQUI4QzY0OUVERDRGOTYwRjQ3NTlDQkMyOTk1REIwQzBFMDdBOEY3NzNFRjlGNThFQTU0NDI5Nzc5QjdEMDg1RkI0NkE1MTlDQTg5QkNCCisKKzAzNDBBRjg0M0VDQjM3QTgyMDhCNzczNkFDMjc0ODExNzI3MjhDMzYwREIxN0NGRTgxRTM2MzU3OTRDQTkxOEMyQkJENjY1NEQyRDRCNworCis0MDA2MDUzRUUxN0QxREQ3RUZCOEVBODgyQ0QwNTVCQjVGQzlCQUFBRUU2MzA4OUE2RjIwQkY4OEVEOUVBNjQzQUMyN0RDRTlCQzFGMUEKKworQjlGMTVCNDAxNzJDN0U0QzA2MDJEMTNEMTMyMTZDRjBGMkQ1N0U1MUI3NTFBRkNGODE2MDgzNUZENEUzRDIxQTU4ODk4NDAxNDI1OTYxCisKKzY5MjcxRTJEQzk1RDcyRTZGMDc1RjQxM0M5NkRCN0REMTdCM0ZGMjYwODgwOUQwODc3RTIxMkE3RDFEMTdFNzRDQjRGRjQ4QjY1NjQ1QworCitCODEyNkQwNUFFQkJGMUE2RURDNzA0Nzg3Q0NGNTdGOUI3Q0FDRDc1Rjc0OEE1QTZBMUM0RUM4NjNDRUVCMkJCMUQ5QTRBMjA3QjRFMEIKKworOTAxMDYwRDBFM0E5ODc5OTcwQUU5ODQ2NEQ4RDY3RjlCNEQ3QzZFNTgyRjAzMEI4RDhENjJFMTVGRERCQkEyNUNDQThBOUVGQkMwMkVGCisKK0MzMDRDQUVFOTAyNjcwODE5NDYzRENCMDQxNEIzRDE4NUFBNkREMzcwQjgxQ0E5MTQ1Qzc1QUQ0RjdBNDc0MTFGMkJEMENBMTUwNzQ4OAorCisxMTc4Njg0NThDMDgwMjAxMDA3OENCNEVDMkJFMDMwOEM5REMyMkFFRjVCMkU5Mjk0RUMwMEJCNTU2ODkxNjE2NERBMThDRTY5RDE3MEYKKworQTM2NDFEMjlEMERGRDA4QjVBRjZFMUYxOTUxQ0Q5MjU3QzA2OTlCM0ZDMUI2Q0MxOTQyMkY0MzNDRUJDQzdDQzFFMEQzMENDQTFDNkYyCisKK0QzRkZCMTM4NEY1QTFEMzI2ODFBNURERjQ5OTMzNjI5RjdCMDQ0RTQ1REQ3NDhERTg1MDkyNTdFNjg4RjFDQjYzN0ZCNzY2MjY5Q0JGRQorCitFMjA2QjJDMTU2MENDM0E4NDQ3MENEQ0U4RkEwQzc0Mjc0REY1MDk0RDQxM0Q1QTUxRDFBQkRGQUE2NkQ5QzlERDYyN0Q3MkMyOUE5RDIKKworQjBBMzU1Mjc4OTc3NDExMDQ4MUZGM0Y3RTBDQjU4M0M3QUM1NjM0RjA5MjJDNTNGRDgxNjAxNDk3RTk2QjgxMDA4RDlDNUI0OUY0RUQ0CisKKzAxRkMyQ0RDOTc0NEMyRTMxOTQxQkIxREEzNEY2RjZDQjYzREMyQzIzQTRCRTE3RDNEMTNENDEzMTg4QTJBRjc3MTQzMDIxRDM3NkU2MQorCis3RUIxQjJEMzBDRjVBMUMyQzc2RUVERUJFQjcxMEMwQzQxNTg5NThDM0QyQkEyODk4OTVGNzlFM0RENDVCMDMwRDkwQjEyNjQwOTYxQjUKKworMDMwRDFGRkM2MjFCNTRBODY5MzQ5M0I1RkJERDE5MDUxMzJFRDI2Rjk3OTkzNzBBNjdCMEQ5MEY3RjlERkIwODBFMTQxRjY0MzkzNkNGCisKK0RBODEwRUU4NTIwMTcwNEExNUI5MkM0NDE5RDY1QzBCRDFBREFDNEYxNTc5NThENTJCNTI4QTg0QkNDNjlGNTdBMjUxMjNBMDREMjIwMgorCiszMTkwNjdCOEI4RTgwRkVBODBEREJBOUZDMDc1QUVEQzQ4MEU4MjA5MTExRjk0NDQ3NDJBODcwN0Y1NzZBN0M3QTFEREI4OTRBMzM4MTMKKworQzJENkZGQTdCMDhFMkREQzEzMDlFRTIwQjFEODBCQzM4N0Y5REYxQkI3ODZCRjZFODI2NDBENzc1RjA4NEFCQ0I4NkMwN0RGMTU0MTNBCisKKzA0NzVGMjZGRjYyOTYwQUREMUI5NEYyMEZGQjJBOTA4QUFFMkM3OUFDNEVDMzg5OTQyNTg1NUQ4MDI2MkIyNzU4RTc2QTQ0ODhEM0E0NworCiswMDU4Q0U3QkJCRTdDOTkxMTgzNDk5RUJEMkM1NTBDMjkxOEVEQUI1QkQ5RDQzMjczQzQ0REQxOTIwMjRGNzM0NjhCQTBFQUQyODI1RDQKKworOTlFRkY0QTlCMUMyRkM2NEFFMjIyMkExNzExNkMxRjhDRDYxNjIyQjA4QkQ1NzMwMzZDNDg5NTZDMzUxM0E2QTNCOUYwNjY5MTUzNzhDCisKKzJBNDFCMzE2MzY4OTk1Mjg0N0FEQjdGNjI0MzAzNzg1RTlGNjFBREQ3QzJFNjQ3RDJBMTcxQTVBMDQ3MUU3NkM5QzZERTQ5MDlCMDE1RQorCiszQkRGQzk4MzZEQjg4NDQ5MkY1QzlDRDc3RjVFMjlEQkJDODBGNUI4MzY2ODRFODI5MDBGQUNDN0EyQ0MxRDIwRTZGRUU2MEJFRUFFOTMKKworREI5OERFMjM4QjY2RDEzQkRDODU4NTkwNjU0Rjk2MEZENkFBQTc3OUYwMERCNzczNkM3RjE4ODA4RkZDMTY3QUUzMjQyMUZCOTc1RTk0CisKKzdGQzQ5QTIzMjBERENDNEI2ODQxRjU0RUEyMjhBNTgzODNENDIwQTI1QzIxRTg1Qzk5NjY0QzhCQjIwQUFDNjYzOTBCQTQ2QjQ5QkE3QworCis2ODM0RThGMThDQjMxRkRCOTJGQ0FDRjExRkYxQTlDNTNGMDZENjk5MkIwNkJGMEMwMURBMjA4MkU2RUE3MDUyMjQ4NDFBN0M2QUQwMkIKKworMDE1QzJBQUQxOUM4QkJGMUFFMjUwNkIwOEQ1N0NGQkMwQjI5MTQwMkJEQTVDOTU2OTNBRDY1OTAyRjk2QjkxMEQ0NjVDQjkzNUNDQUZBCisKK0Q3MzFDOUYzMEI0MEVDNTlBRjEyNDQ2QzE4MDBDODBBQzYwRjRENENFNjhCODA0NEI1NzI1NzI3QjMwODlBQkJDNkU5NjMxQTRCQTVGNgorCis1ODk4OTFBMjA4NUM3NEUzMUE0QTJDNEYwNTczODAwMTZGNTA4M0FGQUI2RDA4OUU0RURBMTc3MDQ1QkZERjE2ODJFODQ4QkVFRjJEMUEKKworRkQ0RjhGOURGNjgzMUZDQTIyQ0Q3QzRBMzUxQ0ZFNzcwNjM1REEyMkZEMTFCMzMyNkZGOUFBNzlERTc2RUFGRTk5QjY5OUZGMUM3M0M3CisKKzEyRUJGRkMxRDg0QjAxNDI5MTRFMURGRTk5MDYwNUU3M0NFRTdEMEU4OEIwNDk4NjA0QzE3OTY2RkYyM0M5MjJGRTcwQzUyMjAzNjIwMAorCitGNUJFQTA4MUNERjhCQ0E4NTU5Q0IyMkYxMDhEQjUyN0FCNkFCQUUxQjQ1Mjk2N0U1MEY3MTJDQ0NCRDExMjUwQzU1ODI1NzQxRjQ3NjcKKworMDQzNDExRUY0RDAyQTFCMjZFNjMzQ0JCMDlFMERDM0U2OEZFQTMzQTI1N0MyNkJDMDIyNzY5RjcxRjI2Njc3NzZBNTc4ODdEREMwNUIwCisKKzY5QzE0MjRGOTA4RDhBRjg1OTY4MDU1NzM5RDBFNzY2REE5OTdCMkU1QzUzQjkwMjJDRkYwMUIwMDRFQjBGREQ1OUJENTlBMDMwRTZDOAorCisyOTFFRTlENzcxREFCQkQ1NUVGNzhCNkYyQzQ2Qjc3QTdEQUY0MjkwMzdCNDU1MzU4NjVDN0YyMTQ3RDYwNDQ5MUQzOTY0N0U0RkNDQTEKKworQjU2NjhCMTAwNkIwQzhGNjIxNEQ3RTVFQjU1MTlCRTg0MzkyN0MzQkU0QzNDMjM2RjEwMkExQTFFRThCODJFNURGMzRCQzhGRkRBQ0RCCisKKzc5QjJEQjkxQTUyRkVFNDg5MkY3RjI0NTJCOTAzREQ2MzYxRUNCQUIwNzEzOEYzNTY5NTlCODMyODE5Qzg4QUJFOUE2Qjk5OUJBREEyRQorCisxQTNDMzJCMDRGNzMxRTc1QzcyNzQ3MkUyMzFCMUJENzlFMDQwQkRCNzIxNzUzMjcyNTA5MDU1NzBGQ0Q5RDlENzFENjI3RDc5MTRBRDQKKworRkE1MzZBQTY0NjFENUY1MTJFMkUxRUI3NDc1QUY2QTgzQzEwOTMwNTY4REY0OEJGMjc5NDQ5MEIxRkQ3MjY5NDczRThFNTZEQjgxMjE5CisKKzUxMjdFRDc4RTUwMEFCQ0E5RDI2MDNFQjQ2MzI0OEIxQjNGNkVFN0UwQzg3MDA4Mzg0OUFDN0Q4M0I4NDhFODE5MTc1QzQwNzVCREY1MQorCis0MDkwMTc2MUU5NTFFQUQxOURCRTJBQjQ5MUFEOUVCNUQxMjRBMjBDQkFCQkVDRjA1RkFDN0FENjA4QTFBQ0JDRTdGRDFDODg0OEU2MTQKKworRkM5ODlBMzFEMDAxMEVDM0ExMUNENjc5N0VFRTk0MUQwNTQ2RTBBNTk0QUFEOTU3MzhFQTBCRDBCRDdGNTVDREMwQkY4REEwODJDMEU4CisKK0NFRjM0OTk3MUQxM0NDRTkyNDZCNzRCNkM1NTI0NzlCMUU1MUM3QjMwOUFDMDI1ODk3RTkxMEIwMDc0NkMxMzA3QkUyQzUzMTIxN0UwRQorCis3NkNFOEE0NzA3MkQwOENEQTExNkI2NUU3NTY4MTU0QkJEMkQ2N0Y1NzIzQzE4N0ZENDZFNTQxOTc3QUJCQTY2MkJCMDgwNzlEOTNCRUQKKworNzhFOTI0QzI0ODJCMzk4NjFGQkUxQUQzMzhEREYxMzY0NzM2QjYwMzBEQjJGRkYxRTg5NjVERDc2MzEyNzZENTE2QTk2RERGRkM4OURECisKKzJEMzQ4MDQyMkFGQjMxRTlBQjgxRUYxNTU3QUM1QzcyMzA1MTA5NkM0MUVBN0Q0MEJDN0ExQTI5MDJFNzgyREY4ODcyREUyRjI3Q0MzMAorCiswQzY0NUQ0RUY4ODY3MTZGMjk5OTgxNUMxQUY2MzcyQzM1OUJGODRDMjA5QzQyQjkzOTE4NUM2Q0JFMTQ1MTBCOURDMDI5OTcwQkZEQUQKKworQkZDN0UyRjRGQjBGNTA2MEQ2OUNGQjBGRjcxMDI2OTQ5QkNDMTVGQzE3OUE0REM5QkNBNjRDQzQ0MDdCNjk0RURCQzU0NzIwMzIzRTRBCisKKzI3MUFEMzg4NTI5QjA3Q0YyM0IyMTg4NkRFN0Q0Q0U3MjFCREQxMUMxOEM4Q0QzRDFENTI2MTk1NDg0MEUyREVGODcyRjBDNzExQ0JBRQorCis1MTU1OTU3QkQyRTlDNEY5MjdCN0U4RkMxOUIwNDYwOEZENDExQzEzMDFGNDYwOTJBNjJGM0YwQTUyNTQzNkQ5OTE4QUQ5QzQ3QTc2NzEKKworRjQwQUEzMTg5NkM2REU4MjdEQzEyRkI3RTdDN0I1QTlFQUY5MzFCRUJGMUE0QUE0RjI4RjkyODdDMTZBQjc4MDg1QTQ0QzU2MzM4ODYzCisKKzkyQTkzNjBDMTg4MzgzRTMzRkY1OThDQkNFMzQ3MDNBQTREQjg1QjYxQjRCNzlENTM4N0Q1NTc2MTI4QjIyOTQ3OTc2NjE3QjY2RkE5RQorCitDM0Q4MEU4QTBFRkUyNTcwRkI0NjAwNjBCREZCRkQ4MUZGQThBODk4NkY1NkQyNjY1MkFCMjlBRDZFQjJBNDg4MUZDNDhCMDIzMTIyQzkKKworMjJEQUZBNjUzMzcxMTBDNzY0OTBDRTNGNDFCQTRBQTA1RjYzQzZGQ0IzMUFBNUMzOTlFRDAxRkZGMzk0OEFCNjkwQkYwMUEzQTE5ODFDCisKK0IxMjBERDVCRDFDNDVEMkM1NzI5NzY4OUFFRTQ4MDY4NUJGMjNGRURCRjY2NTE3OEExQkI1NEY5QTVEQTIzRjcyMzE0RUM5RkQwQzY5NworCis3Q0M5NjA3ODQ2MUU0ODYyNUM4N0EyOUQwRDE0NEUyN0ExRDRENzZFMTgwMjREMEY2RTkwREJDRUM0QTEzQjdEQjc1QThFOTVFNzE1REYKKworM0Q3MzAwNzA3MUZCMzBGRUU5RjU1MkQ5NjhCRUE5QjhGQjgyMkNDRDZERDMzODNDQTlBMUU2RkU4MDg4QzBEQ0VBOUE1RDM4QzA0MThFCisKKzg4NjgxMTVBMkJGRTZEMDU1NTgwQUZFRkRGNzBENTEyQzg0ODhDM0MxMzg5RjI2QURGQzc2NzMzMDQ1MUY3N0QyMDYyN0Y5NTYzRTkxOQorCitFNTE4MkVEMkM4RTA3REE1NDBFRTJDNjkyNUQxRTVDNkFFNUQxMEZBQTg0REZGRTkwQUQ4Qjg4MkZERDQzMURERkUzNkI1MTM2MTQ1NDMKKworMThGQjQ3QzM5RkFDQTRENjYxNzg1OTIwQThCQkVCQkQ3MkRCQkNBQUMxQjY2Qzk0NEFFREEwMThCRkY4RjE1Q0Q1OTE3QkU0QTFDNzk5CisKK0Q3Rjk2QzY5QjVCNzlGMTFBQTM2QUNGQjlBMzk2MzlENzUwNkUxODgwMEE4NjEyRDFEMkM5MThGM0NENEI5NzdDMUZDRjE3NzE5MThDQQorCis3Q0U0RTU1MEEyNERDMEY5QTQ1OTcxQjI3QUYyRDY4QTg2NDFBNEEyMDlCNEZENzI4NTc3MTBCRTYwNjZCNURBQjIzMTQ2QUM4NjgwNDMKKworQTA0RTgxNTJDNTFDQjBGRjdERkU0MTU3NkNGQjQyOTk4RTYzRjc5M0EzM0YxQjYxMjgwQkI2MTU5N0MwRTNCMTc2REVEMjk5OTE5RTcyCisKK0Y2RjNGQTRDMTM4RDIwRTQwQjkxOTg4RUY5REZBRjMwNzA2NEM5QzMwN0M5RjRGMkU5QUE0RDUyMTU0RTdCREQ2MTk2OTg3QzZGNkU4OAorCiswNTQzODAyMzQ3NDI3RkFEOUVBRjFDODc5OTI4QTU0MDRERjI0MEU4NjUzODNEQzAwNzU4MURDMjlCMjhGQzE4RjFFNkJBODQwQ0IxOUYKKworRTYzOUM2NzA3MEExMTBCMDdEQjY1MTlBNUEwNzI5QTdERTgyQTNDRERCMDM3NjVFMUE3QzgxN0VDNjIyMjVBN0QyODUwMTAxRTA3RDIyCisKKzlDN0NCQ0UwQjQ2QTJCMzM1Q0E5MDM3MkRBRENFRTk4NEJENzVCMENFRjEzRjFDRjcyMzdFMTU5MjVDN0I1NEIyNjEyMzZFMjYyMDg3NAorCitBQ0VGQjU5NzhDMDBFMDY2QTAzQTU3ODE2QTczRDhGNTU5RkJFMDA2QTk0NEUwRjAyNkQ4Q0NGMzE5ODY2NjkzQjRBNjJGRjQ4MTBBMkYKKworRDI5QUMzNUY0MjlCQTA0MzhBNzQ3MkRBNzY1MTA5MzdGNzk5QjQyRDk2MkYzRjE5NkUxNUIyMzM1OTk2QTkyMzA0QzRCRERGNzEyN0VBCisKKzJGMDlGQjdDNzc5NTI1MDI5QjBFQzg2Rjg2QzdFNDE1QjgxRDUwNDI3MTRGREZCRDI0NTdGREJENUFDNkMxRDQzODJENTkzNTg2RTJFMgorCitBRTk2NjA1MjlERDBGRjcyRDJDNzdBOUU0Qjc2Njg5RjhFRTVDOUJBNzJEMzAwMjcxQjhDQjJCQkIzNkYxMEY1NzMwOTM0NEMzMTE0RDIKKworMzE3NjJGQzY4QkFBNUM0ODJCMzM4Rjg0N0U0RUY2M0Y1MEE5QTcxQkJERDgyMTRDNjdBOUZEQ0QxQ0RFNzJDRjA3MDM3NkQ4MEIwQkZDCisKK0JFRkJBOUM5MzA5NDJEMzVFODRDQTI4RUEyODU3QURCQTIxNkQ4OTc3NUU0NUZGQjQ3QUMyOUI0MTEzOENBMDNCRDc5MTIyQTc4Qjk5MQorCis0MzE3MTQ0MDQyMjNCMEQwMUVFOEYxMzgwMEM4MzQ2QUZGRkQ4NjMxRDRDQjFBNkFGNDY1M0E2ODgxOUZDMjU0NTU5MUQ4Q0JBODVFM0UKKworNjIwQzgxNkY4OUI4QUE1NDM5MjMxMzk4NTlFMERDRjA4MzBDMDJCRUEyMzZFNkFDNDAwNjlDRDRCQ0NFRDg4ODVDREE2OERCREI5MDcxCisKK0NFNjFDNjE3MThGRTMxODA5MEIwQzJENkNEMTA1OENGOUY5QTA2QjgxRDExNDIxNUYxNUQzNDExMzI3QkQ0OEFBODQ2RjE4RTMzRDlBRAorCisxNDI1Q0E4NDg3QUZCMzNCRjkwMEI0QUI4RDlEQUU1NDVBNEVGMjAzRjQ4NDRGNzAwMUMwNEVCM0U1QkJGNjY4ODI3QTJEMTJCRTQyMDkKKworMzFDREU0RTgxQTNBRTA1MDFFRTRFOEU3REExMTZEQjY0NDExNTJGRjg5RjA0NTE1MEQzRUU3OTI5RDg4RTM0NTEwMkVBN0YyMEU3MTRBCisKKzA0MDVCNDE1OTcyQjE2NTBENUM5MjAyMDY2QzgxMzcwM0QyMDI0NjlGRDBFRDM0ODM4NzVEMkNEOTU1RTc1QTg5Mjk5MUU0NDZGMTQxOAorCis1NTU4NDMxQTA3NkZGNDQwRjQwQ0I1OUQwQTlFRTQwNjg3QUVFMUNDNzMzNkI5RDdCOUFCRjE3MkU0REM4NjNGMTU5MUQ0RDI0MjkwQUEKKworODU4MEFGM0EzRUQ1QjdFNzlEOEZGNkRBQjY4MTFCMTAyN0ZEQTg4NzQ2OTg3NzMwNEVGMTgwMUU4MTg2QUY5ODhEMENCODkyRUZGN0YwCisKKzZBNTQ4RkY2RDVBNUEzODJGRkMxQTMzOENGRDYyREVDMUYzODlBMDFFMjZEMEYwNTI2QUIyQjE1QTcyNTJGMUVCMDNDMTg4RDBGRTczQgorCis2RjQ1MjRCNEY0Mzc4NDA3MDQwNDBBQUVBMzgxNTQ1MjYwMzlFRkRCNjUxMzEzRUZFRjE2ODJGRDg0NEQ2QjgxMjY4NDRGRDZBMTk1ODcKKworQTEzNDU1MjgzM0Y3QUE3RTM2ODFFRUZGQzI1ODk2NzdBNDM2M0U4RTk1NDY5RjNDNjY1NkU3N0NGNjk1NzJEMzQwOEU5QjZEODQzNkYzCisKK0NEQjkyNkEzQTU3RUE1NDI3NjA1MEM0QjNDRDg5NjQ2Nzg2NjdBQzA3ODVDOUU5MDA5OTExMTc2MjdENDM1RkYwMzhGNzk5REUwODlFNgorCitERjI4RTJBNDA5ODBEN0Y3MjU2RkFBMjkyOEVCQTEyQThENkZERDgwNTUxQjBDRjNBQTQ0MkQ4NDBBMTFDOTUxQjQ0NEU1MTlDMTlGMkYKKworRDBGMURFNDcyRkFDMEUyRUEwQkE4OTlBM0U3MDMxM0QyOEI0OEE2QUMzNjJGOUM3RUE1RDVBQ0Y1RDA0Mzc2REU2Qzg4NDM2Qjc2MEZFCisKKzhCRjY5NEVDREQ2QzM2NkFDMzFEMzQ0NjkwMDBGQkYzMUJBRTlDMTRGQjIwMzBGMTVBMjk2NUI5MTcwMjE3ODBFQzQ2OUYwMEIwODI4QgorCitFMkZCOThFNTQ1QjJFNDMwOTIxQjg1NTAzNkNDRkVDNkVDOUI0RkYwRUJCNjlBOTE0OTUzODMxNTRBQjg0RjMzMUEzMjEzQkREOTUxNTgKKworMjBCRURFRkY0OTc1RTA3NkFBOEJEOUE0ODk5QjVCRTdBREIyNzFDMTc4MjNCMTg0ODhEN0IzODdCMUFGQzcxMDZDODdEMjE5RERGOTZBCisKK0U4NjZGMUIwNjc2MDc2NUJCMkFGREREOTUyRkUwQkNEQkI2MzE4MzQ1RjhEQUQxQTc4MkFBNTM2RjcxNDhBREMyRDNCRjVFRjZDNkE2MgorCis5REFDNUE0OUJGMThGOUYyMUU5QUQ3REVCRDIzN0MyMjkyODZGRTIzNzA1NjAxMzk1NjkzMzhENDU1RDhEM0E5MTNEMzI5RTgwNzJFNjMKKworQTA3NjYwMTc2RkJFRkVCOUQ4OEZDMUMyRDlENzZDNTFDRDMwNzgxRTRFRTU5RjhCRjRGNDM2RDlBQTEzQTM5Q0VEMzg3Q0I1NzMyNEQ3CisKKzI2QUJEQUVCMzBEQjFCMUUxNDc2OUY1RjREQzcyQURDOEJENzU3OTA2RkM0NDNCRjZERkREREYyQ0RBODY2NDAyMzYzREZEOUJFOEI4OAorCitBNjhEQTNEMEUwQjNCQUE0MDRBOTdGNTUxQTBCNkM5MEQzNDlGQjlGMTdERTk1NUZGNUZDRjgwN0MzODg5RkUxMERDQTExQUM3M0U4NTUKKworQjdEOTJBMjZFNjRCRTE5NzFBQjkzNTgyRjdGNTNGMUM3QjFGRTQwMUQ3RjBFQjBFQjEyMTI2NkNGRjVFMjNCMzMzMkQ4QjQxMDJBNENFCisKK0YzMDYzNEM3MTA3RkY5NzgwQThCRkVGRUIxM0ZFNUVBNzhEOEU1QzlFMkU4OEUyMjM1M0QyNEZDNDU4ODlDQTEyRkZBMTREMzcwOTAwRgorCisyNTdCMTRFNzYxRDQ5Qzc0RkMxOUI5NzQxMjEyMEU0QkU0RUFEMDk0Mzk4RTkyQkYxREVGNEQzNEUxREMyNThBODVCQzYyMzU0N0I4NzEKKworMDRGQkIwMkY0MDIyMDQwMjRBNjZCRjY2RURBNERCNUY2NjdGREZEN0MwQ0I2RkZENzk5Mjg4REIxMTBFQTFGRTdEN0MzQ0YzQTEzMEI0CisKKzI5RDI0NTBEODc1MDdFNjhDNjhGMkYxMzBBMzQxNEI0NDc4QUZCMUVENkJENTVBRjY2RUM1M0U2MjdCMEYyNzY0OUQ1QzVBQTU5QTc5MQorCis5MkRFMTM5QUFDODlBMzc4RjBEQTIyQTMyOEJBRUQ1OTFENjYwMzVCOTU4QjMzOTcxQjY3RDczNkIxMTk3MzJBNTI0NDU2MkNFOTMyQUQKKworMzZFRDlDOUJGOUEwNzU2REQ2M0U5MDk1MjcxMTRENTgwNjE4Nzk1MDhCOUMwNDNBNzAxOEFDM0YxQkNGRDA3MEM3QzZEQjg3OUNCQzVGCisKKzMwNUJDQjI0QzE2RjQzRDhFOUI3N0I1RDJBMEQzNzM3NTM2RTY0NTA0OUE2NEVENTU1Qzk5OTA5QUY4MEY2MEIyRjIzMDdFQzU4RUY5MQorCis0NzlFMUM0NDdBNTdFRkE1QUQwNjUyRjc4Rjk1MkU2NTA4QTc2OEE4OEY4RERFQzg1NDk4NjVCOTI2NkI1NEQwM0FGQjE5MjlGNzFERDUKKworMTc3RDA1REJEQjQ1NTNBOEMzRUJBMTFGMjg0RDlGNkM4QTIzNTM3MkY3NUM5QzA2QTEzNTk3MzM5NzhBRTVGOTY1M0YwMTU3NDFFNjQ4CisKKzI2RUI5MkY0QUU1OUQxMTQwNUE1OTk1NDQ3NUQ1NTlBQ0I4RDA5OENENEMwMjZBOTVENjc4QUZEODVBOUYyMDMxRjZEMjQyQTI4NTQ4NgorCisxMzg1Q0QyQkVENTVCNkU1NDI2MUFEM0E5NUM2QUI0NjI2RkJDNUQ2QzRGNkE2MDk5Mjk3NkQ0MDZGRUVDREI3OTIyMTFDQTEzM0M0MzMKKworMjhGOEQ0M0ZBRkFCOUE0NDg5REQxRTFFODg4NEI0QkEwQjI1ODY2MEZCOEI4QkVBMjE4REUwQTdEOUU1RENFQUU4QkExRkZBMjM2MjY4CisKKzdBRTQ2MzMwM0UxNkM2REJBRDNFMkZCREMwQzkwNEI4M0RCQTkxMzRCM0M3MkVDMUZDRjY4NTVDMDhFOTczRTAwQkE4RDM3RTg2NEVGMgorCiswQjY3NDhBNjYyNUM4NTQxMTZDM0UzMkQ1QjI0RjU4NDk2M0Q1QjQ5MkY2NjY2QTI4NEQxNkEyRjNFMzJFNUQ3NzkyRENDMUU1NjA1QjQKKworQ0RCRTRFMEQ2MkRGRTg0QjM1MUIyNEE1MDlBNURDOUQxQzIxMzJCODFDNjgyMDk2REY0RUQ3Q0U2QTNENkRDNTE3QzZGRUU4MTAzREE3CisKKzNCNUQ4NDFEMkI0QkJBQURDRDdEMTMxNkVBQzY4MDlGNzZCOTlGRTE2RUE5MjI3Mjc4MkFFMzkzMEYxQTAwNTIwNzhEOThBQTE3MzY3RQorCis3MDQxQzM4M0M3MzBFRTA4NUQ2MDg5MTY0QUFEQzQ2MzdEM0NDNkE2MUYyOTJFNTgxREIwRDM3QjdEMTIxNEE4RjEyODUyRkZCNjM2RDcKKworMkYyRkQ5RTZBQjJBRTFGOTY3RTJBNzUwQUMwQUQzNjRFNjQyMDc2NjlBMkJBRUJEMTkxRTQ5NEQxQjA4NzQ0OEY2REJEOEIyMjkzQTI3CisKK0MxMTVFMzRERUVGM0RGNzlBRTFBQjMzMjAxRTBBRDY1M0FDQTcyQ0MwNkFEMTU1NzUzMTRERTRCNzYwMDlGNzYxQjhBMUM2Nzg4QTY3MgorCisyRDIwREU0NjAyNjc3MjExN0Y0MjE3MUI1RDA5RTU0MTRBNTRFQTQ1RDc2MEREM0ZENDdGQjU0NThBNzhFNUZGQzgzQjU5QUVFNEY4QzIKKworNDEwNkUwRDc2QjcxOUY3QzEyOTVEQ0JDNzFBRDQ2REVGN0UyNDcyQkU5MjIwNDdEOEI2MzNEMzg2MTAyQkNCQTQ5NjRBOTBBNTI0N0MwCisKK0QyNENDQTI5OEQzOEEzQzUxM0QyNjBFRTQ4MjFCNTgzOTE5ODQyNTMzODVCQzYxNDI5NjU4RTMyOEQ4NkRDNjFCNUZFMDQ3NzA1QzhERQorCitDOTMxNzBGOTIzNzZCQjRDRTk0QjRDOTJCOENFNjM4RkVDMTQwODMyREZEODU4MzQzMEVFMzkxMzczNDJDQTBGNTI5NzM3QThGOUUxODQKKworMjY0QUUyQTFFMTcyMzc3RTkzMUM2QThDMDE0MUQzNkY2NDQ2MDExQTk3MTVENEI2QkJFMUREQ0E1M0UzQUM3MkE3MUY2MEVEODZFQzZDCisKK0ZEQTIyN0UwNTUzNDk5MUU3NkU5QUE0ODUyMkVBNDI2MUY0QTU2NzAyNzZDODA0OEE0QUI5NTAwNzE5RDkyRjA0MDgwRDMxOEIxNTZGRgorCitGQzIxNkJDMUJFMDBDOEUzMTYwNzUyQkY1QjAyOUJBQTg1NzgwQzUxQzRDQTE2MkM3ODQwRTc0NTA3RDQzM0NDOUQ3MUM2MkI0Q0FFMTQKKworQTNBQjRBREIyNzI5Qzc1MzhCMkVDQkVDNEU2OUExRjc3OTAzQkJDNjhDRkVEMEJFMERFRTlDNjkwRTdDRTc0QjVCQjlDMjdBNUYxMTVECisKK0IxNzAxNUMzOUE4RTYwNDM1RTAwMDU2ODc5NzQ1QTQxNTUyRjk1RjdBNTQwRDUzNUEwMkYyOTA2MUFFNUQzMERERUI4RDMwRDlGQzJCRQorCitCMDRDRDQ5REZEMjM2M0M0QzdGRTgzODRFOTBGOThCQThDMjYzODFEOUQzNDI4MDI5Q0JCOTkzM0FCNDcxQ0VGMThGM0Y4RUU1ODUzMDkKKworMjk3MzFFQjEwMDkwOEJCQzFGMDc0RjM5OUFBMzlDQ0Y1RDEyREEzOENBMzhGNDY0Qzk1ODg4N0MxNTVBNEE3N0EwMDJGOTEwOTBEREEyCisKKzAwQjgxNUFEMUUwMkMwM0Y0NDg0NDYyOEJENzAzRTJFMEQ2QUI1M0M4MTkzNzNBOTRBREZGRkE2NTc5MTYwRTY5QUQwRjFFQzEzMDkzMAorCisyMkYwQjREMkY3MTBDRkIwRjczNEIwMUY2MjVFNDA3RjlGN0UwRjE0MzEzMUMxNzEzRDc3MDE0NDY2NEVBOTg5QkUwQjlFQ0MzQjlGQjEKKworNDVDMTA0M0YwMkI0ODFEOENBQkNGMjFEQzEzNDU1M0ZDNEMxRDQzNTNFNzE4MEVBNENCMUZDRUFCRUY3NEQ2RkU1QkJFQUM3RjMwQjA4CisKKzFEODhFQjBBMDYyNjYyMkE1NTdERjZFODYwRTU0NTM3QThGRTBEMkVEMEI5NzRCOTk0NDA2QUU1MkQ0N0U5NEZCOEUyOUVGNkIwMkREOQorCis0QTM3REM3NzBEQTg1NUE1OUI3NEJBQUUxNjg1QkEzRUFFMjRGRUY1NUIwNkE2MDM2QTNENEY1MTA5RjFFRDRCNTlBQTYyMTg2MjlDMUYKKworNDU1MTQ1NDc5NjExQTJCOUZBODNBN0FCMUM4QTgwQzVCQUVERTM3RTdCRTE5NUM2OEUzNkZEMThFMjBCRUM3ODdCQjEzQjhFMUM5ODA2CisKKzc0N0Q4NUM2NEE0MjE4MTYzN0U4NkNBMjhGRjEzNUNFRDIyRTRENDUzNUNERTc0RTJBRDRDQTkzRjlBMzBFNzk0MEYyOERCNTlBQzFBNAorCisxRjhDQTEyQ0I5NjVFMEJCNUM0NUE1RjFEMEE1REJDREEyMTA0MzM3MzMzODRBNzVDQkE4RUI5M0JDRkYwNUFFRTM0NDQ1ODdGRjMxQ0YKKworNjQ5NUZGOENBQjRDRUNBMTZGRUIwQzgxRUI0ODU3MUQzMDA0MEE5MENDNDIyMDQzQjhFQTczMkE0REFGRTRFNTUyMzc0MTUzMTI0QjRFCisKK0IzRDM1QzU2RUU1QjRBMTQ2MTExQkJDNkQ5NjMwREIyQzlFMDREMjZFQkRBREI0NjEzOUMyNTkzMTlDN0M5QTc1MEZGMjk0NTEzNDY3NgorCis4N0RFNjhCQUI3QkE2REVDQTIyRkNBRjJFNUYyMDg2N0E5QzE3QUIzRTNEQ0FDMDNBOERCODk2RDJDMDI0M0U5NTY1MjUyOTg3NTUxOEMKKworQ0UwNTBBNDlERTM0RjU5RjNBMzQyMkMzQzZFNEE1N0ZCMzQzQTA0NTg4NThDNkI2NzZGOTIwODU3RUFCRDk5NDE5MjRDNTcxMEM2NzY4CisKK0M1QTAwODFGQjhGNDdFOUJDOUVDQjcwMUJGMDk3RjAzM0M0QUFDM0UxOEIwMkVGOTIyMjg2N0QyNUZEQThGRDI5MUY5MzBEMTYzRjM0NAorCis1RUUzOEI0NEZBREMwRTgzMEY5MzU2MEUxQkE1MkVCOUNFOUIzNzVFOUYwREZENjA2MjdCRkM4MzY4QkMwQjdDNEM0NDNEOEQ5MTkwN0UKKworOUZEQ0QwNjY2RUU2QTlEOTY0MjgwOTMxNDY1MkVGRDRFNTc2OUExNjRCNTBERkY4NDg2RjIwODkwM0NFNEY1MTc2Qzg2QzM2NDJEQjYwCisKK0FDM0ZBMkRFOUMxMDRFMzZCQjc2RDU2REE1OTNGQjc5NjAzNkMxN0EwNEE2NUYyQkU4QkI5QjM3MDU1RENENkY3OUUxOEFCMDBCRENCQQorCitBQUYzRkE5NUM0OUE4NEE2OUVGNEMxMUQ2MDY1OEMzNTIwNUQ5N0QzQUMzMDAzQjY1OTJFRTM2NkExNkFBMEQxRjlEMzJFOUVFQjVCODgKKworMDhBRkQ2MTIzQ0Y3NTZDNTI0RTE1QzdFNUREMEZFN0NGRUExMzVCRTFCRTg1MjAxRUZFREY2MUYwNDZDNjUyQTQ4RDQzNUEyRjYwMjRFCisKK0EzMTBFNEZEM0NCRUUwQTlDNkIxQ0QwMkIxRjNBMUM4Qzk3M0M1RjI4MUM4NjE5NDUwMUJEMDNFQjVDM0UyQTMwQzlFQkI4RTRFRkIxNgorCis2M0VFREMwOTY5QzQ4QzY3MjRBNUMxMjZFMDVCOTU3OUMwMzEwODY5REQxRUM4OEE3QkY4NTYyRUVEOTlDNTdDMTE1NDE5RTY1OTlCQTUKKworODMyMzMyNDg2N0UyQkQ2RTk3MjYzMjM4MEQyRDI3MUUzMzJDNTJFMUE4N0JCNDVDNEY2NkM5RjgzNjkzRTZBOUEyNUJDMEIxQkI3NTcwCisKKzE4RkVFMjYxRjhENDUyOUQ5M0YyMzI4OUMwQjc1Q0ZCMEJCNkE1NTU0NTcxMkM5NDU3MDdGQkMyOUNCQjcwQTRDOUMzOTc2QzFERDBGNgorCisxNzFFNTc5QTc1RkJBQjM4MjFBMkM1REU0NUQ4QzE3RUExNkZBNEJFMTA2OUQ3NTQ5RTU3RTU5MjJCRkExODI4NkExQkFBRDY0NDE2MUEKKworMDJBQjg0M0NENTYyNjAyOEMzRTZBNTJCRDNDREM3NTk5NjI3QTQ5QUQ0ODgwRUE1QUI1NjkzNjY1NkE4N0JBREI4MjhDNkM5MjAwRTI4CisKKzI3MEQ4MDQxMjY5RUQ3OEE2NTU3MTgwOTlGMDk5RTlGMTdGRTI3QTcxREYxNjFENEYxNjA2MDkwRjE5MkU1NjFBQ0E1RjMyQjgyNzg1NAorCisyNjExNjMyRjIxQ0NFQjMyMjUzMzQ0MjdEOUVBRjlBRDNEOTY5NkFCM0IwNTk2NTk4RDJEQTE5MTJFQUREMkE3RDA4NTlBQjI2RDZDRkEKKworMjI3NkI3OUM4MjYzNTNDQUEwRUEzNEY2OTBENjM5Njc2OEVGQThCRDhBNjVDQUI0MzIzMjcyMzMyNENEMDVGQzUxN0YzMTdEOEM1RTBDCisKKzgwOUZGRTc4QzM5M0Y3RThCRDg4MTQxRDFBRkFFODg1RTAyQkIwMjAzQzdENzI2MzEwRjZFRERERThCMzhDMUZGRkYzNDJENEU4MUVGQworCisxQ0M2OEQwNzJGNjhBMEZBQzE0QkY1QTkwRUI3RjA3NjA0NDc5NDg5Q0M1NzIwOTc5Njk2OUQ2MkM5MjEzNEI1OUFERjI2NEVCMUIxNTgKKworNTZBRjJCMzJDQzc2OUFDQTY3MDM1MUVBRDhEM0U1OTExN0U2MTNBNEZENTg0NUMzOEFBMEFEMzc1MTk2RjI2Mjg5MjBGMjk5Qjk0RUMyCisKKzM2Mzg0N0NBNDcwN0E5NTA2QzhERTRFQTlCMEMzOERBODg1NjdGQ0VENDBCQzk0RTc0NjVDMzlEM0Y2MjdFRjcwNDI5NTQ4QzM4QzJFMQorCitGMDA3MDA1REZFN0JBQTc3MDFCMTgzQTJDRkRFQjM2Q0Y4NDA5MTI0MkEzQ0REOEM1OTQ3NTEzQkNGN0ZBQTQ2MkE5MkYxRTg0QjMxOTYKKworRTNDRkIwMTkzMjA0ODVGRUQ3REIyMzFBQ0JDNTZDMEVFRkNGMzQ0NTI1RjBERTE1MEFBODkzM0E0RDFBRUZDNEMyNjk5QzRCMUU1RkJDCisKKzE1QUEzQTg5NDAyM0ZEM0YwQzc1RDc5N0U3MTBGQzFCNDFDNDhCQUM2RjVBQTBCQjJDQjE3OEI3MDVDMTAzQjY4RjdFODQzNkM0REQwMgorCitGMDU0QzJCNEI2QzM4NzM2RDk5QzVCRDhDNTdBRkFFNjc2RkM4QjRGMDc4REI4M0VFNkZFQTBDOTdCRDQzNDA2MUJGNTcyRjY2MTVCMzcKKworNDE5RUY1MjUwRTMyQzRGMEY0OEVFNzc5RTUwMEU3RTNDNEQyQUZGNjk5QTQwNzc0NzNBMjlDRThDMkEyRkI5MjY0NjEwNzU3NkY0MkU0CisKKzhERTEyMzNBQkE0NzIwNTY0REU2ODk5MDQyNUQ2QjQ5OTBGRDE5ODI0MzI3NzQ1N0E0MjY5MzQ1N0NDN0FBRkIzNTgxODRGNkFBQTRGQQorCisxRkVCQzkzQzU3MzM4MTJBMUIzMDhEQTUwOUY0NzM3NjBEMUYyRTg0NkY4RUIyRDUyRkQ1NUNCMjIwRjRDMTk4MjA0QkQyMUVBMkRGMEIKKworMzE0MzQ2MTZGODZENTI5REU1Q0JDQUM1M0ZEQjdFRUE2OTcyNjkxRTlCODk4MTUyMTA4N0MyNUYxNTc0NTc2QkY3OTk1NjlFMzY5OUVCCisKKzc0NjE4RERGQ0Q1RjAxRTZCQUIwRkY1MTNFQzdFMkIzMDAzMDA2RDk2RTQwOTVFRjUwMDkwNDRBNUYxQzNCMDA2QUVCNEQxNUVDREU1RAorCis1M0MxQzc2RDM1RDg3QUYyMDFCQjQ3Qzk0REFCMUJDQzE4MkM0RjQ4NzQ3QUE3RTFFRDk5MUM0QjYyRDlGOUQwOEQ0MjgzRUVENUQyODgKKworN0VFMjFCN0RFMjQ5RjczMTUwOUZCNkI5MDg5NTQzRjQ3OTFDNDFGM0JDMEVFRkExOTc5MjNEQTg2MzA4REVDOEQ2MzJCRTAyMjEyOTRDCisKK0E0QUVEMkY2MUMyOTdEMTY3MDQ1RTVFNUEzMDEyRTIyM0Q2QzM0ODg5OTcxMkM1NTA2MzgzNTFGMTJGRUIzRDY3MzY4OTU5RUFBOEIwMAorCis5MDk5NkUzOUVEREM1QjNCMTY4NEUyREY0REZDREJDODlBNkE2RjlCMEFGQ0NCMjExNTIxNzMxNkE0ODgxMkMxNjhCMjQzNzM0QjU3QjkKKworQ0JEN0YwNUExQ0NFOUUzMjVGMEZCREE3OTFFQUU3RTY2NkQxRkQ3RjJENUYwODUxNjVEMkJCMTAzODc1MTNBQ0Y5QTkwMEY4NDkzNENFCisKKzkzQTY2Q0QxQkVEM0Y5OTA3MTRBRDkzOEJBODU3MkE3MUU1QjI1NTdDMjk0QzFEMUEyMEYyN0U1MUIzNTVGQjM3MTEyMzQ1REMzMzcwNworCis3M0ZFNzUwRDVDMjMzMDc4MUUwQTA1NjM2REYwRjI4MzA0NkI5NzNEMUIxMjREOTJBMjFBM0UwQUNFQTg3OTg0OTcwMEQ1OTAxMDkzRjIKKworN0IzRjkwNDYwRDgyMTk0Q0RCMDFBMkNGMzhGQUVGOTY0Mzc0RUIxMUQwRTE1MEEyMjk3RDhDQTRBNUE1QzU1QkVBOTNCMDBFQ0M5MTlFCisKKzcyNDZDMjg5NDA0Q0FEMzQ2NkVGNkJGMjgxMENGMUVGNzQwRDI4NUQzMzAyQjVCMzM2M0E2MDc0OTE4NzFGQ0QxODFFOENFRDVDMEMzMAorCisxOUZBMzNGMTY1Q0Q5NjMwRDEzMDkxN0MyQTI0NkYyRDUwMDM2NTdEQkIyRkE4QTdFM0ZBODQwNDgyQ0YyMUU1NzRBQjc0QjlFQjUwMjcKKworMzg3REE0MEZCM0VCQkExODk0Mjk3Q0QzNTZFMjBBQ0Y3RDk1NkEzRTE0MjI0OEE1ODk5RkU5NDBBMjVCRDVDODEyQzBFOERDOTIzRUZFCisKKzI3RTQ5NjQ0OTM4RTNCRDk5QTA4NkFENjk3RjBBQzc1ODM5MEIzNjRCNTJDMDQ5QkIxQjMyMzc2RjNBRUZDMTVDQjREQjMzM0MxNDhCRQorCis5Q0E1QzE4REIzOEI5RUIxRjM5RjA3QzNDMkVBRTJBRkIwMjM4RjY4NzU4M0VEN0ZFMDRGNTU2MzI1NDFBQzU3MkUwQkI3Qzc2NTlBQTMKKworOTk5RDhDQTEyRDYyNjdGREIwRjFDRDcyMEMxNzRDQzI4RUUzN0M3OENEODAzQjg3NkI4MTY4MjA1RjM2Njg3QzEyQzBBMkQzNUQxREU0CisKK0I4NkY0RTg2NUE3NDFFODJFRUE5QzhFNDM4M0FFQzU5OUQxREI4NUM2QkYzODgzQzMyMThCQkMwQUI2NDNDRDUxQjhENTFBMzQ0OTJGMAorCitDQjRDMUJBNDc4MTkyOUMyNzg0QzExRjg0REU2OTlCMEM4NEMzNUE1MDRDMzVFNjcyRTk0MUYxRDZCQTU0OTYwRjZDNTE5RjExMDI4REQKKworQ0YwRTA5OTFFMThBNzdGNzcyQzQzQ0U5NUJERUREQTlDOEQ4NTYzM0VBNjBBNzM1OEUwNjQ1RDRCNjRGNzUxQjExQUU4QUUyN0VDQjE3CisKK0NCMzg1REUyNTlCQTFGRDc4RUE4QTU1REJGRUNDMjY3MERBM0MwMTQwNDc5QjYxQUNEOTlBNTlBREM1MDg0OUM2QUE3ODdDN0E5Qjk3NQorCitEODRFMkEzMDUyOUFCOEZBRTA5OTVERDY2QkJCNUM2MDUzRTNCOTZDNTY3MTU2QTQ2OTZCMTczNkMyRjZFMTgzNEI4QjhFRTQyQ0RCOTAKKworMzE1NjkyRDZCRTI5OUQ3MTRDNkU0M0NFMTNERTQyODJCMjYxQzUxODhFRDZDNkQ4NzVCOEQzMDhEODQ0MTUyQkVCMTVBM0IxNUE4QjZBCisKKzkyNERDRjcyODVGQjg1ODk3MzY3MUI5NzJBRUVFNjc3NEE1NzUyNkYyMUZDN0VFRDgwNTY5M0EwMDdCMkI0MzY5NEQ1RDMwQzlEQTYwNAorCitCM0ZBNjI3ODExNEREOTg3NDQ2OThEODg1RkY3MTQ3NDNCQkU3RjgxRjJGQkFCRTQ1NEJGRkQ3NENCNjAxQUUxMDZBQUU2MUUwOTk0ODYKKworMTc1NEU0Q0YzMTJBMUREQzdCRDBGODVEODU0RDE1RkRCQkYyOTYzMTdBQkIwRDBCMjgyNENFQ0UzNjJFMjEzN0EyRjU3OTIyNzlFRjA1CisKK0QwRkE2QjdEREQ0RkVGNjlGRkY5N0FEMDdGQTk1RjNDQjM5M0M0QjBEQjIzMTE1OTZBQjYzOTc0QjZCNzYxQ0M5ODQwNzczMUFGRjJERQorCisxQTUyMjc1MzMxNUVEQzA3RjcyQ0M3M0JGN0I1NUQ3NjlFMDI0QTA5NzEwRjE0MUEyMUJGOTRFOUI3MUM4ODEyQ0REOEM3RjdDM0FDNjAKKworNjE4RUNDRTRBQzgxRjdEODZCNzVFMTI2NzM2QTkwNDI1NkY1NTU4RUNFNDFBNDcxRThGNzdCNUZCRDFGRTJGRjRDRjBGRTU2ODYxMjIzCisKKzI0QzFEMTNDQUYxNTc2MzA2QURDQUMxOTI3Njg2MTM5ODgyNjA5RkNFMzM2NzE3MUZCRDBGMDE3RENFREZDOTA5QjQwMzk2NDNDM0ZBRQorCitGNTk0NkVBMzEzMTI0NjBCQUE0NThGNUFDM0EzRTU3RTUyNDdBQTM5MEVDQTRGMjlFQTMyMzI0RjA2QUEzQzM3NkNCNUM2ODBERDE2RjMKKworODQzNDU2NkRDNTRFN0Q0QzZENjM5MDEyNEJCNjlFRjZEOUFCMjY1RDFFRDJDNjgzMzU4NzBCMDlERjU3QzEzN0U2MDNBMEY4RDI2RTc3CisKK0E0QjE4QjdFNzIyNUIwQTkyQUY5MkM0RjIyRDQzQUUwNTNFRUNBRUIzRjg5ODFBOEVEMTNENTA0RTY0NjdEMjY2QkY3MjQ0QzBBMUEzMAorCitBNTk3MDBDMUVCOUUxODEzMTI2M0FGNTFBOTQ2MEMxQjc1MzMxNkExQkM1ODdGQUZFM0I1QTdFQzZFODY2MjZENUZCRTZCQTMxMTNGQUQKKworRTY3NjMxQjgzMzAxNDI0Q0EyN0FGQzYxNjQ0MTRGODI2MkUzRkUyODI3MEY4QURBOTZBRjAyMzJGRkFGRTY0RDM3RjUxMDc0MUVBQjRDCisKKzExNkUwOTc4MEEyQzY0QUI4MkM2NTVCMUVBMjIxRUVGMjU3QzY2NzkzOEUzNEE0Rjk1NkI3REQ5NTFEMTBEMjM0NEQyMjhERjJCNTlDQgorCitFOUFCNzI4MjJBQ0UyNzA3ODlGOTcyNDI2RDU2QTAzNjg2RUFERTI4NDMxQzA3QjNCRDczRjZCRTIyRkRGNzY4OEUzQjc3MTI4Q0Y3NEYKKworREU5ODczNEMzMzkwRURCNzg3NDBGMjQ0NTJBQkM1NDVBRDA4MDU3Q0VGMTMyMzMzOEMwQ0YzRjAyMTBBOUQ1MENGN0Q0NTkxRDIyREM0CisKKzc2RTQyOUI0NjJCNzZFOTY1NTgzMTQ2Njg0QjBFMkE4QzZENDBBQzdGNDJENTk1NDc4Qzk0QzAxRjlBRkM4QTFBREJFMkQ0QjEzRTAyRAorCitENTJBMTk4ODZBMzk3OENDRjNDOUM5RTM5MUZENjYwMzlDNTYyMjgzOUNDNjAxMjA0MDg4MzlFNTU1ODEzNkM1N0U0QkVBMjc2MUYzOEEKKworNkQwMEY0OTUxMjY3Mzc3RjM2OUI3NzgyQzkyRDdCRjAwQzZGODEyOTYyRjg2QkJEQUE0M0RBN0RGNDY4MEVFODUyRjRFRjlEODJCQjM0CisKKzVCQzFGOEY3NkE5QjdDMDk4MjAxMDhCRkUwNTRDODBBQjU2Qjg4QjQzODQ4OUQwQ0MwOTcyMDgxMjU1QzlFRkFDREFBMDhCQzgxRTBCNworCitFMDRDMjAxQTEyMTJENTk3NjI4QkI4Mjg5NEVBNzExRDczOTE2MUU1MTM5OTRBNjdDMEM2MzU5NzExNzczNkNGMUE5MDQ4RDI0NEUwOUQKKworNDgwNEMxMDQ4M0QwNDc0MzNGMEE2OTI1OURDRjk5OTU1OEFGRkI2NzM5RDM3MjIyMUU0OTBFQThCMTA2RDBBRkM3OEVBRDlCRDUwRTUyCisKK0ZDREFDQTRDMEYzRUQxMzY1MEI3M0VDNEY4RDBDNkM0QjBCRTI5OUI0QUIyNTNERDRBQkNEMjhBOTZGNzYyQ0U0NTc4N0ZFRkE4OUQ3RAorCitGNTY3NUQwREUwOTJGQTcwOTcxOTg1MzhGMDMxQTc1QkZBMkU5MUE2NEQxMjA2QUI1OUM1RkRCQzI0QzgwRkE1NENEMTY4RTE5NTQxRUYKKworNzk3MzZGQzZEMDA4OTZENzVDNjRFNzlEOTNDNjY1OEEwMDJBOTFCNUJBQzcxNTgzNTE4QzYwNDk3MzY1MjIyMENGMUNCNjI2REFEODUzCisKKzhDMTY2NDVDNjk5RjU3ODVBODYyNkJGMUE2MkZFQUI1N0NCMjYzODgxQjEwMjg5MUI1RDg4NkIwOUY2NzhBRTgwMUNCRkZBQ0EyOTA2NworCitDMTEyNkJCMDEzNkFDRERFODFEMDdGMkY5MTk5RkU0MzlEMzU1M0E4MTUyRTlFMkMzMUVCQTJFMDc1NEJCQkE3MkRDRjUyNUE4NUIwOEYKKworRkM1MkNBQjcxMzVFMkEzQzg0OURGQkNBODZGQTBDMjIxN0I5Q0ZGNzU1NTQyRkI0QzE0NUE1NjE2OTZEMzU2MUI1QzUzRjU3MEY2MTdGCisKKzYwQ0JDMzFBMUVFMEY1NzAwOTlDNEZDMkM0NzAzRTFCMkFFODZDNzJBM0VGOEExMzhFRTlDQ0FDMjgxNDUzM0RBMjBFNEFCNUQxNzBEOQorCitCQjJBMkE0RkUxQzE0QTk1RTE4REJGM0VGQjA0MDBBODM1RUMxRjUwMDA0Q0JEQThGRkU3MzM0NzAyN0I5MTUxQzBFMDAxMTFDM0RCM0IKKworMTU0NDdEMDAwQ0IwRTZGRDBGRTk4NUFENzBBRTUyNDNFQzhEQ0NFMUU1RTcwMDE4MDg3QTM2QTcyNURFMUE2QjZFQTAyQTlDQzMyM0NBCisKKzk0M0JDRkM1NDZCNUZGNDNEM0VDMzE1ODE3REQ2NTkzQjZBQzdDNTIwMzVFMDY2Mjk1MDlFQkU3Q0Y5QjVGOUIyNEUyOTFDMDY5NTJDOAorCitDQzhBRjlBNUZFQkRGOEQxNkIyMkQ3QkI1MThFMTE5MUExRTBEQkE2ODA2NkYxQ0UxNTlDNUU3NjA5RUMzQUM3RjRBMDUyRUJFNUUwMjcKKworMDcxMjRDREY4NDE4REI5QzAyNjU2MzQwMjc2NEI0NEIwRThBRjMxRjJCRDYwREE2MEU0MkMwQjMyOUVFMzJDMDM0NEQ0MDlFMTU1RkQ5CisKKzNBNkYyOTk1Rjk2NURGNjg1NTIyMkFCMDk5NkIxODVERUM0NzkwNjQyQkExMEQzQjk3QjEwMjhEOUFFNjk0M0I3REU1RjJDN0E5RTE1QQorCitENjcwRkQzNTBDQjdBNjMzMTZERjUwOTUwNzczQUZCQkY3RjdCRkM4QkM5MTBFRjNBOTU1NzA4ODMwQzEzQzkzMUU4NUNGN0QxNjVEQUIKKworN0E5Mjc4MTA5NjMzMDdGQ0MyMjU0QUMyQ0M5Q0U1QjgzMjkzQUZERkI5QTVERDAwODAwQUM2OEI0MzFDMDhCMkU5MkJCMkJGQjZGRjU1CisKKzZENzA1MTJDQTA5OUJGODQwQ0VFNzBDRjE2MzEzMUJBRkRDMkQzNkY5MDg5RTA5MERDNjYwQTk0RjE3MEMwRUQ2RjVCQjZFRTJBRDc2OQorCitCRTk1MUI0MERDMUU0NjE4MEIyRTU1NzI4OUM5RjEzQ0JEOUQzMzFGMjA4NDYyQTIwQzI2OTYyOUFGN0UxODFCOTc3NjMzNUNEMzRBOUUKKworQUI0QjFEODE5Njg5OUJCQkU5NDZGRDU2QzgxODBDNDJDMTc4NTM2RTcyQTEzMUE0RDA4N0FDRDM4Qjk2NjJDRjNFMEJDMkMwNEU5Mzg0CisKKzgyNjNGOEQ2NEVEQzZCM0M1MTFDMzBFRjRBNzgyREEyN0U1MzBGOTZBQTBFMUNBNEQyOEVBMTA2MkZGNDY0MzA2NURERjk1OEREOTEyNAorCitCRDk3NUQyN0Q2QkM3OUVBM0ExOTYzQjk5MzBCNURDMDI5N0FCOUUzRjAyNzQ1QkNGRUJGODNCQjlEQUI0NkUyRDM0MjNERUZCRjA1MjcKKworNzAxM0Q2RkNEMDhFQUE1NDA3Q0NFRTBGOTFCOEQ2QjREQzg5RTNBNDY3NzU5QjgxQzgxMzc5OTUyRTM2MjFENTdFODZCNzk2MDVFQzEwCisKKzU5QTlENDZCQjMwMUVCQkVDQ0NCNjE1REY5MUQ3QTBBOTJCMTdFQzRDODcxNkM0RjFFNjdERTdEMDY5RjdDQTFFNDU2NkY2RDlEQjk2QQorCitFM0JBQUJGQ0I2RTJERjYwMDUxODJCN0JCQkE3Rjk2Rjk5MzE1Q0E3NkUxMjQ5N0JCNzZCMkM5NEI4NTU0M0Y3RjE4MTlEM0Y1M0YyQ0QKKworQjZEQUJDQzVDOEU3QjgwOTk1RENEM0QwNEE1RjQ3RUYzMEQ3MjVFQjYxNThBN0EzMkVDMTdENDk3MEExMTU5NDU1QjIzMDc1Nzc0REJBCisKKzk1Q0YwREY4RjE1RkNCNEFBREU4MEM4RDBDOTI3NjI1OTc0NjFBN0IwNDM4NEFDMjU1NjQ4NkIzQTUyMUI0NDcxODkxMTA4M0IwNjIyNAorCiszQkQxRDU0QTRDOENBQjQzRDIwN0ZBNDY2MUFBQzdDRjRBMEE0MjFDMDExMTFBMDJBRUFBM0E5OEVBRjM5QjE1Mjk4RUI3NUUxNkMzRjYKKworN0JFMDg5NDhGMDE2QzkyMkVGNzQ4OUIzMzY5ODE3NzgwQzdGQkExNzEyQjhGMTI2MEVGRTAyRjBBN0YxMTJERDBFODVDNjIwMjZDRjYzCisKK0MzMDYzM0YxQzU1ODQzQUI3RUJDQzM4RjM4RTI1MTdFMzVEMjU3RDcyMjBCRkY1QkUyQzZDQ0UzNEJCNzNFQzIyNUNBRDE4MkU3MDJCMworCitDMDM3NDBENTU4REZDQkM1RkNFRDNEQjEwQUVDN0FGMUU2QUU4NEI1NEQ1RDRDQTc5RjU2REQ2OTBEQUZDNUFFN0Y5MzgzRUMyMjMyRDMKKworNEJCRDJCMTI1Q0I3OEUyQjIwMTI3MTJCM0M1MTg0OTg2NzY2NUM5OENBMjVGM0U2QjlFMDJFQzg5QjVCMzc2RDc5MDVGNzMwMkNENkUyCisKKzhDMzM0NzBDMEIzNDMxNjBCRjBGMUIzQTlDQTBBNDdCNjA2NUI2NTM3QUZFQkMxQ0JDRUY3OTUwODNDQkM5OENFQUY5QTYwRDlDRUY4RQorCitFNkY0ODdDRUNEODg0ODRCQjRGMTQ5ODA3Q0M0Qjg5NkY1MTFDMkM1MzBFRjI5MkFBNTBBOUQ1RTU1QzkzNTIwOTMwMEFFNjNBMTVBN0QKKworN0ZERDExNzlCMkY1NzUyNUI3MEY2RUY0MDAzNkJENjZCNkMyNkE5OTgwNzdENUJCNTBCQkMxMjJCODA2RDQ1QUMyNDhCNTJDQUE2RTRGCisKK0I5RTAzOUUzMEJFQjc4Q0RBRERFODEwNTM0NzUxRjdBMzIzNTZBNTEwNjVDREU1NDI0NzUwQ0VBNTc5RDAzNEE2QzZDQkNCQTJCMjYzOAorCis4OUI3Njc4NzlEQUFBOTkyM0YwRkE3NjlBREI0NzQzNzNDRjhFQUVFN0NCNDY1Rjg1OURGRTFFNzAwODVGNUZDOTQ2QzMxMzU0RjFFMjQKKworNEYzMUM3RTlCNUY3OTAzRDkyRDczODg2QUNBRTc2NjZGMkNERDFDRTNBQUY2NzA3OURDNEU5MTkxMTkyMzBEQTZCMzY5QUFEREYyNDBDCisKK0U5MERCQ0Q4QUIzOTcyQ0UwOUU1NzEwQjk1OTYzQzZBNjJFRTU2RTA5MTY0RUZBNzdBQ0E3RTBFQzVGQ0VGNEQzN0EyREJDNTRBOTc4MworCitEQjlFMjEwNDU4NjBENTkzMjE3NDM1MjJDN0JERDE0RjA3M0RENTVCNjEzRjdGMTUwNjVFRjk3NDU2RDFDOTMwRTZCOEZCNUQ5RUM0NEIKKworMTExMEFDMDc1NDQzNDU5RUYxMEM0OEVGOEU0RkFDNDQ5M0JFOTQ5Qjc1RUQwRUJCQ0NCMDNFMDkxMTQ0QzE4RjFFQTAyMzlGOTBGRDcxCisKK0UyNEIyQzA2QUYxM0JCRERDRDU4Q0VFNEM1QTI5MjZDODczMDk5RDE4NzIxOUQwNjdGRTcyN0I2MUMxODU5NzE2QzNERjA3Q0YxNENFNQorCis3RDZBNzkyNUUzMjk4NDBENjhGMEFENjFEQjNGRUY5MUIyMERBNDFFQjZGMjgzNTJBOUM0OUY3QTE0MUM2RjQzMDU2QTZDRkMyNTRFNEEKKworNDdBM0Y5NjdBRjk3MTRGNTI0NTlDNTAzOUNFMTA1Nzk1NjEyMTU1NTc2QkUwODA3MDFBNzdGMDAyNkZEREIyREE1QjdGODJEMUNBQzMyCisKK0M0RUY2MDI2ODg3MDU2NkE2QzNDQ0IyRkNDRjBFMTFBQjYwRkQ2NDREQUNBNjk2ODk1RkZBMkNGNzIyNzBDMTkwRjQ4MkVBRTU3NTNCNQorCitCRkNEMUFENkUyRThCMTA1MzVEQTAxMjk1NEQwODVDOUExNERFOTk4OTg1RTA4RjE3NDQ2RDgxNTlERjYxRTBDREE2NDM1MTQ3RDRCNkQKKworOEEyRDJCMTE1RjQ5RDJFMTBBRERENEVCNjZDQTQyMTYxQTVFOTAwNUE3MzZEOTU0MjQ0QUIzRDY1MjA3NDFDRjFFM0FDNjM5MzBGNDBCCisKKzMwNDhGNzgwMUUxOEFGRTU1N0RGQkY1MEM2RTJDMTBENEYyODVGMDVCMkMyQzU3NEQzMjdDNDNBOTE1MDFFNkFDQTQ1MDQ4QzBEQkNDRQorCitFOTY2QzI4QURFNzRFNDYxQkZGMUNGNTg0RjQwNkUzMkJBNDczRTA3NDJCNDMyOUE3NjY2M0Q5MkI2ODBFODBBNEJBRUNBQ0NBODM3QTEKKworOEM5OEQ4OEYxMjAzOUQ4MEU2QThCN0IwQjIwNkJGRjYyQjA3M0FCNTk2MUJFRTQ1REFBREM1NDkzMTkzNzgwREE4MTc5MkJGNEU3NkIwCisKK0E1NTQyRTVDOTczOTE5RDBFRTFEQTFERTVBNUZBMjY5ODYyQkIwRDQ2OTQ2NTI4NDlCNjEyNjgxQ0RDQzc1MDVDQUM5NUI4RkQ3MkUyNgorCis1MUI3RTRDOTU1NjA4MDYwRkQxQjVFNEY4QUI4QUJDQTY4MDlGRkUxNTEyMDNBNUNBOTA1ODQ5RjYyOUJEREQxNDg5OUE5QkJFM0IxNzUKKworOEFGREJGQkQ4MkVDQTVCMzVGMkMyQjM1RDVDMjY3RTgyRTAwOUNEREM2QkUzNUU5OUU3OTE4QTY5RjI4RDFCNzczOEI5MzkxNkZCN0JFCisKK0NBQ0I4MjcyN0UyNjM0NTNGNDFEMUNBRTVGMzhCNkMzNzA5RjAwREU0OTU3MzEzNTU1M0RFRjc2OTlGQTZGOTY0MTZBRDU2N0Q5NzFCMworCisxODkzNzE0QTA5QjVCMzU2RDQ0NzgzMzkzRkExREY3RUM2RkMzM0ZFNTAxODQ1NEVCQkQ1QjJBQ0Y2QUE2MDgwNTY1RkNFNjc0RjNEQTEKKworREJENzdEQUJGMERDNkIzNEUxOTQ5QkEyQzAxMEM1NDgxMDA5REE0MzM3RjczODNEMjY5REVENzk3MTFBMDhFNzg3MjI4RTA5RjBDM0RFCisKKzk4QzBFRjgyNzE1QzRGQUJGQkM3NjA3NzVCRkQxQ0VDN0NDQzgxNjMzMzEzNDFBN0QwODIwOUQzRURFNDVENzhBQjJBMDVENTcyNkUyQgorCitENjY5MDQzRTAyQUYyNzQzODVFMTYxM0Y2QTQyRTdFOUI5NEI3NjYyQTU5MDRDMjY2OUM4MjcyNzJBQkM5NkFCRTM3NkRGNzA5NEVEMkMKKworMjFFQzUwMUNDMzBFNjMxQjJDRDNCMEY0QkFCOEMzQ0YyMDI1MTMwQTk5QjkzQzcwNERGMkYwMTVBNDY4NzRCNUJDQzhFNjU2MTlGQTUwCisKKzBEMUFFMkJDQkQ0QzI3RjkyNDQ3Q0Q5RTQyM0VDNUI2N0UzNURGMDRDRTMwQUNENjYyOEExM0ZBMjBDMTRCNTE4REQwMzAxRDNCRUFEQQorCiswQTlDMTRCOERDQjI3ODE3MEM5N0UxMDdCNEJBREJBMUIyNUIxN0YyNjhGOEI1MkI4OTU3NTYyNzQ3OEUyOEVGNTlGMkQ4NTZDOENBQTYKKworMDM3NkM1M0U5NUJBODU0RkMwNTlFQTkzODU3NTI3NkNFNDcxNkI3QTE5Q0Q5ODA5OThBQUE3OUVDOEVENTdENTZFRTJFQTgwRDJBQjdDCisKKzlCMTgxMDBEQTJBN0VGQTcwRUQ0MEEzMkFCMjkyMTI5RDg5N0FEQ0QxQ0VCRjZCMzBCQjc2OEFDQUJBQ0M0ODBBRDZCRjFFNzAxRTMzMgorCitCMUE5NzQ2Q0VEREQxMjc0NDFDNjk1QzNBNDI0QTZERDg0QkY2ODRBOTBCMDI3QjY4RUZCREVDOThBQTVCOUNEOTdGQUZBQUFGQzE5NUQKKworREM1NDY4ODc2QjI4RjU2RTJGM0FBQjc0RDk3MzY2NDQxQjI4Q0JBQzBEMzI4RUI4RkQ5OERGMDZFOTk4MEUyMUNBN0Y2MjM0NUYwMEQzCisKKzhDQTgyQTFDQkZFOTU0Q0Y4QzVDNzcwMTdBNUU1Q0I2RUNFRDkwMjIyQjVCMTVENUQ3MzEwQjNFMjRBOThBNjQ2NDRFRUFFMEIwQ0IyMgorCitCREM3RkNDOTgzQ0E5NDEwNEMzQUZBRTcxQTc1QTM1MTBDRUQxQzIxMDM3OUUyODlDNzIxQkQ0RUZGODI2NzM1NjUyNzU4MjZBNDFFQTUKKworMzAwOEJENkMxODgyRTlDODIzNDZEQTkxRThEREJGMDkyRTc4QkZDMDA5QTBCQ0IwMDk3RTk3Nzg4MUJGM0M4MUJCNkRFMjc4NEFGRUY5CisKK0JCMEZFNTJDQTkxQ0IxRUJCRjAxMDI0QjFFRjk0MTE0NDIyOUIwMTI3NTk5Mjg0RkJGNkVBNzgwOUJGMzZGQUJBQ0ZBQkUzRkJBNDFBNgorCitDQ0RFRUExRkY2NjU2ODA1Q0Q5NDU0MzlFMzZGNzcxREJGNTZGODVBQzZDOTc1OUZENzc0MUZDQTM4Q0MzNjI4MTE5NjI4ODI0MjhBOUEKKworMjlGOUU3ODgzMTJCNjc1MUU0Q0M2QUYxNUNCNTE3RThGMTdBMzIwQkE0MzM1RDRDODY5Qzc2RkNBRTdCREU1OTMzNEM3MkI1NzhCMDU1CisKK0FGNTg1MEQxOTE5OUYyNjM4OEI0NkQ5RTlGMjk0MERBQzNEOUE0M0Y0NUM1Rjc2NDNDQkEyRDM5MTY3MjUwOTEwMkE4ODNBQURCOTk4RAorCisxQ0JDQjg4OEQ1QkI3MUQ3NDA1ODJGN0IyQkUxRURFN0Q2RUY0QTkxNERERjUzNjhENTQ3REFEQTJCRTU1OTcxNjE5QUZFOEQzQTY3MjgKKworOEM4RjBBN0ZFOUVDNDRFNEUwMTYwOTFGN0IxNEY3OUU4MUE0Q0Q4QzI1OTlGNkFFNzc2MTM2RDM4MjIyQUYxRjYxRTE4QkQ4QkQ2RDZECisKKzIzMTkxRTJEM0FBNjMyMTdDOTEzQzhENjJBMDk0MDUxNkU3MDk5NkEzMDQ3MzYyMUI4QTI1NzQ2NUQxRTZCMjk2NkJBRDhCNDQ3RkE4RAorCis4RTJFQzJCRTE1Q0ZBQzk2MzdBNUJFMTk4RDJFRkU2RDhDMjA0Q0RERjg1Mzk5Qjk4Q0E2OTExQzlDOEVENUYyNDhGMDZDQzhFOUMyN0IKKworNkVCQ0NDOEIyRTU0QzREMTVDRTQ2QTZCRjM4MTJDQkRENjdGRkUyQzgzMzcwRUU3OTJGQjE3QzYzQzQyMjJGQjVFQTVDMzYzQzI5NkM0CisKK0Y5RDE3NEU2MkEzRThCNkI3RkUzNUJGNDY2M0UzRDgzRDkyMTQ4NjkwOTQ0MUYxRkRDOTU5OTBDOTE4OTgzNzA5NDQ1NUJGQUQ5ODdEOQorCisyMjBFNDRDQkZGMkU0OTY4RTNEN0QxRDc3QUZDRTY3OTY2QjhFOUZEMTFFMTNBNjZERTYxQzVGMjNERDAwQzZDNDhBRTBBRDdERTRERUEKKworMEJCQjJDNjA0RTQ0M0ZCODg0NDhGQjZGQzYxRDhBRUVCRDUyQzQ5MzdGNUQyOEY2MTFBNzU4QzExMUQxRDU3Q0JDMjYyREJEMEJDOERGCisKK0ExMUUyOTlDMjgyNDBFREE2NDNDQzA2QTEwMUZDMEU0NUEzNTE4RTM0RjhCRUJDNDk2NERENUE4NDY3OUYxRTRDMEEyOTI4NEZEMkM5QQorCis4N0U3REMwRDFGM0RCRjY4RUIxNzdDOUMxQ0Q2NzgxQTIzMzcyRDNGQkU2NTVDQzRERkVBQzUxMzRERUVEQ0M2RjMzMDE3Njc2NUQ3OTEKKworRDQ5NUFDRUU4Q0I2RkMxNUVEOTEzQTI4NzA2QjUzOEQ5Rjk3RTk4NkJDNjI4REVFQjFFRkM4MjA5MzZFNDMxQkQ1RDA5MTRDMUUwOEFGCisKK0QxNzk1NzE2MDAzNTA0ODhFNDM0MkY3Mjc3Rjc4OUE3QkRCOTc0QTNEMDZERDlBQ0Y5QkM2NDVGRDExQzI1M0E5Mjc3M0Y5NUNERjRBRgorCis5MTFBN0REODEwQTcxNzYxN0NFRjQyMkY3RTIwNzlDQTM1RDc5OTZENUQ1MkE1MEYyMjBFOUIyNkE2NUEwQTE3QjdEQTRBODY0RkNDMkMKKworRERGNUNDMjZGRTFFNTUxQTIwMkY2MjU5NDFCQUE4MDkzQTQwRTQyRkVGRkIxN0QwMjYyMjc3QUI5QTlFNDE3MjNBQkM3MzgxN0ZBQjczCisKK0E3QjU5RTMwNkMxNDhFMkU5ODY1RENBMERFMEEwM0U0NkVBNjkzOEI1M0UwMzA2OTRGMDJGMUNFMEY4QUZGN0E4OUZBRTMzQzhDN0VBNAorCis3MkFDM0JBODY4MEFDMDZFNjFDNjAwMjZGMUM1ODlFODM4MUIzQTU0QTg2MTU1MTU2RDIwMzMyRkYyRTU1NzM3NTVGMEI5ODA5NjdCQjYKKworQkU4NkE4NThCNkVDNDg2ODYyQkE3MDJBRDExNzE4NTA4MUIyMkEwMzU5QzgxMUNFRkNFOTcxOEFDMkMzNTEyQTY1QUM2MzI4MUJDMDE4CisKKzg4ODQ5RDk5NkQ4RTFBQTEyMDAyNzMyQ0RFRjBCOENGMzkxMUY3MUQ5MDVENTJEOUJFRUNFQ0ZBNEEyREY4MjkwQzhBNDcwMjFBNkZBMQorCisxNDZGRjM4RTY0MjRFNTg4QjRCNEUxMDAzMUY2MEM1MTJERjA4MkYwOUI1MzlDMThEMDhGMThBNDIzOUZBOUI2NDg0OENFMzE4QjBGOUMKKworQjlGNkEyOEQ2QkYxRTc4OEMxNkQ2QTdGQjkyMDE2NDIyMDYwNDRGNDcwRDJBRUMzNURFODU2MkMxN0REN0Y1MjJBQjczM0U3OTZCODcwCisKKzRFMDU0ODVGODY1MzU1RTU1RUVFQ0Y2MEU0QTJCNEU0Q0ZBOEU5ODIyNjg1Qzg3QTYwNTYyQUMxNDU5RTI0NkM3REExN0YxNzRFOUUwNworCisyMTAxOTc1MTQ0RUU0RjI0Q0RFNkVEOTI1NEZCOEFERUI0MTVGODk1RDNBNzFDNjg5NzI2MjhCMzlBMDU4ODAzREI4NUYwN0JDNDkyQTQKKworNzIyODNERDNEMjdEQjIzNTlGODgxRTEwMzgzMjRCMzhGRjdDNEVFRjkxRUYxQTAwQjc0MUI1MTE1ODE5OTczNjQ3Mzk4NEQyMDgwMDk5CisKK0NFNzM3QjAzMzI1RjM5RDc3RUUyRDVFN0JCRjEzMDEyMDdGRUI5NjNFREQ4OEI1MkVBRTQ5MjBBMENCNzU4RkNEQ0FEMDQxMTIwMEE0NgorCis0OEU2NTdDMjZBNDFFNzU3N0Q3RTg3NkE2QTlERTE2QjI4NzlBNkNDNkRCRjg5NDBCQTRDRjg2MTU3OTU4NkY3QUIyMzgxRjFEMjQ0MDQKKworOTBCRkQzRkY2NzQ3RkE5M0YzREVENDY3MUFFQ0RGMUM0MDM0NEU3NUJDNzQxQ0E3OEEyMDc5MTE0QzdBOTRBREM1NjAyNjRFNzk0NjRBCisKKzJEREJBNEQ0RTc4NDhBMjU1M0ZERTFDQjUxRjUxRjlFNkYxMEFCMUFDNEFDNEQyRkRGNUQ0OTJBQjlCOEI3MUM2ODM0RjBEQzNCMjM5QgorCitFMzg2MjE3ODVDNjNERjYwMzhCNzREN0Q1MzdCQ0I0MTE0N0VBODU3QkJEQkJBNDBFQTU1NTBFQTg1OTM1NDU2RDRCQzk0NUM3RjU2RUUKKworRDM3NUUyMjA4NkNBQ0E3NUIzRTE5OTEyNTExNEVFOUZBNjU2RkY1RTkwMjk1NjZBNzJFOUJBNEMyREI1QjgzQTVDQTZDRjJFMTM2OEI5CisKK0I4QjJEMEIxRTJFRDZFRThCNkVDNTZFMzUxODAxOUQ5MkI2QzA2MkE5MkY3N0MwOUNBMTkyRTFFNTI3NjI2RUVDNzhFNTUzODc2RUZBQQorCiswQ0RGMTRFQUY5MjUxMkM3MUZGNkYwMEJCQzYzRDhCQzUwOTNDMEMzNDNCOTI3QTRGMjMzQzBBMUVENzk2MTQyNkQ3QjAyOTY2OThGNzIKKworNTFDMDUxRTNGMjgyMzFGRDMwMjE0ODVFM0Q4MjI4Qzg2Mjk5MDY0QUI5REFEMkU2M0U1OUI5OTVBNEM2RkEwRjQ1MzExNEU4MzIzMkY1CisKKzk4Mjg2NkQxNkVBMUYzNTQzN0M2NDgwN0Y4QTcyRkE4RENEQTREQzMzQjMxODQwRURFMjJDQzgwRjlDMzJGMDhGMTE2ODNFRTY5NjIwNAorCis0NTcyODBCMzlBMjg5MUFDRTM0MzNDQ0VBODA0NjVGMEMwN0JFMjcxMTU0NzNGQkI0MTFDQ0VCOEUzRTUzMkU4MTI1QUVBMDAyNkNFNEQKKworOUY1MDU0RDI5Njk3NEYyRDBBOTNEMkU2NTI2RTg4QzI2NkE1NEU5MzcwOTc1NzJGMDNCNjZERDdGMTkzOUE4MkE4RjQ3NzVFQUIxQ0IyCisKKzQ3RTlERkVBRTAwQzhBODU5RjM5MTAzQjE0OUNBMzNCQzZGOTMyMTAzNzM2RTcyNzQyMDIwMUYzRDM4OTU5QUJBRUQwOUQ5RDBCQTE3MQorCitGMTYzNDRBNDkzMjAwNjJENEIwQzMwQjgyNDM0QTY0ODJFMjNCMDQ1NUU4MjIzNThDNzY5NDFFMkVDNkE4RjU3NDc1NTU1MUE3NzE3ODYKKworMDcwMTFGQTJGNEQwRkZBN0FCQ0E2NDIwNUI0MzAxQ0M4QzQ3QjFDRDAzNTk0N0JBQzAwQzI2QzEyNTVFQzAxQTZEOTBDNThGNzYwRUJFCisKKzdEN0I0MERCMjVFOTc4Q0Q3MkNEQjhDQ0QxMzI1NUQ1REVCODY3MDQzQUMyMjFDRDMyRDc4RjYwRjhEOUFDRkM5NTM0MDU0NkREN0I3RQorCitBNkNDRkE0ODEwNTJDNThCQjQxQjM1REQwM0I4RDFBQ0M5QkQ4QkMwQThDODBDQTcyRDk2MTdBQTZBMTUxNzE1MjYzNTc0Rjk2NjVENjIKKworOTk4ODE4RDc1NUNENTBBMkQ5MkRGOTY2QzA1RDI4RUEwM0ZCNUFFNTcwOUI5MzQ5OEVGNjZFQTJEOTY2ODEwMDNFOUYzMzE2MjAwQTEyCisKK0RBOTY5NjRENkIwQkI0MjA3N0E1MzA2QjcxM0M0NjM0OUMxOEVFNDIyOEVDMUE5QzI5QzEwQkE1ODIxOERGNTg3QkQ1MzRGMDhDMDQ0RAorCis2RjA5QTVGMTAzNjQ4QkVGMDYzMzdEMzgzNDcwOUE2OTgxOEYzRDYyMzRBQ0NCNEEwNjhGOTYwNDg4MTlEMUQ3QTAyM0E1NjkwM0Y4OTQKKworRDM3ODI4MUJGQTIzMzlGRTFBNzQ4M0I3MkJDQTUyRjYzMDVBNzRBMTQyMTE2MkJCQTEyNTM2MzRFQjc0NTAxNDlERjJGRTNFMTBDNkZBCisKKzEyMzVDMjRGODJEQUNCREFGMTE5ODZEMzY1NzA2N0FDRTFBOEUyREUxMDRFQjRFMTAxQjY0OTFGQkQ2N0VDNzA1NTFEQTU2OTRCRDEyMgorCitFMzU0NDNERjE2NEQwQkFDNDEzREQzREMxNzg3QUI5MkZERUJGMDgwNjk0MjE2M0IyNkVCM0QxNDJCMDNFRUYzNTgxQ0QzQzMyRTUzQzMKKworNTcyMDVBQTUyMTRENzIzRTRDRTY5MzlBOUEwOTMzMjlDNTM1NjIxQUQwRTkwMzQxMUY3NTVFNzE1MzZDN0UzN0E2M0I5OTUyQTlBQkU5CisKK0U4OTJBQ0RDMjQ3MTZFQzkzNjYxQkI5RjVBMzI3QUQwOTg0NjREOTJBMTgwNDc1RUFFNUYyMDlGMEVCREZENzk5RjdFOTgyN0Y2NTdGNAorCis4RDM5Nzg3QUJENDk2NDkxQzg4OTNFMUMwNjMzRTVBQzJFNEY3NUE1QTk2MENENTM1RjBGQzk2RThGNEZFNTU1Nzk1Qzk2MDU1RTA1RjcKKworQTA1RTgyRjUzNzY1MTM0NTI1OTE2MThGQkI5NDg2MEQ5MEM3MDFCQzg1MjVBRjlDMTk2N0Q5N0I4NTNCQTRFRDQ4RDA5NUU5OTVGNzdCCisKKzE0MEM0RTE1NjlBRTQ0REQxMkFBQkM2ODgwMUMwMTQ5ODdGODhEQ0YyQjAxOTFBRUFCQ0VEOTBDQUMyNzVCRUE2MTczODdEMEY3QTFBRQorCis1OEZDREJBQjVENzUyRDMxOEVBMTQ4MkJGNTgwRjdFQUZEODgyQjY4NjRCRjAzQ0IyRTRENTlDMTc5QTAxNDZDMUJCQzcwMUY3OEI3MTUKKworNUYzMjIyQUQwQzFFNzY4NjgxMDZEQ0NBMEQ1REI2MDJEODNDRDJEQzg3MEVFNkU0MUY1NjEwODM1QjhGMkZFMkVDNzMwRUY5REUwQkJCCisKK0ZFRjQzMDhBOUFBMDM5MkJGMERGMUM5MkNERTRGNEFERTk1REEwRDEzOTUxNDc2NTU5Q0QzQjRCN0RFQTE0REY0NDU5N0E5OTY5QkVCNQorCiszM0Q4N0M4QzE5NTE4MjE5QzY0NzY3RERGQTVGQUNGMTczRDY0Q0NGOTZBMzZGOTYyRDUzRUUxNTgwQjgyM0FGQ0Y5RTZFMjkwNDU0RkQKKworMUM2QzMxQzQ1RERFNDIyMEYwNEYzRDg1MzQzQTJCMzRFRkVBNTI5MzY0RDZDRkRFNThBNUYyMjVGN0VGNTA3NkVEQzIyMzUwRjg2MTc2CisKKzYwREM4RjlENzJFN0VCODI2QTVFODNDRDFCMkYwREFDREYwMTk1QzY3RDRFRTcyNjg3MDExMUYxQTg3NjZENzNGRkM4OTQ0MDA0NjQyMQorCis5NTg0NzlENTZGRDBDNzhDQTVFQTc4MDFFQjY0NUU1OTMyMjkwMzE4MjFBQUM0NjY0QjVDODE0QTg4RjU4RENCRDFDRDQ0RjgzMzY0QzIKKworMkZCOUVCRUVEQTA5Rjk3NTM5ODQzRjU0REI3RkZENEFCMzIxNkRGNkFDMzA1RjVEODBFQzYzMjUwQzMzRTQwMzM4NUFFMDA5QjVBRjFGCisKKzVEODMxNTQ5QjJBREQ1RUQ5NDZBNjk0MDkxRDE0MEYyQzAyNEZFQTIyQkVBMzY1RTdFRjdGRjZGNjBFNUYzQjM3NjlCNjY3RDJFRTVBMworCiszNThERDU2MDJCQ0U2MTk2Q0YzMkVCMDI3MDk5MEZBMDVEOTUyMzcxMkFCQzhEOEQyNEI1REJDNzdGMDVGNUFGNzRDMTc0RDM3NTA2MUUKKworQTVGOTdEQTEyRkQzNDIyM0Q4NEQxNEI1NDdFQjQ5QjQwQ0FDRTE3NTVBNEIwOUFBQUUxQUMzMUM1RjYyQjU3OTExREE4MUJEMkMzQzQ3CisKK0ZBRENEMjIxRDlEMDRDMkI0OTQ3RTY2NUEyQjNEMkEyMDdEQ0IzNTIxMzM3NEMxMDNBOTEwREY4NTA1QUNFQ0IxQ0Q4MzQ5Q0YxN0FDQgorCis1RUE0NjNGMDQwRUQ3NjQ5QzcxOENFQzIxQzZDODJCQ0EzMEVFNkNFQjc5QzBBNkYxRkRCRTE2QkEwOUNGQUMzNEY3MzMzRUQxRDE4OUMKKworMUMwRDg3MkZEMzE4MkYzMjlBQUUzREY3MkJBMEEwQ0RCRTI2NERBQjFBQTgxOTlDRjVCQzE1Njc4REIyMTU2NTc5MjVDNjlERTA1MzI3CisKKzEwMjk3MDEwOEI0QTVDNjdDMjgwRkQ2QzUwRjczMUU4OTY3MkJCQTc5QUVFREQzRTYyMzc0NUU1NzY0NTJFQjZDMTU3MzNFQzYyQjNDOAorCitEM0Q1NkQ2RkExOEI1MEEyMUY2RjMxOEMyQzM2QjUxNzhFMkQ3RTQzOEQ2NTkwREExQzhGQ0JGREUxNzdBRDQ4RTY2NzNFMURBRDdCNjAKKworRjQ0MzhGMUFCMzYwRjJENDBGMUEzMEEwRjg3RDdCQUY1M0U2RUU3OEJCRjVCNUE5NTY1Q0FCQUQ3RTgyNUQwMzg0NzQzMEM2NDIyRTM5CisKKzlGMDg1ODAxOUFFQjMwNTZGMjI5NEVFOTZFNEU5RjE4MkVDNDVGRkM0RUE5OEUwRDQ5OTk4N0ZGMjE4REM5NUQwNTFFQjMwRDY1QjA4OAorCis5Q0FDQTZFQzdDRDgzMTE4QUYyMUU0RDc3RTJBMjVCMjFGNzIxMTA1OTYwMDI1MjEzMTMxQkI5RTBCQ0VGRDhERDc5RUQxQkMzOUIwQjkKKworMDdBNEVENDU2QTlDNTFEREUzNDMwMDEwRUMxMUQzOUE1MzE3NDUxQjM3NzdDQzYwQ0E5RTAyQTUwRDNGNjYwNTRERDY2OEQwMTZDRDQ3CisKK0M4MEVERUZENEEyQUJFODUwRDQzMjIyNDNGQUU1QjE2OUNERDA5QkQyNTNGM0YyNEFCMEI2OUIyREJFOUE3OUU3NkNEMzkzQjcxQjk0MgorCis2Nzg4M0U5MzA2RTRBQzI1RkM3QzlCRjY2REM2ODVCNTEzNDhCMDM4MkY5NzEyNDJBNzY0NzU4NDM3Njc1RDcwNkZERkQ2QzE0QzBGMEQKKworREVEMEE1QUFDQzFBMjNDRjExQUNEMkYzQjMwOThCM0QyQjRGMEQzNEIwNDVENzhGOTg4NzRFQjJDQ0IyNTExNUNDNDc2NzJDOTcwODQ0CisKKzI0QzY1QTY4QUZEQTk3N0RCQTlFNTE5RjI4MEMzMjQ1QUY4RTg5RDBBM0FFRjMzNDQ4MDA1NkExRjIwM0UxQkZBMDIwOEJBQkQ5QkJGNQorCiswNDIzRTU2OUY0OUJGNEFBQjQ0MjVFOUQ3QzNDMUZGOURDRjZFMzJFNTNGODgxRjJGODgwRTFDMDMzNkQ5NTNBMEQwNjhCN0RBMzNFMTYKKworM0UzNURBMDdCOUI1QTNCNUI5Q0QyNjZCNjFFMUU0NDIzMzExQTAzNzA5ODQwMzA5RkZERERGRjBEMDAzNUUyRDRGNTc5M0U2RTkxNkYzCisKK0RCQkRFQThFODZDOEM3MzgxQzE2Q0M2OTAxQkE2QzBEMDZERDBGRjY0M0FFNkI1OUNBNTUwNjc5M0QyQjAxMkExOUNERTdBMEQ4QjgxQworCisyRkFDRUFDMzJCQjIzODBDMTE1RjlBNTBGRUYyRTYwQUY3NTkwRTQyMTM4NTk5RjZFNzYzNzkwMkIxMDU3MUM0MTU5RUVBN0IwNThFNEQKKworNzM5MjUzMUREMUIyQTNCMUE1QkIxNzg0NTRDRjM2NUFFRTQ5OTdERTgyNjdEQUIyMzlBOERERjdBQjY5RjkyQ0U4MDVCNTZDMzM2ODYwCisKK0MyNjUyOUFDNkZCOTg3NDg4Qjg0NDk1Nzg3MEI0MEUyQThCM0IyOUZDM0ZDQUVGMEIzQTZDMDI1NzBGODY2MUY0RTRFNDU1QUZBMUFFMgorCis1MjMxNkJFQ0IyQzg4RkQzNENDRDZGNkVFQzZCNzAzRkJGRkY1QkRDOEJBRjA1NkU1NTkwRjE2QkY5MzU2NDcyMjc0MUZGRjM0NENDOEMKKworODZBMURFOEFGQUE0RTJGNThCNUZEOTE2RDE2M0QyODczMjc1NTNFQzEwMTIxODNDNDZEQ0Q5MjAwMDExMDUzRUQ0RERGNzc0MDM2QzFDCisKKzVEQ0Y5NThCOEUwOUI4NkNBRTI0RTQ0QjRBQkNDQjA1RENBQ0EwQ0Y0QjgxOTk4RkI3M0U0RTQzNTgyRDJGMjA0Q0E4RDk3ODgyREZDRQorCitFRUVGNjQzQUEzOUI1RDRDOUVCM0VDMzg4NkE5RDU0RTZBRENDMjU0OUU1M0FFQkE3MENBNENGQUI0NjVFQzBEMzM2RDE1ODcwQTI3MzgKKworNzI4MTBDMjRDMDc5QUFCODkzQUM1M0MzQTJCNDJGMzlBNDkzNUUxMEYxQjNGMjk5RTlCQjM0ODZEMDBFRDY2QTE4RjAzQkEyRENCQjA0CisKKzMwREVDOEQ0MEQwMDc3Njg2Q0NCRTUyRkM1NTBFQTk2REExMDIyM0QxRjFGMDk4NDQ5NjQzMzY0NjE1QUU5OEJDMjZEREFGMkQwMjUwOAorCitGNjZBQzgxQzc4MTYyNUEyNzJCQzgzNjEwNjQyMkZCQzNEQTRBQzFDQkQ3NzVFNEFDMTMzODJEQzQ5RkE1NDQ0NUQ4MkU2QTE2QkFGODEKKworNDAzNUJEMkIwQzlGN0U1RkNERDUwRTNCOEJFMEVDRUUzOUM1Qjk4M0RGRTg0NjQ1MzkyQzQwRUFGQ0FBRTA3QzEwRTIwOUZEMjI4MzgwCisKKzVDQUQ3Qzk4OUJERUUyQjMyODdEQjZENzI1ODM4NTEzRjNGOTVFNTBENUEwOUZDMzRDNjIyODVDMUFENzQzRjBDOUFENDg1ODYxNzQwRgorCis0NjJBRDQyNkQ2Q0M5NzQxQ0QxNEQ5N0RGNzk1MzMwMzIyMTdFMjEzQzU3MkFEOUQ2RDJFMTc5RkI4NzdGQzVDQ0VFMkQxNkRDNDAxOTUKKworRTNDODc3OUE4OUIzMTY0QkJFQzIwN0Y0NEZGNjY1MThFNDhDRjk2QkNDRkFGN0ExOEY1RjdFMEZCQjk0RThENEY1RjVBNzRFOTVGMjk5CisKKzEwMTYzMkI1QTI0RUUwNDExNzVBMDcyNUQzMENCOUQ2RDVDNTdDRjQxNDY1QkQ2M0VDQjhBNjVDNDAwNDQ1QjA5NUQxNEExREY3MjZFOQorCitFMUZFNzJGNUVCMjVGNDI2MTMyNzgzOTg0RkJBMkFBRTk2NTEwNjcyOEM5OUY2QjFGN0Q3QkFGQ0FCRTU1RjA5QzQ3NkRBMTBEMjk0OEUKKworNENGMDdFNjVENEI3OERBNkY5RTlCQkI1OTIxQkQyRTc1M0I4QjY5MkMzMTVGRUIyQTEwQ0ExMTc1ODRBNjVCNjE2MjM2MENGRERDRUY5CisKKzE3RUJDODYyMjI5RTJFQUE5MDk3QUVDRTlBNTkxRTlCQURGOEM2OUJDNUVDMDI2NzREMkI1OEI3QkM3RjVDRkRGRENDN0EzMzdCRTUyRgorCis2Q0VGQUFGREU1RDEzOTRBMzlCMUMxODhGOTFBREUxRUQ5NDBGNTM5RDUzMTBFQkI1RjdFMUIxMUU4RjJCMDUyMkZDNjc2QUU3NzJEOTAKKworRjU1QzNEQjk1ODk0NjY3MTdGM0JCMUFFNjE2M0NDREY3N0JDMEZENjFGOEJFQ0U3NDkxQzEzRkE2RUQ4RkFCOUUwMkUzOUU0QjRDQkI2CisKKzNCMTVFNUNDRDQzODFCMTU4OTlGNjAxMjEwQTM3NkM2MjQ2NDg0QjA0NkI2RUU2MTlCNDM4NTNEN0FEMTMzRTQyNTI2NjJDNjE5MEUyMAorCis3NkFEODQ2MTQ2QTAzQ0FDQTE0NEMwMThDOTM3RkRCQUNEQ0M2ODA5OTUyRkZEOTRBNkY4RTBDODA0MkVGMDYwRjQxODJGRTc3OURCMDEKKworQ0Y4QjgwRjM1NDUxMjJGRjZEQjQyOUU2RUFBRDNCQTlBOTI2N0E2MjI3RDMzN0Q2MDI3NEFCMzYxQzA4MkE1NTFCMEI3QTMyRUE3QzNBCisKKzZFMzcxRUE2RUE5NDc5QjQ5MTFENTg0MTQzMkUyRjc1QkZGMTA5OTI3Mjk1NUQ3ODY0RERCRjRDODhDMjlFMzNEQkEwQTkwQkZFMzNGNAorCis0RUM1QzYwQTA3NTE0RTc4RjlBNzJGODEyN0EzQTlFQzJCNTc1QkNEQjIzMDJCOUFENjU0OTg2MkMyQTFGNEZBOTkyNUI0ODREMkIxRDEKKworMUQ1RTQ2MDBEOTdBMUM2NDI1MUQwMEY0REVCMzdCQjk2NzE4MjI2QTlFRkQ2RTZCMDdFNTgwOEUzNUUxRDEwMDY1QzZBRjY0QkZEQ0E1CisKK0Q0MTNBRTMxRkQ5MjkwNUVGNkExNTc1MzkwMjgzNzEyMEExRjk3OEVFMzQxOTEwNjY1QTE1RjREQkJEN0MwNjg4OEExMUEwQzY0MDY2MQorCiswQUNBOEUwMjVEMzgxQThGRTI5MzIzREE2MkE2RDcwRThFRDQzNEE0OEZGQkRDOTZDQzc2MzY2NDE0N0MzREVFQzU4NDQwODU0QURENDQKKworOEM0RjI1MDMzQUFDMzQwMTU4OTk4MEM5NjhCMkFFMTg5NkI0QzQ5NUVGNzk4Q0I0NjQwM0YyMUUxOTE4RjJEMjUxNjY2RDQzRDA5QzlDCisKKzNGMUE2NUQwOEJDNTU3NzFFQjNFNkU0MDgyQjdGOUI0MjQ0MDc5NDI0MEIyNEFFQzlGNEI5RUNBMEQ3OTIxOUM1MzQwNTkxN0Q0ODEyMworCis2OTU4OEMyMzEzM0M5ODU5ODRFQzRFQTE3QkIwQjg1RUVBN0Y2MjlCQzlFMkUxMEE1RTgyOUU3NzBCODgxMDc3Njc3OUEzM0E4MzNBNEQKKworREQyNERFNjRBQjZDRDVBMDg5QTgyRTdGMjkzQTI0ODc0QzhDNDEyNUNFNDVFODZDRTI2M0FDQkIxMDhERUY2ODUxMzkyMDhBNTkyQTI3CisKKzc3NEYzRDdCOTIyNTBGRUI0QTIyODgzQ0M0MDNDNEQ5N0RCQTY3RUQwQ0VGQjI0NjgwOUJBQUVGMjAxQTU0RjkyMUQzNEQyMjJDNTY4NQorCis3MDlBREJGQzk2QTc3NzQwMzdBQjJGMjk5NUI3QzkzRDIzMDg2MzEyODFERUZERjZBNjU3QkFCMDlFMTkzRDBDOUY3NTlCMDNGM0Y1MEIKKworNEE1RjRCRjM5RjQxMTgzNDJGNTE4NkM0RTlERTI5REZGQ0I3QTZENjNFMEMzMDY3NzdCQjkyNDM2NDhBMUJFMjU2NjBGOTE4NERGOURECisKKzMyRDFGQkYxMUQwOUQwOUU3MTg5OTUzODI5MTc5MEY4ODlFNUM3RUEyMzI4RTVGRkQ4ODEzNEQzMzcxOUJGRTAwNDhCODBFODVDMDhBMAorCitCRjBDNTEzRDNGRjdCODcwQTY3RTZEMjJBMDZDN0JGMTVGODMyRjAxRkQ4QTQzNTA3NEFBQTFBM0I0MEI0QzRCRDM3NEM4RjU2NkNDNUEKKworNjUyN0E0NDdCMEIyMjVDMjE2RkQxNkY0Rjc0MDIxNDBEMDlEQTEwOEMwRkYzREE1QjI2MDEyQjgzRjFENzA4M0ZFMjczNDQ0REU5NjM5CisKKzA4OTY5NUJFMjAxNzYzMTgxOTk2MUE2MzU2M0RFOTRFQUFBNTAyNDYxQzEwNzY2QTdDQTk0NzRBNDFFOTI5N0FGOUM4ODBEQ0ExNkUwMAorCisxQTk4MTcwRDhENjA4QjYzMjVGRTQyNjk5Q0NCRkQ5MzRCODdEMjMxNTA0Nzk2NEZCRjExRkFEMkZEOEEyODlDMTE2MDZDMjVFOTkwMjIKKworNzA3QzAzQjA5NDVDNDA3Njc3QTcxMjYzNUMzQjUwRDdGRkREN0E1MkRDODQ5QUM5MjVEN0E5REQ2MzZBRUE5NzQ5Njc4RDZBQjIyNzRCCisKKzYxNzY1NDhFM0U3QzM0QkI2Q0YyODk4NDlFQjc3RjdFMTk3NjI5MTM3NUYwNEIzRkYzQUEwMTFGOUEwQjBBMEVDODE4M0E4MjU4MUJERgorCitCRUExQkU0RDZBQzU1NkFFODI4MTIxNkVBMEE5Q0RFNzY1RTY4MEJCNEZDRkMwNzcxOTRDRUJGQjc2RjYwRkM0REMzN0I3N0ZBRDdDNDYKKworNDc0MUU2M0U2NzMxNTc0MzVGQjVEQUJEMTcwMTk4MjgwQTE3RjQ4NjREOTJFQjA0MTIxNzQ0MjdFQjdCOUNBRUZGRDdEQUYzNEQyRDc1CisKKzU0OEQzNUU1NzgzRTU1NjBEQkJGNURCRjczNkUxQzEwRjI0QkU4M0Y2MEE0NzYxNUM0MjQ1QTc4Mzk1RTBBODNFRDBBNzc3REZFREQxNworCisyNUZGNTczNDE2Nzc4NEExNzQzMjM4RkJBNTg4RkY5MzNFNEFCRTU3M0JGMTdFQkFDMDEzMjMwOUU0NTg3RDI0MkJBRTcxNkUwOTM4NjYKKworNTQwNzc4NDQwMDUwOEEwNTU2Q0UwRTIzMzQ3Q0VBMkJCNTUwMDM5RTY1RTQzM0Y1RTU2OUQxQkZFQjQ3Q0QwMDY4MjkzOTI0OTU5OTExCisKK0IwMDY0MUE2OUVFNTBENkJBQ0FCMDU0NTJDNkExOTNDMDJDQzlCMzZCN0ZBMzEyQUI1MTc5NEE2MzlERDc4MUYxQzhCOUUxQzBBQTk5NQorCiszMzlDNDk1NTg4RDg4MTUzNjYxMTIwQTlFRDUwMDEyQTY1NkVEMEM5RkY0ODE2MzlBNTFFQTBBMDEwQjE1NjFGOTJDQUUxNTQwQzM4RkYKKworREI5MzczQTVDODM2NDNBMTM1QjY1NzFENTEyODdBMzE2MTZGNkFGMTA1QkQxN0M5QjY0QjZBMzI1Qzg4RjMwRTE0NERDQjlEMTYwRjFDCisKKzI2RTNERDY1QTZDM0RDMTU1MDUyRUJGRjUxQjUxMzgxRDAyMkFCMURGMUMyRjM0RENBREM2NTYxQTI1MUJBQ0EwQkExOEMzQjMyMEZBQworCis1Mjc1QzcwRDFCNUUxM0Q1NzE5QTdCRDdEMUVBQjNFRDM4MkVEQzVDRjA2MkEwNjNBREFFREREMTUzODZCQUZFREY2MEI5MzVGOTQ4REUKKworNzUwNjRFOTQzMjJGMDU2Mzk1RTk1RkI3MDk4MEVGOEM5RUNEMjdCMjIyQTQ5OTA4NTlBMkI4RkFDNTFGM0RFMUFDNEJGNzY3N0NFRTI2CisKKzAzMjY5REI0NDgzMTkyNTc3OTRCOUFENUU3MDg1MDVEMERBNzI4N0Q1MzBEREE5NTlFMDhDRDg0RkI5NzFCOTlCOEQxOTY4ODA2RTdCOAorCitCMDFGMjI4QTRFOUE4OTM0RTY2MUY0MDNCNjMxNjRBODQ3MTNCOTAxMjY4QzMxQTgwNjJDMDA1QjAwRTYzOTgxRTk1M0ZBM0U2RkEwRjQKKworNzhFOUQwQjNERENBRUJCMEFBMEZBRTY1N0JFMzBBRUFDMThCQ0U3QzgzQzJDNjhCMEUzMkNCQjE1OUNBMjVCNzk5MzA0NzczQkY4OTQwCisKKzA1RkI4OTNDMUQ2Mjk4QTkxMUIyREYxNzE3QTFCOTJDQjdBMkVENzc3MDcwQjhFMjkzRUVGNEM3MDAwRTlFNDk2QTcwNzAwMEJBMUEyNAorCitCRTBGNzg0RkE5OEJBNTQzNTg1ODQ1QjA5RDg1NUMzQUVBNjIyNzE0MDgzRjBCMUYwNTAxQUU3NEE4NDkzNDVDRUUxOUUyQjdDRDZEMDcKKworRUEzNjgxRjA3Nzc0RjBGODQ0MkU3RTM4MDQwRTZFMjExRDY5Mzk0NEEzMEUyN0Q2MjQyMTgxQzI2MjZBQUE0QThGNTQxMjE1REIxODVECisKKzU2Mzg0RUI5NEFCMEQ0RURCNDk2NTVENTVEQUI4OUY1MjY2MzA4ODg4NEQyNDk0N0NEQ0MwRkQ4MUEwOUFGMDQ1MEM2MEZDNjY1QzczNgorCis0OURFRTQ5MjJFMDBDM0VFOTQzQTAxRkIwNUYyOTgzMzY3RTZCRkM0QkM0MThEN0E1MUUxNDUyN0JEMEY1QTBBOTU1Qzk0MjZGMEZENTYKKworMDhDMDBBNDY0RDFBQjRCNDY5Njk1NTg2MjZBRjZBQ0UyRDk5RUJFRDkzMDYyODcyMEJEQUZEQjU5RTg5NDNCN0M5NTk4RkY5NDc4MjY5CisKKzQ5RDU4NkFBRjE0RjE2OURGRThFQzlEQTQxNTgyRkY0ODMyRkYwMTY0MkJFRDFFRjI0NEQ0NkMzMDhENDY4NzgyMkFDQkMzREVCMkUxMQorCiszNDc0NzNBNzRDRkY1QjU4QkEyN0QzRDNEMzZBQTM1NDNGMkRDQTA0MUQ0MkI2MEQ4QzlENzQ4M0YxMzk4M0IyRTM3MjA3OEVCREFEQkEKKworMjY1QzY3QTEyMjQzRTQ5QzM1MDk2MTk4QjUwRDFDNUQ0NUFBRUVBNzJFNEJDNkVDOTIzMzhFMDFDRUI4NDkxQjRCNzI2ODJDMzVBQUZGCisKKzkzNUY4RUE3NkM5NDJFRTRCQkIzMUM4RTQ1QjE3QjgyOTY4NkMyM0Q2OEY2NDQ0MkZBOTM1REVEMTc1Njg3QjVDMDQyODU3RUEwNzY1MQorCiszMjQ4NzFCN0U4RURDNTg5ODA1REY5NzJGQkNGNzlFOTJBRDFDQUExQUM2MzM1RDkxRjAxMTlDQUIwNDY2MjBBODAyNDc1RkRDNzVFNTAKKworMUYyRTZCNzc5NTRCRTNFQTk2RjExRTE3NTY1NzM0QTBFQTcwMkE0RTgxODlEOTU3OTUwMTVGOEIwRjdFOUNBQzQ0OTJCRjlCOEQwMTAyCisKKzU1Njg1MUZENUM2OEU1ODlGOTlGQ0Y1MUI1RUEwREJBM0QzODg5RUJCMjAxM0FEQUIwMzU1NzQwQzg3NTBCMTgyODUzMjhGMDFEMkRCQgorCisxQjA3NjhDMkYxNTEzNEJENkQ0MkQ0M0UzNEE5RjBBODcwNjM2RTI2RjI0NTVFM0VEOTAwRjY2QjgyNTVGM0FGMEE2RjIyMTUyNkMyNzcKKworNTBEQ0I4NkQ1QzJDOUVEN0M4MjZCN0VGMjlBMTFERkU0NUIwQUFDRDY3NDIwODFEMkQ4MEY3NjlBQjhCNDYzOEJBNzFCQzREOTg3NjAwCisKK0RENEQwNENDNTJCQTI2RjQwNzQ0MUUxQURERjRENzI3M0E3NTE2RUUxODlBMjU2N0VDOEU1NUQxRDMwMTlDRjcxN0ZGQzk5NjU1N0JDNgorCisxMTk5QkRENTJGNzJFRjMxODQ2OTg3NDU0MjczNzhBNThDMjY2RkZBRDc0NkIzOTdGMDUyOEM0MzVEREZFRTJDNjFDOEUyNEM2RkNCQ0IKKworQTMwQ0EyQzk0QThBMzQxRTBCODg3OUQ2ODYzQzdBN0ZCODA1RjEyQTI1MzBCQzk3NDdCNkJGQTdFQTA1N0RBNDFBRkNEODA0NkVDRjA0CisKKzZDMjU1MkRBNUU0MTlGMTVFNjAzMzlBNkVDNTQ3MzgzQzRCNjM5RkM3QTdFMDg2RUE2OUJBNDk5RjVBOTUzNTQzQ0U2MjBFMTU5RDFBOQorCisxQkIyQzZBRDIyRDZGOTc3MEY5RDJDRjcxOUQ3QUQ2ODQxN0M4RjM4RTlDNzkxMTMzMEVDQTJFMzRGODQzQkI5N0U2OTg2OTMxNkQ5OTMKKworNjQ5RjkxNjk0RjhGQjk2OTZERjc1MzFGN0IzMzI0RjlEOUJGQjUyRUJDMjc2MzIwQzU4MzJBQkQ5RDBBM0RBOTREODAxM0RCOTBFQTJECisKK0YzNUQwRTFDQjM3Q0Q3REIwNUZGQzUxNEY1MTBFQjg5MzVCRjU1QzBBRjY0NDA0NjRCRkVBMUQ5MkVDNDRBODIxREE4MjJFMzg3MDUzOAorCitBRUNDMTQ2RDNDREQ1Q0RBMzI0QkQ4MkNDOTA5OUM5MEYyRDU0Q0QxMjQ0MzVFMjc1QUVCQ0NBMDgzOEM3RkMyNTAyOEQ1NkREQkZBQkUKKworMzBCMEZCQjFFQjdDOEJENkY5NDhENUZBOEM0RkJBMUMxMDEyMUZCMjBGNDkwQTU3QzAxM0M2NTQxQzU2RDA4ODJBMzczMzkyNTIyNzRBCisKK0IyNzc3RENBMDlDRUM0RTQ5OTkxMURDRTQ1MzJBNkM0RDM1NDY0Q0U1QzE1ODUzREMxRDI5RjAyQkJBNTY2N0I3QUQzQ0IwNTE4QTkwOAorCisxOTYwMzU2MTgxQzQyNzYwQzEwQ0VEQkI0NjQxN0ZFMENGRTFCNTQ1Q0E4QjEyOUI2N0Y5MjU0NjgzQUI1RjhGNTY4NEI1MEU3MDJEMEIKKworQTI5MzI1OEQ4MUYwNzU1N0U4M0Y2RURDQjVGNTBCMEE5RDU3RjZBODAyMTc4ODk2MzgzRUJCMjhEMjc0OURCMzk3Q0ZFRUE4QjNBQzdECisKKzE4NjFENDg5RTdEOEUwMkIwMUI0Nzc0MjlEMjgyMDlBMTY0ODczMjdEQzNDNTMyRTM1RTRGNEFCMUQ4N0EwRTFBMEY4NDAyQTA2N0JCQgorCiszMEQ0RDk5MkI1RjI5OTc0NDUyMDFDNzhEREJCQjMxODA2RUUzMDJFOTZFMzUzREIzMEU3OUEzNDFCMzhBRjMyNDJCM0VDODcwMUEzODEKKworQkQ0RUVEQzU2NTQyMzEzMTJENUQ0RDI1NTVBMkU4RTJDMkZCNEM1MzY3OTU4MUI1N0VEQjZGMDFDN0FFREUwMzk5QzRDQzVFRkVDODlECisKKzAyMTMwMUI5NkIxNjhFM0QzQkExNUUwQTJDMjUxNkVEREYyRTlCNzhCQ0U5ODNDODIwMEIxOEFERUM1Q0U2QkZFQTAxOTM5NzUyNTc3OQorCisyMzc4QzhCRjg0MUJEMzMzMjA5Njg5MUEzRjgyREU4RkQ0NjBGNDNEQzc1Q0NDNTk2QjgyRURGNTQ2RjhBQzAyNUVEMzBEQTZFRERFNDQKKworN0VCRTZBMjcxNzM5QjUxQUFGNUFGNTI0NjBBODY5NDJEOTRGMUQ5MTgxNkQyQ0ZBMDU5QzA0RTNFNzNGMjc4NDE4NDkyRDU0OTg5RUI3CisKK0NFMUZFQzlEMzExQUU2OTE4MDM1MTQ0RjA3QkY5ODc5MDlENkJDQzJFRDg4OTE3OEVBQjdGMzNGNTg5QTcxMUNFNDkyODI5N0Q5RjM3OAorCitFNTA3NzUyMDIyMTdFRkNFODNBQTNDODNCNzMxQzFGOThDRTRBNzg4MTZFN0Y2RDlFRjJDNThBRDVDRjI2QTRDREM4NDA3NUVCRjNBNUYKKworRDk3OERBRTZFNTA3MjY2NzBBQTY4M0ZEM0JENTFEMUYyQTY2QTE1RDQyRTM3ODhERjRDNTNGM0NBNkUyQzU5QTBGMkMxRDZCQUQzNjlFCisKKzJENDY4QThENUZCOEQ4MkM2Qjk1RTFEREM3NTA3MUU1NjNFOUI0M0VCMUYyRjdCNjhENzZENTRFNzkxRDgxQkQxMUIwRDRGODhCNEUyNAorCitCOEUwOEEwNDM1MEQwM0Y1NzdFMjI4RDczMTlBQkNERkE0QTI5QTdGQTlGQjJEOTlDNTQ1MEE2OUVDRjQ3NDhGNjAxRjE1RkJEOUVEODQKKworNUFFRkMwMjk1NjVGRTNBOTg4NTdGMTk3RTRCNEEyQzNDNzcxMjFCQTJENzg1MjdBREJDNTAxMjBCOTk2Njc4MTZGQUY1QzY1RDJGMEMxCisKKzU5MDFCMjk2OEREMkRDQzUzMzVCRDVEQzg3MEU2MzdFRkNDRjM3MjZGQkFEQ0Y5OEY3MkMxNDM5MDkxMDlEQjFCODkwMTdBMDI2RjQ1NQorCitDRDM3RDY1NkM4MkEwQ0EwN0Q1RTlBMzFGMjhCQjI3RTI3QzY1QjJCNDIyQkQ5RUMxMkZEMEQ2QjUwNDZDRDhCQzdEMjc2MDREM0QxNDYKKworQzIzQzQwOTNGNkRGOTQwMkQzMTc1OEQ2NzdDNkJCNUJDMUY1OUIwQjhBNjlFMjk1NTE2QzY0MDcyMjE5NjA1Mjc5MkRDNDBFNEUzQzQ4CisKKzAzMjY3Mzk4RDYxNDRDQjVDMjA2OTk5MTA3RDY3Rjc2Nzk0QUY1MDFEMzVCOEI3NzQ4MjM5NUY3Mjc5MEQ3ODhCMDc2QTQxNzk5MUJDMAorCitDNEEzNjAyRjE5RjJDMDQzMTYxNjkwMURCRDcyNjgwQTk1OTFGMzA3NDVBNkQ0RjlBOEQ0QjlENjkxMTZCNEU4Q0JFRDJGQjhGMDgyNDMKKworMjIxNTZBNjBDRTJGQ0E4MzRCODA1RTJGODY3QkQwNkI2OUI1NjZFMDlFRjIxQzNCN0MyQjNFNUJBMzQxMDlDOEI2NEY3QjYwOURGNkFGCisKKzAzQzIzQ0VFQTRCOENCMTIzQkU3Qzk2MzdBQTQ2MTlDMjkzNDhBMUU3MTM4MkM3OEE3NkI3RDk3RTFDOTFFNjMyNzhEMjU3RTJFMkVBRAorCis4RDE2RjYyQkU3NDFENTlFRkZENjA2NjY2QURCN0JCMEEzMTlCQkM5NDUwQzExRURFQkUzMzdDNUUwNTNDRkM1ODExMkY4QkU2N0VCQzkKKworRDdFODdBNzY4NTE2RTFBOTcxRTQxOUZENDkwMzE0M0I2RTFCNUY5Q0Y0NzU1QjVCNUI5RUEyQUY2NjUyQTM3NkFBQjZGRDU0REQwOEJECisKKzMxRDNEQTlDMEJBN0MyODgwMUMwNDhCNDNENEJCNjg5QjNFMkE3QkJDRUU5RTlEODBEM0JENzhBN0Q0RDk0ODkzMzc5QTcyMjhFRTVDQworCis5MzIzMzBCNTFCMERBRDkwOUQwNkRGNEI5RkY5MjVGODc1RDRFRTFFQjI2OTJFQ0YxQTAwMjQ0MTcyNzM5Njk5MTNBRDI1RERCOEVEMTEKKworQkEyNDAxRTVEQTgzRUM0NTJDNzhGQzQ5RTVCQTNBRjhFRjBBQUUyRDU1REJFRDZBQjIxQjVDOTM1OEIxQ0UwOEE0NUU4N0MxMEM2RjMxCisKKzgwMUY4MjNFNkJBMEFEODgwNjA2NURFQ0JGRTAwQjlDOUFBM0YzMDBCMjc2NUQ0RDRFOUM1RDJBRTg3QUYwNUZBQjIwN0NCNUE5MDFEMworCitEQjVCMjg0MDQ4QThBQTJGMEM4RjUwQkMyOTgzNTY0NDREMjY3MkI2RTExQUREMTM2RTRCNjkyNkY0NzA3NjMxMDlGRUYzQUFGMUUyMTAKKworODk1Q0JGNzcxMzdBNjE0MkVFRTk1ODNEMzJDMDZCRDc4MDU1MDIxMkNDOUJDQTE4QjQ5NEEwQjBBMDk1RjIzRTRFQzJDQTYyMkNENTY1CisKKzQ5RUQ4QUU5QTgyQjRFNjBGRkQ3QzczRjZEMUM0NjIwOTRGNDk0NkUxNjQxOEQwMjMyMDhEOEJBRjQ0NUUyN0M3RUQ5RjM5QTdGQzExQgorCitENEE1OEEwQkM5OTY3RTFDNTgxRUMxOEY4NjZGNUFFQjg2OThFNzEwNzUwRkY0QTBDRDY5NUMzMTRDQTI0ODNCRjNGNURGMTQ4ODhENTcKKworNTg3NTg3ODhGMEQzRDNBRjM1N0UwNEZDNDVEQjU4RURFMTVBRDY0QzdGMDYzNjRFMUIyQzY0REMxNENDMDM0NkFEMjg1NTc4MEE4Q0U3CisKK0ZBNTM5QUYxNzI4NDgzRkZDRTgyQjM4OUM1NDZFNTU0RkU2MzE0MDZBNzkxQTAxQTFDRjg5OTU1NUUzNDYzNEI1MkYwMzlBQTk1MDg2RQorCitENjRCNTA1MzREQ0E1NDAxMkZERjg2N0E0MTczRDk3RDQyMEU5RjVDOTcwNjQyQ0IxMkE5RkU5MEE5NzVFRTdDM0QyN0M0MzU3REI5RTgKKworREI5QTlBRjc4REZDNUMwNTQzQzkyNjg1NkJENEJEQTk4MzM4ODc1RkQ5NUFCQURBMjYwQzIxODU4QjM3OEQwMzkxRjZCQkYxNUFCMEJECisKKzcwMjVFNjU3NTg4RDlFNjM2NERFMUVGQTA4ODEwNzgyOEZBNDI1MEU1M0U3NDg3RjhCRjg5MTk2MkYyNzgzRkUzMDUwMDJDRUQwM0QyNAorCitDRUZGNUY2RTlDM0UzMjExRTBENDBGRTdBOUU4MzMxNEZCOUY3MkYxREFBN0ZENUI4N0U0NDc1RkU3OEY1NDJDRDIyQUNDNEU0MDkzM0MKKworMTVDQkYxNkIyNDAwNDA0MTRBQUZGODI5MzcxQTY3QjNGNkRBRENCNzI4MTQxMDAzNUU3MDI0QjU2NjA0MzU2RjhEMjREODc5Q0Y0QjkyCisKK0MzMTJDRTU1MzhDMjdEMzI2RDU2Q0RBMkRCNTJEN0JGQTAxODRFQUJDN0MxMTYwRENERTY1NDQ0QTFGM0QyOTM4N0E4RTJDNDFCNjMyRQorCis3Nzg4MTNEM0YxRTMzNUY4QTA0RjI3N0YxNDE2REMzMDQzMTU5NThFMzY0MUE3RDdFNUVDQzY4Q0QzREQ1NDA0M0NBRkFDQjlCMzA3QzkKKworNThENjIzOUU2NzU0OTIwQTBDODA4MDc4MzVBMkYxMzdBQ0IzRDFGODI4RUNDQkJERDlBNTVBRkM2NDZFRjkzRUFDM0FGRjExMzY1NjdFCisKK0RBOEY3NDFFMjQ2MDRGRDQzMjJCMjBGQkEzOUUwMzc0OEJFMDI3NERCQzZBQTg5NTdEMzBENzg1M0VCOTZBNjVBOTg3OEREOTRFMjU5QworCiszOEMzQTE0NEUxMjY5Q0FDQTU2QjBCOTU2QzVDNDBBNkI1OTY0MjZGNDk1RTQzOEFCRjNBNTRCNEJCRjE2MTI5OUY1OTRFQzMwNUY5NUUKKworOEJGRjJGQjc4OEUwNjY0MjBCOUM2RUY3MkY2QzI4NTM2RDY2RTZGMDAzMDlCQjY5RTM5NkZDODY0NjI2RTY3RTg0RDg4REY0RTc0NDIyCisKK0E4NDZDMjk4N0NDMThFNzBBNUI0MUUyNkI4OTdGMkRFNzlFRkRBNkNEOTlGNTk0NTY0REE5NDZFQzEzOTcyQUI2RjdERDczN0RCQjE0QworCis5NDA5MjhFNzgzOURGQ0MwMzUyRjdGRjYwNTc0QzQyODQzOTgxNTlFNDdEMDQ4N0QyRDk0RDIxRTkyQkEzNUJGRjA0RkM3NEM0MzY1MkIKKworMjY0MDUxMzM3MTRDQTEyQUFGMjExRUEyRTdDMzk3QUYxMUU5RDc3NUM2MTQ2MkE3NDJFQ0Y5OTkyQjY5RkVEMEMxNTJGRUQ1QUE5NzA3CisKKzI0NzlGNThGOEQwRTI4MjlBMUY3OUE1MkVDN0EwREEzMTJGQUU2QjIwMTBCRjcwRDBBRjhDQjk5OEY2MjZGRDI2RkUzQzUzRkU0RENFQworCis5MTZERjBFOUZBREZBMjgwMkFCRTk0NEYwQkJGRDE2NkNEMzlFQkFEM0ZBNENFMkM5QUJGMDA3ODkzNjk5RkYyQzIxMDYwMDRGM0Y0NzcKKworMjQyMDY4QTdGQ0NBRTc5Qjg3OTVGNzM5NDEwMjUzNkRERUZDMUNCRDY2MjUxNDIzM0I1RENFRjFDM0Y3MTU2MzdCRDY5NUIxRTA3MTM2CisKK0U0MDAwN0M3MjM1Q0NEQ0E5OTFCQUYxNzNEOTE1RDVDNUYzM0M0RkRGNjUzRDUxMTY2OTk3QjZBMTRFOUQyRjFCQzI4OEIzNEU0NEREQQorCitBOERFNTVBQTg1NjI3Mzc0OTg4QTA4RDk2NUEzRTFDODQ4N0MzMTBBRjMyRDJDMEI4RTVEMzc3RDRCNjc1Mjk1NEU0REVGRTcyRkQ3MDEKKworMTYxNUQ3QzNFQTI1QTY3MzNFRjdFREVBQUJDOTk5NkQ3RjZDMkREM0NBNjJBMjQ3RTJFM0RBODExNEFCMzYzMEFGODcyOEE5ODU0RTg0CisKKzQyOUEyNzYxMjZEMTg3NTZFMTI0NTQwOTVFOEQzMEJFRTVEMzMyN0FFRDU5QzFCRkZGQ0NBRUJBQjAyNDQ0QTM4QTg5REU2REQzQUQ4OQorCis0RUQ3RTRBNUM3NjFDOEJCNzdDQTM5RjRDQzNEQTdBNzA4NTJFMjdFODhBNEQ2MjAwRTkyMkFFRjU5M0YwOTEyMjYzQ0Y0MzgxQTEyRUIKKworRDhGOTRBRTIyRUFCQkQyMzlFQzVFN0FGMDNFQTkxMjBGNERDMkU4MjUzRDU1NTFDQ0U4Q0E2MzM2NzE0RjdCNEE0QzRCNENFNTY1RjcxCisKKzI2ODVFMTM2NzZBM0I0ODgzMTE3Mjk0MzJFRjI0Q0NGOEJBNDgyNjVBQkVFREIyRkJBNTNGRjIwODdCQjlDQjk2ODJFOUREQzk5OTE4QworCiswMDhGQjBFQjI4RUIxQjVEOUZFNjdFQTlEMkQ0RkRFMUE4RkUxRDg3Q0I4MkY4MTI1ODUwQTYwRDkyNDE2MUZERDRFN0U3REE1OTU0MzAKKworMjMzOUNGNkM2MTk0ODk0ODQ1Q0U1QURCQzk3ODgzQ0FEN0QzNjk1NzQ2ODU2QUNGMkVGQTIxREE1RUFEMzNENEZGODY5NDI5OEZGOEE1CisKK0FGRTlDQkIxQzZGRjE3NDMxNzlGM0VFODJBQ0U1QUQyQkY4NjQ4OTM4M0E5N0YwNUZCQjE4MDk4ODlEOUVBMzM1NDRDMjYzMkYzM0VDMgorCis3MTE5QjM2NzA4MjQzMzJFN0ZCQ0Y1OUM3MUMwODBBOEU1OUEzQURDQTM5MjVDNjlENEJGMThGMUUyQjFGN0Y5QzE4NEZBRjdCNDdERjIKKworMUQ3OTA1Qjc4RUU5MUE4QkQ3MzNENzU1QTA0NjYyNkIyNTg2NTE2Q0QzNTI3QjZFQzA5QTkwNzg0RjVDMjJCRTU0NjVDMjQ5NjFFNDIxCisKK0I4RjMzQTE0RjI4MENFN0JCMEIyM0Y5NzAyMzYwRjU4QzM3RUU0Q0E5OEFDQjQ3RTNFRjhCQjFBOEE3M0Y5QjA4MzU4NjMwOTQwN0JDNgorCisxQjM0RDY3QTU0MTU3RTM3MjhFREU1QTZBOUQyREE4MTFCQ0E1MjFEOTdDNjZGQjQ0Qzc3MjVCNjlBQUMzNTg1MjhGQkRCNjc0QjI1NTUKKworN0YwMkRBQTE5RUI0RUZDNzE0MjNDODlGODI3NzM3MkIwMERCNDVFNzgzREIyNjFCREU2QTczN0Y2OTcyMDE4RTU4RkMzNkZBQjcyQjgyCisKK0U0RUI0OEJBNDVGQkQ2REE4MDc4Rjc1OEZEQzExNTVDMDZCQTdCQjQ5NjlFQjgyQTVFQTYwN0YyNTdCMEJCNjQyQjkyMzVDNDE0Q0JDOQorCitEQzg4MkU0QjAwMTJCOUE2MDI0QjU4NEZFNjhBQkNCMEY2MEM4QkNDRjhFMTgxQUNCNzc4M0RBRUM5OUJDN0EzQThBRjAyOEJERENEMEYKKworNDEwQzk0NUYwNzc5MEMwNkVBNjM4OTlGMjAxMjMyN0FEMTYwNTYyREQwMzkwREU1NjREOTAwNDBBQzMwMzc1OThDNDQ0M0YwOTVGRjZBCisKKzNGNTI1MEQ0QkUwOTQxOEVBNDMxNThCMjc2NjFCQzI1MDBFQTdCQkYzQjkxMUM0N0ZFODU0QTgxOTIxMzgxMzY4NERDNTk3RkU1OUFCMworCitFREI0QjI5QUUxRTUxQUY4REY1QTk3RUE1QjJBMzg1QjAyMTlDQUEyNDEzRTc3QzhGRkYwQUMxMTdBRDA3REREMTA1NDQ3NEVGMDhDRTIKKworNjk4NkNCN0RFMDBBMDEwODkzNDdFMTZGMzZDMDZENjA4MzY0MkVCQkRFNDAyQTk4QUI0OEY4NzE3N0FGNUY2QjhGMDIzNEUzM0ZDOThCCisKKzAyRTNDNzhDMDgxM0E3NDY3N0FENTI0QTMyOTIzM0E0Qzg5QTY5MUQ3NTY5QkM1RTI1QzVFNDZEMTYwRkNDNjlEOTVBOUIxQkM0N0NDOAorCiswNjkxN0VFNDQxNTQ2RkEzNDUwQTlCMzBDQzRDNEJCNEU3Q0I0NjFFQ0ZFQzcxMTU4OTFBMjUyREVCMjlGMjA2RDFGQjczMzA5QjUyNTcKKworNkE5QzFGRkE0OEM4MTczOTE2N0E5MzM5NDYwNEIxQTkxRTg2Q0JCQjZEMTY0RTVENzY1NDVDNzUxNTJERTJFMEI0QjA5RjY1QkVGM0YzCisKKzg1Qjg0RjI5RkE3RkQwQzk0MzRDOTM1MzNEN0VDQzRERDhFMUFFREFBOEIxQTIzMUVGRjYyNjZCNjYxRUU1RjRFQ0Q0REVFQjE1NEZBRAorCis3MDI2QUM4RkVFNjcwODM4QUM5ODZENDhBREJCMTYwQTg3M0Y5Q0M5RjY4N0Y0RjQwQTVCNkEwODI3MTBBNjNEMTBGOTIzOTFGMzQxRDUKKworMTE0NzdBRkM4ODk5NEU0MDE2QkNGNkQxRTc2MDBENTVBRUQ2RTAyQkYwMUI1Q0NGQkYwREVGQkJCQjY5N0ZFQUIzQzlCMDEyODgyQUJFCisKK0UwMjQzMzIzMzBEQjAyQ0U2MUVCNUM0M0M1RUJERjk2RkY3OTkyNDlCRjY0MTAyRkY2NzBCOERCQTI5RjQ4MTVDMUE0RkJDQ0YyM0IxNgorCis1QUQ5RThFNTdGNTk2QThCQ0Y0QzFERDEwRUU1QTNERDEwQ0EyMEIxNjc1ODA5QTFEMjhBRkY4NUE1QzRFOTNENTAyMERDN0E0NUEwNTAKKworQzcyMkFGNTNENDJFRUMyOURGRjBFOTI0RjhBNTRGNzVGOTYxMUQ2REYwNUUxQTQzNkFDMDFCRUMwOURDMDE0MzE1NkZGRDQ3RjMyMjY1CisKKzlFMEY2OTY4RkUyRkQ2MzA3NEVFNzdCRkU4QTRBODY2MTMyODMzOTMwRTEyOEM5MUIxQ0NFRUM3MUJDMDJCQUU4MEREMjU5ODQ1MkNCOAorCis0QjBENzU2RThEMEREQ0EzRjY0RDJFNjRBQjIxQzQ4MkZGRUQ2QTg1OUJDM0I1RDYxRjFEQjgxMkZFRTFBRjBENDgyMjM5RkNCOEE0QzkKKworQkVFRjYzMjA2OTYzN0FENDgwNTBEQUUwMTJGOTFBQjRBMjQ0NzUxNDAzQzk4MEM1MEVFNDRCRTM4RDMzRDc2NkEyNDI0MjY4NTk3QkJFCisKK0QzNkUzOUI1OTU2OTNFRkEwMENCQjY0ODIzNzJCMkMyMEVEODk1NjM5ODNDNkNFREQ1RDI4ODE5NkQ0OUQ4REZFNDY3MEM0QjVGNDU3QworCisyMUNBRjlEODlDQTdBQzlFMDA4QjNGODY3NzYzQTBBMjM0OTRENEYzREUyMjlGOTgzRkM5QTEzMzUyNUE1QkEzM0JBQjE4NEI3M0FDNDQKKworQUQ4NTEwMkZGMUFBNjkxNUQ2MkVGMTBCOTkyRTlCNzE1NEE2RENDQzQ3NERGMzZGQTY2NDFGRTc0N0IxRTgwRkVBODBEREJBOUZDMDA4CisKK0E3MUUxNTUyQTMwRjg3OTU2QTZGRTI5OEQ1NzM3QkNFMjg1REFCMUY3NDY2MjJCNjE0MEU1NjMyOEREMEIzNDNCQjdGNkVBNENCNzNBMQorCitBRTE0NDhDQ0QxQkJEMUFFN0I5RjVBRUUyQTk2QzU1RDRCNTExQjJDMzQ4OUQ5NjRGNkNBRkI3MDVCMTU4NzE5MkMxQjkzNjEzREUyNjEKKworNDlGNjIzQTk3OUIxRkM4Rjg0MDU5MENGMjJEQTZCRDU2MkU2MUMxMTZENkM1QjU0NjAwMjlDQjVGNDZDMjY2M0Y4MTQyODRGNTFDMThDCisKKzBBQjFGOTk0QkVGMDhDQzc3NUI4N0UwNjYwRDhFMzk2RTQ4Rjc1NDY3NjgzNjE3NkI1NjgwMzREMjZCNUUzMkY5QzAwQjVGQzA2Q0JFMAorCiswQzEwMDU5NTdEMjJDNzVERTE0QzhBNjU3MDdGODA4MUExMjk1NUQ0RUE1NjYzRjZBQjgyM0VEM0M3MDk2Mjc3NzdCQjc3QUFDRjNFOUYKKworN0Q0NDMwM0FFNzkzMUEwMUFDMzM0NjQ5MTE5NDZGQTc5MjcwNkEzOEFBQTY0NTAyNTI2QzA2NTQ4RDIyMjZCMTBGQzQ1QUIzMzc4RUY4CisKK0EyQjdBOUU3OTYwRTA4RDcyRUUwOEU3MUU2M0UxNDlFQTU2QTk0MUVDQ0E5MzhEN0UwRTRBOTQ2OUI4NUZGMzIzOUYyMEUzRkU5MEE5RgorCiszNTlBQUFCNzYyM0M4RkEyMUJDRUQ3QjQxRDkzOTdFN0M5NzYyN0MyMEUyMjlGMjY4RDNGQ0JGNTQzREVDNzM0Mjk3MTUzRTkxNjU3NEMKKworQzQ3MjNDRTU0OERGOENDMTg3QTVERjM4NDQ4NEM4MUE5MjFBOTBFOTFFNkNDQTBGOUNCMTEyN0YwM0NCQzBFMDE4NDc2MjQyODEyRkQ0CisKK0M3NUEyNEU2NzVFQUQ3OUY2MjYxNTA0RTcxQ0NBM0U1MjM1RkM3RUI0Nzk4MjU0MEFBNUE3NTREMUUyOTYyMTM2OUQxRUE4RURGMEJFMAorCis4RDIwOTQyODhEMDNENzdDRkVBODVGMDREMTdCM0Y0MUIwN0U2RTU3NjQ5MEJGMTMxRDNGNzgyMjdENTY5RjM2OTFGMDEzNUZERDZGRjIKKworRDJCMjEyRDdENDEyMTFBMUI3RUEyQzlGRTJEMkZCNzkwNjVEQjUzMDE0OTg4MDJCNkUxRTgxOTQ0QzU3OTlBQTc4RTNEQzZGQzcxQjk5CisKKzVBOEM1Njk1MDFENEYyNDQzN0RGM0I1MTBBMjM4RkJBODEyMEFBRkY1ODIyNzI4NUM2QTEwRDA3NTZGMDRFNTE3MTBEMzRDNUIzRUMxMQorCis2MzJBODZCREREQThBQTEyQThDNUY0ODk0OEUzNjdGRTVFRENEM0Q4RUI4NUUzRDI5NTYwMkRFMTlCQzFGNURBRTk2RTFBN0E5Q0UxOTIKKworRjlGOURBRDBCOTIxQTk1NzJFRDFEOTJEQUE5QUZBQ0E1NzYxODc5NDAwRkMxRjExRjNBQzBDMUQzRUY5QkU1RUFFN0Y3QkM5NjNDQzFGCisKKzE1QTNEMzZCNEE0QjI3MjVBQThEQkM3N0M2MTkwNUVBODIwQUEzQ0MxRUFDQUZCODE3Q0E1MzBDMzJGNkQyODFGMEY5QzQ1RjE4REU3NworCiswOUFCRjMwNTFCNThCNUI4NTczNTBCQ0Y3RDgzRDYyMUI4OUE2OTE3RjJEMzFGQ0NBMzNEN0Y4NDlBNzhBMDI0MTFBMTY4MDVCNTQyQ0IKKworQkI5RUNBMDg3Q0YzMjBEQzhBNEU0RUY2QTFCMTkxM0E1NDNFNjJEMzYxMUZEMTE5NEIwMTk5ODdGQzFCNDU0MDM3Qzc0NzczQUE1REI4CisKKzNBOTE2QUZCRDU4N0MwM0NBRTJFRDdCREU0QTczODcwNjA0MUIyRDIzMzIwMzlBN0RDQUZDQzQ3REFCQURGRUFEMjdGQ0Y3MDcxM0RDMQorCis3NTFBRTM2ODEyNjc5NjFFRTJDQ0ExQjIxNTk5QzJCQTNGMzQ0OERGNEJEMEJGNkQwMUQ4RUQyQjJCNzBFNkE0MjU4NkQ5ODVERkZENzAKKworQTY1QjY1QUEyQ0U1QUExNkRCNkY1QjkyMjg0NDQ5QkQ3QzcyRDgwMkIzODRDQjYzRUY3QjdBRTUxQUNGMTZCRTU3NTA2ODAwNUVBMUMxCisKKzI4OTk4NzNFOUZBNzZDQkI2MjY2MzJBRjQ3QUQ3QTBGQjNBQTY0OTlERUZGNTQ3NjI5OTEwQTFCMzAwNzhGMjNDNjUzOTY0NDZDNTM5OQorCis4NEJCRDBFNDE2NDMwNzk4Q0VGODE5NkQwOTNFMzFCNUZBNjY1MDU3NEYzMEQzRkM0NzkxNzlGMDBBMzUwNzE5OUJERTgyQkM3MTczQjAKKworNEVDODAxNTY3NUFFNDJFOTJFMENDMEVGN0Q5RDgwOUVEQzZGREIxMDM2NThEQTc4REVEMDc1RkM2MUNEMkNBRTRFQUZGMTQ1OEYxMjYxCisKK0Q5QkUyNjE2NDJERjMyOUMwQjBEREI1NzEwM0MzOEU4MjNFM0JGMDlDNTk4ODEzODhBQUY3RThFOEJFNDE5MEI4MTFDRkY4M0FFODRCOQorCis2NjRBQ0IzMDhBQUVFMjQyNTNEQjBBNTk1MjAzQkQzMDVBMTlGMkE0MUEwNTRBNjE2Q0YwMjg1MEFENEQwMDA0NUVDMDM0NzkyQTcwMTIKKworNkU3RjEwQ0QzOUM5MTlDNUU2Qjc3QjJGNjMxMDgyNjZBQzM4ODJCNkZFNUFDRDczMEM0QTc5RUI0NTQ5NjA0RDMxQjcwQkI4MUY5REEzCisKK0IzRDhCRkFFMUMyQTdBMDAwQTU4ODRDRUMwMjVGRjQxN0QyMDM2MkE5Mzc0RUNGNDA5MzZFOTNFQjc3MzYyQ0U2NjM3MEYxNjkyNzEzNQorCis3NEY2MEU5NTZBNjlDRkJCNzBCQjU5QTBDQzQ5N0JEQ0Y5MTA4NzQ4QjU0NjYwQUJBRjNBRjdCQzU3RTcwQkFCMTlDNEVDNjczODFDMEEKKworMzY3MDkwNDJBRkY5NDA0Q0Q2MDM5Q0MyMDc3QzlCQkE1NTI0OUM2NTA5Nzk3OEQyMEU1QUU5Q0NFMUEyN0E3NDc1MkVCQ0Q0QzUzNTQ2CisKKzNDNzRCOEQ2RUExODdDMkQ1NzVFODlENUNGOTAzOERBQkE0RTVCNkIyNDBDNUE4MjYyMzVGREFFMEYyMkU4QjREMjlFNEE4Q0RGNEVENgorCitBOTE4NzZGRjA2RjVBOTAxQjZGMzRDOUM4MTMyRTI3QUMwMUI2QjU3QUUxQjMxMkZDMUMyNzgwRTk2MzAyODZDOTMzRkM1QUQ4NEJDRTIKKworQ0ZEM0RDRUExQzdGNjIxQTFDOTY5NUQ2NTg5NUMzMkY5MjI2RDE0RUYzMUI0NjFGQkI5OEQ0RUQzQzJFRTYyNDc3RDY2NUI5OTk5M0E4CisKKzBGNDI4ODVBMTJFNDU0Q0Y4RjQ1Qzk2RTAwMkJBREM3MjE1REUzQjEzNDFDMTFERDVCNzgxNjdENzZEMTM1NDYzMDdCODkwRjg3QTE5OQorCitGQzJDREI5NTA2NEJDRUQ4RkM1RTBCNTAyRTdBNTg5RUE2Q0MzNkYyQjkzNUUwNUQ2QjRDQkQzOEUwQzNCQjcxNDQxRjA1RkQxRjIzNEMKKworNTQ5MDU0QUY3RkQ4MDY1Mjc3QUZEQjg5MTQ5RkRCNkNGNjRBNEU1Mzc1RDNFQTYwOUQ5MEQ5NDVFODdBOEEyQUFERjdENTk2NjdBREQ4CisKKzE2RThDM0Q5RjkzQjA1MzQ4OEY0NDA4MTc3MDQ4RUE3N0EwNUY4QjM4M0UyNDkwMjJFRDM4NTNENkZBRkQ4NzVGQTM5NzU5QUQzQkU3QgorCitFQTZBMjhDNDkzMTJENjgyMEVGMkJFQUFFQzIwNThDRjk3NTZDOUVBRTUxN0ZDMDZCRkI5ODE0MTI2NkQ3MEYxRjY1MUI5MEEwNjlERUIKKworM0EyRTY1ODhEOUJGQ0VCM0Y0QjVBOEUzMEMyRTgyODI5Mzc2QkVDOTc5QTZCQ0YzRTREQzY5QTZGRTdCQkJGMDVCNjYzOUI5NzE5MTM2CisKKzFBQUEwOTlGNEJDNDA5QzE3OUUyNTI0NTJFOEM4MDJBMTUxN0Q5QzZGREEzRkIzMDZFQ0JCQUJCMkREMDcxNzQ0ODQ3NzY2ODdGNEVCRgorCis5QTA5QUI1RjMyMTZEOUVCODU1MDgxMjVCMjM5RkEyMjg2N0Q4QzQ3RDI5MTkzOTBFNkY1NjA2REM5RERBQzJBMkM0RTQ0NUZBOEZDRjcKKworNEU3M0IwNkM2Qzg4MDg1QjExNkVFMjg3NkUxREE4MjBGMkM0QTJFQzI5RTAzNjA2OEU1RTUyQkQ4MkZCRUU0N0Q2NzFCMDQwRDc1NzcyCisKK0E5MzMxNEFGOTI5Nzc1M0EwMTIxMkZEMkE3NjI0REY4OUEzMDZBMTk0MTI1OTI2NjI2NDkxQTNBRkI3MENDQTVFRDBGQjE0RjYxNjlBNworCiszNEZBQ0MzRDFCQzY5Mzg3MTk4NUQ1MUIwOURBNzVERTkyN0IwRjVFNTk5NkJCM0ZFMzg1MzIyNTBENzZBNkI4NzY3OEFGMTMzMzFBMEYKKworRjdBMzc3MDBCQUIzMTcxQzUxMURFQzg4RTk5OEQyNTAwRkUwRDcyRDdFNjNERDM1QUZBOTgyNjY0MDY1RkQyRkRDNTk5OEM5REY4RTUxCisKKzY5QzNGMDM1Mjk5QTVEN0M1NDQ5MEIxNzVDQTQxRTQzODgzODM5QTZDOERERUM4MjEwQ0UxMzE2OTU3NzdBNjA2MTMzRTIzRDM2RTY0MworCiszMzBERTBENzIwNUQ1M0I4OEQ2RUNCNUJFNkQ5NTc5MENDN0VCN0EzM0Y1NDVGQTJCMUIxRkNEN0U4ODc4Q0Q2Q0I1RTA0MkRFRTRGRTAKKworODc5Q0JCOEYwQjIxQzE1NTU4OEIwNjcyREM2QzhGODMyNjQ4RTI5OTUxOTI1ODAxNjMxOUIzQkU3MjVENTg2ODRDNEJFNUQ2OTJGRDUwCisKKzI1ODkxMjIzQTU0RkUzNEYxMERFODE2QzQwRTVCNDk0NzAwNkFDRDgzNURDMDFCMkFGODRCRjQzODBBMkQwRDU4MEFDMzg3OEY1RDQ3NgorCitERTI1NjRGMzE1MjEzRjdEQ0Q2Njc4NTI0MDk0RTg1Q0E0OUJBODI0OTlBNUNENjlCNTk3ODcxRUNDRkIwNUNDQzQ3OTFCOEJCQkU0NUQKKworRTgyMEUxRjQwMjg4NUQ5NDdGMUFFNjIyNTQ1MUU1QzMzQzhFNjVGN0Q3NzE0QzZBNkU1OTEzMUU4NTk5QTRCMTZFQkJFRkQyQTg2RkU4CisKK0UyNkQ5Qzc2RTM1Rjg1RkQ5RjhEQjZFRDM3NjBCMTIyMjRFRDM4OTc0Q0EzOEY4OTRGMDMyMkNFRjg2MzRGQ0E2RjRDNTY0M0I1RUFBNAorCitEOUU2NTI3NEJCNUEyQTM4MURCRThBMTI4QkM4OENCNEY2RTA0QzJDNUM0NDI1RjM0NzQ3OUQ4NjE2NEJBQTNGMTkwMDA1MDVDQkJEMjgKKworQjUyQ0QzQzhBMzM3NzRGNDU5OTkxMjlGNTFBN0JGMThBNTRCNzE3MzhDNTM0QzVGQUFFNTAxMzE1RUE1ODY5QzZEMUNGQzY3RDBBQjlECisKKzU4NEI0MDI5NDQyNUFCRTM1RjJFOTIzMDI1QTcyMjc2Mzc4NzZFRDNCNzQ2QjY2NzRENTJDQzREQTY3OUQ1MzE3REVGMEVENTdCM0M0RAorCis5MzBBOTZDMEZCNjkyREREMkNCQ0QxMTM3OTlGQzRDODAxNDcxOTdCN0JDOUY5NTE0QUEwQTk2RTA3OEMzNjAxQjMyQTlGNjkwREMzQUUKKworNzBGNDgxREQ0OTY4OTk1QUY2NDVGQzBFOTdBQUEyMkM5OTFBQzExQkYzQTU4REY0NkZGODRDRjhCNzZFMjQ4QjIzQjk5ODUwMzhFNzM3CisKKzBGRTY1RTBBRTU1Nzg2NUYwRUVDNjNFRDdGNEE5NjQxQ0YwMjgxMEUzNEI4NzY3NUZEMDhFQkM4ODAzNjg0OTFGQzZDN0QxQzlCRDI3MworCis1NTQ0QkRDOTVDRTBEQTNGRjExQkY4OEU5NjgwQThDOEY5MUVGRDY1RkQwNEMwMDk0REM5NEMyOUQwMDY3MzhDRDM0MEVBRTA1ODVGMEUKKworNjU4REUyRDk5MDcyMTg2MTJCMjE3MjI4Q0RGQjhGQjQ4OUFFQkY3RDVDMDVDNTk2MkY2N0UwQTM5OTc0QzU2NjVCMzMyMzUzRkFFMzQxCisKKzlCMTA1ODM5ODQ5Q0RCODQzRTkwOEVGMTg0RDBERUEzRjRCMUM3NjY5QTk3QzAzNUE4NkZCRUNGMkQyREE5MDVFNjgzODMxMzE5RDYyNgorCiszODk1RERCRTIzOENENTQ5M0M3OUY5RUExOTk1ODU0NUZCRkY4QjA4OEU4NkY2RDg1QkFCNkNEN0ZBMDNDQjg2Q0IzQUI5MDUzMjlCNkIKKworNTM4NDU2QTFDNjhBMjYwQzEzN0U0OTdGMkQ3QTYyN0MzOEQ1NzAzMDI3MTIwOURCRTRCQkYyQTQ4NDc0NUU2RkNCOUZBOTMwQURCQjYxCisKKzlGNjQxMThFNzc2MjA5MjU0NDlERDZCRkE0QUQ4ODM4QUY4MUJFREQzRkU5RDBDMTVFMzdCQTQ4QjMzRDYyMDFDNjcxMEJDQzMwNjRCMworCisxNkI1MzVFMDdBRkZENjA2NUNENUEyNzM5REZEMDYxQzFDNDY0QjRBQzU1MjZDNEU5M0Q0RjMyQjFEMDlDQTQyMDBEQUNCNzlEQzhERjIKKworOEFFQTZDMUU5QkUyNDQ2MjIyRThGRTE0MTc4NkZFNTE0NkEzMDgwMUMwNDQ5RDlFNzE0MzIyNjk0ODg2M0Q1NDAyNzEwQUZFQzQzRjlDCisKKzMwRDg1OTE1RTAzNTRCOTZFOUJGNDM4RTYyRjlGQzNFNzRCNTU5OTU1NUQwQzcyNDgxRkNGQkI1MTM2RDRDMkUwNjRGOTA3OUU3MjU1MgorCisxNUM5RTQxNjZFRTEzMEJBRDhFQTMxNTlGMTU1OEU0OEE0RDk5OERBOERBMUIwMDJDNzJFRkM0RjM4RThEQjczOTZERTAzMURFNTQ4RjkKKworNzZERThFMEMxMUFENENEMzk2RDRBMTFDNUI3M0M4RTA0RkUwNzQ2QUMzMDBEMkNEMDREN0U5Q0VEQzFENzhGQjlFMTJBODRFRTIyOTZECisKKzg1NkI4OTA4RUFBNzIyREJDRDlDN0U3MkEyRUE0NTc1MUZFMjM1QjQ4ODc5QkE3NjEyOUY0MTIzMUZGM0I2QTMxQUE1MUUwRjhGQkNEMQorCis2NUI4OERCQjdBMzUzRjBCMDRDNTU3MjlCRDM4NTFBNEZGMzJCNzVBRUQ1OUNDOUFENDk4NTExQTZDMTA1RTQ5RjBERkM1Njg3RTgyOTEKKworQzMwQTZBODI2REZEM0MwOUEwQ0E4NzZCNEJFNDhBMjIyQ0VDQkJBMzkwQzVERDgzQkY1MUU2RDFDNzJBRTQ2M0FDQTVBRjVERTkzREUyCisKKzU3MjdBNEQ3MEU3QTI2N0ZCN0EwQzEwRDVFQzM0MUNERkFEQkQ1NjkwNUU3NEJCMDJGNDQ2RjkxOThDQzhEQzkwM0M1MUFCQUJFOThGNworCis2RTc1ODU3RTFEOEYxMjIwMTA5QThCQzU2NUQyQ0VCN0UzQjgwOUUxNkQ4OUE4M0RDQTJEOURFMEExNTU1MjI1MDJGRDM2RTlERDhDQzkKKworMTc1NDBENERFQzhDRTIwOUYxMkM2RDYwNzg0NzBBNkU1RDY1REM2ODVDMzBFQTU4MUUzQUU1M0FGQzg3Mjk5Mzk0MEYwRDBDODlGRkQ0CisKKzFGNzRBOEZBNzMwQkJBODJGMDI5NkE5QThGMTMzODEwQjRCREQ4OTAzRTcyMkM1Rjk1QTg4N0I0MTMxRThDNkFGQ0QxNEYyOUZGNDIwMAorCis2RjA0QUNEMEYyNTcwQzEwM0YxNTREREQ0QTVDRjA5MTY5QUQ1NjU0Mjg1NTE5NTA5MUMwNUI3MTM1MjEzNEE2NTVFNkJDODRGMzc2NDMKKworOTNBMTA2MDU3QjczRjU4RDhFN0Y5OURDOUIwQjE2RTFCRUQ0ODQ1Q0NGQUU2MzI1MDI5OUYwQjQ1NkJCMkNDOEI5MDk5OUU2MDczQzkyCisKK0E5RUZEMjRCQjJGMjM5ODQ0RTQxMkExNUM3NzgwQkUzQTYwRkYyQTY4Njc3OTQ0MEIxMUU5REUwQzQyNTQ3QjNEODlCMDU1NjI5QzI2MAorCitEQTc5ODkyMkJBQTU1RkZGRjJEMTI1M0E4NURBOTM4OUM5Mjg0QTJFNDdCNjFGOUE1Q0JCMjBFOUUzQzkwNkFBOTRCMjExNjc3RjA3MTYKKworNzA3QzI4QzM5Njc2OTQzMzE0RTUyRkMyNTBERTQ5RThBM0RCMUUwNDI0NDNCNjY1NjhBQTM3RDA3MDlERjA0RUYxMzYyRTVCOUJGMDgzCisKK0Q1OUNEM0JDREZGNTBCQkIyNkI3QzhDRTM1QThDNERFOTZGMkU0MERCRDlEM0NDMDRDMzk4NDE4NDRGMzBCMzFERDI1ODI5QkVCQjczMQorCis4RDJFMURCMjkwOTYwRjU0RDE0OTgwOTVEMjBDNkYwNUY3REI1N0EzQTlGRENFNUQxNTRGRkVCRjM2RUQ0MThCRjVGQzA5NjVCRjdCRUIKKworRDE2QUE4REQzMUU1NjIwOTVCMENENzIxRjgzNDlDMTQ3NjY5M0Q4RUUzNjhFRTE0OUMzRDI0MzY5OEY1NEZCQjVDRjgzRjY1QTZGMTY5CisKKzNCRjE1MDE3NzU0MjU5OTk0Qzk5M0M2NzZENUQzQjVFMEU4MDVBQkQ1QjUxNzVFQzU1QzNEMUFFRTZFRTc2OUJCMUM2MTQ0MjZEM0UyRgorCisyQTMxNjdFQUYyQjBBRjVCQjY4RjAyNEMzNTEyNTQ4N0MzQUM2NzAyMjdGQzRCNzgxQkUyQzVEREI2MzEwQjU5ODE3QUJEODJENUVBRkQKKworNUFERDdCQTRFQzBDODlEQkM2OEQwM0MxMkVGQkZDMDUxMjE4MTc5NDk0QjBCMDFEQTUyMzE2NTcxN0QxREVCNzA2NTZDNTczQkY3MDAyCisKK0E2NkNBRTRFNjlCNDJBQjc2RDIyRTZENUMyREEwNDMxMDM2MDRGMDZBMjk0NTkzMEY0MjFBRUY5QkIyOEZGMTA2N0MyOTdBNkQxMEU1NgorCis2MjA4QTFFMDAxQkM4RTI1MTREQzZBOTRCNTU5MDM5RjEwMzgxQTVCMDMxQ0ZDNzNCOTU5RkUxRDI3MEUwN0ZCQzJDNEQyQUNCRTg4QTYKKworODhFMUFBNEQ5RjQ0MUI4MzFCNkUxRTgzRUQ0QzEwMDFCMkYzOTMyNjQ5NDgyMzUzMTJFODNGMTJGRjI0QTMzQUE4QTMzMjI5MkVCRUY4CisKKzk1MjY5Qjc5MzU2MjczMDQ4Njc0N0FGQjc5OTM4QkE3OEJFRjkyNUNFNEM5OTREMUQ1OEM1MTE1Mjk2RDI3RDcyNzVCQzQzNThBOURBOAorCitDOEQ1MjFDMkI1NUY1MDU3QzI4NTRDQkZBRTBBRDM2MUFFRDA4M0Y4QTYzNzIzRjdFNTM1Qzg0RkUyNTUwNDM5ODRENUFDMzg5RjY1NTAKKworMjBBM0ZCQUU0ODgzMzY2QUZGQjlEQzdEMzdGNEJFNDJBM0E0MEFBNzQ3NzIxRDc2M0YzRTgyMDkzODVGODIzQUMxRDcwNzZEQjgxQzhBCisKKzAwQTMzOTk4Q0JCMkU1NzREOUM2NTU2M0U0QzI0NDI5REZGQzBCOTkyQkYzNDc3QTkwODkxQUQ2QzY3QkYyNkFDMERBMzNFRDNBMjZCRgorCis5QTUyM0RFNEE4QTI0QTRFRUNBMzU4MUJCQkE2QjE4Mjk2MUVCN0FGNEZDMkY1NjkwNEMyNzgzN0EwMDM3M0MwQTQ5RjgxMjFCOUJEMjEKKworOTdGMEJDNjU1OTJFRTBGMUVCMURGOTNFODdGNDUxNEJDNUQ3NjA1NzZFM0EzOUIxODY4NDY4MkMwREQ4NDk2RkFGOTM5RDVGQkM5MDdDCisKK0Y3NzY4Mzc5MkRERUI4NkFBOTAyQzhCMjIzRUQyQ0Q5NUQ5QUQ5REJENTIyMTVBQTA1RTY5MEZBMjI4MzFFQzFFMjMwOEM5N0I4ODJBRgorCisyRjEwRDU2REUwOEVDNTI2QjRFRDY5NkExNjBFMTM5QjU0MDcyNjhGMUUxN0E3MTBCQTRGNzFBODNERjUzMTU2QTk1QjEyMjRFNUREMTYKKworQjRGM0VBREUwN0I1N0Q5RkEwNjRERDQ4N0Y0RTg0RUFGMDRDNjlDRUUyQkI4REI4NDExODQ5Qjg4M0VEODEzOEUyMDIzQjgyQ0NBMjIyCisKKzgyM0UyNEY4MEI4ODE2OTM1QUMzMEJDRTE4RTkwNTZCNEU2MDk4QzdBNzhBMjUyOTczQUExOUE2RkQwQTg3RDQ4NjE3MjkxQzNFODZDMworCitDNjE0MENEMjI1QjEzOTA3MEIyRTU1RjRCRjJCRDFFNzUyREQyRjdDMkMwMTYzOTM4QjFDQURFNkI4MEVFMEU0QTJBQjgxMTYzOTE1N0IKKworMDFFOEIxMUJCMDJGNEMzRDA5Rjg2RjZBMTc4RDBERTVGREY4MDRGMTAyRjQ4RDY2RjU4NTBDQjY4NTc0OEZDM0RFN0UwQTY1N0VCNzdFCisKKzczMTFFOThDQTgwRDk2RTdENjBBNkExOTIxRURFODU0NDE1QzM2NDQ0RkMxQzRFOTBBQUEzMkQ2NzVCRjZCMzZFQTg3ODE4NjE2RUE4MAorCiswQ0QxMjU5RUFDRUE0MTA1RjFGQUYwRDM4QUFGQzFCQzQyN0E0QjNBQjlDODNGQjIyQUJFOEJDMkU2MDdDMUVFNUQzODcyMDA4MUVDNEEKKworNjNBMjE3NEU0Q0RCNDZFQUVEQzFENTM3NzFFNzJDNzYzQzdFRjk4RjlDRTlFNkQ5M0JFOThFNTAzNTcxQ0ExOTkxMDY2N0U5OTAwREMxCisKKzY1RDc4RUFEMTBGODc0OEQyQzZDN0JEOUFBNTU3MURGNzk4QjYyNkUwQ0NEMzkxNDE1RUYyMkQ3OEFERkIxMUFDMTgyMTQ3QzUwQTE0QQorCisxNTNGQjNEQ0IwOTFEMzcyOTA4OTFDM0QxQzQ0MDEyNzE2RTg0RTdBQTM5QjU1MDg5RDEzMzcxODE5NTBEQTVCRjUyRTM5NzA3RTFBNzUKKworNDM1ODE4RTQ0RkMwMjY5RjZGQTRFMDM0QzE4Qjk0Q0MwQzZENDc1MEI0MzcyRDI4RjI0Qjk4MjkyN0U1QkNDOTEwQzY2RjgyNjRGNkFECisKK0I1REQxMUFBNDY1MzRGNkYwNTdDQ0Y2NTBFRkQ4RjFFNTY2NjdDN0I5OTU4RDU2MjlCMjI3RTEyMDM3QzA5OEM3QUI1RDU5ODZCQzBEMQorCisyQUU1QUU1NTI5ODFGRkJFQTFDMDBDQjZDQzVFQTk4OEEyOTQ0QzdGM0EyMzg4ODY4MzFDNDhEQzgxRjE3OUI5RjhGNjg2RDdEMEQxQUUKKworNDM2QTA4OTdBQTYyNTVEMzA0MUMxRUZFN0ZDNkFFRTY1QUQ4NjA4REJBQ0IyQzQwQkEzQzhFMTc4RThGMEJDMDREMjczNDNFMzlDM0I1CisKKzkzNDk4RkFDODg1NkVEMzE3QTE1Q0VBQkIxRDk4ODBEMUExNTZCNENBMEUyQUU5MEQ0QTQyRjIzODM1MjNDMjFERUNFN0QxQTkyRUVGMgorCiswOUU4MTFGNDRDNDcwMUMxNzM3RTdDODk1MUMxNDBGNDQ2QUMwOTkxRkNCQUNCOUE1RDhBOUEzNkMyOUE3REY5RkNCNTQwNTAzNEE5OEQKKworNTU2OTAwQjcyMzhBMjlFNEQxQzQ2NzcwRkI4NUExQzlEMzQ1RjU0RDNGMDFGQTk2NkY2QTFEQjkyMTNDMjE0MkFFNkM2RTg4M0JBNUE2CisKKzMwN0Q0MjhBNUFGQzBFMDlBQzI2MTcxQUU1QjM1OEFERDExQUU2NzAyMDk1QkY4MzJBMzVDMzNBMjZFMjJDMDZCNjBFN0IyMTdFNDM0NgorCiswOTc5Mzk5MjcwRjU1NTlBMzhFQTg2OTg2MzA2MjExQkYzN0QwMUJDMDk5MEMzOEJDNENFQjAzQzc2QTlFRTk4NEE2QkUxOUUwOTZEMzMKKworQ0Q1RDE5NzdERDIzN0M5NjAwRjE4RkZFRDA0QkJCRUZGMDI0QkIwNjJDNzNFQzEyRkIwMEU1RTFENUVBMzIxNDkwOTM0NTRFRjI3MEMxCisKKzRGOTQ0NDZCNTVDRTU2QzlCNzAwQTEyQUU3MTE5RTc4MTJBMTQ3MkJDNzBCNTJCNjdFMzA2MDhEOERBODEzMzFFQzlFMEYyNTg3QThGQgorCiszNEYzREYzREYwNDc2MDQ2ODMyQjM3MUYyMTBGNkZDODI2OEM2N0YwN0FERUFFMDI2Q0ZDMTkyMUJBRTQwNTI2ODBDRkNCMzczMDU4MDYKKworNTI5RUJGNjNEODMyN0ExRDkyNEE3RURFRTE5NTVCOTQ0NTEwRkVDOUUyNDNDODcyRjEwRjUzMDFCMUQwM0MyQkEyNDhCNTdEMUUxMDI0CisKKzJCMjY2QTlBNjE2OTFFMUU5RTA0MjFBODlFMEQyNjdDMUM4N0RFREExMUYyNUVBQjg2QTY5MjBCOTBEQTYzREE1MjQ1QUY2MzlDQjY5RgorCitDNEU4RjEyQzkxQ0FBMjY2MTBBMUIzMjFGOTFGOTBDNzk3NzFDOTFEQzREMkY2ODg3ODY4RDgyQzkyOEU0NTc0QzBBMzk1Q0ExRkQ1ODIKKworNTQ5RDYwMUY5Mjc0QUU1NURENkYxNDZCRDJBNDQ0MDg4OTQ3RUU5RDE5MUZDNUFEOUY1Q0U1MkQzQTI2N0ZCMTY1RDU1QkY3MEE2QTgyCisKKzEyMzQzRTczMjhGRUZCRjMwODNBRjUyOEZFQzgzOTYyMjg2NzhBRTIxNTM1NTdGOTMzOTlERTU1Qjg4MEIwMjBBOTIxNjg3QjRCNDcxOQorCitERTA3RUM1N0YwMEIyQkRGRTAwM0E5NUUzMjExMTE5QkM3MkY0NjhBRUQwMEVEOTJBMTg0M0EyOEFFMTA0MTc1MjMxRjhBMjQ2QkQ4QzUKKworRTBGMkZFQURGNjQzNTQ3RUQzMTIwQkY0OTUwRkNCNzFBQjMzQzU5MEM3NDAwNkE4RjgyOUQ0M0E5QzcyRUFEQkM3RThBNDhFRTNFNEVGCisKKzJDRTg0N0QyNzVGMUQwNkIzMDVEQ0EwQTdGMDIzNEQyNDFBMTg3QTNBOUQ3Q0NGMzkwRUFEMzA1RTVEODkxMTBCNUQwNDUzQjJFMjlERAorCisyRTBFNTMxM0Y4RTVGODI0REQ1MkRDNTE1QzQ2QTRDRjRFN0U1RDYyMkM1OTBBODg1NEM5REZFNzI0Q0IzNzdGMjY4NTA4Njc3QjcwMUYKKworNENEQ0ZGMzUwMkQwNzJFNTk3RTNGOUQ1RjNERkVEOEJDRDQyQUE3RUZBOTZCNkE5M0E0MjY0MjA4ODIwM0IwNzVFQzVDQjk3MzJFRENFCisKKzQ0ODM1MThFQTZCQzA0QTlCRDUzMUZBOUQwRUQ2NTI1NkVBM0ZBRTBCMTQ5M0ZGMkNCOEZCQTRDN0U1RDhBRTFDQzI0NEM4MzRFMDBFNQorCis2OTQ1OTRFRTlBNUE5MzI1QzhGRTk1QzJGNkZGODQ5NDQ2RTQxNzkxOEQ4OEUwMEU4NkQ1OTY2NEUxRDk2NTMxMEQzNTQxOTlCRURCQUUKKworNTM2NkMxODNERjFENUQxQ0NBNUU2NEE0MzRDNTA2NzVDQTRGMUFDQTk3MDQyMTVCQzVBMUZDRDRDM0EyOTZDRDIyMzg5REQ4MDhDQ0QwCisKKzg3QUFCOTIxRjVFRDExRjM0RDJEMDMzNDg2MUYyMTQwODNCQUM5NTQxQzA1RDc4QUJFNUFCOURGMjUzRTdFQzQwQUIzQThFNjlDRTczMAorCitBRUFCNjEwRUY5MkFGRUI5MzczM0M5Q0Q5NTkwQjFCMUQ4QTNBNUU0NEQyMkI5NTI4RTQyOUNERTdBQzQxMjNDMEQ3QTg3MzlFRDhCQzYKKworN0M1NTgzRUVENzkwM0ZBMDM5NTE3MUVGRjQ0OTczREIxQ0YwNTJERkY4M0I0RDdGQ0I2QjlGRUY3RUYwOEE0RDdDMEZBQjg0NEYyRjkwCisKKzQ4NTEzQTZBM0QzOUE0MDdDMzNERDUyMTQwOTcyNEE3OUY4RTg4REQ2ODM4Mjk4RTE3NDczODI5QTIwNDk1Qzg2Mzg2N0RCOTcyOUY4MworCis5MkNERUNEMjkxQjYwMUFDQjU1QkNGOUJCMThEODczMzY0RUQwM0Y1MTYzMUVFODg3MjQ2RDU0ODBBMUI2MDFGQzc5MkRBNkI2RDM5OEYKKworRkI1ODBBMzJFNjU5QkE0QjA3NjQ2NTQwMjM0MjZFMEY1RTUxMDQ1OTQzRDJFREYwNTU3REZDOEZFRjI4N0NCNzdCOEVBMzIwOEUyNDY2CisKKzMzMEU3NjJDNTNEOEYxOUUxNzM3MDhGRUM0ODRDQTZFRjA5MEEwQTY1QTE5MDM3MEE4MDMwRjg0Q0Q0Q0Q2OThGNjVFODEyNDhFRDEzRgorCis5MUEwQzIxQzNCMEQ3QzYzMzc4ODdCQkNBOUU1RDY1Q0E2NTA3QzU4OTYwMzY3RDM2ODEwRTgxM0IwNjBFRjlCRTdEMzRENEFDMTU3NzQKKworMDZFOTc2NDBGMDRCODdEMjAzREY0MkJENjUxMjI5QzU2NjgxRDI5NkRBMUJBN0MwOUFGMzg1ODNDMDkwRDA0MDk4MjhGNDQ1QjZBOURGCisKKzQyOUEzNzRDRjJERUU2OEZEQjVGQTRBMkJERDREMkNDMjVFNDZGRTY5QUEzQzM0QTU5MjI4OERBNERDMTcwMjU5MkZCMDUyRERGMDBEMQorCis0QUZGNEZGQ0U5RTRCNzREQjQxMEVGOTkwQ0ZGNjA2QkVCNkI5MEFEMzVEMzE3OUNERkYyODU1ODFBM0QxNjFEOTZGNERFNjlFNUQ0MEUKKworQjM0NEU1RDIzRDZGMEI0N0FCQTkyRDBBM0VGRjY3QzhGMTZEMzNEQkE0RUZGODlDNzNCMzQ0NTBEMTNCNDhCNEYwNEM4N0QxNjdGQThGCisKKzcwRTlBQjE3RDYwM0M0QzFBRDA3ODczQkYzMzY3NjBFNjU1Q0JCNkFDM0ExOTdENjI1NTFBREVBNUI3QzFFRDUzMDNEODU5ODAwMEZDNAorCitCOUU3MzhFMjY3OUY1QUEwOERGMDdCQTk5NDI1MzAwMDM2NjE1N0ZFQkNDRTBFQTQ3NUFBMDIyQjA0NjQ2MTE4N0MxRUNEODVGREVCOTcKKworN0IyREY0OTcwRUUwM0M5OUU4QzI0ODA0NDg0RDdCN0E0MjZBQ0Y4MkIwNUFGRTUxRDUwODNDQUQ2OEYxNjBBQ0M5MDMzQ0I3NzA2Q0JFCisKKzY4RDQ0OTk3RUQ1NEREMEQ3NTIzQTAzMjAzNkVERTUwQjIyMDBDRDQ0RjlCODlBMUREMEY1NDFEOTc3QTE3QUQ0OUU0RjgyRkVDQjlFNQorCitGRjdDNTI1MTk2NzQ2RThGNDk5MDZCOUIyMDE0QkY2RTFBOUE2RjM1NkRDQjVDQkRCNDI3Mzk0RkNBRDg1ODhGRjJBMEVENjc0MzBGMTUKKworNzVCMkUxNjE3RjdGN0REMTdFNUYxMkUwNDA2ODM0QjI4MDAyREM3RTc0QzJDNEVCQUI0OEFGRjQzMDZDRkIyRDE3MzAxQ0JCMjM4QUMzCisKKzg1QTQxNENBODRCOTg4QzVFQzVBRTI5M0YzQTZBOTQ3RTcwRUM0QzdGMDk1NkFFMTIzRUI3OEU0NkM4RjlCMkU3REZDNzVEQUU2RTUwOQorCisxOTg5MjI0OTAxNEJFREE3RkQwNjY0NUU2REI5MThBNjA4RUY0QzM3M0U3MTc5OTIxREQ2RkQ5NDgzMkMwRkQ5QzE1RjU2Rjc4NDY5NEEKKworNzc4OEZCMzNCOUZCQTdFQjlCMUExOUNGRTU3NkNBOTkzRjBGRkMzMTM5OEM4OTE2N0Q1RjFENkJEODg2NzAxQjA3RTc4Nzg1MTkxMEQ2CisKK0IwQkY5NkI1MUNDMUM4QkQzRDBCQkEwMEZCRDAwODU3RTQzMjlDMUU5MDkyRTIwRTQzOTU5MDlCREJEMzM0QjAyNzI1MEJBODU5N0Y1NQorCis3OURGRDU1Q0NGQjU3MjFGQzdBNTU1NDEyQUJFNDlFM0REQkYwOUY3MjIxMjBENjgxQjZCMTlGQTAwMjZDREMzMDk3ODk3NkRFODM4ODcKKworNjlDNjhCM0MzMjFCNjExM0QzQUUzMkZEMUJEQjdDMUYxRkY4RjREREFFODFGRkMxMzFBQjgzMTZGQUIzM0I2RkRFQkVFRTJGMUM0OTZBCisKKzgwNUU0QjkyMEYzODE2QkRBOEU0MTY3N0RFMzZFRTQxM0U4MEM1MDBCOUZFNEUzRUVBRDAxMTQ2MzBCQjFBOTU1RDBGNUM3NzYwMTgzRQorCis2OEMyMjYwNjBCMDUxNzI5RjZFMUY0NkM3NTE2ODM5MkQwQURGQ0MzREM1MkYyOTAzODQ5QzVDMUYxQ0M0QTM5NDg2RkQ4NDQwMTExMkQKKworQzFGOTRFQkVBQTNBM0JENEYyODI5NzhBRjhDMkZERUEzMzY0QUNCMTEyMUVCNUY1OTNGMzMyRDhCQjNFMjgwNTMwRjlCMUE1ODA0MUJFCisKKzYzNTA3MDQzOTExOTBDMjRCRjBEQUEwNUZGODc2OEYwODRFNjg3MDQwMUZGMzQ2QUM3M0VBQzhBNjkwNjI5MEFCMkJCNThBQTdEMkMwQworCis5MDFCRkQ3MTRDNDUxODhDNzUwOTYwNTdBRUNFNkNGNDUzQjk4NTIwQUE3MzQ2RTQyRTQ0OTU0OUVCREU0QjcwQjE2RjY2RjQ4NjU1QjgKKworN0YwRUQ0OTM1RDEwOEU5MzQ5RjU3QzU3NDVFREZBMDJEODNFQUE3RUU3QkU3RDdGQURCRTY2RDYyODdBNjFDQUExRjQ2OERFOURGNThBCisKK0RDRDdENDY2N0EzNDFGNjc0OEEzNUMxOTAzMTc2N0NDMkUwQjI1QjYwMTBDREIzMURERDNBODE0MTBCNzgyQjRBNkNCNUM5REVCM0IwOQorCisyNkQyRTg2QzY5QzYzQkFGMTcwNTVBQkE1QUYzOUIyMzdDNTNEM0E3OUM1NjM5QzNBQzYzOEUxNTkyQTVDNzQyQjNGN0E2NUM1NTdGNzYKKworMENBMkU2OEEwQkIyN0QwREI0OTNERjUzNTNENzU4NDkzMDRGM0IxNUQ0MjExNUY1NTcxNzIwMzgxN0QxRjZDRTU1NjczNTlDQ0U3MDg1CisKKzM3MUJGMjNBNjA4NTFCOUJDN0RFRTE5QkJFNDBCOEJGRUVCODVEMjBDNzg4NkNCODlCMjFCRDRERDU3NDE0OTU4RUNEM0I1Q0NENDBGNQorCis3ODI1MzcyQ0I4OTI5QUQyNjgyMUYyODBGQzVCRjNGOTA5Qjg0NTQyNDg2NjVGMzlFODdBQzEyNjc5MDIzNTYxRDJFNEMxNzIxNUNDODAKKworMTYzNjAwRkJDM0IyQTM2MzdGRThBRUM3RTZFOTE0MzkzOUE5NkY5QUZGNTQ0OTQ0RUU5MTRCQTA1NEQ2QjVEMDA3MEMxNkM5OUQzRUYxCisKKzBBNUNBNjM1QzgzQTE1NEQ1Nzk5QjdGREMzMTE4MjdDOUU5REQ2NTFDQkE1REUzMkEzRUNCNDMyN0JBRjA4RDkyNEVFREJBMDU5QzMzQgorCiszRTdFREUxNTlFODNERTcxRUUwODk0QzJBNzIwMTYxOEFBMzlGMzlDQzM1NzRERkQ2NDRDQjQxNjE4QTY2OEJEOEQxQkYwN0ZDRTNBQjIKKworODBFM0FBQ0JEOUZDQjkwQzREOEE0M0JFM0I3MkFFQjlFNjc4NURFQzZFMDlBNkNCREQ5NUEyQUM3QTBCQkQ0OUQ4NkQyOUIwOEU4RjJCCisKKzk5MTM3QjJDMzFFREMyN0RFRTZBN0Y1RkFBMzlEMUZBRjBCREI5RTA0N0M4M0ZFNTk2Qzk1OEEwMUY4MzUxNDkzNjlCMDY0MUY4RUE2RgorCitGMERCMzAzRUJFNTc3MjRFNkIxMDQ4RkZEN0YzMTY4MkRBRkVCQzExMDM4NTIyNzNERDE5QkM5OEMxQzU0NTJGODQxRDVFRDdDMkY3NDYKKworNjg5M0QyM0NDNUQ2REI0NUI1M0M5MTUwODQ1RDdFQjNGNDIyN0NCNTM2M0UzQTNCRjVEQUZENjhENDE1RTI4MzZCNEFCNTM2MjExMjVGCisKK0Q3Q0JENkI1NTFCM0QwQkQxNEQ2Mzc3REFDRDQ3Nzg3NzM4RUYwQkU5OEY2ODdDNkNERENFRjBENzgwQTFERDhDRTA4QkM5QzAxOEU5NQorCitBRTQ0NDI0QUYxMDgwRjVEMjQ1RDQyQTNBNEMxN0QzRTE5Q0UzNDBFOTdDNzIyQkQ3RUM1NUIwOTczNUFBQ0YxM0ZCMkZCOTkwNjgwMkQKKworMEIzNENBQjFDMDI3NThDQjRGRTMxRkNGMjc1OEIzQTZDRjgzNTNFM0M1MUYzOTlBRjNFQ0FDMkUxMDlDOTk5QkQxNURGMTE0OEUzOEQxCisKK0EzQ0VGNjQ3MjI1Q0E4Q0M0NUI5NjJBNjc3MzFDN0RBQkQ5Qjc1NkRBRUU3REM1RTQwNzRFM0REODE4RTNERTkxMUMxRkZBOEI2QzFBNQorCis0RjI3OUM4NzA0QTYxQzYyOTczM0JCRjJGMjI3RjE3MTUxMkFEN0ZCNUU3MkIyNjdFQjBBN0I2Qzg2QzBFRTZCRUNCNDE2QTlDNDg2N0QKKworQzM3MTY4MjY0NDhERUMzQjhCMkZDMTcyRkVGNTJDMzlBMDU3NEI5NzZCOUYzQkZDNTM0MjJBMjAzMTNGMEIwNTg2MzhFRjE4NzA1ODdBCisKK0EwMkQ5QzRCOTZBRjRGNTUzNjU2MkZGRjI2QzFDQkRFRkFCNUE2Q0U4MUYyNTA4NEU5MDJGNTZCODQwMzE4ODQ3QjVFMzE4ODM2NDdBMAorCiszMDYzNjczQkIyRDBBN0IyQzEyOEFGRDI2MUM0MzREMUQ0Q0ZCMDhDNTAwODFDMjE2OTI3QzI4OTU0QTc5MTQ5QUYxMTE3MDVFNTdGRkIKKworRjhDOEExMzhBQTM0M0YxNkQ1NDBFMTM4RUNCOTgxN0Y5MUIwNDBGQTY1RDkwQURBNjQyREZDOThFNDE0RDNDOTA5QkVCRjFBNDQyRjY4CisKKzBBRTkyRjgyOUQwRjEwQkQ5OUJDMUYwMEU3MzQ1RDA1MTMzQ0EyRjNCQUVEQ0M2M0VENkREOTJEQTg2REY0Qzg1QzlENzdGQjRCMUQ5NQorCitFNjQ0OTJDQzBFOEYwNDY4RDNFNTVEMTFEOTc1OTU4NzZDQzIyMjU0MTZFQjJEMTA0MkZEOEZBMDdBNkZERDQwOEY2MTlBMEM4NEI2NUMKKworMjA4NzZBMzg2MzhEQkZFOTczRUQ3RENCNkE4Q0U3RUNBQzBCQzcxMzQ5QUIyREZCQzg2ODJDMUQ1RThBQzhGQUM4NkJBOTVBNDZFMzkxCisKKzExMzU2MDJBMTQ3QzcyMDVDNEI0OTUxOTk4QkIxRDcwQkM3RDMwRTcwMDRGM0M4MUNGQTRBMTM2NENBMUNCNzI4ODU5RjU3MDk1QTA2OAorCiszM0ZBNTdCMkFFNkFFMDA0NTkyQUU4N0Q2QTU3QkZFRTRCRkQzOUI3N0MzNDQxNkUyMzE2QTczOUEyNzA4NEUyRkRCOUE5QThBMjYwQjEKKworRTkyOEQxNDRGQjQzQUU1QTg5QjA1OTk3MzgwRTMwOTg3RDMxNDE0RUM5MTZFM0JEMzM4RDBEODk5NzUyOUExN0JFRDhBRjAxQ0FENkQxCisKK0NENEVFMDZDQjZDMDU2M0U5MUI5MTk5MDNCQjVDMEVGOEM3OUFDRkJBN0NEMERCODk4NDYwM0Y3Mjk2NzJEQzQ3RjZEODQwRDkxMUJDQworCiszRkYzRjIyRjU2MUFBNUVEQTI3ODNCNURGRjhEQzU3M0EwNkU4MzgzQzFCNzQyMDAwM0ZFRUJENzU0QjYyQkM0NjFEMzE0QjM4M0Q0ODMKKworQ0IzMzY2MEI2ODFCNkEwNDI0RDRDMTZCNzMwRjk3NTlEMUM1QjhDREM3NjlEOTZFNjc4MTcwMTZDQTUzNTZDOEQ0NTgzNkMyOTdFNUMwCisKK0NGODA4MThFNURERjZGRDZCM0Q5NjIxMkE2RTNGMTI0QUIyQjIyODFDN0UzMkI1QTExRjczN0M2Q0Q5QTg4NkIyREJDRUZDQURFNkQ4QQorCitGOEEzOTI3MDVCOEVFQjNFRTc3MTZCRTg2NUNBOTk0NjE1ODQwMjMzM0U0MzQ1QTE0M0FCQ0MyNEZGQjkyODBEMjJBMkU1MzhGQzhDMDgKKworMTRBOUY4MkNDQkJCMzUwRkRFMDQ3REY5MTdFMzRCN0Y5QTNENTIwQzk3NzZBNTAxMjI1REZCOEE1NDQwRjkxOTgwMTU1QzY5RDY5QzFFCisKKzhCNzcyQUMxQkVERDg3MEY1MTZBMjU2Mjg0NDVBNjg3OTNFQjQ2RkYzMjdFMjMzREUyRUYyNDI4NTA1RDc4RkJDRTFFOTMzNTAwQkMwOAorCis3NUVGMkE2NTkxMDVCRkI4NEQ2MkNEODg0OUIxM0EwQTJBQzVEMzI3MDBDNjYwNDYwQkJDQkM1MDhBNjQ0QkMyMUMwMjkxNUQ0NEQwNzEKKworRTY5OTc1NTJGMUE0M0U3NzFDNDFEOUE3MEU1MkZBRkFFQ0Q3M0FGOEY1MEY3RjM4RDg1RjlFOTY4RTE3OEZFRTY4NkY3NkMxN0I1RkI1CisKK0MxMjM1RTc0RUM4MTI0MzMxNTU4NTY2NzdDOEEwMUNFMzI5NzE4QjAxRTg0NjkxNjVCNTREQjZEODYxNjU4RTA3M0Q0MDdGQTdEMjk1RgorCis2OURGQkY0Q0M2RTA2RjdGNEVERTVDOUZFMDQ5MDdERTBFQUY4QkJEQjczQUUyNDMxM0YxNDQyNjE0RkE5MUNFQ0REMUZFRUFBMzZGRUUKKworOTY5MTMxQjIwMDMzNEVFREE0N0E3QjAyOUI4NzJBNzlFQkY3Q0JEMTA4Mzg4QzkwQUNDM0EyRTAzMjhFRDcwMTA2Q0M1RDk2MkJBNzJCCisKKzRGQTFENUUwMUI3NDc2Mzc1MjI3Q0FBRDA4Q0M2NjlGN0VERTM5OEZDRDQ4RTRDOThBNkZFNTkyQzYwRDI2MkQ5QTgxNEYzNjQ4NzFBRQorCis4QjlEODgxMDI5Q0RFQkVBMjI4MDVFNThDMUFDODhFQTNEMkExNEMwNkM5OUE2OTk1MjM2Q0Q1QjY2NzU5NTIxRDFDNjNDQUMzM0U2MzEKKworOEM5NDQxQjIwQUU1MUY2QzU0ODRDRDVDOTIzMDFDREVEQkI2QUJEMzJCRUNDMzI3MzkyMTkwMEQxMzMwMzIyMERCNDYwNDJDNzIwMzQ4CisKK0Y4RjU2NjBDOTYzNTQ5OTRBOUY0QkM4ODE0RkQ0REU3ODY1MjZFNzYyOUQ0MUY1MjNGOTJFNjEyRURGNjRDMDgxMDYwMDQ5MzM2OUYwNgorCiszMkFDRTRCQUJFNDQ4OEZCMjI5MkJGNkI1NjI5REY1MDYyRkQ3RDIwMzhDRDk4NTZBMTM0MzBGQ0Y3RTk0NDAyNjdBRTA3QTRFREVGQTAKKworMDNCODNEQTM2N0RCQkMzM0Y0NDlGOTg3QUI0QzkwQzZCNTRGMkZCNURDNjE0RDUwQzgwM0U2QTg1RjRCREFEOUYzMUMzQzgzRjhDODRECisKK0I1MTk2MEY0Mjk3OEY1OTc4NDc1NkZGOUQwNEMxNDg5OUM2MDE2ODE2MTUzNjBCMzQwNzdFMTEwQzZGQjVFQjdFRUM4MUZEMjFDOEFEQgorCitGNTA4NkIwMjdEMTFEQjg1MzMyNDMzOTQwM0ExNTdERDU5M0MwQzQ4MkNGRDZFNDFBRDU5RTU4QzlBOTQ4MUEzOTExNTIxNTFDNTIzMkYKKworRkM5RjE2NDc1N0EwOEY1REJGRDVGMjM5RTIxODkxNUY0MTAxOTdENTlBRDg0QjQzQUEzNEI1NzdFOUVFQ0Y2OTQwODZBREZEQjRFOEJECisKKzkyNTU1NTBEMEU2RENDMEY3RjIyQzM0RTYzNjc4NTQ1RjJCMzQ0MDBBQkU3RTRFMzEzMUQyMENGMEIwMUEzQTI2NkVDNDU0RTNGNEQ1OAorCisyNEU0NjczMkM5QjMwNEVCNEI3RjZBRTY2MEEwREVGNzRFQjdBMzU2MjRDNEY4RUI4RDQ2N0EwMTc2REU5QUU0NTdFRjY3MEI1NTY0QzIKKworNzQ5QjU0NUIyODRGNjMwODdBMkVBMDJDQTk3QzExNDJBN0U2RTgxQUM3RjQ0MUQ1QzRBRjY4RjM3RTg1MTk4Q0JCQTJENTA5QTM2QTkyCisKKzk1RjAyQTRBQjZDMDhFMDAxRTY5MTU3N0ZFNzUxMkI3QUU0MzdCQTIzRDAyM0UyNjMyMEZERUYyNjJBNUI3QzMyQzUxQUFFNTQzNzk4MworCisxMDgzRDVDQjg0Nzg5NjE5QTYwNUFEQUNCNUNEMEZBNURCRTJBNERCQjdBNTI4N0MxNTE2OTZEMkRFQzZCRTBBQjExMjJGMTlDMDI2QzgKKworOUZFNEE0OUJBODI5OEMwNTI4Njc3MzI2RjBENDFDRkMyQkI2N0VBOURFRjcwNzIyRDZFM0RGM0U3Mzg2NjhGNEE5Q0IyRTZBOTdFODFCCisKK0E3MTdCNTk3MThBNzgxOTJDNzBFRTlFN0VBMDZDQ0RCQjQwRUE3NzExRDA1REVFMjY0RUNBRjlDQTQ3Q0E1NDJFQzVCMTdEOTY4Q0YwRQorCitFMzM0MjcyREUyNjRCMjQzREJFQzQ5MEEzRkNDM0FBMzQ2MzhEQjQ5QzEyQzI1NzRCRTIwNkY1MzMzMTQyOUUyNDIwNjFGMDI5Mzk5RDcKKworNDg1MEZBQzJCMTRDNjlFRThEQkI2MTg3RDc4MkFBMEY5QTQwQzVCNEM2RTY2MzQ3NEU3QkY0NUMzMkZENDU5M0JBRjcyM0JEQjhCODY2CisKKzMxNUE4OThFMUQ0MjlBOUJBODlENjE4ODM2NDMwRkY2NjAzMTM3MzM0RTdDOUYwM0U3REI3QTY4Q0Q3OEExRkYxMTU2NkQ1NTA2M0EwRAorCiszQkYzMEE4NzcyNzEzMEU3RkI1MDI5Mzc5NEFGNUJDNDVGNTgxOEU4OTQ5QTFGNEI4MDY5MjRCRjYyOUVDNDQzQzVBQTZFMTczQkExMjYKKworMjJBMzQ2RDhCMDcxRjkxRTFEMzA1RDE1NDBGQTgzQ0E4REVBN0YwOURDODAzMDVCOUQzOTJCQTMxRDZFNzE3MjJEMEI5NDdDMjZGNzNBCisKKzcxNjYxRjgwMUE5RDA4QTdERTYyODg2QTM5MDM2MUZERUEyMkYxRkU2N0VFQzIxNTNGOTk5NjUzREVFQzY4OEYyNUI0QjlENThDODE1QworCitBNDU2ODA0MzYwREUyOTRCRkJCRkU1RDc0NUI5NDUxMUMzMDRCRDUzODhGQkI4NERBNEIzMUU2NTAxNzhDQzI1NzMxNjY3NEM1QTNFQUQKKworOTA4MTc3MEQ4ODY4M0ExMDNDQ0QxMjk4MjQ2NUE3Q0FBMUM5MDNDRUVDQTZFQUExMTY5NjM3QkQzNzBGMTkwMEM5MTQzRkMzMkRGNDRCCisKK0JCMkQ2QTRDNEM4OEVERUVDMTZDNTk4NTQ1MjA4NDAxRDA5ODUzNDdBRThCMkExNkY5OEJGOTJDQjQ5NUQwQ0FBOUYxMzdERDUzNEQ4NworCis5RDg5MDJERjBCNDQ4NDhCM0VBQzFDMzgxQjhBNzcxRjlGODI2QTFEMzNEMTJGRDQ1QzIyMEU5NEQxQzE4QjYzMEM0NkQ0MTY1OUY0ODUKKworMTZCRjZDMUE1MkUxOTUxQUVEMTE1QUU5RDRDNjVCQTlGN0Q0MzY4MDJBNTY3MzkyM0U2NUU4QkFCOTg1RDA5NDg0NjA3RDY5OTc5MjlFCisKKzA5RUIxREJBMURGQjMzQkEyOTk5QUM2NDYwNzM0MzEyQzY4Mjc0NjdDNzBFRjA2MUZGODUwOUNEOEQ3OTE4MEZBMEM5MkEzMEI4RkY1NAorCis1OUVEMTNDRDUxNThBRjNDQjkxM0RBQjRDQjcwQUJFMThGRTAzNjYwMDM0OTkwMjBGOTk2Qjc4N0ZDNUJCNEE3NjdFRjI1RTM0MTdCNEYKKworQzY2RUM3NzA2RTY4OUE1NTFCMEU0QUExNTc1NjVDNEFDNUVBNDQ1MTFEOTA4NENCNDVCM0E1RjhFQzFDODI3Q0E0MDhCMTYyMkU1MTcwCisKKzNBNjcyMEQ3NEQxQ0I0NUI1QzRFQTU2MDc2MjAzRjMyMzVCNUQxN0UwMkYxOTU1MTFBQzNCMUQyMTNDMDFCNjA0NTI5NDc3RTMwQjFDNQorCis3NzUxODA4Njc2QzNGMzEwMzkxOEZBMjI0QjNDMkM2NUUwMzM4Q0M4MUUxMUE5QUNEMkM5RjZGOTk1MDQyRTY1NEMzREVBMjZGQzNDRjAKKworQTA5NEJBRjYzODIyQ0IzMDA0RjI3ODZFRTc0Qzg2RkI4RkM2NTQyQkVGNzFEOTYxODNBMUE0Qzk0RjAxRjhDREIwQUUxRERBRDE5MkQ2CisKKzFCN0FENzA4RDM0OThCMEVFMTIzRUQ2NjIyNTk3NkU5MTI2N0Q0NUMxODQxNDhDNjFGOTlCQ0ZDMTFERERGRDIxRUQ3NkQwRkM4NjFCRgorCis3OQorCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworY2xlYXJ0b21hcmsgJXtyZXN0b3JlfWlmCisKKyUlRW5kUHJvY1NldAorJSVCZWdpblByb2NTZXQ6IHN0b25lc3NiaS5wZmEKKzExIGRpY3QgYmVnaW4KKy9Gb250SW5mbyAxMCBkaWN0IGR1cCBiZWdpbgorL3ZlcnNpb24gKDAwMS4wMDIpIHJlYWRvbmx5IGRlZgorL05vdGljZSAoQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkwLCAxOTkyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5JVEMgU3RvbmUgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBJbnRlcm5hdGlvbmFsIFR5cGVmYWNlIENvcnBvcmF0aW9uLikgcmVhZG9ubHkgZGVmCisvRnVsbE5hbWUgKElUQyBTdG9uZSBTYW5zIFNlbWlib2xkIEl0YWxpYykgcmVhZG9ubHkgZGVmCisvRmFtaWx5TmFtZSAoSVRDIFN0b25lIFNhbnMpIHJlYWRvbmx5IGRlZgorL1dlaWdodCAoU2VtaWJvbGQpIHJlYWRvbmx5IGRlZgorL2lzRml4ZWRQaXRjaCBmYWxzZSBkZWYKKy9JdGFsaWNBbmdsZSAtMTIgZGVmCisvVW5kZXJsaW5lUG9zaXRpb24gLTEwMCBkZWYKKy9VbmRlcmxpbmVUaGlja25lc3MgNTAgZGVmCitlbmQgcmVhZG9ubHkgZGVmCisvRm9udE5hbWUgL1N0b25lU2Fucy1TZW1pYm9sZEl0YWxpYyBkZWYKKy9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEgMCAwIDAuMDAxIDAgMF0gcmVhZG9ubHkgZGVmCisvVW5pcXVlSUQgMzg3OTUgZGVmCisvRm9udEJCb3h7LTE1MyAtMjUyIDEzMDMgOTUwfXJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworQTYyMzkwRjJCNjAzNzZERTI1RTZENjNDRkIyQkUxOUMxODVFRTY0QTZCQUMyOUMzNTMyOTUzNTVFMjk1M0NCM0FBNjY3MUI4Qjk0OEZBCitGRTYyRDM0RjBEQzdENjE3ODE5Q0NDQ0ZBOUQyNzZDNzIzOTE0RjI4REY5RjVBMUJCRjY0NDEwOTI2NjQxMUE2Qjk5Q0FCQzkyMDk3MEYKK0VGMTU3QUY0RjY3QUZENkI4MjU2RDMwQjZFQzI0OUQzRDJEMzEzMTFGNzgxRTUwQTZDRjFBNjc3Mjg1MjkwODMzRTk2MDcyRDhEMUVFRAorQjhFNzQwMkE1ODhGNzgxOEEzREYyNEFFQzZFRjVCQTZBMzdEMUY0NzhBQjI2NkFEQzJGMTM5RkE1QjA2OUVENzgwQUMyMzdCRDJENTYwCis1N0FERTM1MUJCMTdERERBNzA2NTIwQkVDMzg2ODA2RTNEMjBBQkIzM0U3MDNCMDM4M0NFN0VCRDIwQUVBNDBDRDFGM0FGODBEQzYzQjcKKzU2NzJCQjk3NTZDODRCRDU3MjE3MUI3MTc5NzQ1MDBGRjRBMThBRUYxOUIxQzc4N0E3NDJFNkJENTIzOUQ0Q0UxRUE5RjQzRjQ4ODFCNgorMkEzNkMwMTYwOTk0N0U5N0NFRTk5OUIwRTU3Rjc1MkYwMDkxQkNERERDRTZGQUNERjM4RDk4NzI4RkEwNjlEMzI2QjBCRjNGMDMwNjFCCis4RkNFODBEN0IxN0U2OUJEMTZGMDM0NzUwQkY1MTBCOUQzNkMxOTNFODUzNjQzQTc5NjhFMDQzQTBCNkM2ODM0ODI5N0U1MkI3MTk0REMKKzg2MzkwQUEwQTM5NDE0RkI5RjI3OEE3MkJCNEQzOEQzREU2RjMxMUVFMEI0RUMwQzM4QUI0OTBEM0JBRUNDNUY5QzlDM0NGOTcwMTI3RQorOEMzMUE2NTg3RjdCM0EyQUMyMDZCNjBEODFCQ0E4MkQ3QkY4MDM4NDlCODZEOTg3RTVBMEY0ODdBMjUyNTJEOUY1RjI0RkY1MkVCOUZBCitFOEY1REQxRDRGMUFFNkJDRDdGMTE5OTcwRDgzNjYyODI0QTE3RjUxOEYzQkE3QzBFMzU1NjMwRUNGMTZEMUIyOTMwQUI3MDBGODU5RjUKK0Y3OUI1OEQ1QUE1QUZEMDQzNDUxRUYwRTIxODk2RTlCQUM2OTdDOTlBMDA2Rjg1MDJBQUUwRjMyNTU3QkRGOUMzRTg4QjU4NjZCRjI4MAorQUZCQjYzMDlDNEE2QzU2RERDOTNDQkRBNUJBRjlENEM5QzMzQ0M1Q0M5NjE0MjM2NDI1QjkxNzAxNTFDM0JBNzBGQUEyQjg4MjJGOTk5CisyOTAyQjIzRTExQThEQUU5OUNBNzY1NjQ5RkZGRUU3MzRDRDQ1QTA5NjI0NkNDNDE4RjREQTEwNEEwRTM2MEQ4NEFGODQxM0FCNjMxNUMKK0Y3QjJEOTM0NThFRkQyQ0Y3NUNFOEU0MjlCNEZEOUEwRDlFMjYyNUI1NkIyMzA3QzVCQUE4QUE0MjA5QURGM0FFRkYxMUMyRkY5Q0RDOQorOEJDNTVBODFBRDBCODk3NUQ3N0I3OTI1OUVEMjZERkRCN0I0OEU2QUMyQkRBOEM1REJDRDU3M0JFOEJGNzU4RENFNTUyQkQ4RDdCOUM1CitDM0VGRkVFQzBGRUEwMUEzNTk2QzAzODc1MERCQkRFMDE5REQwNjFBQUM3NUM2REY4MUVBMDVENkM2QkE5NDBFRkVCRDA5MDRFQTY0QUQKK0NEOUEyOTlGQzJBNjc3QkMxNjZCOTEwMTQ2NzAzQzRBQzc3QTM3RDFFMzUyNzVERjEzRjBDODlCOTIxQzJCMzM5MDVERkI3OUIyMTQ1NQorQjc2Q0M4NEQ3RUZEQ0NCRTlFQUQ2QzQ1NDhBRkYzRUE1OUE3MDAzQTVCMEJFMzU5QzhCNTk5MERCMTU0NTE3NDhEMDBCNjY1OEYxQzFECiszQzAyQzkwMTBFNTg2RTlFREE3NDAzRTAzMjg4RjkzOUM1QTU2RTU2QjAzOEJERUEzREJEREVFRDU5OTUzQjVENUYzRUNEQkI5QTdCMjAKKzZFOTdFMTlFQjQ4NkU2NjZEMjJBRjhFODFDNjVFQ0EwMDU1OTkyOTdDQzA5QjgzREFFMTJBNDk1NzI1MkE5MjQ1MkM4MjlBMzNFNTg2NAorM0FFRDZEMUE1NTM4QkFEQjcyMzM0NkYyOEMxRkZCNTU3MzdBQUMzQjZCOTVBQUIyQkZDMzFCOENGRUZDMTIzOEYzNkIyNEI1RTBBRjRFCisyMDFEQzRCNEY4QzU4NENFRTJCNjZBOEJGRUM3NTVDRUZEQUNDNkJENDZEMUFEQzkzNTNCQjRDRDlGNTk4NjdBOEI5NzUwQkEwRDgzNkYKKzQxMjZCRkI5NjM2MDUyM0RENUVCNDFCREUyQjY0NDJENTNCNkRCMzgyNUFCMTlBNUI4MTIyRDM5QUQ2RURERkZEQkU5NTlBMTQ5RTlGNgorNTUzMkZDNzBDMzJGMjk3QTU2RjQyODhFMzU1RDlFOTE2MjI1QzgwRTQ1NjRGRjNBRkY0RTA0QzY1MzQ2QkY5ODM4MjJDRjA0N0YyN0U5Cis1OEFGRTA0NjMzMkY1RjhGMTIyQTY4N0ZEMEJERDgxMDMyMzMxNjk5QzYwRUZGNDREQUQ3Q0ZERDk4RUFCMjREMzE0MDEzMjA5NDY3RDUKK0E4MDc4NjM3NUFCOTI4NUQ3RTREQTVEMEIzMkFDQzBBQjk5MEI0NDQ4ODIyQUYxRDEzMjU2M0M1NzlDMjhCMzg2MjJCQ0U0ODkxOUMyMworRTQwMDJENjU2M0QzNjUyMzZBQ0JCQzI3ODU0NUNFMjhBQ0MyOUE2REU1QTkzODBBNEFGNkQyODYzQzAyODNGNzVDODY0QThCNTg2OUJCCitGREVDQTI1RTE3RUJGM0NFNzhDMDkwM0IzOTNBMDI0QzM4MDcyMzZDOTJCODk2MTFCNzBFQkJCOTZENjcyMTMyQ0QyOEIwQTQwMkY5OEQKK0Q2NDc1RjJGOUU0NzFEOUNGMUQ5NjVFNTZFQTREMEQ2RUQzMzQ0MTIwRDhEMUFCREQ4ODg3RUI4MzlGN0EyQTlFMERBQ0JGMjU1NTg3NAorQTkyMDBBMjlDMDgxRUI0NTYyRjEwOTU4MzUzRkI3MkYyRTA0ODZGNDc5QURCRDQ3NjcyODRFNjMzOUJDMkRFQTZBMDU1NTYzNjZGQUM3CitEOEMxOUNCQzdDRjQxNTMwOEZDMzNBQzY3NjNFMkY0NTBFQjlGRjRCODZDQTdBREIyQTdCRTkwMzMyNTVDNDQ1OTM2QTJDOTcwRDFGQTMKKzFCQkQ2NTBFMTBFRUVCQjAxODIxMkVBRUNDNEQ0RDAzMDQ2Q0QxNEI4NjBCQzZCQzdGRUNCNEM3MEJDNjA0NTYyOTU4MDMzOTk3OTVEQQorRDE1RTVBN0YyQTNCOEVDN0JGRjk1NThBMEVGRERGMTc4NzUyRDdEMkJFNkRGN0NDMzIyMTJFN0YzQzYzMkI1QUJDRjlGNDQwQ0E0MTk1CitFNTBGMzQwN0RDMDVFRDhFRUUzQzZFRjVEOTI3QTMwNDA2M0QyQzU5Mjc1NThFMjEyMDg3MjMxQzQ4NUExMTg0MzNCRUE1RDAzMTRDM0EKK0IzREFBMjYzMTYxNzM2N0Q1QThCNzlDRjBDMUU3OTgyOTUzQzU3NUMzNjNGQUUyREQyMDIwN0Q1RjU3Mzk4MDM1ODI1QkFDNUZCMDI4MAorNDdDN0Q5MDdCM0Y5NTI5QjlCQTM3MjQ1Q0ExRjUwNDg4Q0I0RjMxMDYyNjBENEMzMjREMjNFMDYxQTJFMkU4ODk0MUQ1NjYzM0I5OEM4Cis3NUU5Mzc3MEZDMEIzMzIwOTI0OEM1MjkwNTM5QzIzRUMzRTA3MkFCMDc5NzE5RDM0MTdFRkVDNzI3MkY0OTZGMENFRDBBRjJBNThCOTMKKzQ1RjVBNzc5QUE1NEEwQjA1RjgwREIxOTA4RjZGNEI5MUMwREY0MUFCNTZFQ0MwQjU0RUE5QkRGNjkyOUIxQzc5MTQ3NUNGMDg2NEU1QgorQTAwRENBNjIyODBGRkU2QTRDNjI2MjkxMTdDOTg5RDMzMkZGQkMyNTUzMEJERjRGMDg1OTI3NDE2NTZCNjBEODJGMENBMzlBM0NGMzc0Cis1QTYyNjQ3NUQxRTk3ODMzNzhFOTQwNjU5QUJBNzIxMTU4N0RFMTg1MDRDNEIzMDBGNDA0MzRDRkU3MTlDQTNDREMzRDg5QkIyMjZGNUMKKzFFMzQ1QTNDOTE4NjcxNkUwM0MyMjI0NDBFQzVBOUQ5QjU4NUY5RDEwRjlEQTE4QTk0RjkyN0VDMzJFNzNFODQ0OUZGRTM5MkY3MDNCNAorMThCNTI1RjVGOEY3NjVDRDYzODI0ODk2REMyRjgxRkE3NURCNzMzQTQxNzI0N0Y5OTBGRTZCRjA4NjFGMUI0NjNFRUYxQjcyNzA4NUFBCiszOUUzNkI0OEY2OUNEMkFGMkYwNUEzRDMyOEIzRjA1NjUwNDlDMTk0ODEyODdBRDA1MTVBNTJCMzIzQzE0MTc4OUQwOENFMTVEMEQ3OTIKK0ZGMkU4RjQ5OEJBNERFMDkwQjY2MDNENzI3MEQ5OTNBMTUyMjMyRjREMEUzNzczOUZFMjY5RTQwRThFQTkyODcyMTgwQjY3MzQ3NTIyQgorRDkzQURBM0MzQjQ0MTQwMDQ3MTFDMjUyNzZCMUQ4NDU1NzExODFGRkI0RUFDNDdFQjJCM0U3NDEyNTkzQTgwRDBBQjk1M0JCQUZFQjY0CitBMERBNzM2MDdBMjA3QjhFMkNGM0YxQ0I0N0I3NEYxRDMxQkRGQUE1RjZFNTU2RDI3MEUwMERERkVGREZERkNEMEJENTlDRDAzQzI1OTAKKzdBNEVCMEUyQ0JERTI5NEFEMjc0RjI5NjQ2QkNCQ0RFNDRCRThBRUQ0MUU4Nzg1NTdGMzBFODFBMDg0MkFCMzg4NjM3RjdBMjEyRTk1MworOEFCMjExOUIyOEM1MUZCRkU0RTc1RUExN0FDMjMzOTQ5QTIzMkIwMTVGNzQ4QTVDNTFCMzBBREIwOTE4RDY5RUM2NDFCQkFBNTc0NTg4CitDRDQ1QUE3NzkxQUY4OEFFQUI0RjgyRkZBMDkyOUJBNzJBREQ0RUFBNThBMDBFRUY3ODAwMzZCNjVEMjc5QTEwMjQwNTE1QUNCRjY5NkIKKzkwRjkxOUVENUQ5Q0Q5QjY1RDg1NDUwMzU2NTIxMjc4RDJGODM2NzIyOEMwOTUwN0E2QjUyQUU0MTMxODM1MjFCRDI0NTRBNzU1RTE1MAorNzg0RTQ0NkVBRkUzQ0IxMkYzNUE0QTkyRDdGNTUzNDI2MENCODRBNEQ2MTk4MEM1MzVEMjNGRDA5MTcwNkIyQkFGQzYwMDQ3RUQxMzg4CisyRDNEQzAwQkIxRTAwNkEyRDY3OENGQjNDMkYyOTIxQTMwQTgwOTBGMzAzQkFCOTIyNURDMjQxRjlDQ0ZEQzE4NjBBMDYyRUExRkY0MDQKKzdBMjcwNkY0MkMxQUI3ODkzMzM0NTQ4ODc2RUNFRUQ2MjFDQjEwNUQzMEUwM0VGMEY1RjI3MDE4MjREMUNFQjU5OUM0N0RFOUNFMjI3NAorQTQxRTNENEVENjhDNTZEODEzMDg3N0UyMUVFMTYxRTg2M0NGMjc0MTNGREMwQTlGQkFDQzZENTE4QTc2N0NEQzcxMDJCNzg2RkFBOEJFCis0MTNGNjI1MDMxQzc5OTM0ODc5RDlGMEQwRTgyQjUzMzlCRTVFRjk3MkY0QjU0NTI5Mzc0M0YwRTMxNjQ3QjZBMDIyNTUwQjFDQ0VDMzEKKzg2Mjk3QjFFOEVGOUEwQUY3NkQ2QjE0NEM4NEEyRkZENUFFNEJENEJCRTZCRTA4NEJEQjRFNTAzMjE2ODM3RDIyOUNCODBFNEUyQ0M2RQorM0JBNzAyQjNFMjNCQUUxRTk2MzA5RDkxOUEzREJENUYzMEQ3OEM1NzU5OEVEQzNCRUU0QTgzNzRFNERCNzYyM0UyRTZGMUMzMjE1QjM2CiszMUFFNTNBMjkxMTI5OEE5NTI2MzFEODg4ODRBNDc3QkEwOUY1MjYwNzBBRUI4RTBFOUUxRkZCOEU2OTREQ0IyQ0JCRTRFNTMxQTc1NzUKK0RFOUQzNUI4RUI4N0RENUZFNDRENDA0NEI2NzRCQ0VDMDM4RjVENEQ5MzI0QzVEQ0ExQzA1MDVEQjIwNDk3QzI4RjM0NUEyODMxM0IxMQorMEJFMTlCRjRDMTJBNDI0MkZEMDFDRTM4NTM2MkMyNzNENEEwMUYyMzQ2NDJEOTY4N0RDOTMwQ0Q2NjI2MzM0NDE2MUVDMDhCNDlDMzBBCiswRTM5MTc2RTA3MjcyQzVGRkFEMEUzQTM0ODkyNjFBMDcwREZFRENFOUYyN0U1REJDOERBRjY5OTM0NEMwNzBCNkMwMzAzMzkyMjJERUIKK0MxRjYyNUFGNkRCODc1QzY5RkVEQjRENjEzNTgxMTAwNTM1NEIyNkZBRjI4NENBMkI5MkY3Mzk4RTI0RDg4ODdDOEU3MEExNTFBMDUzOAorOTg4M0VDNzdFQUU2RjJGN0Q2Q0ZBNzdDNTJEODFBQzIyMUVCNjcxMUVFNUYxMUM2MjFFQjNBRDJFRDU3NTVGN0IwNTVDMTk3NDRCOTM3Cis0QUY5OEI5RDE3OEZGN0FGNEVBRTFGNTRGNDlCNEM5Qjc2QTM5NDdENjQ3OTQxQTVDM0ZCOUMzRTVCNUM1N0U0RURFQkNFNzgzMkIxNkIKK0RGRTczRkQ4NDU4MkUxQUY1N0EzOTM0MDRGQkRCMDdERjQzNDRGRjU4MzdEODI1ODA0QURCRjVCRjg1NjgyRDlDMjE3N0FEQTI2MTUwMQorMzlCMDVBRkU2NTY3ODc1M0VGRkNBRDRGODcxQTNDN0NERTkxOUY3QjY3N0Q5M0FERTE0MUYwNzc4QzFEQTBEMjVFNEE4MzY3MDg5RTA5Cis4QzhFNzRFQkM3MEJCNUNCN0I4NzE3QTJGMjM0OTZCQzI0QjAwMDg1RTgzMEVBREE0NEI1MjhFOEEwQ0VCRkE4NzAxNDA1OThGMkY2ODAKKzQwQzIzN0VEOTE1RDRFOUM1MTU4QjFGQjVEOEFDRTNCNjZFNDI5RTZCNTBDMjJGQkM0RDI4OUExNUJGRjUyQkJDRjcxRkREMzZDNjY3OQorNUE5REE1MzAzNjU0Qjg0RUREMjdDQkYxOTlBMkM1NjRGMDgwRDhGNTc4MUQzOUEzMkIyMUJFQkJDOTc4RkY4QzRDMzY5NEM0Mzk2NzI1Cis2OTgxMUQ2MEE5NUVDMzJBMjMyRkMwREYxMjc2REEwREQ2QTI1NDhGRkI2Q0FEMjE5N0JBM0M3MDREMEE2N0ZCODNEMDUwODdDOUMxRjIKKzk0QkJDRjBGNzJFRUU5MTgzM0I5QTYyNUM2QTc0OUMzNjY2QzZBNzc3MDEwRTA1RjI2QUZDQ0NDMUE2RDZDQTI2RURCOEQxMkE3MTNFQQorNDNGMENCOTY5MkU2QUFGQjI0NzA3ODdDQjIwN0Q3RjNEMjk3MTU4RTRFMzdDQ0ZCNjdFRjAxMTc3QzM2QkFDRjU1MTI5MTlFNjJDODg0CitEQTE1NUJGRTI1N0I4MjBBQjM2RTg4QTlGOEJENTkwNjQyRTZFRTE4RDI5NUE1M0I4NDM0MkU3RkNGQUM2NEMyMUU2ODFEM0E5NzQ4NTYKKzlBMUUzM0ZCNDYzM0ZFQjJERTU3Mjc4NzIyMDE3NjNBNUU2NDk5OTE2NjRDNDBDNzY5MDdBQzg3NkRGNTY2OTExRjRGMTUxQzgxNTA5MQorQkYzMTE2RUU3QzYwQ0JEMzc5RDM3MzdDNDJGQzM1Q0VGRkQ3MjU0OTJBODBGRjBBQTE3RkFGQ0NCRTVEQkQzMEIzMzEwMzE5NTcwMTgyCiswMkU5MUZGMzgxM0U1QkY0MUY3OTg2QkI5NzA4MDhGRjgwMkMwMkIzMUI4OTZDQjQ4MEE1MDgyMzM0QkRGOUEzOTBDQjIwRUYwM0MxQkIKK0ZCNjQyODhCMjQ0NjU1QUI5RUNCOEJGOEI5RUE2MTU3MUFCMkZEM0IxRTI5MTZEMzhDMjQ3QzIxRjRBNEFFMDNGN0UxQ0REMUEyODMwNworMUFFMDM1OUI5NjBGRDlDNDVBRTM5Nzk0RkNFNUQ3M0NBMUE1MDdGQzZEMEVBMDZDRUVEMTdBNDA4M0E1QjZBRDRBQzYzQjlFQ0MwMzc1CiswQjc5OUYzQkI2Rjg2RTE5MEJGRDQ3Q0U3QTY5N0M2QjFDODlDM0I1NUMyRUMwNThGM0NGRUYyRUI1M0IzNUNERTc3NDlFNzk1MzFEODIKKzBBMTU4M0RGMzhCMkZDMEE0RUZEQzVDMzBBQTVEMURENzdERDgxOTZERTUxNzAxMDFBNEFDOEM4QjlEREZEQTkzRTlGREMwN0YzRjU3MgorRTE1NzdBNkUwQkIwM0Q1QkVEQzVCM0FGQUNERTFGMDE1NTM0Njk1OTQyRTlGQ0Y2RTNDOEQ3QzcwQkU1NjczODg2MkUzQTYyOTIyMzkwCitGMzFBRTUzOTFENTVEMTI1NjgwRjNGQzBEQzM5MkM3RjY5NkNCOUNDRTZFREZGMjBBM0VBNEMzOEVDMTZCMkQzMzg5M0UxNDhERDM3M0YKK0EzMDkwQUEwMUZGRDNBMzdDMUJDODA1MzFCNDMxMEFBNDJCN0IwRkJFMDI3NjJBNjU2QzY5QTEyODUwMDMwOTMxNThDQzJEMTMwNTRENworQTE5MkRBODg4MzgwQzgyRDRFQzAxQTc3RUU5NjJCNzhEMDUzNzNCMzdBQzU4OEJENUY4RkNDREUxOUM4MDBENjg0OTlFOUIwN0JEMzI5Cis3MDY5MUVCNkFCMjFGRjRDRURDOTRDOTZFNTU3MjA3MjhCNUQ1NEFFNUY4QTc5MDVENkIxOEVCQjE4NDk5MkMyRDRCNEVEMTIwNEQ2RjQKKzU2QUI2NDgwNzZDMjQ4NjRBOEE3RTNFQ0E1MkQ1QzczRTc2MEE0NDJGMUQxQTE2MkYxNTU5MzQ0MkUwQzM3ODU1QjUxRkVBQUNDNEIyMAorOTkzRDlEOUIzRUY2OTNDQzY4Q0E3NUU0NDlGMUUzMkIwMDIzMUE0ODRGMTEwQUFBMjA2NkE0MzQ4RDhEQzVENkFDMUZEMzc0RTQwNEFCCis5NkUzMDhCQjJBMTU5OTAxQjZBQUUxMkUxQjVCNjY3NEMwRDgyMDg0MUI0MzM1Q0RGMjBGMkM2NENDRkM3RUIwNjRGQTBBMEYwN0IxMjUKKzhDRjlGQTZERTlBRjU3QjBFQ0YwOUUyREZFOTZGOEY3OEI4M0M5RjY4OUYxQTEwRDBCRDg3RkU5OTMwNzAxNTgzMTcxRkZEQzMwQkI3QQorQkFEQkFCNUIwNzkwODZBNzk0M0EzQzZFRjVDOUY2NTJGOUJGMDM1OTE2Qjc2NzY0QjdCNTNFRUVFNTREOEEzM0Q1ODQ2RkM2QTZCNjRFCis5OUZFRjQzQzdGRTkwREZFQkY4M0NFNDM1NjYxMEM2NUM3NzE0MjZFN0QyOEJCNjAwRTc0M0E1NzVGODhFNUEzRjFBNjFCNUY1M0Q0MzEKKzE1MTUxNkI4RDI0N0U2NDI1NzRCNDA5Q0U0MTkxRkI2RUEwNDA1ODZGNDlGRDkxMTZGQ0M5QjYwMkY3NkY2Mjk4RkE3NDIyMUIzNTBFQgorRjY5RjY4NTREMEU4RTJFOEJBNTBEMkRDRjdDMDREM0I5QjYzQzcwMjIwMDYzNzFEQzNGQjhFMTE0RjQ0QTUwMUMyOEE1RDYzMzgzOTI1CiszODk2QzNDQTZBNjVBOUMwQjA5NzZBOUM1RkZGMjlFRTFEMjdCMEI2QTFDRDJBMzM5MjhGNzc5Q0FCNjU0MTg3RkYwMENBQUQwRkUyN0MKKzc5M0Y1QjFBMUVBQURCNzU3NEIyQjAwN0Q5QUM1RjM0MUU4QUU0NzEwODhEREZCNkNEQUNEMDQzN0QxQTc1RkQ3NTMwMTUwREU0MDQxOQorRTE0NEM3NzcyQzU4NjZERDA5RkZERjkyOEVBNDk5MTk2M0UwQTU3ODQ5NjFCNDY3MTEwRTRCMTI2RDBGMDVDQUNGM0FFRENDMDBCNTU5Cis5Qzc4OTE3NEY5NkQyMDE4QUNDOEI1OEJDQkNCODI3RDY5NEI1QTRFMUY4QzQzMTBGN0ZGNUM1MEZCM0U3NzQxNzNEMjFFQ0Q0RDI3NkUKK0IwMkUwOEE2MDkxRDEyMDFGQzExNzZGMDQ2NDY2RTRENjg1NjkyRDk3RUFCRUQzNjk5QUM3NDFGRDUwNkMxMEI5MERDQUE2QjkzNkU1NworMkE0RDdFNjg2MjE5OEIyOUFGNTcwMTAxODg5NDFDQzc2NjhFQzZDRTg2MEY0MTZENEFCOTVDNDRFMEIxNjg1ODA0QkZCMzI5OTE5RDJDCiswQUQ5ODM3NTg3QTM4MEM2RkEzRjYwNUVFM0M4NEExNEY0RThFNTcwMkExRjUwNTczMTdFMkMzQTcwQzREQTUzRkYxNzAzQkQ4OEIxOEEKKzA3QTY4QzI2MjJCQTNBRkQ2MTBBNEMzQUY3M0I3RUEwOTY1QjM0QzY5QUY3MjE2RjlFOUEwMENCNjA5QUM0NTY3RUZGRUFCMjQ1QUZFOQorMDI1MDZCODExMjI3QUYwMzZFODk4NUEwRDg5MzFCN0RBRDlDMEREQTAxQTg4QkQ1RTQwQzZERkUzRkFEN0QyNjhBNDFEOTNFRTM4RDJDCitCNUI4RUNGNkI3RjI5NUQxMDdCMjIxN0IwNTU1QTQzOUU5NTg2QjJCMjUyNjkzNERDOTIyQzVENzVDNEE1NDY5RjhCM0FDQjcyMkJFMDEKKzM5MzE4NDI5MTA1QTRGNUFDMjY1N0FCQjRBRjExRUQ2NzIxM0FEMTYxMjBFRkM2MDI2NDgwRkIxNUFFQzI4RjNCMEMwQUM1QjgyQUI1NQorMzIyQTlFMEU2REUzOUFDMTAzQzFCNEVFM0Y2MjM1RUQ2RDlBRjBBRDRBMjk0OUM2MUMxODI5NzhEOTk0NjREQ0U4MTQ2MkE3NURCRTlCCiszNjlGMERBRUI2Njc5NDg3MjdCNzIxRDRCNkM3QUVCMEU3MkU4Njg5NkFDNkJFM0Y4OTQ4RTVBOEMzQTJBMDRGQjg4Njc1MTVBREI5MkEKK0IxRDBDNzdCNUEyOUQ4NzFCNkUzNDA2RDQ0QjZDNEFGNEEyOTA3NDE4QkI5OUZGNDkxMkZENUUyMTcxRDE0MUIwOUMzODE4NTk1MDcwRAorNTgwNDExQUJDMzg2MzI5OTkxRjREODZGQzdFREFBQkM4MTdBNzRCRkZFMzkwOTMxMTVGODI2MzQ1QTQ4RTk2NjY3NEIwRDMyOTBBNkJGCisxQjZGNjM0RDAwMkY3RTE3QUU3QzA2NURDNkZCNEExODg5N0UyQzI1Qzk2QjlCMzRBNkJDRTg4QUYxRjBEMkE4M0Q4N0M0RjdFQkVDQjMKKzlGOTBBQzE1OTREMzk1Rjc4NUNCMEZEQTRCQ0I3RTE2Q0M3OEU1ODI1MjVDNUVBMDczRTk2MTFCQjVCNzI5QTM3MkRCQjgwRUQwQTUzQgorN0Q0NEUzNUU2NUJBNUI1MEUzODNGOTMyRjdEMEMzOEI0QkNFNDNDN0VFRjRDQjFEQjE2QUQ1QzNCQjc0MUFFNzNERDAwQzBGNUY5NDlFCisxQzRGRTg3OUU3REREQ0NENDc1MTk3OTE3RDRERjNDRjYyQ0NDRkNFQ0IzMTEzN0IwRDgwN0FDQTlBMDI0Mjg5OEZBQzk1NEMzODIyMTQKKzY2QkIzNkJDNTRCMURENkI5Mjc5MjRBNUJFMUVGNjVCNjY5N0ZDNkYwQjYyMUFCNTQ5OUMwM0NFNEFFRTNDRDdERkQxQ0EzNjlERkVGQQorRjQyMUJBMDFBOEQ1Nzk0RjYzQjA1NjI1Q0UwMjUxM0I0Qzg0QjhDMDE4OURCMzM2OEU3QTc1NjhCNDIyREVCMDdEN0UzNEQxMEQzN0EzCisxQ0Y1OTExMUZBNTRFNDkwODY3QkJCNDVFRTYzNUQ0RTY5MTE2RjRGMDA4MTIwRkVFQzZGQjdCN0ZEQjVGOTIxMzgxQ0M1MjBDODE2RDcKKzREQzI5RUJFQUY0MUVBNjIzMDk4MkU0ODZFNDkxNkIyODVDQzY2NTZFQjdFQjJBMUUxMzgxN0VEMjJGRTExOUU0OTQ1MkFBMEJFQThDRAorREYwNDU3Qjg0NTBGQUE3Q0E2ODYzQjQ3QjI5N0YwMEFBNkYwMzk5NDFEODk2MjYxNTNENUZFN0Y1NEVEMDJGRDAyQkQ2OEVBQjQwODM2Cis1NUMxMTMwNkUzOEU4OUY0ODUzRTkxMTY5Njg5NjIzMkQxMkEwODAwMTEzREMwMDY2QUVBQzZFMTBBQzVDRkQ1NkRCQzRCQjM2QkFBRUEKK0IxQTgyMUNEN0RENUZFRjE3ODg0RjQ2QkU4MjA0MEI1MzcwNUQzNTQxRUNGRkY1N0YzNzlFOUJFNjE5RjUyNDM2MDE3RjZDNjc3RTJBNworOEMxMDVDREMyNzZBN0UxMjIyNEJGMzAyODRBOEJFMUFFMDYyMzFDRUU4MDM5OEYxNjA0MEZDNzIwOTM0RTMzRTQ2RjRFNENGQjQxMEQ2CisyQjM3Qzk1Q0NGNkE1RDBCMjA1ODY1REZEMTM0NTIwNEEzRDJBRjVBQUJFNkM1Q0ZDMTZFOTdGQzNDRjI3QkFBRjU0RjRGM0RDRjEzODgKKzFDOTkxNkI5QkFGOEQxNjBEQjU1NzNGMTZDNUExRjk1REU4OEY4Nzg0NjFCRkU5OEFDRjEzN0MxNDI2OEREODg4MkIyMEEwODU5OTE0QworRERERTI4OTlDQUFBNDE5RjU2MUMwNEZGMERDMjkwRjQwRTMxOTIxMDMwMEU5MTYyODgwMUFCQkQxREZGQkFEQzY4NTA0MDI3MkRGRTkwCis3RjNEQzBDMEE1QzQxOUZEMTdGQkQ0RTdCNjBEQzFFQzFCNjlEODNGNEVERThCOEM2QTREQ0ZEMkQ0MTlCQTg4QkRCNEQ5Q0EwNTA0RjYKK0RDMjhGNTA3MUU3M0QyQkE5NUQxNUI4QUYwMTUyN0IyMzIxODM3Q0YxRjY2RENCNThCNjA3MTM0OUQ1RUM5NTFFOThCMEEzRTI5NDVGRAorRkE5MjhENjM5M0Q4NTIwMjRDRTBEOUY1QUQxQzBENENEMjc1MzI4RjEyNjNBOTY1QjUzOUY5Rjc3QTExRDk2MDFDNzBGRUM2MTA5RTNECis1MjUyNjlCNTRBQzdBRTEwQUJEN0U5REZFNkQyQzExNkFEQ0EwNDg4N0Y5QTYxMjM2QjJCNkNGMDdCRjY2MjlCNEY5MTI3MjkyMTAwNkUKK0I3M0NBNjY5NTk0MzgyOEM4QjZCNkFFNkM3NERFMjZEMDA4NzRCMENBQzI3QjhCNkNFMkFDMjlGQ0VGMkREMDY1MjAxMTM0ODJCOUU5NworQjBBNjVCQkUxNDU3MkU4RUQ1RDY5OEM0QjMwQjMxRUY0QTY4NjU5Q0IxNzhEQzc5QUVCOUMzN0EwNjkyODBGMTBFODM4MDc1RjM4M0IzCitFNTlCOEZBNkZFRDFFODVBRTI2MEM1Qzk2MTJGNjU3MjJBNkVFQTlFMEU5MjE4ODczODAxOUEzQUFEMjVFNzQ2NzkxREQ4RkQ5MkFFMTUKKzgxOEJEMjc4RjJFMjdERjZGNUU5RjQxMEU0MTk5MzVFODgyOTk5MEMxQTQ2QkEyOTEyNDgzRDQ4REQ1QkU1NEE0MkZFMzM2MDQxN0FDNAorODZEMTk2MzM4NjdFQUNGOENERTU4NjVGMkE1REJDRUJFQkJCQUFFQTY3MEFBRkM4NkVDRjIzNEZBQUU4MjVBNDcwMTQ5MTNCQkMyOUEzCitGRTZGNEI4QUUwOUY2MkQyRjhCNkU1NEQ1RDE2OTFEOEMxQURFNkVCQUREMjY4RENGRERDNEE1ODQ4NEJBNzJENjk3MEY0REE3OTA1RUQKKzgwNzA5NjAyMjVENzNCNzc5MjNDNURCQkMzNTlFMzQ4MjIzNDgzODdDMzA5QjE3RTRGMzYzMjRBMkVBMUMyRjMwNUQ2RTJDNzU3M0FDNgorNjMwOTFGMkY4Mzk2NDU4MzcxQkI2MkIxQkEwNDFENDE4QkNDMDM5NEI2OTc0QUFGNkJFMzdFOEU5QUE3REE1NDNFREU5RjgzRjZERTA2CisxNzdFNjBDOTg2ODBCOEU0RDZERkRDQzkyMUI2RjA0NDM2NjUzOUJBQTk4MTNBNkFDRDQ4RDBGMDIyOUJCOTNBRjI0NEREMTkxQTJCM0YKKzI2RkUyOEJCRjRDQTlCQTVEMkUxN0NFOEY0NUIzNUQ1OTUyMjBFNDZCREJDQzQ3NDg0OTExODY5RTcwMEQ4MjI5QkRFMkRENDU3NzVDOAorNTY3OUE3MzBDMDA3NjZFQjhFNjlCQThBQ0QyRDkwM0JGMDFCOUY4MTY0RTNDQzdDOTU0NTU5MEM1NUI1Q0MxNzMzQkNBQkE3QjA3QTc2CitFQTYxQTAzMTVBMDc3QTUzNjI2RUM1NkQxQzJERjMzOERGMDlCNEREMzc1RkMxNTI2MDgwOEMyREI0Rjk2NTlENTJGNTZENDc0QzU4OEUKKzBBNzc1NzQzQTcyMzg0NjEwNDJCQzlDNDBGMUM0RjVBQzY0MEY1NDY3REY4QzE3MUU3NEZFNjcwQjMzMUU1N0Q3Nzk5RjBBOEQ1MTlGNAorODhCREEyOTlBQUQ4NjYzOEE5OTgzMTcyRDA5RUM4QUNBN0I3QzA4MTlDRTc1MjhGQUYzOTQ1NjlFMDRGNTRENUE2MDg2RTc1ODhGQUZCCis2NUFGN0U2OTA0RDU0MDlCNjJEQTU3QTJDM0UyNjE4NEQ2OEQ1RkZGMjhFOEEwMDI3RUI1QzEyOEM5QzEyRjFDMUNEREYwOEQ4QzlEMTIKK0UwNTdBRDMwQ0ZEOTBGM0EyOUNFRjQ1MjVFQkEwNTM5NjM3MERBOTFBNzgwMkE1MUU0MEMzMzFGNURFMkRGNEEzOTU1OENENjY4MjY0MAorMDNEMTc0QTQyQzUwQjZBNUIyQUI3MjAxNkIyQjVFMzlGQ0JCRjUwMjlEMzk3MTJCRTAzMTcxRjEyMDhCRTVFMUE5NDVBRUMzQUZDQjlBCis3QTVFNjA1OEY3MEMzQTFDMkNEQTc0REIwQzQzQTA5NDIyRTExQ0QyQTU3Q0U0Q0NGMEZFNThFNUUyRTdFMzA1MUU0MDFDMUYzNDYwNkUKKzYxNkZGQjRGNDQ0MkRCMTQxQjlCRTQyNkJGQkQ0M0QxNDU4MUVBNDEyOEQyNDQ4MThGODVCNjQyNEM4MDBEQzExN0Q2QjdCRDQ2OTMyMQorMEQ3MjU1MDM0MEIxREQxQzQzMkIwNUVDNDE0OTIyQzg5OUI3NTU1OUQyNUE2M0E0NDIyM0ExNDlBREI1NzRFQTUxNTMyMEU2NzhERjY2Cis2QUE5RDYxOUIzQzQ4MzFCMDBGOTZGMUMwMjcxMkMzOTUzODFDRDAzODNCNjNCQzUzQzFGQTRDNUNENEQwMDg2MkY2ODE5QjQ5MUQyNjAKKzRBNEFFNDk1NUY3NjE1RDg3QzI5ODM5NkM4Mjc4MDc1RkRDMDA4Q0FDMjU0NzNDOUY5Q0IyOEE1MDc0NTJCN0VBREZBNTZBM0RBQTdDOQorMTZBRDRGMDkwMTIzQzhDODg1RDlEMUVDQkZGOEQwNzRDOThCRThGMThDMEZEQzI1MTBBNDMwNUU5Q0M4QkE1NzEzNzRCQkI3QkJGNzVDCitGMUNDOTgyOUQ1QTFBMjUyRTQ3MzBEMUFFMzIxMEFCMDc0QjY3QjAwQzU0MzkxMzI4Q0UxMTQ3RjIwNTUwMkRGRTNBNkVDNDdBNEQ2M0EKK0I3RDI2MzdCMkRCMTIxRTYzRkFDMUZFQzY4ODg4QTIwMDE4NDBBMDVBQzkwQjA3QjU3N0UxMUQ5NzY0NDUxNzM5NEFFQzA3Q0Q0MEQwMgorQ0RCOUJFNTY3REEzRjQxMzVCMDI1M0Q1MDNENTBFQzU2NkY0MjIxODJEQTE3M0FENjJFMkI5NEQzMUE1QjRGMjA5OUY5RkNBMjUyMjQ2Cis2ODYyQkVGNjU4NUUxQTE4OTU2NTk1OEIzOEE2NENGRUNBNEJFNTE1RTZFMkJEOEJDNUVFNDRGQ0E1OTNBMkI4Njg1NDQzMjE5NDhFN0YKK0E0QUZDMUY1QTI4NjhDRkZFMzYzQzdDNkU4ODE2NTQ0NEUxM0M4QzQ3QzY1RTcyQzlDOEIyOENBNDk2QjQ5QTJFNDZEODFCNTJCNDhDNQorN0IzQzgwMTFCQUI4RThEQzlBMTQ3NjcxNTNDQ0Q4RkY0QTIxNjZGQjAwQTYwNDAyRkUwQUUzRjA2OTFCNTcyNzY2RkE0QkNFNjA3NTA4CiszQjJCMUMzRTE2Q0Y0QzkxMDg0NjJBRjFFNkE0OEY0RDdBMUE0MTY0NUZBMjc2NzcyODEwMjI5NDk1MDA0ODNCNDZCQTIzRjE3NTVCNUYKK0VGMDU3OEU1RjJFNUJGQ0VFMkY3MTNCMzMyNEE4MzkwQUNFMTkxRDUxNDA4MDIyQzNDOEYzQTIwNzc2NkVBQ0MwNUExNEUzQzNFQjZFNAorODVGRjg3Q0U0QzYyRkFFM0M2QkFEMEQyNkFDQzhFN0U1ODRBOENEN0EyNUE5QUZCNDJEQTYxMDZGMDdBNjVDMjYxNjcxMjAyQURBRDY5Cis1NDJFQzZEMUNDNUIxRUVCNjA1RTQ3NEJDOTQ5QkE3QjJFOEE2NEQ0RjVCRDdCQkIzMjZDMDZGOTYzMEQ0Rjk5Qjk3MjlDRjQyMDVEMjkKKzEyQkU5Q0Y4MUZCMTE0NTQxRUY4RDdENUNFNEREMTk1MUNCRkJCNUIyRkY1QTk4OTYyMDJENDM4QzcyMjVCOEIwRjRDOTg1QjVBOTRDQQorMDk0NDhBNDZDMkUzRjA0Njc0QTU5RjU1QkE5ODUxQkE2MTQyNzM4MDkzMEJGMjc0N0NDQTdDQjkzMjM4ODU2MTk2OURGN0Y1RDk1NDVDCis1MTk1RTUyQTg0N0VGMkJGNEZFMzMyNTU2MDZCQUYzQUQ2OTU1NDRDQTBGQTc2ODEwMzQ1MTc2NDBENTYxMUFFMUE1RjExNzhDRTY5NUMKKzIyM0UyOUM0MUE0MDE3NzYwRjM2NTExMjJCN0JEQTRFOTY3QkY1RDc2RkI5Mzk4NEE1Mjc3M0M1MThCQkM3MURCMzJGQzUxRkNDMkYyNworQkY1OTYyMkM4OTA3MjQxQTE2RDMxMDc5QUFGMUYzMTAwNDFENjNDNzc1MDg3MkY4RkUyOTRDMDZDNDgzODUyMzk5NDE0QTAzRDRCNjg0Cis0NDI4OTcxN0IzRDA5NzMyNEVBNzkxQjk2M0EyNzNEMDMzMTcxNEYxRjkxMkZENjI2MkI4MUZDODlBNTA1MEE1RjM0MUU5MTUwMENCMDAKK0U5NzBDRUUyMkM2QzI4RUQxNTNBNDRDRjQzRTlEQTU1RkNGRUQ4Qjk1M0Y5NDEyQTFGRTQ3NzEwNERCM0JDNDZBODk3NjgyQjQ5MTJBRgorMURERTdGMjBBNkI5QTQzNjUwNjBDQURCRTUzMTZCODA1QUQwQzVDMzJENTVCODQ1OEM0N0I1RDQ3RkMxQjQxNDBFMEY2QjQyQjc4RkMwCitCRDI2MjMxM0Y5NkRGQkVGOUVGQTVBNEY1OTBCQ0JBM0M0ODRBMTUxQzA1MTEzRTREQjlDNTZGQTE4N0NFNUQwN0JGQTVEQThFQkRFODMKKzNFNzVDNkFFOEQ4RTY1MTY1NEUxMTAwODE3MkJGQkVDMEM1OUY4M0JDMUQ2QUQ5QzRERThFRUFCNzc5QzFGOERDNDc5RUQwODRCNzZENgorRDU4MkRDRkUwOEJDNDM5N0VENzFGMjU2MjU3NTIzMkQ5QjQxRUEyQjVGMjM3MjJEQTQwMjMxRTlBQjg1Njc3QzI5QTZCQzM3RkMzNkU0CitEQzQ0MTQ2NjFDQzYyN0VCRjk0QUYyQjEzQ0E1NzFEQkYwMTA1RDA4NjMyQ0JGNjQwQkUxQTZGNEIzMzA0NjIzOEQ2MkQxMTg5NjkyQTMKKzZFQzM3RDAyOTlCMkI0M0Q4RENDMDZEMzc0RUFGMEI1RDAwMEE4QjE0NEE5NTRBMzdDQjdCQTZCN0FCQTM2MTdCRTJGNzE5RkI5NTQxMAorNTE3OTg5OUZEMjE4N0JDOTA2RUQxOUQ1NEQ4QkFEMkI5NzBFN0I2MkFFOEVFMUIxNzk4OUUyNkYzNDBCREFFMTg4RjdGRjQyMTNBMUVECis3NThGRUIwREUzM0EzM0ZDRUREM0I4NzQ3OTFCNkRBNUY2M0I5MUEyRUQ1RENENjcxODBEMzc0NTYyQTJBREM3MzM1OUNFOUVERjg4Q0UKKzgyNEFBQzE1MDc5NDQxQTk1RDhGMEVBQUExOEU2Q0ZFNDAxNjMyNkE3NUE3NkMyMTAzNDdBQ0FGQkI5MEMzRTE0Qzc3MzJDOEY1Q0U5NworQ0M0QTlDQzZFMkYxNDQ0RENEMTcwREIxMkE5QkY4MzJDQTFBMjM4QTI5QzYxRTUxOUU5RjAwRjBGNTA5MEU4NDkzM0YzNUZCN0U3MTdCCitCNjQ5OTFFQ0JFNjUwRTQ4NjRCMjRBQ0E5Mjk3NDNFQjc3NTkxRjY0NDg3Nzg5RUJGRjJBMkJFMzk5QzUwOTdENkM2NzNCNkM1QTIxNzkKK0JCM0U4NDZGNDlGMkY4M0YzQjFGMzYwRkJCMkRCQTZBQTRBNTE2RUExQkRFRDUwQTQ5N0FERjUyMEYyRDE4ODQ2QkIzMEFGQTFCNzMyRAorNzYxQjY3NjAwODBCNDQ4OTYzRDc3Njc2RDlCQUNDMTI3RTVFMDMzRTRGMTIxNUYwREZGQkY3NDI0NzQwNEIyNzYyMDFDMzlEMTg3REI1Cis5ODg2QTU5N0UwNEU0Q0MwNURCQTUwMEEyNEM5RjIyMzdENUJERDkzRjkwODlCOTJDNjUzRTQ3QUY4RUYwMEU2MkY1RjIyRkY4QUFEREEKK0NDRjFDRUVFNjM1MEYzMzQ4NzkyOTEyREM2MTMxRkZDMURCOTNGRkNBQ0Y1Qjg4Qzk2RjVERUU1NzAwMDhDRTM5QjFFMDAyQTI0QkJGRAorQzNCMEEwOTc2N0IyNDY0NDIxNkJGODkwNUUwMkVDMUZFNjQ3NzU3NUUzQzQ1REE1QTA1QkU0NzVDMjBEQUE3QkNBQkI0M0I0QTlGMTZFCis2QzVGRjU0ODNFMEY1MTc4RTMyMENBMzkzODczNkNGMzI1NjlCNjFCRTVCQkM3MjREMkFFMEY5NzBBQzg4QTNCNEFDMkRCQThERThFRDAKK0Q0MkQwMjE1RDQ3Q0I0OUU2OUZFMUQ3RDdFNDBFODdEMDM1NEM4MzVGNDU3MzU3NjBBQzAyQTEzMjRFRDc4MTZEOTgzOEQyODU3ODA5OAorREUwRjFDNjUwNTEzM0IwMDAxNjQwODMzMTA1NzNCRUNBRUIyMENDODgwRUU1OTI4NDVCNkNCNEQzRjJDOTRERDA2RTNBRjQzMjQyNDk5Cis1NkMyREQ1MUZFMkQyMjA4RTMyRkM4QTgzN0I0NzA1QjcxQ0E2OEQ3MjE0RTkyRjI5OTYwNjZBRDZCQTg2NzJBMkIwOTY1MkIzRTE4NjEKKzdGNkIxQjYwQ0UxOEY5RUU1QkVBMzYxNkMzRURFQjlBQjc5RUQ3REJDRkYwNUFFNkM1RTAzRjMzQzRCMjBDNUQyQUM4QjA0OUIwOUE4MAorMUVBODNEM0UxQ0M1QzNDQkY2MDhCMzlGRjI2NjIzNjlCODU0NzhFQkRENDU2NUFDN0U2RDc5Q0RDRTBBMzZFOTEzRkI2QTZBMDk4QjRCCitBMTZFREQ3QkYxNDE1REJDMEEzMURFMzA5MDlEREI1ODhDNTczRkE1NEMzQTdDNzAzRDc2QkU5NzUwNzlCNzgxMDczQ0RGRDYwRUFFNjkKKzZCRjk5MUI2OURCNTRGRTI0Q0REQjAyQTQ0Q0E4QzMyRjA5MzVFNzdBNUI4MzM5RjYwRkM4NjMwQTBFOTIxQTQ0NDY0M0Q2ODUwMUUyNQorRjY0ODEzRkQ5NEFGNDVGOTA0MEIxNDhCRjA1NjhDMTk2M0Q5QjI2RDcwOTk1MTY5NDgzQjAxMUQ4NjVERDI2NDIyNTMyMkM0NUZDNjVDCis1MTcyREVDNzBEMEIyQjc5MjU5NEE5Q0FDQjIxQTIyNUU4RDA3OTA4QTA1MkFFNEYwRkJEMzkxOEY3RjlBQjBEN0QyRUJEQTVGMEUwN0MKK0QwNDMwNDhDNURBOEYwQTM4QzIyNUQyQzE1QTVFMDM2ODkwNDlEODA0NjNCN0NDMzVBNTRFMjAyRkIyMzMzNzA3RTBBMzY4MkI4NTE1MAorMUJFMTU3MTVBOTRBQUZEQjQ5QkY2QkU1RjgwRDgzRkNBQjI4QjBCODAwRDY4NUU2NThENDEyODZENEJENDIxREYxMDQyOEM0MDU3N0FDCiszNjM4NkZDNkI3NkZCQjk4QkZCNkExM0ZCNkZBNDBDNjgzNzY4MENGQjE1MjBDMDcwNjI1NEZDRTYyMkQxNEFFQkY1ODc4MUUwQkYyQTYKKzIyMkY1NEM0MzcwNEQ0RTM3MEQwQUIzQzkxRjRENTUwMURDRjY5RkNEQjhBMDhDRjc3MDZERkE0NTZBMTE5MTNDNDJGNjFBODMyQUVBOAorQjE4OTQwOUUxNDY1NTczMzhBQjA1OUFDN0JBOUNGRUVGMkFBOTY5QzU1NjFCNjc3NDE0QTkxNjgwNjQ5Q0MzREFGRjU3NkZFNjg2RjlBCitCOTkzMUE3NDlBRDE3RjZDMEM5MDEyMEFGOEE5NTg0NTM1RjFGMEI3QzMxMTM0QzA5QzhDQjA3RDg1NzM5NUYwMEQ5ODM4NEQ4QkZBRkEKK0ZFMjc1NjZBRjlFOTY5MTU4NzBDODc0OTlFQkYyNDNEOEVFODI5MUU2MERDNzNDOEFEQzI4ODZFNEQ5ODA4QTM5OTY0RDI0QjhFQTMwRQorRjkzQjA0REZCREE1QTVCODY4RDI5RTM5NDUwMzBBQzBBMzk0RUM0NjU3QjRGQUQ5RDJFMkM3OTY1REM3RUE5MTZBM0UyMEU2N0JCQjdFCis5OUQ1MjU1NEQyMjQ5MzhERUIzNUIxMTY3NkY5MUY1RUQyNEJBNjY3MEY1NzQ1MzdCRkJDRDQwM0YwOTIxMkMzREZDM0I4RjRERDlFRUYKK0RFMjc2NTZBRkE0MUI2OUQ5MDk0RkQyMzc3OUIzN0Q2RTU0REZCNkE2NTQ5MjNBQTkwOTMwMDZCMjNDQ0RENjhERTBENkRDNkU4QjIzMgorNDY0REYyNTQxMkRBMzI0ODZBODE4ODc0NTA4OTFDRTQ5MTcyQ0YwMDMzQzNDRTAyMDZCMDJBOUJDOTRGQjYwOTQ5MUJEM0I4RjJEN0Q5CiswODAxMDJBRjY4NEVGOTM5MTMxNjBBMDdGRTc4N0IxRkU4NDNBOTA2NERDRTVFMjk2MTIxMjlERkVFMDU1NjQ2RkI1QkQ3ODAxOTA1OEMKKzhFMzJGMjk3MjE1QUM2MzEzMDIyQzQwRkY0QkM5QTM4NTI5Q0U4RjU3NERCQzU0RENFQzBGQjM3RjFFOTlBNTAxNjZGOEQ3RkM0MEFEOQorMjgzNDgyOTUyRTA2OTJEMjFDNkI4RkQ3NTkyQjQ4RDc3QkQzNDg3RURGRjY5MzVEQTlGNEE5MjZCNUNCNjI1Qzk5NEIyMzY1QTM5Njg4CiswOTVCOUM0NjYzMjU0QzczMDQ2MTdEMkVENzlGMzMzRjU3NjlCRUNDRjBCODgyODdGMTcwOEZGQTcyMTFCQzBDRjlCQjU3MTVFREI3MzMKKzZGMDA5QTZBNzk3RUIzNjU2RjhCODJBQzkzMDY5NUE1MTFCOEU0NUUyMDBCQTgyQjgxRjMzNzhCQkUyMTk2QjRCNkNGQTE5QjgyOUQ4RgorOEZEREE2MDA2RUUwMjg5NjVDMzRDRkZDNUQ3MUVDRTFFOTg2NEQ1Qzc3MEI2NjgyOEI5Q0Y4NzgzQUMxNDEzMzcxRkUyN0ZBRkFGNDZECis5OTIwNDdGNjRDMUZCQ0RBNTVGQzY1MjVGRTVDRjE2RTY4MUZDQjZGMzU3ODZFMjYyMDM0RTFCMUI0RjA5Q0M0QUYzQTQ3OEEzMEI0MDgKKzQ5OEQxOTJDNjI3QjA2QUFGMEQ4OEU4N0Q0RkUxM0RDMTRBOUE4QTIwRjlFQTQwNEY4REM4OUMxMjI0MjNGRkI1QjBFM0I4OEYyNUM0QQorNDRDNzk5NDQ5RDEzQjE2OUUyOEE2MEM4NkUxNzM4NDc3MjU2Q0UyMkUwMTZBMDMxOUI2MERDOEE5RDA0MjZCRTEzNzYxNjk2MkJDNzM2Cis2QkU2NzgwOTQyOTU1QkRERTRDRjRDRUYzMTc3RTlGQ0U1OEU3MDZCM0JCOEEwMTNCQUVFMzk1MDZFNzM3OEE5QzVBMUY5QUFDQTJFRjgKKzIyNDE4NjU0MjUwMUI3NjVGMDAyQjZCMzVBNzlFRDdBMkE3N0RFMTE5MjI1MEEzRDExOUI2ODdEMEFEMkNEMjY5MzQ4QzY1MDc1QUZBRQorRDhERDgyRUNFRjUxRENCQzE4QzM3NEQ4QTA5MkQ5OUJBRDNBQjVDMjlBOEZEMjhGQjQxQzAyRUYzRTREMDk1QjcwODJFNkQ1RUUxQTVFCis0MzA2QzlFODc3QTdCRTM0OEZDQTI0MDUyN0I0QzM0OUZGN0ZGODQ5MDFBNUQyMjQyOEIyN0FDMzRCNDRFQzUwNzQ0NzY0NEJCRDU1MDEKKzhGQkEwMUVCQTM2OTM0MThFQTJGNjkwNkVGM0MxNTc3RDkxQjYzQ0QwQkQyQzUxOTU5N0VFMDdEOTgyOTc5NDJEODBCMEI2NUMyNTk4NworOTQ5MDgzRkIwNjQyREZGQkJBRDc0QzIyQzNDMTAxMDJFNTdDN0FDMERGNDA5OUM5Nzg3M0RFRjcxMzk0NEJBRUI5MjAyODdCOEUwOTNBCitCQ0U1MUJENTJDRTQ1REIzQzZBNzM3QTU1RTFBMDBBRUFCNTBFNzFGNUQ1QjBDREZFNjE1NTFEQzdDQzNCRDAzOTM0REYyNzJCRTE5NDQKK0VFQzYyMUVBQzAyREFBRDhFNTRFMDREREQyQzNGMDJDRUFDQzk0N0M3OTk0MjRFRkQxQTZDNzVDN0EzNUJEQ0FEMURCQ0I5RjE5QkNFNAorMTJCQjAxOUNCQzc1MjU1MzZDNUNFMjFFMzJFOUI5QUEwNjg1QzdEM0JGRjNEODJFRUZENjg0RThENjNBNTI2MDE4RjQzMDVEMTM3Q0Y0Cis2Qjk3QkRGRkMxRTI4Qjc3NDVDODA4MjkzQzI0Qzg0OUM5QzYxRTkzQ0M2NEQ5OTgyMEZGQkM1RjFEOUYwMTZEREE2MjFDOTdGQTg0MTgKK0EwNDEwRjc4RERGNDUzMTg4NTUwOTQ2NEU1NUMyRUVCRTIzQUQxN0M2MDk2MTY5OTY2OEVFNzZDNkU0NEUwRDBCQ0M4MzlCODA4QUJEQworQjZGQkI1ODZDODdBOTU3MTM2MjE2OTUzMzE1OTgxQUZCMjA4OUMxMTA1RUYwN0RDNDdFNUIzNjcwRUMxNjY0Q0QxMzcxOEI4REJCQzUxCis3NDY3NTBBQUEzNzRFNzFENEFCREMzMUY4RThBQzM4MDRFOTA4NTk3Q0FCOEIzRTcwRUI0MkFDNjdBMEI1QjFFMkU2Mjg3OTZCQzNBNjkKK0YzREZCNjNEQjdERTRFNDA0MTFDREJGOThCODY2ODhBRjRDQ0Q4NjQ3QUFFNEUxRDYwOEEwMEUwODM0RTdEMzRDRkRBRDhDOTVERjIxRgorQUY2MjQwNDY0M0JERTM3MDA1MTRCRERDODFCQjM0REY3NUM3RjhFREE3MDRCMTQ2RDIwRTE0RUJDOThCOUQwQTExMjE4RUM4NTc4QkY1CisyMzlFNTYzMzYwNUM3NjlFRjNFRjY4NTVGNDhERjE2REQ4REU1MzIwRTE4NTFFN0MxNzMxMUNFQjJGOUEyODExNDI0RERDQzBFNkJEMzYKK0U0NUJCNTE5MUQ4OTAxOTc2NTdCNjZGRUUwNUI4M0FDQjg4RTEyQkUxQTQ4RDY2OTQ5MTg4MDgwQTBGMkRGNzFEQTdBMkUzQjA3MkIyMworRkU5NEYxNzYyMTZBRDVGOERCQUNFMDc5MTA2MTA1NkU1QkE0MzY0QkI3NDI3M0E5M0I4NTNEQjIzRTM5NjExNkI4QzFDM0YzRjhDNTQ1CitBNDJGMDJENDVEQTdERDJFQUQzNEMwMUVERTE2M0ZDNUI5NDAwQzBEMzlCRjBDREUxQjFGQ0NCQjY4RDQ3QjQ0ODg1RUIwQUIxNEQyMDUKK0EzMEQxRjJFNEUxODI1RDk3NDJEQTNFQkY0RTQ3RjZGMkY3NTA1NjI0MDBDNTQzMzBGNzkyQTk5OEZGQzE1ODY1MDk0MEMwQjExNTI4MgorRDhDMjJDRDM0RjhDRDUzMkVEM0I5NEE1NDk2QzMzQjM4MDJBQzVENjI3QjVGMEE4NzA2MzExMTkxRUM0MjUyNTQ5RDgxM0M5MkEwMUE5Cis4MDRCMzk0MDI2NjBCNDg5MDk1Rjk0NDFEOTU4RkUzODczQ0Q2RTZGRDNFQTkxRURGRkZGQUJBRjQ2MEI3MUYxQzFFQjk3MDNBN0Q5QUMKK0FBQTM0MzM3QzMwNkI2N0U3NDYwQUVFMUFGMDJFN0UyRTQ5QTMzMjU5OUJBOENGMjMwOUFGMjcwMzYzMUI0RDkxQ0JFRDI2QUY0OTQxMAorODMwQ0NBNzAyM0E3NTgxRTJBREI5NzM4N0E3REJBMjMxODlBQTk5M0I4NkJFREVGNTlBNzJGMjQ2QTRGNThFQkUzNTQ5OTJEOTE1MTRGCisxMzBBQjJDMTY3NzE3QTk3RDY0N0ExNTdCQjZCMUQ5NjhBQzg2QzlBOTdFOEZCREU5QjJFMTQxREE3QTFFRkNFMjEzOUQxM0YwQjc0ODkKKzUxQ0U3M0IxQUU5M0IxOUU5M0I0NTZDNDkxMzYzRTA0NUNENUE0Qzc5RUFFNTE3NEYzMzJBMzZBOUJDMTAwMUI3OTMwMjI5ODNEQTJBMQorOEE4QzdGQUYyMzZEQTg4NDE1QTRDN0EyNjJDQTcxNEUzNzNBNzMzM0IzNjZBQjM1QjlFMzlDNzM4OUE5RDNEQzM4NUVFOTUxRjY2ODc5CisxODhDNkE1MEMzRDk1NTZDRjcwQzE5RjMzMDhFQ0FFMTIwMDlDMzI0RjkzRjY5RTgyMDhBMkE4RTk2ODZFREJCMTQxQjEwMTAzNjhBREEKKzc4RUJGM0U1MkJGMDU4MjdFNDUzQTlCMjMxOEE3QTMxQjY4MTE0ODQxOTQzNENCNzM4QTVBMzZBOUEzOTA1REIwMEY0NTlCMjY1Qzc5MworNDEzMzFBOTY2MTM1MkU0MDE1NzIyMUJGMEQzRUU5QTNEN0UxMDlCRDJGQUVEM0ZERkY1OEM4QjE3REQ4RDQxRUVBNzgwQTA5MEI2QTYxCitFODRDQzg0RTBCNUEwN0I3RjE3NkUzRTNCMjFGQTY3QTZFNTFCMTU0REIxNDIyQUVCQjNGMTFERTU3RTNBMjkyODQ0MEJEQjEwMDVCQzgKKzU4NTk4RDhENzdGMzA2MjhERTI1OEYyNjY3NENBREMyQUMxRTE1MDk4MURFNUZDREY5QTgxMzQ4NTlFRkM5NTM1MjRBODNDMUU1RjRCNworMEFCODI2NzhEQTg3OThBQjU1OEMxOTgxREM2NTU0NUU5NjY5QUVDQzIxRUZGMEY0Mjg3MDlGQzQ1NzgzM0U1OTNBRjU4NDQzNUM2RDQ5Cis3MjM5RTJFNkZFOUY5OUE0NDU2QUI4Q0M1NDA1NkZFMUFCQjlDNTkxRTExQjhFMUZBNzJBQkQxQzA3RjIzQkM2NUQ4M0JERjI5MTRGMDIKKzc3MTFDMUI1NDA1RkM4NDM3MUE5MDUwRkY5Qjg1RjEzMzhDRjI0RDQ0REIyODBBMjg0RjlERkQzNjg4MTYwMjdDOUIyMUY0MUJEN0I0MworMUFBNzM3OTc1ODVGQzkzQzBBNUVGMTM1M0I5MDEyRkRBQjgwRUE4REE2NDhBMzJCQTY4NDQzN0U5MDQ3OTNGQTRCQTM3RjgzQTg2Q0RFCitCOUFCNEZFMDZCNURCMDE3MjAxMkNGMjc2MTNGQkZFRkUxMDhCNDU5RUYxM0FCRDFGMjY2RTU5MjFCNTFBREIzNTIzNUE5MEI4RTY0NkMKK0ZDOTRCOEEyRDI1RTI5NTA1NTgyN0I3MzREOTY1RTkxQjU1MjA2MDE0MTVGOTNCQTBDQTYwNzY3QzYwQUVBQUM4MjY3OEU1OUJBRTlGMAorOEMzM0M5MjU3NjhDREE0MjMzNjkwMDZCNkE4NEU5RUNGNEE5NTc2Qzk0RkJERkRBQzMyODFFMTNFODg2MDNEQTk5MTNCQTFFMTQ4QTZGCis5RERDRDE5RTI0RTM5QjIyMTAwMUY2QzgyNDgwNkEwNDc0N0NCMzA1RjlGQjdCMjJBQzZDNUVCMThFNjg0NzM5NTlBNURCMEZFQjVFQTQKKzM4QUE4RDcyOTJBRUFGRkVBODlFOUFERTQ5MDM0RTBGMDNDMkVEREI1N0QxNUMxMTA2RjJDNTBGQzE5RTI3NjBCOEM4RDFGM0YyMUNDMgorMzA2NDg1QkY0MzdCQUU0QjcxMEZDNERBM0E3QUE1M0Y5QTVCMEVDMTM0ODg2NDk0NDgyNDkzNDhCN0ExNjE4RjU2NDU0MDRFMDRFQjQ4CitEODA5REMwQkQ2OENCMTJBRDIyRjRCNDZGRjJFOUI4OTkyQjgxMkYyQ0ZDOUY2QjQ1RkFDNEI2MTgwNDc5RTc2RkVBQzc5NDZGRDZEQTMKKzk2NTA4NUNBQTE3NkZEQTk4ODEwMzYyMjBFMjg5RjYxMjQ2MzIzNjdDRjc2NjBFMENGNTM0MUU2NzVBM0U3OTE0MzkyNDIxQzFDQTY0NworMTAzRDRCOUREMDI2MzM3QzRGQzVBMTQ4QzM5RjIzMTE1MUQ5RTBDRDQ0MTNERTAzMzc5Q0YwREQxMEQ4MjlCOTVDRkY3MEE4OEJGNTQxCis2QjYwODg1MjlCMDQwMzFDMTJCNzVFNjAxQkQ3MkExQzFDRkM1MkI1RDM3N0M1QjgwNDkwMTA1QTBCREQ1QjZGRTU4MjFGRjc3RTFBNzQKK0RFRTVBRkE1QURFRjhFNDczOTc1MzYwOTY1Qzk3QkY0OENGQkY3RjA0REFDNzg3OEQwQjIxOTBBNjY1OTZFMTA5MzRFQkMxREE1NTc1QgorQjU4NTFEMDRDMzRCQUIxNzk3OUIzNURGNTZGNUUzREQ5MTRENkRFMTlGMjIzMTA4NTQ1MTNDMjc2NkFCNkE2QzU4NDgxQjA5OTNDQ0E4Cis5NUI3M0MzRDQ1NDE0ODAzRkRBM0Q0MTNGOTIyMEFFMTAwOTdGQkU3QTlBNkNERDE1MENBMEY4NTc1Rjg4MDZCN0Y4RTM1RDE3REJBMEUKK0M5QjVCODI3QjhCMjhFNjM0RDRERkY1ODkwRDQwMjY4Qzk2QTc1MkE4RDAzRUVCMTFGMDZDNzczNkVCNjA4QjEwMUMyMUU3MUNFRUM3MAorNzNCNTRDQjYzOUMyM0QxMTM0NDM5M0ZBODU3QUJFNzJCREE3RDBCOEMxQjQ3QzkyQTE4NTE0RUE0NDQ2RTZCQ0YzQzcxMzA1RTUzOTYzCis5QTBBRTk2NUQ4RTBFMTRCNTFERTc5NTMxRUE1QzNBMUMwQTlGOEI4Q0JFNDJBMjQxODBFMDlBQzgxMUE4NTgxMUE1MzZDNTY4REIzOTAKKzhGMTE3RDVBMDZDMDc1QzQ1MkNDMjIyNkE5REYxNTdEODQ1NzBBNjVERTYxMTlDRDY5QkMwOTM2QTBBNEUyNDk1MzMwQTAyM0VDNkM3OQorRUI4ODQ1NDU0QTg4QURBMUQyMkIzMTQ3QUQ5NzI1MzdDRDZDOEI3RjFENDFCNDEzOEZENkU4OURGQjY1RDEyQkJBQTI1QzBFMTgyMDc3Cis3NTVBRjVGMEI0MTQ3REU4RDE4QzU5RkYxRUI0Njc3RkREQ0FGMkZFRkNDNDlDMEIzMjA2QkEyNjE2MTE4QTg2Rjg1RkNERTQxMDU4Q0MKK0Y4QkFDOTA0NUFFQ0MyOTFDNUFGQjRCOTJCMDY3MzE1QkJBMzgyOTVDMjU2RkRFOUI0RDc3Qjk5NDcwREJCMEI5MjQwRTY4MkNFOURGRgorQURDN0RFQTM0QkUyNDBGNjQzMkRGMjkxQzE5QzFGMkE0RkZGMjA2QzA4MzJCRTYyOEVGMTU2NzJBMzA5MUI3QUU3OTY3OTgwRDEwRTAzCis2RUFDNkRBNTQwQzA5NTAxQURERjk4NjBDNTlFNkQ3MjFFNTU5RjNCRjgwQkREOUVEMEY1RUUzRTk1MTMwQUNGNkM0RUM3MTYxQjcxOTAKK0NBNEQ5Rjc0RkZEQzA2MENDMzlGQTIwODExQzZBMTcyNUNEQzJGNjFDMDgwMDM2MTgxQUEyNkM0M0UwNTZEOEZGMjY2MEY0OTJDOTk4OQorMzUxQjM4NDRDQzIxMEZFRjA2OTQyNjUyODJEQUZCQkI2QUFCRkRGRDYxNDhCM0YyOTgyOTkyQUQzNEJBRjNFMzRCQzFFMkRBRjJGNDVBCitCQ0ZGOUE5ODg4NDEyMTU4QzczRjAyODlGNDRGNzc5M0IwOUFFMTFENzc4OEIyREYyNTM5RUMwOUYwRkM3RUU5MURGQzgzNjA3MEEzOEQKK0YxMkRFMUI4NjkwMTk2NjQ5N0FFMEVGQjFDNDAzRjgxREE1Q0QzNzA0MUYwMjQyQjU1NzE4QTlCNDg1NTM0NUVBRjRERkVCNkEwMDIwQgorMzk5NjYxOENFQzU4QzA5NDhCOEQ2ODA0MkE4NzM0M0U4MUZBQTgyQTIwRjE1QUZEQ0U2ODU2MjgxRDgwRTcwODI3OTlCNjU0MzU1RUIxCitDNTE1QjBFREI4NDJGMTUzQTMwRUYxMDlGMzI4MEVFQUU3MEJEMTEwNzlCM0YzMzlFMjE4QTc3QTVFNzNFNTVGNzczOEEwQzgxRDI1RkQKK0U1QTI0RUE4OTlGQUQ4RDdENUYxNTZCQ0E4REYwMTlBQjMxQkUwQkU4OThENTIxRDkzRTAyQkNBNTNGN0FGQ0IxODI1QTA3QkU3Njc1RAorNDRCQjg4NjgzNTQ0MTZGQTNDQjA3MkUwMzJFRDRFMTQzOTdEODk2ODlEOTk4QUIzNTQwRjM4NTFGNEQyNzFGMDk1MDI3MEE3MjZBODg1Cis1RkVCNTU4QUQzNTMzMDhENUUxNDQ4QjM0ODdGODk1Q0QwMkE5RjFGQ0Y3MTY0RDMyNzQ3Q0ZCRkQ3QkJGQTYzNDcwRTg0QTQwRUNENjAKK0RERDlENEExNDBDMTgxOEM5QjE5QTY3RjRCQTdENENDOTU4MjQ0NUU1OEY0QTlFNzJCRTNGQTY2RjA5RkVCRERDNDFBRTk5NTUyNTg0MAorOTRCMzcyQ0ZGM0NDQjc2QTZERUNDMjA5OTFFMzhDNDlCNzA4MzRFMTY0OUNBREVEMjlDN0EzMzY4QTkzRjE5RDE5QzhGN0JGRUU5NThDCiswMjFGNTQ3MzFFNUU2Mzc5MjkyQzJFRTg4OTgwNTg2MzNERjE5QkM1Rjc0NjNCNDhCQzEyREMyREU5MkMzQUVCRTJFN0VGMjczMTcyQTYKK0IwNjRCNjA3M0JBNzk1MEQ5QjIwMzExOTQxMTQ5NEU2OTQwOTg4MDM4NDlDRjNBMjc1N0FERDc1OEM3MjYyOTE0MDcwODVEMTdCMDU0QworMEI1QUIzNkI4NDNBQjEwRTQwQkMxRDU1NkU0MkY2RDEyQTQ5MzRBRDk4QUExRENFMUYzQjVFMzZCM0NGRTk2MURFOTFFRjZEMjQyQUExCis5M0QyMDU4Mjc5OERFNzE0Njk2NDg0MkJBNDk5MzREODExNzUzNkJDREFBMUJGNENGRDM5RkFENTZGRDExMDEyODUwNkYzOTExQTJGODAKKzBDRkEyQUYyQjZGN0Y5MzE2NDVGOEY3QTQ4QTI5MzQxQkQ3RDUwMzUxMzYwMEU4Q0UxOEEwODY1NzhDMTU4QkVGNDIyMjE0MUJBMUFCOQorNzQ4MjkzNDgzQUI1QkE3NTA5NENBQzY5RDZCNDhEOUE1OThBMjI4NDMzMjJENzFGRTRFNTREMDE2Q0JEMTM5RjFGQjM4NzMwQTEzN0MyCitCNTZGREMzOEZEQ0Y0QjkxMUFGNjVEOTY2NkZFODcxQTAxODRFQjNDODY3N0FDNzdEMjBCNjU4RDIxMTk1NkIxMDEzOTZDNzJDNjM4MjEKKzVDMjFGQ0Y1MTQ2MTVGN0ZCRTRFRUIxN0RBOUU3OUFBMkREQjZCQ0Q0ODZBNUIzREI1MjJDNDlFNzgxNTQ3NDlEOTY1NkVCREU2MzAwNworMjFERENGMkQ3MzhFQzg4Qjk2RTIwMThBNzZCQjQ3RjcxRUNDNkQyRUEzMzA3OTZCQ0U3OEMxNTAyQUUwMzNEMUI5MzZBQ0Y0QjE0RkE3CitEQTY2NUE5N0U0RkEzQUMwOUY5QzI2OURDRDU0MjJDMjBCOEU1RTFFNDUzMjI2NjMwNDFEQTAxQ0ZBNzI3ODdFOTAzRDREMzk3NDc5MEYKK0VFMjI2NjZFQ0M2Qzg5QUFEODlGMDFFNUM2ODNEMzFCNjlEMjk4RDVDODIzNDFFMTc3Mzc0MTNCNDRCOENERDEyMTcwNUE0QkM2QkY2NworMkNFRUVCN0M5RjhCMTNFMUVDQjc2MEE3RUZGQzFDRTYyMjQ5REFBRDFBNUYwMkQ2NUZFMkREOEQ3NkI5NjREMUVBOEJBRjlBQTI0MjhBCiswMjBDRTZBQUE0ODAzNEQwRkNFMzZDQUQ5ODJBNDY0MjhEMkEyQjI3NDFERUE2NzRDMDE4QzEyNzEzMjg5QTg5QTYwODYwNzE5NDYzRDAKK0IzNUM3NkZCRkY5QzM5QTczQjMyNzdCMzU3NDkzQzcwNEUxQkZCQ0ZCODZCRjU2NkFERjcwRjBEREM1RDNFMDFBMDQxMzUxMTM1ODkyNAorMkNDOERCMzEwN0UyMjk3MzM5Njg2MDhCRTAwQURDMUUwREU4MDQyN0M2NUM3NEY2OTZCRDI1NkE5RTc0NzMxRUZBMTgyMDI4RDAwRUY4CitFNjg2QTUzNjc2RkJBRTk4NzBFOTNDREI3QzNBRTZBQzlGNEY2MjlFNDBEMjA5RUZCQjI5NjFGODlBQ0NERTgxN0M0OTA2REUyMDUwRTUKK0RFOTY0NkIyMTZFMzFBNEZBMDJGOTk0MUE5QTEwNEY2NTY4MDc5NjlFNUVENEE2MzkwMDBDN0JFQ0VBNTQ5OUI2QkVEMTNCMDBDN0ZEMQorMTQ3M0JGMzIyQjNBNTZCQkIyOTBDMjMwQzY3RkQ1MEVGQUUzREE3QzJEOEZEQTI3QjBCQzY2OTQxRjgwMTJGRDRBNDBEN0U2NUU3Q0RECis0NDk4QjYzQzQ1MkYxNTlCQTE3RTJCOTM4QkZBMzQzOUJCMERDNzFGNDU1MUVCNUREMTk2QzhCN0MwQURBRUQxQzI1NTg4M0RGQkY5MDAKKzk0NzQwMjgzMjkxNjkzQzlEQzc3QzUxNEY0NTA1NTJDNjYxMjIyMjUzOEM1MkI2NDc0QzA3N0Q3MUUxMzY5MjYzRUNCNDk0ODE5NDUxNAorQ0RBNkE0OTFFQkE0NjRDMjYyRDkwQzExRkQ0NzA2RDM5RUI1RjNGNEVFRjI3QUFGMTUwREYyRUVBRDdFQTA2RTk5MzU4QURFRTBGMUQ1Cis5QTI0RENFRDJGQjcyREI4NDlGNEVBQ0Q1MjM5M0M2RUM4NkU5Q0RCNzhEMzZCNkIzMjgwQkQ3QjFDM0RGMDhEQjNCRTczNjg3MjMyREUKK0E0QjZCNTg1Q0JDMzc0ODE2NEMwNTVGM0Q3RjUzQzMzRDlGNzZCNURDN0FENzQyNjNFQzM2MkQ5RTJGQTlCRjlFNDI0N0JCOTAwQzREQworNjBFOUI0ODk4NTMwRERFQUZFMkUzMTY4MjdFMUNCMTNFOUU3Q0Y4OEQ5RkUwRTUwNDNBNTVCOEE1QjEwQ0U2NTREMkQzMTUwNDEzNUE4Cis1RUI1NjY2OTFCNDgxMkQ2RTA1RjM0QkUyREM2QzFCRjcwQ0ExOUE2NjMzMDAwNzMyRkVCQ0UwRUJGNEUyODcyMUI3OEExMkYyM0Y3OUYKK0FGNDNGMkM2MDBENDFFQjRFMzY5MEI3RUEyNEZDMUFBMzA5MkI1RUE1QUE4RjQ3OUY0RjU0QjJDNzcyMTM1MTk5MkMxMTRCOEE3OTYzNgorRkQyMzVFRTkxRDZCNUIxQkQ1Q0Q5MThFQjM0MzZDOTI5REMxNTFDQjVDNDJFRjRGNjJEMjE2MDRGMEYxRUIzRTAxQUE3ODQ4N0I0QjkzCis4NUQwRTA5QjhFMjUzMUQ5MzZGNUQzRUQ0RDhDMjQ0QjgzOEI4RTcyNDE2RjlENDcxNkM0MUM4OUUyOTgwREFEQTkyQjUwQUM5NzZEMzgKKzdGOUUzMjA3NzVFQzFFOUIwOUFDOTM5MTRFMDFBNzE1NjZDQTkzNDNFODUzQ0Q2M0Y5QzBBQ0UxRkZDNDFFMDBCNTAwM0FDNUZCNjhCOAorMERBRTVGQkVCNkNEODQxOUUyNDM0REJFNDBEMDE3RkJDREY2MTdGM0E4QjkxNkVFNUQ4QUNEMzY4OUE5RkE0MzhGNTRDNUFFNUMwMkUxCitDQzY2MDRDMDIxNDAwQTQzN0U3MjlDNkZBOUJFRjU1QTA0OUM3MDU2REY5MUM2OERBMEMyRjc5OTBCOTc5OTRBMTBEQ0Q0OTI2MEZDQzgKK0JBMzE1MjM4Q0MyREVGRDA3NjUxREE5NzVERUMxODg5NzIzRkE1MDJFNEJGQTdBREREMjUxMzhDODRCQzA0OUU0RUQyNTg4NUI5QUE2NgorNEJBMThCMjM3NjRDM0FCNDEyMTNBNDMzOTNFRUI2RkI4MzlBRjI5RjlFNEI3QUY0MzE3RTQ1NUM3RjM3NTQzQzY2OEFGOUI4QjZEQUFDCiswNjgzNzBFNzg3QjdENjRBRkQwRThDMDEwQ0NFOUJCMkMwRDY3QTZEOENBMENDRDJGNkRFM0ZCQ0RFMUJDNkNGOUY3QUU4OTNGOTNBRTIKKzlCQkU5QUU2MjkyMUMxNzZDOUQ4N0RDQTQ2MDhEQUIzQTQyRUU5QzJFMUYzMTgwRDIwMENGQzJDQzk3MDYyOTVCRjJCQzVCNDFGNzY0MQorMUUwNzNDMzZENTAxRjdCMkYyQTQ4MkQzREU2N0ZFMkE2NUFGNzJBOTA5NTM5RDExMDlFNzA4MDBBMDEyNjMxNTQ0MTQ2NEJBNUQxNjg1CiswRDA0NDU1NzQ2QjRCQkRDMDg1RTdEMTVCRjJDQTVDRDhFNzE3RERFODQxNUMxNzY2MDU3NDczRjUzRjc0RTU0NENBRkJBMTdENUE0RDMKK0Y3ODQzODNGQzVDQUYxNTMyNjM3OTRDOERFQjlDMDYxNTc0MDdBMEQ2NUIwREZEQ0MyMDM4MUNBMEI1NDEyMEU4NzREODE1NENCQzAxNgorNkYwMTVBMjVDRkNERDUwQTc5OTI5QjJBOTM3NEJCNzM0RDNGQ0U1QTcyRTI3MDA4OUNDRjZFQ0MwRkFFOTNGQTczOTdEQjc5QUM5MzAzCisxNjFCRUM1MUI4QzU5OTg4MTcwNkIxM0E2NzMyNEYwMjlGNjJEQUJFOEJEMzhENkZDNTQwMEZFMjhFQjkwMDMzQ0ZENUExQzRBMjI3MUMKKzgzNzVBQTk5NTE5MkU0OTE0MzZFOTZBQzQ3NERDM0EwNTVFNUQwREI3NTExNkM4OEUzRTRBMjU4MTBCMTVFODJDQTBGQUI3NzU0NjMwNQorN0FFQzZERkRCNTY5QTJBQkJGNUY2MUVCRkI1MzVDRkNDNDUxREVERDEwMDFEQzg5MUE3M0JCQzM3MjY1OTI1NDNEMTVBMkM5MEQ4NzQ0CiswMUI5OTZCODM5QUY1QUZFNUFEODVBMjc4MUE3NjlENjlCMDc5NDg2RDRCNUJEQzEwMTlDREI2OTA0NkU0MTkyRUY2N0VGMzAwNDcxNUQKKzdFMkQ0OEZEMTAwMERBOTNDMkQ3QTk2M0ZCODBFRjQ1QTBENTNFNzA1NUQ1QThFQjg3MkJEOTE5MUM4QUE1NDRCOEJGMkZBQUQ2ODUzMQorMzkwOTI0OTU3MTY1NkE2M0VGMTEzQUI4OUFBRjNEMTJGMUEyNzkzMTk3OTYyOTEwRDQxQzVDNjkxMDAzNDhDNUI0ODZFQThDMzU0MjlECisxMTIyNTE0MkE3MEE1NzhCNUQ0QUZFQTMzRDZDNkE2QzIwQ0VFODdDQkE5Q0JDMzA4MzUwNjdFQkQ2MDJDNEI3RUEzQzdBNDFDRjgwNjEKK0IzMzdFRTlDNEUyNzlFMjAwQzkyNEIxREEwRDgxQzcwQkUxODMwNDg3REU5NjFCQjg5NDMwMDhENkZCQTJGNUY1QzBBMEUzMTlEMEVFMgorM0M0NThBNjlENjg3RkFBNUZEREE5ODVCMzU5M0NFQjc1RDA5OTg3MzZFRjI2QkUyREMyRjdFQ0Y0MTdBNUQxNDBBNTE5NTNEOUYwNkI2CitGN0VFRkU1RUYxQjEzREM1MjVFQUY4QTIwM0Q0MzcxMTQ0NTQ4REI4RDg0OTAwNUJEMTc1MzU0QjlFMDgzNDIxM0VCRjI1NTgxNzY1REYKKzdCNEQyMjE0NTY4Qzc5QTJFMEUyREI3OUI2RDlBMzMwQjVENThEOTMyM0NDMjE2NTRFQ0VDQkRGN0JBMzZBQkM5RjMwMjVBQTQxNEExMgorRjRBMDgwMzRBRjQzN0JENEExODQ4MTFCOEM4NjFEMjFENjhDODlFMUQxOEU1MUFDOThBMzA4RjkxRDdDREU0MDI0NDlGRkZCNEQ5MkFBCis3Q0MzRUUyNURDRDgxRDAzNzEyQzBDQjE2NjZEQUE1NjY5Qzc1NTJDMTk2NzlBMkYxMzY3QTIyMjYzNEEzQjNFRkY3Q0IyMUZCQkMwRjYKK0JDMzdDNjJCQUM3RkMzREExOTUzMzM0NEVEQjVDRTU3QzhDREQ4QTY2MzdBNzVDQkJGODEwMEI4MDQ5QzFGMUJEQ0I2OTVGRTA1MkExMworNDc4RDVCMTZFMDI1OTc1RURBMDU5OUU2QkU3OEYzNDVDQ0Y5OUEzNDk0RjYxMEZFNDYxNENGNkQ3RjQ5NTE2N0Y4NjI0RTVBODM3MTU3Cis0MUM5OERDQ0U0MzJBNzAyMjJGNEJEQjJDOTQ2RTgwNEJGNTkwMUU0MzIyMkQ4NEZEQkFDQjUwNTlERDlCQzlBODc0QzQ5ODIzMEQzRjIKKzU2OTlGNjQ3Qzg3M0Q2MDE3NDg4OTkwQzI1RjRBODRFQzRDMzhBREQ0NkFCQUI5M0EwMjcyMjAxQ0UzRkEzQjFDRjIzOUZDQThGRjUxOQorOERFNzQ3NDUxOENFMDVGM0YwRDlFNzJEQTQ0NjU4OUNEN0MwODRCMzU2N0QyM0JDRTMwNDlGRTU5RjA1RjU0MkEyOTcyOEIwOEE5QkQ2CitFODUzRjM2MzdBNENDOTg2NTE5NkEyNEM5QzZDMzhCOTdFMkQyMDA1QzJDRDM5NUU5NDI2MEFBNzUzMEE2QzEzNkJCQ0ZFQzMzM0QwRkUKKzc0MDE0RTZGRjk3QkI3MkNEMDc2QURBMjFCOTYwNDYyQjBFQzcwOTdBNzgxMkVFMzA0NEIxNTI5M0EwMkUzRTBDNzFGNzZFMTBBQ0RBMQorNzNGMjlDRUNENkQ5QUFCN0NGQ0EzNDA1NzcyNDYzQ0JFMkJBNkQyM0EyNzA3NTVDM0M3NDBBNUJDNEFEMjdDMzVCOTU5MzJCQ0Q4QjgxCis1RjJFODc4NkE4RkZBNzc0NkRBODkxQzgzQTk2MkEzRDg4QTdCNjJDNzIwQTBDNzM2MDM5N0E0QUM3OUQzMkVGMDIwQzg0M0ExQUQ4NTYKKzE0RkNFQTQyN0Q3RDQ1MkVENkQyNTIyN0JGRDZBN0M0OTM0MEUxNzg5MDZBMDlENjE2MzM3RkU3QTNCNDQ4NTRCN0I0NDlBNDg1NkY2RgorQUQxNTczNjY1MTc4NTA2NjZGRUYxMjdFRTg3RTk3MjM0QkU1RTgwNTlFMTk3NTI2MURBRTM1MzA4RjMxQzNFMTREQkFDNTZGRDdDMDU1CitCREVBMDI4MzdGQTQxODNGMTU4Rjg3MTUwODIxREE1MEZFMUE1N0E3NjQ4NEZBQjk4RjgwOEM5OEJEREQ0MDY2MUZBRDhCQTAwRTY0QzkKKzI1MTdFMjU5MTc5RUM0MERGOUVCMDA1RjUxN0VFNzJCRTdBM0YzRjIyNzRDNkZGRTM3MTJBNEJEQUE4NzJFMTlEOTNEOEMwMTA1NjQ3NAorNDFENzJCMTYzQjQ2MDk0Nzk3N0Y5MzIwNkNEQTAyODJENjNGM0I1REIwRDg5MTFCNUY5MjFENTA1NDA4MUI0NjBDRjZCMjEzRDI1NDdCCisyNEJDNDZDQ0RCRkEzRTdBRkRFNzQ1MDFCNjhBMzFCRTVFQ0QwMTFGNENFNkNGRkQzRDc2MkIyRDkwMDA1QkE3MzJGMTU1ODFBQjZFRjIKK0U5OTI2NEEwRTA1NUVERjNBMkQ4QzlDRkNGQzA5ODlBQkUzQjJFOUI4RkYwOEEyQkExRUFFMUZBOTJENDlCREU1QzQ0N0M1QzE1NkNGMAorRTVENUVGNEE0NUExQ0ZBNzI1NTRCMEFENzc1MjBDNzI1NkZEQzJBNzA1NjQ5MkQ1MkQ2Q0I0NUZFREQ1RDYyN0EyODk1NjM5N0IwODY5CitBRkJGQTUzQjVEM0QxMTNFN0VDRUEwNTFBMEUzRkFCN0NEOEU2MkJEQzk0RjhCNDgyRURFRkUzRkNGOUQzOTFFNTk3NzdERTgxRTU2MDkKK0Q5MkVCNzA0NDM1QjI5MUUzMUNBQTY4NUUyMUFGNDkxQURDQjJFMkNCNjdFNDI4MDNCOUI4NEE2NDc5QzE0OTIwNkNCNTc1MDNGNjY2OQorMzIzREJDNzE4MDA4NDREMDVDMzM1RDk2NjM5OEI0QkFCMTIwNzk5NjU3NjgyMzZEMjk5OTRCOUI0RTNCNTc5NEQ2QTg5NzZEMkM4N0E5CisxQUQzMUJFNUQ5NjAzQTdDM0EwNjFDM0VDOTgyN0U2RTQ4RDEwNUYwOTNDRjExRTE4OEYyMzY4MTVEN0QwNEI4NzlBRkNGNDUzNkM5RDcKKzk5NzIxODFGM0I3NzQxRTQ4QzcwODFDRkVGNUE3Q0YwRTE5MjdFODBERDA4RTNFQTM2MTNGNUM4NjcxNzUzQTAwNzE4QkU0MkVBNjc0NgorRDk1MzJENUE5QzZDNzA1RkJBMTY4MjJFN0E4NDdFOEIxQzE3ODAyNDc1NEI4MTJGNkIwOENCN0I2NzlCNUNFMjlEMDQ0RTlBMkY0MUU3CitDRTZERTZCMDg4QjNDMUQzQ0E4ODJFRTY2OTJDQjE4REQ5QjUwNzBDQUMyMjRDOTVCRDNCRTBGMEZCMDcyMTg5NDdBOUIzOThDNDBENTUKK0QwRTA5QUZDNzg4RDQzMzkyRjEyMkRGM0NENzQ2MTJBMjIyNkZCRDc0QTUwQzUzNDU2RDM0NEUzNzI1RTIxREIyRTJFMTk2RkUxNTMyRQorMEVBNUNEMzc3MkM5QTBCM0EzQUU4QzNDNjRERkVBRTRDMjFEMTJGNTcwQTkyQTg0Qzc1QTg3ODA4NEVCRkFEODcwQzFBNURBMzcyREVBCis0MzNFQUZENzlGMzUwRUJCMEVFMjA4MjJFNUE1MkM5MjczMEZEMkEwRDA4RjlBMDA0REQwODc4NTNBNDhENDk1MDdBQTVCMUExMjdEMTkKKzkyMURCQ0U4NkNERDQwN0I1QjQzNThFMDk4QUVGMzM0QTlGRjdFNEFCM0RFOTREMzQxNEU0N0Q3NThBNEYzNzk5OEJBNjMyM0EyNzM4NQorMERCMEQ0MUY5NTgwMzQxNTcwQTRDQTcxNDlFQzZFNEY1RDk1MkU1REY4MDI0Rjg2RDJGQjk2MkQ3QTcxN0FFREI3Qzk1OTY4RDNERDQxCitERTQ1RjM4MDgzNkYwM0I5MjI4NDAxQjVBMEVBOEJBNjREN0FCNjBDNUI0NUI4QTI1MDUwQjk4NUY2M0Y2NkJBREU2QUYxNDlDMEJFNTIKKzU5RDM2OEVEMTcxNkQxMjVCRjZCNTU4N0Q0NDNDNkQ1RUQ3MjU3QzI4Q0FBNzQ3MTIwNTY1RkREQzAwNzhENEQ4MDVCQTkzNzI0NDc3MgorMzc5MjdBODIyQUI2RTA4REFENEE2NzJGMjhDMEExMTU5RjA2MUY0NkU0MTYwNkExRTAwQUQwQzlCRkRDMERCNTcxMTQwODNFMzE5QTcxCitFMTUwRjZGMkI1QUMyODk0MjVGNkE3QTQ0MEE4MzIwMkQ0QUE4QjRERTc0OTJBOTVGRDM0N0IyODFEN0VERjYzNDI3NTY1MTE3NThENkMKK0ZCQUFFNUUwNzNGNUQxNUEzNzhGMzZERDE4OThFQ0FFNDU4MEMzQkY4OUQ2NDE2Q0I1MjE1MDZGODZBMkZBRkEwNEE5MUE5M0IxOTFCMAorQUJENUQ3NzI1RUVEQjJCNTk4M0MxNzMzM0I3OEQ3REM4NEVCRkI3RTRBODQ5RDNERUIxNjc2QTQ0REYyMTUzNTkzMUZDMTZEOUQ4MThBCiswQzVBOEZFNUU0NDI3OUUxMkJDMUNBMkU4QjJFQkY5MDU3NkNFQkE5NjU2RTJFQkVENzI1NjQzQUIyNjM0MUQ5REEwODBFRTU3MDk4QTMKKzI2QjY5RUU0Q0VDNUVFNjg0QzYxRDAzODc2RkJFRUJFNjUxRDk4MDczOENDMjNDQ0NDNzM3NjMyODMxNEY1QTZEMTA4MzU1MjYzMTYyNworMUMwMUE1MDE1MEZFODU0N0I0QkNBMTgxRTFEODg3RUVDNDY1RTJBRjNDQTI2RDRGRkE2OTlCMEVDQjlFQUIwREE3MUE1OTBBQTFDRUNBCitGQjhEQjBDQ0RBMThBQTc2MzM1REI3ODc0QkRDNDkyMjREMURBMzYzMDExQjBGNzE4N0QyRTBEOEZEMTkxODlBNUM4MkM0RkZBQzRDQjYKKzBGQTdCMDUyMUJBNTE5NEQxMjIyRDA3NzlDNzRFRENFNjcyODQ4QzI3NUM4RjhFOUFGMzlFMERBM0Q4QkU5QjFCRDQxMThEOUIxMURBOQorRDIzM0Q5Q0JFOEM1QUU1RDJBNjBGRkY3RDI4NTY1QTY2MEQyN0Y1MTVENkZBMDg5N0NFQUQwNEM2RDZFMjUzRTBFRDVFNTZEQzFGMDA1CitGQ0UyQUQ2MThGNzlDREE2ODI2ODc1RDkxMjYyQ0M2RDZBNjRCRkQ3MEU3RkRDOTY1Q0JBOUM2QkQ2RjI1MTc0OEE1QTQyQkVFNEFCMjkKKzBFMDI2MkE0REI1ODAyNDlBMDBDNjlEMUNCREQ0OUUzQUM3MDBDQjk3M0JDOTM1OEFCRUY4QTExNkNCNUQ4RDQ2NjhDMzAyRUJERjA2QworOTUwNDY4NEQ3RDE4RTUyMkY3QzQyRUM2QTc3MTcxNTUyQjg3M0U3NTNDMUExODg4NjY2RDIzRTZGOTIyNUQwOTJDNkRCRjZBMEQyN0M3Cis2OTMzNjMyQzVGMUM1RTAxQzhFMTM5QTlFQjlCQzA4NDgyOEY4NTA5NUJEOUU2RUZBMDIyNEY4Njk3N0RDRkU2NTNGMDBBQTY5MzYyM0QKK0NFMDQ2OTNBN0VFMjM4NEEyODVBNkJEN0FDODc2NzE2NkZERTc1MTk0RTMyNkNBRjQ0N0ZFQkQyNDJDQkZDNzFCNjM3NDg2Rjk5MzRCRAorMUFBOEJGRTNDQjg1RjNERDI1OEUwNzlFRTkxMEFGQTY0NzcwRDVFMzBDQTlCMjg5QTREN0ZCN0NGQzQ4QTcwNDA3NzREMzZFOENEMDYxCitBQjA2RkNEOTIzNEQ1MDMyRUY2OEFGQzk0Mzg1MEU1M0MxQzM5ODAwMTc1NjNDNjdFODkzOTNCOEVFNEQ5MzU4NUE0RUYxNTMzRDVGMEMKK0E0MEZBQjZFQkU4NzIxRjU4RDA1QUE2OUQ2MDY3QzJENkNCMDNGREYwQjgzREJEQjY5NkQ0RDRBQUYzMTMwQTk4NzI5REE1OENDRjU0NgorQUIyMjAyRDBCNEFERTZCNDg0NUExMjAyRDNGMjQ1NkUzNEExMTAwRkQ2RDQ0NTIwMzE1M0ExRDExRjNBMjUxMUNEQTgzQzkzNkFFRjNBCitCMDVCNUZCMzJCNzYwMjkxNTNCN0ZCRTAyMDU3QUY2OTkzRjQ3MTQ5RTkwMDgwQTNBRjdDQjI5NzYyMTQ4RDZGOTQ1MjBBMzQzRTUyNUQKKzk2NDZDMEM3OUYxQzc5RTc1NDcwRDIzMkUyQjJDQ0MwNEFBODk5MDkwOUUwRDI2REM1NDA1ODJCNjk5QTcxQkI1MTZEQzI4NjBDQUY0RgorNkYwQkZDN0I1MjkyMDUyREE0MURCOTJCQ0QwMzA4NjNBMTE3Mzc4QjkzREY3Q0Q5QjAyNTI5NjRCQjREODAwMDRFRjhCMzAxMUU5NTUwCitEQUFFMkQyNEYyRDk2NUU5MDM0MkQ4NDdCMzY4NURCMDU2MzFENTUwQzFGQ0Q3NkMzQjM5MDNFQ0VCQTFBMjQ5NkYwREYyOEY0RkEzNjcKK0M5QTlGREI0OEU1RTE0MTBFODE1RDdFOTM1MTFFRjdDOTQyMjQ2ODZCQkU4MjdDODMzRTRDMTIxNzQ3QUY3OUM2OUEyN0EwRENEOTgyRgorOTFBRjBCQUY5RUYzRjk5MjFCNzk1QkY0MkI4MTdEOTNERDREODE2REM2OThEMDYzQUZCMzA2Q0MyMDAwQjM3QUU5MzEwNUFCMkU2REFFCiszMkY5REY0NEMwOUU3NDY2QTYyQjJBRDQ4QjIxNjM3NDYxMDk5NENCMTIwNzI0RDAwMDBBQjU0RjY4MzdEQzY0RUQ0RjZDRTg2ODRCMTQKKzE2RDdFREI5RDlBMzk5RDM5Mjc0RkVFNkZENDFEOEU0MTJCMTU4QTI2QzMwNEZCRDdDRTBDNEY5NkQwMUY1QUI4QTIwQjFGQzRGMDBBOQorRDMzQUFEMkM2NTZCMzEwNTMxOThFQjQ3MDQ0NjBENDc2RkYyRjUwNTMyMTIxMjkwM0ZEMjFFMjA1OUM0NzA2NDMxNTJCOTlCMkU5MDNBCis0OTFFOEUzOTRCQkNCMkMwNDExRDZEODYyMTBENUMzQTQzQkZDMkUwMUVBRkRFQTcxMkY2Q0NDQUE5MEFEQzJBMzU4QUM2MjcxOEQ0ODIKK0ZDMzE5MTRFMDE1NzczMzI4M0JDRDI5REY2RDJBRkYwOTRDMjQ5NkJBQjZBQTcyMjY1MjE1QTRCRTM0MzYzRUI4Nzk4ODlFNzcyN0FBRAorMDU0RjkwMTcyQzFENjg1OEM4QTMzOERGNkMxRUZDRDY0RENBOEFDRjQ2MDM4RjQ4MzkyRTc1REQwQkZCQ0ZERThFRTA3OTFDQTJDMEEyCis4QUZEMTZBRTU2MzgyQUNDQUZFRTJCREZFOTdEQ0YzODUzMkMxOUJDNUUzNkY5RTVEODI4MDZEMjYxNzEyNjdCRUNDOUZFQUZGMzAwMEEKKzAwNTY4NjYzM0ZFMjU5NjdCRUQwMDk2ODQzQzQ2NEJDQTAzMzE0RjFDNTk3MUZERUM4RTI0QjgwRDBGRDk3QjdFNTc2M0I0MjdFQkQyNgorRkQ4QkQwODZBMkM0NUZFREYyMzIxOENDRDM4MUJGMzY0RUZDQUFCRTA0REE2Njg3MjQxODA1RTM3QUU4NjY3ODZERjk4QzYyNzQ1RkNFCis5RTBENjMzMkYyQkI5MEMwQjJFRkYxNEQwOEU4RUVBNkJDREY2NTBEODk5NkY0ODM1NUQyNkNGQkI4NTlDREI0MTg5NzNBNjVBRTJDM0EKKzc2Nzc1OEFCMjg4QTAzODgwN0Y0RjY0NjlBODIzQTlFQUQ3NDY1NjAxMzBBMkE1MzA4QUQwQzM2NzVDQTg2NDJCMkI5RkZDQTgzODJDNgorRTYxRDc5NTlEOUJCMzY5QUZGQUQxQzY5QkUzMUUwMEYwQjIzRkI4REY0MDdDNUVDNjhGM0JGMjk4QTM1MzUxODQ0RUI5NjUzQzgzQTAxCitFREJFRTc1Rjc5MkM1MDJERjUzMjU3MTIxREM4QThGMjY3MEFGMUZDNzQ3MjI5QjUzQjcxMDBEMDJFNzM4MjFFMTc2Q0Y1Qjc1MThENTMKK0I0MjBCMUJEQThCNzBDRUFFODAxRDc0NUM2NjIzMUU2Mjc5NzA4NENCMzIwRERCMDIxQkQ1ODMwQkExRDNGNDlFMDM4NjRFNkE2Q0QzNQorMzQ1MTFGQkZBRThBNEVDNEUzRUM4MTcyMjhDNDBGN0Y4N0Y1MjQ3OTBDNEEzQzRDOTBDMDEwQ0Q5NjUwMTYzNDUwMThDMjdBMTMyNUFGCitFN0Y4RjRBMEYwMzQyNjMyRDFDNUY5RTY3MjhDRjkzMEY3ODlBMEYzQzc0MEZCRTg4MDE1RTA1MjE2OEEwRDcyMkIxNjIxRUQ3MTBCQTYKKzY4NDJCRTY5MUU5MUYzM0VGQjA3MDhFM0VBMTg4REI0MkU4RjRBNTRGNzdENjE3MjU3MzFGQTJFMkQ2MUYyNDU3NDVBQzFEQkUyMzFCOAorNDYwQzMzMjNDRUM2MEJEMUNFOTJDRTdEMUEyNjQwRDE1OTREMjQ2ODNENUUxMzkxNjRBMjY1Njg1NDRGRDg5RjE0NEY1NzkwNURCOUI3CitFRjgxQTM2QkQ5MTk5OUNDQUUyMTkyRkM4N0M4OEYzM0IwMUM2MDlBOTgxRDY3NUEzQUU4QjEzREQwNUUyNjIyODA4ODI2RUNFMDVFRUYKKzNBMzZFMjVEOTBFQTM3MjNCRjM0QkM2RDg2Q0U5NUVEQkM0REQzRDA4ODg2OUJEQjEwNUE1MzM0QjUxMDhGQURGMUYzMzY2MDVBNzM0RgorMTcwNDRBNUVBQkY0NjhGNDI1OEY5RTlBM0U2OTU1MUVDRjBBNEU4MTI0RURCMTc4QjgwMEQyNzA4Qjk1QzI4ODJBNzU3NTY4Q0NDQzczCitDNDA2NzFCQTFCNzczN0Y1NURFNkFEQUNCODRFODc4ODk3Mzg2MDNBNkQ4QkEwREIxRDRDNUIzNzMwQzE2OURBMzUwMTdENDc3NzU4RTgKKzlBMzNGQ0YwMDlCRTUzRjk1OUMzRjIyOTczODg3RTkyMDQyN0E5Njg3MzBEQjg1NzZBMDdDODAxOTY5Rjg5QzkzMzM4QTYwNUI4QTk2MQorNTRDNjIwMzZFRjkwOEM4MUU2NURCRTQ0MTAzMTk5NENBQ0IwNDM3NTVFNzZBMkU1NUJCQUY2NjI4QjFBRUJGRUM4MUVCNzI3NjYyRTFECitDOURGRDQxNDkyMTdERkU2MzI2MDZBREQ5MkQyQ0E0RTE0NDQzREMwMUNGRTdFQzE2NkE0QTJCREUzQTA2QkNERjE2NTAwRTEyQ0REMkYKKzY5ODJGMTlFOTk1MUFEODEzMDJEMkQwQTIwRjA3MEU3NUMwQTNFREVGNDBBRUIxMjZEQUY5ODI1MEY2RjNFMzhGNEJDMUI2MjZFOTlEQworNjQ3NjQ0QUU2RTRFQUI0OERBMDQ2QzgyNkFDN0ZFQ0U0NjZDNjNGNzVCODcyRUU3MUY0RjNBMjEyMkEzODNCRUZFNzEwMzEwN0E2MTY5Cis3NkM0RkFFQ0IxOUVCQjg1MDg0NEZCRUJCQzE2MTUwNjcxNUMzNTdCMzVCODNERUUxODUyQjcyNjhDNjVGODdGNEMyRjk2QzNGRUNFMzcKKzg4QTkwMkY0NjU3MUYwOTk0QTY1ODZFN0U1ODJBQUNEMTFFRjVFQUE2OTA5N0NBRTI0QzYxMEJFQjMwMzM4N0NCQkExREUwRDA3NUZGOQorMEJENEJFN0UwN0M3OTVBMjQ4RkUzMjFCNDY4RTAyQjg0NTczRDc0ODZENTlDQ0RGODMyNUY5NDAzM0VDNjMzRDJCRjI4NjdBNDJDMEQxCitFMEIwNzQ1RUY4RDkwNDlEMThCMkFCMzE3MjA5Mzc5M0Y0Q0JCOURBODg4QUQ0M0ZDMjJDOTMzRkY1QzRERUUzRDg5MEFFMjFCMjgwRUYKKzJEQ0JEQUEwM0FFNEVBQjUyRjgxQTE0NDEyRjI2RDJEM0YwRDQ5QzgzMzVEOEVDNENBQTZCMzU5NjIzOEEyOEJENjIyNjEwOTRFNzhERQorQkIwRUQ1MUNFQkRFMjU4NzhFMUFGNzA1QzYxRDM3QTcxRkY2MEFBNDdGQTM5REI2RERCNUVCRUIyODE1ODRBNUU2N0I5NzE1MDI3MTZFCis2NjhGQ0QyQTc1ODlEQTA3OTE3QTA0OEY3OTZCRDFDODUxMjg5NEY5REFCQ0Y3MTJDOENGQkQ5QjVDNzc2MEM2Q0JCM0JDNjAzMUYyODgKKzIzNUJENzkxNDc1OTA3RTVCQ0M2QjFGMzAwMDY5RUJDREFCMUMzREM1MkU0OUQ1QzhEOTU5OTRGODgwQzU0MTUxMjRCRkRENjczQzQ5MgorQ0I2RTc3QzhDNDRFRkEwNEY3QzVGRDM1N0NEQUQyM0NBMzY0MkFCNDM1OUE1MkRGRDIzNDEwNzJFMzY4Q0M3NjEyNUMwQkQ3NjA3QjExCitBNzYwN0QzNUYxQTk3RjBCMzBCQjU2RDRGQkRGQzlGRjRCQjREQ0Y3RDY3MEU3RjU2MTVBRUQ2Q0UwQkZGNzhFMzE4MDc2N0M0OEFCQjYKKzE4Rjg1Q0YxMzI4QURBMjFFOTM3RkRGMEY0QkVERjk2ODg4NzA3NzVBRDU1QTBCMTlCMjA5NDhCQkJBMUI3NUMxRERFRjBDMjI5M0I0RAorQUUxRjU0RjRBOTlEOThGOUI0MEM5MTU5OTBBNkEwOEQ1NDY0QUZBMkYzM0IxODZEQkQzODJEMDFGOEI3RjQzNDE5MTQzMTFDQkUyNTA3CitEQTNENDBBMzMzODkwRTA4MjM2REJCNDA2MENFQkVCRUU0MjdBNERCODE2OUU3NDhDQ0U3OTE3QzQ2MzJGQjg1NDM0QzJBQjc5REVBMzYKKzUzOTRFQTQ2MTcyMEFGRTI2QjUxMzY3QkZCQkIzMTBBM0NCREYwNTA5RUM3NUM5N0Q2RUMxNTQ4OUYzRTJBRDU0RDVFNzZGRkFENjgwOQorQzg5OTI5NzVEOUM2OTRFRUYxN0VDNTJFNzhFRkMzNjY5QjU3MEQ2OUFDQ0U2MUU1QTdENkU3M0ZCMzc4MjNENjRDRDlBMTZCREI0ODVCCis5NjQyQUNGMzJCRUMzRkZDNTkzRTAzQzNDQjcxODY3QTBDQjU3REQxM0E5M0RDQjA5MzI3NkU4NUQxNTNDRDgzOTIwRDU2MERBNTBDMjEKKzQ0M0M3MkI1MjFEQTU0NkYxMjg1N0JDRkQ1RDM3MkU3MUUwQUYxQzk4RUY0ODJGMDRGRTJBMUI1Nzc1MDVDNjAyRjA0MTNBNzFCMDcwRgorMTMxRTlERUY4Nzg2OUZDMjE5REU1OUExQ0MxOUFFMzhFRkVGREUyQjY5RjUyNzA4QjYwRTQ4RUY2ODZFQjM2MkM2OTBERTVDMDMxRDYyCitFOUFEQTc0NjkyOTc1MzFCRDAxRjZFMzlEQzc4QjdDNjgzMEFBRDA0Mjc3QUE5OEVCQTFEODJGQzBDMDBGNUE2QTFFMTA4Q0Q2ODM1RjUKKzUzMzQ2RTkyMUQ3MjhGMUI0RUMwQjk5MzAyNTVBNjhGM0U5MDMxRjM2MENDQkRGMDFDOTY4MUQ2MDJBNUI5RjBCRTA1NTI2OUQ0MTlBRAorNzNGRkY1MDREQkQ0OTUzQ0EzMEQ0Q0M1QjRDNTdFNzkyMUQ2RTY0OEU1NzQ0OUUxODlDRjc4MjBCQUQ0Mjc0NTU1Q0E0NUM2NkVGMERDCiszNERFNTJEMzgzNjgxMjI2NDk4NkI0NTRDOTYxMkFFOEY0QjFBOTNDODZCNUU0QjdERTMwNEFGQkYwODBCQ0FFRjFDNjJGRTM1QkIzQkQKKzMzNTkxMEZGRDQ5Njc2MENGRkQwMDJBMjA2MzdDNDU2OTA0NjZFREU4NUE0RjI4OTY1Q0FDNUM2NkYzMjNEMzk2MERFODM4OUYxQTc1OAorMDI3QkQwQzMxODhGMjQ5RkQ2MTU0NUMxRUI5RDc4QTBFQkQ4MUU1RjVDMkM4NDQ1RUU4MkMwQ0I5NjlENzg4RjFGQTI2N0IxODk5M0ZECitBQ0U5OUIyMUEyMTRDNjk2NzBDNzdEOTIwNjE3MDc0MDU5RDkyODE5RDc5RkI0QkI0NDk3RjRFMkJFMUQ4MjQzQUUwREZEREEwNjAzRUYKK0U1MUQxRjNENDcxMzVEMzU0RDlEN0Y3NTZDQUM3MkUzNUJENEU4REVDQjFBQkQ1M0NFMkFCQTVEQzE1MjZBMTBEQTY5REEyRkJFOTMyOAorQTMzNDM4MUUwQ0I5MjkyNjY3NjU4OThGRDM4Qjc0MDM5NzY2OTg1Qzg4QzJCQjlDNDQ4Qjc2NzI2NDM1M0EwQkM2M0IwRkQxNjQ1RDcxCiswMjZERjJDMDg0NDlBOUYzMkYyNUM0RjQzMjExOUJEOUE3MDE0QUUzQjQzREVCRjYyMUM5Q0I5MjM0NkFDRUVCNUMyQjU5OUQ1NTM3MDgKKzJFMDU0QzNBNTY4MEEwODE5MUQ3Qjg3OTkxQzJBREIxOTJCRDExNTQ1QkE5RjUwOTZDQUYyREQ3QjdFQjI5MEU3MEFCNEZERDM5ODlBNgorQjdDQzEyM0REQUUzMjhFOTIyMTAwRUQ4QzdGRjk1ODY3RTlBMTY4RjFDOTc1MjU1N0FBMDIzQzgxNTRFOUJBOTcwRkEwMjE5QTk4ODlBCis1Q0E4RDAwMUFFQ0FCQzRDQTg0MDMyMkJFOUVDOUY2MDcyRTZFNzM2M0MyNTg3ODlEMzA5Njg3NUREMjM2Q0MwMkIwNzhCMjI0ODQ3NjcKK0Q3QTBDRTg3Mzk0NTM2QTc5NkE2NDk4NzA4QzI4N0RBOTY5MUIxNDcyRDQ1OTdEQkQ0OUY0MjA0QTA1MTkxMjY1RjgzNkVBQUM0RTVFMQorQjFENzY4N0JFQzYzMEMzQ0E3NDRBMDQ0OTkzQzAzRDRCOTM1RTFDQzczMEZDRUE2OEEyQzBGNUNDRjUyRkMxQTI3NEFBNjdCM0I2MTc3CitGNEI4N0RDRUQ0ODU2RTE0RkYwMEZCQkU4REI0RTAyNzc1MUIzNjc3MjJFRDBCMzlDQzg4MjE2MTc3RjJDQTk1NTk1OENDRTBBOUZFODUKKzcxQ0Y4QTFFQkY2NEQyQkIzRjE3N0YzRjBFQkE1ODFBRjlFRDc0NkUxNkNBOUNDQzJCNUVFQ0VEN0EwQTIyNTRFNzY2QjM2QUI4NEEyNQorNDk4NzcyN0YxMzBBQTM5MUI1Q0MyRkJCOTg1NEFFNjY4NzZGRjA5QTM4N0Y5OEVFRjM5RDNEREE5NENBMkRGMTQ5RUJGQjU5RUE0RDRDCitDQkE1QjVGNDY0QzRDMDk0Q0Y3RDFGODk3MEY4RjVCRjI3RTRDN0VDOTlENUM4REIxQ0E1NUREQzZEQzVDN0RENzJCNjJBN0U1QzdCMTcKK0Q1Mzc5QTZDRDJCNkY2NjZGRjZDREE5QkY2OTBBODgzOUUyMzRFREY2RTgxQkYzOTY5RjBEQUUzQ0Q2OUQ0OEE2RjVCMEU1NzY2MEJBNAorQjU3NDA2Q0U0NkUzQzM2QzBEMzQ4RUI0NEMxMTE2ODc4NDQ5RjkxODJGMjNCQ0I3RjMzRjk0NEQzM0QxNUJFODNFRjM5ODlGQjk5MDlDCiszRDVERjM0NDJEN0NCN0ZGNTkyQ0U5QUZDRkJGOEIxQ0U2M0IwMjMwOTIxMjk2OUUzOUI5QzFBOTMzNjI4RkIzOEFCNzU2NUMzMzYyRkYKKzgwM0ExNTlDODJCMEZCNkQ5QzhGMUU3QkNFMERCQThDNDNDOEEyNjlERTJFNjg0QzlFMjBGQzQ4MThCRUM3RjMwN0I2RDM0NjYxRDRBQQorRkY4QTM0QUIzMUEyQjNBMzQ5RDcwNkEzNDgzMUJDNjFBREI0MTRDN0I3NUI3OEQwOEE2Qzc0ODcxNUI3QjJGQzg0RDk0QjczRUFBMkQ5CitGMURDOTdFNzhBM0E0RDMzNzU4MjFGQ0JGODBFMUQzMjkyODlDRDY5OERFRkUwMjFEQzJDNjIwRDE1NThGMEQyNDQ0QUFBOUExODQxOUIKK0NGMkFEMDc1MjlEMzA3Q0ZCMTFBQ0QwOEVEREY5MzcxRENGNTQwQjJCOUFCNUQwMDUwNjhFNTBFQkI2RjlBMEZCRTk4REY2QURFM0Q0RAorRjJGMDczM0M4QjA5NDIwMkFFNzQ5OTUzNDk1RkVCM0U5RTlBNjQ1NjQ3Q0I2NzU1QjU5RTczNDlBMUUzMzhDNEZBOEU0QkZFQUY5NTFGCis0MDdFQjlGOUNGMTY5OEMxQjI1M0Q0NzFGRTU1M0Q4REEwQzIxODI5RUMxMENCRkE3RTQ0MTFERUM3MTY3NTMxQjAwNkJGMURDMTFFNUMKKzhCQjk2NzkzQjY5QkI3ODA4MUQ2NzdEQjA4QzNGQTcwRDA1MDIxOURFMTE2QzA1QjNGRkQ4ODg1MzQ5NkQ3M0NBMDk0RTNGMzczQzM5RAorRjhEOEYxNkJCRjlGODU4Q0U0MTZEMTc3OTdFRTdGRkVFQkIwNDI4QjE1RUFERjdDMkRDMERDQjY1MzJDRUJEQTFDMDcxNjk4MjAxNzBFCisxM0M1RkM5MERFOTFDOUQ5NURDQjIzODMxMzcwQTVCNEI3OThGMEI3NDhDM0I4MDY0NUVDNDI3OTY1RDZBMjRGRTcxMkYxOTk0MDU4MTIKK0VGRUVCOEREQkEyQUE5MUFCODdFQUQzNDlDODcyNDgxMjJCNTEwQTBERjI3RUU0NjQwODQxNkQ4Q0VEQjdFNjlFRTIxMzhERDk1RTUyNgorMzdENDQzNzVBQkYzQjlDMjY2RURERDgxQzU2MjUwMUFGRjBENDI0MTMwNEEwNEU3MTM0NkVEMTc4Mjg5RTFGMUNFNjE3NzJFMUM3RUMwCiswMUU5NDU2NENENUM5RjNFRDY0MEQ4REFGNkMxMDgyQ0Q4ODQ0NjUzRjc4RjgwMDBBQkJDNEYzNDgyODA4NTI5MTg5M0Q2OTA0MDM1NzMKKzg4OEVGODM0N0Y2NzIzQTVGNUI3QjQ5QUY3NEI5M0Y3MzFDODNCRTZBQUI4MzIzRDIyNjU5MzJFRDAwMDQ2QjVBODI1RTE3MjlGQkJCMQorQkExOEQ0ODQxM0E5RUNEQTQwMEU3NTcyMkUwMUM3NEQ2QkU1REYyNkIxN0RERjEwQzM3MDA4M0EyMEVGMkQxMDgwQkE5RjJDMkU3MURDCis5Qzc4RDAyMDJCOUQ4MkVEQ0M3QkEzQTg5NDBBQkJBNTFCRTEwNUZEODUxNkQ4QzA5MkVCNEJDOTI5Nzc2ODM1MUZBMEJCMTM3MjI1MTYKKzExMEIyQzcyRkI3MzE2NDFCM0IxNTM0N0NENjhDODk0RENGMjI4MUQ3QTAyOEJFREI2RDMwMDFEMUQ2MkEwMEEyNjA5ODk1MTFDOEZBOAorMEMzRjE1NEIxMkI2M0JBN0I2MzlFNkExMTE1MDREMEIwODY1QjA4RjBEOTk3MzUwMEMzNjY0QjM3NDkxNjc2MEY4NTg4QzFEQTlBNkFGCis3NEU5ODI3MTk0QTg5M0QwRTQxOTE2NDUyMUFDNzJCMkVGNjI2RTU0NEMzNDYxRjlBMjk3OTFCQTY5ODE0OTQ0RERGNzAzMkQyRDFCRDAKK0QxNzNEMThEM0UwNkJBMDhDMjA5QjIwQzcxQkE3NzZCN0Y0NDI0MDE4Nzk5NkIzRjRDNDJBNzk3Q0Y1MEYxNTEyMDQ3QTYzNTlCRTQ5OQorRjY1RTYzOUQ1OTg3N0U3MjYzQkIwQ0UyNUIwMDVFN0EzODcxNzM0ODNDQUFGRkZBMERBNTNEREI4NkNBMTJERENBRjhFNDE1RkZENTlECisxRTAwODU1RjgzN0NDMTA4N0YxODQ3MUYyMTQ2RTBFMENDMTkwMUY5RDFCOTY4QzEzQkEyMjA5REU0NUZBN0ZBNDg2M0IxNTlFRkFDMjkKKzk4MkQ2NERDNjBGMjQ4REIxNkZBOUYwOEY5OTU5RTZGQjAxNTQzQTc3Njc5QUZCNzA1QjdFMDM5OTVEMzA5QjkwMUJCRjk4NjBGOTZBRAorNzcxNUU3RTNGMEI2NjM5NUM5NTNERDIxMzgwRDhDQjFCMTc5MUYzNTNEMDZDQzA0NUM0NTdBRDJGRUU1OTNDMzJENzdERkU2M0ZFOUU1Cis5RjI1NTU2ODkyNzE0RjJDNUUzMTlDN0ZDMTA1MUFGMkU2OUEwQTU1N0YyNkM0NkE5RjlCNEYxNzZDNUNDMUIxMEFBNEYwMENEQ0Y3NUIKKzM1NDExNTQ4MTgzNjBGNjA2MzQ5MUJFMTAzMTFCQUVDQzFFMjdDMzhGNzM0OUI1MEVDRDcyQjgxRjVCREJCRTdDMkYyOTk0QkNGODQzQQorQjA2RkYzRkM3RDM3RDZBNUU4M0ZCMkI0MkY4ODRFM0JCMTREN0NFMUIxODExNDJENTU4NzYyREQ3Q0E1MTFBNzlERjk0QUNFMDgwRDkxCitBMDAxNTM2QkUwODQ4Q0JCOUI1NEZEMjlCMUFEMjlBQjVDN0NBRTUyNTdBRDhENTQ2MkRBMkE5RDIxODcyNjdDREM1RDcxQUU0ODk5RUMKK0ZDQkQ0MDgxNzczOTZGQzU1Mzg4NEQ1MEVCQjgyRTVFNDkwQTY0NkNFMTMzRjA2RkNBMjY3MzNBNUI4QUZDMTNERTVGM0FDQkZDRDI2NworQUJFNjQ5MDc5MEJGOTkwRkEyNThEN0IxRjVFNTEzQTkyRjU0MzhDOTlEODE1ODUxMjAwMTUzOEMwODUyNTlDRTg1NTJBNjE3ODU1QUZGCis3RUJENzFEREUzQzBDMDRCMTVBRjk4Rjc3NkUwMDEyMDBEQjdFOTRENTBFNzgxMkE1RDMyMzE1QUFGRUM0MzBFQzExNkNBNDE0ODlDODcKKzhFMTlERTc2OEEyRUUzOTBFNjEwRjkyRUNFRkVGQjVENjMxMTMwNzg0MjBFRTgwNzE5NEEyMThEQTU0RDE4NkM0MTJDOTkwNkJCNzI1QworRDQzODBGQkQ3MzIzNkE3Mjc4OTVDMEJFNjcyRDVFRjQ5RTVDMjcxNDQ1NDUwNEU4N0E4RDFCMkFDODA4QUQwOUJCNDdBODE2NTEwNUNBCisyNzgxM0VDNjUxMTg1RjYzQzVBOUVGQ0M5QTc1MTZERjQxMjVFNDM4OTM2MjJCREJCQzg5NzNDOEMzMjE4MjRBQjFFQTUzMDkwREE3RjEKK0IzRUY5QUM0QkQ1RjRGN0Q2NTMzOUQwQjMyODg0Q0MxNDgyNkVGNDg2MEIyOEUwQjFDQzExOUJBRkQwRUYwQkI4OTBBMDIwNzI4REQxRQorRUYzRDg5OEUyNTYxMEFBQjVGQ0M4M0M5RkQ2NzczODczMDVENEJBRjY1QTdDQzlDQ0ZEQTE3QTQyRTI0QkE2MjU1ODBGMDcwOEZGOUI5Cis5QTg3Q0RGODc0NTJFODc2NDRDRDlGNTlBRjE2QThFNjJBOUI3NkJDMzM4NTY5MkQ0RDNDMDI5NEVDNzFFM0I2NjJENTNCQ0M5NTI5MUMKKzM1MTNDNTU1OTRGQUM5NkFCQ0Y4NkE0MjE2NzRCOTJBODYxMDI1MUQzRDZFMEJDRjYwNzM4RkFGRjY0RDIwMjQ1MzhGQ0M0RkJDNTg4QgorODQzNjY1RkM0RkM2NEY2MDkyQzZFRTdCNjgyQTNFNUZBMjcyRTM4QzhGQUExQ0ZFQTU1RUYyMzVGNUQ2N0Q0OEE0NkEwMEZGNThFNDdGCitGOTYyNjNENEZFRjkyRjMzM0M3MUFBM0Q2RTBEM0QwMzI1REFCMzNGNjAyMzRFOTgwQTVFMEI4REI3N0Y4NUQ2MjhBNjkzQzgxQTUzMkUKK0JBN0I5MEMwNzFGOEI3QkIyNjE5NDdENDNENzBGN0I1NEVEQkQxRDZGMzBCODUwOTAzNUZDRjE5RjFBRDg3NzlDOTA4OEVDQzZGOUQxRAorRUE0ODY5NEVENUY3ODE0REZBRERDNDMwRUIzNjFDQjI2QjlBRUI0MzBDMzFCMkQ4RUNCMUQ5OTVEQ0E5MzlFMjYxM0NCNDhDMEJGNDAxCitGMjM2OTMyOUMyMTVCMzgxNEJEMTM1RTU3MzQ3MTUyNzk1OEEzREQ4OTcxNjk0QTAyQjgxMkEzM0Y0RjU1ODhGMDZDQjBGRTk0OUNCM0YKKzY0ODQ3NUFGOEM3NzhEREJFRTBBN0U1MjJGQzkzMDlBNjQ5NjQ4OTg1NkJFNzJCOTFENjQwOENBN0YwRjM4ODc2N0M4QTZCMDcxMDA2OQorMjMwOTczNTNFRjkzNEIwQzZBOTY0NjA1NEIwNkI0RkZCQTYzMjgxMzY3NkNCMjRDRUVDM0UyOEQzRDYzQzhEMTNBMDQxREZEQ0UwMTU4Cis3MkE0RTJERTJCNDczNTM2M0NFMDlFMDZFNEU3RjhGNkE5RUNFMDZGOEJGODI5MzdBOEQ4OTMwNDNCNzQzODgzMkYxN0Y5RDVFN0IwODIKKzkyRDY4RDBFMDYxN0IyMkUxMjZFNzQwRTFCNjdGMzU5NUNFQUZCQThERjQ3MDU5RUI2QUUxRkIxNUYyREE1QTg5ODFDQzlCODgwNTkyOQorRjE1NjQ1NTVDRDA1NTYxNENEOTRBNURCNTQ4N0IzOTYzNkRBQzRGRkJCREQ1OTY2NUFGREJDNTI1M0I0NzUzMTZFRUE2ODg4MzA5RjI3CitBRDE0QzIzMTZGOTk3MzcyRDU2ODhERkQ4MDRGNkI2MDM0QjU3ODg1Qjc2NzA1RDJFMzQ4NENBQTUwNzhGRTk1NTkyMTE4QzQ1M0ZBNjUKK0E5OUJGRjI5NTY3MUMxRTlCRDJFNkFBQkYxRjQ4QTcxNTAzNjEzRDNBOThGQjA0N0ZCNTI3OEE0NTZBNkZERkUzMjhDRUQ0OUEyMTIxRgorMEQxMjg1NzAxRjc0MDBBOTZENkYxMUZCOTlDNkE0NTZDRjFENzkyQ0VENzI2NTJDQUNGOTNCNjBCMjczMDA2QzgzREIzNzQxNDQxQkI5CiszNUE1NDgxQ0VDQjI1NEY0MTAxMDNBNkREMDE4ODIwOTdDOEQxOUVGRTQ5OTA5NTFDQ0E4ODM5NEEwRkRFRTFENzYzRjYzODEzOTFDODUKK0Y3OEI5QTI5ODZBRTNBNDYyMkU5RkVCNTVCMzhFQ0Y0RjBFMEY4M0RBRkYxODdBNzM0Qzc1MkY1Nzk5MDY2NjhBNzQ1RDRFN0RBQzdCMgorQzc3MzFBNjEyNTJFNTFCOEZEODVFMDc3MTc0QkQ5RTYyM0Y3QUZCNzhEQzEwMkNDNjM2OEU4RTExNTQyM0Y0Q0QyQ0M0MjEyRjQxOTlECitDNUQ2QUU3NTUxOTFENkU2QkMwNDBFRkY5REQzODFDMTVGQzQ2NTk5OTJGRjg5OTBBNDg0N0E0QTExQjUwQTI0MTAzMTE5NDIyOUI1NEYKKzAwQjFEREI5RDFBQzU3NTUyOTYyOUExNjFBMEYxQzk4QjI0OEM2MDVFRDZGODVBOUVBRDZFRkIwOThFRUY5ODEwQzMyMEFBRDUzMDkwMQorNTEyNUUxRDU4ODdDMjVFMjIyNDUwQTBDNjA2MTE2RjFEQzJFRDg5RDNGMkQzQTZDNjY2MTcxMzcxRTU5RjFERDFENTg5MURDM0FDMDJFCis1NzJCMTM1QkFEQ0M0NTNFRjEyNkYxNUM5ODY0OTlDRjFGM0RDN0I5RjdDOUFBNDczOTkwMjJDRjlERkEyODg5OUM2NzlGNzZCRTJCMDAKKzFGQjI4MTIwODcxOUUyM0M1MzAxOTQxNzg2RTE4NzNDRjdDQjREQTBGNUY5Mjc1MzYyNEM3RDgxNTc2ODNGNkU5NTc4MDVFRjU3MDYxOAorNkU5RUIwOTE2MkY5QUFBMDRENzkwNzk5MDI5NkY4OTlGMTYyMUE0OTc2NzM0RjlEQ0FFMTFDQ0Q5NjlGOUFEQTY2OUQ4NkFDRjFGRDcxCis5OEQyM0ExQkUzOTE1RDhBREUyOUQ4Q0Y2NDBENTM0OUZEMzc5OUVGNDVFNkJGODZGQzYwQTM4NEFDN0Q2RjUwOENEMTdBNEIyNzRCMzcKKzRCMzc2NDVCMjVFMzQzMDRDMkQ4MkIyQTMxMTcwRkJFQjBBNjg5NjY3OTM2NzRDMUIzQTRCNkExMTdCQjJGMUU5RjdDQkQ1MkU1OTBFRAorRDMyQkJFNENDMEY3NUQwODYxRDM3NjUxNzU0RDNCQjFGM0ZBQ0VCQkRBNDIzNTVEMzAxNTEwQzlEMUMzNUI4REIxQUNFQjVERjM1RDZGCis3NkNDRkFDNzlGM0JGMEM1QzdGNzk3Qzg5NEZFRDM2NTI2N0IwQTMzNTE0QjhGNzYwMDQyNENDN0Q2RTdGQkJFMEIwRDNDOEI2Q0M4RUQKKzNDRTJCNDUyMEUyRkJFMzVBMTU0MTA3RTZCODRDREY0NjgyOEQ2NzIwRjYyMjM1QUUyNDU3RDBEQ0RDRjkxMDEwQkYxNUQzQ0FGOTVCNAorQTIzNjAxOUJFMEFFMUEyRThGNzhGNURFQTU2RkJGMTAxNjIzNEY3NTQyM0QzMDdCRTQ5MUQyOUY2QzI3RUZEQzExQkNFMTgwQjIwRjM5CitFRjBDNEE5QzcyRjhBQ0I2MURCNDI1QTUzNzYzMzBEQ0ZEQUM3MDA5MTBBRjNCRDc2N0JDODdDNEI5NjkxQzNEQUVDOERBQzdDMjI2QUMKKzM2QUY3RTQ0NEJEMzBFMTFFQUZCQzhCQjc3MTgxRUVBMzI2NEZBQjdGNjMxNDJCRUNERjM3QjhBNUY2MzgwNzI0OUU2MTg0NThEMjlBRAorMEUxRkVFRTU2N0VBRTFCNEI1MTNBNDQ3RTgyMkE2ODhDNUQ4N0Q2NEM4QUNEODA0QUQxQzgxODE1RTI4N0Y1MEJGNTYzMENDNjMxQTkzCitGOTVDNTlDQkE1OTZEQkFFMUVFODUwMkUzMDczRDc2NTI1RkIyRDRGOTRDNTIwMzU2OUIwMkY5NDU5Mzc3OEU4Nzc1QTg3Q0JBRDA4QzgKKzI1NkM1MUExOUNGMzgxQzI0MTgwRDQ5ODBFRTE3RTk0QjAxQUM3NjFGOTEwRDZBQUYwOUM1MDI3Qjc5MjkzRkM4N0ExREMzQ0I3MDgwRgorNkVDMEFCNzYzQ0RGMTRGNkQ3QjE4OTlENTI5QzQyQTI2MkI1NzlBM0JCOTZCNjkzQkQ3OTNGMEJGN0FGQzhEMUI2MDI4OUJGMjM5MjI0CiszNUNDM0RFNzhFQUI0NDU0MkVERUEwRjI0ODI4OTIyQTcwMkU3QTExRkNGNTI5OTI1RkVBRkY1Mzc1MTUwMkY5NDM0QjcyOTc4QUI3QTEKKzJCNjRFN0JENkRBOTkxN0M5MTk2RUFBQ0IzOTk5MjI1NTAxNDEwQzgxODQ3MkIwOTdDNzA4NTIzQzMxMEEzRkFDNzUyMUJGNkFCNkE0RQorOUUxREIzOERGNEQ5M0Y5QzEyQkFGNjdCQzhCNzBBRkQ4RDA4RkQ2Rjg5OEI5NjYyOUE5MTNEQTBERTY2OTY3OEZBMUVFNzA4NkExQzNDCiswRDQ1QUQ1QzYzNDMzQzU3NEJERDhCQTYyNTg5NzI2MkEwNkY1QUE0N0ZEQTcxODA1ODY4QjlCQkQ3OTE0RDdCRTY5N0JDOTBDNzQ3ODUKKzMwREJFNUY1NTc2MDU4NzY3QjVDMzAyQ0NGN0RDNjQ2MEQ0NEZCNjM1QjVBQjU5NUYyMTZDMTNFN0E0RDU0MDI5QzFFOTI4MTQ0NEI1RQorM0IxRkIzRDhDN0Q3MkJBMDIwMUM1MUY0QUJFQjlDQTI2M0Q0QUVEODZCNUIwQ0VGRDBFQjE0MkZBREVFNDBBOTUwQ0Y0NDFGNTQ3QjdDCis3MTQyN0MzMENBMjJDMTYxREUxMzBBRjUyMTBFNUJEMEQ1OEFGRDc0OEQ1NzRCNDZBMkI0RUI0RDZDQ0QzMUY0REFGMENDRjk0QzdEQ0QKKzgwQjAyNjhEQ0U0RTY5RDk3RTZGM0NDQjczMTUzNjUyOEI1Q0ZFOUFDMDEzMzg3MUNFQUI3RkQ2QjFFREE0RkMxOUY4QjNFN0Q5QTkyRQorOURCNTBGMTk4Qjc5MkExMzk4NkEyMzY4REUzM0NDRTcxN0FERTVCMEZDNkY3NkJFOEI0RURFNkFCMTU3RTAxNEM2QzQ4Q0ZBQzVENTA3Cis1MzA2N0U5MzMwQTJGRTc3MzdBMEE4RjI1OUU1RkZBN0EwMzBEODVGRUI4NTdENzg1ODY2Q0E4QzZBNTA0M0VDRTRDMUNGMzBFNzZDMEEKKzA3MUZFRjhGQjMwQ0M5QkYyNkNGNUREOEFEQjg3QTBDMDM0OTQ4NzZBQTFBMkU5QUVGQUE0NUE5OENENzFFNzg2MDhGNzUyM0I2RDY4NgorRUJEODA0OEJDOTZGOTEzOTdBNENBQjFENUE0OTZCNDMwNDJDNURFNkMxQzQzOUI4RDA5RjYzODFFODhGODI1QTA4RTgxODI5N0FBMjdDCisxRDM3RkZENTQxRjZBOUU1RDRCN0U4REQ4RDEzRjgyNjhDODMxMzVDOTYzMUE2MDNDNjlERDIyRTZEM0I3NjA2M0U1QjBCRjcxNThDOUEKK0JDOUZDQ0I5NDZBQzI0OTk1MjI4QzQ4QkQwMzFEMEE5NTk5NDQxODE0ODI3MzlFRkY2Q0YyMzMwQTZBNkM2RkI5MDZFQjEyM0U0NDQ4OAorRjQyQUMyQkUyMzdDQjMwQzQ0MUI1MDUxQzAyOEI5NEQ5RTZCN0U1N0Y1QTNGRjU1MDQ3NTZEN0VDNDExQ0Y2MTA3Mzc2M0E1RTcyRkM5CitEREE2RTMzNDVGNTg2NDZCNjlFQTE0MEUxQzcxMUQ3OTRFMDgzNjIzQjg0QTRGRTExMDI1NkZCODU0M0QzMkEyRDU1MzVCN0RBMEE3M0IKK0QxNzEwNDk0MTJGRUQ3OUI4NEJFQjU2OTYyRTFGRkUxQTEyRjlCRTRGQkM3MkNGREI5RUY5MkJENjBCMjAwQUU4RDY2QUVBMzBCMTU4RgorRTlGRTI3OEQ4ODMzMTExQUM4MDVFQ0M5MEQ2NTkwOTc4NzczN0UxRTFGRkM4OERFMDdCOEQ3OTk5NkM5RjU2ODVGNTcxMDJDNjVEQTYxCis5NzUxM0Y4NUIxNzMyMDBFMzIyMjg3NkFBQjgzOTQxQ0IwNjZFM0M2NDJBRDIzOTU4QjAwQjE3NTE2QTJDQzhEOEJDQjBDODAyQ0YzNEYKK0E5Nzg1MUMwMzdFNjU2QzMwQzQ0NkM3NDA0MjI5OTE4MzIxMjk4ODlFQUJCMzVGNTY2MUE0MzBFNUE1MDNGOTlGNTM4MUM1RjI2NjkyQgorRDhEQjdFOUY2RDMxMkEyOTdCNjk3RTkzODMxQTA2RjM4NkFFMkJGQTJCRkQ5MzYxRjJFMzY2RTE4RUJDRUU1NkI4MkMxNkIyREEwMDE3Cis5NUNDRDk3RDY3QUNDQUJEMjJEREYwMDg5OEIzQzM5Qzc0NDJGMTQ4ODU1MkJBNDZENDYzNENCMzMwRDQyOEExOTM1MUU0MDFGOTE4MTkKKzcwOEE4MkQ4NTZERTNDMjkxODBGREM1NkM2Q0M3MDM4MzAyRTU1RkFBNUI3NzdFOENDNkNGNEJFMkFEQkU1OUJEMjcwNjU4RjE2OEMxMQorMDk2MTc4QUMwN0I3QjgzMEMwRTc4MkQ0MUY5N0VGMjIxQjdCOTFCQkNCRDFFRkUzQTdBQzNCREMwQ0Q2MUM3NDYzOERGNDEwQUE1M0VCCitBQzM1QTA3OUQ2RDM5MTRGMzgwRjRBMzc2QjUwODkyQUYyMENGMjhGNEZBMzU1QzYzNjRDNjE0QTlEQjA5MkRCMzhENzY4MjExRkExNkMKK0E5OTE2ODRERkM4RjI1N0FCMEFCM0YxOEYzRDdDODk5MzRGQ0NFQzA4OUU2NzA5QkFEMzdCOTM1RTg3NUUzNEFFNUFGNDU2MTEzOEQ1NAorOUE3MjVGNEFBOTJBNjYzNjREQUQ1MEQwMEIxRTI1MUZERUVBOEMxNDVERjFFQ0Y3NEQ1OTk4MTk0OEM2QTM5M0Q3REUzRURENzMxRDJGCitFRkRFMjlEODlFOUE0RDk0QzY5ODM1MDUwRkMzRDg1MTNFRDJDMzlFOUZCRkZCQjc0MTQzN0RGQjczMjc3RTIyNzUyM0E0NUU2MzYyRDkKKzFERDU3MzlEODI4MjFDRTBERDM5NjNEMEE0RjAxNTYzQTgyQTk0QkNBNDI4MjU2M0YxMzcxMzIyOTQzQTI4NkZCNjc3NDI5NTNCOTE1MgorN0IzNzdGNDkzMzQxNDFERTI2QUQ1RDE3MENBRTM2NzY3QTM4MEE3OTRDNzU1QTcwOEUzMzk2MzVEREQyRjZFN0ZFQjREQzg1MTUwMkU2CitGNDUwMENDODNERTJGMjE2MzA0RDAwOTUxOTBFM0Q0MDU2NDNENjA5OTIxQTZBODk1REU2RjJFREQwMDNDQzREMzBBNUYxMzE4MDM4MjIKKzVFRTZFMDcyMzc0QkY3NTVENUMwRDNCNTk4ODhGNUIwNkQwMTY3QkJFMEE2QzVEOEU1NTA0MDAwRTRDQjcxQzBGMThFMDFDRDVFRTc2RgorMTAyREM3NzA4NEQyRUZDRThEODVBOEMyQzM4ODY3RjEwQzk0NUM4RjEzQjEyRjE0NzBCMDI2MDYxMkM2OUQ0OTRBQzA2RDkyREQzRUVFCitBMENGRTI1Q0ZERjA5QUU4Qzk2RUQzMjgzNkUyOEU1NTgzRDYwQTg0NjlBQzIyMEE0RUY2MzEyM0Q0OTA1ODkwRUU0OEI2MTdDNkYxNkEKKzc5NzZCQzg1NUFFMEJBMTBFMzcyNjFBQjQ3NTJDNkM5QkM0M0ZEQzIwRjIzNTVFMDdCREZDQTcwRjdGMTU3NDRBOTczNDI1QTRCN0REMgorMjZBMTFGQzlENDBGQzM0QTM4RUYzQTA1RkVDRUNCMjlEMUFCNEJFNzNDQjE0Q0IzRjZENDM1NDJEM0E0ODIxRDYyNkEzRDVFQTE2OTFECitDMzlGNEUwNjZDMUI2QzMzMkU3NjExRjEzRTI3QkJCNkQ3MTQ3QUNEQjU3M0U5QkNFQkNGN0UzNUZEMzE0OUJCMDM2MkU3MDFGQUMyOEQKKzdGNEQxMTRBMzU4RDI4NkU3NTBGMzY0Q0MyRkNFMzZEM0U2RTlEREY2NzM5RkExRDE3MTA0MzlCMjhGMTU5QUQ2QzUzQUY2M0NGMUQ5QgorNDNEMjNDRjZCOEJBMkE2RjBFQkNFNTBDNUI3MzBDQzU1MEVDQUM2MzBBMzI4QkIyNjlFMjZEQkVEQTVGQ0M2QzFBQzE0RkU1NDg1RkYxCis4OTQ1RDZDMzM2NTdFODY4MTJFMTQ4M0FGRERDQ0U0REExRjJDQ0QxODcwM0NBRTM5QUZENzMyQTRDMjZENjVFMjk2OTk4NDhDMkUzOTYKKzY0QkMxMjdGODhCQjc3NEEzMDg4QUMwQTE0MTRCMEU0NEIxOTRFRUJBMjA1NTE0MDM3NEFBMzM4RDZCOUQ0OUI0QkJCNjRGQzg1OTAzMQorOTU4OUQ0MTY2RUYzOEYxQjVERDhFNEVFQzJCMzkyNTFGQTE1NkI4RDAwQzA3MzUzQzJCMDM4MzIyRDEzMEZDOUVGRkE2QkVGRDQ3QkZECitENkNDMTkyNEFFNTA0NkMwNzdBQUM4MEIyOUNGRkVFQjgyNTE4N0RCMUI3MkJGQjQ2ODk2NzNGMTBFQjBEQTBBQjNCNjNBNUUyRThDN0IKKzM5ODU0NzAwRjM1MzRBRjY4NTRFMEMzODFBMDUxMzAxRDI0RDQxODJBOUZGNzQ1NDM3NjM5QTRDNjFBQzdDMDUwNUQ2MjI2M0EyOUU1RgorRTBDN0REMDcwMjQ1OTA2MTMzMEZDOUY3MkRGNDMzMzZCQzFGNkFBMUI1NjMwRTc0QzZGNzIzMDk4REQyMkI3QTFERjlENzEwQzEwRDNBCis5NkY5MEEzNjY5M0Q5N0YxMUYyODVDRTNBNEM3Qzc5OUIzQzNGMjhGQzk5NTA0RDU0NDc5QTZDM0QwMjdCNDhEM0IzMUVGMjNGQTFBMTEKKzI0ODQwMDkyQTQxRTcyRTA4QzMxNDZFMjJCMTEwMzQ2QjJEQTdCREI3NTUwNTY1OEU2NkY0OTNCQ0MxMjUwQThBN0VCNDE4MzZBMjY1NQorREEwRTlGRUQxQUIzQUI4MDY1Njk1ODczQ0NCMzU4MzIyQkZGRTU0OEExN0Q3OUZFQjRDRjRENEU4QTEyRTZFRDc5Q0QwMDY1RTE4MDRCCisyMDFBNDVBNkY3NTc4MDlENUNFODEwQzAyQTNFQUNBQkM4QzI4RTFDNzY2NTAxQjg4NjE1MkFDMDI3RTc1RUZFRUE3RTE4MjdGRjI3NkEKKzM5RUQ3OTE4MUNFM0IyRDk0MTQ1NzEwQ0I1MzUzOEU4QkYzQjBERTVDRDNFQTBFQzRGN0QyQkI5MTdCRUI1RDg4NTZDOTM1QTAwQTRFMworNEZGQjIyODQyMjc5RDdCMjk5M0I0MjEzQjAxQjcxMTA4RDJCNjUxNkYxQzIyOUZFODNDRUI5RDMzMEI2NEE5Q0I5ODg0MzM5QUQ1MEYyCisxNDg5MUJCM0FBODlBNkI2MzE5M0U1NEY2NDFEMEY4NDE2RDBEMzJBMUQ5RTg0OUI1MUVGMTQxNEE3MjE0QTY1REVBQTM3QzY1NTlDRjMKK0E4RTE2Mjk5RjQyRUM1Q0ZBMzI1QjhCNDA3MTI1MTZFN0M5REQ2RDlFM0UxQTYyNTU5RkFGMkE0OUQ1MDAyRjZERDQxMTNGNUNENThEMgorQTAzQzhEQUQ2QjE4OTYwQTgwNkEzMzM1QjREMkE0QThCRDdDMDk0MjFCN0I1REZCQkJBQTU3QTEwRTNCODAzNDc2OEE2MzQ1NjVDRTQ0CitCNkMwRjg0RkI1QUM0REQ2QzE5MDVGNTQ0QjgzMERGMTRFNTZFNUI4RTMzQ0M3NTkxN0ZDQTBGNEY4Qzg3OEFCRjYwN0U5NzFGOEFBNkMKK0U2QkEyNEU5NzBBN0FFNzEwRTU2MzMxRDNGOUJCN0MyRUVGQjZDMDk4MzVEQjIzRjFFRTY5NDJFNDY0QjdBREIxQzlFMDhDRTUxOTRFNAorOTQ4MjIzRDRDMzQ0NUQ0RDkxQTlEODg0QkM1N0QzMDVDMUU3MTMzMUZEODY5RTQxMkZCQkIzNzAxQUI5RjExNDgzN0FFQzczN0MxMEJBCis2MjRGMUIyMzRBQkVCQ0UwNUI2RDdEQ0Y4QzRGQTQ0OTUyREJDODI1RkM0MUE5MzRENzFBMjNCNDc1MkREQUQyODBCNUVDNzk5Mjc4QjAKK0FFRTVCQjgzMDUxQjVEQTYwRjM0OTUxRkE3QjkwMTg5REZDMEQ1M0MwRDJCNzMwM0VGMDgzOUVBRUYwQTA5NkFCNDQyRTUxNzZFOTFFQQorQTc1NDQ2NkQxODA3QjEyOTBEQTBEM0IzQTY3NUVBMkVGOUQxQUQwMkQxNzcxOTVENjcwQUIzNjhFQkE1N0M0Qjc1QUJDREQ0RDYwM0I3Cis3RkY4OTJFMjIxMERERURENDI5RDZCMTJGRDcwNzhBMEEwNEMwMkFCQ0YxMEIxNjk2NjBEMEE3RTE4NENBQTJFRkNEQzk4QTIyMTI2OTIKK0VFMDkxNDg5NTI0OEY3RkJCNjkwQ0UyQTQ2NUFDOTA5NzFDRjU3MjcxRUQ0REU3NzdEOEIzNDUyNTlBQjAyQjBEQUNBOTdFMTg0RTMxOQorOEFCQjVEQzMzRTlCQzZGOTI3NDRFQUI5REI1QzIwREZGQTM2QjZDMENFMTA0MUFCQkEwOUU1MEQ4QkFCNkI1QjM1MjBGQjM0REY2OEVFCitCNDNCNjc0ODc5MjAxRUE5NURFN0RBODUwMERFQkYyNTNENUE4MUREMTNBRDNFN0NCQ0IzMDIwMEUwMDNDMjdCRUUxNDFFRDg1NkMxMUEKKzIyMTBEMTJCMTQ3MDgwNDczM0FFODlBMDE4MDIxMUY4MUUyNUM0MjJBOTU0MDZDOEE4NzQzNzk4QjRBRjEwMkVGRUE0N0JGQzJDQzJEQworMzQ5NTk5QTRDMDAwMzdBOUVDMDNEMjgxMEI1MEE1MkFFOUU1Q0VCRUEzRTJCNEI2RUFDMEVBMDYwNDZBRjY5Q0Q3MThCNTcwNDREQkYwCitERjVFQTM2QTlCOERDNTEwMzdDMzM5NkIyRDA5NTlERTk3QUZEMzVDMTc1MDNGQTAyQTMxM0Y1RkZENTBCRUZCMzgzRTlCQjY3MkM1MzUKKzU0MTU0NzEwQkNCQUQxNzFBNjU0Qzg3OUY1MDBCQjdEQUQxODlCMUUzMDcwMDFCMDQ2RDk4QzM3MzdGOTA2MjI2MzQyMDcyREE3QjdBMgorNEZBREFCNTM4MTQyNkFGRTQwMkM0MkIzMzg2Mjc3MDk5MDBFRUJDNzdGOTA0NTk0OTJCRTI3MDQxQTEyNkFBRDlFNDRBMTJDRTAzQzgzCiswOUE0MDcxNjNBMDRGNjY3RjI1NkNGQjEwNjZCRjAzRjMxNzE3OUU1N0MyNzYyREU0MTdDNUVGQUE4ODBCMzVFN0I0MjRCRTk2Q0UwQTEKKzE2NjBGODVCOEZDQkFBNDVFOEYyMjYyODE0QUJDODZDNTg4NjRDRjFFODQzRjI3MzM2NDJDNzJEOUFEMTM3MThBOUE4MUMxQ0I0REVFRgorMTMwNjE0RTkxQjg4NTJGQzY3OTNCQTBGNTVDNDI4Njc5NTFBMUUzOUY1RERCMURGRDMwMjcwNDM4RkYzNjM5NzQ2MzM4NjJDNzUzMzVECitCQjYwMkM5NEZBMDM3NDM0REMzMTlFNkEwMDE5MzUwMjAwNzgyQ0NCREM5NjkxMEREMThGQkEyNzExQTI1MzRCMDgwODdFODNBOTZDOTEKKzNDQjg1NkZENDVBQTM2NThCNzZDRTcwNDFBNTdENDZCMDE5Qzc2QjNFQ0EwRDc1N0FGRDA1MzRCN0M2Q0VGMjkzOTkxOENFQjVEQzUyNAorOUI1NjAxQ0EzN0QwRkJFOEQ5MEVBOTMwMkRGOTk4RTM3QkFFRUNFNjMwRjQwMTlGQThFNjAyRDQ2MEQ2RUI4NjgyRDExNUVCM0YyQzVDCis4QUIzOTYzOUUxRkJCQjExMDlBMzFEQjVBMTlGMTE2MDY4NTE4QzNDOThGQjRFOTExNDRCODkzQTQwM0U2NjAxRDREODFEQjFDMUYwMEEKKzgwRTgzNzExNkNFM0VERDMxMzEwMEQwQjhCRkQzMTkzRTIwQ0E5MEFDM0NCMTA3NzMzQjY0OTlBNjkwRjJDOEQzMzZGQjI5RTE0NDQ3MAorMkE1MjE3RTFFOTE4NTJGNUVFMEIyRjMwQjYxQ0Y2NjExMDlEMEVENjY4N0Q3REUyRkNFOTA2MjJEQ0RCMTc2Q0JGMThDOTg1MkZGM0MyCitCMDJGOUZEN0FBQUE2OTJFOTE2MjM0OUU3NjZFQzI5Q0I5ODAzNEQzQTg3MzFGNDkxMjE5M0YxRjQ4MEI2NTdCQTg0RTI4MjU0MEQyQkQKKzdBRkU1NDdEMTA5MzZCMTczOUNCRkVEMjM5QTlDM0ZCOERGNTJFOUJBMUYzOEZGMEYzNEU3MDNCMTZGODdDNDhFQzUwNjYyMDc4RkFFRgorOUZDNEVGNDUyNkY5MDc0MEZBRDY0ODFBRDNCNEI1Nzk1QzlFNTdERkRFMDlERjI0Q0U4NzczQjFGQjRDRUYxQzk1RTczREE2RjcyMDE4CitDQTBFMTZEQjQyRERGRTE2QzY2OTdGRTREN0UwQUI1MTdBQjBBOTNDODVFRjVFN0NFMkM0NDEzN0E2QUIxNTE1OTczODcyOEM2RkMyQTUKK0JFM0U3OTlENUM4MzJEQUM2MDE0NzdDOUZFOEMyNEZCMzY4QUQxQzYwOTJDMERCNkY1MTZDQzg1NTZBNDgxQ0RERkYxRDI2NjQwNjQ3RAorMDE1MTZFMzgyNzVFMjdCMjAxMzQzNEU0REY4MzMzNUVCMTY2Mzk1NDA1RjlEQ0ZCRjZDMkNFODg2REQ1OUIxQUU2MDU2OTA0OTNDRkIzCis3MDhCRDEyOTVBMTE0RDc5QTI2Rjc0Q0MxMUY0OUVFOTBFRTlBMzY0QjUxNDk2N0MwQjM3OUU2NzZCRTAwRkYwMDczQ0RGMENDQjU3NTYKK0U2NkIwNEFBMEZFRTVFRTM3NkMwMjU4RTI4NDFEOTAxNzZDQzY2OTRGNUNCNjM2OUJGRTQ0NTMyMzZCNEY1QURERjk4Qjg2QzZDOEYwQgorNzQ4MzJGNkJCNjY4NDA1MEQyMkNCMjhDQ0Y5MDg3QjU5QURCMzA4Mzg5MzBFMkJEQjFGREI5NTVDNTYwRDRENjE3RUFFNzkwNjRGNzQyCis3RjFERjNFMkEyMEU0MTNDN0JBM0U5QUQyNkNBODE0Mjk1RkIzMzFEMTA4MEI0NUYwMDY1MTNGMzU5QUI4MjJDOEM5QUZERTBCMkNFMzAKKzg5MzZBNjZGQzVDMzAzMzU2N0M0ODk1NjVBNTg3NjdEMjUxRDI5REZFRTQ0RUVEREM1OURFQTUwNDU3QTI1OEZFNjhGN0VBNjEyMDhDMworMjM4QzdFRkQ2OUYwOUE1QzhGQ0Q1NTczODBBNkI0QkQ4MkQ2NTlCMjZDQjREQ0YxODBDRjAwNTdEMTIwRDZBNkUwREMyOTFDNDBEQUUyCis4MzNGNEU4NEExOEYxMEYyRjMyOTI0QkQ5M0M1QzcwQzIwN0U1NjIwQjYwRTE3MkUyMzhFQUYwMTk4RDdBMTI0OUZGQjc4OEQ2QzFBQUEKKzRFN0QwQjQzM0Q1OEM3OUFFQjNFNUNBQzc1MUI3OEI1NUUyQzJGMjM4MkYyRjA0QTcxQzA0NEI5ODMzMEUxNkQ5Qjc0NDgxRkM1NTQ5NgorQUYyRkZGNDA4MTU3RDk5MTE1QTM4QkYwNzY3MDM5MjExRDY4NDEzNDVCRTNGNkQ2MjRFREFFQTQ2MDJCQ0JDM0E4N0M4MDEzNTk1RDlECiswOUU3MjA3MTk3RkU4N0ZENTg1MjQ0MDYwNDE4RUIyQ0IwOUVGMzY5Qjc4NUVBOEI0MDE3OTg2OTVCNDczQUI1ODk2NTA1Nzg4N0VGRjAKK0E2NTg1QjM2MjlFODdENzAwQzhFMDgzNUYxRTM1QzI4MEQ2MUZCNDk4NzFFREVDN0M0RTVDNzcwQzNEOERFNzE3RkRGQUI3RUFDRjdBQQorRTc4QTFBNEYwNzcyRUUzODM0NjQ4MkYwMjFBOTU2ODhFMUQzMTIxREQ4MEE4OEEzNDkyNThBQ0NEOEQwOTRGNDAzQTY3NEUxNzEwRjYxCis0NkRFOTUwN0M3M0Q1MUM3NzM1NEM0NzVCMzdGM0UyNjZBREVGMkQ3MzlBMTdFQTVFOEJBNUY2NUMzMTRENTc1NzlCQUQ3N0QzN0U3NjUKK0RGMTk2RkUxNjM5N0NDNThDRDhCMjFDMjFCRjJFOTJBMEQwQTQ4OTNENjc5QUM5MDEyNzU3NjAyRUU2NUE3MEI5M0NFQTlEMDJGOERBMgorMjlDNzgzNDc0Q0NBQjNGOEQzQTA2QjJERUVDQ0FEMjdGNjIxRDY4NTI5MzJENDNGQUI4RDgxMTY3QTQ3RDE2RDg2ODM3QjY4QjkxMEZFCiszRDk3RTA3MjM5Qjc2N0ZFRkU2OTI5OTBBNEYzNjAwRjdCRkM1NUI3QjEzNzA3MzQ2N0ZCNzIyRDQ1RUY1OTM2MkIxMUI3QUE3MkMxMDEKKzQwMUZGNTIxNkY0ODMyOUU3MjE3QUM1NzJDQzczNkI3N0JBRDNCODYzRkQ2MjJGNDZDRjU0N0VCQUMwRUQ2M0JDMEFGM0RDODZCODE2RQorRDFCODYyQTBBMTcyNTM5QUZDMjNFRDYyMDE2MjdCRDE4QTMxN0Y2QTJDNTc5NzU5MUVFRDU0RDlBQzdFNTMzNjQwMkRBNjY5NjVFMzExCis3NjhFRTc0RDFEQkE0MkZCRTJDNTk4NDhGNDA1REI5Q0VBMzlDN0FGMEQxM0I2RjBDQjk5MTYwQTJDQkVEMEVDRTU1QjIxOTgyRkRCN0QKKzU5RkE5OTY0OUVGN0YwMEFCRkI5QUY3NjRERUFERDYwREMzQkVBOTk3QzE4MkE5RTU4NTdCMUE5RTNEMTMwNUE1N0Y2MDg4MDdBMTJEOQorMDQ1MjM2QzE4RjE3NEE2M0JCMkY2NkYwMDY5MTVGNzAxQTdGNkJFRDMxMjBBNjM0MzhCNUIyRUY0RjdERjRBNUY0MjJGQzFFNjFEMzk1Cis4OEYwQTg2NUI3MTBEMUU5MTY1Q0Y2RDE1MjIxMEM3MTY1QjM5MkUzNUI3MkQxMjM5QTE4RDU5REUzMUEwODY3NjY4NkQ0QzczOUQ1MDAKK0QxNUQyREJGODRDMEMxODg4MEY0MUJGRDc1N0MzRTJEMTVDRjY4QTI0NDRCODYzRjZGRkEzQzk3NjU2Mzc0NjNGRDkyMTJBQkZFMUI1RgorMDNBODgyRTQ2RDQyMzYwNTJEM0EyNzBEMjVBMjY0NTdBNEM5RjM0OEI2QzhGMDgxOUYzQkI1QkE1NEIwOTA3MTMyNjM2OUFDMkU3Q0EwCis2NkQ0NzJGNkY3REY3RDREMUVBOUZEREQwNzE3OTczQTcyMjU3REVEMjYwRkNEOTkyQzA4MzA1ODFFQkZEMDJDRDQ5NDFFQTdFRUM0QjgKKzVDOEVDQ0RDQ0E3NzdGRUIwMjQyODg2MDQzNTBENTNGOTdDRTIzQTdDMkVDMjkyRUI2OUQzQjJCNzVEQTQ3QzY1QzJDMENGRTNCRTA5NworRjkyODdBRjlDOTI2MjkyQ0U5Mzg1QTQ1RENERDAzMTRCMkRCREU1QUFEMkU2QTYxOTY0RDk2RENBRTIyMTdCQzRCNUEwNTZBRTI0RkFECis0QTA3MDhGNjM1OTRCRkY0ODZDRDE4QjU1QzQ0QThGREE3MDU0QjBDOUEyMEYzQzM3OTlCOEY3NjQ3REREOUIxRTVBNUU2NTc5Qjk1QzkKK0VBNEYzRTBERTg1NTY3ODlGQjA4MEM3MDE5MTM0ODQxRjQ0QjdDOUU1MjZFRjg1OEY4RUQ1QzAxMTJDRkQyRTNDMUMxRjM4MkI3NjZENworMzEwNTI5Njk2QUE3QTUzM0Q1QjBCNUQzNTMyQzExQjM1NjJDNkRBNzEzREVCMDRBNUJGMDIyMDU4NzcyQzk0Q0IyMkJCNEZBQTMyOTVGCitDQ0E2MDlEMThFQTg1MTQ2QTg5QzA0NkZDNjBCMERBNjVBNDE2RTJBNzFBQjVDRjhENTM2MTM4RjJBODVERDA0QUVEQTQyQUVGNDE3NTQKKzIzMkM5MkYxRjc5QjMwM0RCNEYyRUNERDMwMThEOUM2ODNBNEJEN0Q2MEExNThDRUFFNzFENUMyMzExNjU5NjJCQzNFODhDMkMzQzBGMgorOUNBMkVGOTA3MEY4QzBFOTlCQzlGMzY1MkZENTU5OUJFMzkxMTc1MEJDQkE2RTVDNTkzNEVERUI2Qzg1MDc0QjExQTg5NUE4NzRFQkIwCitFNTkwNDM0OTlEMDI2QTZDMDYyQjRGODZGRkQ0RUFEMkM5QTMxRDRFNjNEMDlFQTFGMDBDNTU2NTNBNUE2ODcxN0QwQkNEQTA5NjFFRDcKKzYwODM5ODg0MUMyNkUzMDc3NDlBNUMyNzY2QjBENTY3MUFENzQwN0MwNjk2NTc3REMwMzQ3RkZFOENDRTA3NzI3NTBENEQ2RTEzQTY5MAorRTRBNUVCOTM1RkNDQkZDQkNBNzUxQkZFRDU2RkUzOEExODEwMTZGODdBMDVCOTA4NzNGRDhDOUQ4NDM3NDg2NDc4OTRBRjFGQzJFNDhGCitFNDA4RjdCQTRDRkM5QzFBODg5OEFDOTlFRDIzMEU5ODUxNzNCODI5REMyRkQyMUYzNUM1MDEwM0MwNTNERENDOUY5ODM1NzE5MUNFMUUKKzE5RDY1NjY3Mjc5OTY0NjA3ODEwNjlFRkYzM0NBNDUxQTEwODhFODE5NTZERUY4RThDRjk5N0UyOTJGQkM2M0Y5OUE4NEFCMkMyM0E1MgorMDk5MjI4MzZCMDcyQUZGMTdFQzAzNDNDQUQxQjg0Nzg1MUNDMzE1MTBDOENBNTk5MTNDQzhERTJCMENEQUY5OTg0NkY3RjM0MUUyM0UxCitDNzcyNzU1MEVGMTE0NzY0NzJCM0QwODJFQ0M0N0VBN0UyQjU2QTc0N0U2QTc3NzdFMkUxQUQ0RjRGMjIwOUI1MzI5RjQxMTFEOEY3RTUKKzM4M0Q3NjM4MkY4QjVGQTBENjVGN0RCNDdBMUEwODA1NjcwMjNFRTI3MDgzM0NCRDg4QjAwRUI3OURGNDkxNjc0QjU3NDJEMjdFNjg3NQorRDY4QzEyNzI2MjY1NzYyNDc2NEFBRTVCNkE4Nzc1OTY1QTE3OTg3OUQ0RUNFN0VFOUQ3N0JBNkRDOEQ5MTcyMTZGQUREOUEyNkNBRTlGCis5RjVCMTM1RjZCNkFBM0RDQkM3NzE1QjMzRUFGNzA3MTc1NjFFNkMyMDE1MTNBQjIzMDMzNzQKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislJUVuZFByb2NTZXQKKyUlQmVnaW5Qcm9jU2V0OiBzdG9uZXNzYi5wZmEKKzExIGRpY3QgYmVnaW4KKy9Gb250SW5mbyAxMCBkaWN0IGR1cCBiZWdpbgorL3ZlcnNpb24gKDAwMS4wMDIpIHJlYWRvbmx5IGRlZgorL05vdGljZSAoQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkwLCAxOTkyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5JVEMgU3RvbmUgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBJbnRlcm5hdGlvbmFsIFR5cGVmYWNlIENvcnBvcmF0aW9uLikgcmVhZG9ubHkgZGVmCisvRnVsbE5hbWUgKElUQyBTdG9uZSBTYW5zIFNlbWlib2xkKSByZWFkb25seSBkZWYKKy9GYW1pbHlOYW1lIChJVEMgU3RvbmUgU2FucykgcmVhZG9ubHkgZGVmCisvV2VpZ2h0IChTZW1pYm9sZCkgcmVhZG9ubHkgZGVmCisvaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgorL0l0YWxpY0FuZ2xlIDAgZGVmCisvVW5kZXJsaW5lUG9zaXRpb24gLTEwMCBkZWYKKy9VbmRlcmxpbmVUaGlja25lc3MgNTAgZGVmCitlbmQgcmVhZG9ubHkgZGVmCisvRm9udE5hbWUgL1N0b25lU2Fucy1TZW1pYm9sZCBkZWYKKy9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEgMCAwIDAuMDAxIDAgMF0gcmVhZG9ubHkgZGVmCisvVW5pcXVlSUQgMzg3OTIgZGVmCisvRm9udEJCb3h7LTE3OSAtMjUwIDE0MDUgOTUwfXJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworMDVEMjU0MkY5Rjc1RUMwODIyQjM2QkU2RjBERURGQzhERUE0ODY4MzA4NzhCOUVGQzA4NjU0MjUwOTNFMEMyRTY5RDZGMzNDQzlBRTIzCitERjVFREJDMUU1RDA3OUZCNDc2NEI5RjU0QzFDQjEwMEE5MzZBNDQ1MDY1Q0I5N0Q3Q0U2QzBDNDM3MEIzQURFNTc3QUNEMjczRUFFRDYKKzE1QzQxMDQ4MEM4NjNDQjc1RkZDRTBFNzJFREI1MDM1RDk3Njc0NzMxQkJCOEU2OTRDMDMwMkU4NEM1Q0E1NUY0MDVDODNFMDZGQTQyQQorREVBQTg5Q0UyMURERDJCQzlGMDQ4Rjc1MDFDMjEyNDU2NkQ1NUE4MUUxNkVCRDA0N0RBNjhDQ0FCREE5RDUyQTM4ODAyOTVGRDA1N0M4CitDNzkwMEE4QTMxQkE3QzQ5OTA2ODBGRjFGNzRENTY5OUMxOURDODM1OTg5OEY3QTI1MTk2RkRCRTVEQTZBMEU1QzZEQjc0QjdCQkU4OEMKKzU0MkZDMEU0NThENjRENTIyMzAwNzlDRUIzMkM2NjQ0QTg4MDk0MzZCRDEzMzIwN0ZDQjFFNzE2NTM1OURFQzY1M0M3RUU2NUFFODBBMQorOTJDODNCNkNGMzEwRjc0QUY3NjA0OTlERDY3QTREQ0U5N0NDRDFERDUzODMwOEJGQTQ2QTk5MkIxOEMwMkI4QTMzMjg2OUU2Nzc1MjNGCitFN0MyNTk3ODY1RjM1MkIyQkVBNDE0MDIwMjA0NzYyMTI2NzQ5REMwOTVDQzU1QUE3NkU5QzY3QTk3NjkyRDE0ODI2REJCQkRGNTUzOEQKKzk5RTE1RDRDMDgyNzI2OTE2MjcwMzMzRTM4MEVDNkM3MUIyQjc5QTVEMTVEOUI5MjhGNjNBNDhDNDMxNEU1Q0MzQ0UyQkQyMzUyNTMzRgorNUJCQTNERUNFNzUyNjgxNDEzOEI1MUI4OTg2NjZFODIzMjkxRDAxNDJFRDY4OUFBMzZCMzI2RkI0MUU2N0RDMjlDNDZBN0NCQ0Y1NjNDCis2M0I1MjY4MEM5QkFFRTJCQjU1NDA5NTQ3RENBNjQwMzNEQUY4MDNDQ0QzMkUzNzY4RkJBMDg1NDNEODBBOTM3RjYxQjhDOTU5MjdCQzIKK0EwOEY0QTI1N0QwM0FFRjAyNUYzODc3Qjc5OEU1NURGRUExN0EyQzNBNDg0QkM2QzZBQkQ2MEEyNzIzNDQ2RTJDNjdGRTBCQTE4MzFFMgorRDdENDJFRjg2NDM5MjYzOTE3Q0ExOUNEOEY1QTBBNjVBQTcwMDMzNDVEMTM3NDNFNzU3QTdCMUQ5QkJDRUFCNkZFMDAyMkI0QUJDMTdDCisxMDhDOTEzQjEwNjZBN0I1MjE4ODYxRUUyOTQyRTM5RTFEQUJDRTFEMTZDQjY2NkIxNEM3NDIxQjlBNThGMURBQTUxOUU2RTk2NTcwRDIKK0FDMTg3NDQ2RjY3NDM4RjU2RTFBODBERjdBNzJBNkE3NkNGQzI3RkEwN0QxMEI2MjRFOEUxQzUzRjcxNzIwQjMzNTFBOTY0OUE2RjI2MQorRkNDREU2QkM2MUMwNTg3RTdDQzYyMTdGOThEMDQ5ODZFRTlBRDg2QjBCRUIwOUMyNEJBN0EzRjRDQzY2NDgyRUM3RkQ2MEY0RDkzRDRFCis4MjI3MjYxNjM5MjE2NkFFMDk1ODJGMUE2MTQ2QUY5OTMyREY0QUQyQzQ1RkI0NjhCNUQyQjlFMTE5RTkzQjRFMThFRTk2M0RBRjFBRjYKK0ZEODc2QjM2MkIzMUUzNkJCMEE4NzZBNDlEODJBRTg5RTBDQUMxM0RFM0RCRjI5RkI5NkM4Nzg4Q0JDMDExQ0NDRjA0NzM0QzFDQkE1QQorNkMxODM0M0VBMUIwRENFODA4MzgyQzlGRkI0NEYxQTc3NTJDNUY5QUM2RTdEQUE1OUMwODEzMDAzNEE4Q0VEQ0JBOEQ0ODg4MUU3OUExCis3QkY1NzQ5RjEzNjA3OERBOUZFQzlDQ0ZCMDlDODVDNjNGRDk2NEQ3MjJBREIzMkIxMDQwREI5MUIxNTA4RTQ2MENEMDhGQ0I3QTlFNDIKK0I3NEFCMDlFQjNGODM2Q0Y0NjY0OEJERDkyRThERDJENDhGOEVFOEY4MEZCMUVFRDI0RTkwMURDMjk0REQwMjREMjVBNzI2NDIyMjVEMworMDI4RkY2OUZCQTA0MzkyRkQ0MTVCNzc1RjBCMTMyRDc1RDU2Q0RFOUMwQ0VFNDRDMjlGOEYxNjkyRUUwMDJBOTczQzUxMTRCMDNBQUM2CitEMUFDMDA5MTg0RDUwNzkwRDgzQ0Y4MDNGMkIzNkQ5NEE4RDdGM0UxQzU2QTBDOTI0NDQ3RjU2OTI1RjA5Mzk1Q0JCMURFMzhDNUYxM0MKKzFDN0Q1NjNDNDNFRkY1RTg1MzhDMkJFMTJDOEUyMTRCNzc0MDAwRkU0RTI3NTFEQzZGM0UyQ0M4REY1RTQ2MzNFMDkwRTRDMzRDMENDNgorRjA2QkQ4MjlCMTEwNUI1MDQyOTIwNUIyQzRCQTMyNDgwMDM1Q0Y1MTNGNDAzOUI2OUVCNDc1RjE2RUE0MzlFMjc3RDVDQjkzRDdCQTE3Cis0MTY5NkFEQkEwNjlERjA0NjIzMjE2OTEzNDk4MERGMTNEMkM3NUZBRjU3NTgyQjU0OEZFNjdGNzIxNUQ3NjczMDc3MTY4QjczM0RDQTEKKzUxQjBBNzU5MUMxQzJEN0IxRTkzRTQ4NUY1NDc5OUFFMTExRjI3MkM0OUFDRkRGNjk5Mzk5NkE3QzU2OTlCMjUwQ0QyQTlEODJCN0E0RgorNjBGOTkwODY1QTVBMjFDMzk0QUNDNEQ2MUJFMEQ5RERCRjhEQzI1M0QxNTYyNjVGQUE1RTUxNjNERjczOUYwMTNDMUJFNTE5RjVBNjE2Cis2RkNEQzM5MzhFMTREMTdEN0I0Q0U4Nzg0ODFENURDMkRFNTQ1Q0MyOUM4OENGMDQzRUU5OEM0QkZBNkU3NDdEQzYyNjE1MkI2ODA3QTUKKzY0MEVBMzlDRTY4MDI1NDFFNUI0RTgwRjZBQUI0MUIxM0Y2RThDMDkwNjU1NjI3OTU3MEQ3QjNDNTUwOTIzN0VGRjRBOTg2ODAyOTVFRAorN0JEMzc4OURENTMyRTEyQzQ3RTlEMjZBQjk4MzE2ODhFNkE5RDk4NzE1NDE5QkJBN0FFMzkwRDZFRUU3RTkxM0U5OEZDQkE2QjI2OEI2CitDOTU4NDI0RDk4QkFCMTgzNzJDOTI1QURDNTM0MTU1MDhBRTRBRkJGMjEyRDY2QTIwMDY2OTI4Q0Q4MUU1RkZFNUFCQTM0ODAyNTIyQjgKK0M0OUNEMDBDRDBGNzE1Njg1OUYxNEEyNTQ1NjY1NzhCRTFFMDk4NkE4NjczOEJERDdFODFFQjgyNDlBM0MyQjRGQzUyMjg4NkMyMjIwOQorMDBCREI5NkVEQTk3MjU1OEVGMThFOTQwOEU2RkE4QjU5QjVFNTU3Q0RCQzZCOTAwOEUwMTgwODk5NzZBODMxNTc2MzdFQkNGQjYwRTQ2CiswQkUxMkY5RTkyRkE4QUUzODRFMkUyN0I1OEE0REQ0NkI2QUVGMDc4RjE3NDEwQjY0Mjk2QkM0M0JGRjFBQTcyMEFDMEQ1NzVCMEE0QTQKKzY4NUY1MzNBODQ2RDFDOEU2RTNGMEE4OTI5REE5QTRERDAzOUFFQzA5MDhFRUU2MjlCMjhGODUxNjgzNkREQTg5QUE3RTAzMzk3NDc1OQorN0JBQzMyQjdGNjVBNDdFODc1RDY1NzU5MzBFNDU2MUIxMDc3QThCNkQ0RUJBNzEwQTYwRUJGOEJEN0Y5MEQ1OTY2RERGMjE3Njc2ODM4CitDNzE0QjdEMEExMDEzQ0U2NDk2Mjk3OTczMzVFNEYxRTczNkE0NTJGRjEwNUYxRTMxREIxRjEwNUY1MUM1REFDRkUxNERBRTVDMzg1QjkKK0E0OTNBRjIyOTI2OERFMzEzRjAwMjc1RjZFRjRFOTk1RDhFMTA0MTMzRUNEM0JDQjEzNzhCNjlGRTBEREIxMDBDRDQ0ODFGM0Y3RkZFQgorNkI2OTYwOTZCRkRERUVGMTI2OEJEOUFERjY4MUI1NzM4MTg5NkY4NTFFQjEyNTM0RkIwNUVEQzg5QUNFNTlFN0NEQkVCQ0RENjIyOTUzCis0RTEyQkEwQzY3NTI2MDg0MTYwOUNCNjU2QjA1RDM3Q0M3RkNDQkNDOTJCRUJDNEMyQzMxMTJBRTJDRUQ1NTkwNTE4NDM4QjI3NzVERDIKKzc4REY4NDdCNUYzNjc3OTM0MDk5QThEMzRCOThFOUY3OTNFNkM4NkM3NkIxQ0IwRTQyRUM0RUEyRTlBQ0IyMkVFQkMwODQwMjZEQjE2MworNDBGOENEOUNFMTk0RDJGNkVBMjQwMzI1NURBMjE4RUMzMUVGMTI4ODhEM0M0QUNFNEM4NDkxMEM2REQxN0M4MzIxNTMzQjY1NDk2QzBBCis2N0VGOUFCOEJCNDlEOEE5REUxMDY5NEQyMUZBNjc5QUVERkQ1NkRGMThDOTE1RkQ4MkIzRUFDNUYyNzlENENDQkYwMjE4M0RGNEVFRjYKKzExRjUyNjYxMDhBMDFEMDU0MzIxRTZGNTkyMkYyRTFGNzhENDhEQTk2NjU0OUYzN0VBODc2QzcxQkExMDlGRTgxNzE5ODIyMzE1QzJENAorRUREQzBCM0IwQzI1NjRCRjZEMkUyQkMzQUEwMjBCNDYyRjBBNDJDNTYyQzFGRDEzNURCODRBNTFFRDY3N0QyRUM5NjJDOEE4NkRGOUYxCisyQjQ0ODdBRjQ1NTg0NjAzRDUxN0Q2QkQwNEI2NjY1OUVDREY0NDZDQUI3MUQ3NjhBOUI0QjNGNTgyOTNBNkREQ0E4OTUzMDlDQzA0NUYKKzk1MUFFMTEwNzdGRDFBQUY3OURDODBDMENBQ0QzNjJFQUYxNzQ0NDU1REI5NjRFQUQyRDY1RjAzQjRGN0EwMUFCMkZCNDFBRjA4NDAxMgorQzE5OTczOEFFRjkzNUNGNDZFNjU5REY4NTJBNzhEMzQzMDYzMDE0QTc1Mzk5RjVGRUM5MkI3NURFN0UwNEM2RTQyREQ2RDZDRjg0RDM1Cis4MjAyOTdCN0QwQTRFMDcyRDlGNTk0NEU3RURBQkZENEUzMDkwMTZCNkJCMzQ1MEUyOTQyREQxMzFFNzQyMEFBMkNBM0U3NjZCRTlDQjkKKzQ0QzI4MzMwRjJERkUxNTE4QzJGQkVGNzg1QUY4RDkwODBFRUYwRjlFMTU1M0MyRTg1NUFBNjhFQTcxRDhGNUExNjgxNUQxRjIxMDQzMAorMjVFODkzRTQwOEIwMDZERTQzMkQ5QTFGNUYzRTQ1NTMxNzg1QjNGOENFNkIxNzVFMkYzOUI5OTk0NTM4MkU2M0MzRjMxQzc0OEJGQzI2CitCN0QxNDA2MDA0MzAxN0IzRUQ5M0UyN0UxNzI4RTI2NDMwM0IyMUJFM0Y3OERGNDdEQUExMzk1MzYxQkEwQjg0QkVDRjJGODU2OEFEMjcKKzY3MzE0QzBCQzgwQTlCNzMzRDk2NTE1Q0Y1ODZDRjAzODYzMDcwN0QyOTMzRUFGNjY0NjY1Qzc2OTI1NjNCMkI4NzA3QjJDMjFFQUZFNworMzNDOTZDNUNCRjc5NzBDMTMxMEVBRTY3MUY5ODkzMDkxNzA2RkExMjhCMkRBQURBOTVGMjZEMEVCMjk5OUJDMjk0QTIyQTYxODgzRTE5Cis0MjIyODE1OTI5RDdERjA2ODNCNUM4MDU2QzREMUZBMEUzNzE2QzE1NUQxQUNEMjI1RDZCNjg5NzZFRTFBNDIxNzE1OTJBOTBFQkMxMEQKKzkzRkQ3MzVERTBGQUFCNjkxQTQwOTgyMzkyMTNGOTdCRjgxQThDRERCNTg4MENCQTcxNEYyMjIzMEQyMDhBRDk2QjlCNzMzMDVCOTBENgorQzk0Njk3RDNBRTlGRUU1QTUyNTAzRDg0NENERTFGQzE1MTEyODk3QzYyQTlDOUVGQkMzRDc3NUM0MEJBRjc4NDRBRjcwMzQ2NjlCMzMyCis3MDUzM0VBNzFCRjBBOUMyN0JDMDNBMDJENzA0MDkyNkRBMUYxMDkwNkQyNkU2NDMxNjA2OTA3RTg1MjJCRjY1ODFBMzExQTFFRjEwNzUKK0I2OTcwNTNCNTkwMjBCN0ZGODNEMEZDQjBCRkRGMTQzRkE4RTY0NUM1MzQwQjkyMjZEMUZCM0QwM0U4OTJCQjI0RDdGNTQzOEQ3Qjg3RQorRkUzMzczNDNDMTg3NkNDOTk0OTU3MDdGODdEOTZFMTIzNEI1OEM3MUE0NTBGNjJDQTVDRTNCODk1QjUyMzI4QUMxNzM5RDM5NjdEQjAxCisyNkVFNDc1QjVBNjA5OTgyQzMxQjhGRjM1MkU5NTlFNDE3RTkwN0Q1QjlDMDc2QTI3MDE4ODQ5QUMxMEU2MTEzQzFBMEY4MTY1ODI2ODMKKzcyNzQ3N0NCQkNERTEyMjJGOUVCQkI1NjQ4RDI5NTE3RTcyNDk2RDFGMEE0NENDREIzNDEwNkE1MzUyMUVFOEY2MTM1OEEyNjcxMDVFRgorNDk1Nzc4OTIzODlCRkI3MDE1MjBBQTczRTZCODA3MERFNjM0Qjg1M0YzQTYxODE4QTRCOEIzMzI2NDQxNkMxQzNDODNGQzBDOEJFMDkxCitGMzAyNTJBODY5MUQxOTM0NTY2MjBCM0JGNDcxRDRDQ0U5Mzk3NTU4QzdFQUM4MTA0QzhDNkExM0NENzE2RDkxNjIxMUExMkM0NDNGMkYKKzA0RUYwQzMxRkFBRjA0MzcyOUI2MTU5QjU3ODI2Q0RCREQ2MjA1OTMyQjI1MTA4OTM4NUU0RTMwQzRENTE3NDRBNDVEOTZGQzI4NDA5NworMjAwN0VEMzUzRDYyRDNDREI2RkM3NTVDMTFCRTk4RThGRkJCNDA1NjBDOTNDQkNFQ0JBN0MwOTY5MkY4MTdEQ0UxQkE0NTI2QTgxMTc5CisyRjJDMTlBMTY5QzkxQzAyNTkzOEUyQjI2QTgwMzY4MkNEOTkyMTg0NEJGOUFBQjFBMTQ1MTRCRDI2RjA0NkU4NzY5RDc5QjM2MDRBQkUKKzBCNzg2RjYwRDQyNEIyQzYzMjM1MjBBOTgyRTkwNkNDM0U5MkQzQjUyQUYwNDUzMDcwOERENzgyMTM0RjQwNTJFQkY5NTMzOUY1MENGNAorNTQ5NkI3MEI1MkI1OUNCNkY1NERGMzgyQ0Q5RjRCQjExRjYyOTg2MTEzM0I0RjU4NUI4MTZFRjE5N0I2MEM1QTJEOUZDRjdFMjBCRkVBCiszNjZCNDJENUY5QjJCQjBGNjdCMDQ1QTVCNTdDMTg1RjYyMUVFQzkxOTMyODU1RTBDOTE3NzBBNUU0RkJERTRBQkI5Q0QxMzdDODhCNEUKK0U0OTlENDMyRkE2REIyQjg3QzcxQTAzQUQyM0JFRkJCQzVBOEZCM0UyMTMwRjQ1MUIwQTBERDQwRTg0NzgzQzI2RTU3M0I0M0IxNTYxNQorNEY3RUVCOEIzODFFMUY5N0M1NEM0OEVCNUFENEExNTQ1MzkxRUMzRjY2NTBBMEU0M0Y0QzIzNzUwREQ1ODE1N0FGQUM3MzhDMDdEMjk2CitFQjlBRkFCMEMwRkFDMzhDRTg1NjYyOTNDNTg0QjIyNTZFNzk1NDRBNUIyNDI4MzRCREIzMUE4NjQ2REVCMDRDOTVFRTgwRUJDMkY4NDUKK0JFMDUzNkE2MjlFOEEwRDIzRDM1NUNFNEQzNUU1Rjc0QTJENEUwOENBNkQ0N0NGQjFFMEY0Rjk4RUREMkVGM0RDNzc5QjY5QkFERUVGNgorQUYwNkYxQzZDRDM2RUVEMUMwOUU4MDBDRDcyMzY4OUEwMDEwMDBGNDIwMUQzNjVEQTU1N0QxMUYwNTdFODU4NTIwREU3NUY1QzhGMzU0Cis2OUE5RERGNUEyOUQzNjUxRUZGRkFGNEZEQkVEMkE5QzEyNzVEQjc2NEFCQTZGRjc0Qjc4OURENjVDOEQwODJEOUE5RkM4MDA4NzMxMzIKK0ZGQUM5RTc4MjI5MUVFNjY5NkQ0ODNENDFDMTM5OEU4QzY1MzA2REEwRDMwNkJCOUVDNzEzQUZCNEMzRDU1QTRDMzhEODY1MzgxREZCMAorRTYzMDYyOEZCQjdDRjUxOTIyRTU0N0Q4OTc1MzAxRTJBODFFMEQ0MjlGQUQxQzY1OTkzNTQ0QUE1NDMxQjg4MEJFNEYzMTRDNDk4MUEzCitGRUZCMkEzN0JDMUJFRkIyNjdGRUM0NzczNzgxOUMxNEMwNDQ4Njk0M0NDMTQzMjEzNUJEODQ0QTM0NjE3RUQ3RTQxNDA0MzFBQUU5NDgKK0U5ODlDNUM3MkI2QjA5MEFFODg5QjYyNjYyRThEMzBEN0M2MzMxMTBGMDg2MDBGOEYzREVCQUJFMUI4MjcyNTcxQjE1NTBGRTM1QzI1MgorODE4Rjg1NkZGRDgyMzFFODAxMzIxQ0ZBNEUwODhEMUQ2QTRGNTZGMkNBODFBOTA5RDBENTY1QjMzRjVCMjU3NEZDNTJGQ0ExMTA3RTRFCis5NEU3MjM3RDk5NERDQTBFNUMxMzM0OEI2RUQ4MzVBRDcyNzlENzhDRTI5MEIzOEZENDI4NzZGQ0U0NDQ3MUFFNkUyMEU2MzY5QzYzOEUKKzZFNEI0OUIwMEI2ODQ5N0Y5MTJGQTY1MTgwMTZBQ0U2RENBOEU4NjUxODRDRDU2M0UxNzEzRDdFQURGNjRFNTJCQkQxM0NFNUNFNTRGMQorOUVDNTk3NEU5RjU5RDI4N0Y3NkYwM0Y3NTZBQjQyRkEzQ0RGQUNBNzk3OTI2NzlCN0VDQTUxNkQxNTMyQTFCRjFBRjJCMDQwMDJBMDI5CitBQzhEQzBGMzQ1MjdFOTE3RDZBNTU5OTc0REZCRjlBNUUxM0UyRTFFRDUyNkY3QUUxN0JFQTA0NjQwNzA1Q0FFQjA1RjA2NTQ0QTE3RjcKK0I0NEJGNTRCNkI4MDU5NEQ3MUFFREFBRDE3MDc5Q0ZFMkI2QzY1NzQ0NjU1NDE4QjE1MjdENTFENEM0NUU1RjMyMUQ1MjQ2OEMxNjhGQworQTUxNTk3OTI4NzU2NkRGRjI2QzA2MUZGRDcwMzlDMjMyRkUxQUNEOTM3N0M1ODg1MEM5OUJEQUUxNDVGOTQ5RjRGNTA0RDc0RTQyNzhCCiszQ0IyRUU1MzI1MkFGNzgwNUYzMTQzRjA5OTlDOEMwRDE3Q0NEMkU5MjIzNzVFNTYzRUFENjk4RDlBRTZEMERBQkFFNUE4MzQwNDk3QzIKKzEyMzhGOUZDOUZDMDVCNzZBNDdEQTBDQ0ZGOEQxMDhEMUExODhGNURCNTc1RTVDMDgyMTlBMDRDRjc4RTA2QUYxMjRGQjNGQzNCNEU3OAorMjY3N0YzQzA5RjlEODkyQUIyOTRCNEVBMTUyNDFDRTI4OTk1MTRFQjREMUJDRjUxRDI5NDczNzA4OUVCNEFDNTZBQzc4NTJFNDk4MjE3Cis3QjgwNDI0MTE3NzM1MzY3MDYzNzM3NkQ0RDFCRTRGMTNBNjEwN0E2QTZFNUE3MzY3OUU2ODdGNTUxMjgwMUIwN0Y2NzU2OEY3MzdCM0UKKzAwRkYxM0Y3RjhERTlDNzNFQjNBMjg2NUIwNzA5NEFGNkZDODcxMEJDQkY2OTE1QkUyRTI0MTZCOUE4NjZCRkM1MTNFMjlFOTI4OThGQgorODBGODExMzBFNEFCOUU1QzVENTU5NTc2QkVFNEFFNUIwMUJEMjg3NDgyNDBFN0IyRDc0NDFFNTcwNTNGOTM0NjI4QTk5Q0FDN0Y0QzcyCitGMEEzNDNCNzkzN0UyOTVCQkFCOURBRTVDRUZERDEwM0RGRjkzNUIyNDU0RTRBRTBBRjM5Nzc2QTNDMEY0MDcwMURGRUNCMjdDNkREQkEKKzREOTc5NzJDMDMxMDlBMjA5QzZGOThDMUU2RkQzQzgxQUY1Q0ZDRjUyMjM4NjZBNUU1ODUxNEZFOEQ1REVDOTU5NDU4NjVGQjZGNkZCQworNTFGREREREFEQUIxREJDNjhGMzVGNzU2NDI2RUIyOUE2QTQxNUFFQzExRDJFQzA5QkM1MjM3MTNFRDQ0NDY2RkJBM0ZEREVBODczQTE0Cis4NUQ3QzA0MkU0OTBCRUE3NTEyRDQ2NzA1QTlDNzdCNTJCRjU3NUJCMUM4NDlDNzZEMEUzMjAzM0E5RjU5QzYyRDM2NDY3MjU2MjdDQjcKKzk0OEMyRjcyRURBM0Q1RDI3RTgzQzJGMzc5QjEyQ0JCNkQ3RUQyRENGM0JEQTI5NzI4Rjk5MTI2RTU2QTM2Q0M5RDdGQ0Q4M0YyQTRGQQorREJENUMxODgzNzlDQzZBNTYwNzNGNTdFNzUyMjFFNUJBMzI4RTg0RUJCNkFEQ0Q5RDI1OERFMDNFNUVEODMxMjNEQjE5NjQ1MTFCNzkyCisyNzMwRDY5MkY5NkIyRTkzMjczQUMxNDhFQ0YwNjkzNjJGNUVBQkJERDZDNTc3RDBERDFENzI0QkRCRDgwNDI1MERCMkVCM0EyQjVGNDQKK0U3REZBQzU0NTdEMTE3RjNBMUIxMzJBNjhDNjFBMzUxNzlCMzM0OUExRjQxMkMwMzIyQ0I0MTUyNTZGRTUxN0ZDQjBDMjA2Q0Q1NzZEMAorMTgxQ0YxRUQzQTA2ODQ0NEYyQTE5RDlFRUI1MzI0Q0UwNzE0NzJBRUUwMkUyMjVDNzQ3OTEzMzkyRTQzMzMxQzVEQzk2QkE5ODVFMkUxCis2MDVBM0JDMDlGQzkyQ0RCRTRBNTE2RTFCRDI0OEQzNEZEODUwMjNGOUQ3MzhFRTEwQjJEQzIzRUQ4QTFBMkZBMjA3QTFBNDc0Qjk0QTAKK0I3ODY5NEQ3QjlDMzg2MzAyQjJCQzcwMjk0NDJFNTc0QjYyNThGOUJBQUQ4QTA5OUM1MDAyQkUzNjY2NDlBNzcxQTk0QTUzM0I0RDMzNgorNjk1RERENTk5REZCNEZBOTYzQjA0NjI4QzUyRDZERDkzN0JCQ0VENDE3RkRGRTkyNUNBNTRCOUNDRjQ0RUM3OEQyQ0VBOUFGQUJCQTZBCis4RDBENzQ3OUVFNjAyMDRDRjM4RDFFOUI0MjVCRDNCRDM3NTE5RDBENjRFMTU0Q0M2Q0FFN0NGQzcyMDlGNEFGNEU2NkE5REZCRDE5MzQKK0U4MkQxMjA5RTEyQzQ0Q0JERjRDM0U5MDI5MzFDNkM5ODNFNzEyREE5M0Y0NURFNzlBNThCRUY2RTc0MkVCNjNEN0QwQzE4N0Q0MDM3QgorOUMxRkRFM0YyMDQ1MDlFRENEQ0FBNTA3NUUzQjhCNEM1RTYyQzE4QzJGQTAxMDQwQTREMTUzQzU4RjBENkFBNjYzMzVBQ0Y3QzQ1NUY1Cis4NTVBQjNEQjBBMTI0MTI4Nzg1NjU3NERCMTcwREEwQzU1QTlBRTE5MEZEQkYzMDQ5OTg3QzhDRTI2QzUwMUQwRjNBMTVFOTkxNUVCNUEKKzlBRTRBNDk4NjBEQTkzNkNDNjEyMjhBMjFDMzQzREY2QjBDQ0UzMjRGQTAwQzMyNjUzREUxNkY5QkJBRTg1RTlDNzY3MzE1OTQzNEQxNAorMkUyNTkyOEQyRUFEODAyMUJGQjJEQjRGMEFFOTM5MDA1NzdDNTkzN0E3QTBFMjkyNTQ2QzY2RDlEMzA3NTlFRjA2MTIwNjA0Njg5RkFFCitGODA4NTIyQkVDNTZCQTYyNjIxRjcyOEU5QTRBNEQzMURCN0Y3RDgyRERERkFCMTI3RTUwRTcyRjk1RUZBNDRENDBFRDlBODJBMUEzRDIKKzE0QUUyNzU5MzBGNzk1QUQ3NDM3NUE5ODlENzhFRjBGM0IyODEzOEQzNUEyMEY1MTZDODU0NjA4MUJBNEJDRDZCNDkzQjQ5RkFCNUFEQgorQzg0MUM0OEFDOEIyMkVEQjkxMzFCQkFEMDA0MjVEMzYwMUY0OTI4RjcyRjYwQUY2QkEyODQ1REZGMkMxQzQ2QzhDMDkxOTQ4MUMyRjAyCis2RTcxNjI3QTBFRUE3QzEyMzNCRkM2N0IxNkRFQTAwQUQwNTI0RkYyRkQwNEU0OTI2NjY1MkREQTc0MkUyNzcwNTA0QzIyNDMwMDA0QUUKK0Y4Q0Q5NEU2RTU0RDFFODk4OTI2NEI3QzIyRDc3MEQ5MzYzODk5Rjk3QTkwMEI4NjM3QzQyQ0JFOURBMENBRjk3RDY5RkYzOTkxMDkxOQorMTU1Q0M2OEZDODEyMDhGOUM3RTlCN0I2N0JCRUYwMkQ2NTkzMDQ0NEU5MzE5RDk4QTNDMDYzRUU1NkI5MDdDQzVCMkIwNTQ5NjVCRDIyCiswNzRGRjYxRjhGNzRFRDU3MzRDNDZCRTUzMkM5QkE4ODNDNTVBQTVGQUFGNUVFODA4NTNEMUJGMDZFMjYwNjc5NzMyRTc3MTI2MTlDMzkKKzlERkM0MjI1RTcxQjg3OENCNzU4QzZDM0RFQjUzNDdDNUFENjRBMjJGMEM2QkYyQzY5MkY1RUMzNTRGRTlFRkI5NDBBRkVEQzUxMUY4QgorMUExMkJEMThDMUZGMTRCMzU0NzQ4REZBNDU1M0EzOTZERDg0NTcyMzRGQjFENkJCRjJFNThFRDZBNEJFNTM1NkUzNDAyRTY5NTMxQkNFCiswRDU3RTc2MzJEMkQzRDlBN0U3QjU0NDk5Q0JBQjgwNzUxNDMzMEM1NjZEMTA0QzQ4QTRGQkZEN0YzNjc0RURFNjRENjc0REYxMjY4NTYKKzExNDVGOEQ2NDlDRkYxQzA2OTQxNDY2Nzg2N0VBN0I2NUEwMTI2NThGMTM3NkU3RUFCNDUyNUVFMTc4OEIyNUMzNDg4NTA4MDlFNjFFOAorQ0NERDJGRjcwOEMxQTYxRUUwRTJENkI1RDFCODVCMjA5NTE4NTY2OEIzNzgzNkZDQUVDMThENTQ0NEQwQzAwRUI2RDc1RTgxMUQzQzUwCis5REZFRURCRTg2QjgwNTJEMDAyMUIxODdBOTNEMUVBMUZFMDE0N0QxMUQ3NURCNUI2MzUzNjQxMERENzQwNDBENzdGOTMwMjkyRDAwRTAKKzgzNTFGN0RFQjYzRDk4RDU1RjExQUU1QUVFRUIwNUQwMEQ3RTdGREQ3NjlFRDMzRjFDNjFCRjA4N0MzMDBCRjhENUJDRTM0QjQ3OUQ2MgorODIzMUI5QUNFRjE5RUZDRjY3NUJCNEVDMjgzMzQ1OEExNTFDMzQwQkE1REFCOTQ5OTE3Q0NEOEM0NTVEMzBGNDMzM0E4MzQ1MTk3ODVCCis1MzkzODg2NUZDRTNEN0Q1MjRDNzE1MkUwM0RFMkY4NEQ4MkY2RjkwNjgyQjAxOThCRjY4OEIyQTYzMjEzQ0I0MzIyOTdBRTkyRkNCNTYKKzdEMEMzRUEyMkMyOEMzNzNEMzQ0OEQ0MDI3MTlEMEM2OEMzNjg2Q0JBRTRDNDVBNjk1OEQxRTg5RTYxRUE4RkJEM0QxRjYzMzY2QUM1OQorOTQ5MENDMjExODE0ODAxN0M3MkZCMjM5RjE1NDAyMTYzOTdEREYzNkU0MURDNDlCRTRGMzgzNkIwOUM2NzQ0NTRDMTA0NEEwMjcwNEU2CitGRjdGQ0Y3OEFBODVCMTAwM0MxQjBFQjJCNTAyMUY4RjI2NDBBNjhFNDc5OUU3NUNGNDBGRkZDMjEyQUQ1NjAxMzEzMzA0ODk1NTVBNDgKKzgyOEVFREQ0NDBCREZGM0ZDQkM4NjAwODA5OTJBMzM2N0U4NTBGOUQ5RDIwQUYxQTAwNTVENEFEMTM1MDUyNDU3MjVCQzNERkQ3MjYxQQorQjc3NzBDQzQxQzZCOTA4ODcyRkY5OTc1OERGN0VBMTlDQ0NCODEyMEFFQTMyQzVFNUNFQUNDMDVBMEM0MDMwMEM4QkJBM0VBMTZBQ0Q3CiszQzkzMzEwMjZEODUwRkRFODM5OTZDQTAzRjY0MkY1REU1NDgxODU0MDAxNEVGNjU1NzExOTAzOTREOTRGQzI5NzNBNkM5MkNGNjc0REUKKzJBRDlEREZFQThCOTNGNTU2RTU5QjYxQUU1NThFNkU4NjgyNEYyM0Y2QTBBNzJGQzc5QTQ4Q0QxNEZEN0JDQzc2MDExQTM5RDhDQzlBRQorRjhFNzI0MDJEQjk2REYwREY0ODg4NTg4MUY1MDhDN0M1OUFGNkQwNjEwMkZBQzg0NzE4NjMwODcwNTE2RUZDOTQyOUEzRTk1Mzc2OTU2CiszMTRFNjVBQkExMjRGOTJBRTExNjgyRjk3ODhFNDkzMzc5RjgzRkFERjM0MDc4MzE1MEM1MTczOUVFODdBODY2RDM1MkI5OUU2QzFGNEUKK0FEODE5MUI3REJGMzY0MjYwQ0VEMzI3NEEyNjFDM0FBRjkwOEQ0NzNDMjE3NUQxNUFBOTMyRDg4RERFNTdDMkVBRDI3QjREMEYwNUM5RQorNTEzN0E0MDkzMzREMDk1NDE4MENBQjY0MzcyMTY2MjY2RkFBNUEyMjUwNkQ4NUE0OTI4RTI0MEFGRkYzMThFRjYzQjQ1QzI2RDIzMjM3Cis2QzQ2NUFDOUZDRjY0RDlEQ0NGMTNCNkQ1MTAzQzFGNjY1NzRDQ0M5NjhFRTBGNkNDQTc3M0IyOEQ1M0VEOTRCQjdCNDIyODdBNkQzRUMKKzEwMjE0M0Y1MjcyMENDNTM5NkVBNTI0NTc1QzFDREI0Mzc0ODcyODhCNTU4N0QyNEJGRkYxQjgyQURENDVBRkVDQjRENzQ3QTYyODk0OAorNjIzRTYxNjY0RjM2NTVCQkIxREU3ODJCN0FDQkYyNTY4NzVERjVGQ0MyMEJCNzUwNjkxMEQxMkJFNzI5MUVBMDY0ODI5OEZEMzYxNzM3CiswNDU4QUQwODkxNzBBMDA1OTQyNjM5RjdBRTVCRThEMUZCNkI5NTY2MkZGMDc0RkJDRjkyNzc2RTZGNEM3RDI0MUQxRUZBRUVFNDBEREYKK0U4RDg4REMxRURFM0Q5RTA3NjhCOEUwRkQzOEJDRDkzMTBGOEE3NENDMEM2NzFCMEZDRDQwNDczOUZCQzY4QkIwMkIxRDkwQkM0RDkxQgorRjVDMjRFNzJEOThEMUQzNkEwNjExQkE5OTYxQjc0Q0NFNDM0MTFEQTVCRjI2NTk0MTRENzRCQ0ZFOEUyNzdFRUM0QTExRjcxMzQyQTk3Cis2MjkxQzUyQTIxNzM3RjIyNDE3OEI2MTlGMDQ4RjJBNDRFOUY0MkJENTUzMDg0NkUxMEM0RjA1NjI0MDI2RTM1NUZFNjIzMjIzREJGNDIKKzkwREQ1MDRBREM1NjA1MUE5MjU3OENBMkUwMEJFQzEyMEUwODEyRTBFRUVFOTM0RkI5RTdGRUE2QjQ5MjVCNEY1MTE4RjMwQzVCRkYzNQorRjhBMUYwNjlCMUZDQzI0Njk0NTE5RkQ5RTgxN0UwMTc5OUZFMUZCOUZGQkREMjgyMjI2NjNBNzRFOUFBMjUzRjU3M0ZCMzYzMUJBRkVDCitEMzI3NTE0QTQzOTQ3RjA0RjMxQkNCMjJDOThDRjlFMDUwNzMyQkU4NTc0QkNFRUJGQjk5MzhBQTc0RkM2OEEzQjJFQ0Q2QUNDREYyMkQKK0U5RjQ2QUMzNTg5QUFCMUMzNTI1MzhEQUEwRTFDQTMyMDY5NEY3OUQ3RTVFNjkzNDEyOERFN0VFM0UzMzI4RDRENDk0QjVFODVFRTQwRgorRjIwMzJFNDRBRTU4NzcwRTc4MTg4MTc3RkNGMjNDREQyMDAyODBBMzlFREI3NkU0RDdCQTZGNzI4Q0U4Nzg0NTA3RjdEQTE2NEYwNjJDCiszNDlFMzI1QzE0NTk3NkQwMTAyRTY1REExNzFGOTVBMDRBM0Q1NTBFRTNERUFBNEE1NjQ3NjdFQ0YzRTdEMEQ1RDJCRDZEMDZDRkFCQzQKKzFEMUJFNUE1RjFDNDc4REUwODM0M0YyRDlENkE3NEJFQTNEQUM5NTNCRjM4MTgzRUI5QkY5QjE4OEY4ODQ1OTQ5NkJDNzRBM0VGNjUxNAorMTIzMDdBRjY5RDY4QTFCRDk2NzhDNjQyRDExQjc1QTdCNUMxMTNFQTgwMzY1ODA1OTZGQTE5M0YyRkU0NUU1MjI3NEYyMDU4M0Y2RDBFCis3RDdDMTdDQTA5MDIyRDA3NTczRTMzRjUyMzk0RkY0OTlFRDA2N0VEREYxMjJBNEFBNDRCOUI0Q0Q1M0MwNDMwNEJENTNCREI3MzRENzgKKzU4NjY4OTFDRkNDQjVDQzRBQkMyRUEyQkU2RUI0MzJCQzBFQjIyRDlFQzQ1QkQzMUVDMTEyNDRGOUM3QURGODFCQ0EyOUE3MEVFRTQzOQorNEEzQUM1QzJCQ0JEMkU4MkEyNkIwNkEzNDg1NDJBNEM1NkQ3NzhEMkRGRjI5NDRCNUVFMkIyQ0MzMjc2MkZFRUEyRTk1RDE4MDc1ODQ3Cis2RTE4RTY1OTZCOUFCQjNGMzY3NDVCRDgyMjhFQzM1NkJEOERGRTg5RjgxODAyNzdDNTBEREE4ODNBNTlGMUQ5QTIxNzA0RUQwMTkwNzAKKzdFODdEMzA2NzI5NzNGNEVFRDZDNzQ0QzJFNzFCQTM1RTg4N0MwRUExNTAzQTk0MUVBMjA5MDIxNzdEQjFGNTA1NDE3NUEyMTVBOUQ0QgorRkVCRUM1MjFCMjJGOUEyOTI0Rjc2QUNCRTU3M0UyMTZCMUM5N0Q1RDdFRDMyMkRGREZCREExMDQ5QTIxOUVFMzczNkI5Qjc2MzUzOENFCiswQjFCRTNFMjUzMTc1QTUxNURCMEVCODc3QTU0N0M0OTI5QzlFRkJGNERCQzU4NkJCMDc2RUNENzU3NTkzMEU0NTYxQjEwQTU2RTBGOTIKKzE2NUU0MTVGNzhBQ0FGMUE5OUFGNEExQTg2MjVDRjAzQjZGRTU2NENFQUE2Q0FGMkZCMjQ3NTQxQ0FCQTI3OERDMTk2NkI2REExOUExRQorOTE1MDI0MTg0ODMyRTMzMTI5REFBOEYzN0M1N0VBOEZBNjZCMUQ3QzFFMDM5NDU2MjdGOTgwNzUxM0VBQTBGODdDRDU1Njc2NDYwNjkyCitFNzZBNzE4ODVBMUEzN0JGQzBBQkZERURGRjY1NURFRDhBOUZDODFGNTc5MTJFQTg3RUQ1RkIyOEU2RkJGMjgzRkI2ODMyQzEwNzA0RkIKK0IxQjQ2RDdFMUJFQzcwQjVEQThGNUNEQjU4RDE5RThGQUFCNTcwMkEzQTcyNkVCMDc3ODk1RDM2Q0I2MzM4Mzc4QTM0MTI5MjIwMTZFNgorNUM0NUQ3N0MzRDc0Mzk3MDU5NzBDNTc3MkRFRTAyODIxRjFCRDIzNkFGREI5OTgyQzE5ODZERjE2MTY2NUQ3QTkyNzQxMjUwNzcwMEZBCitCMkQ4NzNFNzdCRjgxODcxM0EyNTdGQzdGQzI5REQ3RDQ5ODcyNDlENTM1RTM1ODI4MTJDQ0VGM0NFNzJCNjBEMjNGMzM0MzZEMURBNDIKK0JBNjA0OTY3MTk3NzQ3ODNGMzk1QzQyQzFCNDRDNzdGNkE2NjYyMEYxRjkyMzY3QjU2Nzc3QTU3QkFDMDI0ODc0NjgwQ0QxMDQ5RUUzQworNDU4QjI0MjEwNjI3Qzc0NTU1OTA4NzAzM0VERjBDRkUxNDQ4NUZCNzlENTQxODg4RDk3Q0JGOUFFNkJCRUY5Q0UwREMwMkJCQkM4M0I0CitDMkJDMjYzMTNDQ0U0NjM3MUM2MEJGQzMzNzU4QzZCRDMzNDNDMDk4NEU1OEQ0Q0U1MTMzNTExODk4RDc4NjBEQUVGMDREQUJDNDQ3MzEKKzdBRTNBMThCQzg5ODgzMzEzMENGNzJFREQ5MUE0RTQyRDg1RjRCODk3RDBGOUU5REI0NDc3RTczMDYzMTg5MTYxOTE2REU2RjM0RkY3MworMTFGQTY5NUFGQTJGODk3MzM0RkQ4MURGRkM1MDVCRUE1QzEzQTNBQzc5MjU2OUM2OTM1NjExRTk1Qjc0RDQxRDlERTM2MTQwNjIwOTc5CisyMDVGQTc4NTlFMTU4NUIxMTI0REZFNEIwNEQ4ODA2MTVDQzIxOThBNjdENDdCNjQ4NTFBNjQyRjQwQ0MxNkE4RThBRTIwMkVFQzU1RTEKKzAwOEUzODc5MjQxQTYxRTY2NzNDOUVERjc3RUZCMkE0M0Y3RTg1RTE5NkJFQTAwNDM4OThGRUQwMUZCQUFBNDc4OTRFRTczOTJCMURCNQorMkI5NDMzRDg4OTgwNDYxQTdGNkJFQUJFNkI3NTI2MDBCNzU4RjBGMjUyOUVBMjZENTdCRjI4OTQ5MTBBRkM2N0ZDNkQxOTBGMzU5MDU4Cis1MTc3NjZDOTQwM0I0MDRENTA4NjVDRjYzMkYzNzFBQTY3MzE5QjYyNjJGMDlBOTJBNjVFODZBRURFREFDNTA0QkE5MDFCOEExOUZBMTQKK0Y3QzY2NTlCMjA5ODQ1RTk2NjU0NzQ5ODFFRjk1MTMxMTVCOTNEQTE2OTkxQjVFMzFBNzBERjAxREIwNkQ0N0JGMDg5RUIxODRDRTAzOQorM0ExQzJDMDhBMkIwNTYyNUNFMDI1MTNCNEM4MkQwMjZDOTAzRENDQjMxMzVGRTg4QTZBNENFQ0ZEMkQ1ODA4Q0NDOTlCRkZDNDNERjlDCitGQTJFRkU5ODc1QzM0OTEzMjBENjJGQTNBNTQ1NThGMjk4RTM4NTREQzNGQzhENjBFQjA5QzUzNEU2QTE0MTAyRjQ5NTNBRjc5QTU3RTgKKzc3NDhBMkUwMUM2ODNCOEVDQ0ZFNEFBNjgxRDk0M0MzNzU4RkU3MDYyNTIyN0RFMjE0Q0NBQ0QzNUYxNUI0NzgyMTAwQkEzQzBBRUQ0RAorNTIzNjgxNDM4QUUxOTVENUI1OEQ0RjYxQjk4MDdFRkIxMkIxNjJGQkRFRTYzQzIyQ0UwNUQ5OUU0RTI4OUVGMDE0NjNEQ0JENzQ4RDlDCis2Q0EwMjcwREIxMTE0OTVCMEU3QkEzNzdDQjM0MTYzREE2RTNCN0Y1RkU4OUZDOUZFRDk5NjBGM0VCOUZDNDJGMUNEMzlCRkFDOEEzNkIKK0YwRUQwQ0IzQjZEODUwM0U3ODQzMkVCRjQyQzBFQzZENjA4MjQxRERBQjJGMzI1NDBBQjIyQ0VGRERCQkIxMDA3NzE1NDg0NkFENTI1MworODM1NTU4RTFBMzBDNDI2RjlFN0E0ODhCODhDMTY5OUFEREU2OUYwODIxMzQyQzYwMDQyRDBDRDUwNTc5OUJGMUE0RDg2RDk0REM0OUEzCiswNDYyMzZDREY0NjJDQTYzNjcyMjBFMDQxRkY4RUZFMThDQTY1Qjk4OUU4NjVGRDIzN0E3RTEyMEVFRTk1OTE1Mjk1RjRGQjhEMDUwOEYKK0E5OEEyQjc3MzdENjA4ODA0NzUyMUU2Qjc0MDMxMUJBQTVGRjQwMjc1NENCMTE5M0MzMjlCN0E3NEFGNUFCRDU5NkU1QUI2NkMyNDJDOQorRjZGODlEQTEyMDY1REIwMUFGQUUzMkE3Q0M2MTU2QjhERkY5NEI3MkM4QTVGNDE1QzczODk2M0IxMTJERjk5NjE2NUY1MkNDNDhDMkFFCitGQzkwMzE3ODkzMTA0NEI5MDk1QTA5QTk2OTE2NjhBQUNBOTExOEQ2N0UxMjJCNzBCQzE5QTUxMTc1OTU0NENFM0E5QkZDQjczQTY1MDQKK0Q3N0UyNEEzNTBGRTUyRkIwMTA3QUVFMTJGNTlBRDMyQzEyMEIxMjA1QjY5RDAxNjVFN0JGOThDOUYxN0EwNERENDY2NDlFRjdFMzYzQworN0Y1MkY1NzNBMUI5OTczM0U1MzAzQkVEMTlGQTNDRjMwNjg3OUM3NDk4QjE4RUQ4RUUwMUU4RTg3NzE1QTQ0RENFQzVEMjU5RTk1NzY3CiswQTQ2OUQzQzRFNUVDMjA0M0Y2RUUyODhBQ0UxRTNCMzkwODQ1Mjk0NTVFMUY4Mzg5MTg2Rjc2NjJGOTZFM0UxQjA1MzA3M0NGMDREMkYKK0YzMjJDRkRCNjI2MzU4OEIzODAyMzI3MzE4QThEQ0I5QTYxQzlEMUIxREQyRjgwNzBGMjE0REZCMjE5ODY1MEQxNEE3N0MxNEZDMUFBNAorMDZFQzQ4NzE0OUI4NkI5OTdEQUYyMkUzMENBRTk2ODk3MTY2NEExMEEwQ0MzNDY5NjFGQTQ5MDYyRTYxN0VEM0REMERGNzM3QjQxNDM3CitCMURDMkIwNjcwODkwRjlFRDk3RTQwNkI0NkE5NEIwNUE1MzhFODI0MDU3MkJDQ0VGREUyMUY0MUE2NjUyMENFNUVDREQzQzBDQ0RCM0YKKzE5MzMyRkQ5NDY1NEE5RUI3RDdENTE3NTAxMzA5NEFDNzlCOTJEMUZCMEJBODZGMjA5QTMyODNEREE5REIyNUI0RjVBMEEwM0U3MkZGRQorQTQ1RjkxNDc1N0U4QzUwQjhGMEY4MTc2RkE4Q0Y0NEMyNzFBNTg0RjdCRTcwMEEwRDM2NTcyRkFFMDVFRjZGRjIzQzhCQjMzRUY2QkEzCiszMTg2NTgzRTRGNTVEMTI1NjA3MkI1M0I5MTA0N0FGNzg2OEIzMUNCNjE1MEY1NDU2RkQ0RkZCOEI0QjJFQzNFRTExNDhFOERCMzQzNTMKK0IzQkZBNEY4NEI4QzMwMDFFNTc1MzcyQkEzRjdCREYxQkI2QzRCODJDMkZBRDc1NzVFMTJFMjg3RUI5NzFFRDNEOTE0MDQyMjExMzdBMgorNTMwMjZDODk4OUZDNDcyMTQzRERERTlFMkQ0OUE0MTNGMUQ2QTQwOTE3OUNEQzNDQkY1NDRBMDkzRkEwNTk4NUUwQkU3MUNENjAxOEQ0CisyMTI3RDBBRUI0Mzg4RkE3QUJDODU1ODE3MjM5Njg4NUE4QTQyRjBBMEM3NjhBNEIwRUMyQjREMTg2MkFGQzRGRjM2M0YzNjY4QTMzQkIKKzZGNzg4QTVEOUU5Q0VBMkJGQUREN0E0QzYxMUJBMjE3RDE1QTFGNkJFQjEzNUY4RjdDOUZCMDExNjQyQjYyNDAxODE0OTRBNkMxOTJBNQorNzU2NzY2RjYyRDczMzFDMTQyQzU1MUFCMEU2NEVEOENCQzU3RUYzQzI5NURERjJEREJEMjY1ODE2NzYxRjE5OUFCQTFEMkU1MzQ5Njg0Cis5NEU2NzZEMTA0NjFDMzQxMzZGQjg3QjlGREM4MTdEQjczMTQxOTI3ODMwMURGODZDOTFEMjE2NjJCRkIzNjYxNUQ0Rjg1REYzNzkzRTIKKzlCQjRBODZGMUFFREMwNjFCMTU5M0Y1OURGMTMzRTRDOTdCNzQ0RjZBQTE5RUUwRTIzRUQ4MjZEMEFBQjVFQzQ3OUYyRjEzMUREQUUyNgorMEY0NDgyRTgyMTVGMkEwNkMzMzE1MkYxRTI2RUI0RjdFRkU4NjI4NDZBMzdBMDg0RDYwOTAyMTZBMUE5RTExMUQ0MTY2MjlBQTM3Mzc1CitDNDkyNEZEOTZFODc2NzNDNUI0MUY2MjdGNUMxQkY2ODJFNkM0MTE3MjVDRjU0MTREN0VENDMyOEI5NEVCOEVBRDlFQTk5MUQwRjEyMEUKKzg3MkNEMTM5N0QzNkQ1QzJEQjAzMTY0RjJFNUQ0MTQ1MTlGREI2MUREQjNFMjdENUJDNzAxN0NBQkFDOUVCNjdCQ0I2QTVGQzQ1MUMxMworRTdBM0I5NDRDMTc5NUFERTYxODk0ODA5QjA4NUFCNEQ4QzA0NjQ4NjcxNEQwODYwNDNDOEU1MDRCNTc0NzZDNUFGRkRFODQ3M0NCNkYyCisyREUwNkJGNkZFRkQzNjhENkY4RDBFMDAyOTJCODI1RUVFMThGMUZEM0RCMzREQTM0N0YxQjEzQUJGMTlGMjJGMTAzMTNFNkQ2NDY4MDkKKzkwRTRCOEQxNjY0OTkxMjhCQTE0RDJGMjIwMEM4NjA0NUM3MzFCOEVDRkQ1MkIyNDAwQzJDRTFCREYwOTU4QzRGQ0U4M0VBQzRCNzU3RAorQ0RFMUY1Q0Y0NDU1RkNCMjcyNTlFM0FBMTAyRTRDQTY0MjEyMkQ1REIyMzdCRTkxNUU2MDY4NTBENDdDRDc3QUIwN0JFN0I2NzZEQzg2CitCNUUwQ0UxRkZGQjE3N0UyQTg0MDIzRjc4NDVCNUI1NzAyMjc0MzM2MzhEQTE3M0MwODY3MzBDMkM2NDcwOTY0NzNDMjJERTdBNDdGMUMKK0MzM0UwMDQzNDk0NkFEOTg0N0E1NUE2RDU0Mjk1QkE2QjJGODBFODBBMDU1QTAyQThFODBEMjg2ODVGRkEwQjc2NjQzMDUzMUFFNzlENQorQkNBMEM2OTk2MjQ1MDJCNDNBM0VBMTBEOEUzRkU2M0FGRkQ3NTE4MjhGRUU2OUMwNzY5QkQzMzFGRjJGNDM2N0ZDNEY4QUVCMkMwNkI4Cis3Q0EzRDI1MURCQzZFODFGNzE1OTg2Mjg0NTcxMjI0OEZCODZBMEY3M0I3NjdFQTg3ODRFRURGQjUzOEU0MTMzNEE4RjQyODBCNjRFMzQKKzlDMjI2MEIxOTE3NjU3NjUxREVFMTBCNzhDNjBFOTQxQUM1Njk5MkJENjFCODQyMDBFOTQyRjM0MUMzN0M3RDczRDlGMkFGRUU4NDVBMQorQThFQ0FERjZCRjNERDc3RDE3NTE3QUE5OUZEOUEwQzg3RTczNUY5OThDMkIwNTcxNjc0NjE1OUVGQjQzOUI2MTlDN0FBQjAyQzYwN0UyCis5MTFBMjAzRkEzNkMxNUIzRUNFQ0M2QzcyMDM3RDQ5RjE1RTU1MEZEQkE1REU2QTdCQUE3MUFGODM0NTlFRDIwQTMzMTAzN0YwRTI1RDcKKzE3N0NEMTZCNENCNTcyQzIyNTc3MDBGMTUwRjAzRkU5RUI0NEU5Qzg0MEVBODFCQzFEOUI5RTZGQUNGNkQwNUMwMUMxNzA5RTVENzhGMgorQkZCRUJCQ0UwOEM1RTMyMDY3Q0RDNzFGRDUwMDQyRkYyNTRCRjYyRTVFMzkyM0I2NkFDQkFDNDNERUI2NTQxRUY5OEUxQ0Q5QjEyMkRGCitDMzcxQ0NCOTcwQzM0NTAwNjg0Nzg4MERDNjgxNENDRUM1QjU5NTVCNjM3ODZCNEVBMjI1Q0E4MUM1QTE5NDg3QzUxOEM4RkQ5ODU2OEYKKzEzQjc5RURFQjQ2NUNDMkIwRkZCRjUzNzlDNEEyQzBGQ0ZCMDE4OTk1MTA3MjI0REQ0Mzc1NEU1NUY3MDE3RTk3M0Y0RERGQzJBMTREMAorOTdDOEM1REJEOTJBNUQxNjFDMjVCNjQ4OEQ1M0U1MkM0RURBRDg5MjAzQjBBMkI1MDQ4RDU1RUU5RTU3N0ZBNzVFNDZFNzY0OEI1NDMwCiswOTUyM0JFNkQ2NjYwM0Y3QTJFMzE3RkE3QUM0NEU0NTM0MkE5NzdFNzZENTM4NEI2NzYzRkUyMTg2MzgzRjEwNzExRjM2RTVBQUI4MDEKKzExQjAyNjk5MDg1QzMyMjJGNjYyMkMyMDFCMUMxRjk3NTcyMUNFRTg2NDE5RTlERjM2NUYxNjAzNjQxREY3QTU5MDVCRUEwQzU0RDNBMQorOEJEQ0UwQzg5MkM4Q0VBQUQxRjZBRTBFNzI3Qjc5MkFBRURCMzAzOTBDRDRDMTdEMDcyQjgyODU5QzBCNkU2NTc0RThGMkI0RjRBRTAzCitEQ0ZEMjc4QjkwREVENzY0QzBFNkYyNjJDQ0ZBRDcyNTdDN0QyRTI3MzNEMEU5QkVDM0M2REYwQkY3NzlCNTE2RTQxNTA2QkMwODQ5MjgKKzM3MjRDODc2NjgyQzFDNkYzNjM0MEFFODA3MkFGREIxRjcxMEMyODEwRTgwOEM4RTc4OURDMzk2MjE3NDk3OEUwMjBEQkMxQTE2RjEyOQorQUUxMTBFN0M3MDE2MDFEMTIwNzAyQjBBRUE5OEZFM0I5RUEyOENEMTc1QjlFNDQ1OTIwQkFGMzJCQ0JCMTM2NTJCQjMzQjYyMTQ3ODU5Cis3NjVDRDE1QjUxQTYzRkVFNjFGRjkyRjQ1OEFDMjg4NDlCQUI3NzVGRDQyMTIzNjU4RjMxRjZEQzBGODk2RjJFMzdDQjBCRDMxMEIwOTgKK0U3QjFBNkY0NzNEMDYyNEUzRDhFQjdCQjkxRTAwQkQxNjRBMDg4RUFDMjA3RjBBREUxRDkxNTBENTQ2RTAwRjNDRDAzOEQ3OTJGNDJEMQorOTYyNUExNEQzMEU4Qjk3MkIyNjM0MzNCQ0VEMTk1RThGRTRGMjAwQzY3MkExRjE2N0Y5NjlCMkUwNjdFMzJCN0Q2OTc2NTgyMzYyMEQzCitFNjg4OTRCRDAzQzNENUU2MTRGQUU5QjE3M0MyMUE5NDY0NTM0MjhCMjJDMDA5RTBCRDRBRDY5RDk0QkNFNzYzMDM3NzVGQUY3NEMxNTEKK0E2RDBDNUEzRjg3MDNDRDVCREZDQTJBNDY5QkY2QTQyQThGQTg2NzgzOTBCOUJENTE2Qzc2QzJENkYzNThDMEEyOEJFQkY5NzFGNEM0RAorMUQ4MUNEMTVEOTEzQzRFM0MxRjkzNDg0NzA4MUJCMTg5N0NBMTlEQUY4N0I5RDVFQzcyQTdDMjZCNjU1NjM1MTREQzE2MkNDMTI5MDg4CiswQ0Y0RkMwQzExNUNGMjc2ODA3NUNBMDdCMDQzNDBGMjI4RTg2MkE0MEYzNUFBRDQ0ODRCMTA5RkVFNTBFMjY2NTVBOEM2OTkyMDVENzAKK0MyQkU0RDIzNjhFM0Y3RjkyN0Y2NERBMTQwRjk3OUIyOTlCNTBEQjFCOTIyNEU2NzUwQTdEMUFBOTA5QTQ5MjFBQ0JFMUY0N0M4QjZCNworMENENDZFQzk4QzlCRDU2QzM1RDNGQjYxQUU5QkNEM0NDQzM5MTQxQzkyNzg2QjhDN0NBNjFFMDZCODhCOUExNzQyRUY2RDVDRDQxN0Y0CisyODJGMjIwMjEyRDMwRUY5N0RDQ0I3MENCMTE1M0U4OTEyMTMxQzlFMkU4OUI0OTBCQTk5NjdDRURBMDg5QUE3RDdFMjkyNUM0MDA1QUQKKzU2MjRBMjk0RTYzRjU0MjM1RjU3OTQ4OEE3MDVEMEQxM0JDRDY2ODI2MzEyMkNDNTkxRDI0MTdDRUUxQjFDMjIwQkY0QkU0NTcyMkYzQworNDg5MTg1OERDRENEODhCNjdBQTlFNjlEMDQ1RjI1ODQxQzBEOEE0QThERTUwNzhBMjIwODg0MjVBNjAyN0E5RkQxMDYzRjIyNDM2MDBCCitBQUIzNDc5ODMzMjIwRDM4RjM2NUM5NUVBRDJCOEUzN0U2Nzg0RUEyOUE0RDU0QzQ0NDVDNTJGMzkzOUIxQTYxRjA1RkM5RTVEQThGQzAKKzg0QjlCNUZGN0FDNzZCMDdFQkRGQTZFQUQ1RTcwMjEwQ0Y3OTU3NjhFQTY0MDhERjRFN0VFRkE1RkJFRUIzRkZGMDM1N0Y2MUVBNjA2MQorMDY2MTlDMTRFQzZFNEVBMzQ3QUM2Rjk2RjNDODUyNDU5OTY1Q0QyOTMyOEMzRkMxNjRGNTcwQTY0NkQ1MTRBMUZCRDlDMkUwOEE0QzQxCitBMDUzOUM4RDVDMDg0OUExQzYxNzNFNERDOUIyQjAzOUY3QjVBQUZCNDZBOThBN0E5NDMxRDcwMzg4RDA2QUI5MEI1OEJCQUVDODZFNzUKKzE3RjI1Qzc2NzRBNjMzMzI0RTFDREJCQTQ4MjdBNzc1QkQ2Q0ExQTlBOEFDMjRBNTFFNkZEMTYzQ0MwQjQ3QTAwQUQxMUVCMDVCM0FGNAorRjlGOTcxRjA0RjQ4NjVFQUJGRjlFRjU5OURCMzk4MkM2MkZCOTE5MTU5MTZEODdFNDA0NTg1NTJFREZEMDBBMTBGREM3NUY4NjkzOEFECitFMzhFQ0VCODJDQkYyOTQ0QUJBOUU5OUJFQjk4NTZENThCRUM5RjFFMEY1MkM2NEJDMkI3QjE5RDlCMjk5OUQxNkNBRTAyRTVEMTJGQkEKKzYyQjlBQkRDRjk1QzY2NEZCNDU1MEU4OTBBRjczMkU3RUYyNzhBREI5QTk0NUVBQjE2N0ZERUU1Mjk5Mzk4Njk0OTU1MTE1OUIzRkJEQworRTg3NjNFODc5NTk4OUNGNDZEQ0U3RDUzRjlDREM3MTNCNzlERDc1RjM4RDI2ODEzQTZCMzFGRTBFNDg3Nzc0MDFGNkZEODZEQTVEQzE4CiszRjk2MjVERDMwRUM3NTI4MkI4MzFDQzE1MUY0QTkwNDI2QkRDNDNFRjJDRUEzNzQ2ODM2MzUxOUNCQzEwRUVERTc0NTNGN0ZBQ0ExMkMKKzBGOTI3Qjc4OTIyQTgxQzNFNzgyMTJEODlBRUE1MDA2Qzc4OTQyNUEwMUEwRjM4MkVCMzVFNjFBMTU4NDZBN0M5MzRBQTFGMTY0RDQ0RAorRTgwNDE4NzQwQ0NBOTM2NEE5Q0I5NkNEMDFCRkM5MUM0QkIzNUYwRjg1NDIzNUU5OEU4REZFQUU3REREN0FCQ0QxOEFCODRFNzhDMDBECitEMzlBNEY1M0I1MkIxNEU1NzBEOUU1Mzc3MzI4RjQzQkREODI5MzZFNTk5MkE3NDUxMjNCNDJGRkVCQkJDRjE5Njc0NEYxOTNGNTdBNDAKKzM4QjVBRjNENUIxNzY5QzEwRUI5NDdCNEMyRDZGQUM1NzhBQkUyQzRFNjgyRjYzOTcxRUY1MzQ2QzYyREVGRTE4NERGRkMwMzlDMjMzRAorQUE5NzdDRTMyMjREQzlFOTg5RTQ5RkZDQ0M3M0JBREFFODVCMkE5QkZEQTRGODQ4MDA5MjM3QUJDNDgxOTkzRkQ3QzM1OEFBRUI2MkU1CisyNjg1QzQ1OTdDOUJEREM1NUM2Q0VFQTFCNDRBMkJDMEEyNzA2MUQwOEI0RUZEOEI5NzY2NENGMkZCMjUxQjk0RDQ5MDBGMTM1QTk1MkMKKzQ2RjVGQTEzQTMwRjZBQTVDMTE1MEExODY2NzhCNjEwNTI2Qzc2NDA1NEREQ0I1RkZBQUIwQjMxQTkyQjhCRTFBQzYwRjU4MjlBOTI3RgorMDA2RjYxOUQxMEI1OUY1OUYxMzdGQTYwRDAxRUQ2RUU3MUU2NTQ0RUE3Q0Y4QzhGODEwNzU3NjdGN0Y4OEQ3QTI0MDJFQTMzRjhERjIwCis5QTgzNDU3NzZDREZBRDMzMTVGQUZDRjk0QTk3NzZCQjM0Njk3MjYyRDM4NTZCOEY3MkUyMzhFODMzMUYyQ0Q0RUJGQTJDRDBDMkY2MzMKK0Q2N0NGRTAxMkUzMkY3RTFGMTk5OTgzRURBRjM5NDE4OUU3MkQ2Mzk4RjQ4Qjg5ODg2NjhGQkUwQjZCMUYzMDdBOUQxMjdBQjY0MDc2NworNjlGNzg1NkYyOEI4Rjk3OTA5M0I3NTJBNzUzQUZCNUU1MzcxQzY2MTkyRDg4NEZGRjAwQTk3QjMwRkVEOTkxQTQ2QkI3Rjk4MkI3ODU4Cis2OEJGQ0NFNzU5M0Q0MzI4NjFDNTVBQTZDNDhBMkVEQThGQUY0RjlEMjNGRUI1RkQxRjQ3N0FFNTMyMjM3QTM3MkQ0MjU2NjQ5NzBCRDYKKzY3MDgwNzc1RUI5QTNEMDgwQjEwNTkzQ0JDMjcxRkE5RDhDOTVGOUE3Qzg5REFBNTRGNzgxNUY3QzcxMjZGNjQwQ0Q3NzNFNzAyMDM3QgorMkZDRkNGRjhCRTlDNkFFQkJFRjk1QTUwNzkwRDI1RDFCMjg5RjI1QjQzQjk1OUU5QzJGOTRGMkJCNjYzODJGMjk5RkY1RTg4QUMwMDNGCisyQTA0MDk1QUU4MDhBNkZDODEyQzNGNDg4QjU3ODNEQUNCNThBQkMxNUY4MUI4NDIwQzM3Qjc3OTdGRjU1MUIxMERBQzAzRkMxOTUwQjEKKzczNEY3NTNBNzIyRTlFQkFBRTVGQzYxNDBEODAwRDFFMzY1NUQ4OUI4OTcyNkJCODEwMEMwMEU1N0ZCODVEMjI5RTY0RUVGNTBDRTAxMAorMTY5OUU3MjFCOTRDRkI0MkYzQ0NEREZFODc2QjEwQjQ5QTdBMzhGRTY5Rjg1NTJENjMxREU2Q0ZBOUYwQ0NFMzE0NEFFRDZBRDAwMjE0CiszNkVDRDkwNDRBM0RGMkI5OTQ0QkU0OTFDM0YzMjgyQzM4QUQzODM5QkVFQzk0ODVCMzA1ODJDOUQ4QzIwOTg2QTlEMkRFQkE3NjBCMTQKKzZENTQxODQxRDQyRkE5RjQ2QzMyOUM1Njc5QzMxQkIzMkY4OUI3RTRGQjgxN0EwMkIxQ0RDN0VDRUVFQjg0ODE4QjYwNTQwREJDQ0MwRgorMzE0NEM2NzMzMjBFM0REQkU2RTMxRjE2Nzc0NzlCNzVDMTg5NjhCNzY2QzkyNDQ2MTQ4MkIzNTc1NEREREI5RTQzQzgxRDIyNkM5MURECitFMjE3NjhBNTRDRjY0RkUyOTk4MDMxN0M2ODY0RkFEQTIyOEQyQTk3MjE1MkVEMTQxMkY5NDk4Q0U2MEI3QzNCNTBCOTg5MEFFRDcyM0MKKzc5NTkzNDQwOUM1RUIyQzcyN0E4ODcyQzZBMERBODIwQ0NCQjUwNkNGMEQ3OEFGQUQ2NEMwNjg5MUE4QjU3MDczMkFGMTJGNjBENDU2RQorMTc4NzFFNUUzRUNERDZCM0NCRDhGODYyMzRDMzhFNEZEMDBDRDM5NDU3NDE5QTE2OUU1OUVGNEVFNjI1REQ0MDc0OEJBRTQ3Q0RDMzlBCis5QkFBRjRCNjVGQzZDNTUxMUQ5MDYxREEzNTJFOTgxODgwRjYzNDBENkI2QTIwQjgzOTc1NDY2M0QyNkY2RjUzRUZDRDZFQTZFQzk2M0UKKzU4MUU0MjMzMUIyMzY0MDlGMkY5OEM0MzQ0NUJBMEQ3RDBFQUE1MjE1MDYzNkFGNzM1QkZCNkM0NzVDOTA0RkQ0NzU0MDM0RUQ1OEUxQgorQjRERkFDODI0QjM2NjlEM0FDNDczQkQ4MzNCM0NFODg5MzIzOTg3QkYxRUIzQ0ExQTA4NzJFRDUzODg0NjBGMzYwRkU5RDE0MDBGQzhGCisxMDgzMzk0NkY2ODgzMjk3OEIwRjc1Q0IxNEU5RkY3NUU3QzVCOTQ2NDUxMkJGRDVENUM0QkRERDc1MzBGQUUwQjM5Nzk0OEZENTcyMUEKKzBEN0IzOEZENUI2N0NBRTE2NkVBMkREQ0RGQTFBQkY0RjhFMTE5NTkxM0QyMjJBQzNBN0NENUJBOUMwNzMwNEZDNDc3RkQ5MUZEMzVDQgorQzc4NDgyNkFGRUQ1RDgwQUI3Qzk2ODAzNkU4Njg5MzA1MDhGNEYxQzZENzQ4ODA5NEI3ODk5MEJBNEI3OTM4NEM0RTU1RTA5RkJEMjhFCitDQUQ3NzY0REY0MDRBMTgzMkIyNDNFRkY4QjBGMzQ0RjQ2QTNENzcyRTZGMDUwN0E1MENGMTIwQzc0REQ2Njc0REU0QTcyNTMxQTMzRTYKKzI4QTVCMUFDMDc5QUU3QTQxRDYyQzcyM0Q5MEI3QTNFOTk5NDg2Q0RDRTJCNjRCQ0FGNzQ0M0JDQzM3QTk0NDVDMUI0NjgxQkQyNkREQgorQzQ1MTY1OEExOTgxQjMyN0RERjAwRTNDOUFDMzQ3MzU2MDU1OTU0NjY0NzJDMzQ2MzY3NDlDNDM2NzczQkFBMTU1RTUxQUNFNTdBMjk0Cis2MjgxMkQyRjZFMzk2RjU3RThBNkNGNUE3MzkzMDhGRDQ3OEM2OTUyOEQ4NkIzQ0MxNDQyNzYxNTMxRDZCQjFGRjQ4QTUxM0RBQTFCRUIKKzYxN0E0MThBRjY5Njk4OEUyOTUzOEQ5RUYwREQ4RTE2NTg4RDkxNTdFNjE5QUUxMjI2RjRDMkYzNzE0NkRDNkE0OTY4NUM0OTI1NzhGMworRUVEN0I4REVFMkZDRTAzNDYwQUREQjkxQzM3RjdBMjlFMkQzMjc2MTk4NzQwQjczQzkzMTYxQTc1RkUwRDgzRjAyRUNCRjFCNUFFRDkzCiswODZEQTA1NDVFRjEwMDAwNzA2MzA1RDI5MTFFRTM5QURBQ0VDQkUwNkMxQjVGRTk0MUVBOEJDQzZDMkI2RTk0ODU2NzRFN0RCQ0VGM0EKKzY1RThGQjU5RTI1QzI5MUFFQzMxNThBRTlEN0MyRkE2NjEyMjRCMkNGQjg3OTcwQTg0NTM4RjAzNzBFRDZERTRBQzQzQkUyM0Y5MTRBNAorRDY3RkM3MUFEMjdBREQzODRDRTkwOTlDNjVBRDg5OTgwNzM1QjA0NkM5RjM3Q0RCMjlCQTVCRkMzNTMwQ0IxNjU4REZFQTk0RDcwMzYwCitGNjM3ODFEODdGNDUwMTg3NTY0NzM0Mjc5MUVBNjA5RkQxQ0FDOEEzMzhCQzI1RDI5NkE4MEY0QkUwQTI0QTg0N0FCRTcwOEJEOEI3RUQKKzE1MEMzRTA3MUJGMEY4NDY5QTk5NDA3MkRDRkMxNkJCQTkwRkIyNEE3MUNFOEU3Rjc2RUNFOTVEQUE1QkYzRTc4RDBBRkMyMjQzNTc1MworQjk0RUEzOTBDRDk1QzE5QkU2QzczOUZDQjM3RjcwNTFBODc5OTE1NTA3RjZGNENBODVDQjlDNUM5QjFERTZFREMxQTU5RDA0NjNFQzA5CitFQkRBQUMyRTU5Njk2NTgxMTEwMDQ3MTFDMkMzNzY5NjA5QkUzNUY4NDYxQkEzMEJEN0U2ODMyMTUwNUExNEIzMEUwQkU1NEIyOUREQTYKKzRBQ0QxRDE4NkU1N0YxNkExNUExMjExRUFEMENDMzE3QjhCNzcwNTA2MEUxODE0MDM1OEY5NTBCMDUwQTIzMkUyRTI0RkRERjc0RjkwRAorRjFEMjg4RjMxNzFBMzgzNTFBMTQxREYzMDVCM0ZEMzJGNUE0N0MyNTMzN0MyNTIxNDBEM0Q1Mjk3MDBBMzkxRjUxNzYxMzRGNkU0NzUyCis3NDUyRjc2RTE2QjlENTAyNUEwRDlDNEJDMEE4ODczQTlEOEJBNEFBMEUzMjNFMUU2MzVFRTcxNUUwOUUzNzgyQTY0QjFCNTc4QzRGQjAKKzQ4OUQ1OTQ1NThBOURGREVDNDc5QTk4OThCM0QyMDAyRUY2QTNGMEFBQ0VGQjRGNENEODI2MTE3MkMyN0QxNUQzQzhBNkQ4QkJGODU1MAorQjVBNzI2NzJBNTEzRjM0MDQ5MjUzNkExQzU3RUJBMUU1NjEzOEE2RUIxRkMxMzhCQUExREVFMTREODMzNEJBMkQ4MzY4RTFCMUJBRURECitGNDQxMzQ5MDcyM0UyNDkzMzY1OUEyQzJBQTc2OTE4QjM0N0FEQ0VBMkRBNzczRjRBOTAzOTlCMEQxMkU2RDk2OTdDQ0E5NzQzRDJCOUIKK0IyRTM0Nzg0MUFGMkZGRDNCMkVDQjJGNTJDNkU4NEUyNDlBOTgxNjQ5NDAwOTNDNkIwRjdGM0VEQzEyRkRCMEUyODQ1ODMyMUVBNTM5RQorRDUzQUM1QThBNjU4MUQxMzg5OTY2NkUzODdGNDU2MTFFNkRGNkZCNkE5MTJERjM0ODM3Q0QwMkE3Q0JENDQ5REI2RDc2QUU4RTBCOUQ2Cis2NzRBNzhFRDgzMUNDNTJCNTAxNzgzRkY2MUIzRDYwMTJDN0ZEMDkxRjc4QkU1NjhBMkQ5Q0U0RjMwRkM2QjU3NjIyOTVEQ0JEQTFGNTMKKzU0NTY5RjM4MTM4NjE4NzE4NkVFRkE1OEU1ODNEOTQ3NkE0QzJDRURDNkI5NTIzMTVCQzNBQUE2NkFDNEEwRkYzNERDNDYyNjhDNUI0NworN0Y5OEYxNzBCNUNBNENFOTE4OEZCNUE3REU5QjZDNzA2RjBFMTM2OTNFREQwNkIzNTlFRjhCNzFDOUNEOTNBNTVERkQ5RTlGRkJERTQzCitBODk5MkU2MUU4MDM3ODY1MzE4QzI2ODU4RkQ1NzcwOTY3MzAzMzRCRjY0RDE2MEZCQUI0QjRBNUQwRTEyNkUxRjc0Rjg2NkQ1Qjg0REIKKzNFRDAyODNDQzQ3MUVENzQyMEQ1QzcwMjk0MTcyNTZDMzlBM0RBQTYyODJBODdDNDJFQUY4NUVERUQ5MkQ5RDJDNjhCNzUwOEY5QjQwMQorNkMxQzUyNTc2RjIwQUVCRjE3RDRGQUM1RDJDMjZDMzBFNEYwQjBEQ0Y4MjkxNEEyOTRCMDFBNzExQTA2NzAyOTQ2QTkwODc2QUZENTExCitFNERBOEIxRTJEQkQ2Mjc3RjQyQkM3N0Q2RTUxRENGNUY2ODIyMTRENzdCRERBMzY2MzJENzAyNEUwNUQwMUE4MDMzNkMzQkJBNUQxRUUKKzY2NjhDRTE2QUM4QkMxMUFDNTA3NTM3NjU5MEVDOTk4MThBQTc0OTU4QjgxODI0N0VENzMxM0IzRDA3RDBENUQ4QzMwMzQ4M0YwRjBCNworNUI0NjI0NkY2MkFFRUM3REMwMERDRTA3RjVDNDY1OUIxOEJGMEQxNTc3MzY1NzUwMjI1MjRCNzE4OEY4QkY1QjVGNDYxNUU1MDdDOUM2Cis4NjA1NTcxREY4MUEwMDcxNUJGM0Q0RjlBQjZCQzVDQ0ZDQzEwNDk2RkQ3RUFFODBENjVGQzk3QTlBNUExQjgyRDg1QkJERUVDQTFFOTQKKzBFRDM5QTQ5QzVDRDMyNjNGRjA1MTQ1NkNDNzg1NjYzNDM3RDU2REY2RkIxNTM5QzQ2QzM1MUZDMEZFRDRGNkMzQjUzRTFENjAxMEY5MQorMkI5MjVERjZFMkEyNUE3RkRGRUI4QkI2RjdGQzI4Mzk0NjdFQjE1NjY4QjIxOTVERTIwODNCMTdDRkI5QTZCMTgyMjgzM0RCN0JFM0EyCitEQjZBOTdERUI0ODgxM0MxM0Q0QkIyRDI1NzQ1OUZBNzFBNjdEMUNBNTY3MkYwMTIxMUVGOUFCQjBDMTZGMzc4NDE4RjIwQzc3RjVGNzYKKzJGQTU2QjBGODREQTc5RUJERjcyOENEQjcyMjc3Q0ZCNDQ5Mzg3OTlDRjMwN0U2QURGQThBQTU2NDUzMDcxNkQ1Q0E4Njc3Qzg3MTBFQworODQ2QzZFODdFNjNCQzk2MkQ1OTExN0I2NjFEMUVCMkIxNkI4RTEzNDg0REMxQzdFNkRGMjNCMjFDNkFDNEM2OUJGNjFDNDFBQ0Y1OTNGCitEMzZBOTExOTk2OUY1MDc1QTVENDI4QkRCNDY2MjBDQjlCM0JEMTZFRDQ4RTNFNzhDOEE5MDBGQ0Q5NzhERjIwRDE2RTJGODk1QjE0OUEKKzUzRkU3QUUxQTE0QjA5MDFCQTNBOUMyRkVBMDAyRkFFM0REMjVCQTBDMUMxOTE4RkNGMUM4NTc1MUM0Nzc4QjhENEZGNzFGRDQyNzVFRAorOUMzRTcxMUZBMTJENTAzQjBDMDU0NjlBRTJGMEY4MkU5RDZGN0UxQ0YwQUQ1QkUxQkEzOTg1Q0I1ODg1MjRBRTc3MUFEOTQyQTZDMkJECis4QkJGMDhFOUM3N0VBNEJERDU0ODIwQkQ4QTBGQ0IzNUE1QzkzQzBFMUEzQkI1MDdFMDAzREI1OTQxQjc5NTA5NDBCQkEzMjNFNDVGREIKKzMyMjU4NUQ0NzkyQjVCRkE5N0JFRUMxMzhENENBNTZGQTMwMjJEM0FEOTlFMzBGODA1NTdEOUI1MzE3NDdFOUY0NDI5QkE5ODA5Q0IzMAorRDIwMDA1QkMyNEUzQTM0ODgxNzg1MjY0NjRFOEE5NTBDN0QwNEM3ODcyMjVGQjZERjUxQzNBMzgyMjlDMzNGRTUyODQ4RjREREQ5NjY1Cis3QjYxRkY5RTA2OTBFQTZCQjk2M0Y4NzlEMTcwRjJFRkQ1OTJEMTI3MzE4OTBCQUM5QUQyRkVBNDA3QjE2MURGMTlFQjMwRDZCODMzQzIKKzdBQ0JDRTU1RkEwNTU2RTJGOTkxNTY0QzE1QUNBRTIzNjQ3QzU3QkYxODg1QzFGRDBBODBDMUE5RUYwNDRBRjFGNkM2QzIwQjNCQjVDMworMEI5NEMzOEY3MTg2OTZDMTI3RjNEMEJCRkVCNjRGNkQyQ0REODI2MjA2NDBEN0UxQTdCQzk1NEQ5N0QxOUIxQkFEN0I2RUE4OTY1RTc3CitFRjU0QjgwNjMyQjlDRDlGOEJCNjAyOERBRUU0MEQ1OTY1Mjk5NDA3QTAxRTA5Q0NBMTFDQzgzMEI2NjEzNUY4MEQ1Q0ZFNkJCNENCM0EKKzZDOEZEQzMwOUVBQTk0MEIxNDAxQzI2OEM2MzVBRjcxNjdCOUNDQ0YzRTdCRUJBODlGNzNCNzIxMDAwRjhCMEVDMTlCMEY1NzJBNUI2QgorMjYyQzhGRDg2MkRFMTBCRjkyODU0RkU3MDVBNUM1OTExQUQ2RDAxRTgzQjlGMTVBMEI3RjQxMUZBMzdERkQ2NDYwOEQwNjExRkE3NUZBCiszNTU3MzdGMEE1RjFBMjczNkQwNzFBRkJBMzFBMkFDMkY0MUY4NzQ4QTlBQzFENjFBQTY0M0ZGMTBERjlDN0YwMzEwQjg2MUY3NEI1MDQKK0M1MzczOUJGNDU0QzBCRkFCMDc1NTJCODU4NzlEQkZFNENEMzY3QjNFOTZBREUwQzM2MDRBNEFDNDRCQTQ0MDA1NUQ1NzJGMDZFODZFNAorMzc1RTg4QTQ3RENFMzkxRUY4REUwQzczMEQzNDBBQUEyQkIyQTQ4NjUxN0Q3QTMwRkVGOEU0OUI3MDA5NDI4NEZCMjAwNzlCRTNDOEQ1CiswNDlGMEI2MzFCNzZEMkRGOTg2NTIwMDYzRTBCQzZBQzk0REJCQ0RFRjc5QUNERkIwMjJDQjU3NUM1N0FGOEY0QUNBNTJGRDAwRjA4QTIKK0JFQkRERDVDN0NFNUYwMTIxRjI4NjFCOTVDNDE2RjgyQkUwNjc3OEQxNDI3NUQ0QTQ4NjY2NUE2MzlERTFCRTg3MURDN0UyRjhGMERGQQorMzQwREVCRTAzRjlDMzM2MjJCMEJFNjdEQ0Q4ODc2MENGMTU3MzI1MjdCMjkxMjBCQUZGMDlEQUEwOURBNDVFMzJERTZCOEEyMzM5RDM1CiswQzk0REFBNDdEMEM3NDlDMjUwQ0U3Q0IyMTFCQjM5MEM1MjE0MDRFNjhGOEZGRjEwRDhDQzJFQzI5M0ExMzIyQTNBNkYzRTM4MThEMEIKKzI0OEE5MEQzODYxMjA2MTMyOERFNzRBM0QyMkQwQkU0Njc5NzRCQjdEM0ZCOUExOTM3QUMwOEEwOTU1REUyNzg3NjIzNkFCM0ZCNzgwQworQ0NDQkIwNDE5QzgxOTgyREU2NUFEQ0VFRUY3MjMwQ0Q0NDJDNEM0QTlDMDkzQUFFMzVBMDI3OTdGRDk2QUM0OUM4Njk0RkM3MkQwQzg4CisxNDIwMTEyQzI2RkRFQkVFN0EzMDVBQzM2RDA2NThGMDFFMUQ4RTY4NTQ3OUFBODkyNEYzRkU1MDg4NjQyQzAyNjU4Q0U2OTY4OTRERTYKKzAwNENGODFDRjYyOUM5REJERDQzRUE0NERCQzc1ODkzNTgzOENFMDlCQjFGOTEyNTBERTIxRjNCMUFENTVGM0JEQzhFNkM5NTI3MURDQgorNzgxMUVGRkVCRTlDRjMzODIxNzY4NjlCM0E2MThFM0I3QkJBQTcyMTU4QjZBQzU3NDkxMThERENGMDMwQUYwMEU3NDYyNEYxN0Q0MjJBCis5NjlDRUZCRjEyN0JDQTlBMzE5OEMyQkNBMEM4Q0NBODY2QTgwOTE3MkU5MEU0NjQ3MzNDOUEyNzBCMUMzRDJERkNBN0ZFQzU4Q0Q3NTMKKzlEMDc3QkQ3NDRCOTRDOTU1NDQ1M0JBOUQxQkY5RTZBQUE3MDA1ODQ2RkQ0QjU1Q0YxNUQ2MEMwNkMzRjI0NDU3NThGMjhCRDMzNUUyMworNTU1NkI1QzAxQTM4QTczMDYwN0MzNTE3Njk4QjYzQUY2OTI0MDc0Q0U0OUYyOTBERjczQ0Y0MjlFNkRGMkZBRTM3QTJDQkMyNjI0RjlBCis2RDA5MjdDOUQ0NTBCREI4MUMzNTJGQkUxRDMxODcxRTdERERCQTEzNTg1MzJGRTI1MzM3MUM4RDJEOEJGOEM0Q0E4NjM2NzZEMTVFNTcKK0M1MzIxMzY4RkU0RTcwNDI5MzdFQzU1MTM4QzRBOEMyN0E2RUEyNjJDRDBEOTFDMEQyQzY4NUMwQTA2NkMyMUVDMDIwOUUzOTFBNUUyRAorNDlFMkM0OEZDNTNFRTRCQkVDRkYwNEE3Rjg3NjY2ODE4MzdBODUyMzhFRjRCNUE5NjkyRjI4ODMwQ0M1OUQ3MEI1RkRBMDNGNDJFMEFDCis1OEE5NTVEMThEMzU5NjMzM0M4MTZGNTlEOUUxNDUwOTVBODM2MTcwMjFCNDcwNTc4ODUwODZBMDM0OEI1NzM3NjZDRTgzQTgyNzVDMjMKKzZEMEZENjZGOTQ1QzM2NDhBMTU0QzIzQUZCQUFBNjZGQURBRjFGOEZFMTE5MjFFNDkxNzU1OEQwMDFGMjZGOTg0RUZBNzVBMzdGQ0RGRgorQ0ZFMzhCQzNBNTg3RDQ5RkREMDEyNjUzRUM5NzlFNjVCOEE1MkU0NjE3NzJBNkYwQzUwQ0Q5RTE5NDhGQkZFRUI5RjNCMjE3QjRGRjdDCitFNUYyQzg2RjAxMUI4Q0ZGQTAyNzQ5OUU1RTJEQTk2RDJDMUM4M0U1MTdCNUI2RUQxOTI1MjU5RTk3RkNEQkNDRjFEODREMEE2M0I0RjgKKzA2QjNFRUJFQ0JGNkIyNUM1MkY3OEI4MUFEOTQ4MTQyNjY5OTkwRTgwMDQ3QUREQTNDQjBCOTEyNUYxRkM5OUYxNDE1ODFFMEY5OEZGRQorOTEwMDZFODM4NjZBQ0VFOUJENDhDNUQ3OUQ4NDc2QkZFNjcwRUE5QTYwQjQ3MTNEOEZFQTlBMUE3NURCQkIzQzM2QzY5RTJFOUVFNTk4CiszMzQ1OEZCOTg3REU1RTAwNzMzQzk1NEQ2MTBEQTNDNTA0QTY3OERCRjI0OEUwNjFGRDgzREU1MDdENDRCQUQ5MEQ4QTRERDVEOUQ5MkQKK0IwQzYwQUUyQTcwNkY3RUY2RkE0RDE3RTFFRTFGNDdBRDVBMzk5RDVENTNEQkZCQzY1MTU0NEVFRDlFMzk2OTI3NDlFQzlEMDk2QjdDNQorRTQ2MUI4QUFGMDM5RjY2M0IwOTJCNEQyRTdBMzZDMTJBMzlBNDE5Q0E2RjNFRjdGNEQxRDJBQTEzODdCNzAxMDMwQUU5NEVEODI4OEMzCitCQkEzRDQ1MTQ4ODZCRUM0NkJEOEEyNTI5MkE5MTlFOTg5M0U3NDg3NTEyRENERjNCODI2OUY2QkFDQjVCQjM4Q0NGMDgwMUNFQTg5NDQKK0YzODIwOUJCRUZFMTc4OUIzMDA2OTI4MDExOUM2N0NDOUJFMEY3N0IxOTM0MDQ2NkQyQTJCQTJDNEI3NUYzOEE0RjhBQUE4MzJGMzA2MworRDkzQzUxNEI3RTFEMjJBNkQ2M0RBNENEN0FFQzQ2RENDRjk4RTc4N0JFOTMyNDBDQkYyOEU1NkVCNzU3QjNBOEFCNjg0ODZFQzE1MTM0CiswODY4MEUwQzc2NUREMDZDNjMzOUU4N0Y4NjMzNjUzQTc1ODFDNTJGRThEMDc5ODY2NEZFRTYxOTFGOENCNUNCQzkyNThFMzBGQUIyMTEKKzZBNjM3Mzg5MEJCOTU4ODRERTRCQUVDRDU5MDIwM0VDNEQ4NDI4MDA3MTkzQzExMTMwNzBDMzlEQUNFNTg0RjE5MzYzQ0JCRjREQjRFQworRDg3MEJBNzgwMDhCMkJBMkU1RDAxMjRENkVFMjhBRkNBRTAwOTdBOEM3ODM2REY1RjZCMkFDRTg4MTkwNUM1NzY1QzVEN0M2OEZFRDAwCitENzFBNUM3MTMzMzU5NDc3MTNGREQ0OUUxMTc4NjZGMDJDMUE0NTg4RkMxNTE4RUY2RTFDRDk0MDZDRkFENkI1QTlEQ0M1MDUxNEY1QkEKK0YxQjUyNTlDOTNBOEQ5MTdFQTc2RTM1N0RFRjJCOEQyN0RFNDA4ODY5NTkyMjA4OThENTk3Njk1MjNBNzRBNzM5NTU4NDJDMEI0NDYzNAorN0M5QTFGMzM1NDU0QTIzQzcyRjA5MkRBMkFDNDA0Q0RBREE5OTI4NTMwMzkzODgwOTg4ODEwRUVGNzNGODAwODAwMTFGMUU2QzNBMjdFCitFMjgwNERBNUNCM0UxREQwQ0VBNEQ1QjQ4NEY2MzFGNjM0NzRCRDlFRkIyNzdDMTJBMUY5MkEwNzFBNTJDNUU5ODZFODdFRTY5QTU2N0IKKzQ0RTZFMTI4OEUwM0Q5MDIzQkE3QTIyMjIxNjhENUZBQjhENDcyMTFGN0M1MkVFMTBDNURFQUJBQzk4RkQxOTJCNjA5MDczRjQyMjVGQgorRDAzNUFFRkRDNEM5QzZBMDQyQkQwQTZEMTNBRjI0MTExN0U5RjIwRThFN0NCMkMwNjg1MjhEMjFEMEY4OUUzNDJCODkyQTRBNzJGQjE4CisxOTVENzE2QUQwMjU3MUUyMTMzNzNDNjA4RTEzMDM4RDNGQjQ3NEMwNjMwOTk5MzM4RDY1QzYzN0ZFQ0NDNUYxQUY0RUQ1RjkxOTA4OTQKKzU4NTk4OUM2OTBBODNDNjNBMEVFMDdBQkNGMjIxNTA1NUVENjY1RDU0MjMxMTEyMThGQjkyNEMwQkNDQUU3QkUzRDYzNEM5NTEwRDExOAorRTg3QjhBQjNCN0Q5MkI4MDQ0RkYxNUI3QTBDOEUxREQ4QTk1MEQ5NDk1OENEMjA4MkU4MTAxQUJBNzQ0N0IwMzhDRjM5RDMwOTlBOTUyCis3RTc2QjNDRDFBNTczNkY3NkI0NEZCMTZERTc4NjA2M0NBNTNEN0Y3MkMxNzMyNkRBNUIyNTdENzNCNkRCODJFRDIyNEZCRjhDRDhBQTcKKzQyQjJFQTUxMjYwNzJBQjcwNkVENkYwMDhERDdCNTlBMjc0NDEyQkNGNkRBMjhGOUEzOTA5RkJGREFFQ0UzRjhCQzMwMkE5NEE2RTM3NgorQkRGRjk4RTJCOUU1QzQ3NkMwMUZDRTkwQTRFOTIxNzZFQzg4RkRFMkEwOTE4MEUwRTFBMjFGNTk3NDEyNDgwQkYxOUY0RDAyQ0ZDODdECis5NTM0M0JEQjE2RjFEQTE1QkFERkFFOTQxQTMzMUNEQURGNDJENTkxRjBDQjU5RjExN0RCMkExQkIyMkQ3QzI5OTkzNkNCNkRGMzdDNDcKK0IzN0Q0NTcwQzUxMjE0MjgwMUU4MTBCRjgyOTc4Q0NGQkEzNTc2MUM2NEZCMjM2RDdDQkEzNzU1QUJEQjJGRjVGOTRDRkQ3NEZGMkM1OAorRTNCOUVCMDJDQkRDOEVCM0QxQ0YyNUQxNDYwQzNEOEFDMUZBQjUyNDEwRkJCQkMzMjNEMkMxQTk5QjU0OTA2RTdBRENEMzM3NDlGMzQ3Cis1MUI5Q0FDQzk3MjY5QUQ3QTg3OUM2NDY0ODlBMTc5NDY1N0JBNDEyN0Y5NENGOEUyNjYyODk5NzlDREU3QTMyMjc3NDJGMUY0OTY3RjIKKzVBNDlFQkFCNUUwQjNGRjRENzhENTU4REM4NkI0NDY1NTNBRkZGNzVCNzU1OTAxNTdFRjRFNEI2NzBENEQ1NTA4RUQ3OTBFMzk4ODRCOAorOUEwODgxQ0FGMzI0RDg0NzcyQjUzQUU0MDgwQUM1MkRFRTI5Qzg1MDZGRTZGM0FGREM5QURDN0QxNzc1REM1OUM4M0QwOUQ5QUVERDlGCitCQzg0OTU0NUQ4MEIxMUZEMTVBNEZERjJBQ0JDNDk0RUUwMDI1OUFDMzdGRTQ5N0M2RjM1QTRFRjUxQjI1QzY3QzUyMTJBRTUwNDMwRUQKKzhENkJCNzNGQzg5RTM0RjJFNzYwMjk2MDQ3QUZBQjlCRkU4OUJEMkZBQjQ3RTc2MzlGMDRERUJCOTIyMDg1NzhFNkJBMDI1RjE4MDQxMQorMUFFNzk4NTk2NkE1RDJBQTcwODQ2NDBGRDdDN0Y5NjU3ODMyMUQ3NEU5QjUwODkwM0U2RDVEM0MxNkNEM0ZDOTc4OEZGNDg3QjMxNjMyCis1RkUwNDRBMjYyQ0IxNEQ0Qjk3MjUwQTkzNTEyNEY4MDI0RDEzNDBGNThFNkZENkQ3QjA0MTFFM0FEMTlFNjI1MjI5MDZCQkRDOTQyOEYKK0UzMUYwMEUxQTBDRDk2REJFOTNGMUVFNzMxMTlBRkU3QzcxRjA1OUE5MEQ5RERCQUZFMDBBNDE3M0UxRkNGNzRCQTk3RkFFMjhFQzhFMgorNDVCOTcyQUYxMDZEMUZDMEVEMzU3NEQxQzcxM0UwRTk1NUM0OTE3NzQ1REUxNjNFMTJCMzQ1QjAwQTgzMkY3RjdCNzBDRkNFQjc2RjFBCis4OEMwQ0YwNTBFQzVEMkM5MzMxQkEwRDg0QjlCQjlEMEFDRTg1RjAyMTU1M0REQjBFRjM0ODVCMDU2NDIxNTg3MjQxODQ0REQ2NDYyM0QKKzMwQzdFQTkxQjU2ODVFNjFENkQ3MTNEMDg2N0Q4RkY5MDRFMjU0RDg5QjNBNkY2RTQ0MjM5RThBRkIyMTBDMkE1RDc0MUUwOTc2QkFDNgorNUYwN0NGRjYxMTE1M0UyREQ4MzcwRDRFOTI0NDU5RjU3MUNDOUQ4QjlDNEJBNTZDMEJGNkJDMUY2RDIwQUEwNDJDREIwRURENjE3MTQ4CisyMkE3QTU3RjNCNzAzMEE5RDA1NUE4QjZENUNFQzhFODNGNDcxRDY5MjI3OEVBQTEzOEZDMzcxQUQ5OEQ3NzJEMjEwQjBGODc0Nzk5Q0MKKzlEN0YyOUMyMzQ5ODk3QjdDNzczNTNEODZDRTREMTdGOTcwNTMxQTU3RkRCN0U3NjQyNzAyRDg1M0FCOERBNUY1ODA2OTAyNjJBQzAxOQorQkMyNjcyQTUyMzhGRTQzQkQyRkVGRjJEMjMzOEQ3MTAyOEVBMURBMTBBOTg3RTYxMEYwQzUyN0Q2QzVFN0QwOTYwQUFGNUQ4QTc3RkU5Cis4OEIxQzMwQzZBRTQxQTA3M0RFN0RFMjA1M0I5OTAzMTIxNEEzQzY5RTY2MzAxQjJCMkMxMjc3MEMwNzBGODBEQzk4NkYyNTVEM0M3NjYKKzdDNEFDMEM4NUZGNjUzMTkzQ0U2MzY5QzhBQTgxNDNCOTlBRjhDMjFGNThFMDhBNzdDQjU3NTM2OUU0NTVFQjA5NEY0RDE4MEM2NDVDMgorMDM2ODQ3NzEyOUNBRTQ4QzM2RjQzOTZFODJFMTg5MDMzMTNBRDBGMzlFNjY2NDc5RTg4QzdDQTRGOTkwODkxMjAxMzVEQkNDRTA0N0YxCis5N0ZFQTkyQzExOEEwQzNGOTM2RTREMTJDRjQ2OUZGMkMxNTQ2QzY1NTlFQ0RFNkJDOUVEOTcxQ0UyQUNFRUU2QjQ1NDFCOTdEQjQ4QzEKKzQ5MTY4OUUwQ0Q4ODNGMjIxQjU4RjJFM0MxMzMzNjE3NkExRDJGRDMxNTI0RTRFNTZENURFMDE1MjdFQTNCRjU5NkE5RUM0MTYzREM5RQorRTMwMEQ2RDhGQjJBODA2QTI1NjhGQ0YxOTA5MDNENUZGMDg0NDJDMTkxOTgwQUJDRTMwMTc4QkJCN0EwRDUxREMyRjM5ODUwRDJDRTUxCis4RjVEQUMxMDU1Q0Q5M0VCMUU2N0FCMjYyNDYwNjQ2QTIzNUExNEI2QTJFMkRDMUZERjkwNzk4NzdEOTBGMTk5N0EwMUQ3RUNFMUUwQUMKKzNDNjk5NzlDN0E5MkQzMThGNkI5MzA1MUNCNTVGMTk5MkEwQTczN0EzNTIwQzU1M0FFQUJBREMxN0ZGNTYwM0YyMzcxMkUzMTk4NUU0MAorMTY3RUIzMzhGOUY5NjQ0NEI5MDg3MjNDNUQ5MDZCNjc1NTZCMERDMDg4RTgwOEEyMzk3NTczMDQ2NzNEQjg2MzRFNUIwNDlBMjVCQTg2CisyNDkxRUI2NUVCMkZEMUFDMTc5M0JDOTRFODA2QjIyRjA2MDMxOTAyQkIzN0Y3NUIxNkUxMkZDMjg1OTNFMTcxRjQ1RThCNUMwNzYzNzAKK0VCMjUyMjc5MTAzOEM4NjQzNTRDNDk1RkE2NzY0MEZBRTYyOTZDOTUzQTAwNEI2OEJBRkRBRDYxRjlDMDk1NzY4RTQ0OTZCMzEyMEVCNworNzE4RENGRUNEM0I2RDZENTA2RjMyNTYxRTQzNUZGMkFEODNGRENCQjZDREVBMDY2OUYwMzQ1RjY1MTcxMkZFMDAwRDgwOTUyMTUxQ0E4CitDQkU1NzRCNTgyOEZBN0QyNTk5QTgyQkQ2QjQ1OEI0RjQ2MkE2QzA5RjFEN0YzMzVBQzREODkxOURGQzhEMkJFNzMyODQ2OTFBNzhGODMKKzYwNUUwRTE4MTgwMzBEQzY2NkQ0NThFMTY4RjM4OUY5REM1MUE3MUYyMzJDNEJCM0YxQ0VEQUMxN0U5QTc1MUQyQTQ5NkE0OUJFOTRBOQorRDgwNjY1NkNGRDYyMDg0MkZCNzZCREVFMzk1NzYxMzZEN0QzQjJERDhCMUQyRkY5QTZBMjg4RURCNDEyOEM3MUZGMEE4QkUyRDE0MEU3CitCMkRFODkzQkQzRjE4Nzg2MzE0MDFEMTMxNTZENjk5MkZBOERGMjg3OTc4QThBRjUwNTJBMzNFN0ZDNjhFQjlEMjQ4N0Q0N0IwQUE0M0UKK0IyNTYyNTk1M0ZFRDZGNEFBNjQxNjA0MzY3RTMwRTk0QkI2NkNDNEVCM0VBMjQ5N0RGRTdDQzA4NzRDQjAzMUEwNjM1QUFCMkFDQjUwNAorRTcwRkQ5RDlDMUYxRDYzNEQwNDE0MjU2ODhEQzZENDY2OUU5QUNDNTE0QTA4QkVDOTlBN0Y1OTI4RTk4OTQzQ0VDOTk2OEEwOUJGNzU3CiszOEFCNDJGNTAzMDg0MDdCOTVERTRBRDY5RUM5RUM1MkQxRTlDNTg5RjhCNTJCNTIwOTFBRTM4NzI4MTJDRDU1RjYzM0RGNjcyMDlBMjUKKzlGRkFCMDU2OTZCMzQwOTZFRTc5QUVGNjRCNTlCNTg5RTJCQjQ5RTI5MDhGQkEzMDkxNjdEQjY2RjdGNUQ0N0MzODczRTdCRDIxM0IxQgorNDhFOTY2MTQ1RDQwREZDMDU0MUZFNEYzQzM4MkE4RTE1QUU4MzdERDRDN0I5MkM1M0U3Mjg1REIxRkUzMkY2MDVCODlBQjcxREFEMjI5CitENDkyMTUzNERBQjE1MUU0QUYzMjg0MEYzM0I5QzdGMzg2NkVDQ0I2QjUzRDIzMjkzNENGRDk0QzhDNTlCQTg3RDYyQkRBODU5NDcyRDIKK0IzQ0YyODNFOTQ3ODNCMUQzQkJEMUIzNUFBOUMxMDk3NDAxMUJBODU3QTg3NzI0NjJGMUIyQUU4MTMwRTEyNjNCRkNFNDE0ODlGNTUzMgorM0NGMjA3RkM2RjhCMjk5QUY1NUU2NzYyQ0E5MTgzNzRGRUNDQTZCNUI1NUYyNzMyRkQ5MDhEMjVBQUMzRTcwM0EwNUMwRDZBNzAyODlFCitFRDUzMjk2MjhFOTY4OTg5QUIzRkU2MzRGNDcxRURFQ0FDOEY3MDU2Njg1QjYxRENFQzQ0NzcyMDg5NDgyQUZBM0NGOTYyMDRFMDQ0MEEKKzA0RTU3MEMxMDVGMUE3OUY1OTJBQzQwRjU1NTlGQTBEMjkxNzhGNDI0QzBBMDUxQjkyRTQ2ODRCNkU5MERFNDYyMDgzRjMzQTdBMDhCNAorNjNFMTJCRkU5OEIyREM2MDIxRkE2MTE0MEVCMjU3RkJENjZGMDg1QUFBRDRDNkZCMEMwODlCMUZFRjkxRkE4MjBCN0EyRENEQTYxNDdGCitBQTg1QzYyNzk5OTI3NDFFQ0FBNjFFQjY5MTNGNDM3Q0QwRTlEOTRCNTQzMTlDMTJCQTZFQjcxRDg3OTFEMDRENDBERDM4NjU1OEZGOUUKK0RFMzg4M0MzMjQ1MjhFRjNGNDI4RDAxQTE3NUI3REVEM0E0OEQxODQ0MjBEQjI5RTM1MkQwMjVGRUY4MDRFMTYzOTZGMTg2RkI2ODc3NQorNUY2QzkyNzdBMDU1NUIxRDRGQUJBQjAyQTZENDBBRjg4QkI1QzlEODJDMzJFNTc3Q0FEMjA1NEZERjY0QURBQzc4MkZCRDMxNTkzQTZBCis2NURBMDJGQkQxQUJENzQyQzczQjc2MzRGRTkwRENDNjg5NDg5NzgwQTI5N0IyOUJCM0MxNzVCMzQ0OEQzMzFCNzNGMzA3NzUxQ0VGOTYKK0JCNkMwQzQ4NDAzQjFBMEM3OTc3QUQ3ODM5MTExNDg2RUZDNTBBRTJGQTI4NjY2QTBBRDY1N0Y2ODYwMTg0NjQwMDE4MTFERjU5NkY4QworRTRBREIyNkIyRjcxN0EyQzUyMEFBMDMzQTE4NDA0OEFCRDhDOURCNUQwRDUxOEIwMEFFRkVDMkU2RTA1MDdGQ0FDMkQ1RDA5QUQ5NDFDCis4QjA0RDYxMjMzQzQ5NzcwNjQwQkVGN0NFMEIxRTE0MjRGMTkxNjgwQTBGQzRFOTNCNUNFOTlBNDA2RTI2MkQzMjVFOTUyRDNGOTZFRTUKK0E2N0UyMkM2ODYxNzA3MjZBODZCNkM1QzcyRjhBODUxMUFBNkY5MkJENTdDOUE3NTI0Q0U0N0RCMTIwQUU1MDZFNTc3MTA2REFDRTgzQworNTI1OTUxMjcxMzNEMzEwMzk3NjQ2RTNFNzVBM0I5RDNCMkY0OUMyRTdEQjZCMEIwQkU3RjAzOTJCODk3QkRDQTI4NDYxQTI3MkVEMkFGCitFNTU0QTM3NUNEQjU4NjQ5QzA3RTZGQjlFRDdFRTU3MUZBNDFCOEIwQTdBNkVFMDI2Njc0NDlFRDhDMDc5QjY4ODQzOEJCMEZBRjIxNjkKKzQwQUE2NjhDNzc3MUQ4NEQ0RkFCRTY3QTg5MzA0OEMzRUVEOTAxODJDQzIzNkNFQjNBMkVGOTYwQTkyRUZDMjgyOTY0RUZENDAwRURENAorREU3Qjg2REY4RDE4RTgxMDBEQTk0MDlDRTMxRkU2QjczNjBEOTIzOERBRDc1OTBGQkRFMkU2Njg2Q0FBNjIwRTVCNTc4NTk2RTgxMEU2CitBRTEwQ0E3MzRBRUU2NUZBQ0VDMzgyNzBGNzJBNDg0QzYzODZGMzdCQzkxMjJEMDM2QjUzMTY4MkIxNkNDRTg0QzIwMzhBNTgzMjQ4MjYKK0Q1RkU5MTJFRjRBMTdCNTkwNzVDOEZDQjJDOTQ5OTAyQ0JDM0Q5NDhCMUY4RUYzRUEzMUY2Q0UwRTQzNTJGM0Q2NDNERjY1MTE2OTc5RgorRkI5QzZCQzQwM0NGMTIzQUZEMTMzNjQ5NDdEOUMxQjk1RUNBMjE4QjE3RjhDNTE1MTA4Qjk1MjdFNDM5MEJDRTNBOUFDMkMyMTAwNzA3Cis2RTk3QTQ1MzE3QjVCNTZGQjFDNTgyOTg1Qzg1M0E0QzBDODhGRTMxQkMzMkU0OTdERTczQzU3RkJFRkJFOTFFNTQ5QzNCQTE5NDg2QjEKKzYwQjVBNUMzRTA1MzAwRTU1M0U4MDM2QzREODMxRjRBNjVBRTlENDg5QkUwN0VFNEJGRENCMzU0MzAxNUMxNzNBNDE2QjE2OTYwOTNFMgorRENBRjk0MTBGNEEyREEwNTcxNjJCMDE5M0QzQzAzRjYwMDEwNkY3NjdFMjQ1MTkxQ0FGQkRCREEwNDhDRkU4M0M0NDFFM0REMjIzRUJBCiswODYzQkNBQjZBOUJCNjQzNjVDRUYxOUNEOEVCMUYzMjhCMTdFMkEzNTM2NDA3REIxODlDQjVENEM4RkZBQjlDQkFDMDc3RjQwNDFFQjkKK0E3M0FFQ0ZFMTY2ODkxNTcwQzA3NDdFOTRFNEVCRkY0OTE0RjFCOTg2MzY0ODE3MjMxNDcxQUVBNEQyMTM2RkUxNkE4M0JEN0NBRTkxQgorNzIxNDk5RjQwRjdEN0FBNjFGRjc4NjRGREM1MTRDRTkxRUM4NjA4QTEzNUQ4REFCNUIwRkM5NkY3MjM2Mjk5NEU1RTIwRTMyOEVCQThFCis1OEYwREI4ODM1RkNEMzRDMTc1N0I5OUE5ODIwMkFGNDZERTA4NzYxQzM2N0IyQzhGRkFEMzA2M0NFMkYxNDE5REY4RTAxQ0UyQUE4Q0MKK0M3MTQ4QkE3NEFGQzQ3OTc0NjQxOUNBRjIwRTRFMTk1QUI4QkE2OTUwQzI0REYwQkE3MzIxOTJGRDYxQjJDRkI4QTY1QkI5QjgzQTlGRQorOUNBQzY3RkYxMUI1N0FFQjhBQTFDRjI5RjA1RDNBOEQ1RUVDRDE1NkQ2NDIzQURDQkUzNEMyQkU5RTZFN0Q2QjVGNzU1MTc2M0M1REJGCitBRkJEMDIwMjEzMTBCNUUzNjk5NDM2Rjg2RjQ0OUExQjhBOUM5RTg5QzM5RjU0MUZFQUEzRUYwNDVFMkU1MDg4Mzg4NjE4REZDRjUyQTUKKzc5MjFGODhENkMyRDJEQzJDNTAyNzRCNDZFQTY5MDBEMjk1NzIwQ0NBM0IyM0RDNTVFMEIwM0MzMEE3NENCOUM4Rjc3RTk1QTNCRUFEOAorOENEODBCOTExOENGMEUyOTVDRjAyQUQwQ0JENDg0QUMzNUM4MDQ3MzVBNTQwRTE3M0Q0OTU1RDAzM0VCRjI4RUY2MjU0MDM1MDUxOTlCCitGMUI4MkYzNTY0OEI3MDM0NTU1MEJBQzA2RjAxNjk2QzRCODFDMjdCQUVGQTVFN0E2QTBBQ0JFRUYxRDZGODNCMDcwNzc4N0Q4RTk4RkEKK0RCRjY3Qjc1QUQyNjUzOEQ3RUVGQUFDNTdERUM1MDcxNThERTNFQTM5RDNDODhEM0FDOUU3M0FFOTg4QjE3OTBDMzQzRTQ5RUJGMDA3MAorQzMyNDVGQTRCRTE0ODBERDlFMDQxMDg3Rjg3QUQwNTIwNzkxRDlCQjIwQUE3OEZFRUVERjA3NzJFMTc0OUY1RkQ0RjBGRDQ2MjY1QjczCis4MTVDQ0RBMTkxNzMxRjdFOTczRUI2OThEM0ZGRUFCQjgzOTU2RUM1NUQ2QTc1MTc2NDM5MDYyMjRFQTVDODk2MkRCNjlFQjBFQkJEMzgKKzY2QkM4RjQ5NTFGOUM2Q0MwQzE1NkY1MTREQzZDQzkxRjRFMEFEOUFGREE0Q0UzRDRBNjdFMUQwOUQyOUQ5QjdBRTM4NkNFMjQyOEFBRQorNjI1NUFDNjE2Rjk2ODFEQUIwNkVDRTcyMjgyQjA4MDZEODI5NDdDMkE2ODBFOEEzQjU2QjA1MzhBMzlBQjRDNTVCOURCMzI5Njk3MjM0CitGRUQxRkY0Mjk4RERCQjc1OEY1Qjc5OTc5MTA5QThBMzdDRTQ5NTI1MTMxMUJGRkJFOUUwNjYwQjgwQzQxRjlBNjFDRjk5NEYzRURBMzYKK0RCRDY3QTFFNDRGQTlDNzc4QTM0RTVDOTc0RTgyMDg3OTU4QjIzODE3Q0Y1OTQ3MThGRkZGMzQyM0RCMUZFNUU3QUNENEM0OTIyNDAyRQorMjE3ODUzMUJEMDU3NDA2MTM0RThGNjVDQjA4OEMzQjlENDBEQ0VBNUJFOUFBRjVDQzhFMTgxODIyNjg1MjQ0MkE3RjlFNTkzNjg4RjE4CisxQ0E2NjUxRDEwNzNDNDAyRUZEQjQ4RjBBMTc3RTY1NEI5Q0RGMThCM0VCMDFCOEI3MEVCMzY4RkEyNTIwNkREQTRBQUQ0MTMxNTAzRUQKKzcyRjZFRjE2NDcxMDE4MDVBMDYyMTQwRjA4Qjc0Nzk0Q0VBNzI4MDg3RDUzMkE1Qzk2Qjg5NjYwRTY2NDAyNEQxRjBGQ0Y5NjQ0NzI2MQorMzI3MzM1ODBEOUVBQzkwNDY2QUNBQTQ3RjBCQTUxMTNCOUU0NjJDNjZGN0IxN0RENDZGNkVFNEUxQ0M0NDZFRjkyODdBOTQ3RkVBN0MzCiswRjQ3MDlBNzJDODhFN0M5QkVBQTU3RkFEMkE3RkQ1M0VFRENEOTI5RDcwMTM4MDNGNDgxRjk4MjczN0E2Q0MxODc5RTVEMzA4MEVGOEEKKzRCNjc1OUU3NUE1NjQ0M0Q0OUE4RjJDQTJDQzU1RDFGQjJEQUQ1NkQ1QjVBMEQ3QzNDN0QwQTMxQkZDN0JCMzc3RkI1MkRDRTJDOEU5OQorQ0QzOTM4REEzNzE3N0FERTdGMDY5RTkyQTZERjg3NjczNzdGMzAyMTM2NzdFRjFDMjBCMDBBNEY1RERGOEUxMjEyMUFBNDgxNzFGN0U4CitERUMwM0RCRUQxQzY1MDY3Nzg0QTc5RjAzODlDMTczOUU2MzNCQTlEMjhFRTJDQTc5MjMxNDQ3MDI1NUJFNzI0OEQ0MEUzNTg3QzBBMEIKK0I2REIyNzdBNDFCRTk1QUU2MzkwMjczRThBMEIwN0ZCMTNFNUI1MzBFMjcyMjdGNDhEMTI5OEI0MEFEREUyRTcwMzVGOTREMTBBMkE1MAorQUEzQTNDRUVENjdBRTAwQkVFQUIyRDE2MzM5NkYzREE4RjY4ODI4RkFCOUQ1RTk2MTVCRDBBMzAyQUZFOTc3NUU2ODRCQzk3MTIxRDgwCitBRDNCNDJDMThDMzdGQjFEQUQ1OTAzQjk3RTg5MjE2MEM3NDY0ODEzRDg5MTg1NkUwOEUxQUNEMjdBNDA3NjBCNzYyN0E0OUY1OEY3RUUKKzhCM0QzNjYwQzNEQjY3NkI2QjlCNzFERjI5Njg3NTBCOUYxQTgwREQ2MkVFM0JEMzJDM0I0N0RDQzZDMTQwRTVGMTFCMjdGNjBGNzkyNworRjE4NDBFOUM2RUFEQjJENkQ3N0ExQzRERUIwRkE4Rjg5MkI0NEVBOTFBQTQwOTRDOTA4MjUwQjZGNEY2QUYyQ0Q1NEFENTAyMzg0QzlDCitBQTExOUQ0RDA2REE1NTNCMDNGQjg1QUZCNDAwRjc4QUM5MkQ4Nzg4REFBNTVCMUMzMTk0NDU1NkQ1QUNGM0FFNkI0QzU4MDY2RTVDQzgKK0Q2MThBOEE0OUI5ODRGNzAzQzc5Nzc1NTE0NUVCQzg2NjJBRURGODMxMzUyMkRDNjhDNkYxNEMwNTM3MDhGQTREREJBNjg5QzQzQzc3RAorMDUwNTZEOEU1NUU0QUZGRTE4OTZFMEE2QzI2RkYwMTNFRDM0RTlGRjYyQUQ4QzczNzlGNjE4OENEMUVDOEFFMEVGOThGRUEwOTA4QUJECisyQkI3MjExOUVCNEQ0Qzc0NzE1MjA0N0UyNkFENEIxNERGNzVGMDlBQUE2MTU3QkZGMEZCOEFBMjIwRDk2RjIzNjcyODBGRjJCQjE3QzMKK0E5QTczODQyOEJGQzIzMTg3NTdBNzBFODBFNkZFODU3MDc4Nzk2OUM4QUVFQUM0MkE3NTY3N0ZEREU5OTU0NzY5ODZFOUVDMjZEMTdGNworRkI1RjNBQ0JENTM1RkREMTM4NTNEQjNCQUFEM0YyRTI0MzcwQTRFODgzN0IzRUI0ODNDMzk1OTQ1NzIyQjM1REZEN0UyRkRCNDZGMkVECis0NDkwOUM1REVEQTczMkMyMDM5RUQ2MDk4OTI2NDczOTY5MDMyMEUwMzRCMjNFQ0VGNTgyOEJCOTZGOEYyQkE0Mzk3QzdCNjhCN0Y3MkYKK0Y4Mjg1MTE4NEZCRDJDNEMzOTJGM0I1QzU5RTVCNEVERDgzMzUzQ0I0N0ZDRDQzMkFEN0FGQzNDN0UyNkI1NTkyOEYwMDY0OTkzREJGRAorOUZBN0U4OUQ2NjVDN0EwNDFDMThFMTMwNEQ1REU2MTgwMUEwRENGNDREN0UzMTc5NTRBQkE2Qzk0MzY1NjYxMzQ3MDMwQ0NGQ0RGRTY3CisxOUU2NzIyMTQ1RjJDRDhFMUQ5MkFFMUQ3OEM2MEUzMDFFRUJGOTRCNjMxMDMyRTA0NTIyMDZCMUY0NzhCMzM2M0I3QjY4M0VFQUY4MjEKKzNCODE1NkQ5NUVBODhDRDY1RTY4NDRBRkFFOUJGNTlGNjE2NDlBRkU1NDBBOUZERTY5MEZENUY1QzMyOEUzMDJDOUVCNDM0NTZBRkMxMAorN0UzMjk2QUVGODEzMDNGQ0I5Q0YxODZBNkM5NkZEQjc1MTNEMkY2Rjg0QkUzRUUxOTVGRTE4RkVBNkYyRURDMDRDNDRGMjY2RDgyMjBDCitDMjAxQTVDODRCOUE4MUMyNDM3QjhEMkU4NUVCNzk5MkY5RkVFOTU1RkIzMTZFQTZCRDQwRTcyOTJGNjczM0I5QzU2MUJGNDY3RkRGNTIKK0I3QzU0RDNCMDVENkQ0MDRGMzM0ODc0OEUzRDBGQTQyRTVCQTdCQzI4MTExMzlBNzE2MjE4MUI1QjEzRTk5MjE3MDFDNjBCMEZFM0YwOAorOUVGRDM5QkVGMTlFNEM4MjE2RUM1NTYyMjUzMzdDQjUwNzAxNjEyQzg2RUExRTBCODVCOTQ0N0QzMEE4NTBEOUFGMzVFMDM5QTExNzdGCitFNDQwMjNGMzQ1REVERUFEQTY5M0VGMEZEQzI2NDY4NDExQUJBQzVFREQ0M0Q5QjgxQjQyRjZFNERBQzM1RjRDNjhCMjUwOTYwMDQwMjUKKzg3RjRBRDQ1ODI5NDcyMEVBMDAzOEQ3NTA5MkQ0NDk5ODA1ODRGRTcxMzZFMjJGOUMxNzA0NzdDQ0I5N0U1NDNDQjk5N0Y4NDMzMUEwRQorNUFCNTA1MUI3MTQzRTg2RTgwRDEzRjE2M0ZFOUQwQjkwRUU5QzY2MDRCNzEzOTcyMTAzMDBBMUEwOThFNzBBMjdDNTkxOTQxQTIwNDYzCitDMjQyRjIwODczOTY5NTRCRjkxOTNFNjM0OTk4QUFENEVGNjJDNEVDQTZBNUE2QjRGQTc1NUU5NjgwRjQyN0Q4NkEwNkJGRTU4QUM1MTUKK0FCRjc1QUMwRDhGMjg0M0IzOTY5OTg1MDQwMkQ4NEVBNjIzMUQ2OUE5Rjc0RjdEQkIxMzExMzU4QUI2RUFGOUI5NjVGMjEzNTI1N0YyNgorQTMyODQ4MkU0NzkyMkYyMzM2NEZFQzY3REIxMjNCMDczMkJCQUFBQTRGODhCNjZEMDhENkFCMjNDQzlCMTIzQUU4QjY1MjM3ODc0MUM5Cis1REVBQUI4QzU1Mzg1Nzg4M0MzNzg5MEFDREEwN0RBNjk5NkIzQkIxMUU4QUFBNTZGN0MwQkY5ODk2Q0UyMDc5MjhCQTg0NzhGOTlFRDIKK0ZGNzI5OTY5NTA0REM1OTAxMjY1MTg0QzU2MDZFRTE3N0ZCNUFERUFDQzdCMDIzODhENEU5NjBGMEVDNjc0NzI2NDEwRDA5OUI0OTBGQworNkI4NTFDRjkwODVEOEJENzM2RjgyRTc2REY2REZGRkVGNzkyMjFEMDAzNzBDNkVFRDlDMjNFRkVENEZFM0FCODVEMEE1MkIzMkIwQzNCCiszRkQ1OTg3QTM5QjJCRjJDODlERjg2N0UwN0EzQzc2N0EyNUY1Mjc5MTM2RTFGMkUwQjg2MzZGOUVDQTYxRjAzNzg5RDJBREYzQzk3MzkKKzVGQkE5MTVEQTA2OEI5NkFGOEM4RjEyRjFENUU1MDlCODczNTc0QUNEMzRGMjU5M0VDMzA5Q0FEMTQ1MkJEQ0JDQzNDMzBGQUE3RDAyMworRjQ0Rjc0MkVENjdDREVEMTkxQjhDNkZEMjZGQzg1RTkyNjNEMTc0QjlERTk4MjIwMEU5NEE2RTRGNjNGQjBFRDQzOThENEEzOTA2RDcwCis3OTZBMjk2NDlGNzBENzdBOEQ2M0IxOTcwRDYwOUJDODRCOTNCMUU0NTgzRkI1RDE4NDlDNDZENkMwMEI5NjQzRUQ2MzU2MjZBMzcwODgKKzM2MTg0RUYwRkI2RDBERTVENTM3Q0QzOThGOUE5MzYxQkIzM0REQzE3NEUyRjlDNEM2RDhFMDU2NDhGMkRFOTZGQTcxM0Q4NTAyNjc4RAorRDY0RkI5QjU1OTdGNzg3NzhBMjJEMTc0N0VGNUI0MDkxMzM5MEVEOEQyNzA0QTgzMzYyQUVFRkQ5MEFCMzkzOTYyNzM4MjZCRUQyN0Q5Cis4RkY2QjRBRjk3MDBEM0FDNTY4OEJDNDMyN0M4RUI2OTczQjg1MjE4QzBEMDAwMjBCNTlCNTdERTE3MzVBMjgxNTM3MjY0NjYyNTA3NkYKKzUyNzhFODI3MTc5RDA4MzcyQjlCQTY3OUVEOTJGM0ZENTVDRkY4QjY5RUJERjdGODA5MzcwMzM4NEU0OEQ5NzRBQTY0QzVDRjg4QzFEQgorMTAzQ0FERTA1MkU4MDYwNUU3MEY2RUNCMzJDNDYzOUNBNDEzNzQ0Q0E5NUUyOUY3NkRFNDgwRjk4OENGMkI1MkMxREI3ODA1OTNDMzEwCis3QTRFOEM3OTE0REFGQzgyQjk4Rjg1Mzk4MUZCQjg5NkRGOTA5QkFCQzlDQzFBMUMwMDhDM0VDRkZEREQ2NTZENDgxRDdERkVEQzQyRkQKK0M3MTkwNUYxNUY2NjVGODAwQUFFQzY3QzAzNDAzQTE1M0Q0NkIzMDVBNDVBMUUwNUFGRTQwQkYzOTREM0M4QTA3MUNENUVFQkYzMDVGRgorNUEzNzFCRDFGMTE3NjcwREYxQTQ5QzJCNUQxQ0M4M0RCMjFGRDUzODlCREMyNjYwMTYyN0Q3MjlENkQyQkIxOEE4NDNGMzYxQ0NFQzc1CitEMTUxQThDQURDRjJFNDlBMzMzMTYxNjVENDRFREUyQ0FGQjMxNzlFMEUyQUI4QjVFMEEzREMwNTBEOTg2RDA3M0JDNzQxM0QwMzZBQTkKKzg5NjI4NjcwMjJFQzIzNENEREYxRUI2NzY5MDU0RDhBMkQxNjVBODczMTY0OTQ2QzYxNENCOUFFNDgxRTZCNTVCMjgwMUQ5RDYxMTRDNAorRjNDQzE2ODMzOTk5RTY2NjJGQTYzQjdGRkZGRkMyMUJEMjA5QjY5RkNFQTFDMjZCOTA1MzYyMTA1ODA3RjEyQzlFNjhGOUZBMDEyRTZECitDOERERjIxOTY5RDM4QTE5RUFEMTNDNUQ0OTQwN0RCNTM4MEFDNDA5MDIwNDQxNDkwNzBGOUQ3RDI1MTg5NUNDNUY4QTU5N0Y0NUNGMjMKKzc2OTJGQTdGRjMzMzU1QTMxRTI2RTdCQjk3Q0NGMEUwREQyQUEzNkFCMjEwMjY4ODM2RTgxOUU0NURFODUxOEM4RUU1NEUxNzE5QjQ4MworMUZGNUQ5MERFMDNDNEU0Qzg2NDA1NzE0NEVCNDY1NEI5MDhFQjA1Mjc3MjE2MEM4RUNGMUY4NjJDM0Y1MDQ1MDRGOUUxNTYyOEE0QTRECisxNkIwMUY1NDNDNjc3QURBMjhBMTMyRjhCRjVGNzU4Q0MwODZERUU3QzE0NkI4M0I0QzY0NzZDM0E1NTBDNjIxODY3NUY0QzMzRjFFQ0UKK0RDQUIwQzMxMTJCRENGREQ5NEEzMDMyQTczQzYxMjQ0NTEzOTdBMDhFQUYxMjkzN0U5ODA0MjVERjQxMUZBNzYyRTc4MTc3NTVFQjM2NworMUE5OTlBNzg1RDQxMDMwMTE0NUY3REY0MUNERDFFM0M2NDJFRDY0QjNFM0EzNTJEMUM2NUVEMUU2MkIyQzlGNDBDOTM5OENCMzBGNzdGCis3RUE4OENERUQ1QTVENTExMDZEODFEQTAzNDc1QjNGMjUyNURBMUFENEFENTUzNzk2ODI4NjhFNEIzNzg5N0QwNEE4QkFFOEI0NzRBOEMKKzYwQTUxNjk1MDc2RTkxRkFGMkZEM0U2RkRBRTdBNjMzRUM1QTgzMjQyRTIyNEUxNTQ2RUJEMEE2QkU2QTFDMjE2MTlBNTIyNkJBNDZERQorQzRBOTNFMjEyRkVBMDUzMUM3NDExNUJEMzlDNTI2NjVFNTEwMDFEOUQwQzAxQUI2N0ZGN0UzQTI1RDRENjQ0QkFCQzE3RUEwMzAwRUQ2Cis3MEI1QkY2NURGQjVGM0RFRTQ1MTg5RjE4NUI0OTQ0OThBNkMxRUQzMzZDNjA5MDFBOEUzNkFCOTVGNTZDQjUzNDEwOTI4REU2ODE2RTMKK0NBOEZDQzQ4QzFDMzBCODZDQzZFMkIzRTI2NUVCRDRDNUM4ODg1NzRBOTk4N0EwMzcwNTNCOThCRDg2QUQ0MjlDRDc1MkM5MkUzODk4MgorNEU5QzFFNDQxODI4QzUzQ0M0OTVCRURBQjBGQ0M2NTYxMkY0QkFDREY3NTY2REMyRDk3OTQyNzVEM0M2NEU4OEU0QTcwODg2RkE2QzA2CitGNkU2Q0RBMjRGNEM1MjU4RDU2RTNFMEY2NDczMjVDMTc2RDI4Mjg3MzI3QjY0ODY4MTgzMzRCNEJFRkM5MjI2RkQ4MjgxODRFMTNBN0IKKzQ0Q0RFMTY2RTEwRDQ0RUM3NEVCMUZDMzM2NDcwNzE3QkU5Q0M1N0I2REJBRUJBMTE3NzMwMTI0REVENDEyNzBBQTdBMjBEMkNDNUU4MgorNkY4RTNBNTZCMjQ2RTlFRjYyQ0FDQzdFNERGQkFFNEZDMTE3RDZDRTZCRDc0N0ZBRjdFNjVGRkFCMzMzQkFGQzI3NkE4NjE1RTM2QjJGCis5RDJDMjQ1NzI5Q0Y0RjM3QTg1QjY3Q0I3MUMzMzk5ODUwM0M2MTkzMjFBM0YxRTk2NUZBNjBDRUIwNDA5NzgwQkMyQzg1RTE0MUMwNDQKKzFBNTJEQzEyRDAxNTgzOTMyRTg3OEJDMzg5ODc1NkM4QjcwNjE1MzEwQUI3MkUwMDMyRDU4NDUyRjA4NDQ1NTNEODZCQzQ3MTBCQTc1NworRTBGOEIzNDZGMDhDRUY1RTExQUVBQ0EwOEVENzkyMzExNjU5MURGRjc5QTIwMDRBRTlFMzY0NzZDRDUyMzA4NUU1MkJGNUY1ODRFOTlBCitBOEY5ODQxNkYxMUU3QkU1Q0YwRUQxOUI5RUQ1M0E4RjVGQUNCQ0ZFNjg0QzY3QUE2MTVDNTg5NjlGQzk3NzhDMTcwRDVBQTRCNDk1QzIKKzdGQ0U5MkQ0QkJCNEE2RERDQzAzRDU3RkVDQzYyNUJBRTFGOEVGMUJCNDUwQTYxNzgyOEFCOTQ1Nzc1QTlBNDUzQ0U3OTFEMTE4RDdFMworODJEQzE3NzdCRTY1RTZFOEI3QzVENkQ1M0JFQTMxQTQ4NDkzMTRFNkFENTc2NDM3QUQ3QkY3MjRDRUNCMEM1RjgyRUQwQ0NDQ0U2QTJDCiswNzA2NEQ0ODU3MDAxQjNCQzkwREZEM0NCNTYzNzUwQzFGODVFMUJFRjFENTA0MzUxRTAyRjEzNkE2ODQ2RjNFMzc2NkNFODNBODIwQjkKK0IwMEU0MDMwRTBEMEFFNDZEMTI1OUVDQzBGMjIyRkMyNjFBNTlENDU4RkM2OTBBNEYzQUE5Q0YxMzBDNzUwODk3MDZCQjQ0RDBFMTFBRgorODBBRUUwRDMwQUIyOUFBRTBDNEYxNURDM0VBQ0ZEQjE3RjJDMzk4QjMyRjFCRUYzNzYwMDNBQkM1QzIwQTA5MzIwM0Q0NEQzQzFEM0M5Cis2NzMwQTBFMkRGRkRFQkEzMzIyNjZDRTA2RjMxQTM2ODIyMzA1OTNCMTQ0MUQ1MjkzRjI1MTUwOUIwNkYyQTYyMzk5N0E2RjJFOUU0QjgKK0Y5OEVGMEZDRUI2OTNBRUJBOTJGRTAxNzY4RUI2NDE3NjEwMjI4RDVGMTY0Nzc1RkMxNzU3OUQyMzFBQzNGMzdBNzgxQjk2MEIyRDI4RAorRjdBQ0E2REJFOTQ4NzMxNzk4QTQyOUE4QjEzQTlFNTBCNTVBMzlDRkQyNTM4MjE0Qzc5QzZBNkFFQTMxQjRBNkUwMENDMzFBNTlBNzcyCisyQjg1MENDMEU1NkY2MjRGQ0M5NTM4RUE1NTM2QTExMjlEM0FBNUEyOTgyRDRBMDlCRTQxMkUxMDI2MzIyNUZEQThFQTFGOEU0MkM1N0YKKzBEQUI0MDI1NTFBMzUwNERDQzQ1MDUxNkZDOEJFMzBCNDgzNTg0OUE5NjlBMzA5ODZGQTFENzBBMzUxNTlEQzM4MzhFRDY5OTcyMUYxMAorMjc1ODUzMEZCNERDN0QwOUY5NDkxRDY2NTE3NTVFQjBBMjI5N0I0QUNCRDdEMzlBNUZEQkIxOEMwOTg2MEVCQjhCNzU4QUVBMzQ5MzRBCitFMzk4NDAyREIxRTY3ODM2OEFDNDRGM0VEQTFEMEQwRDlENEY2MjIwOThBNzk1NERFOUFGNDBBNEJCMjEyMDM2RERBOEE1NDc4ODNGMDkKK0VCNDkyOEFCQjJGRTE2QjIwQUQzQzREQTFFNDMzREExQTZBNzlEQUFBRjAxNUFDNTc5ODhFNzU0MjhEMEZBMEYyNDM5QkFFMkQ2MzJDMgorNDZDOTUxOEQwMkQ4QUZDRjJCQ0Q0OEI2RUQ0RUQ3MEE2RTg0RTNCNDFDMEM0QzBBMzUwNEJCQjdDOEIxRUJGODgxMjExQkVCMkQ2RjVCCis4MjFBNzczMjExQTQyNzVBODhBQ0I2ODAyODk5RUVFRTRFNzQ5MzgzRjRDOEIwNUMzNjRBMEZENTFDMEJENzlBMjlBNDRENzk2MTRDQTUKKzg4MTQyQzk1NTM5NEUyRTY5NDdFQjI4NTY4RTg0RUZGQkMxRTUzMTI2QjBBQTY0OUM1REFCOUZEMzgxMkE4MkYzNjkzOERCNDIzQzc0NAorNzg3REFGMUUzNjE1QjE0MzQ2RkMyODVBRkJFRkY1NTYxOUNBOUM0MkZGRUY3MjQ5RTk2M0E0OTQwQkE1NTIzQjYzNDQwMDE0NDcwNzIzCitEOTg2ODBFOTQ0QzYxRDUyQzI0QzkzRDhEMzEwQ0NDQTU4M0FDNTIyMjU3RjlGRDE4NzIzOUM1Q0Q4RjZDOEYzRUQ5MTQ3RUY5NzVBREEKKzY5Qzg4QTZFOTgzN0ZDNjBFQkQyM0JGNjM1M0IxOTFCOUE2MEQzNUU3ODNEOUM0MDRGOTI4NjBGQ0FDQ0VDMTNBNTIwRDg3NDQxM0RGQworOUU0OUI5NjY1QzZCNEU1NzFEQTVGNzk4NjYxNDI4QTU5QjNFODVEQTVDMUNGNjkyNzk0QTE5QUUzMzkyMTM0MUQyMUJCOEQ0NzgxRDA0Cis3MDREMzFEMzY5OENENjE5RTE4RjY3MUU3NjczMDdBQUIwNTA5NUE0N0JBREQ4QTlGMzExOUEzQkNFRkNGQjk2QjY3RjE5QzI4NUNENDUKKzA0NDc5QjI1MUQ0QzE4NDg2MzZGN0FGN0U0RTJGMzQ1MDUyM0M2NkMwNkFCQkY5RUJFNTcxQkY2MDc5QzUzRUQ1OTk2ODRENzAxN0Y1OAorMzNDQTYwMzU3Mjc0QzVENzdCQTg0NDYxMzk1NURDNDFGMTI1N0I4OTM0RDg5NjI0QzY2Mjk3QUFBNjBGQTNEOEZFNTFCODA3MUE1NUMwCisyQjk3NEJGNzE0QTQ3ODcxNTRFMkJFMzlFRUE4M0M5Q0NDNzhFMTc5QkVFNDA0OTFBN0IxQTY5RTk3NjkwNjUxNzNDODg4REEzMkJBRTcKKzFDNDhBNzVCMUVDQTM0NDYwQzVFN0ZBRTVBNkEwODk3QzcxNkE5MzhFNTAzRDc1NjlFRUUyMjY3MzE0OTM0MTQ0REVENDhBNzM3NkRDOQorOTVGMUMzQjg5Q0U3OTk0NkEzOUZGNDI4RjE2Q0JGNjVFODAwNkM5QTFDQkRGMkQ3NTUzRDRCNzFGODg0NDA4NDE1OTY0QUU2MDgzOTBCCitDQTM5MDE3MDRFMzlBNjg5MjhEODEwQzg4MTVDRjdBODZGQTNERTMyNkNBN0Q1MDZGRUU0MUNBRTQ3NzMxQjI4MzQwNDhEMjVGQTVGOTMKKzc4RjQyRjMzNkY4OTA2MkY0MkZCQzRFQ0U3QTJEMDA1QTcyMjA0RjI4RjBGMERFRUZEODNBN0UyMTIzRkQ4Mzc0RTlCMjQxMDlFMDBCRQorNzE3Mzk1RUJDRjA2OTI5MjQyMTZFM0JGMjgxQUZEMjU0RTJBNjhGQ0UxMzQ0MTk2MDMxNDU1Qzg2RTM4MDBDRjQyREIxMkY4NEQwM0JCCitGOURDQzcwNDQ2Qjk0QUUyRjY3Q0M0ODQ3Mzc4RjMzRkQ3NDhDNzZCRDdENzBBRTREMDNBRTZDMDIzMEJDQTgwRTQzNkMyMTI2OTQwQjUKK0NDOUFGOTJCQUQzQjdENTJCQjMwQTI0ODYyMDg5NjQ0QUIwRTg4MTU4NTZCNEFBRTZBOTMwMjQwRjhCNkUzNTdBMDQwOTA3QTNEM0YyRAorOERBMkJEQTYyNUY1RDRBMkMyRDdEQ0JBNjYzRUU1OEVGMjg1RkUxNDBCRkE3NUQyOEZDRkY5MTFFNEYxOTgxOTk3MDI2ODQ5NEM4Mjg1CitFQkI5RTg1QTY2MjMwMkQ5MUQ1QjU3MjVENTA4RjU1QzFFRkQzMDkwMzA1QTkwNEJGQzNEOUE3Q0E5RDgwREZGMUVBNDM1QTg0NjQzN0YKKzg2REJDQTQxQkUyRjVCNEM2MzU4OEUzRkFBM0FBMzRFRTE4QUI3NzY4MEY1NTFFMEU4MUY5NDgyMkVEMzYwNkEzNjQwOUZGNjAxQjdCMQorMkQ1ODkzQzIwNkI5ODVGMjM0RUIyMkQ4MTQ0REYxNDhFNzMwODFBNEVBNTczMDhENUNFNjgwNjFCMjEzODYyQ0Y4MEM4Nzk4RUQ0MzZCCis5OENFRjU5MTU2Q0VEMjNCMDcxOEQyNDBCOTk2NDA3NEJCQ0E1RUIwQkQyQTRGMTY2NTE3NTUwNzhDMjg4NTFEOTU3NURCQjEzN0MyRjQKKzNCNEFGQkM1QUI1MUY5MjFCRDZENTBDQTFBMTJCMkYwMUMwRDY1MDEzMjRDOTI5RDJEOENCNTZBODNDODJGQzUwNDFBNDI3N0EwN0VDMgorMDg2MTJCMDlCRjNEOTYzRDNBMTlDQTgyODIyREFBOTk2OTlDQzA2ODI4NDg3ODgyOUEyN0JFOTc4QzAzMUVGNENCMjFFMEY4ODg2RkVCCis3MEJBMEVDNEE2QTkwNkVGQjAyQjlGMDNEMDA1OEVENzUxOEY3MzQzRDFBNkVERkY2RDM5MTJBODI5MzlCM0NCMDZCQzM0Rjk3ODU1NUUKKzc0OUFBOEZBMjRBN0Y5RkMyRDU5NDA4M0QxMzlGRUU4NEVDNjUyM0Q4NzgxNzJEOEU2NUJCRjVGQUQ0OTAwOTAwOTRBNDk0NTZGNENFQQorRUZFNTQxM0Y5M0U1MEVEMkFDM0NCMkZBNTNFNDk4NjcxRjI3NEVERTU3QjQ1MUM1NDFCMDQ0MjgyRTRBRjlBMzc2MDc2MkVBRUIwODM1Cis3NDQ3NzA5QzMzMTFFMDU5NzhFNEVFOENGRTA4MDJGNTJFRDE4QzA1MTY5MEYxQkRCRkIwQUI4RkQ5MDE3RkZBNzI4QkVEQkRCMjQzMEEKKzE0Nzg0N0VDMzcxMTIzMjI5N0IwQTQ2M0E3MDVDNTNBMzZEN0M2RkMwODk0OUJERTM0RDQ5NEY1NTAyNTZFQjFFMDgzQkJFN0Y1QzcwMworNTE0QjE2QUZGNUQxOTMwQjNEQUNBOUZDRDAzQ0QwNjQwOUU1MUZFQTkwRTk1MEM2RDkzQThBMUUwREM3QjJDQTIyOEY1NkVDMjA2ODYwCitDODY5NzUxNjMyN0M5RDMxRDIzRDU5RjgwRkUyRTgxNzI2REY3MUI0M0Q2N0U5NEQwMEU4NDFCNUJDMTQ0NDVEQTJFMTk0NzAwRTVBNjAKKzk4RUZEOTk4MzUwN0U4QUE0Q0ZDRUVDQzhCQjQzRTQxNjcxQjBBRTg4RDhCMEY1Mzk3RjIxNjhBMkE3RjVDOUI5RjJBNDMzOEFDN0Y4OAorNzAxREU0ODlBRTU5MzJBRjBBRTlFNDgxN0M0QzcyQUJFQTc0MDQ4OUUzNDRCRENCRDgzMkEzQThCNkE5QUQ1QkNGQTZBOTM1OTVEMkY4CitFMkE3ODREMzEzRTA1OEM2MEY2MjUzNTAxMzUzMEM3N0I4NTU5Q0U5QTkxRjJGMTU2OUVDRUI3NjYyQzM0Q0I4NkMwQjE1NzlDODNBNkYKKzcxQjNEODBDMkZGRUQzQUFCMkQ3NkU3MUVGQUYzMjg3QUM3NzEwQjk4NzlENjUyOThEMjhDRkU2RUUxRTM3MTRBOTYyNTlENzJFQ0I0NAorODM4QUU5NjIzQ0E5RDRGNTdDQUFGQ0NDN0VCRTI5MkMxRDI5NjBBNTFERTFCNEFEOTYwNjUwREYxNzkxMTVCQkMzQjc4QkY1RDkwMDg2CitBNTAzODE4QUU4NzVGMDI1QkM1MDI2MDYxNDUzNTAzRDNBQTU3OUNCMEU5QzgwOUUzMUU3NTEyNDgwQkNFNEUwQ0MxQzY5RUFFM0YyMDIKK0IyRDlERUMzRkMwQTIzRDExQjkwNkNENzNFNUI3MzU0MjIzNzE0MTMzNTBGQkZBRkEwNTE1ODRFMTQ2M0E5NDgxNkRCNkJCNDhBREUxNQorNUQ5QTFGMzY2RDMyNDZFMDY0NUJGRjQ5NTlDNjM4NTM0NEE5QTlGRkQ5MzVBNDEzQTI3QkJFNjhDRUYzOUM2NkRGMTRGNTZFMzZGQzlDCis5MERFMjBFODJFMUU1QUFFQkI0NDFFRTY4Q0ZENzY2RjQxMEMxNjIyRjJDMUQ3MkNDNDI4RjEyRTk5RTAyRDJDNzMzRjIzOEI5OTAyRjkKK0NFMUQ1MDJEODUzNjRBMkM0MDk2QzRGRUIxNjM5Q0M5RDY5RjkyRDEyQzdBRUU3OEQwNzRCODgwOENEMEJBQzgwODZDNDAxQjBGNENENQorMEU0OTMwNEVDQTg2MEE0OUJGRjg4NzRGMjMxODU2MTY4OUFCNUY3QjJFNUYxQzUyNzJGQjc1RDVFRDE5RTQxMzZBOTFBM0FGOTA1ODU2CiszRDRCODM4NjVDRjE1MDc4Q0IwQzJCOTY3RTNBQTU0OURCNTkxQTNFQTBDMTUyMUREN0IyRTIyMkMxNzFCRjhFQkU3NjVBMzJBNEE1NzgKKzRDNjExQkEyQzYxQjI0MUYyQUZBNDBFNDk3MTJDOTE5NDAxOTY4RDg0MTk3QTczMUI3OTlENTM5N0JEMkI5MzczMjlEMjk5QzhGMDA0NworREE0NTE5OTJFNjA2QkZFMzBBOEUxODE0OTA3QTg3RkU4NDExOUFGQjkzNzAzRDk3ODdENEMxQzQxM0Y1QTc2MjM2Qjc4QUVDRDdDQkI1Cis5MDQwOEEzMTJGNjBCQzFCQjYzNDIzRTEwMzEyQzgwQTEyMUExNTQ3MjI5OTQxMzhCRkIxNkIwMzkzQTA3QUZFQzcxNkVBNjk3NzA3MUEKKzIyQUIzRUQ2MDBBMDk0RTVDNkRENzNGNkQ3RjBBRDEzMjM1NUU3QUVDNEUzMDFFODIxRTExRkFBQTY2RDcwQThFM0FDNTI1M0FFRTU1MgorMTg2QjZGNjM3OEI2MkMxNEVDNDFBQzk0NTE1MTNBNEIyN0FFQkQ2Njk1OUM0MUQ3NzhGM0VFOEM2NTk3QTBFMkE0OEE0RUU5RDE0RjJECitBMzgwMjgzMEQ3OTFBM0QwNDVFOTQwNzEwNzFFOEJFQTgyMzM4MDVCQkYzNTkwNkNFNzZERDY4RjBCNzM4QTA0MjcwOEQ3OTZFQjRFREUKK0MxN0NBODYwRDg1NzgxNTdEODVGNTUwRjMxRDNCRkE4RDI4Qjc2M0U5QzYzNEY2MUY0MkZEOTc4RUMxMjVFOTBDNzFFMkY1MzdFRkFGNQorMjgzRDRGOTdFNTcyRjE2NjQ5MTJGNjFGNjlBMUJDNTMxNDA3NkZBNTIxMUM0MDBERUEzQzQxMzJBQjlDQjgxOTIwODBENzhCN0VDMzlECisxNEZBQUExNTI5OEFCNkM4MEE4MDA5NTdCMkJEQTFCMjcwNUZFNkVGQkEwQ0U1ODU1RjdFNzQ2Nzk3Rjk2NDc5OUVFQzg2Njc1Q0MwRUIKKzMwQjQ0NzgzOUM5OTcxM0QwRDRENjY1RDBGMUJBQzY4REFGMjY2MjY3QTU3QUYyQ0EwNjZGREU5NjAwRTQ2MjM2MTNCNDU2NEM1OEE2QgorNzM0M0FCOURCNDQ2REM3RkQ0NTc5NUZCQUM5RTdBNzAzMUFFQTc4RUI4NTA3QkFDQURCRkQ5MzkwRUI5MEZDMTk4MzkxQ0E3RTE1Q0MyCis5QjdDN0RDNjk2NEUyMTBGQUQ3ODA4RTkyMzk3Qjg2RTI1NTAwMzU0RkU4Rjc0OUVENEM5QTk4QTQ4QjZFNUJFRkYyQjJENkQxQUU5RUUKKzE5RjgyRTFBMTQ0MTkyQ0U4N0UyODczMUFGOERGODJDREQxOTUzRDczQjYzRDU0NDE2QTg3RjRGQjkyN0Y2Qzk5RUE4RUI1MjkxQjEwRAorQzUxOUU1RTYwRjhDNURCMDcxRjQ2RjFBMzA4QjhGN0RGQTM1M0M2Q0VGMjU3ODAzNEIzMUMzQjc1Mzc1NjhCNEMyMzY1Nzc3NTUwM0NCCisyRjlFODI5RDhCNUNGODkyRUM0RDQwNUYyMTVBQjQ4MDU2QzFBREM5RTJENzE5NTQ2M0REQkNBMTY5Rjg0MDYwQzZCQTlEODlEM0NDMDEKKzBBNThEODQ1RjY4N0IxNDhGMzVDMTdDQUU3RDYyN0U2MzYxNkMzRUQ4RTNGN0ZDQTFBMkE4OTRFMEExMTkxOEYyNUM5N0M2MDhCMDJDOAorOTRBRUNERDM5ODE1NzdFMEY1NTAxNDVFMThGRDk5RUUyRUNERUU5NDBDNzE2NkJFRkY2MDc3MUMwNEM4MDkzQTBFNzRCRDMwNTUxNzkzCisxNTM1OEMyMjAzQUREODg1MzEzQjlDNEFGRTAzMUExNTExNkI0REI1NjQxODcxRjYwNzhCQUYxMzA0NTdENTA1NDdBMEZDNDg3MkE5RUMKK0M0QzhCQUI5OEFFRTNFQURCNzI4NTIzRjVBMTEzN0REMDQ2Q0Q0MzhFM0Q2QzFERUZERjUzQzY2N0E3NjU3MEVDNUYyQkVDMERCRDY2OAorNUUxOEIyMDQ2ODVBM0MyOTgyNkU3OUNFOTg1NTUyOTVDRDFCMTdCMjlCNDZENTJBRTI2NEM1RDcxM0RGOTFFMzgxNjE3MTdCRjFCQzUyCitGQ0VENEVGMEY5RThFNzM4NDM1MTUzMEU0RTFGQTQyRUUxOTQwM0U2NEQyQjhDMzM1RTQ1ODVBMzJGRUNDN0QzODYwODE5RUNDNDA0ODQKK0VBRjczRjNDRDg5QTU2QzdEMkVGNDM5QzhDNEU3NzNDMTM2ODk4QUQ3NDkyNDQ0RkRBOEZEQjhDMzUyMjM5NjlDQkU4OEJCNTk5OEMyQgorQjMwRjQ2MDgxQTcwNkVDQTQ2MzVCMTZCMEVERTg5OTAxQjNBN0ZBMzBBODdBQzU5RjBFMzI0MjMxNDIyOTI2NzUzN0Y5RjRCQkZCNUI2CisyOUM5NjY1QUUwOUIwQTNCQkNERkZFQTM1NDIyRTdBQ0Q2Nzc2Nzg2QkMxNjU4MTFBNDU3QUY4RkQ3QkNENDYyNEZDRUVDQzgzQjI0MTYKK0IyMjVBNjA0N0U2MTAzQkI3MzdBNjY4RTZFREJDODgyNTMwMkUwMTNCNzM1NDNBNjExNDEzMkNGRkZFRUNEMUY5QTlFMkZBNDQ5QkNGOQorODVCQ0RCRkREQjBBRjQ5RTJFNDJBQzI1MTFENDc2N0M5QzYzMTk4RjAzRUYzNzMzRjM5NjVBMkMwNTc1Mjg2NDQxNzk3OTM5MTBEQkE0CitFNzg3NDlGQzJEMkRFRkJBMTk3NEUzQTE2QzA2Qjk3QzMyQjBEQzBCQ0FDNEI3NjU2NEY3QTFFNjk1OUIyNkNBMzVDODA2QzExQjAyQTkKKzhEMzI2MjlGM0NDN0M5MDc4NkRCM0UxQTcwQzdGM0M0MzkwNjg2MDYzMEJFQkYxNENBQkY4QjZENjk0QjI3MTM4RDYzM0EzMzhCQTFBNgorMEVGMTcwRDhFRjQ5OUUzRkI5RDU4QzNDNzIzQTQyOTNENDI0OEFDNjU3NDE4ODRENTkyOUI3N0VGQ0IzNTY4NTAwQTk5MUMwMEI1OEFECisyQkQ2QzREN0REMDE3QjA1RDAyRkY2RTIxRTFDMEZFMjQ4MjRFREYwODk0NUM3QzZEQjBFQUY5NzIwMEQzRjBGRjNERUI2NDA1QTVFOUMKK0RCNDYxMDgzNzc2OUYxREU1NDNBMTM3Q0IyNTA4MDUxRTk1QzMyMjMyOEU1NTBCRUM4RTcyRUY4Q0VFRjZGOEVDODUwMzI2Q0U5MTlFQworMkQ2NkQ5NjFBM0E4NzJGMDg2MzQwQjAwRUQ0M0U2M0Q3MTRGMkIyNkJGNDhEMUE5MzQ0MTFEOTA5QjRDMUJGM0I1NTEyNjM4MDM2MzI2Cis1RTJDNDk4NDM0MDNFQkM3M0IzRDVCQjkyNEQyODVFOUY0QjJEQTNFRDVEMjVERjg0MEY5NUEwODlFRDY2NEM0N0I0RUQyMDY3RTcxMDcKK0Q1QTgzQzVDMjVFOTgxREVDRUY1QzQyRkM3RTdFMjEwQTE0MTVGQTQ3N0E1QkE4REY2MDJFMDRCMDI2MzAzNzU3Q0NDRkY2QzJFQUY1MworQTk1RjYyMTQ2OUJCNTY3ODQyRjcwQzJEMjYxMThBNkIwMTdBQTJEOERFQjQ5REZCQTc1RThDREExQTY5ODA0MDgwNzFBOEIzMTUyQjYyCis4QjVEQjc0NzkwMzEzQ0NEMEVDRUJBMEJEODYzMkM3MTkyODUzQTQxQkQ0NDc1OTAwOUQwMzRGMjVFQjFBRDI3QTEyNjMwMTI4QUI0QUUKK0E3RkMzQjM5QjZCQTk3QURFNDBERDJCNzZBQjEwQ0FEQzUxOTc4RDVGM0YzNjZBRkNGQUJGQTAzMUFBRkFCQzFCODMwOTU3MURDRTdFRQorMjA3MTBGNzI4MkM3N0RBRDE2QzE5MTc4NjQxMDlFNDBEMUI3ODkzNTZFNDVGODE4MDEyNkZDNjI4ODUwQTk1RkFGRDM0NkI5QjM4NkUyCitDNUZEQUFEQjgwODQ0MzYxQzVENjVEQUZBOUUzMDUxMzY2MjRFN0FGNzQ0RThBNjgzMTYzOUMwNkM3NEUxREZFRTQ5RTUyQzNGQzc3RkEKKzYwMUYxOTREOTdGQkY2RDhFRjBGOTQ4RjgxOTc4NTRDQjVDNzUwOTM3NTY2MEVCMUFGRjJDMzg1OTY2MjI1Q0QxRjc1NjY4OTUwMzNGMworQzRERTRDRjAwODFFRTQ3MEY0QUFENTNGMzE2NTkzOUNFMzIxMzI1MDk2NzFGQzE2N0U4MTY4QzhERUY2QjU5NUY3RTMyQ0U2RUREODMzCis5NzZGMjc1NTY1NDVDODAwQjQwMEYzMTE3MzU3MEE1NEU4MjRDQTg0MDkzMzQ2QUQ0Mzc2MTIwNEMyNjQ3RjhBMTA1QTU2NDZFN0E1QTQKKzA2OTdCRUZCNUI1RTUwMzU1QTg0QjlGMEFBRTM0RUREQzM3N0YzQUIzQTZEOTIyRTJCQ0U5Q0Q1NDIwMjE5RDBENURGOEIxRDI2QTcxOQorMkUyMEQ3QTFDRUFBNDMzRjA1OEUzNDg3OTc0OENGNENCQzFFNkE2NzI1MTAyRDMzNzVFRjNENjc4NUE3NTNGNzNFOTJGNzg1OTAwMTVDCisyQjNFQjQ2RjE3M0E0Q0FENkUzOTdEQjBDMzBCRTBFRTU3REJGMjc2MjJBMjFFNkM0NjVDNUVFQzRCMDcxMTJGQzJEMzI1OTIxNEUwMzQKKzIyOUUyQ0FCMTA3NkNGQTJDRkJEMDkwMkNDREM1NDkyQTNCNEMzMjMzQ0Q0RkU2Nzg2MDc3ODk4RTQ3NDExMjU2RkVEMTk3NjZCNUMxMgorMkVEQUYwMjA2QUYwNkNGODE1OEEzOEJBNTU0QzFGMTAyNEQ3ODFCQUNBQkNEQTczOUM4N0VDQUZBMTMyMzAxMTYwODIyRjNDNThDM0E0CitCNzYwNDY0QTg5RDk5MEFFOUNDRUE2N0QzQTU0MDYzNTVFNTMzOUY2OTlBQzZBNzc1RjE1MTcyOTE0RTU1RTJDOEY4QkIyRUFGMkZEQTcKK0U3RDc4NDExREFGRTYxQTE1Qjk4NThFOTgwMTgzQzEzRjA4MkM2OUQ0RTk5NkRDNTlENUJDNTNBRTY2QzUwQjI3MTM1MTBBNTM0NkZDRQorREMzQTUzRkY3MzhCM0FCOEY2RTdGMTJEQ0UwMzQzOTRDRTQwNDkwRDk1RkQ5RjVGNDg0QjRFOTY1QjFBMzk5OTZFM0YwREQ2RTVGQTZCCis1QzIzOEU4NThCOTJFQjRFOUY0RkEzMzEwRjVFNTEzNUU3NUE3ODA2NjEzNDE0QzZFQjUxOTE2NDVGRERERTdEQTkwOTM2RTFENEFENEIKK0IwOTZFNDdBNTU3NTA5NEFBQ0VERjdBOEFFNDZDMTU3MkJGNkMyNzNDREM3RENEMkU5ODQ1QUZCOUU1NTMxRTkxQzIxQkEwRkQzQUZGNQorMDIxNTU2NTQ3MTNFRDgwN0FGN0Q1NUVGNTM0Q0FFNzQ1NkZBNjA4QTNDMjcwMDE4QTg1RDgwNTIyRUVFRDk4NkJBQjcxQ0EyRkY1NkY3CitBNUIxREQ5MjA1NDg5QkQwRTE5QzE0QzU4NUY1NjYyMkVGQTlEREFDREYzRDFDOTU2QjJCRkE3NDY5RUI1MTM5OThERDcxQjBDODc0NUYKK0Y4NjY1RjI5MjY4MjVGRTEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislJUVuZFByb2NTZXQKKyUlQmVnaW5Qcm9jU2V0OiBwcGNvZGJvbC5wZmEKKworCisKKyUgR2VuZXJhdGVkIGJ5IEZvbnRvZ3JhcGhlciAzLjUKKworJSBDb3B5cmlnaHQgKGMpIDE5ODcgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisKKyUgQURMOiA3MTIgMjg4IDAKKworCislRm9udERpcmVjdG9yeS9QUENvZGVCb2xkIGtub3duey9QUENvZGVCb2xkIGZpbmRmb250IGR1cC9VbmlxdWVJRCBrbm93bntkdXAKKworJS9VbmlxdWVJRCBnZXQgNDMwMzczNyBlcSBleGNoL0ZvbnRUeXBlIGdldCAxIGVxIGFuZH17cG9wIGZhbHNlfWlmZWxzZQorCisle3NhdmUgdHJ1ZX17ZmFsc2V9aWZlbHNlfXtmYWxzZX1pZmVsc2UKKworMTcgZGljdCBiZWdpbgorCisvRm9udEluZm8gMTMgZGljdCBkdXAgYmVnaW4KKworIC92ZXJzaW9uKDAwMS4wMDApcmVhZG9ubHkgZGVmCisKKyAvTm90aWNlKENvcHlyaWdodCAoYykgMTk4NyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4pcmVhZG9ubHkgZGVmCisKKyAvRnVsbE5hbWUoUFBDb2RlQm9sZClyZWFkb25seSBkZWYKKworIC9GYW1pbHlOYW1lKFApcmVhZG9ubHkgZGVmCisKKyAvV2VpZ2h0KEJvbGQpcmVhZG9ubHkgZGVmCisKKyAvaXNGaXhlZFBpdGNoIGZhbHNlIGRlZgorCisgL0l0YWxpY0FuZ2xlIDAgZGVmCisKKyAvVW5kZXJsaW5lUG9zaXRpb24gLTkwIGRlZgorCisgL1VuZGVybGluZVRoaWNrbmVzcyAzNiBkZWYKKworZW5kIHJlYWRvbmx5IGRlZgorCisvRm9udE5hbWUgL1BQQ29kZUJvbGQgZGVmCisKKy9FbmNvZGluZyBTdGFuZGFyZEVuY29kaW5nIGRlZgorCisvUGFpbnRUeXBlIDAgZGVmCisKKy9Gb250VHlwZSAxIGRlZgorCisvU3Ryb2tlV2lkdGggMCBkZWYKKworL0ZvbnRNYXRyaXhbMC4wMDEgMCAwIDAuMDAxIDAgMF1yZWFkb25seSBkZWYKKworL1VuaXF1ZUlEIDQzMDM3MzcgZGVmCisKKy9Gb250QkJveHstMjggLTI4OCA2MzEgMTA0Nn1yZWFkb25seSBkZWYKKworY3VycmVudGRpY3QgZW5kCisKK2N1cnJlbnRmaWxlIGVleGVjCisKK0Q5RDY2RjYzM0I4NDZBOTdCNjg2QTk3RTQ1QTNEMEFBMDUyNTM5MkVFQ0FDMTYzRTU4NEE5MTA0RDk5QUQwQkMxQjFGM0Y3MTIxRDFEMAorCitGMkM2MEREMjA2QjBEM0M4QzQ1MDYyMEI0NzMyMENBMEFFQjg5Mzc1MTFFNDU2QUFERThFNjZCMzAxQjFFM0U5REZFMTdFMkY3OUVDRkUKKworQTcwOUZGM0RBRTE5QjRDMTY5REY2NzczRURBNDE0RDAyOTE1QTZGMEZBRjhCMjRGQkIwNzc3QzY5N0JFOEEzN0Q2M0EzOTBBRDlEQUU0CisKKzk1QkI3RTYyNjcyMUZGMkZEM0ZCMTQ3QzgwRDIyQkVBQzM3QzI2MjREODE4RDU4QzhERjAyMDlGNUNFNzZBQ0RERTU3QTMwM0Q5MDQyQgorCitGMEE2NzREMDk1Njk3RjkyNUY1MzJEMTgxNEJFQThGOEE1QjUyMjNBMzJCQzRBOTU0MDJGMkM4NDMxODE3NzZFQTZERDhGRjlFRTVGMzQKKworODkwNTFGRTM0QUU4OThBQ0YzMjAxNDMzQ0NDRThCOTNENTYyN0I3NjExNEY5OTlDODFBMEM1NTQ1OTlGMTE1Qzg5QUZBOTIyMUY5NjNCCisKKzZBMkRBODkzNDI2MjEyNDRBQkVCMEU3OTRDODg1RjMzNUU0RUY4MTg4QzRCMTVCMUU2NjMwQTQwNURBNTA1NzhEREIzN0M5NkIzQzhBNQorCis2QTdGNzBCNTVCQzIzNjA2RUMwM0MyMzFCMjM4MEE4M0UwRjA0NjdBNEM2Rjg1OEEwNTQ4QUM1QUFDMkYxMTE3RTdBNEVBN0E4QzUyRDIKKworMDFCMzM2MjZDMkJFQkNDQTZERDkyMTFENkM4OEY2MDlCRjJDNkIxMzNFNTVGQ0U2RDg4NjAwOTBBRkIzQzA2NTgzNUQ3QjRGMzRBRkY5CisKK0Q4RTBGNEUwODQxRTQzNjdGRjg2MDQwOTI3MDRFMUUzNjI2RkU4Q0I0QTQ4RUIxM0U0NUNCRkVFQ0JERkNCRkNCRTY0MzIzNTY2QzQzNworCis2QUY4NThBQ0Q5QUNEQzQyQTFDOTI4NUYyNTNDMzExMzEyMkJDOUFDNDYwRTI0NzM1ODFGOUMxRjIxMEI2RkU3QjlENDg2RTZDOTZCQ0QKKworMENGOUM1MkE4OUQyRkEyRDMwRDE0RDBGQ0M5QTI0NzBBM0I5MUEwQ0FBOTYyMENCMzc2QzQxNzU3Mzg2MDA3MTMzMkJGMDEyMzA1NDg4CisKKzIyODlDRjJBNTI5MzRGQjdGMzJCQ0Q5NDMzN0FEMUVGRTU3QkVCNDNFNEE2NjFGRjhFRjVEQkEzOEZBM0M5MjRFODUxN0FFQzExNDEwMworCisxMUU3OUQ2REY4NjExNTlBQzc0Qzk2MjA4ODhFREEzQUY0Q0EwOEExNTYyM0I1RjNEMUFFREE4OEIxQkNDRThGMDU3MTczQzAzMzdDNjcKKworQ0EyQTU5OUYxRjRCQTAzOUJCQjI2MTc5RjU0QTU3QTg3OTdBOUM0RUZBQzIyOEZFREYxRTJDNTBBOTUxRUIxOTc3MDUyNUFGMkM2ODUwCisKKzU2NjBBNkM1RjRFN0M3QUIzOUQ1NzU1RERERUIxQkM0RDA0RUIxMENDMDlGOTA3RTZCRkJCNjg4MDdBODc0MzkyRTQ0M0M5ODY3MDQ2RgorCis0QjAyMEU1RDc5QkE0NTBCNjNCREMwRkIzOEFFQ0RFQTkxMjUxNjczQzUzMjdFRUI3NDgyMTUwNTk5M0E0OTAxMzNCNzNGN0E0RDkwRjkKKworOUQ0QjM3NzhFNTAyNzQ3NjJGRDE4RTg3RjdDQTFEMDA5REJGNEVBOENERkRBQzE0OTRCN0U3OEMxN0I0M0E5REJDQUVFMENENUZGQkQwCisKK0UwNDQzREI1Q0I3MEU3MUQ3Qzk1QUEzNUI0MkNGOTA4MzA5NjlBOEM4NDgwMkU0OUVEQTk1MjhCN0QwRkREOTE3NUE2RDQxRjdFMzQ5NgorCis3QjJFOTM4MTU5NTVBOUIxNEIzNEQyQTM3RTZFODhGODBDN0MxMUREMzlBQ0RGQjFGMTBBMTIzN0EwRkNCMUJCMzcyMjFGNzE2MEFDQTEKKworOTAzN0FGNzk0QTMxODM1NTRDMDdDMDNDRjlEQjNGQUNFMzNBMkZCNTg0QTMwQTgxNTc4RTk5QjZBNjI1ODYxRDJEMjk1N0Q1RUI4Nzg5CisKK0NEMDkzNEE0MUZDQTIzQzkzNUJEQjcwOTQ4NDhCMEZCQkM1OTIwNjdBMzRGQjNBRDU2NEJFNzFEMjAwNzRDMkE0QjYyNDk0NUFDRkM3MQorCisxMzE2OTRDNDA1NkU0NjRENDNFMzI0OUJBMUZCMTA2REE2RTY3QkJDNkRDRjU0MjgwMUM3MzQ0NkE5MjFBREFCQTRCNEJDRkU2MzY4RTQKKworNTQzNzM5QTFBQjM1MkE1NEY3MzRFQ0QzQ0REQkM4OUYwMTRGNTk2ODJFM0M1MjFCMzNDQTBGOUZCQzIzNzU4RENCMzQ0NjcyNERDNEYyCisKKzQ1QjZEMTIzRTkwNDQ1MUQyMDMwQjBCQTJGQ0JCM0U1ODcxMTc3OTk0OTc0MEFFRDFGMkUyQjM2Qzc4RUJCQ0NGQkNCQjZGQTI1RUZERAorCiswQTlDQTAwMEM2N0Q2QkU3QjBCMzYxOEUxMEVDRjFGQTUyNzlBN0QxNjQ2MkY1MzgyQUYxMDRCNTA0Mzc3NzE5NEYwMTM4Q0YwOUREMkUKKworRjUzRDhGNDczNUJCQTlCMTQ5M0ZCMkRFQzREMzNCMzVDRjE4ODEzRkY2QkY5RTlFRTc4RTJBRjkzNTY2RjBGQ0JGNEQ2QkZBN0NBMzA3CisKK0U3QjI5QkFGMUI0RjQ3NDNCMTQwNzRCRjkxMDU1RTNGRjg0QzNBRjgzQzY2NDIyNzFCQUQxNDMwQzdBRkI5NzY4MzJFODg0NzFGQ0QxMworCitBQ0ZEMEU4NjdGNUJGQ0UzQ0VFREJFNjNFQTMzQTQ0MEIxQTI4MTExRTM5RUJFRDVEMDhCQzM5NTdDOTVDMzNDMkYzQkEwMjcwMDVDRDYKKworRkRFNjBDQzQ0NzE2NTdGRjZGQUREODk0NTBBQUI1REM5NjY4MTk1RkI5RDhGNzUxMEYxM0NDOEVFREFBNkQwOTE1ODk4Q0M2MTlEQ0RFCisKKzhCQUZEMjU3RDZCNzRGMUVDQzYyNTk5RkYzNDU3MDJBRUM0RUU3QkEyNDJDNzNDRjhBMzYxQzcyNTk1RjY4MjQyNDBEQjEwRjUwQThBMQorCisyRTYwNTYzNkZERDRERUM4QzdGNzI0N0UxOTI0REQxM0ZFMDk1MzY3N0U4NkNGQ0I4QTEwRjE1RTYwQzc5REEwMTlGRkUwRjc0ODQ5N0YKKworOEQ3RDkyQjA3RkQyOTQ2QkY5MDhBRjJCNkNBNDAyODVDOTY2RDc3NjdBMTRGRjg1RTdGNDNCNDlFMEY4RUUxREE2QjRFNjY2MzQ3MDI2CisKKzQ3NDNFMEFDODcxMzc5Q0Y4QTA3OUVEQzY1QzFEODQ4OTYzMjk5OTBCNjBEOUEzM0M3MjRFMDE3NTZEREJEOEI5OTA2QUQxOEQxRTExQQorCiswOTUwODU2NzVBRjk3MjNDMERFNDZGNzhFMDQ3OTA5MTZDQTg5QjRERDVFQTU3NjE5QjU5RTcxQkE1MzBCNjk0NTk4NjQ4RDMzMkZDNzgKKworRURCMzQzNTg4MDVCNjRERjYwQzVENDdBQjgyRjNBQzg3QjUzODVDMzkxMTZCMDMwMTdDM0U0QkI0NTU2Qjk2REU1RjI2NkIzNzlFQzY5CisKKzlGNEZDOEE5Rjg1NEM0MUU4QkIwM0M5QkQ3QzAwMzg4M0E5MDIyNjk5MkM2N0IyRDAyREJBOTIyNDJCOTREMjE1NjZDODNGQUMxQjRDMQorCisyQURFNkZGQUEwNDlCRjY4MDVBRTc2QTZBNkVENDgxNDREQUNBQkRDOEQyRjM1Q0I1QzA4MTU4QTczQTBBMTAwNjY2NzczOENDNDcxRTgKKworMjlEOTQ4N0UyMkRGRUMzMERCNkREMjgxOTMxRTlCRTlDODQ4NTlENkZBOTMyQTc2RjlEODVBMUU5OUFGQjVGNTkwNUJGRUQ2RkZENzYyCisKKzU2NTQ2NDk3NTdFQjY0MEI1QjNDMEQxODAxOUJFQ0Q2MjkxNjIwOTFCNjkxNTREQzBCREExRDA4RjA3MjdBQzg1MUJCNDM1MDNFRTM5NgorCitEMzY4MjU0MUE3MzBFRTQ1MEMzMEY2NjMxODdDM0I1MDA0RDI0MTczRjk2MkNGRUE4RTA0RjVERDY2NEQ1RjZERDUxNTIyNEY3RTI1NkEKKworNEVBMDdCNUNBODIzNDU2RDc1NzA4OTk4MDk3MjY3QkU1RDc3RDIwRTcxQkJBMEJFQTNGMzI3ODY1QTdBMEM1NzQ2Mjg5QUE2NTNFRTJECisKKzIxNTdDMkFGMzMzMEE0NTU1N0Y1RjgyNUE4RDc1Mjg0RkM2OUJDMTVFMUY3M0FDMEY1QTExQjI2RDQ3MjEwRDE5NUY1NTdCMjY1RTlFMworCiswRjZBQzc3QzVEM0FCMDg0NzQzRTZCNzU4MzY1NzU3QjgxRDQzMDU0OUVGNTEzRTc5QUVCQkE1MzlBNzQ1RjI0RDQ4QUU4RTcyOEYwMjgKKworNERGMjg5ODRGNURCMTIwM0YwQkQ2NjYyODc1NjU2NTM5M0YxNjI5MTkxQzUwMzQ3QzBBNDgyMDVERDgwN0IwRTZDRkQzNTNFMjJCQTQzCisKKzFDQzZBQ0Q4QzZCNEU5N0Q2OTFGNzQzREFDNjlDRDA4ODFBQTgxQ0IzQTQ4QTA4Q0FGOUMzMkU0NDAwQTc3Rjk0QTUyRjlBQjE4QjRFQworCitBRENBNEYwNzNEQTVCM0JGNDA3OUUwMTI1QjMwNjQ2ODVGQjc4M0UxNTY1RDRBNzc3OTI5MEJBQTczNDA1MkFFNzk4RjVDRDc1QzkxMjcKKworQjMzOEE0OUUyQ0RGRkQ5RjBBNDI5RjY2MkQxNzBBQTg4NTEyNTA3MTNFM0QxOTkyOEQ5NzRCOUE3Q0U2OTg3RENDQjA3QTUzQUNDMzJGCisKK0QyMTc5OTFDODBDNTgzNEJCQUE3OTZBN0Y5QjIwNjM2ODU0MjIxODcwMUQ5MzI3OUUxRTE5N0Q2OENCMEZEMDMxM0Q3NjcyQTEzMjdGNworCiswNjI1MEZFQTRERDRDNjIzQ0Q1NjhGMUY2QkEwNDY4RDVDOThCNEU5Qzk2M0U5RTlCMjFCRTU4OTIyNzUwQTUwNzY0NDlDOEI5REFFQTIKKworMUM0NkUyMzg0RUY4NzFDOTQ1NkVDQzczOUMxQjNDQ0I1QTg1Q0RCNjZFOTAxMDhDODYwQjE4MEVDN0Q0REQ3NjkyMTRGQTk2M0YyNkFDCisKKzY2RTI4RUYyREExQ0RFMjFCM0VGOTM3MTRFNDJFN0FBRDUzMzQ2RjIzRUUzOTg1QjFBM0Y4NzFENDlDRDU2QTBGMDQxRkQxOUE0Njg4QgorCis1QzE4QjE0QzkzQUMyRDMwRTU1QjkwMkFDQzM1REU3OUM2QjNEM0JDOERGNkVDMzU1NzBBRjM0RDM0NzJDMjRFRUNCNEMwN0FEN0RFRUMKKworNjQyOUY5Njk0MkJGQUNBNEI3Q0ZEQkJDRUU2RkNCOEQ1QjU0MkUyODk1OTlGOUZFMUMyRkUyQjFFMEUxOEYxMzU3MjJDQjIxMTg5MzNECisKKzc3NDM2NzNERDhBREEwQUVBRkMyMEMzNkUwMTU3QjcyNDc3MUIwMERDMkZDRDgyMUMyNkVBREY0MjlFQ0YwQTI0Q0U4MDhFRDA2Q0I4MAorCitFRERGRkREODMwMEFDNUZFQjdDMUI3Q0I1OTA1NEQxQTRGMDQyNjdFRkYwMzBFMTcxNTMzQUNFQTg2OUU4RTkzNzkyRDMzOUZBOTZDNkQKKworNjQ4QTlENENDODhDN0QwQzFCMDM2REE3RDQ1MjAwN0E1MEVDNUYwQ0Y4RjRDNjIyQzcwNzhDRkEzQ0Y0QkE0MjRBNjM5MDZCRDUxMEUwCisKK0E1ODBDMjJBQTFGMDI3OUY5QkUwM0I3RTFCNkM3MTRBQkZBMkZERjRFQzhFMTQ3MTQ5NzBGQUYxQkNBNDlDNzFDOTFDNDZCMkYzMUE4QgorCitDMzM4MTgwQUZGRTk3RTBBNEZBNkJDOUZFNDc1MEE4NDYyMEUyQ0YyM0FBQkM2Q0RDNDA5NzE0MDQ4MEQyQTA5QzIzMUJEMzI3MzhENTcKKworMjZCRjEyNDM1NjQwQzM5NzhDRDRDODU1NDg0RDZDQ0E0NDgyODM0RkQ3NjFFQTQxNTNCMTk4NEQwNTc4Qjc3NkNEQjIxRDQ4OTE4MDEyCisKKzg2QjY0NjY0OTI2MDhERTc5N0E3Qjk1MUE5NzlBMkRDQkVGRkQ2OTI5N0M0NkYyQjM3MkY4RUQyQ0NBRTkzNzJCRDRBRjY0NTVEQTcxQworCis2NUZGQUVBNkU4NDUyM0VEMDk4REM0OUQ1NjBDNUQ2QjYwQkQ1QzE5RjBFNjFCRTVGNzg1OTY2NTI5NTE1MEUxNTJGQzNFODg1ODAwRDgKKworQzgzMjc1N0VENzdGN0M1M0IzMEZEN0VGQjdDMjI1OERGNkVGM0FGRTIzMTA5RDdBMzQyRjlCMzQ4RkQ2RjM2RUY2M0M5NTcxQTk2RjZGCisKKzhEREExNzgzN0U3MkE2RkUwNTk4RkZCOEUwRDVDMjIwREEzRDM5Mzg1MTA5MjNDOTNEQjcyQjI1NzI2QTU3ODg1RDQxOEU4RDZDMDQ5QQorCitGNkVERTNBMURGQ0E5QjEwQjI4RUY2RjFEMDc3RDRCMzc1RDlDQjMzQ0NBQkRCRTg0OUZDQzE1OEU2MDNFQ0JFN0E5MDYyMjU5OEM5OUUKKworODhCMzJDMkRENERFNjE0Q0NGQkNGRDlDMjcyNkRDM0IyNjU0NEEzOTg5RjFFNDczOThGQTQ2RUQ5Mzc4RkIwNDhBREUyQTVFNEQzNjIwCisKKzcwOEFFNEIyMTBGQjREOTdEM0Q2RkE5RkE0NDAzNTE1NTg0RDg2RjdDM0NCRjJGNzQzQ0YyQTYzMjAxQUNENjdFNTg5QjZGNTRCQjA1QQorCis0RUI4NUI5MTMyOEI5RjIzNzVFNTcxNjIyNzQyNjgxREI0Rjk0NDdBMkUwRkJDNEI0Q0I1MUZEN0Y4QkRFNEFEMkQ1Mjc4QTQ3MkQyQkQKKworQjVEODhCNzc5ODJCMDE3ODZDMDM1QjU3Rjg1RTg5REU0MEU2MzY4NzI4QjcyODNGNTQyRjNBOTNEM0Y1QTdCMUY2Qzk4MkJCNDNBNUIyCisKK0ZERUVGNUJEOEM2MTgzMTg2NTM0OUJENkQ0MUVCM0QyQjBGOTRDRDEwRTZENzVDMzcwNjY3ODMxMTE5MzExQjk4ODhEMEJFOUU4NEJFMAorCitGMTgwOTYwQUZERkM2NUFGQURDQTNBOUMxNDU2OTVDREY4QzhBRjkxNTBCN0JFMDlFNUMwRUU2NEZBNTExQjJDOEM2RjVDMUIyMDYyOTcKKworRTNDN0M5NzMzODc1REQzOTc2QTZEN0EyQ0ZGQTVDQUU4MTBDMDJGQ0JGMjM0OUQzNDYzNzBCNUM5NUYwMEZDOTlBN0ZCQzkxMDgzQTZFCisKKzQ5MDFFMjFGOTkxNTlCQ0Q0NjQxOTY2NTFEMzlFNjIwOTU1N0I1MkY2MDRGQTYxNDQ0MzdEQUNDNURDQjkyRkU4RjgxOTEzQjJFRTNGNgorCitCNDIwNkUwREE2QTAxRjM4MUQzNDI0MjkwMjY3OEJDNjhGNEQ4QjFBRTdGQTExQTc5OUQwNkM3MkEzNzYxOTdEQjI1MjdGNDVFMkExRDgKKworNTBENDdEODM1Q0VDOEY5NjNBNkZGMEE4MDc3OEU0NjkxN0U2RENERDg0MURERTkwNEUzRkE5NjFFREZCOEU2QTVCN0I0NzI3NTU4MUQ0CisKKzFFRUMwNDUyREIwMzIxODlCMEY0MDIwN0IxMTYwN0QxNDI3RDUwMjExRDc2OTY2MTIyODMyQzk4MEY5Qjk3MTVERjJBMjVEQjhCNzk0MAorCis5NzgzNTY1QTNBMzI1QzVDQTY4QTI0OEU3MTQ4OTQ0ODQ0RUU4QTJDREIyQUNGN0Q4QTQ2Mjc3NTU1NUUzNDg5MTRERjMyMzhGMEVFQTAKKworNjU3NjIzRUU2NUMyOUI3QUQwN0M4QjY0MTNGNzhBMEE0RTlGQzUzMDdFNDI3MzA1Qzk1RkVGMDk4RTUzRTMwODcwM0Q3NTdGMzdGMTkzCisKKzc0ODlBRDExMzE1ODIwODdEMjRCRkY1MEE5MTZBMEY4RTZFNzFDMzM1RTUwQjMxNjUwQ0IyRkU0MjM4ODQ3M0M1NTIxMzM0NjczN0NGMAorCitBNUQ4ODBEMEE1NkUzRTE5Qjc1MzQxMUU5MjA0NUEwRTVDMDA3M0YzNzhFOTAwMkREQkUwQjEwRUUxNzdGMzJGRDk4NzFCOThFMDIzRTQKKworM0FBMzY2NkY0NTk0NTkxRjZBQUQ4QzNGRkQzNzgwNEE0NTFGMjFDODZFNzk0RTY1N0ZGNTBGNTQ5QjlGMzJFNEIwMjgxQzM2QURFQTkxCisKKzg1NDk0NDYwNjE3NkE2QjNCN0M1NURCQ0I1NjBEODJENTdEMEFDMTM0MUYwMzI0MEFDNTZBMTVEODc4RURDMTEzQTYxMjc3QzRERkU3MQorCitEQjg1QzZEODI2NTgxMDUwNTJFRjBFQzNBRjg3M0Y1RjBEMTg4MUI5N0NBRjBDRTUyMTY3QzgxOUZFMDFFMDBERTdCNDQ4ODg3QTMwREUKKworNDUzQTM4QkZFMzdDRkNDQTRGNDFFN0VFQTVBNDE1RjMzMDUyRkVFNjRGN0QyMTA4QzA5Rjc5RTk3REJBNjk5OEEzRTNENURDMzdBMzUyCisKKzkzMzNDRkIyNTRGQkNCNjJGOTBBMEE4MEJEQjM2MDZGRDk0QTVENjlBMzJBNUVBMDA0RTk0RTQ1OTc2QTUxNEJCQ0FDMDQxRENDRDU5MworCitDQTY3M0JDM0VFMUI4RTRGOTA0QzNCQkEyRTE5RTFCNTU1MThDN0Q2OUI2NjJDMTE1ODU5RDUxMTM3RkJGMkQzREMwMTlBOENENkU2QTAKKworQzE0RTQzMTFCMTVGQTY3MDA5MUI5Q0Y4QUJCMUMxOTZCNEUwRkM4MjRCQzJFQkE3NkM2MkEyM0ZFOEM4QTM4RDMxM0Y5OTJGRkFBQjMwCisKKzU5NDc5OEVFOUM1QzIxNkQ2RTk1NDExQTgyNUZBNEYyOUFFMDVFMEQ4ODNDMDdEMjRDNEY1MTA4ODM5RjEzMTM5NTczMURGMzk0ODZDRgorCis0RDhENjY4Qjg1RjdBNTVERjgzRjVFRDM1RjlCNDk0QjA5ODk4NzhDMzNBMDgxN0I4Qzc1MzczODhDNUM2QTY1ODAxNDg2NkVDMDdENTQKKworQzg5QTgwQUY4M0E3QzREQTIxREU0NDcyMDZERDRDMkYyMUEzOUM4Q0REQ0YzQjU4QTMzMjgwNTcxNEY4MkIxRTk2NjE4MEY1RUNBOTU4CisKKzI3QUNEQzQwQTRBNkVDOEZEOUJCMDI0RDMwNjhDOTRGRUYyNUU0RDYzMzdFNDBEMkEwMDI0OTRFRURDNzkwNUU2QkFFMzg0MjZCMzQ0RgorCis1QjM2RURFOEZGRTg5NDY1MjQyMkIxMUEzMjAyODU5MTZGNEVFNUQ2MUU1RUM5ODY5RDQ5NzI5QTBDQUIxMzg3M0JCM0UwRjIwRkE1MTgKKworQjgxMkU1RDI0QTY0MTc5NkUzOEExNzY2RDgwNUE4OUQ5RDlGQjY0MjE0M0MzNzdCMzY1RUM0NUJBNkMxOTNCMzEyNEMwNjlDNTI1NTE3CisKKzZGMzVFQzg1NTQ2QzE5MzNGMjVCMDkzREQ1NkM3OEFEODZFNTAyQTIzNUQyNzczQUJFM0I3QkQ0OUUzREM3OEE2QUVDRjIwQ0U5REE0QworCis4N0FEN0M3RTc1QkI0QUFCNzg3OTdFQjkzODE5QTVDOERFNjg2MzhFRkYyODFCMTQxNjYyQTQ2MzEzNUREQTBEMkQyMzZERjBFRUI3MDkKKworQUFEOUE1NDlDQUJCQ0FDNEU1NzdCMTk1NUJERDhCRUI0MjY1MDc4MENFMkIxRUFBNDdDMzU5OTNFMUUxRjA1MDUxMTQ1QTk0Qzg5RDJGCisKKzQxNjJCRkUyM0EyQzkxQjc4NDQ4ODVBRDM0NkJCODhFOUM5RjhGQUVERDIwQjZENkU1NEE5RkNGRTNDMTg1NDAxRUZFNThGMjlDRDRBRgorCis4RDlERUE2RUJGRjQyN0U5QUUxOERERDNEMUJGRkUyQTE3QTcxMzdCNTk2RTIzOUI3NDI2Q0UzOEI1QzQ4QzgxRDE3RkY4NTQ2MkI2NDgKKworNzBBM0E3QzlGMkYzQUVFOTg4NEQwM0NERjM4N0Y5MEM1Q0RCODA3RTIyMkE3NDRBNjE3MzE3MDM4NzA3QkYzMTMwRUNBRTI2NzkyNkQxCisKKzUyMTU0RkI0MjNFMkZDRkM0MzhBQjY2MDczODE0ODg4MkJDNjg2REI1NkM1MEQwOTJENjA0MjhEOUIwMzcxNzA0RDNGQjhGQkU3NUQ1NgorCis5RTIyQjBFOUQ3NjdBNUE4RUI3NzAyQzM0RjczMjBDMzBGRjE0MkRDRUI5RDkxNTc2Nzg2NDVDNTEzOTE2NDdGOUY3MzI5QjM5QzI0MzIKKworMDBBOEQwNTI3OTQwRjhEQTM3QTMwMEMwMTgyQ0Y3NkYzMjIwQjFFNjJFQUMxOEU4RkUwQThDOTNBMEE1QTM3MzM4NkUzODA5M0I4MUJECisKKzNFQzNDRkQ1QkYyRTg4QzUxMzIxRDQ1NDA3MzMxNzM1OTI2NjFEODVGMUFGRDA0NzM5NTQzQzM5N0UzNjhDNzM1MDA0NTYyNjRCMjYyNQorCiszN0I4RUE2RDE0N0QyNjRFNDhFNjVGQzY2OTREMjc3RTU5NzBCMEZCNDcxRDc2MjgwQTc0MDA4QjEwQ0M1QTIxNkVEMDdGMjFBMjRCRDUKKworREJDRUE1QTRFMEFEQTQ4M0YwNEFDRDc2OTdBQjdBMEE5MDFDMDE5MjU4MUQ0RkFCQkMyNDQ4OUUzQ0Y1MzU3MzcwNDBCMEMxNUJGMkNBCisKKzk5NzAyNkZDQzM3RTM2MDg4RDUxM0NDMjBCNjhDOEQ4NzA5RTVENTgxMUI1QzUxMEQ2MTkzQTgxMzIzQTI3MTYyMEQyMzlDRkEzMkY5NgorCiszQUY1RjNCNTg1N0FDNjgwRDE0OTFERTNGMjJBOEJCRDI5NTJFRUU1QjQ5NjM3RjI0QkRFOTJCNUE5OTRDRjVFMDI3MUNBOUFEQjQ3RjUKKworQzI5OEEzOTFCRkNCNjBDNjMwMzEyQUU4OTNBQzQ4RjIwMjU2OERFMUI0M0REOTg2QTM4QTBGNDc4QUU2NDY1RjgzQjBGRDNBQkQ3RkZFCisKKzNFRTA2QkY4OEQ1MDE2QkVFMkU5MEQ0MjM4NzIyQTYwNDQ0ODcwODc0OEQ2MDgyOTVFM0I0MzVCRjJCNDdDOTFGRUYzODVGMjczMUU5NQorCisxRjczRkFCQ0M4OENFQjhCQTQ4QTA4N0JFQTJERkZBOTMwMUI2MEM0QUI0MjZCREMxMDRBMjQxMUVEODM4MDg1RkMwNkNFM0U0RTY5MDYKKworNEQ3RUYzRjMwMUREM0NBM0VBRUY0OThFNkE3QjRCMUEzNkU5NzkwRTdGNjlFQ0Q1RTg5NjcwNTA4MzVDRTc3OUUzQjQ0MDE0QzI3QUMwCisKKzQ1NkE5NkI5RTI4QzcxRjMwMDMxQjQ5RkIwMERBMTk1QTMyQzQxNzVCNkJGQjI3OUZFNDM1RUU5MkQ0RkQ1OTYzRTQyRkU5OUQ5NTQzOAorCis3NDAwNzA2QzE3NTY3QjFGQjY1QzRFOTBBQUMxMENBNjI4MDMyRTA0OTNBOTcxQkQ1NUQ4M0UxQUQ3MEIyNDBCRkI2RUVEREQ2MjVENEUKKworNENENkQ0ODk1NjY4QjE0NDZEREQyMzVFOERFNDRCNjk0RjNGOTNBQUMyQkMwRDA0Qzg3MUZGQkY1REJBMUM3RUVFMEJGNjZDOTQ5QTU4CisKK0IxNkY1NTQ5N0U4MkFDRDQwQkUzNTZDQUQzRUJENzA3QzAwMjBBQ0Q0MTBEQzZGRkM3Q0M0NjA1MjVDMjAwMUEwQjRBOEI3QjExNDkzMgorCiszQTY1RkI2NUJCN0MyMENCQTMwNUU1M0EzMTJFOTcxOUExNUM0NUMzOUM4NUE0RjFGMDA4QzM2MUIxNzU3REMwQkQ4QzEwMjA0QjAyMTgKKworQUVBRTI5RDNGQzU1QzEyRTk5ODVFRjM2QTQ1MDQ2RjQ2NjA2OTI0NjM2RjdGNzY0ODBGRUY3RjhEMjY0QzczMjY2QzA1QTZERTY5OUIyCisKKzM3RjZDMURGNzc3MzA2QkVGMUUwQUM0OEE2QjE1NDhFRDQxQjdFRENFNzA2Q0M4QTY2QjNEOTQzNzIxMEM5RkNGQUM5NzhDOEY5RkVFQgorCis4RTIyMEQwMjRDMDREQUMyQ0U2MkRDOEFGQkU3QUQ0NTQwQjVFRDM2NjhFN0I1OUZCQTI4QTdGOEQ4MjJEQkVGODRERkRCNzI1NjZFQzUKKworRDYyMjNBMTY1OTU5NDQzQTJGOTgwRjZEMTZDODE4N0FEMzIxQzI3QUFDRjg4NDMzNkY3RDgxNTREMDZGQTQ2RTNGRjUxRDJEQzI2MzEzCisKK0ZBODEyRjlGMTUwN0ZENzVCODA0MTFERUY2OUZFMjY4QjlBNDU4NzE5NUU0NUIxRkVBQ0IwMjk1QzYzQkE4QTRDRkQ0N0U3QzcxMTUxMQorCitBRUIwMEU5M0MwQjM1OUVBMERGREFGRjVERkMwODU0RTJGQzYzQUVGRDM3REY0NzM4NTlDMDQwRDZFOEQ4MkY2NDBDMTgxNUQzRjlBNTMKKworQUIzRTFENUUxRjBCMEUxMjU1MTBGMkM2RDUwM0M0Q0E1MThCRDM2ODkyQjgzQUQzMUIzNzM0ODA0RjcyNjAwNTYyRjkyNDZGQTJCNUI4CisKKzU2QkQ1NTIxMkNBMjdENzAwQTc5MTNBRjUwNUJCRUI5QkMzQjJFRUMxM0Q3Mjg5OTk3QUJFQzA3ODgwOEM3OUY2NTkzOUIwN0EyNjE5QworCiswRUZERTZGRjdCQUVBRUJCM0E0QTMyMTg0NkY2MzlBNzA5NkU0Rjc2ODhFNTIzREExOTAxRUEzRkZCNkE3MTExMEI2Q0EyQzQ1RDFGQzUKKworNDlBQzMyRjAzRkE1QUE3OTE1RUY0Mzc3MEExM0FBNjhDNDNGNEZBM0RFRDU1RDI5NDBGNzY2NDgwNzZEOTU1QjUwOTIxNzI1NDEyOEY3CisKKzQ2QzNBMkFDNDdENjgzRkJGQkUxMjA1NzQ1NDQzNTk0MUNERTY2MjIyMEFBN0IzNTZFNDcxOEQ1OTFCODFBMDZDMDREQ0E4M0E4MTRFNQorCitBRkJCQjc1OEVERjFFOERGMUJGNjIyRDRFNEJCNjM3RTAxN0U0RTY2RjYwNjdDRUYwNjUwRUVEMzFCQ0JEQzY5NDdEQURCMzk4MjMyOUQKKworRTkwMkU1MjA2MkNFREJFQjc3NzE1NzM1RTY5OEU0MDQ0OEZFQzAwODQyQkFFM0JBQTIwN0QyQjI4RUQzQkZFMUMxRkU0Mjg0Mzk0NzBGCisKKzRFMUQ4MzU4RTM1RTRCOTdENjFFQzZBMTI4QjQzODNFQTAyNzZBOTQ3QkM5RDE2Nzk0QzNBM0Q3REIwQkI1OUZGNjQ5ODc1RTBBRkE0MworCitFNjU4NkY4QjRDQTkyMUMxQUFGQzBFMkQxQzk3MEIzODA5NzdDQkE1MDVCM0Q1MzFGMzc4OTI4MkUyMUQxQjVEOUQzMzc2RUFEN0U0RTQKKworMDAwODVDNDdDQjg1OERBOTYwQjU1QkVBMDdFMEIwMTJCRTNGNTYyMERCQTE2N0MxMDVCOTVGRjlCNUZERDI4RDUzNTRDODc3RTU2NzEwCisKKzFENDVGOUFBNDcxRDI3MTgzQTU1QUI5QjM0RDYyNjgxNUQzMkNEODI0QTRDNDY3NzJEOEZDNDkzMTM0MUUyMjczMDlFODMwNzgzNUZEMgorCis1MzU5QTEwRjg0QUQ1NzQ0QjgxODFEQUQ1OTE3NkI2QjQ2NjU5NUI0MjMzMTY4M0Y1NzU0NkFDQTYwMTA2NjU0QzlBMUU1RjFCRDQ3REEKKworRjlGOTM1OThFNzVDRjAzMjE5OEQ2OUExQzRCMTUyQTI5NTg2MjA5OTAzQzdCRjEyNkJERUU1QTM4MDZCQTE3NjZCQjAyRjVENzVFMzNECisKK0IyQjAxMTEwNkZDM0M5NjRGOEZBQTlFOTg1N0JDQUY5MDM0NjNGQTdGQzM3Mjk0RTRGMEZGOThCRUEyMkZCNDRGN0FFNUU2Nzg5NjU4QgorCitCQUI1QzMwRDZDMzJENUUyNEUyNjhCNTQzNTNEMTI0NUVENzhEMUQ3Mzg1RUJFRUE0OUVDRTQ5NkE0MjYxRjk5MkY2N0I2NjQ3NzZENkUKKworQ0ExQzgzNTI0OTlCRjNDRUVGMzY1RTE1MjU4MkY5ODU5MEI4RDkwMzg2N0I2NTU3MjAwQjEwNzBEOTFFQTMyRUZEQUIwNTgwNTU5RUI1CisKKzU2QTgzNUY3NEJGNDU4NjkzRjA5MzM4OUVFMUQxQjFGQzFCRDJBQzExNDZFQTlDNUU0QjE0QkYyNkFCM0VGQTBCQTBBQTE4MTNFNkM2MQorCitCNzAxMUFDMzMwQjI5M0E1Q0NEREI0MTQxMkY5N0JBMDJEMzhFNTAyRDU5NjkxMkQxNjVGNkIwMzAwMjI4ODkxMjEwREI3MDBFOTc1QkIKKworNDc0MjczODhENUYzMjQ2RDgwQ0I5NzAzRkU1RjJCMkNENDA4NzNBRTA1MjE4NTBENEQ2NTYxNzRCNTJGMjRDMDZBRjFEOUZFNEFCQkY5CisKKzhCNDMyQjYxNTBCMDcyNUUzMjhFNTRCRTM4MkExNkQ1REY2QzQ3RDlERDE0NzUxQjk2RTJEQkNBRjRDOTg1ODMzNkY1MjcyMzhFMjYzQworCis1ODczMEM3RTI3REExQjIxQUFEQkI0ODE1NENFNUU5QzkyNjYwMzk0RDcyODJGQzA3OTE3QzkxRDBFOTFEQUUzRkY3REVDRkQ1RTgwODIKKworNTYzRTE2NzNBMTVDRkMwNjlFMDhENTU0RTNCOERGNTcwMjA5RDU2N0M2NUYzRDI2RjI1MUI0MDVGQUU1RjYxMDY2Mzc3MjhCREVGNzM1CisKK0VDMkQ1RTdBQTNGMDA0MzRFQjU4QzMzMDdEMjIxQzEyRkVGNkQ3NDFFRDg3MDgxREQ2QjkzRDJFOTI4MkQwOUE3MjYyRUZGQ0NBRkZERQorCitDRUU4QzRFOTQyQUZGRDgyMTVCODRGQTU3RDQxRjU4MTVGM0EzMTkxQkMzNzlFREM0NTQyNTJFNjg4RUI5Nzg4QTU1MUExNzg3NkFGMUIKKworMEE1RUQ1QTYyRTkyRTdERTMzMkVEODlBOUI0RjQwNjU1MkY5QjcwNkE2RkFENTlBNDMzRjcyQUI2RDQ0MDFFMjVDQzM3QzBGRjkxNzEzCisKKzRDODM4RTVDQjNDRDVBRUI4NTU2NDQzQjFCRjUxMzkwMEYyOTNCOUJDRjMzRjk2NjA4RDFCMTA4Q0Y5QkM3REU5NUY0QjUxOEE4Njk4NworCisyOEYyMDcyOUQ2MEU3NUU1MzQ3Njg2ODIyMEI2NEU5MDVCQkZCRThFMjY4MDhFQUVCMEE0NkExRTA5NkVGODY4RUU0NDEwRUJDODdEMzYKKworNDYwMzdBRkM2RDE3N0Y0MkY4REFCOEQ1Qzg4MjAwQUVBMTQzODhBRjA5RUFGNUNBMjRENzJBMTcyRDY1NEJFMTk4Q0I0MjY5NDlDNEUzCisKK0QyM0M3RDQ5RjRBRUU0RDIwMTI0QjU4MzA0ODBEMEE4Q0QwRjdFRkNBM0ZEMjUxQzYwOUQxMjREMEJCNEU3QTZDRTg5RUE3QzkyRTBFNworCitCOUNCODcwRTEyN0UwMzM3QTJFNjQ1QUVDMjdEMUIwRDg1QzU3RDI3RjBGN0FBMUU4NDlDRjFGNEU5QkRGMDIyOTdDM0U2MTI5MDAxMEQKKworNEVCMEYzMDY5N0QzMEVDQ0QxRURFMTc2NkJDMTM3RjJFMkEzRDdDRUQyNUIxQkEyNTlEMTAwQkExNkFDM0QyOUMwMURGODNERkU1QjI0CisKK0RDQzlGRkMyQjgwRjYxRTkxRDJFNDE1NjAyNDFDMDBFNzlEQTk3MEEwOUQ4QUEyMjlDQzJGNUMxMTRFMDcxM0VBQUI1NjA0NDJDQ0U3MworCis5OTNFQjk4ODJFN0MwMjkyRjI0OEMwMDcxN0UzQTFEQTQ2QUJGM0ZDNzE2MjI2RUFBRTM1RThGMjA3MjZCMUEwNDVBMjBGODBCMDI0NzMKKworOEI3QjkzRDBFNzlDNkZBMTE3ODBBNkM5NEU2NERFNTNGRUFFMDE5RTREODM4NjA3QTA1Qzc3NDZBMzM4NUM5NzI4Q0EyOUQ4RjY0MzczCisKK0IyNTMwNzI3MkE3NzAyODgxNUQ4MDQ1MTA2MUIwMTBFQzhFODJCMEI3MDI0M0Y2NkI5N0FCRUQyNjRGN0I1M0IxNjNERTgyMDQ3OTZCQworCitDNTkzQ0E5QkUzRjQzRTI2NzEzRENCRDlFMzQ0OUZEMzAwRjYxMTFBNTBFREQyRjlDQ0JDNkQwMDEyQTk3M0I1RjZBMTY1MTA3NEZEMTQKKworNzZCRjY5NDU2ODcwQzUyMjg1OTlGRTdDQzA5NTlGNjgwNDQ5N0EyOEUzQUFCMTI5MDI0ODE2RkJEM0MwMTAxQTlCNzA5RERFMEE5MkFCCisKK0YwQjI5NDhFMDk2NjI0RDA2N0YxN0E4Q0YyRTgyNTFBNDA5NjlFODU3RDg2NzM5ODgzQjZCNDY5NjdFQUMyMjg2QkQ0NTFGMjZCNEExNgorCiswMjZGQzVGM0EwODdGNEJFMjFBOTBEMzM2QjY5QzUxMTdGM0FENTMyQUY2RTNGRTlDOEE0ODREMzcyQTFDOEMxQTM0MjI2NEQzQzM3ODIKKworNEYzQjU4MkQyODg1NjQyRDJCMzQ0MjEyMUE3RjNCRkNCQ0EzNUQwOURBRkM0QjhBQThCQTRFMEMxMTM5RTNGMjlBQkVERUE4MjczMkQ2CisKKzM4MTBGN0ZCMkE0NjJFMTFBMzJERjJFNzQ5MDRBQzdDNTcwNEM1NDVGRDZEMDhENkQxRjZGMDdDNjlCRDU0MThFODJGNkIzM0MzNkE5OQorCis1MDQ0QkE2NjBBRERFQjI0QzdBRDEwODg5Q0I3ODUxNjk5NjBGOEU2RUVFOUEzMjFCQUE3ODc5NEFGMDg2MERCNTI3MDE5M0NEQzlDMEQKKworNURBQzQ1QTFFNjdGRDYwNjNBMTk5OEQwNjI0QTVERERFQkFEQzhDNDIzMTg5Mjk1MzVBNjkzNjc3NjczQjI0Q0QyQ0QyODY5MTQ4REJBCisKK0MxRUE0ODZERUIxQjBEODNFNzc4NUYxRTFFRTY1QjlBRTNDODM5Qzc0MjcxMDhDMTNDNEI3RjY1N0JBOTY2OUQxRkQzRTNCRTVGRUU1MAorCitBQTIwOTQ2RUUxNzNCREMwQTlCOTQwNzQ0QUVFQTM4NDdENTZERTdFODZBRERENkY2MzAwMENCMDQ4NDA3MDcwQUY2NUU0QkMwOTczNDcKKworQ0Q4MkY2MDg0RDIwQzUyOUUzNTQ5MDQ5MkU1MjkzRjk3NTU0Rjk5Nzk0MDVDQzZGRjdGODAxQ0MzREVBNTBEQUY5QkZFRkU4NjIzQjJDCisKKzhDNzU2MDc2NkM0MTE1RUVGQTQwQkY5ODA2NDdGNkQzMTg3QTY4OTI5NDA2MERGQzIxNEUyMjQ0MTA0NENCRkJCMkI2Mjc0RURENDRGNQorCisyMTgwNTc4NjlBNDZDNTE3MTM4RTRGODQ4REFENjlGMjQyMDg4OTZDOERGODYwRjBGRjcxRUY4OTMxMEYyRDgyRUI3QUNFNkE3MjkyOEIKKworMDdDQzU3QTJERjY0NDM3NjFEOTEyODNCNTlCRDAwNjY1MENERkRDRUY4QkQ2NEEwRjYyNkNFQUQ3NzA1NzJENDg5RTkxNkFGQTFBQzI2CisKKzhGNkQyMkYzRjM3QjYzOTI4NDcyQjgxRUJEMjg3RjY2MTk5MDBBQjVCMjkxQTA0NzkwNkFBRUUyQ0Q5M0Y3RkRCRjE2NThERkVCOEQ4QworCitEN0VGOTg3RDBEMTIzNUZGOERGMjAyRjlFODNBRDE1NDUwMDkwOTk5NkZFREVDREUwRUJCMkY5NUY2OTgwNUVGMUY3NzRENEQxNDNBQUUKKworOUE1MEI2NEJENTE0RDgzRDAwRjA1NzE1RjE2M0JDN0Y2NEI5MDY2M0M1OTcxRDZBNTM5M0MxRDYwMTE5NzhFRUZGRDU3QTdCOTNGQTU3CisKK0U2Q0UxQ0JCQTMxREQ1MTA2OTZBMzQ0RUJERkFDREI4N0FGREI2RjQyNUJDQzEzQUQyNDVFOTI2NDQ2Nzk2MEY5NTFBRDc5N0FFOUQ5RQorCis2MzEyNjVFRDBGMTJENEFCQjBGNjE4OUZEOTQzM0EyMzZGMDBEMDFGQTAzOEQ1QkNGQjNERjY4Mzk3NjEwNzA4QTc3N0ZDMzAyMUI2ODUKKworNDQ4NDQ1RDMyNkVBNzY0OTQwNkE4OERBMzkyODU3RkVBNjE1NjY4NEUzNTQ3RThDNzU3QkMzODIyM0MwQ0EyNTY5QkU0MzhEMDNCNTc1CisKKzcwRTgxNUQ1OEJEODJDMkVFQzg2MTAyMEMxREJGMDczRUZEOUM4MTM2QUJGMjYzNDYxRDNBRjc3RDA1N0Y1MDIxNDkwNERERTUxQzNBMAorCis2MUEzQTFFMUNGRTQxM0U5QTE0OEYwNUE4MTA4NjA4RUY3RkRCOTZGMzkyRTc0RUVCQzVBNEQzNTRCQTJBRTU2NzhEMjhBRUMwMTQ5NzkKKworMTI4NjMwOTg0RUYzRDU1ODZEQjg3ODNGMDYwM0Q3MjEwNzgyREU5NzlDMDdCRThERDU4OUM3MTBERDQ0Mzk0NTY5QjhCREU3NzBCRDkwCisKKzM1RkFGM0NGQTQ4MDcwQzVDREM4Q0JFQTJCNUFCMjYyMEQ0QzQwODE4QUQ3NDA5NjZCNzMzQjk5RThDQkFCNDkwOUY1RUY1QjU1NzVFRAorCiswQThDRTQ2MzVGQkU5RDY5RTU3OTk5QjI3MzlGMjgxQ0E0QkVFRDZGRjI5NDhCODY3MDQ0NkJCQjMwRDBCQTY2NzlBQTM4QzJEQTJBMzAKKworOTYwNjg3RjJEQ0YwQzc0MTUzOTEwMjk2OEM4RDY1ODJFNTU5NzQ4MTE2MzBCMEZEMjA5MUI2MzQ3Nzc0N0Y0NUNBMEFEQzIzMjIxQUI0CisKK0MyRTk0RURBRDZGODYyMTE5RjEyN0E3OUEyQkMwNzMyNTRFOTQxQjM3QjgzMEU1RkI1MDRCMjZFNTgwMzIwRENGRDVCMkQwM0E1QTZCRQorCiszQzkzNTAwMzFEN0E1OEY3QjM1MUE5RjkxN0FERUZBNzJEODE0OTBCMzI1QzRDMUUzOTE3NUQxRDNGNzM5NEEwMDlEMDRBN0I3MDZFMUQKKworM0I2RjYxQkVBMDk2Q0Y0REM1MEU0QzcyOTk5NjY3RUVDODY5MTI1QjNFQjE1MkUzRTcyNDA5NjhGOUI5M0JEQzkxQ0M1RTYyNjU0RDdCCisKKzQ2RTJFNjBBNEQyMjYwMzIyQjU2M0M1NDNEOUUxNzFENUYxRTgxNkU3MzIyMjcwOUExRTJGMTQxMTIyMDkwODk1NTREREVFMTdDQ0IxQworCitGMDY2RDBBQTEzODc1MjRGQzRCMkJCNDcwNzE0MDc0Mjg5MDNBMUI5NzIxRDZDRTQwNDZFQzJGRTQzQjlDRDk0MDlCQUM0MUI3NkEyN0IKKworOEQ0Q0YzREE0MkY5REQ4QThBNzUxREFEMTAzRjE2OUExNTI0RDA3ODAwMjJGNzY0QzQ5RkU5QjQ0QUY4MEZBQkZFNDhCRkU0MEQ2MkQ0CisKKzFBQTA2MTgyNDVBRDdCRkFEN0MxMDVBM0MwNjQ0OTNCMTA5Rjc2NUVCMDZCRkY1QzFDODEzODI5NkM2MzVBRDYyNThGQjA4OTRDMkRERAorCitCRDM3QzQ2RkQyMjMxMUQyNjVBRTUwQ0YzOTFDODVGNkFERjU5MTgxRUVBQjVCNjVEMUY4MTE0OUFBNTQyNUIxQzExQTQzMjAzMkNBQTAKKworM0VCMkZBODIwNEU5QkI2NzM2OTk4REU5QjEyRTlFMzdFQzY1MTU2MEY0RTkwNkIzNDJBNzI1RTIxMDIxQjgyQjg0MjQ5RDVDMEY2RDk2CisKKzMzQzQxOTYyNzlFNTY5REIxNjU4NTg0M0Q2NUZBRDBCNUQ4OTNCQjBBOUQzODEzMjRGNzZCNjFEQTg4REI4MTg4RTU5QzRCQTE1RUU1RgorCitCMjg5MkU3MjYwRjlFQTk4NjFFNDQ5MjFFQ0MxQTI3RDc5QjI1MDUwNjE1ODUyQzgzOEJDM0JEQjREOUEzQjgxQUIyREZFNzY2N0UyQUIKKworMDU5MkU0RDhBQzQxNzIwMzFFMTI3NjBGMTRBRTFDMDU4Rjk4NkEyMjY5OUUwMjRFNkM2Q0I1MEE0MzA2NkYxQTAzMDRBQTY3QUM0NENCCisKKzM3OTgxNEM3OTExMDNCNkMyRDRDMTQzOUZDMzA0NkI2MTFGNjMyNkE1QkJFNjk3Mzg0QTk3NkQwRDAxODE1QjkzM0VCNDczNDk2NkQwNworCitFMUQ1MDk0NzFCRkFFRUZCRDNGOTY4OUVBRjgyQjBFOUFBREMyMzY4QUU1MkFBNDhGMDMxOEFBMUJDQzgxQzNGMkI4OUQ0OEMwOEExRjkKKworQkE0RDdDRTg2QzVFOTEzQTg3QTA1NjNENzc5MEM0NzFERDQ3Q0JEQjI3M0FBMzdDRDRERTZCRkRCQTQwNzQ4M0RFMjc1RkY1N0ZBRjkzCisKKzIyNTkxQTg1MjNFNzdBMzM0M0NCNjEwMEFGQjYwMzUyMjNFMDVFRjM1MzAzMTM4ODVGRkM2M0E4RDcyREUwOTlDNTBBNzc0QTYwMzA5OAorCis1OUVEQ0IzQzRFNDI0QzkwNzNFMEI1QjMyRDk4OEZBRDA0RUI0ODZFNjVBM0VBN0ZGN0RCM0QyRkRGQUJCQzkyREY2Qzc0MkVCNkYwOUQKKworMkE3ODM4N0RDMENBODU2MTc0M0NCOUM4QUQ5NDk0NzJEQUVDNjZBQ0FERDQzNUM4MThEMjgxMjc3NzBBOERBMkE1MDkwQ0VDQ0JFMTZBCisKKzUxNkQ3OTg1RDdBNDlDN0VFOUQwODg1NDQzNTAwOEFERjI1MDQxRThCQTU3NDQ1OTFBQjdFMjJEMzcwNUVBQ0JEMUQ5QzYzNzhGMTcyRAorCitCODJCMkM3QkM1MTI5M0Y0MDA2NDMwNkY2OTEwM0U2QTBCQzFDMTA0NkMyQTBBRkEyRTAzODU1MEMxOTQzNTRFQjhFMjYzMDg1RTUzOTAKKworNzQ5RTJDOThGNDNFQTY4RDQ2NkU0MEM1RkVGRTY3NjQ5MzlDRkY4MTc4MTRCODVCQTkyOEM1ODU5RDIwNzA5RDc4Q0Q1MEI5NTdFODA5CisKKzBGMzdDQUUzNkIxODFDMzdFODBFOUU4NjkwRDJCOUYwQzM0RDIwNEI4RTRBNUExNjRDQUYyRkE0RkM2QURDRDc3NTA5RUFBNTIzNjIzMworCis2RTlEQkZEMUZEQTFDRjMyQTlFOTgwRENCRjRCN0MzMzhDRDE4Mzk5QUNFNTEwODQzNTc2N0ZFQTg0MTQ1ODVERTdDM0UwODU5MEIzN0MKKworQ0EwMzE4QTgyQzY5QURERkNFQUUxNTZFNUQxRkUzRUY5NTI2NTE1RkVGRjM1NkUwMzUxQ0REMUQzQUQzNDBFNzcyN0E0NzgyNjRERjJECisKKzQ5MTI1OUYwNUE2NTA0MDkzOTQ5NTAyRThEMTAyNTA1NTZCODdBQ0JDQTdFQjkzOEM2MkJFMEQwRERBNEQwMkE5M0UxODc2OUI4OTVDMAorCis0RTVGQzFCMjI5RkY0QTNENzA3MEEwODU2MjkwQkJGRjM0NjBDNUUxQUY5MjM0NkU3ODc5RjI3RENDRDhBNTMzODc5MTY1NkMzNzYxMjgKKworNDIxREE0QjA3QTVGOTYxNjBGMDQyMUFFMTBDMUYxNjc1RDM5NkE4MDYzNUI3Q0QxQkZBNENDNTY0MjYzREE1QzBDODRGMzc4N0RDOEQwCisKKzhBQ0FFREUxMTQ4NkMxNTVCQjFCMTY4MDYzMDNCOUQyMTk3NENBMTk1MTZDNjM0MDJBOEYwMDY3Q0VEQUY2ODJFQjJBMjEyNzM0OERCQgorCis1QTY2MkI1RTg3QTUzNzVCMzk2QjExNTNCODQzMzAzNTAxRUQ5MzUzNERGN0M3RkNBMDlFRkIwMjYxMzExMTU1RkNCQTJFQTk3NjY4QTQKKworNjVBNzc1MUY5MUJDQTU2NkU0OTQ2NTY1QkExRDY2NENEOEZFRDE5RTg0RTc1NjMyMDVERDdBRjc3RTJBNENCQzY4NDZFRjVBREJEMTFGCisKKzE5NThFMDg2RkQ3NjczRDVBQzk5Nzg2N0VCMDIxNzMxNEYzMkQ2MDM0MkZBQUZGRkY5NTdGNjBEOUIwQUM1N0U2MTExMzdBQzY5NURFRgorCitFMzEzQkVCNTMzNEI4MzhGODNBNTRDM0VENzZBQzU1QzY3NTcxRjM2N0E0MDlEQTA1MkEwMzU0ODM3QkRFRTREMTFCNDI2REM5RENDNzQKKworNjFBNkY0MjJCOTVERjM4OTRBMDAyQjAyQkRERkUzRkVCQThEOEUzQkI3NTU2RjUwMUE4M0ExMEZCMDEzN0Y0MjhGQzUyMjI2MEUwQTRCCisKKzE2NTUzOTk0OTBEQTgzQ0NFQUNFRDE0OEFGMUY0NDdDOUJCRkUzQjE1OTM5OUM4MkVBQjI1N0JFNTY4QTREQUQ2OEE2NjRENzM5NzM0MgorCitBQUU3RDM4MjIzQ0Q5QUVGQ0ZFNUUzOTlGMUQ3MDQwNEQ0NzBBMUNFMTBENDZDQUZGNUQ1MjIzNTJDNTBEQjhGQUJENzM0OEZDNkNFQzgKKworMzRENUE4MkMwNEREQTEwNUY4NUY0NTBFNzM2M0U0RTk4OUM2NzI1RTZCQkNGN0FBNjY4MEM5N0QxMjhGQUFGNEQ2RTM4NTlGMDNCMEY1CisKK0EzQThBNzBFMEM5REFFRTg0QkI5NUY0MTkzMUEzMEFBMThENkM1MUQ5REQzRDNCMEFEQzdEMEI1RkYwRDBBODg5QTk0NEM0NDY4Rjk2QgorCis5RTU5NTE1QkJBNUM4NkJEQzUzOTRCQzQwQjgwQ0JEQTE5ODU3RTlERkY0MUU3NTgwMkQyQTJDMDI0NzEyMkNFOTRBN0Q1REQ4RjU4NDYKKworMjdBQ0EwQkU1QzA0MkEwMkZCNzM2MkMzNDYxNEJDRDE3MzUwQUZCMUYwRUZEQjA5QUUyRjFDMzdGRjIxRTAwN0NENERGMTcyOUFEOTMyCisKK0ZBMjBBOEY4NUMwNjIwMUY5NjIzRDk1OUI5RTRBOTBDRDA0QjZFNEFFMkMxNzk1ODI4QjAyMkQ5OTBEOTM5RDVEMTk5MkNCMkRCODA3RAorCiswNzJDRUU1ODBGQTlBNzlGMDdGRDZDNDk4MEM5OTdFQzUyNEI1N0IzNTBEQ0U0RjkwMTNCNUJCMDcxNjVERDZGQTE5MDI4NjgzMjhGQTgKKworMEQzQ0Q3NzBCNzgzODE4REU1MDhFNTkzODNDOTZBMDVGQkJBODQwODMxRTEyOUYwREJERDdCNEFCMDU4MDFFOTlFOTY4RUVCN0EwMTA2CisKKzVBRjA0RjExQzY0MUNBREJFNzQ1RUI2RUE3NkNFRTFBQTg1MjRFNDA1RjIzQTlEMDY4Mzk3NEE3ODg3OTI5OTYwMEJERDA5MjRGQkYxOAorCis5MDg2MjU4NzJBNjNDMzhCNEREQkJDOEM3NjRFQkQ5OUYwODc3RkFEQjU5QjVGMUQ0RkQ5RkQyRkMxRkM4QzRGMDY4QjdCMjFCMzc4N0YKKworNzI4Q0Q4Q0Y1RjUyQ0U0QTc2MDc0NjI0MUM0QTY5NkY2QkRCQUQ1OEE0RDM1MDQxRDc0NEZCQUJEQTJGODgzQ0I0NzVFNUY3NUQxRUNCCisKKzkwNTZDM0U1Mjg3OEZBMEREREFBMzAzNTc5MDY1NDNGODQ0MEQxRkVCQzAwMDI5NzY3NkUzQzVBRDQ2MkY4MjVGMUQzMDJBMkM3MDIxRAorCis1QTYyNTk1MzYzQTc5MUE4RURCQjIyRURCOURCOTY4QkEwRUVCNERGNjZFNDYyMkEwNEVCOUZEQjA0MURGQjUyN0NENDA0RDYyRTQ4OTgKKworRDVFN0VENDY0QjBDMjRENThEQUZDQTdFODkxNDgxMzYzNzYxRDgwM0E5NDU3QjdBMjQwM0UxODE2RkM2NzE2NzU3MUQ0NEUyNzQ2OUU3CisKK0IxQkMzQUI4NUNBRjgwOEJCNDA0MzUzN0QxQjgwQ0M0OTA5NzBEODdBMjA4NTdEODY4Q0JFOTAxMDc2NDE5NDM2QTRFM0M5NUM3QzlCNgorCiswRTNDRUFDN0RCMTk4NTlFREUxNDlGRjNGMDdCQTU4NkJFMTI2OThGNUMwQ0M5ODE1RkYyQTZDNjJGN0REOThEQUM2MzkwODRDQTcwMDMKKworQzk5QjkxOTZDRTZBNkRDNTlDQTBCMjAyQzlBRjU0NjIwRTM4QTA3MTJBQUM2RTAxRDI3MTFENDBEMDEyRjE1RENDNTE2NDc3MjFENEY3CisKK0YzMUUyOUU2Q0Q3RUJCNTk4NDJCMDFCRkY4QzdDNDI0RjBFNThENEZEMTVENTZEQUU2MEE2NDUwQUYyMjU0RDM2OENDRDA5Q0MzRkE5MAorCisxMjNDNDRFRDRERENEN0YwOUQ0NkMxMzU0RTVGQzFBNkMxOTAxRUZCREZCRDRENkFEODBFRTk1RUExQjcyNkIyMzA5QzA3MjA0MjRDRDIKKworNUY3MkQ5RTVCRjM4QjUxMjcxRkQyM0VFQTkzMDEzMTE0QjM1NjM3MEEzQzlENDM4RUJGQTA1OTAxNTg2NTRFMkEzQjdENEM4ODc5MjFDCisKK0Y2NTM4RDFCQjI5NENCQUM3NUNBNjZDQ0RERjBCN0Y3REYxNzQ4OTQyQTkwOEMwN0VBMTNFNkI4MDlCMTM1MEI5RDczQ0VDQURDOThGQQorCiszNTkzM0E4MUEzNEI3QTZGOEVEQzdEQzJBRjYwQjJGMDYzMjk2MkI0MDFBQUZFMDZDQkM4RUE0REM2MzY0MDZGMkNFRDVGQUU3QUQwRDkKKworRUQ1MDIzODEzODU1QTgzMTE5NDIzRTRBMTE0QjQxM0MzQTAxNjk2OUE3NDgxQ0U0NUU0RTA2MUVEOTk4MEZEOTYxNDA0Qjg5NUQ1QTdFCisKKzE2N0I0RDMyRTE1M0RDNzc4RkNGNURBNUVERURGNjhENTcwNzY3MUIyM0RGMjg3MUM2M0ZEQkQ2RjlCOUJDQTlFN0JCNzc2QjM3MTA3QworCiszODQ4NDQ1M0YyNEI0QTM0MjFBMjFEODc5N0RCODIyMjM2Q0ExQTE1RDg3MTk3MjZDNTlENTFGNzMzMjI1OUU3Q0YyM0YyOEYxRDkwM0YKKworMTAwRjlCMEU4RDhERTU2Q0EzQTk5Q0E1QjQwRDA2MjJDQzRENUFFNkJBNzcxMTJDRUE3OUIxMEQwRDVBODA4REEyMEQ3NkI1NkZDNDk5CisKKzIwNjU4N0Y2QTBFQkVDQTEwQUY3M0Y4RTA5MUQ4MjYyMkJGQUJDNTJBMjhEQ0M4QzI5NUEyNDA0MTg2OUU2MzYzQ0Y1ODk2NzBEMzQ3MQorCisxRjNCRTY0RDAyQzg2MTA1OUZBOUQxMDA4MUZEMkEwRUExMzdDMzlBQ0ZCMkE4M0RDQzk0ODYxOTVFNDBFOTlDMEYyODQxOEIyQzI5QzIKKworOUMwMUE4Q0U0RDk4RjI5QTIyRTU4Q0FBNTFFOUVDQUY0Q0E4NUZCNTlFMThDMkU1Mzg3M0E2NDJFMzFCRThFNDc1OTFEQTZFQzZEN0M0CisKK0UxMzA1NUI4RDA4RDZEMUYwNjA4QTEwODBBMzg4MzEyODBDOThEN0Q0N0NGRUJEMzI1ODQzMkFDMzk2QkJGOTVCNzdFOTQ3MEJBNEI2QworCis5QTA1MkNDOEVCRDcyNzdDM0I3ODUxNEJEQzQ5MTU3MEI3RDdCNDczQzE1Q0NFRUNCNEQzMTJDNzc1QkQ4RDk5RTQ2RUJFQ0Y2QzM1MzMKKworRkZGRDNFNUJFRjhEN0I5NDI0NDQ3OTk5QTkxQ0UxODgwOTE4RDc1MEVBMzQ1RTZBMTA3NzFEQkVCREIxQjRDQ0NFMTQ3NEMwN0E5QzRFCisKK0E4OTQwMTdCQzU5MzAyNENDMTZCNTk1REJDODM1RjRFRThEOUFERjdGRTg2NzFFMEJERjM2NjEzRkU3ODQ0QzU5OEE3ODlDQTc4NEI5QworCis5N0FEMjM2MUQ3Q0RDQjJFOUJENDUwMzJBMzhENkIwRUZERkM4RjY3RkVEOEVCM0NERTI4MEQ4MUM2REM5MzQ4QkQ0OENDNTgwRDI5NTgKKworNTY1OEFDRDRDM0RCRjJEN0Q4NUE3OEJDRTk1MTJEN0Y3QkMyRURGN0I3NjY5OTU0NUYzQjFCQ0MyMDJGNTNDODEyM0IxNUY0NkQ4Rjg4CisKKzEwNzBGMTIzMkNDOEZEMjEyRjE1Nzg1RkVDRkM2QjgzQzBGNDM5NzE2QTg1OUI2NDIzOUMxRkE4ODBEMzJGNjIzNzZFRUIxMkVDNkMwMAorCisyMzVDOUQ1NTBBRkU4NEM5ODEzMjlCNEIzREYxN0JDMEU1N0U3MkQ4OTA1OEQxRDNFNkVEQTkxRUNGRUMwRUNGMEI4MDJENDFCNEFGQ0MKKworOEREMjUwQzEzQUVDRURFQUExQTBBNkVFMjZGMzM1MTU3Mjg0OUZGNUU2MzdBODk4RDdCMEEwOTlEODcwMTJFMjc0Mzk2QTI3RTI5QTIxCisKK0RCMjk1ODRFRDcyRkI2MTRBMzE3RTQ3QzYxNzdBOUZCQjJFNTMyMEJDRDkwQ0MwODZCN0RDREU2RUNFRTAxRjU5NzczOEFBRERDN0Q5RAorCiszM0IwMkEwOUNFQ0EyQTM4OUYxNkFBRENEMkZCMDJFRjI1N0JBQjEyNjVFQ0Q5N0UyNUYwREUxQzhFNzUyNkZCNUY4QzMyOEZFMzcwNzgKKworQTlEMEYzMEQ4MUI5MEE5N0E3NTI1MDVDOEEyRjhDOUM3MjI2RTI0OEFGQzVCNDMxOEVCNDA3QjZBNURDRTMzRkY1MzA5Nzk0MDczNzM3CisKK0Y3MkNCNTVENzNGRjY2RUUxQzA1NUI5QTNFNDkzMDJDMTFENzI0OEYzNkNFMjU3RkIwNTE2NzQyNzRENTFDQTRDMERFMUY5MjdBODgyRAorCitGNTRDNTY3QjczRkYxRDM4NTU2Q0QyMjcxNkEzRjI2OUI5RkRERDI2MUZCQUU0QTkxNkUwODE4RUZBNUMxOTNBQTAwNDU2REI2Rjc4NDUKKworRkU0MUY3MTVBOEMwMDAwRTZGQTgxNTE4OTVCM0YyMUREOUJFRjk4RDlDRjY3NEE2MEM4QTEwODg1MDJDNkUwOTg5OUQ2NDU2RjRBRUM5CisKKzU4NzUwNjhFMjlFMjE5OUVDQ0I2MzJGN0E0NTkzMjQ1MTJBM0JCRTZFNjUxMzIyNjNFRTNBNEUyRkI0MjA1NTgwRjVERUUwODNGRDg0RAorCis0OEFCQThFM0NGRTgxRkIxNDY1RDMwMjdGQzY5QzI2MDU5NEVEMzgwQzQ3QjZBRTNEQzJFMzU2NjE5MDZEOThDMDEyNkZCN0E4MEZBM0UKKworOUEyREY3MjdBRTM2MDQ4RjZCMDgzRDhEOEQ4QjFBODAyOEIwNzNCOTZDRTRCNTQ0NzA1MDY2NUJEOTI2RDVBMTE1MUYzRTBDRDYzQzYwCisKK0ZBNzdGRjI3NDZENEE5RTNFMEYyOTU3NzA0MDhDRjM0ODY3MkVBQzQ3NzI0NTgxMjVBODk3NkJBQzc1NDY5MDI1QjVBRThCQzU1NTQwRgorCis0MTMwOENFMzFEMjczNjkwQzk1RDExNzNGMDVEOTUzRkJBMjkwMkUzNjQ4ODVGODIxRTE0RkI4MTUzQzc0OUVGRjEwMDI0N0U0QUIzMTUKKworMzIxRDlDMTkyRTY4QjNGRDdCNTE1NDlCMjIyNDE4MzE5NUE1NDkwMTZEMkE0QkY5NDNGMzcxODQ3NDNENkU1NTc1RjVBMTkyRTIzMjkwCisKK0NBMjI3RTI5RjlCRjE1QUJGNEZBRDM4OEE5RkI2ODlBODA3QUFERDQ0MDQ4MTkzQjVCNUI4MUNBOUY5RDcxOTU4MDNBRTAyRDFBNkE0OQorCiswMDA3NEU0NzMxMzU1NEE0RjNCODQyRjA4MDUxMENFMjc2NDVCNjVCNTc3NjFBMzY0RDBGODkwMTE1RDg4MzRFRUJERkEyNDc5MjNBRTEKKworMzNBRURGOEE0NkYxRDFENDEwMjk2RTI1RTc5QzAxRjY2NDEzNkQ4RDIxOUQzMjRGQTlCMzM0OUIxRDVEMTgwQzAyNTQ4MUVGOUU3QkYxCisKKzEwMEYyNDJFRTE2RUY0MzMwNTQ5MTNFMEVDRjI5QzRBMDgzMEU5M0ZBOTg5OEY3QjU1MDVGODdCRENDMDIxMDE1MzFDN0M5QzEwN0JFQgorCiswQkRFQ0FFNUE0OUJFQjQ1RDNCQzBEODY5QjQ0MUJCNDFBNjRBMjI5REY1QTQwQ0YyNThCMDE3ODIwM0Y5MTMxOEQ5N0Q1MjlEOTIyRTgKKworQTgyRDM2RjM0RkZGOThGMEIwREMwOTg0OTAzQjlERkU4NjkzMkQ5NkJDMTZDNzY2RkJBQTRFRTg0NDlERDFCQTdERTlBQkVBRDY4OTg5CisKKzhCREMyMTU1MzYwQzYzMTQ1ODU2OEU2M0I5MjlERUY5ODNDNkU1NkI1NjMzOTRCMjVBNDRCMjVERkUyQ0JGODYyNDREMjY2RTQ0QjZEMgorCitEQTE4QUNCNEIyRjUzN0RCNjQxMTBGQzUxODdFQ0UyMEE1MTRDRTYxMjA5OTU2QTY1NTVCMzU4MThFNDBBNzAzNkI4NDAyQzZFN0Y5NTcKKworMEJBNjlCRERGRDhDRDNDNzc0NzhFRDg0OTFDMUI3MjFEQzY2MDc4QzU5MDk3RjRGMzI4QkE0NUQ3NzExRDVGMTA1QUI4RTVDMEQzQzVDCisKK0Y4OENDODVBMkFEOUQ2MUIzOUI3RDVCRkQ0MUREMjI3RTUwQUM4MjQ0QTAwRDlFRkQ2QzEzNjc5QjQxNUIwQTBEQUZFRjg3RjJEMEU5QworCitFMUZEODM1NzM2REY4NjVDMTUxNjI4Q0Q5NTBFN0RCQzIxNkFCMzU5RDQ1NzVCQzQ2RDYxMEQ2RDRBMEI1MDM1MTk2NjU0MUQ2MEQwNzUKKworRDk4QzFFMjhBMDYwMkYwODc2QzM4NzcwNTAyOTJFMjQ2OUI2NkM4NDczNDIwMjY2QUE4NTU1RjM5RjAxQThDMUVBMzQzRTNCNDJFMUE4CisKK0YzNjJERUMxM0U2QjFDQTIxNTBCNTRBMjg5NkQ0MTNDQkFCQzM3NTE1NTg3NDAwOTk0NjYyRjlEODkyQjFFQ0M1NjE3RDMwOURFOTk1QgorCitGODgxQkIyN0IwRDFFQjdFQzgzMThBREM3NjdBNzZFQ0UzNjlFMDFCQThEQjNFNDc5N0E3OEZDODFBMDg1MkRDM0ZGMzc1OEE1MTU4OUQKKworQkIwQzg5ODFDQkY3NDA3NkU4M0Y0MjEwOURCOEUxMUM5RkEwNDJBMTNGNzg2NkQzNDEzN0QwMjY4MUNDQzJBOEEyNEJEQTQ2RTlEQkFDCisKK0JGOEQ3NzFCOUVGRUE0MTYxNjg5OTJENEEwQzU0ODk4NDhDNUZDRUVCNkZFRUQyNjBERjlEMzlGNTc2RUUwODQ5MkI1QkUxOEUzNEQxQgorCis3QzRGMDVBODI4QjJBODIwNTYzNDQyOEYwMTY5QjU4Qzk1RDYwMTlCODk5RkNEMTkxMEI0NTE4RDBCNjI4NjFGQzE4MDMwODM2MTc4NTgKKworM0QzMjczNTU1RDU0MjA2QUI5NjI0REU0NjU4Q0NBRjNGRjJEQThEREIwN0EwMDZGNTY5RjA1QUUwRUM1RThCQkE2OUUzMzZCNUExQkIwCisKK0E2MkM0REVBMEFDRkFCNjk0Mzc0NDg0RUIzRjUzMTgwNTQ0NTAyM0NDQjJBNTg4MzJBQTkyREE1MzZGMDU2M0FGQzMxQjBDNTM5QzU2NgorCis4MjYzMzM2NkI0RDlERDhBRkZEMDcwNzFCOEExNzIxMjM5MDFFRTEwNEUwQTZBRTJFM0ZFN0FGMjJGMjNDM0U0NDIwRjNCMUMyNkNERkYKKworMjU1MTg2RjEwMDJGQTc4MzZCRDQ5NjM3QzQ4MERGNjg2RjJGQ0U4MUMzQ0FENzJFRUM5MTA0NkEzRjI1NzNGM0E2ODQ0NDE4RkE0MzMzCisKKzk2RDI0QjQwMjcyRTNCNTgwQjY2RUZCMkFEQTRERUZBQjZEQUQwM0I3QzJCRUQwOTEwOEEzNTNGQzY4QTc3MDE0MzY1QkNFRDU3RkI1MAorCis1RkM3NUY1OUMyNDAyRkRDMjRBODg2Q0Y3QjY0QjlGQTEzQUIzODBEREE3REJGMjdCNkIwNEM3RkYzN0Y2MUM5OTk3Qjk2OTY1NEY3NUQKKworQTk5MjkzOTUzNzFCRkZCMEQ1QjRGRkZBQzI3OEMxRTNEMjZFOUQwMkM4MTg5MUU4RkFCRUZGOTkzNUZCMkI2RUFBMjI1QjZBMjIzRDBFCisKK0QzREE3MDE3MzIxNUQyNUQ3QTNFRTI5OEFDOThCOUIzNDMzQTcwNjBCNTJCOUIxNzgzRjg1RTE4NjAyODMyMjI4RDEzOUE4NkIzN0MzQQorCitGRkU4NUY4NTUyNDM3RERFRjQ2OUFDQjQ4Qjg2RkI3MzEzNzlFQjMxOTQwQjY4MzVDRDQ3QzY0MDYwMDA4MkYzRUIyRTUyNkIyMkY0OUMKKworNTA0NzIxQTMyOTA2RENGODQ4ODhFOEQwNjEyNDM1OTk0RDc0NzVFMjNCMEQ2RTZGODI5QTU5OTc4MTJFOEI1M0RCMDMxMTY3NjdEQ0MxCisKKzkwRjM3M0UxQzU4QTc4NjU2NEFCMjg0NkM5NUNFM0E2M0RBMEM5QkY3QjVGNDFDMkExNjIwMUUyRjIyMzJCRjA1RTRFNzAxNUUwQjg5OAorCitFNDEwQzc5MzQ2MTZENDk5QjM1RTk2RTRGQjczODE2NUI4RUQ2NzA4RjkwMjgxMTRGM0VGQkY1QjRDOTI4ODQyMkYyMDZBRDYzMjRBRUMKKworMTIwQTNCQzBBRkIxRUJCQTc2MzlDOEQwMjA5REIyQzQzMjE1NUVENzEyNDExMEYzNTk5RDhFNkNCOTE2NzQzNUEwNjA1NzMwODc0M0Q3CisKK0RCMUNCNUNBMUYxNzc0RkQ0QUEzQkU1MkM3QjhCMDQyMzRDQjRCOTIyOTNEQTI0QUNCNUMwM0UzOEFENEFDRjJENUJGNzgzNzhBNTJCMQorCitEMDQ0M0E1NDhGQURFMkFDRDZBRERDQTMxNTY3NEQ5MTdDQkZGREQ0OEZGRDQzNjA3MjFBOUYzRkEwRjlGOUVBRjE5NDk5NkEzM0E1MjQKKworQzhCMzc0QUFDRTZBMzY0RjE1NTYwODg2RjQzNzhGNTY3OUFGMzkzQzE5NUM1NjgxN0NGQzI2QURBOTY3OTE4MDI3NDMwM0RERDM4QTQxCisKKzgyMDk1NDcwMjc3NEExNjAyMjdDRDQ5NkUxNDc4NTlDRjI1MjM0NjZGODk1MUQxQkRFNzlBQTdEMjExOTVCQkVCRDJERjNEQkQxMjk0MgorCisyQTExMjQxRkE4MDA5RjQzNDIxQkY3OTczMDQ1MzQzQkM5NTlDRkUyMjUzMEE5QzNCOUFFNUYyNzFCQzkyNzM3NTYxNzFCMTk4ODU3OTMKKworOTdENDg2MzEzM0FGNzgyQTlCMTVCMjcxNEM3N0M2RkQ1NjA3N0MwMDkwMkMwNTcxODRBRDAxQjEwQjU1NTZBNkUwN0I2QjA2MjY0N0FCCisKKzIyQzc4MzUxOUI4N0UyRDlBMkJFNjg5RTMyQTk1REZCRDI4NjVFNTg1Q0ZCMDExNkE0MTEwRDQwREFGQ0QwREQ4NzcwOURERUM0MEI4NworCis0NDMzQjI5Q0Y2QUE5Rjk0MDZDRTYyRkZFQTA3QTU5QUZFRjI4RTQ5RTdCQkEzMkM3RjYwNjY5OTU0MTRFOUVFNUUyMDQ4QTI5ODE3N0EKKworMTNEQUMwM0U1REY5NDMzNEVCNkUxMjRFODZFODM3ODgwNzQ2RDJFNjNEMkM0OUI0RDBENTg3Mjk5MTQzMTQ0N0NFOEUyNDJBMzVERTM0CisKKzZDMUQyRjNERTc0NDNFQTA1QzJFQ0FFMjUxOEI4ODNBNTVERERCRjUzQkQ2NEE3MzUxOTMwQzYxMzdEMzUxRDRBODg5MDhFMTMzQTkxNAorCis0RUQwRDIwMDFEN0JGOEY0Q0FCNDIyNDJGRDBCMzhCRTkwRkE3NjgxNkQ4MTY3OTdBNzNEM0I5ODkxQTBGQjE5NTA3MjNCQkNCOTdFMTUKKworMTExNkU3REFBNUIxOEZFRDhEQkJCRDJGRkEwQjYxMTVFMjU2RUU2NzU1RTE3MkRFMEM4RjI1MTVBNDk0RTY5OENDQkRFODFENzEwNTE0CisKK0FFN0Y3MzI5OTIwOTY0NTRCRkE3NjE3MkVBMjU5REQ5Q0IwRkE1RUMxQkUxMDUwQzE1NTNCMzRFRTlDMjA2QjU0MERDNEY1MzE3M0M4OAorCitCODBBODhCMTgzQjYzOTQ5Q0NCQ0ZGQzY0RTBCOUMyQTlDNEJDODM4REJEMkI0OEFBQUExQkE3QjQwRUY0MzExRTBBRUE1MUU4QkIyREUKKworMzUwOEJFNDNFMzNENjNEMTNCRTMzRkY5NTQ2MjU5RDBFQTU0MUNEQ0I0NjMyMUFEMjI3NzNERTc1NzI2ODIzRjMyRUMxRDM3RUQxMTIyCisKKzY1QkZCRDQxNkQwRUY3NDNCMDQyMEI3M0UwRDczRTFFODEwMUQ1M0U2MzI3OUZCQ0MwM0I1ODBFMDAwNjYzNDg0NDA1Njk3MDRFMzJDRgorCitENDBBRUQzNTNGRkMzRUQzRkUyRDBBMTQ1ODY3RUUyN0ZDQjE4NEU0RkMwM0FGNUY5RjAxNzY3RjlCMjQ1NjI4MUQzMjZEQjYzOUJDQTYKKworNjIyM0FCQTdDQzYzQ0Q2NzhGNjYzRjYxQjA0MDhGMUExOTc2RURFOUY5NkZDQ0ZCQ0IwQUQyOUM4RTI3Q0NEODFDQzZDNUU2OTdCMzA0CisKKzk3REQ1MUYwMEYzRkU3RkUzM0Y5MzFBMTdGQjc1NDAyNjNEN0Y3NDlBMzQwMDdEMkM3Q0IyRUU1N0EwNzVDNDMzM0UyMjE0Qjg2NjY2MQorCis3NDNFNDg3RUQ3NjFCODc3NEUwNzZBQ0JGOUMyREU2Njk5MkM3MDE4OUExRUVCNjFCNDkwNjhGNDEzQ0IzODUxRTFFRDE4MjU3NDA3QjgKKworRUNCNzhFQTM4MUQ1RTQyMzkwN0IxOTRFN0ZEOURBOTUwQzFBNTAyQTBBNjFBQkFBMTJFNzExMDI3OTJGN0NGMDVBRTY1QTdDNjMxQTk2CisKKzM3Njc5QjJDNEJDNjUxRTIxREVGMjJFRTMzOTIwNERCNzIyRDFGREIxMTlGOTc5OEM3MThFNEVDOTQzOUM0NzJEODlEOTk2MTJGNzFDOQorCitGNDk4OTBDNTk2QzI4QkEzMjRDNUE3OTUzNUFENzdBNUUzNkUxODQxRjgyOURCNzQ3N0NDNjNBOTQ0REMxNkRGMjczRDM3NkIyMzA2NTMKKworQzUwQTk3RjVCOTU5MERBMzI1MjEwQjkzNUI2OERCMDFCODBDQTY1OTZFRDJBQzVCQjAyNDNGRDc1RUY4RjY4OTFFRjBBM0MwMUVCRjIxCisKK0ZEOTZEQUY0REFBODNBNUE4OTQ4NTQ5MEE2RkM5QkM2OTNCMjhCMDU1M0VGRkZFNTc0QThCM0M1QkJFQzM2RTY1N0MyQ0RGNERGNDVGMgorCis0N0M1OUFCMUVFNTk4MDcyNUM1MUM0M0RDMjg5RTIxRkU2OTc5MUQ5NDM2QjQ5REZDMTIyQzQ0QkU5MTg3MzNFNzBFMzg0NENFREU2MzMKKworNDkzMkM1MjA3ODk4RDcwN0FGQzJCRTNBRTEzMjJDRTBCQzhBNThGODEwMTE2NkIwNDhDRDZFOTRCMzkyQTU0QkE4ODExNUYwOEMxMDY2CisKKzRGNDE3MDI1QjhBRDI3NTZFQTYyQzk5NDU5OTlFNTM2RDE1NzZCNUUxRDMzMjdENTE2NjA5RDFCMzcxQTBFOUIwQjlGRkE5MzRCODU3OAorCiswRDUxRUEyQUQyQUVBOUZEQjY0MTlERDA0ODVCOTVBRjkwQTM4QjFFRjVGNjhBMUNDNUM3MzE5RTRBNTNCRDlCREQyMDhGQ0Q1OUIyNjQKKworQkIwNURGM0Q3RTU3MUU4MTU0N0VBNDgxNTY4M0NGRjQzMjM0NUY3MTdDQUYzRTIwRTYyN0NCMzlCOUM0MzRGNjU5QUY5Nzc2MDIzMEM4CisKKzREMEM4MDlBOUY4NkVDNzIxRkYxMTNEODREOTRGQTJGMzdBQ0E5QThDNEM2QTI3NjNFMkYyOEM5QTdDODIyMEZFN0Y4QTk5MjA5RTA5NAorCitFRDYyMUI2ODRCNjlGREE5MTk0QTdDQ0NENTFGQTQ5OTMzRUExNTcwNjFGQTIzREQ1RkI5MDI2NUU0RUM5QTgxOEMxMzc5RDVFNTA4MDkKKworRkM3RUVFMUYxMkQ1QjFEQjMzQzZDMjFERjExRjBEOUI0OUEzQTJEMkE5RjM5RTA1NkIwNjA0QjZGRTBGQUU2RjA5QjE4RjU5QjJDMTk3CisKKzY1OTJFNThCNzQ2RDNBOTlBRjU2QjFENUYyQUY5M0E0MEU0M0NGMzBFMUNBMTg0RDFFODk4Qzk0ODAyRkY5QjIzNjVBRjM4RDBDRURFRgorCis2MzhCMjEwOTMxNzcyQkMxOTBFNEQ0MEY0QzVBMTIxMkRCOTVFQTU5NkRCNjRDN0MwNjA5QzY4MTQ0NTlERkEyMjg2RUJCNUVFMTc4RkUKKworQzZBRkZDM0I5QjUyMERCOEREQjRFQjVENDIyMkQ4Njk3OTlGRDE5OEM1RDY0RTRGMzg4NzU4M0VERkNBMkI4RjUxMUY5MEIwRDI5RkQwCisKKzQwRDE0MjdGRjEyRjA5NjY0NTkzRTdFRjFDMEI0MjZEQzQxMDYxRjM0RUNFNjkzNjdGODUyRkNENzIzNDk5RTU2NEM3NzYxNENFMjQzNAorCis1QzBENDEwMTFBQUU3OTYwQURDRDNFMkQ2M0VFMTYxNzdEMTk4OTc1RUYyODg4NDJGQTU3MTRBRkY5RTUzMzU5Nzg1NUEwODI3RkE0NDQKKworQ0M2ODdFODAyN0VDOThDREIzNjA2RkVDNUEwNDVFMkFDODdFOTBFQTAwNTA3Njg2OTlDOTU5ODA1N0I1MDMxMEQzODdFOTEwNTVFOTc0CisKK0FFQkI3QzkxMzZDNjk4NkIyNzlCQkU1RTA1QUEzMDkxRTk3QzcxMDRFMUVFQjBCQ0U5RDM0NDhEODY2NDQzNDBBMEQxMUQ5QUM0QjZDQgorCitEQjRCRTRENkNGRjEzMDgzM0ZBRTRGMDMyNDlDNDUyOTg1NzE0NTU0ODA2MDNGNUVGRTJDMTg5Mjg3NTczN0VEMUQ1NjFDMzkzODY4OUUKKworN0NCMzBERjVFMjZENDc5MDgzQ0E2MTAxNzY1MDU5MkFEQjAxQkY2REQxMjgwN0I2NUYyQkVCNkM4RkM5NDlBQzVBMUZGQkU4MDc5ODE3CisKKzkzNEJDODg5N0UyNTFGNEM2QjI3RTdCNkI1MjQ3RjVFNDhDMzlDODRBQjhCNzBCMTRBODY4NTUzQjVGMjA1Rjc5QjgxNjBERURFMjE3MgorCitBMEZGMDdBRUYwNzM1NzgwNzM2RTVFQkVGN0U4MTg3NjQ1NTc4OTg5NTE4RTEzMzdEMzUyQkRCMTkyQUY2MTg1ODc3OEQyMUQ3QjQ0QTkKKworN0MyNkY0NDU2NDg1Mjc4ODU1NkU4NEQ2MDYxOUQxQ0M4NEU0QjRBMEY0OUNBRDlCN0I3MTM5MzBDOTU3QzYzMjExNzY3NEM1MDMxMjBGCisKK0M1NjRBMzMxODU2MEMxQzU3Q0M3NkY3OEI4RTFGQ0E0RTI0RUZFMDc4RkRFNTFBMjREMTJDRTFCNzk5QTA3MjMwNDQxQTA4RUFDRjBDNworCis5RDUxNDE2OUU1NDNBREU5Qjk3RUVFRkJDNkM1MENFQTIwRDVBRjQ4MUU4RjJENUI2MjNDNDQ0QjQwOUZDQjFDQUVEN0MzRUE3NzU0RDYKKworQUQxNEJCRTExRDcwN0Q2RkQzQTcwMzg0RTI3NUREMDZBODA5NzkzQjg3M0U2NDZCQTE0M0JFODE2OTcxMTM5RjYyRkUwMDdDMzEzRjdDCisKK0M3MzcwRTFBM0VGRDE4RkZGN0JERDhCQ0MxQzY3NzYxQTZEMUVBRUNDN0Q5NTNDNTg1OTZDMEI1NDExM0M4RUI1MjJGRTZGRDgwNjhGMAorCiswMkQ2MEM3RUU5MjQ5MUUyRjhENTA5QTZFQjg3MjE5N0M5RkVEOTZEOTYzQzY1RkM5OEYzRERGQTM3NDhEMzNBMkE4MkMyMkNBNERGQjcKKworRERENDlGN0Q2MjJFODU5RkU4RjBEREY5NTE0NEU2QkJFOTA2MTY3Q0NFRDBENjVFRjA1MzMyRTU5RDczOTA2Njg1OTgwOUYwNzk1RTA3CisKK0RGOTA2NDk2OEM1NjQ4MTM0RjUyNzMzN0NDNUY2MTBENUI5NDFGMEFBOTc1RjY4MTdCOTIwQTMxMThFQTYzREU3RkZGM0Q1OUJGMTQ1MQorCitFMjQ3NEJGRTU3Qzk0RTAzQUM0MTZDRkRGQ0E1NTk0ODFCQjU4N0E5RjgzNjYyNjBBODg0QTIyQ0U5M0ZBOEExNzJBQjc3MEMyREM1QjAKKworMEI3M0M5RkQ5RkRGNUUyNDJCQTlCODQ1RkE0REI5Q0RDQTIxNDlBNDQ3OUVBNzdFNjlFOUYzNzQyQUI1NzExNTE3QkZDREIxQjNDMTk0CisKKzcyMzFDNDM3RDlFNTBDNDIyMThDMzU2OEFDRDk1M0Q3NDJEOUUwOTNERUZEMDRDMDdGMkQ1RjE1MUQwMEIxQ0FEMDg2RUZENUIxMDQ0NgorCis3NDg1MjRDMDcwMTIzRjIxQTA5RUVBODM5RTM4MTUyN0RGOThERTFCNzM1QzExMTE2MjhBMEZDRDc1QUQ4NjNBRTQ3QTM0MjA3REYyQzcKKworOEQxQTUwRTdBRjMxMkJDQzk5OURFNDlCRTBGNTRBRTczMzdCMkI1RDgzQzRGNTUwN0E1MzU1QzJDRTI5MDBDREU1MUQyNUE0MUI3NDA3CisKKzIxMzQwNzQ3MDhGNTU4RERDMjJDMTRDNzQyNEE2MTFFMjgxNDEzRkVGOUE0MzhDOERFNEJCQTZCQzY3QTZGMjZGMEUxRUQ5MjU0NTEzRAorCisyMEVGRTM2MUE3NDI2QjJFOUJBRDQ4ODkxNTIyOThFRDM5N0M2QUUxQjdFMEFBMUY5M0E0QTcxN0MxMzQzOUIwMjM5OUM3NzNERTg3RTUKKworQTdBREEyQjE1MTQ0MjQ5MzlGNDRGMTE0RTBFNjYzQUVGRkJGN0JBRUQ1MTY3MEQ3ODlBNjcxODYyNTY2Nzc3QzkzRTYxRTRCQjVFNzQ0CisKK0ZCRkFFRDk0N0JEODk2REE5RTFDOTQ3QTFFOUQzMjhENkIyQjM4QjIzQ0YwRUQ3OEJGQzM5OUI5QkMzOTVGMDhEQkY0NTdGQUI2RTQzRQorCis4NDc0NDg1OEY5NEE3MjlERTg0NkFBOEU4ODhDMUEyMTVDMjNBMjk3QzJEN0E2OUYzQzYwREE1M0VEMTJGQUU2NDNBN0ZDMTVGQkI2ODAKKworM0E4RUQyNzVEQjNEMUUwMTk5QTcxRjIwM0M4RkUxRjU4RjM5Mjg5MzAzQkY3QUVFOTI4QzA5MjdFRjM0RjE2MTRDMjNDODlFNkZFM0ZCCisKKzEzQUI2RkI5MUVCM0RDNDcxOEE4QzAzMUQzQzdFQzExMUYwOUFDNzlBRTNGNjI0NUQwOTQwQTQyODRGQUNDRURBNjQ1QTEyOUE1MjQxRAorCis5MUU4MUI2MjcxODlFMTgwOUU0RTRDQjg2OTBEN0QxNjg0NUMwRTk3RUVGRDdGODhGRUE5NTlGQjU1RjcwODMwNjU5Q0IyMDAyQzY5MTMKKworNzg3MERBNkUwNjEyMTAzNDRCNUNDNkI5RDAzQUM3QjU0NDFCREFBODFDMjU1MDhFM0Q1REQ3NjQ1RjdGREJFMUMwRTlEMjM2MDA0NUFGCisKKzJENzZGNDZFRTI2Q0Q3MDM3MTdBN0MyRTgzNDA2QUY2M0E0Mzc4RjEzNDAzNTc3MzVEMTNCNkM2QTFFOTQzNzA4N0ZBRTdDNDJFM0NDNQorCitFQjg5RUIyMTg0REE4N0U2QjUyMzE2M0QxNkNCMjIxRkI1NDZDMDM5Nzc0RjFDN0U0QzJEMTlDNjQ4RkYxRDA3ODY5MUNCN0E5MDUyNEYKKworQUUwRjE5OTAyODlGM0EwMUJFNUI0QkUzMTU0NDEwMkRCMDRFQjY0OTUwQTZENjMzRTZERDFFNzBDMUI1QjUwRkUwMEQxMjcwQUY3REExCisKK0M1QUUyMkVFMEJDN0Q2M0Q2RUQ5RURCQkMyREIyMUE2NTdCN0M2RTM5Mjg0NTUxQjY2RTk1OUVGNjI0REFFMjFFRjA1OThFNTk4RTVGQQorCitEOERFRUUwQjg3QUUxQ0E3N0M4OTAyQ0M4OTI3RTc0QjA1OTlCOERGODY3RERCMjg1RjMwODE3NjM5MjQzREI3Rjk3MTkxRkMxNUFGQ0QKKworMzRGRUY4QUNGQUY5MjZBRTYwQzEzREY3MEFERUVFNzBCNEQyREVGNTZERDY4OTBDQUNBMzlFOTRDQUNCMkUwMUJEQ0UxQTI5RTk2NjQzCisKK0NDOTMyOTAyOEM5MzFBNUY3NDg0MjYwMzJDRDU4NkU2RDc1OTAzM0YxRTQ2ODMzRTkzRUZDQTBBRDg5NUNFRjEzMTEzODBCODc4MkI2QworCisxNUVERkZDNzM2QTkzOUM2Q0E1M0JERjY1Rjg4NDg0RTQwNTNCMDc2MzU4NzgwRDE1NDlDRDZGRDAyMzQ1ODdBNDYxNkEwMDhFNkZBQTcKKworRTVEOUVDNDU4RkIyOTNCMTQzQUYwODU4QTg1MzJGQzZCOUU2RjY5Nzk3Q0MyNzU0OEYxOTYxODc3QjlDNzQ5MzYyQzJFM0JENDEwNTZCCisKKzY4RTI4NDI2NzE1NkM3MkE4OTA5QTg2MDM3RjZBNzU1QTgyREYzNDk5OUM2OTU3QzQxNTIxMkQwNjBDMTUxMTRENUZEQUZERjAxQjNERAorCis1NjM0MjhCNDAxRTg1MTA1RDdCREQ5QUE5OEU1NDY3MDU2MTM1NEQwODJCNUFFM0MzNzBFRjlFMkFCMUJGOEE4RTNCRjYxQjQzNDhDMEMKKworQzZBRDI3OTVCNDUzRjhGODFEMzZEQkE4ODQ3MTQzREQ5NTUyMDNDOUEwREZBMjNFMzJFQzIzNTVBRkQ2Njc4QTJCMDVGRTZFNDZDREFFCisKKzNFOEU4NUFEQjRBQjcxQjdGODREMTI2NkVDOTJBODQ2RjA4MTcwNjk0QUQ2NjU3Q0E0N0Y1NjA1MzVEMEZGNTcyNUM0MUNEMEZCMzIxOQorCitCOUJDQTVGOTU0NTY1ODI0OEQ3OTg5NkE4QjVEREYxOTY4RDREOTVBMzdFQ0VDN0Y0NEYyQTRENjg4ODIxNEZCMTk1NDFBRENBNjlGNzIKKworOTRCRUY2MkMwNTIwRTk1Q0JBNEEyQjE0RDEyQkFEMDA0RTY0NjhEQzEzNkM4OUFDNTA2NTcxOUI5MTc1QjhBMTE5MkM4M0E0MzU5NUIyCisKKzY2QTE5NkU4MjBFQUM2Q0EzNTQ3Mzc0RkIzQkYyM0NERjE0RDkzOUI2N0RGQzVERUE5Rjk4RDgwNTQ1QkY5M0NBNjcyNDBGOTdBMUE1QgorCitDRDEzN0YyQTQyQkRFRTc1NTI5Njg2MjNFNkNBNjU5RkE0MkVDNUMyQ0JCRUYyRTI3MDZEMDZFMEUyQ0VBMjI1NDgyMjE0QjlCNkM0NUQKKworOTdEQUYyNDg5OUVFOEJDNkQ4QTk4MEU1NjIxMDc1QjlDRTgzN0I3MjQzNDAwNjZCNzRDMDEzRThBRDgwNjI0MURBNUExOEJDM0U5NjU3CisKK0VGRkQ0QTE0NDM3MDRCOTBGRUFGRTBBNDA3QzdDMkU4ODBGRTk3MDU2MEJBQjA2NDkzNUYyMDlCMTk3MUUwM0MzM0IyQjM3QUZCNDQyOAorCiswMUE5QzRENjNBNkE5MzkxMEI2MDdENDI0NDE2NjIwNTU5RTdCOTVBNTBFODc5QThBMDYwN0EyQ0ZBQjI2RDQwODU4Qjk1NUM4Q0JFNEMKKworQzU1QjY3MzZGMjBFQjc0MzlCMUNCOTZDRjAwRTkxNjkwNjU5MTQ3QzdEMTYwOEU1MjYwQTJFODRENzQ5RDkwNzA4QkZEQTkyQkQ1ODM0CisKK0ZDMjI2MTlBNTE3NjREQjREOENBRTY0NjNBQUU4MDUwM0Y0MkNCNEU3ODMwQkU3OTZFNERDQjEwQTFFQURENjM2Qzc5REQxQzE3NEMyNgorCitERDQ0ODMwQzM4RTkyQkIyNURGQTcwREZDQkJCMkQwQjY5MkQzQzU5MTdGQjY2OUJCMzZBQjJDMkMyNkFCRjJCMzVDMEI1ODFGNzZENzcKKworNjQ2NDRERjg5RUU4Nzg2MkRFM0Q1QkMxRURDNzQ5MTJFNEYyNzk5ODM2MDIzRUY4OUU1RTgxN0RGNjI1MkI0Rjk1M0RBNEZEMEJDMDJBCisKKzRFMjJGQTc2MjA0ODgzN0ZBOEM5OTQzOUJCMUZDQkY1RTIxNUI1QjQzNjg1NzVFOEQ2NzY5RTNEMDFBOUEyNTJEN0IyMDMyN0I5QjMxNQorCis5NUMwMUJBQ0NCNjVBMzhGRjA0QTU2MTM2OThBRjJGQTYzQjM2QkM2OTQyRUQyNDFFMUVDRUI3QTlGMkU4RTM4MUQzMDAzMjlDQkQ0RTMKKworMUIxOUJBMEFGRjY0MTU1NjlGODc3NEIyOENGOUU2RDM0MzQxM0FBMEQ0MURDM0MzRjY4Njg0M0JCMUI3REFBMjQyQTYzNUNGMzQ1MTM3CisKK0IzRkQ0QjYxNjJBOURFRUE2QkZGMUU3MTlERjYwMkE4RDc5Q0Q1QTYwQkIxMUYyNkQ0MzdCRThCNEEwMzlENkMyRDY0QUJFRDUyMEMwNworCitGMDlFODAzN0E4RDc2RDdFM0FCQjU5NDZENDgzN0YxQjEyMjc0RDBBRkFCMjlBNDRFMDI3QjJBOEM4MTU3NEI4NDZBN0JBOTQ3NTZBRDgKKworRjMzRDJCNzZDNzlGRTREOTRDQjM3NDlBNjRFQ0FEOEFFOUQ0RDRFRTIxOUQ1RkU0NTI0RUM5NUNDQjg5QkEzQzczRjIxOUE4OEY2NzRCCisKKzJENDBFMkM1QjQ0OTc5MDNGQUVBN0JDM0M3RjIyNTkwRjhGMkQ2QjYyMTUxODg1MzgyMTUwRTk2MTFCQkMzM0Q5QURDRTY5NUZCRjk0NworCisyQUY3OUVCRUEwOTE2OUZBMDA0N0UwOUQ5NDk5RDdBOTc3RUQ3NEU0REVFM0JGRUYxRUZFMDE5M0FBQUY5QjhBMkUyODVBQ0U2M0ZDQjAKKworNERENUFBNEZEMzExRUI4MDA1RTgxREY5NzBEMkMzOTI3QjkzMjdDNDA5MzIzNkJDOThGRUFDOEUxMzAwMDEyMzlBODFDNDI2RDQ3N0M3CisKK0I2OEFBQzQ2NjgyMEY3RTY1NTI1MTU1MENDOTc5MDc5RjMyMDBGMTJCNkRDMzVDODREQzVBMTlFQjA2MzBCQkYzQ0JCMjUzOUFFRDM3RgorCis0RUFCQzQ2NENDNUE4QkZFNzU1OTNDN0YzQUE1QkVCQTZDRUUxQUEyREM0M0U0MEFBODIzMjMyRDY2NzE0QzA1OEYzNkEwMTJBOTIyRUIKKworMEZBMEI1ODUxMEMxMjM5MDA0Qjg0NzMwQzFDNjlBRUI0QTM4MDg0QjZFNDY1RDlFQTA0NTgwQjgxMTBDOUIxQjAyM0NCRDFFQTQ0NzUzCisKK0Y3Qzg3MzkwQTg4NEJGQUM4MjVEODRCOTNDRTRBQjUxMzYyNjRCOEExRTBDMzE2NkU5NEU4RUZBOTA3MkExMEFGQjc2MEZGMjI2NTAxMgorCitBMjU0RjA3NTVGODFFMUU0MkFDRTNDRjAzRDQ0M0Q4MUYyMzdEN0REOTU1NUYyNDQ3MTU1REQ3NkRDMDc2RjNCRkM0OTIzOTI4Mjg3MDUKKworM0VFNkJFMDVEREZFMzBBRjIwMTZGRUE1MzE1NEFDQTkxQTYwODlFOTgwNzQ1NUE1MzY3NTMwNzhCNzI5NDQxMTc1MTQ1MENFNEVENjNECisKKzBEQTRDOTkwN0RBMjEzNkRFOTZBNTI4OUI3ODMzNDZDRTdFNkREMkMxRDg1Mzk1RjkxMzczQzEzOUIzQ0ZGQzVERjFBMkM0N0YzMjUzNworCisyMzI2OTE4MjBCRTQ5N0U4MThCQ0E1NjEzNDU3MDdBRDk4MjQ5REM0MDA2MkUzMEQ2NDdGQTk3OUVGQUY0RkE1MEFEOUNDMjcwRDQ3RUQKKworNjhFMUU0NjJGNTRFQjY5RTZENzM0QzZEREI0MUI1QzJCMUQ2MjgxQUQzQjlGNDk3QjNCOTZEMEM5NEFGOTM4RTlFNzg1QTk2REU1REVFCisKKzlBREZGODM0MDYwMEIzQzE3M0I2OTM5QjVCMDZCOEYxMzQxMjc2RjcyN0VBMTY5MzMxNTFEN0RBOEYyNTQ3ODZFQkQ2QTAzNzJCMTBFMgorCis3OTA1OEQyMzI3RjI2MjBCMDM5Qzk0NTNFRkE5Qjg1OUJCNUJENDU5RTdDQ0NDMzZCODAyMjE5MzI2Njg0MDNGNjJCRDAwRDFFMzE3NTgKKworRTY0N0ZFQzFGQjgxNkI2QzUyNDUxRTZGRkM1MEVBOEQ1MjI3NzE3OEUzQzRBRjVCMkE1OUYzODNCMjcxRkQxMzJFMjE2OTQ1QjY5QTM0CisKK0IxMzY1MEY1RUVGMTI5QTk3MkE2OTVGRjJCQTEzOEUxMDkzNUE1NjRBRjkxOEE2NkMyRDUxQ0Q5NDJERTdGODQzMTI3QTNEQjgyODc1RgorCisxQTE0NjYyQjBDM0ExNUJFNEJCRTFEODc1RjhDQkU1NEM3NDg4RjQxMzEwNzQ4MjJGRDQ3QzU5QUE0QUNGMThEQTk3MTRFMjYxOUM4RDEKKworOEE5RUJENTA5OEFBQUExMTUwRDgzNjgxQTZFOENDQjA3MDc4NEIxMjhGNzM2QkZCNDNDQUY1RjIzOUU5OTM0ODc4QzAyMzI4QkQzMDg0CisKK0NGNTJFRUIyMEEyNkJDMzZFNzZBOERGQjM2QzlDMTM5N0IxNkQxNjIyNERCQjlDNjRBREVEMTkxRTBFNTNDNjFCRTdEMDU2MzU1RjIwQQorCisxQUQ0RUUzOEUxRUM4QzE5MjdDMkNBRkQzNkZGQUMyNDI0MEJGMDdDRTAxRkYzQjVDQzU4NjZCNEEzRkVEMEJFQjg2OTVFMjNDMUUxNkQKKworNkRFMjg4M0I4QTY2QTI0MDAzMTNCMjYzRUMyRUU2MzQ4QkUwMDJCRTBBQzJCNUI0MDZFMzkyQzUzRkQ0MUExNDRGN0ZGMjRCREU5ODkyCisKKzdBRUQxN0JERTYyMEQ1RUU4RjA0OTVBOUU5MTVGQzBGN0ZDNjlGODY1NTAyM0YzRDAwRTMzMDkzNDIzNDBBRkQzRjAwQ0U3NkQ1MEI0OAorCis1RTFBRjlEQ0E0RDNGMkE0MEY3QjAyNTU4OTQ5RERFQjZERDY5QTVFNjdCOEI1REFBMzk1NkVGOTdFNzEwQ0MxQkFBNzQ3NkI4QjUzNEQKKworNDg1OTYyNDA1NTVDN0EyMjBDQjAyOTY2NEFEMjc0RjQ3ODkwM0U5NEFGNjYwMjZGODU2MkNENkMxOTgzN0NFOTI2NUNCNkFFNTc4MjE3CisKKzAzMzZGRjRDN0EwRUE1QzI4RTA2OTAwNkNDNzYwRDNCNTM1ODY3QkQzNzZDMEU2QkZBNDNBOURFNUY2RDg4ODIxMURCMDZCNkYzRTVERAorCitBQTY2NjYwOUNBN0UyMjkxRUUwNTk2NzMxRTRDRTc5RjM0RkUwNTU5QUU4RTFDMjlFOEQ2MDAxNUE0NDVDMzRGOEU2NDNCNTMzNzJFQjAKKworNTMzMUU1ODE5NzA5NjQ3OERGQzQ5QjdGMDkyQTYyMDlBMkQyMDlEQzAyRUVCMUI3RDdCMTJFODlBMDU1MUMwNkQxQzNGMzc5M0Q3NDVFCisKK0JDNkQyRDZDNTc2MjhFNUJERkFFMDk5MzY5NzZEN0M5QUZCNjUzQ0U0RTZFMTk4NTcyQ0U0NjE4MEZGOUVCMDA5Q0ZFNDUwQkEyNkJCNQorCis3MDU1MjUwNTE2NTVDMzU1QjVENjExNDVBN0VFMDZERkE0ODdCMzExREU3MkE5NzU5NDVGQkI2NDgxMDQzNEY4RDczOUZFOTU2MzI2MDEKKworQTQ2QzZDOTVDOEJFMzY1MjQ1QTg5Q0Y3NjM0NzM1REExNENDNjhFMjNGNEU5RTgyQUMwRTBGODVBREU4NjI4QkExQkE0RjkxMThGODAwCisKKzcyMzc5OTAyODBDMTkwNjFBMzA1Qjg3QkRFNkZCREFCRTcxQTcyNzQwRTMzODkyNUFBODcxQzkxOEQ5MjdGMjhBQkIxOUZGRDJBMTI2MQorCitDODJDRDNBNDdCNzYyNDg4MjgzMDBFMTRENzFDNzVCNzc3Mzc1RDI5NzBERjM0NUMzN0YzQkUwMUU1NkEwNDdDOTlEMjdGNDFEODFERjAKKworNDNDMTEwMzM1MkZCQTE5NEVBQUE1MDA1NURBQjA3MDM0NkEyMEYzOUZCMDA3QkVCQTM0NjI3MzM3QzFCNzE0NjVERTgyRDIyMjExOTRECisKK0Q1QTYxQjY2NjY4M0YwOUUyMUY3NjQxOEE4MDg2RkE0QjJBREYwQzk0RDVBNzAyQTJCRTZCQkE3MUQyQTlGODc2N0IyQTM5MDIyOTQ1MAorCitFQjk4NjdCRUE2ODU5RUFENjg2QzYxRkI1MjE1NzAzNkJBOEY2MjQ2OENCOTM0RTEwREEwN0M0Mzk0MkI5NjRBOTJDMjc5RTNERjI2MzUKKworNTQxRkY0MDNDQzUwRjdEQUYxRjExNDY3ODNCMEQyOTA2RjY3NDI3MzM4ODA4NUExRjY5N0U2REQ4MjE2NDk1NjlCOENFQTI5MjA4MzBFCisKKzk1QTk2NjM1OEZDNkJEN0Y4QkEwQjkzNDk1RDA1NDk2N0I0REJGOEQ5MkVCMzM3RjUwQkUwREQ5QTAzQzIzRDJGNUI1RDlDNzNERkE0RgorCis3RTAxMTI1NDI1RUU2MkVEOUNFRjc4MTBDODg1NTNDQzY3MUE3REY5Mjk1RjUwREM0ODI0NDBFNDBENjVEMDkzRkI1QTM5QzQwODRCNUEKKworMzlBN0MxM0I0MjZCRDlCQTVFOERFMjlGRUZDRjAzOTE1QzRERjU3MENGRDg1NDZCMjc0Qjg3NUZEMEY4MEY1N0YxQTBEQTY5RjA5RENECisKK0Y5OEQyNzlDMDAwMUFFNkRFQUNFMzJFM0IyRDM0NDM1MjRDNUZFMUNEMjc3MEQ3Rjg3MzIwMTQ0MkIxQ0M2M0YzQ0MzM0QyRURDMEUxNAorCis5MzI3QUU2QzlFOTcyMEIzNDZBM0Q3ODNBMEVCNkQzOUUxMEM2RDhDNDJFMzEwQzM3QUUwNkJFNzcwNTZGNThFRDM5RDM1QkIyQkU4NkUKKworRUMwQkFBQkU5OTY4MkRFNDU3MzE2QjcyMjZFMEM5Njg4MDdEMzM3NzJBMjBENTA2NTgzNTNEMkE2RjA4MDRFNkYyMjU4NEFGNTg4N0UzCisKKzZBQTRFN0VGOUQ0NzAxNTNBMTE3NTlBRDQyREE2RUI5RkMwQUI1NDk2NTQ3Q0FEMEVCNzI0M0QwMzcxQUYzMzBFOURFRjNCQkRFMTE1QgorCitDMzEyRDA3ODQ5MzJCRTYzMEFDRjE4NTNCQzdDQjk3MjRFRjkxQjVCQkM0MkVEMjExQTlGQkY5MTA1RUQ1MERCRUM2MUVFQTI4ODU4RTQKKworQjU3OUVGMjkyOUYyODVBQ0MxMDEzMTFFMTgyQTI3REM4RjA1QThCQjA3NEM1NTlDMzcwODNENUFBREEyMDJCMEJDM0JFQUZCNzgzMUU4CisKKzc5OTE2QzVGQUExMTZCRjRCNERDNjhERjk0NDAzREIxMTM0RDk2QTcyQTgxRjcwRDJGMTZGQUM1NzY4QjRCQjQ1NEM4RENFRDIwMkEzMQorCisyMjFCMjVCMkUzRjhEQzkxMkMzOEZDODA4N0YyQzg4QjJBNTRGOTkzN0ZEMjU3MTEwQUI2M0ZGRUQwMUQ4NUQ0QjExNjFGMDg0MjBGMjIKKworMjcyNUZFQzRCNURDNEQyQUY2NUE4RURCRDNCNTlFNEFEQkZDMjQ3OEU5ODUwQjZBQkE4Njg1NTNEQ0IyMzMxM0JCRjZEMDNEMTc4RkYyCisKK0ZEQ0YzMzkzQjA1MUY3OTlENkM2MEFCN0Q1N0Q2MkZEMjNBM0YwNzY5MTU4ODJCOUJFMUUzRUQwQTNEQTg5M0Q2QkI2OUE5QkQxNUM4QworCis2MDdGMDIxM0QzNDY3M0Y4RkVEQTgxODdERjhDMjhFNkU0QTdCMUZCOTJCMTFFOTIyOTQyMDNBMzZGOTU3OTBFQUQxQjQxQ0M4MzM2NzMKKworM0ZCNkEwMTg5MzU2QzE2NjM2QkU5NjVBMjBFODk1OTQ3NDgzNDc5NEU0RDgzNjM0NDNDQTQ2Nzg5MDExNDFEOEJGRENDMzFCOTRCRkQzCisKK0NGOUU1NEM1NjY3MjNCQjUyQkZDODY4RUMwMkFFMkI5NkM2NTdGQjRGRTlGQkJBRUFCNzAwMDc1NTg4Qzg3NEY1NTlGM0M4NUUwMDdBRAorCitDRjc2QjNFMDM3MkVEOTdFM0U5Nzc1Q0ZDRTg5REI3OUQzOTY4REUyRjM5NkRERjRDNkYyQjY1QzkwOUExOTE0MzFGNUUyMTM0QkI4ODYKKworM0E2MjBFMkQ1Mzc3MTlEMkY4MkZCRDgwMkMzODhFQTY2QzQ1NEI4REVDMjdCN0Q2NjI0RkZBQTMxRjg1QzVCMTNEQTk0MUVFOUE3QzkzCisKK0E1RjlFRTNDNTM3QjcwOTY1NjY5NjkyOTg0MENDMDVEMkU2MEIyODVDRTExNDAxOEYxOUQ4NTZERTZBMTQwODI0NkMzQTJFRDA4NUFCRQorCitFMTBDN0I3RDFBODA4MEJERTJBQUVDNjJGNUQzMEM2RUVEQjY3MzNFQjk3QjYyNjQzNUM5Q0FCNUZCNTY4MTBFM0UxOTI0QUIxNzAxMDIKKworQUVCMjQ2OTk2NjFEQjI3QzVBOTJGNDBFNEJENEE4ODY5N0VBNjIzQTNGMkY4MEUzRjIxN0Q1OUI1MDY0OTA4NTc1M0U5RjE2QzU1QkQxCisKK0M0NUQyQzU3Mjk3Njg5RDEyRjU1RjYyRUEzNDhCNUZGNjU4MEI0OERBODVCOUJBMDU4MzQ5MDI0RDFEREM3N0JCQTAwMEFDMEMyQjYzNQorCitERTEyMkUzQTlFRUMzNDM0QkM5Qjk3QjM1NDZCQzc4NTBDM0E0NzIxMDEwMDJDRjA1QUVDRUQ2ODhDMzhENUFCODI5NjZFNDVBQzRDRjcKKworRkYyNjZBRTBGNjg2NjlCNUVBNDlDNjVBNjVBQ0RCRjlBODMwOTg4QkI2MjVBODI2M0U1NzBFQTJDNkQ2QTc4NjI3NzM0NUVFN0JEMjhGCisKKzY3NUFBNjQ3NEFERDc4RTAxNkQ1OTlCNDE1QjA1NEY2N0VCMURFOUJFNTc3MTBERjIxMjI0MDVCNDgyMDE4RDI0OEIyOTYxOTg2MEVBMworCitBMjY4QzU4Njc3NTc2MUU2MjY1MUQxQkNDRDM3NzU2NDdERkJFODRBOTdDNEVCNjZEMjA0Q0U4MzlCNkRGODFFODk3MDgzNEMxOTNGQUIKKworNzNGRDQwRkRBRDI4RDI0OUMzQTA4Njc1OUQwRjdBMjM0NTdCOTEyNDBBQTA0NUZCNDUwRUJGMkY1REYyNEU1MTIzREZGQkM3QTYzM0VGCisKKzcyMzA4MUFDQkJFQkQ4RDk5QzQxQjdBQkQ2QzFCM0NCQjUyRUNBNDk3NkY3NDg3QUQ3NzgwODA1MkQ4MUNFNkYxMjgxMDk4ODFDMzJGMworCis4MjdGNUVGNTkwMjIzMDFBRTc5MTdCMkQyRTVDNTZGQzgyMzg2Q0MxRTA2ODRGQjZCNDNBNjdCNTFBRThCMTJFNUI4MkM1MjE0RUI3OTgKKworMzhBMDA0QTRENzA0RTAzQkE2NTAzOEI4NzM5OUVFMUY5M0VBNENERkZEMkNCRkEwQUUxQzFFODEwNzNCRDg4MjAyMDE1RUI5RUQ1NzBFCisKK0RCMzNFMDE3NzczNDNERTNGODU5OEVCRjBDRTFDNzlGOERCRjQ5QUM5QTZFMjZBQkU1NkQ0RTM2RDc0NTJFNkJGN0NEODFBOTkwQjZBQgorCitCMDU4MjRCQTJDMjk4OEQ1MDlFOThFOUE5RUNDRTNGODY5RTFBMzAxRTdBOEQ2OUMyOTNGQzYwNTA2Qzc2MkE2NUU2NkEzMzM3MzFCQjcKKworNzg4NkU4MkRGRkFCMTg3RTI2NEJCOEU5MzkxMjUyNDRBNjU4REIwRUY3Mjc0Mjg5NjlDODZFNDI0MEI4NjAzRjZDRUY3NDY3QkE1MDBCCisKK0ZCMkEwNDYxRjg5MjlFNjUyRUI3QzY4NEI2MzU2QTRGMUIwMTMxN0JERTRDMEUyNzhCQzlDMEQxOUQ3RjBGMTA2NkI3OTE1QzE1NDgyRAorCiszNDdFQTMxMzIzOTM5MDg4NDY0NUI5RDkyMTYwOTYyNTdBQTE5OTQyNTk0NEI4OEI4RTYwRDFDOUQ4MThFNkM3RkE1NzQ4NEU1NzNGQUYKKworMjY4MTkwMUNGRkE3QjAzODM3MjUxQkRDQTQyOTYzNTk3RDU5RjVDNDdDQ0Y0RkU2MTk2M0Q2OTk3RTg4REFBNkE4MDE4OUY1NDEwOEFECisKKzkxQTYxNTUxOUVCQ0FBMDI5NENFMEQyQTNENkQ1MUJBMjNBQTUzODU2MUFBQ0IxODU5RjlEOEU3QzdGQkVFREZGQTU5RkRBMzBDNDkzMAorCitGM0M3MDI4OEFFM0I3REI2ODM1NjEzRDc5NzVBRkJGMTI1NEVEODBBMjkzQzI4NkE0MDBFNzQ4MTZEMDdBRUI5Mjc3MzBDMzk3RUIxQ0YKKworMDQxMTUzRkM4MjFFRTM1N0NGOEQ5QzFDNTVDQTFCNTc4QjYwM0E5OTQ2RThCNjIzQUI2NDJGMjI3MDQxQTE4QTk4N0M4QTgyNkI4RTY3CisKKzdGOERFRjVCMUE3QTg5NkYyRDA0Q0ExOTcwM0E5NDkyQzM1NzQ4QTBFQjM0NjE0ODQzQ0I2NDM1RTM2NjUwQjFEMDMxMUQ4ODYyRTc4RgorCitBODcwQ0JDRjZBMUE2REEzMUZDMUJDQkU5N0IwMkI5RjlEMDYzOTc1QThGNEI2ODFDRUY4RDcxNzBDMUQ2NkM0MUJEOEJCRUQ3QzRERTQKKworNUVEOEVBNEQ1RERFMEZCQzlCMTEzNDlBRkZGQUJGOEM3QzYyQ0Y3MjA2NEY5M0NEMzZFRTc4MUU0NTkzODUxM0U2NTE3RDMyNTEzN0IzCisKK0M4QjA3RjZDODVDRUM5OUZFRTczQzE5RTMzMTlDNERFNTQ5NzNFOUYyMzdGRDRGNUY1MjJBMUUyNDdEMTNBNUEzRjc2RDlBMjIzQzFEQworCiswNUREOThBRjJGMjg3MERERUVDRDFEMTc4MTZGNjM2MkJBNEU0QzNFNzY3ODIzNDk2Mjk3QkQ2MEQ1QUU1RjNCQjE2QzQ3OTQ2RTFCOUQKKworNTk5RUUxOTQ1REU4MTg5NkMyMEUwRTFFRTVCQ0NBM0E4MTdGMTQwREFCOTEwNkM2QTM5Mzk2MzU2NDQwRTI4QzhDMzdGMDkwODNDMkIzCisKKzhDMEFGMzIyQTVBNkU5OTExOTYzQkNCNjc0RDYzQkZERjA4RkUyQTczNzhERkM1MjkyQ0FGMjlFMjlGMkM2RUZGMDAyOTlFMjM2NzNDRAorCitCRjk3QjkxOUU0REVBQjc2QTUyQkI1ODhDRkY0ODlENkM5ODRCRTY5NDUxMjE1NTVEMkQxMUQ1NzYwOTM1QTE4QzdFRDU3OTRBODU5MEMKKworQTlFRTdDQzcxNkUxMkU1RTUwNjA0RTRERTI2QUU3RTgxOThFRjcyMzIzQjhCNDQ5QzcwNTk4MzFGRTJCMzJDMEI3RUQ0Rjk3N0Q0NTVBCisKKzc0QUM0MjMzNUY5MkZBQkZDNjlCRjc5OEYzNTA1OTg3RTEwRTZFQTRCMUVCQTdEQUNERjJEOEY3NkExNDAzMTY5ODUwNkY5MjA0MzlCNQorCis1NDJFMzM0RkIzODgwQkVDNzU2MDk5MjZFRTk5NTI5QzRFOTIzRTM5MzY5RDQ1M0E0Qzg2Q0FFMjQxREFENDk5OTk4MTlCNkQzQ0M4RUQKKworN0Y5OUM0ODE2REQwMTA2NUREMzg1RDQ3QTU2QjNGRUQzNkUxRkIyNjE3NEUwNDI4Njc3RDRCQzUzNUEyQ0IzNTY0NkMxN0FDNjIxNEY5CisKKzNDNjhDN0I3MDJEMTY4QjQ0MzlGRDY2QTQ0RUE3NkJBODA1MTgwNTM1RUIzMkRCQkZFQzI5RDRCNDUzMzE3QzZGMzVFMjFDQjQ4MjQ5MAorCis3NEYxQzg5QjNEQzZBNTNGRTU4OEY4REI0MDhFQkExQzYwQzlGMkVBMDEzRjE1MTdBOERCM0NDOUEwOTdBMjY0M0MwQ0U1M0VGRkU1QTUKKworRTVCMjZDRjQwRDNBOTMyNEYwQkQzNUI2RjUyNkU4M0QyQTM4MUU5NzZFMDBBRjE0RTdGNEZFMjJBREJCNzEyMzZBNTA2OEUyOTdDN0Q3CisKKzA5OTQ2NzJEODZGRkJEQkVENDU0NjU5RjU0Q0FGNUEzNjRGRUM4MjY1QUJBOEY0RjJBMDQ3RDU0Qjg4M0U4MUFENDhEMDk0REU3OEEwQQorCitEMTM4OUY1RjdCRDBCMzZCM0ZBMTFGODg2NEQyMUU1N0Y0NTNBQ0JFMkE4OTJFQjZGMTI2Qzk4ODE3OTlDMDIxNTAyNDI4QjBCRjQ4M0QKKworMzA0Nzc3REMwQUZCN0JBQ0NGQTQyQUFFNDMxMjFBMjQ1RkFENENFMjMyNDgxMDJDQUY5M0M3MjAxNjk0MkI1NTZDRTU5QTI4NTZCREQ4CisKKzdDQUI5QTIyRkM2OTBCMzBFQ0Y4OTI2Njk5RTEwMUQ4Rjc0RDk4RjI3NTlFODE5MTQ4RTU0RUVENjM5MkYwQjIyMDMwQUZBNjU1RTA3QgorCitFNkIwRjZBNTgyNjZENUFBRDgzNjVEMjc5RkE1MTU4NEVENEJERjVFOTgxRTMxNzMyODY4Nzg5MzYyQTEzRjY4RDdFRUMzRUNDRjQ2RDkKKworMTg1NzQ4MkRDQTAxODk0NEFBQkY5OTNGOTA2MzVDNjAyODAxMjI0MEQ4QzY3MEJFNDhFNEJBRDI5QkJDMTE4REEwQjczM0UyMDE5NTAyCisKKzA5RjJDNjA4Nzk4RTNGQzZDRDM2OTlCNjFEMjA3NzUzQTVDN0UzMUQ1QURCNjEwRjdBOUZGMzZDNkU3MzQ0MjU2OUYwMjVFQTVFOEE0RAorCitGQTg5RTQzRjEwQjQ0QzkwNzAyNDMxNkYwN0I0MTgzQjIwMkU4Njc3RjQ0NDk1MjBDQzA2MzYxRjA3NUJDQzA2NUEwQzQ5MTEzNzMyODEKKworODhGQUM3MkVDMjRCOUI1MjUwMEQxMDM3MzdENDBBMzExRDU3NTJFQkE1RjA2RUI1OTNCNTYxNDdGNzA4OTE0RDQ3NEI3RTY3RUM0OEM3CisKKzMyRDQwQUI3Qzg2NzFFMEM4MDI5NURFM0IyQ0U2OUM5NzU5QjUzNjUyMEVCREE5Mzg3MjkyMTRDNjhGRkVGQ0ExMTlCODY1QzJBNEJBNQorCisxNTk4NjMyM0FEMTQ5NjM2NzkxQUQwMEIzMjhFMEUyRDQ3QUVDRjQwNkE0M0Q5NEZDODdDRDUwQUM2NUM1RDRFNTVFQjI0RjQ4OTM4RTIKKworODMwNUUxREYwQzZBREE0MkNBNDc2OTEyNDY4NjBGNTBBMkE2MjkyRjA1OTBENkY4QzQwNzZGM0M2MzI1QUQyNUZBQTU2QTM2MUMwM0MyCisKKzAzNjk0QTM5MTAzREQyMDlDMDRCODVFNUI3NDBDRUMyMjI5OTNDNjc2NzUwQkY5Mzc0NDhFNEIwRUZDOTQ5MDNGQTA0QTY1ODk1MTEwOAorCitERERDM0RFQ0NCN0I3MUI1NDREMDMwRTZERENERERENUQ4QUJCRTkwODYyRThDQjRFNjVDMjk4RjJBRTRENkFCNzczMDkxRjYzN0NGOEMKKworQ0E3NTU2OEU0NkM1QzNGNkQ4Mzc5NTRFN0MxRTRBRUQzQzQ0OUZCREM4NUEzMUM4N0Q0NTc0ODVEMEMxRkI0Qzk3OTU3OTI1RUFCQ0FGCisKKzgwQUFCOTYwNzg4MUZEMUVFOUREQjk4NjkyNzNBNjlBRTI4RUU2N0U2OTRBN0FDMTVCMzhCQ0FFNzYxMjBFODRBM0E1NzA0NjZBRjg4QQorCitDMTQwMjQzQjkwQ0UyQTBBMjA2RjcyNkFDQTEwM0Q0QUFERUY5N0U1QjVFNEM3NTNGQjA4MzgxODIwRUM4MDU2Mjg4QkNBRjg2REQ3MTQKKworQkM1NUJBRTgwRTg2NzA4MDJBMzBCMjQzNjFCNDgzMEU1NTU2M0E3NEU1REI5ODYyQ0UwQzVBRTk3MkVGOTE4OEE5RDk2MUVDQTVFRkU0CisKKzQ1REQxMUZGMjQwQjE5NzY2RDI2MUNBQzMyRjJGQTI0QjhERjk1REQ5QTVBRTZCQzVBQkQ2NkUwODgzREU4MURBQzgwOEVDOUU2NEQ4MgorCiswNkJGMzREM0Q0MThDRDE1MDJDMUJGODY1RkI4OTA0NkJGMjI4MzIzQzlCMjU5RkVEQzQ0QTI0QjQxQUZGN0Q0RTYyMjdGMzNDQkM1OUQKKworQkIzMzYzM0QzMUJBMEY2NTRGNDg3NjJERTVEN0IwQTAzMDc5RTY3MjA2QzQ2NjFCQzQxMEYzRDVGNDZERjEwMjc0MUM1OTQ5QUY2MUM4CisKK0JEQjg1NTJCQTAxQUVFQkFBMTgzRUQ1NzY4MUZBMkZEOTJERDRDNDBFOEFCMTBBQUQ0ODU3ODg4RERFRkE1Qjg0OTAxOTFBNjI5QzBEQQorCis2RjA5OTYwN0Y4NUVEMTI0MTdFODc5RDc3MEUwMTZEMjk3RUQzMUU0RDM2MDgyQjY3MDAyRjgzMzU2MTIyN0EyODg5MUI2RDJCREMzQ0EKKworQ0YzRjZDQTNEODMzRThCMUU1ODdCNDkwMEY1QkNEQjI5NUREMTYyNkJGQ0Q1RDlCQzMxQjhDQTA4NkUyNjRGMjU1OTlCRTQyRTA3RDU4CisKK0FEQTZFMDU0OTcwRERCRUJBNThENzE4NUVCMDAzQUFBODY5MTM4RkIzMUVBNDc3Qzg4MUU1NTZBMEIzNTg0MUFDMDk1RTIyNjUyM0IzMgorCis3NzNFMTI4RjU0MTA2OEE3N0I0M0Y2MUJBNzg5MUYzNzc4MUZDNjI3QzM5NTg5QkE0REJDQTRERDk4QzdCRkEzMTFBN0NCNkVCQzdFRjAKKworQTJBMjUzOTNEN0JEODREMDBEOTUxRDRDRjlEOUExODM0MDM4ODM4ODMwQTUwMzUyREY2OEM5NzAxRDBDRTc1ODQ2MjZCQTFBREYxRDAwCisKK0I1OTJGMzQ4OTdFQkVDNjI4MERBNTIyM0U0NkEwREI4NzVDQjEwQkI3NzJCN0NEMTZGMjZBRTE5Q0IxRjJFNTU0Mzc0RTg5Q0Q0RjdGMgorCis3NDg1RDkxNjlGRDQ4MzU0MzE3QjE2NDY1NzhEOTU2NTUzNDMwQkZGMjA5MDIxN0IxNUJBQjU1MEE4RTBGMzZERkQ2MDg4QTVFOUQ1MkQKKworNkI1MzAzRDlFMkMwQUVCNjA3NzQ5Mzg0REYwQ0U3NjY0NDMzNEZGMzZDMzUzODdENzZGRjg1QjgwNjQ0NjBDMjhGQzg5NUFBMEI5OTk0CisKK0MzNjcwRUEyNkU4MzM1QkYzMzFGNEI0MDY4MzZDQjdFQTQ1NzI1ODkxMkM2REY0ODA0MjA1MEM3RDMzM0JDMDJGRUU0NzQ4OTA5RkI0NQorCis4REQ1RDU1RTdGRDA0NDk3Q0UzNERCRTgyRTg4RDZBRTY0MTI1MDg2M0I4QTU3QjExNjI0RTYyQ0VERDgwRTA1RkVCQURCQTY0NjYzNjMKKworRUNFQ0I5MjFEMTFERjU5Mzk4OTFFNUI1Q0FCQjM2RkJERjgyMkVCRjE3RDk1MEVGRjNGNEU4NTBDRURDNUYwRkZGQzk3QUExNjJCRkY4CisKK0E2N0NENzdFRUREQ0Y1RDVGQzQ4QTMwM0RFQjJFRTcxNkIwQzZGNTM0NjlFRTIzQjU1M0Q2NUZDNENERTAwNEEyOTQwQzcxRTRCQTcyQworCisxNDgyQjJGRDJBQkZDNkU4QTg3N0E4MDc0ODZEODZEQTY5NjExQURGQUI5RTc2NTI3RTZBQzE1MDA2RTI2REZEQ0MzMzE0RjI0RDI3N0MKKworNTMzMDUxNjBBOUVGRDQzNzIyNThDNjlFODQ1N0VCMjRBRTE2M0FFOTk3REE2OTJEREJENkY5RjZCNEEwQTgwQUMyQzJBRkVDNzFCRUUxCisKKzNDOEVERjQzRjdBNjIyQjJCRjBDODYwRkNENjQwNTcwNEQ2MEI2QzcxNjQyRjI3RERGQzA4QThBMDJDNjEwOEI5MDM2QjVGN0NBRkJBMAorCitCQzBERDJFRTRBRDJBM0QwNjNFMkFBMDc4RkNFMjI2QjExNDY3QkFGOTkyNzE5QjU1RERGNUZGQ0UyQjM0NDY2RDRDQkZBOEZDNTY0N0MKKworMjIyRUJEMTFFRTYwQkM1NjdGMDVBQTM4NzA0RERBRkVDODkzNzQ2OUE4M0QwOTY0M0Y3Qjc5OEVCMjhFNURBODIzQjlBMDZCN0JDOEE1CisKK0MwNURDNzA1RjBBMTE5NEZFMTdENzk0ODk0MDM5NTYxN0FDMjVCQzkyMkIzQzgzOEM1MDdDMUNBQTk1QjY1QTJBNUY0MTkyOUQ3NUQzQgorCisxRURDMjYxOTMwQ0U0MTE2MzIxOUM4ODI3ODAzRUQ1QUM1MEJGODVBRjdDNjlENTcyODZFNTEyMEMwRjA4MTE0QkRDMzI3OEZDREY3NzQKKworM0ZDN0Q4RDVFQTNCNEQzRjJCMkYzQjdCNkM0RDYyRDIwQTdEOThBQUJEQjlCOURENzczOTU2MUIxNUZDRUU4MTM5QjgxRUU2MDMzMUQwCisKKzkzOUU5OTA5OUYyQjE2N0EwQUFBOUU4NUQ4MDMwNjJFQ0M2RUQzNjkxNkM3NUVCNTgyNDNDMjgyNUJFOTdGMzAyMUQyM0Q3M0ExNTYxNQorCisxMkVBOTA0QTk0OTI0QUUxQjY2RjVBQTYwQUZFM0U0N0U1QTM3RTVCQzUzNTcyQkJENTc4QUU5MjNDNTQ2NUY4MjQwNTY3MDNERDFBMUYKKworNUVGQURENTU3Q0ZBMzIyQzQ2QkM5NDQxOTkxOTBDOUFCQjI2MDRERjJBN0I1NTQ4MEM1RDcwMzVBRkI3QzdBNzQ1OUEwQTIzNjU3M0I5CisKKzkxRjQ2MkFERUY1OTUzQUIyRjQ1Q0Q4MzdEQjIxQ0FEQTZEMzlDRkZEQkEzNTU0QzE2NkJBN0YxRkQyODk1M0ZDMzhCODUzNjI3RkEyMQorCis3NTUzNzE0NEE2NjI3MDM1QTUxMkIyRDM2REE3MUJEQTIzNDEzMkQ3QzJDRUM0RjI5NzUwQzE0RkI4MTk2RDI1NkYwNTkyMkYyNkEzREEKKworRTIyRTRFMTRCNTIxOTZGOENGNzI2MUNFMENCQUJEQUMxQTJDMkUwNTQxQjBBQkJDOEUwOUIxNzMxRERFQkRENTQxRDk1NTdBRkJEOTBGCisKKzNEODRBODc4OUVFRDU5NkY2REVGRDM0RTQ2NTFCN0ZGOURFMUNDNDE5RkM3RkFGMUEzRTdEN0VFMTQ3RDYwNjg2RUZENUY1NUY1RDkxMQorCitFRkRENTVDNEUwQkE2NDdBRDU5OUUwQ0UxNDA1RjcxNjY5RkFCNjc5MUY0NjVFN0ZDMUMyNDdBQjRFNTJDNjRGQjJFNkExOEQ0NDYzQjkKKworOTVDRjYzNzk5OENCOTFCRUIxQjY4QThDM0U0NDYwRjhGMUUzNTE2OUY3OEZBQzJENjY3N0UyNDM4NTRENkY2Qzg2ODVFNTE5OUQ4RkI3CisKKzI1RTM4M0NGMzM4QjI3NkZFNzg1OTU0NDM0RUU4NzY4RkI5NTMxMUQ0N0ZEMzI3Mzc1MUU0Q0RFQ0YwQ0RFM0Y3N0E3NTEzQjM5RTMxOQorCisxODZCNDQ5NTAxNkZCOTdCNEQ5OTZGNEZCODZBRkQwMEVDOUY1NEFDNDRBQzUxOUJCQTVERUJGRDVGMzkyODY4MTdCMjU2OTU3NTBFMUEKKworNEYyMTBEQzhDMDZBODYyRjFGODhDRTNBRDdENTc2NDU4MUU1ODhENDcyQjhCNDA3Q0QwNzRBNUNDQjM5RDZFMTM4RkMzRTU4QzlDMDk2CisKKzRCOEMwMTk1ODQ3QTdCQzBFNThFNzk2RUU2MEExMEZFMDAzRjI2MjMxRUEwRjBFQjdFMTAwREQ2ODkwRjZBRkI4QzIyOTAyOTBBOTdERQorCis0RUYxRjVCRkZDMDcyOTJEMkI0RDI2MThBNDMwRkYzRTExNUJGQjM1MTE2ODM1ODkxRUVERUY0RDk0NTZEQ0M4QTI1REY1NDI5QkRCNTIKKworNzE1MUNBNDI1NzBGNDRDRjM2RDZGRDMxQTEwRDU4NjMxRjU5NjY1Nzk0OTVENjIxN0EyMURDNDM2QjdFMjZBQ0UxQzAzRTYyQ0VBRUEwCisKKzdDMDlBNjcxMUZBNkI3RjM0NTA0QzRFMDc5OUU3OTdENEQyNzc1RkZEMEU5QzJDRUQ5RENDOEY2NEY4NjM5REY4QjIwRUE5Nzk3MDhDNQorCis4MUJGQzU0RjA4QkFCRTlGNTM4NEUzNTc4ODVDNTRBQzMzRTBGRUQyNzIxNTQ4NDM2MzFDRTAzRUZEOTNERjAxRDE2MDBCRTY1ODc3QjEKKworNTFDNDEyMTkzNjc2NDFFRDAxOTJFMTJGMjZGODcxQjEzRUNCMjU4MkY3NUNBN0YxQkFCM0RGMEI4OTk0MkJBRDAzNkU5QUM3QTRDNzJECisKKzZFQkIwQkREQkFGMkY2RjlBRDI4NENGRERGMjkzNEI0RUI4NkU5NDk5OUQxNDMzRUZBMkUyNzgzOTREREY2ODYxODhBQThFNkMxNTE3OQorCitBQTIzMkFBRDI0RDUwMzZBMzlBNDlDODRCRjMzQUM4NjRGRDc2QkM5MUQ4RTkxNUYwQTYwNEI4QTRBQTk5ODM2REVFMDFENzJFMDY1OTYKKworODhGQkQxOTE5NUQ5MkY1QzdGRDk4Qzg2ODA0RTdEM0Y3RTgxOENDNjFCMzc3RUQ0OEI1REJENzQ0MzUxNTY0RkQ0RTgyQjZERUIxQTczCisKK0I5NjQ2ODQ5ODVGQ0JBQjk3QUM5MDNEREU4MTBFMDFCMjdDNDQyNjdCOUQ2QzNDRkRBNzQwMENCOTIyRjZEQ0M2QjcxMUMwNDVDN0MxRQorCitCQTI3NkVFOTE1OTM2NjQzQTBBNkNFQjQ5QzBERUE4N0IwRDY3QjQyOTRGMjFGMzBGRkQ1OTYyNkQ3NzdENUU2M0I1NDAwQjFFQjkyQTQKKworMDNDQjY4OEI1MzQxQzQwQTY5QzRENDEzRkY0QjMxNzc1MDUzMUVBREQxMUY4ODg1MUY2MzQ1NjY5RjU4QzUzRUM4Qjc2NEFBNjY2QkQ2CisKK0U1NEI0OEU0NzQzQjJFRUMxM0Q3MTYxQzUyMDM0MzNGREFERDlBNENCM0U2OTY0MUQzNzk1QTJFODEwQTQ1QkRBRTM1MzJCOTdBNTJDNAorCis5REI1NTJBODc2QzFBQkFBQjJFM0FDMTAyQzk4NzlEMjAzRDYyQjFCRDRDMjNCQzUyRTNGMEM5NEE1NTc5NTlDNkM1NzUxNTVGN0FGNjUKKworMDU0MkI1QzEwMjQ3Q0RCNTQwOTQ1NEM2QkQ3RjU2QzEzMjMwQzdGNTM5NUUyMTFDRjJGQ0Q4NzJGQkJDMUFDRDY4NzIwNkVFNTlENkJCCisKKzRFRTYzRTI0NDE4NjlGODc1QUUzNTY4MDM1NkVGRTVBMDhBQzUwNENCQ0YzNkY5Nzc0M0YwNjc0MEU1MTM3RDE3ODMyREExNDI5MzNGNQorCis3MDlBREY2REY1MTc3QTg0RDIyQkVERTRDQjNFNkQzMEIxMUIzQzkxQkQwRDIwMjM1MkJEQzc2NzEwNkM0QTg3MTlEQTJDNzVBMzU1QzMKKworNTNDNjdDQzUzNzc1RUUxOTJFMzE1NTRBRTAyMzk5RUMzRTVDRTc3OUFFRDc3RDExMkYzQzcwNTlEM0M2QTMxNjE3OUVGM0MzQUUwNEYyCisKKzNBQ0E0MTEzODdFMUU5RDA5MzBFOUMxRjM3NTIzMTVENjMxRTU1NjkzNkNDQzZFRkVFNzdEQ0I3RTcwNTc3OUY4MzAyODQ4RURGRkU3MAorCitEMTJBNUM3QkUyM0NCNkVENjVEREQ0N0YwRTBGMDgyMTYwQTI1MzhFMUIwMzJBQUUxN0M5N0NGN0Y5NzIxNzk3MkY5OTdDQjIwQUY3MUIKKworODk3QjBDRTE5Qzg5NzJBOTA5RUYxMzgwNjkyQjgyRTlCMDlDMjU3QTBDQTVDRTA3RjI3MkI1NkJEMzIxRDlFQUVFREVFQkQwODYzNEQ2CisKK0I5RUMwMzMyMEQyQ0UyMDhEODIzQzBEMDJENUJDQjlBOTkxQUY3ODRGRDcwNUNBMzMxNjYyNjIxRDNENzkzQzhDMzExRjc2NDVGQUMwMAorCitCQzhDQUFGNzRGM0ZCOEQzMzIzNjM5MDgyNjAxNTg3Qjc4MTY0OTlGQTRDRDk1NjYyOEI3ODA2Q0M0MDc4MTVCQTBDQjlFMjYxNDUzMDAKKworQTkxNUY3QjU0NjIyMkU1QjQ5NjlCRDQ0RDlERjUxOTRENzcxOUEwQTdCRjcyQjBGQTREQkE4QjIzQkEwMkRDODQ0MUE5RTRDNTdDN0RDCisKK0NDQzJGNUJFNTk3ODZGM0Q3OUQwNzBDMUYyRDAyMDAzMTYwQkU0QjAyRTY3NjdDNTg3Njk3M0M3ODZFMTBGNTY3QTExMjhDNjc1REVCNworCis0NjE4M0RCMzREQUUyOThFMDdGMEY3OEE0OEZCQ0JENkVERTI2OTg2MzlBQkMyRTVBMUIyRTQ2N0Q5M0E2OUJEMkQ2N0Y0MUY2MjU5M0IKKworODI0MkM0QTQwNjhCRUJDNEZBNzE2NUI2MEJDRDA3QTg3NTI1NzlGRTQ2Q0U3RDA0OTRCMDZEMENDMkU3NTY4RURFRDYwRDBGOUNCRUM5CisKK0QzRDQwMzJFNjUwNzQxQkMyMUE4Mzk2MjcwMDE0NEYxQ0JCNjhBRjI1QkUwQzBENUVBQTlERThERDhBNjhEQTdFMEY2QUZGMUJEOEZCMgorCis4Mjc4MjI2QTJFRERFN0UwQjMzQkE2RDJBMDUxNEQ0RjkwQjQ4RkQ2MzAwRkZBOUI3NDc5REM5MzRCRjNBQUFBQjk1QjJBRjk1NjRFOUQKKworNkVDMzk5NTdFNzcyRkM1RjI0ODE2NjM3ODIwQjY4Qjg4MENEODRDQjBDNTBCNERBMjEyQTIwRTkwNEQzN0IzNjBFMjlERENBMkNGQjU3CisKK0VGMjM5QTVGQUU3Rjk2NEM3MkIxRkFGNjQ5NzJFNDk2OTMzNzAxOEQyNkM5Q0I5RDY4QjZDQUM0RTNDRDJEMzg5MzE0NUM5NDMyRkM2RgorCiswRkY4QzA2MkMzRjBGMUMzQUIwRUQ4RDZCNTUwNUJEMTZFRTZBMTVBQUU1N0JDRTA3MzMzNDY1NTAxODY3RjJERUZCQkUwMjc0RTQ2NzMKKworOEZGRThCRDFCNDIxMUZFRjRBOEMyODIwOEU5OENCNEQ3MkRFQzU1OTEyN0FBREFGRUFDQkMwRDk4ODE3MjM5MTgwQkNCNDNERDIzOUY2CisKKzkxQTNFRURFNTE1QTMzNzBBRjU3Mzk4NDFBQjlDOTFEQjc3QjkxNDQxRTRBNkYwRkUxMTNCNERDNTA5RTRCQzk1MUM4MDBDRTc4ODUyNgorCis5RTgzNkE1QUU1OTVBNzI3N0FBQzg1MTMzMENEM0NEQUU0REQ0NTY5OTk0RTFGNENGQ0M3NUU0NTlCQzlFMUJDN0YyMTVCQzJENjkyNkYKKworNURENTA5QTA5Q0YyMkM1MDZFQkYyMkQyMzA0ODcwQzM5MDVEOTQ2MDlGODI5NUQwQzU1QjQwM0E3NTcyRkY0QzBEQTYwMEE3NEQzNjQxCisKK0RFNERDMENGMTRBRTM1MENFOTRFNzEzQTJBRDgzMTQyMkYyMTcxNzc3MTg3ODQwMDY5RjQxNENCRDMxRjM2NDhGODgyODdDNTBFNDI3NworCiszMjA1NEY1REZBMUZBQkVBNTdFRUNCOEZEQzgwMTlEMzczMzZEOEQwRTg0MEZDRUNEMEZERjE5RTU2QTM4NkMzNTIxRTI4NzI2QzNGMEQKKworQjZEQTQ5MjEwRjcyQzY2QkNDMUU1Q0FCMTVGRjE5QThCMjVDNTQ0MkEwRjlFMEQ0MUZBRjgyNDA3OEZDNkY2RUJCMzc3OEM2RkZERTY5CisKKzhFRTAyMUMzNTNCMkEwMEY4MzkwM0UwMDFBMTcxNkU3NTMwOEEwOEE4QTg5NzhDQjRBOTlEMzc5Qzc2NjI5RUVGRjY1QjkyNkVFMzMzOAorCis1NDE0NEY0M0IwNEY4MzhBQjUwMDNGQzM2NTA1MzI1RDNFNEU0QjVGQjc1QTEyMjFCMzJEQ0FDNENGRDM1ODhGRTBEQTM0QUYzQUFGQUMKKworQTM5NTVDQUEwNDg1NkExOTZBRERBMTYxNzFBQUI3RTIxQzM0Q0M0NDc3NDFFNTA2RjE1M0I3RjQ2Njg3MTM0MkFDNzJENzk4QjYzNTcyCisKKzNGNDk0N0FGODRFNjc5RDRBOTE0NUVDMjYwNjRGMDIzODhDNzMxQjJEQURBMjY5NzdDNTZGREUwOUJCREUwNTFBRjg5NUE5Q0M0QTgwQworCitFOUFBRTc5RjA2QkY5MTNDQkFBNjlENDQ1QjEyMDIzQUYxQTdCRkQ1ODRENDRDQ0UwNEY1MEQ3N0U5MkYzOTI5NEFBMUJEQjA4RkM2NTYKKworNzIxOENCN0ZBMzRBMDlFMTU3NEY3QUU0MERFNDNGRkI3MTc2MjVGMkM1NjI5QUZENzFBQ0Q4RDgwQjg4ODMyQzI0RDhERjgyMjc5RDg4CisKKzMyODExQUZDRDYzNEM1MkUzMjFBNDc3OEZGMDY2NTA4QTBBNjNDRkIzOTA1RUE3NUY1ODIxREQ1NjhCOTBEMTEyOEJCQkE0NDIyM0M3RQorCis3NURDOEY3ODA1NjhGQjJFNjAzOTYyMTI1Q0IwMkMxQTQ5MkZDQTBBMDA5NkE1QkE4QjdEMENCMTA1MUE5NEVGNjE3REExRTU3NzFCMEYKKworREFDRENEODc3RDA2OTlFMDE2NTBGOENBRTcwMjdBMjBBQzMwOEI3QjcxRjhEMjcwOUNFRDk4MTU0MUI1MDQ1NkQ3RDE3MjREMjhGREM3CisKKzRCNUZEMDVCRjcxQTk4REJBMUIyN0QyNjk0MzZDOUJDNjY4RkVDQkE4RDY2MEREQjdDRjdGN0Y5NjFCRUYwNUZBNjJFNDk0MjE2MTlDNAorCis0Q0E3MjBDMjQyNkExRDQ4NkM5NUUwMjY0MTZERDg1MzRDODVBQTIwMEY5NUI4RUJENEE0NTI1NDE2MjlFMUZERTJGRTExRDg0RDk2OUIKKworMkFBMDFBOUI3RjU0NkE2NEY1OTgxODNDMjNFMjZEMzhEODZGNDdFMjlDODI4OUM1QUJFQUYxRDVBQ0FCQ0UxMERFNDZDNTBFM0QyNUQ5CisKKzgwRDA3OUU4QkJBOTk1MTVBRkQ5REIyNUNBOEQzNDk4NEQ1RDk2QUJBNjVFMjg1MDQ4MkYyNjREODMxNkVEMzg2OEQ1MzU3QUUwMkFFNworCiszQ0Q1MjgyREMxOTA4QTY2NkY5RUFGMTVGQkIyRTE5RDNFQTM1MDlDNTc4MUVEMDY5MEEyMDYyMUJERDMxQUQyRDgwRjc3ODdDNUU2NzgKKworQjcxNzFCOTQ1QzVBRUQ3OTE4REMzMTNFMDExNjUzRDRBQjVDQTE1MUI0ODE0NEEwQTZCMkMyRENGRjM2MUY3MTE4MTFEQjZGMjQ5QkU3CisKKzY1NzlBNDNFRDM2MzMwNkQ2ODExRDZFNTgwMUQ2QTg0RDRDODkyOTU2RjBEMDBBOThDQkY1NjhBNEJFNDgxMzI1QUM5RjA5NzJGQkQ1QgorCis2Q0UzMjNCMEZDNDMyMjg4NTAxMjc2QkREQTRENTA1MDVCQ0VBNDRBNUM3REZGRTExOEYxRUE5RkIwQTAxQ0UzQjdEOEQwNDJDQjhDNDAKKworRkEzMUMwQzdGNUQ2NTBEODU2QzZDQTg2NEJFM0JCNDZEODg3NTJEODFFQjE1MDA5MjNGOURCNDdDODZCODY5OThDOEIxREE3MDc3NkFGCisKKzcyQkQzQ0VFMkYyMkZGN0YxMzJERUVERjhFMUZBRDk2RDI0Mjg2MzI1MkYwMzMyMkI0NTg0MjhBNUQ5OTY4NTJCMUE4NjJDNTdDRjA4NworCitDMUFERTk4MDNGQUYyNEQyNUVENTRDOUNBRTFDMzE3NUU3NTJFQkYwREZERDNEQ0UwMDJCQkVFRDFBMTg1RjJCOTY4RjE3ODk2NDVEMTMKKworRDgzRTNGQjE1RjI0REY0NEU4NUIzMDNGMzJDNjgxNzYyRDIzRUQ4MTNBQkI3NTU1MUEzMkM4RDM1QzYwRkIzNzg0RTkyNkFGMTg3RjQ1CisKK0U5OERGMUZFMTdFQTkxQUQwQTExRUJDRjE0QkIyMkJGRjE5QkI1MjQ1MkU4RTA2Q0UzMjJCMjk1OUNFQUFGRDk5MjA1NENGRTk1QzdGMgorCis0NUY1NkVDQkFDMDY1OTVGNDIwMkE1MjcyQjdBRkNENDBDOTlFRjNGNzhEQzlGRUJENTUyREQ0OTEzNTcwNDM4MzUxQ0I3NkVENjkxNDcKKworQjQ2QUY1ODlFNzdEQzQyRUYwMjE4MDQ5NDBBQkIzOTVGNTQ5QUU3NjYxQjBFMjhFMTgwQzhCMjRCODJCREI3N0FBMTdEOEZCQjFCRkJCCisKK0IxNkFERDVCNDhEQThBQ0E4MzIxQTY2QjYwNkU2N0YwRDY0MjE1QkMzRTI1RTc0RTI2RTY5MDhEQjE5RTk2NkY5NEIxRjNGRjg3MjY0MgorCis1MzgwRkQ3MjJCMDJDMjUxRDU3RTMwMTAxNkYyOUE5ODQxNkQ5MEIxOTQ1ODM3RTI2NUEyODRGRjJCOEQ2NTU4OTFENzY5REFBRDc0QjUKKworRUI1QTMyNzRGRjkxNDBEMzZFQkZEMDhBNUJGNTc5QkZFNUIzQkE5Njg1NkFCQzdDNDg3MUEwQThGNzZEMDczNDcyNUY2RjFENDJFQjlCCisKK0IxRUM4NEFFMjkwQkJDM0RFNjAxODAxMDAyQjhFNUYwNzVBMTVEODFGOTU4RUE0NDZERDJEQjhGNURBMTBFNzcyOUFFRkY5NEQ1Q0RFOQorCis5RTRCOTIzNzIyNTY3Qjg2RUM4MTk5OUVGQTJGNzEzRTU5N0FFOEQ5NzE1ODZEQjFGQjg5QUM2M0QzRDRBNjEzNzA1M0I0QjlDOTE4NkQKKworMjk5OTRGNUU0QzcwMTcyMTUzQkUzN0UzQUIxQjkzODhBNjc2NUFDRDJCMDJFRkM4REVCNTA2NzBFRUY3OUZEQkRCMzQ5NEQzMkU5Njg3CisKK0ExOTNBRTZEQjJCN0I3M0M0Mzg3NkZGMzJEOENFNjQyMDA5NkQ5QjdGOEE5ODUwODEyODgxQTFFMTgwNTRENTdCOTg0MDNBMzIzRDA1RAorCitERkY2Q0Q3QUU1OUY0RUU1RkU0NjZDRDYzQzI3RDdGQjZGQjYzODg1RDA1RjRBQzc0OTUxMzkyRjBCQUEyN0IwOENGODg2ODYwRDQ0ODQKKworNDE1RTFEQjhFRENBQTM5Q0U3NThGOERDQjgwRjk2MUJENDMwNkU0QTQ2MkFEN0FBMzMzMjE5NTAwMkIzMkQ1M0U1QzIxMkMwMUM5OTQ5CisKK0ZFMzBFOEEzRUVENjc0N0U3NjU3QTU2NzYzOTAwNkYzQjQxMTk4NTQ0NEFDM0UxQkQxMzMyNDFENThERDMyQTI3ODAzMzQzRThEQTk2OQorCis2MEFGODUwMTBFOUIzQjE2QUM0Q0ZFRDI4RjM1MDBENTU4Q0VBNTBDNTA3RjdBODlBN0YwNjlCMUZBRTg3MzU4NEQ2Q0ZBMEQ0RjFDMjkKKworQzQ2MjA3RUI2NzY3ODJCMjAzQzU1Mjc5QjY3NzcxNkQ3NTRFMEMxNEYxNTcxMTk3NTA1NEQ5NEFEQzgyMTBFQUNEMzAyMDhFMEZDRTQ3CisKK0Y4NEUxMjBDNTQ1REMwRjFBNDg2MTE5OUQ0MkU1QTgwOUI1MzFENDJBQjA5MkM5QzQyMTY3REI2MzAzQzVBMzM0REUxOEREQTdFNzlEOAorCitBREM1NDZBODFBRjRCRjAzNjk1NjYyQTlDRkNGRTZGQTQ2OURBQzYwNTYyNDJBOEZFQjg3OTI5Rjk3ODkwOUM2RDRDOTNERDJENjBCRTEKKworNjBGRUZEQUI5MjYzODg3MkMzRTY1MTg3NDZDMUIxREFFMTdBQTk2N0RFNzk4NzY5OTk2MTUwNzVCMkZGREE2N0VFOUI3NDNFMkNENTYwCisKK0VCQkE1NjA4QTk4QTA1REEzN0Q4RjIxQzE2MThDMDJEOEU5Nzg0MjNEQTgwRDdDMzhDRjU2MjYxMEU4NUREMEYxNzc1RDgwMjFDOTQzMgorCis3Q0JCMUY1QzIwRUE0MUU4Q0ExOUE0RTZENTBBM0JENTEyOUUyMTEwMUUzMTJBOUM4RjQ3MEUxRUIxMkQwMzhFNUFFNERFNTM3RjQzMjcKKworQjc3MDkxNjY3RDE5NkMzNjEyQkM2OTI1QTI0RTY2RTJCQkNGQkY2QTRDOTM4NDU3RkVFMzZEQzFGRjc0RUQ3QTlDOEY2NDgzQzU4RjJGCisKKzI3QjcwNjVGMzU2NjMyMjdFRTQ0OTJFM0YwNkI2MDcxQ0VBNDU3MzlBQ0I5NDNCRjBFRkZCQ0I5OUQwMzIzM0M1MzEyNzAzRTc0Q0ZBMworCis1Mjg4MTgyRDlGMzcxRTNGMjIyNTc5NjRGODY0NzJBQUVCQTgwNjFCRjAzOUM5OEMwQjhERjE0QzcwRkM4QTMxM0RDREVCOTQzRTYyNTMKKworNTIzNEFFRTYyOEI5Rjk3NjYwQTc2OENGQ0QwNDcwMUEwRjRDODE4QkE1QzAyMTlFNzBCMzc1NzBEQjBENjI1RTRERTNGMjIwRUVBQjBGCisKK0ExOTQyMkExNzEyNEIwOThFQjRDOUM5RTcxRTJBQTBCRjUzNkE4MTE2MUMyNzg4OTczRUI1NkNBMEE4MDY0RDYwMjVFNjRDNTcyNjUyMworCisyNjVDMkU2QUVDRjJFMDQ0RDA5Njk1MDhDRkQ0REVBN0FBRkE3MTc3RkI3OTdBNUU1ODIwNUMwOTRCRTk4NUZCRDRDQ0QyRDI0OUVDRjQKKworQjJENzY2ODlFQzMzRjY0ODg5RjJBQzQwMDkyRjQ3QjlCQzZENUNFREQxQTlGODNBMDgzMjA5NkI4MUJGNzYyOUU0NjU5MUMxMDlGNTdDCisKKzQwMThFQUFCNzhGRTcxNkQ3NkVCM0MzNTEyOUJCMTYzQzEzRjNBQjc2NTFFMzg5NzEzNTEzQkU2NkEwNkUwODJFOTBGRDJCQjBDNUNDQworCis1MUQyMjlCM0JFNUFGREQxNzVEQzk3OTFFQUMwQzJCQTRCMzJDQjA0MjdBQTE1QkI1MDZCRDY3NzkwN0NFNDNENThGOTI5QzBFNzExRjYKKworRkM5NTc3ODUxNUMyNUZFOUI4OTJCQ0I4NDQ4RUM2RUMwQkU0ODg2MUQxRDU3RTBCMzZGNjJDQ0Q2ODdEODI0MDRDQ0Q1MkEzOEFGMjY2CisKK0U0MkQyMDE5NTMyNDlERDBFODQzMDhDMENFNEE2MDU2QjA5NTJGMjUwODRDNjg0RDNFRjIwQzYwOEZBNkY0QzRFM0ExQTI3NDMwNzc0NworCis0RTkwM0VDNDY3MzU0MjlGQ0UxRTFFQkEzNjNENTA5Mzg1QUMwNjdGRUUxMDI3MjgyRjZDNzM1NzY4Qjk2NUYyNkU1NDJDNEE2NkE2MkMKKworQzEzNERGRjk0QzY5MjQwMUZCOTZFNjNGM0ZERkJFM0Y1MzFBMjY0MTQyNzVDQUFBQjE0NjhFMkI0NjA0OUNCMzk5ODk1MjNEMjI2OERBCisKK0RCMUI5REY0QkZBRTk0RjA2RjcxRkIyRkJDNDk2QTY4N0U2MkNFODY1NzJCOUFDRUQ3QTZDNjVGOTg1MERBQTUyRUIyOTZGN0RFMzMyRQorCitDNDRGRjFFMEVGMkUyMjU2QTFCNTNCRDlDNTVFNzVCODFBQTk2ODMwQjFFRERBMzk1QzZGQTc0RTBEMkQ1MDlBNUQ3NzIwNEJFN0UxN0YKKworOEU0RUU2Q0IxNzYzNzI4MDAyOTkxQzY4MzU3QUQzODgyQjlDMjE2QjhBNzU3NDZFMjk2ODBCNEE4MDczODYzNjRFOEU1Q0U0NEZEMTYzCisKKzREQzFFRTVCQThGOTVBQzIwMTM1QTQzNDRFMUE5QTM2N0ZENDc0QzM1NzI4MThGRjY0M0RCQ0U4QzhEMEMwMEREODAwQ0E5RUFDNTgyRAorCitDNUVGODdDNEQxMzQwODc1OURCQUI0RThBQUJFOEU3N0NERTJDQTg5QkI1ODFGRjU3RDdERDI4NEJCODI5Nzk4NTQ0NERCMDc0RDI5OUIKKworM0I3MUE4RjlCNTg2RTE1M0EyM0Y3NTBCNjZGMzk2QjYzMTJDRDIyMUY0NDE3MkE2QkEyMjQ0OTU4MkE5Mjk0RUNEQkRGREYwOTE3QjY2CisKKzBBMkRGQTFFNjQzMTg4QTAzOTVDMkU3M0IzNUZCRjI1QTk1N0E0NTY3OTFBQUJFNDcxM0MyQkQzM0Y4MkUwQjNEQTQxRDE0MUZERjI4QgorCis5NEI3MkFFMDhBMEQzOTgyODY0RThBNTY1RkZFNUJGOURCNEE0OUY3MjFFRDI4Q0U5NERDMjdEQUY1MDMxNTRCMkFFRjhENEMzQjUyREUKKworQUZBNzk0RkJGQTYzOTQxRTlBQTdGMTREOEZENEEzOTcxRDM5OUJEQTA3OTc3NzZENjlDMEY2NUZERUIwOUY1NEZCNzMyQzRFQjI0QTFFCisKKzc0REYzMEYwOThDNTlCRDg1M0U0QUVGM0RENDcxOUQ4ODNGMzhFRjQxMzFFQUQ4NERDM0UyM0I3QTM1ODI1RjM5RjYwM0ExRjhGMTBCNgorCitGQjdGQ0FGNTJBMUE3RTMxNUU0QThCOURCOTU2OEMyRjIzNDgyRTk2NDFGODAwNzMzMzBFOEQxQjAyODBBQTA5NzkzRjFEOTNEOEI1Q0IKKworNzg0MUExRUE5QzkyMzI3NTEwM0I2MzIxNUI0MzlGN0MyM0MyRUUyQTRDRTM4REIwQjdGQkFFQUJCNDQxMjNGMEZBQzhBNUZGMURENTU1CisKKzFGNENGN0IzMzEzRDZBMzkyQjU4QkU4NzJGQ0UzQTg2N0Q1MDI4MzRCNTZBQjE0MTgxNEJEMDQ1M0QwNDhENkQxMTRGOTM4Qzg1MTRDQQorCis2MjA2MDk3OEU5Qjk1NEY0NUZENjg4NDVEQURDRjVCODk5MkJFNDlCMjUwMjJCRjY1OUEwNkI2NUQ0RTcxODI1NjVBM0Q5MDA5QjYyRTAKKworRDFBRjNFODk3RDM1Q0Y3NkY1QUM2OTc1MkRFQ0M3RTNBRTM5ODgzMkY0RUM0MjA4QTEyNDlGMzE3NUU2NTk2NEY0RTE4M0M4REUyRjA3CisKK0FERjM3Q0M3M0ExMTE4OTBBQTA3RjEyQjlFNUZBNTNDQzNGRUMyQUZBOTgyODFEOTVEQkJEQTVBRkU3NzA5ODU3Qjk4RjIxMTc2QzM4MQorCis1Qjc2NUFEODBFMzg2NThFQTg5QTZGODgzNTRDM0IxQzkwNjc0OUY0NzcwRjFEOTdDMTc4NTk5OEQ1OTFDMDAxQzQzN0IyMzE1MDgzOTgKKworMUREOTMzQzE4MkYzRkVGRTIyQzZCOTgxNzcxNUJEMEIwOTI5QTFDOTZFQzMzNDJDMzFBMjU4MkI5RjkwMENERDYwRjA4MzVEQjcxNTk3CisKKzRERDA4NDQ4OTNDMTNEMTI3MjgwOTM1MzEzOTAwODJCRjNFRDFENEM3RkYzOTlDQUYwMTRCRjk5Njc0NTE0MkJCM0I0OUNDRTY0NjEzRQorCis1Mjc0MjUyREQzNkM5MEM3MTRFQzAyRTY1NjBFMEFENUVGRTU0MTJCNjc4NDQyMUE3QzEyQTRDMEVCOUIwNzlFMEEyQ0FEQjU5NTFBOTIKKworQTY3ODMwNTM2NThBRDQ3MDVGMzIxQTMyNjE2NENGQzcxN0EyMTQ1MzRFRkQ0OTA5NzY3MkE5MDc2QjM0NzM1NjBGQzZEMEJDMURFNDc0CisKKzcxM0Q0MUY2OEI4MDRERjk5QURGRDJFMTkzODIzMDU5ODlFMjVGREUzMzM1NkUzRDhDNDU3NEJBNDFGRTEwN0JFMzREMzIyQTFDNTBCNworCiszQjk2NDcwN0REQTQzODAxNzIyNkQ1QkI0RTJGQjQ5OEQ1MEM5QTdDRTkzRTZENTI0NzM2ODEwMDhCNzMzRDQ5NEJCRUM3NjgzRkVEOEQKKworMzFGMjAxNzIzMTRCNzgxRkZCOUZCNzlERUE2MjgxMDkzNDBDOTJBQ0Q5NjdENDY3MzEyNkM5NUZBOEM2RTJBODAzNUM5MTlDM0RDMkNECisKK0E2Nzg3RENEMDQxMjIzQTFGNTU1QkYwMTFCRjNBMDAyNEQ4RDM0MThCNENGQTY4Mzg5RkJDNTQ1RTFCMzdBQTEwMkQ5MUVGNDAzOTdGNAorCitFMkM0NTY0RkJENENDMzk0QzBBMTE1M0MzQTBENTE0MzM3MjVEMzU4MjUzQjM3NTY3RUM1OTU2MDlCMkJDMEZFQTBBRTY1REY0RTFEMjAKKworNzM0ODFFQUI1MDM1QTdCOTEzNzdFNTBDMTlBMjYxRUEwQUU5QkNGRTREQ0ZDNzhFNDI2NjQ2RDY0QTU0NkNDMDNBOEYyOUI2QTUxM0Y4CisKKzg0OTZFRjIwMUQ3QTlBMzM0NTQ1NEE0OTdBMDZGNTdCQ0YwNjBDODA2NDQ3MkE3QTZDMTU2RkZCOTZBOUNENjYzQzgwN0Y0REZDNkI3QworCis3REY0MkE5NUZDOTFGQkVGNEUyN0QxQUI2MDEwQzc2QjAxNkFDMUVFQ0I5ODE4NEU1MDFDNzc1MDUwMDgxOUZBNEEzNkE1MEVBQUYwOUMKKworQThBMDI4MjIwMEQyM0Y3Njk0MThFODQyMUE5NDBCODk0MjA4ODYwQTVGRjUyNUVEQjgwNEFBQTQ1NkVFQkRDQTJENTdENUU0NUVERjE2CisKKzc1QjNBNjkzRjFEN0E2OTYxNzI0NDIwQkJBNjFDRTkxRjVEREM5NTNDNjk4RUNGNkNEMTg1QkI1MTBCMDVFMDU2Rjg3RTZFQTcyOUNBQgorCiszODE2OEU1N0E1MjE1M0E1QkI1OTM4QzA4NTUzM0U1MEU2RkRGMzBBRTRDNUNENUY2MUIzMUJBMDZFNUIwNjlENzZBOTVDRENDNjRFN0QKKworRkNCMTYyREZFRTQ4MzZDMzhBQjE2Q0RDQ0NGRUNGMTgxMEVFNTYxREFCNUY1QTkwNTlENjMyMUVGMDk4NjNBMTYyN0Y1QzNGMzM5QTVCCisKKzU0Q0Y2MjdENUM0NUI3OTREQUM0NkI5RTU3RkVBNDg5NjAzQTlEMjMxNUNCOUE0MkNCMjRBQkI3NTU1NUJGREQyMTQ3RTBEQjBBN0Y1OAorCiswQkRFODFDN0M3MEMzRkY2RkQ2Q0EzMDRENzE5QzE4OUQwRDdEOTkxQ0YzRTg3RTE1MjQwNDExRkE5NDIzN0I5RkIxNDVGREQ0MzgwRkQKKworM0E1RUUxODQzQkY1NUM2QzlGNjQwRjdCOUU0MkFBRjFEOTZGRkM0NEQ1MzcxOUI4M0Y5QzExQ0ZERkZFNTFCQzQ1NEY1MEYyMEQ0RjYyCisKKzU1MTZGRTRGRkIxRUU3OThDODVBRkRBNTMzMTkxODVBMkNFOTRFQjM3MTcwQkQzQjk0OTU4MkFDRjIwRjQzQjBGMUM0MjExODQzRDUwRAorCis0QzBGQjYxNTEwN0E1OTg1RjJDRTQ5Q0UyRjdCMTU5QzRFNTY2RTYxN0IxQzQ0NjE5OEY0OERFRTNEMzFFOTE5NEFGQ0E3MUNFMjg3MEMKKworNjUyNkFCMUIwNjE0QzFCODk0RkRDMERCMkYyMzU2MDgyQjhDMzExQ0JCRkM0NDIyQUU0NUI5MDg1MjMyNkRFOThBMTdDQThGNUVCOUQ3CisKKzQ5MjQwNDkxNkM2MTM2N0JCOURGNEZBQUMyRkUzMEM2QTczOUNERDczRTBBQTFBQkQxNEJCMkQ3NjYzQzg2QkEyNTk4QUY4QjU1MzYwMgorCitERjVBMDMyQ0Y4MEY3OURERDA0RDM2MzBERUQ0N0I0OEU1OEVFNzRFQUM4MUE1QkQ5MDIzNjk1NEEwMkQ5OEEzREI3MDVERkJDQkRCRDcKKworNTk4RDc3NEEyOTIwMDYzMkY1NDZBMTU5QTI2NTZCODU5ODJGRkFENkUyNjY4MDY5NjYzQ0UwMTdEMTU4QjdDQkMxMzEwQkJCODY3MDUzCisKK0IzMDBFOEZGNEE1QkNGMjg2RDZENzdDRTVGNTg5MEQzRTNGREE3MkM1REEzMEQ3RDcyQ0EzRTA0MERFQzM3OTJGRUZEQTcxQ0VEREJGOAorCis1OEYxNzM5NkJENUI4REM5OUVEQzA5RTlBMkI5ODg3N0FBNzk2NjVFMUU0M0NGRjAyMDMwQkVGREU5RTE0OTdDODIyQUU0NThCQjZCMTUKKworMEY2QUE0NEQ3MDY0RTY4Mjk0QkI4NENDMzQ1MzUwNjAwNTNEMzZBNzVCNzVCN0RFNjY0RDI4MTQwNkZGMzFCRkM5MDcxNzRCNzZGQzUxCisKKzExNjQ2MDJFQUVDMDlBRDE5QTBERDI0RjAwM0MxN0ZFMzc3Qjc1Q0RBODk4QTM4QTQyOTFFRTUwQzVEOUM2OUY0QUNEQzIzOTQ3Nzg0OQorCitDNjBGMDA5OTgyMkVERDZFM0JCNTY3QUNDMTcxRjdBQzg3Qzc3NUU1NkIwNzkxNDdCRkNBODAyMDc1REREODM5Qjg2OUM0QTcxRjYzQjYKKworQjJDNjVFNEI5RUIxQ0I4QkRGNTVCRDZFQUFFMUYyOTBCNTJENzEyQzE0RjM2NUQzODA1RTI5QTNCNTY0M0JCOTBFQTdFMUNGOEQ5QjQyCisKK0ZEMDlGRkJBMDZDRTk5NDE4ODVDQTZGOTFGMEQxQ0ZFOTFBOTRBOUJDNjE2NDYzNEZEN0NBMkFCODg5NTJGQUEwRDI0OUZDRjQ3RUQ4MQorCitCOUI1MjBFRDlBNTlDRUJBODk5MzkzMkQ2N0M0RjlBREIyNzg3MUU3MTFCN0YwRjNBNDg0NTUxMEM0MjM4NDVGMzk2QUMzOTM4REU4M0IKKworMDMwNDA1NDE5MkE3ODhFMzQzRDUxMzgxRTYyMkU1RDQ2RkVBRDY3RDg1M0JGMUM4QzI2OUQ5MEQyMUI2MjY3NDA5QTIwRTI0RUNFQTVCCisKKzFFMDgzOEE0MzQ1ODU4MTRDN0U1MTI4QkU2RDBDMjQ4Q0FBMjAxNDE2NUE4Qjk3QUFBNkJBOEEzQkQ4NjgzNjFFOEFGMEMxMjBFQURCQgorCitDMjI5RUVBNzgyMjcxODhBQjIyRDhFODVGNjM4MzczRTc0Q0JFQTcxOTdCQUE5ODQ3RDhFQkYxNjE0NTcyNkFBNzA2QzBCQTgxRURBN0MKKworRkY3RTg4QjM5RjE5NjA5MTY1NjQwMjQ2QTRBOUI3RjI2MUE1QzkzQTVBRDY0RDkzM0M0QThFRjlEMDI2RjIyOTdGMEVGQUQ1OTVEMEZDCisKKzg3QzEzOTNFQkI5NTgxRDkxODE0QzQ3QTBBM0IwNkU1Q0M0NTBDQzIyRUUxQjIwMTc1MjI1ODQ1M0Q0RjE0NTU2N0Y3RDgzQ0Q5OTkyMAorCitCNUM1QzE5QjBDOEJDREE2OTQ4Mjk4QjY3NzFBNTBDQUZFQzY3M0Y0NEE2MDgwRjg5ODgwRUYwRjc2NkRGRTlGRTFEOUM4NTBCMENCN0EKKworNkNDQ0EyODA2OThFODMyNjQ5Q0Y2MDRDQjU0OUNBRUIzMUNEODM1NkVEMTA2RjM2NTMyMUNFNjgwOUUyQkYyNkMxODY0OTdDREYyRDE4CisKKzY5ODc2MkU0NzQ5QTkwRjZDMUQ5NUI4RUE3RUM5NjMxOTExM0M4NzExNjExODEwMEZDRUEwRDU1MEYyODMyQzU3QThCRjVFMUUxQzg0NworCitGMEM5MEVCMTE0QzdDRDZDM0FDMkMyQzVEN0E3QjU2NTk4NzM5Q0QwQ0VEQ0Y4RDA2OUVEQzQzN0M3Q0VBRTVDMENERkQ0NkJCNTdGMjMKKworQkQwRDYxQjFBQzBCOTIwNUZGMzQxOTQ2MjhENUZCRUE2Q0Y1NkRERTQ1OTQzRUExODg4MjUxMzgzNDE3MTM3OTY4NzRFMTA4OTY3NTdECisKKzkzRUQ5OEU3QjYwQUQ4OTBEQjJBQjY4MjMzMEFFOEUxNTU3MjQ5MDAwMUM5MUVCMkE4RDdCNTZCMzNCQzdFMDU5OUQ0REQzQTU2OTJEQworCitEMkUwNUZDNURFRkVCOTEwMjUwNTM5MkEwMDhBQ0VFNzlDRTdCMkJFMkEyQjBBQjFFNzgzRjM1MzE4M0JFMEZDOUQxOUMwMDQ3NEUwQ0IKKworODgxNzM1MkFENzU1QzYzMTQ1RDdDOTY1QzBFNzQyRjE5MDk2NTNGQUYzMEM0MTg3NUM2QjdFRDM0MjE0MURCNEU3NDUxMkVGQ0M1QjY0CisKK0E5MTQ2OEM4OUE4RTY5MkYwRUJGQkI0QkFBNjI2NEUzMTcwMjgxN0M5QUQ4RUI4QkY3NTEwNEU0RDRBQkRBRDFGRDVBODExNjZGQ0IxNworCitBNTRFNzE3NjczNDNGMzZDNDdENDdGREUwN0ZBM0I3Rjk0M0MyMDc0NjIyQkZBRkJFNzU2MDNBMEExMTdDMUJENjc5MTEzOTAwOTkyREUKKworNjNDMEZGQUQwNjNCNjY5QkFCRkYwNDBGMzcyQjAzQTMwMzBEMUQxQUUwNTE4OEI3MzkzMzEyN0U4RUU3MzYyNUZDNzVERjExMzhGMDU1CisKK0M4MTVGQ0E0QUVEMDg3M0NCNkJDMTM0MTQ3MzFGRUZEN0VGRTUyRTNFRjgyNEM3NUUwQTA1NjFERDBEN0JGREM1ODA4RjFCNzhCN0Q5RAorCitCNTYyQjNGMDY5N0ExMTM3OUQwODdENDlDQkFFQkFCRkZCNjA0MDJFMzVEQzZGRDREMjBEM0MyRkM4ODY1MTI5MUMzNzlFNEU4RjFCQzAKKworOTI0QkE0MzVFREU3NDAxMzc1ODNDRTYyNDFDOEMyRkU0RENBQTE3MTAzQzhDOEY0MEEzN0QyNzQyOEU4MUIzNzA3ODhGQTMwQzgxNEJECisKKzE1MDFEMDc2NTRDNDcwRkQ1RTk0Q0YwQzBDNTJCNUZENkU1MTBFQUIwOEQ4ODY5QjEwODg0OUI5MDAzRTdDRkU4QTI1NkRGNzI2OEVCMQorCitEQkY0QURFOUZBRkEwOTYzQjFBNkE5QjhBRDQwMDExRTcyMUI5OTJBOUZDOUM5OThEMjY0MDBBQkE4QzVCOUQ1MjFDMjg2NDI3MjgwNjMKKworRDlEMDY2OEIyQjYzOUU2MjVENEI0RjJGQTM3ODZFNTdFNzkzOEY5OTVDODkzRTdEMzMyNjIxNzE2QzY5NjgwMDRGN0MzMDI4ODlDNEJFCisKKzQ2MDQ2OTgzMjI1QUUyRDFCQzI3NjY4Mzc0NDgwMERGOTY4M0U5NjBBODY4OTMzODc4OUVEMkQyRkVBMUQ2Mzk4MDRFREQ2ODYyOTVEOQorCiswMTI4MTMwOTQwQUYyNTFENkI3ODAzRjBBRDk0MUYzRjNEOTk5QzU0NTlBQUM1NzY1Qzc0M0JFQjhDQjAyNDYxQjU0RUUwMjgxQTYwMDYKKworM0FBNzYyMTg3RDNCMDNFREQzQjBCMUY0RUM0MTZEQTIwREREMEQ4OUNGMzAyRjYzNzdDQTczQTM2RkQ0NEU4NkM0REM2REFFMkY1QTY0CisKK0FGQUM2MjUzNkNEQkEyQzg2RDZBQzFDNkFDNjc5RTUwQjU1NzA0NUIyRUI4MDJDNEM3QUVCRUQ0MDYyM0IxN0E5M0VEMjRCNjVBRkEwMQorCiswQzNGRDI5N0I1MkIyNjQ3MzU1QTQxMUFDRUQyNTVDRDRFRTJFRDM5N0IzREJCQTRGQzI3NDU5NjA0OTFBRTc2RjgyNkVCOUMzNDQyQTEKKworNjYxRDY1NkMyN0M0ODZCMzU2OEE2M0YwRDZEQjU3MUIxNzM4MDY1MjMzM0MyRDI2MkE2OUZFMUFDMDE2RDZENjdDODU0QTFBRTBENzJECisKK0VDQTJBQTM4RTZBM0EzRUY1MkI0RUZBNTZCMTkxM0MwMTU0QkMxNzIyMDE2QkNCM0JFNUI0RUI1MTYwREM5Q0JDMDY4QkEzRUVGMUY2OAorCis3QjY2M0QyNTc4OUUwM0Q0NjVBODhCOTNBNDc0MDRBQjJDQUJCMjRBRUE0MzM3QTc5REVENjlDRUNBM0U1NjE2RjNBMUJDNkU5MjNCMjEKKworMkY1OERGQTQxNzMwNTQzRDBFNDg0RDQzNjIxRTY5N0REMDkxRDNCRTE0M0E4NTg5NTgyNEMxM0ZFNUIyRkMyQUVDOUNFOEI0ODk5MTk3CisKKzgwMTlCNkFBNzc3QUI1RUIyNEZBMzUyQ0EzMTdDN0M3RjFFOTU0OTUwMURDRTRDMDE2QUIyMkNGM0ZFNUYxQjkxMUM1RkZDQkJDNzk2OQorCisyRDU0QUIwQjBDOTJBNURDNzNBNUJFQjI4RkY4RDI5NjNDRjY2QUZEOTgxRUZGQzdBMTI0NjY1M0UwN0E1QTA3MTQ0MkYwRjVGNzE5QjgKKworRDYwMDIyRDgyNjQzNTI3QzQyNEQ3NEYxMzA1NDRGQzM2M0Y5RDRGNzcxQjg0NjMzNzkwMkFBRTkwMUM4ODExMzA1NTlDRkVDNTYzMEYzCisKKzc2N0ExRTEyMDBBNERFMDgyNDI3QTZEMERGRDRDQUE1OURBNTEwQzczRjdFRDE2NUE3RkNBQUFFMUI1NDFGMTc3OEE2QjhGRTIyM0YyOAorCis1OTc3NDM5ODZGRjgwQzIxNDJCQjlFMzQ3ODkyQUY3QUVGRUREMjlBRENFQUMxNDk4QjMxRjVGQ0VFOTRCQjlFNDg3NTBFQ0FGN0RENTIKKworQTM5RTc5M0Q5OUMwM0Q4NzVCOTMzMEZCMUJFMDg1Qjk2OEMzQjRFREZBMEYwNTBDRjg0NDA1RDNBNDJFQzg3MzJBRjBEQUM5Qzg2NjYxCisKKzMzN0I3MDkyOUNCNDg1MDI4RUVFODFDMEI0NjU4NDJFQjAxREYxNUMxRUMwQkJBNTgwNUZGM0U5MDA1NzZFNzQ5MTg3QzBEOTRGQUVDNworCitFM0Y5M0YxRjMwRDExMjQyRTdGNjVGRTBFRUY5MTY3NjQxOUIyRTQzMjIzQzAwNjFFNDZDNDFGQ0Y1RkM4MkMwMTFEMjQ5MEQ3QTg0MEYKKworRjBBOERENkNEMEFCMUNBODFDMjczRTE2MDRBOUY1NEFDNkVBNkJFMDRFNkQxNEZFQjE0REVCMTREQzdDREY1ODc4RjM1MjI0QzVFQTdECisKK0VDNzZDOEM1Q0RGODE2MTY0QkI0N0Y5QzYwMjBEMzcxRjMwNDE5MTk4QUY0NUJBRDU3OTJEMTQ4RjkxNUJBRjBERDA4NDExNjlCNzdFNAorCis1QUI1MENERjUwQjk4QjRDNTRDRDBCRjkxMjY5RDlGQTY3Rjc0RUY3MUJDQzQ2MkFCOUVDNzE5MzlEMzYxRUMyMEFCNTJCRDkwNkJEQTUKKworRkVEMDBENDIwRTMyQ0YzMEFGQjk1M0M0REFBQTgwN0Q1QTVEM0YyNEEzNTNFOUIwRURDQUNFQkZDNjlBMjlFNjVBNUNERDFCNjFGQjY2CisKKzUwMDNGQ0JGMzcyRkFBQTA2MDE5Rjk5NDVGQkYzMkQ2MkM0NjFGNEY0RTg5QTQwMEY5RTBCM0E0NkJEQ0E5OUVFQTFBRUFDOTJCM0VDRAorCitDN0IxNDYxNjM0NUQ5QTNGRDE4MzdGQTI0RjkxNjg4MTAwNENDMjczNTFBMTMxNDAwRDc2MzRFQ0FFN0RCRkVFNDU1M0M4NkE5QjEzNjIKKworRTNCRUY0NjNEM0IyOTIzQjQ1RjVEODI0MUY0MzUzM0VDMEU4MTE2OEVBNzZEQzI4REMyMEY2QTcxNTA4RUYxQzBFQjZCOTQ2QzIyMERFCisKK0ZBMjY1RjNFOEYzNUVCQTM3NEQwODY1NTM5QjM4NTdDOUEyMUIxRDQzQkVENEVGRjc1NUIxRTJDMkVCREVGMkEzNjUyRjE5NzI5REJFMAorCis1OUQ5NEZCNTQ0OEJFMUY4RUYyMDVFMDcwMTk5RjdDMUQ1NTM5NDk2OEExRkY3NDVBRTkyNUVGQjcyMzdGRjc5RkJBQTc3NzMxQzZDNDcKKworRjY4NjY4MTUwMjBBQTQxRjdGMzA1MUM3RUQwMjg1MTg2Mjg1MjJBRTgwRkFEOTcyQjBBOTg4RjU3OTNCRThENDIxNDQ0QTJEMkMwMDYxCisKKzhDNjA2MUE0Q0U4MUE4MDdFRDgxOTg3MjQ4RDYzN0I1MjVDNEUyQTNEMjRFOEFCNkVCMTFGRDM2RTlCQ0ZFNTQzMkU0NkI4OUIyMTkyQgorCitBRTY4NUQ3RUVGNDk0QzgyQTQ1RUFCQTEzNjNEMkY0Qjc5NzNBRjVCMjA1MEIzRjU0NzFCMjAyNzUxMUY4MTZGMUEzNzc1ODYxNjczRjQKKworQjI5MkUzNDI1MjM0QTQxQTNEMjcwQTBEMEMwMTM5QzEwNTczMUE2RjVGODQ1Njg1Qjc3ODc2QjQ2RjVBQkI0REQ2NEI2NjkzMjM5NjdFCisKK0QxMUU0MEUzQTE4MzdCMDYwQTY2ODVGRENFNThEMkREMzFEMEM5QTlBQzY4MjAzRTc4QTc4N0ZDNjUwOEI0NjA0REY2MDlEMTREN0FGMworCiswRTBEMkNDMDdBNDkwNTMzOUY3QUU0NTIyRDYwNjFGQTZBN0U0Q0I3QTVBOEIyQjVDNDlEN0E3MkRBNDY4OTJBQjBDODJBRjdEM0FFMUUKKworNkQ4ODJCREE4QzI2Njk4NDIzMENDQ0I5NUFEMkY1QTBFMzM2ODVCQjkzREZBNjBEOEZGNzAzQzc2ODg3QzMyRDkzRTUzREU2NDhDNzJGCisKKzI1MTI4NTY1REY0RjQxMEQxQjJFOEM5RDU2OUI3MDZDQjk5NTQyQTI3QkE2ODVERjA5Qzc1MjI4NjAyMUMxOEY5QkQyQjlDNTgyRTgyNworCis3NDVENjkwMUREOTlDNDMzNkMwMjY4QzBFOEE4NUJFOUM1MjNEQTFFNEQwQkE0NTcxRUFERTgwQzg4QTE0QkY0RTc0NTBBMUJDRUExQkIKKworRkY5NUJEREYyQUYxQkVGRUJCRUU3NDI5QTRGRkE1RjcyRkQ0MEE3QUMxQjcwRjhFREI4MzI1QUE4QTYxMUUzN0IwQkNEQzg0NkM2QzEzCisKK0NBQTlBODMwRTFGMDkwMDU5QzZFMzQwNTM3OERGOTBDMUFGNDgyODg0ODEyNjhEQjJBRjg2MkFGM0FGN0E5QzcxRUI2MERCRTgxOTgzOQorCis2MDgzQ0QyRjU0NUM3RDc4QTM3QjkwQ0MzQjlGMzVCMzBGOEQ0MjRFQUMzNzRERUI4RUM4OTM3MTU3OTFFRThCMENGOEY4OTlBNDU4MkQKKworQzlGMkY3MzgyMzJCOTgzQUQ4QTc3ODU1RDFFNjEwNjVDNDQ3MUVGMENERjcyQzBDOEFDNkFBQUVFRTFBNzY3RThGN0YwMDM1REM3N0FCCisKKzk1QkMxRTJBRDM5OTE0REYzRTEzNzI1RDhDM0I1REU3NDdCMEVERjFGRjNGODBGRDE2MEQ5QTIwNTVCNEYyRkYyMEY0NjI2QUI0MTk3OQorCis1RTFGQjFGMzgyQTA3NjM5MzQyQTQ0MzlBNkUyRjE4RjM4MzJCQURERTYzREExRDc4RkI2MzU1NzI2MUM2Qzg2QzZFOTlGQzlEMjUyRDgKKworOTVBOUI2NTM3ODJBNENBRTYxQTZERTUxMkNFOTdFQzQ2NDQyQkUyNzc0NkE5MDQ3NDgwMDcyNUU5NTMwNzgyNTczOTU5MkQ1ODUwNTRDCisKKzA3NjgwNjgwRjFCNjBEMzdENjRBNUIwQTY5Qzg0QkZCMDVDQUVGRTk0MUFGRjk0Q0QzNTdBNTNDOUMzRTI2RkVEMjIwNUIxMUY4MkY3OQorCis2NERGRDhGRjE2RDVBM0NFMTI5MDU5NDVCRjQxQzhBNTZBNTk5ODc3NjE1QjIzRTQzNkRBRUJDNzFCNDVCRjAxNjNBNEU2RDEzMjM4QzAKKworNDc5QzNEQjlFQzk5RkYwQjc0Q0QyMjI0ODY1MUYyRTFCQzc4NjBFRDAzMzZFNkMwNzhEMEVENEZDNzJGNDk0RDNGMTM2NTI4QjI1Q0YxCisKKzUzRDQxREVBQTA3NjFFQzFFOEYzMUY5MERGMUQ3M0VCM0E1QkE5QjUyRDgyOUVEQUU5ODAwMEI2MTE2MDcyQUVGRUFFNEQ4NjFFODkyOAorCitGRjlERTM3NkM4NTZFQkFCMUExODlGNDI0ODMxOEE0NENDM0UwNzNCODU1QTEzOTE2MDczMTYyRDdBMjZDMDhCQjU1QkIzOUExMjAzM0YKKworOTNCNTVEQjk3Q0VBQUFCOTc1QTczNzJDMTVEMzJENjY1NzhBNjUzOUVENjEwOTdENEUwMTlDQUUzMzExOTg3MEU5NkMzRTQwOUU0NEJBCisKK0U1RjlDOTJGMDQ0QkNCQkQxQjEwNDFDNUM2OEM0NUI3NjZCQzFGRTUxQjU3RDc0QzExNjgyRTZGQjYyNDVEQjVCMjQ4NDBGRjFBRDA4NAorCis0Qjk4MzQyQjE3RTE4QjQyQjlGRjYxNDMwQjNBNzAzRDk3RUY4RkM3NUI1Rjg0NjJGNDA0Q0FDQ0RCMkU2RDk0N0MxRkNFN0RCQjAzODgKKworRENFRkY1MTBCMDYyMTZDMjE4QkUzOEY5NDYwNzI2RkFEQzE5RDEzM0UwNDZDOTA1NzE5OEMxQzI1REY4NUQ0NUVBRTg0RjNBNjZEMzM5CisKK0Q5QTFDMENEN0ZCNkE4QzcwNkE5QkEwNjJFNjQxNUJCMTFCQ0ExOTIzNzMyQjJBOUJBOTg0RkVBNTM0OTA1NDdBMDMwNjM2NzNCQjM4NAorCitENzhDRjQ4NzgyQUQ0NTExMUVFOTFCQUVDMjEyOERGMUEyNzNGOTE0M0EzRDI4QUEzRTFGMjJEQjcyMjAwOTIwNDdFMjIyNjhBRUEyMTkKKworRDAwMzc2NzdBNTdBQTk4NDMyRTM3NDlGRDU3N0RBMjYyODVBRDBFNjdFMjMxRjVFMjA4Mzg1RjQ3NTdEMjE3QzcwNzA2OTJFNkFFQjA0CisKK0VBRDg1RkM5ODFBRDU4NkEzNTI5Mzg1NEMxNDdBNjIyMzBBODc5MDgyMjU4OUM2MkMxQkMxODJGOUUwN0I3RTBDNUIxRDAyRTlBNzNDRQorCisyMjJBRUJEQjBBQURBQUNBOTY4NUIxMkQ5MTQyMjA2Mzc4NTVGOTI4QjFDOTUyNTEwODBEQzE3QkZFNjc0OTM4RDMzRTZDOTJDMDQ3RjEKKworQkRDMjJFREU1MDJBRUVCNzgwRDZGRTc4MzA0RTBBRUI0N0YzOUE3QUEwMUM4QjMwNzRGQTBBNDIzQjYwM0JGQjI5RDk5RjFDMTI1RTQxCisKKzQyRDMxMEZGRkExNkNCRjhFQzdDMkIwOUU3QjA4OEZDMjIyNzA2OTkzQkI0RUY0MUM5MzI5Q0YwQUMxRUY2MERCNUJDRDhBN0ZFQUMxRQorCis5REMxMTE1NDBBN0UxNjMzRjM2QjBEOTRDQjBCMTVBOEUzMDdDQTE5QjNDRDg3N0JBQzdBQjkwMzhDRUIyOTNDRkEwRURDMDUzQUE0Q0MKKworNTA0OUNGMjM5QTA4NDFDNjM5MUExRUQ1MzdCNDk2NTVFQTUzOTU0Nzc2NDZCQUFEMDQyQTk4QjYxREQyNzA5NzM2NjU0OTdGRDVDQzQyCisKKzRCMzBDMzkxMUM1NTg5MjMxNTU5REJEMUZCNzEzRTFBMzg0REM2MkExNjgxNjU1OEExNUNGQ0E4NENGNEJBQTI5ODM1MTA3QzExM0I2MAorCiswNEJEODhFMUQ0QjZGMEVGMDM1MDgzQUU1ODA0MDc5MUY4MjQ5Qjc2NEMzNDEwNjRFOTVENzg4QjkwNjk1RTNGQTlFNTQ3RTQ1NkY1RDQKKworNzk5NTA0NkJDODFENTQ3M0U2NkMzNzRGQzM2MEI0NDEwNjcwRTUyN0JDOTUzMzJENkZFN0RCOEI4REM0N0FDNDcyRjM3RTgzMjQwQUZCCisKKzM4MDBGQ0Y1QUEzMjc5RTY3MkIzREE2M0ZEMjIzODRDQ0Q4NTJDMjUxNjI3MTg5MkU5MjNCOTkzMkI2REQ0MzJCRTQ5QzkwREMwQjU1NAorCisyM0VERUZENjA0QTA4OTYzMTUxNjc5QTk0RTNGQjNFNjQzNDAzOTlGMDc1QTIxREVGNzg0M0NCREM5RDJEMzQ3RDU5Q0IwNzJGMTI5NjIKKworN0JFNzgyOEE2RTlERjQ2ODc3MjM1RDAzNURDQjFCMzhCQkM0NEJBM0U3RThGQ0EzOUI1QjM0Q0M2NDkxNTJEMjMwOTVGOTNCNzRCQjdBCisKK0VDRDNCQkQ3RTQwODc4NTRDQjQ3MTMyNjc5RkI1NzNBRkUyQTA5MUZFQzI5NEIyQjlFNzMwNjI1RjY4MjkxRUU3REMyOEMzRDU1NDAzNworCitGNjJCMzBCMDUxMjFBNUE1NUQzNzA4MUJBNEU2REYzQ0Q2RTczNDdDODA3MkU1MTgyNTBEQzczMDU1NTU0ODdCQTIyOUY3QTM1Q0FFN0EKKworN0U1MzQxN0FCOTNFOTYzMEY2Q0VEMDRGM0E4QzBCM0I1NDE3REI5RTFENDhDNjNFRjM0QUY1RUZENEYxM0FCNzY5N0Y3REJCODhCNDM3CisKK0EyNjUzMjA3MEU4OUU0MThBRUI1ODc1OUNBMkVBMDQwM0MzRDRFRTIyNjBGMURCQjNDRTlGMUYwNkVFNEI5MTQ3RjlERTk4ODMyNDc5MQorCitFMUMxMTE4NzdBNjgyNUREMDhFODkwMkE5NTU1RDJGQzdCOEI3NDZDNEIyMTRBQjQ3MjFGNkE4MjUxQ0E0RDYyRjhFMzNDQjRBN0VCNzgKKworQzZDNTVGMjE1MzE0NjEyQUQ4OUQ1REJEOEQ1RjYxNEM4REY1OEFBNzk4QzdDOTMyNEZENDM1RjA1OUExRTk0RTkwQjJCRDVFREZCREIxCisKK0ZEQzkwNkNFQTlGNUNDMTIwNEEwRUU5RkIyNDRBQzQ4QjNGODU1OTNDNDVGQkFDMkRCNDI3M0FDODFDNjhFQkNEN0I5NUUxM0IzRDhEMAorCis4NzM5OUM1RUJBRDg2OTYzNDUzRTU0QTJERDNCQ0Q5MUFERUE5RjBCMTM0NTdCNDU2RUQ5NDMyQzlFQzFGNEEzNEFCMEZBODIzNUMyNkYKKworMjM4MzhENTMyNzVDQUMxNDkxQkQ4QTQ1MDI2NDQ2RjM5RUFGRjBDQTNDREY3ODdEM0Y3NUVERjBEOTAyNjA4MDE2MzlCMzAyNEIwNEZCCisKKzREMERBMDNENEZENTZBMkM0NUFBOTQwNjJEOTIzNTQyMTJCREI3RTYyREI1N0JBMEYwOEVCMzcyN0Q1NDUyRTVCNzBCNkYwRkFFQjBDNQorCitCOENEOTkwMTFEOTkyNTE0RDVDMUQxMDhFN0U2RTNERUJBOTc1M0Q5NkRERTAyQkQ4N0ZDQzgzMERGOUFGODlEOTdENkZERDlBNkM3N0MKKworNDg5RUUwNkExQjQ1M0Y4QTdCMzc3NkYxMURDQjcxQzkzMDQ4OTlBMjJGRjM5M0Y4REE1NTQ2MENERDJFQTFDOEM3MEY0OTMxRkExMDlECisKKzUxMzlFREQwRkM5RTMyM0QwRjhFMzIzNDQ5RDEyNDcwMzE2QTFENTAyMkREODU1RUU5MzU3QTM1QzA2NzNBMDkzMDIzREY5ODhGNTJCRAorCis2NDM4NTc0QjVGRjBFREZBQUZFMTJERjM3NDczMDA0NTZFQ0RFMjgxNEI1Q0IzOUVCQkFDODE5OEIzRkQyMUQxRkU0N0Q3RTkzMjZBNjcKKworOTlBQjRDRDUwNzI1ODRGNzc0RTk1QzU1RUM5NjdBRDZFQkM5NEM0NUUzRTI1NzFGOTgyMzc5MjM0RTVGQkZDQUY2NjZBREY2QzY0NzYzCisKK0I5OTQ5NjQ5N0E0NEExRTMwMDkyODczNkI3NzAxMTAzOUEzMUNFNkJBNTY5QjE5QUI0NDdBNkYxQzk1RDVDQjQyM0Q2QTZBOUZDRUI3NworCis0QzE4NEY0NUVFNjEwNUY3MDJCMjVFNjU4NjI5NkVFMTc3QTk3RjVDNTA4MzkzMjA2QTE1QzQwQkYxRUU5MEMxREE2NTRFQTEyQkI0RTkKKworQzBGMUQ4MDc0RUJGMjJCQzRGRkU5NERCMDBCQkMwMURBNjkyREM2RTcyRjM5NzZDNjE4NEI3RjE3MDY2QjZDMEI5MTM1Nzc3MDVFRkVGCisKK0YyOEM0MzBBMEQyMEU5Q0ZCRjNGMUJBMkYzNzhGREQwN0NGN0M0REFDMDIxRkYwQTY1RTgyQTc4NEY1QjREQjA2MTQ0MDAzMjAwN0UzQworCitDQkM0OTE5Qjc1NjIzNURCNzk4OEExN0Y3NkM5RjE2NzM5RjMyMDIxMDJEODQ0ODRDQkJGRTVCQzI5MjdCMDIwQ0MxMjMxMjFFRTI0N0EKKworQTAzQUMwODU5QjU0MjMxQzM0NTExNjMxNEE0NTNFMzVFMUMwRTlGRDMwNDM0OTE1NjE2RjFCNkNBNDIwNzNENTNFQzQ0NkY0REU2NUEwCisKKzQwNjAzNjdEMkFFNjFGNEI3MTk0NUQzRjAwNDM4RTk4QkU4NDBBQjQyNTRBNTVGRjczMEJEODk3RjU5MkM1MzA4QTQxMzUxRUUzOTY1MAorCitENzFEMjRCOEYyNTAwMzkyQjY4Q0Y4OEMyNURDMzU3Q0JGMEE1MTUxMjQzMzZCQkRGRTQyQTlEQTJBRTVBRENGNUY3NEI0QjYyODVDMEMKKworNkJGMzgyODNFQzBDQjQ4OTgxQzE0MkU3MDcyNzEzNTA2QjZBMzhFOTkxQjUwN0RGOEYwOTI3Q0I4NkNDODZDNzEwMjQ0NkVEQkI5REE0CisKKzAxOUNBNDc1NEZCNjczMjQwMTk4MzdFOERCMDlDNEZDMzNDRkU0MjNEQTFGMkZGMzJDQzM0MzQwOUMyREQ3MUM4MTRCOTMwRjU5RkUyNQorCitFODFBQThFREM5N0JDQjA1QzAzQTUxQzQ4NDM4MDIwODE2RUEzMUU2Q0VFNTdFMzk0RjYwMTk5NDVBREUzRjlCQkU1MjM4RjVBRUUyOTcKKworODI4OTZFQUZEQjQwQ0I0Mjg3NkJDQUI2RjM3Q0JGOEMwNUI5QTg0QUU5RDcyMTU3NzQ2ODJDMEYzMkUyM0ZGRTBENjFBMDRDQjlFNzRECisKKzFEMDRCM0FGRUFBRUY3Qjk0MjUxNTc2QjgwRUI4RjE1NjE5QjQwOUFBRDQ1NDYxM0ZENTBBQTdENEYzQURGRkFCNzMzMjU5NUVGQUNGQgorCis5NjU1MDM5QThEMTM1MTlERjlFOEIyNTlFMzQyRjQ1NTAxRkQ5NDE0RDlBMUNFOEExREIyMTcwQzBFNjM1NDk3QTU0QkREMjk2RTQ0MTQKKworNDZERkMxNjMxMTY2OUI4MUVBQTk5RUY5RTlGOURDNjE3M0FERUNBNEU5RkQxRDREOTI0QTZGREYxQTYxOUQ4M0Q1QUQ3NDVCRTIyQ0UwCisKKzc0QUE4MEE5M0ZCODA0MjQxNTczQzRBQTk5QjQzNUMwQzU1M0I2QTM0QzFDQTI0MjBENEFENUFFQ0YxMDFEMEMyMjAxMTdGNTJGRUYxRQorCitBNkE3QzJFNkM1QUNCMTJGNENGRTA0MzREMzhBN0I4MEQ0NTcyOTlDQUE3QkVCMjI0MDFGNkY0MUJGQ0ZGMUI3MzA3NERCMjA0QUE0RjcKKworNEJGMjFERjAyRkJDRkNFRDMyNTQ1MEEzMTZGM0QwRTE5QTlFNTc4RUZGNkUzNkFFOUI5RkE4M0FDMjc2MUQ5QjA3OTk3NjA3NzQ1NTVBCisKK0NBM0RDODdGOEZFRjA0RkY0MTcyOUFDMzZFNzg3MzBBQTRGREM5QjIwMEREMTlFNTVBMkVFQjI5MTRCQzRBN0FCNjY4NTc2RTg0MkZFMgorCis0QkMzMTcxQUM2RkRFM0IxMkNBMEE1Q0U0NzNDQTlCMTZBQUVFRjFFMDM4RjNDRDBDRDQ2RkRFQ0U5MkQzMTk4OTUyOUFGRjY0MEVCNzQKKworNDUzNDI2MkIxQzRFNzRCRThFMjNEMzk0QTQ5MkJERUVGQzdDRjU0OUMyOTI5OENDQjkzQzk5RjVFN0VGMTJGMEYzMUY5NEJERDU1NzFGCisKK0ExMzkzRDY3NUYwRjdGRDU3N0YxM0I4QTY1MDYyN0I4M0QxMzc3RTFENUJDQTUwMkE5NzdDQjU2QjMyMzhEOTA3MzM2RDM5MjAwNUJGRgorCis5MkZDOThEOTUzNzcyRENCMjVBMzM1M0QwN0I3QTIxRTIxNzQ0QTk5NjcyNUVCQUExQzRFOTM1OUREQjE2RUEzMEY4QjdCMDU0RjQzMzgKKworRDgwQkMyMzExMDE4MDBDRjUxMzMyOURGMDczQkVFM0E5RTk5QUNDNjVDNDY2MTY2MEFBQTZCMjQ2NkUwNkJFOUM5MTIzQTY2M0Y5QkQwCisKKzQ3MDVBODc0MzkyRTQ0M0M5ODY3NzhGREU0REJCMkFCMEFBODU1NDcxRTZEMDFCQkU3QjIxRjAwNzI1NDU0RkUyMTc0NzA4NEVEREE5NQorCitBMjNBRkFCOTEyODk5QzExNTVGOTRDREVENDhDMDAzQzNFMDY3NTVERERFNDVCQzg2ODg2NUQ1QjVFNkIzM0Y0NDE4NDhFRjkxNTE0NkEKKworODQzQTFCMEY4M0JFOEEzQkNERUM4RjdDMzNEMEE2QzgwQzE3QTM5Q0ZEOUU0NjZBNDEzMDg2MkM4QzlDNjIxMzU5M0VENTEzQjgyRTEyCisKKzc3MzlCMThBMjZBMzE4ODRDOTlFNDNDQjY5MDgyRTcxMDY3OUZFOUVGQTZFNTdFRDA2Qjc5QkUyQUQ2ODRFQTI5Mjc4NDNCMjg5QTFENQorCitFNTRCQzlCNUMwM0VBNTFGNTE1MEIxQjFFODc4RDQ2N0U2MDYyQ0U3ODUwNTNGMUJDMDE5MjJCRkEwRUYxNTI3NzU4RjJEQzVDOTdFODQKKworRDY0NDA4NDI0QTU4QjA2OUVDMTczMzkwODQ0RTBEQ0RFMkExNEU4NzRCQjk5RDRBMjM3QkRFRUYyODY3MTU4QzFEQzM2MEVFOEQxQ0NBCisKKzM1NzhGOTQzNEE4NTZDMDY3MjJDRjlGRUEzMEFBNkU5MjNFQjdGQTFFNDY2OTczMjQ3M0YwNEE0RjIyMjgyNzgyQjE4QjUzMEM1MDYxNgorCis4MDdCQkIxMjUwRTY0Q0UyOUJDOEVBRDgwMjNBNDdERkQ3MzEyNTk1MkFERjIxOEUwNTAzRTZCMjZGMDk2Mjk3NTc3NzM1MTFCOTc2NjEKKworMjhCREI1N0QyNjQ0QzFBQTk0MTFDMkJEMDlBMUMxODQ2NDhFRDQzNUU2MUYwQThFNkEzQ0ZFMkIxOUY3NzU2NjA0QTMyQ0JEMjdERTlFCisKK0IwODNCRUE3QjlFNTA1QUI3MkU4QTAxMUJEM0IzOEQ3MTk0MzA0NEQ1NTJCOEEyQzZBOTUyOUM3NEMwMzQ2MUJBMjMwREMxRkExNUJERgorCis4RUU1RThDMDBBQTI1MTlGMjc2OENCNDFCMjlFRTUyMTg3OUU0RjVEMzMwMjJFNEY0NEU4QkE1NEQ5RTk1MkQ3MzBDNjBFMjgzQzA0NTYKKworOUIyQTdFMDI5M0U2MjJEQjdBRjAzNzU5RjRGNkM4NzNDRTJEMzg5Qzk5Mzk4NTI0RThBMjc3RTAxMjRGNDJBNzAxRUI5NzQ4MjMyNjIxCisKK0FDNTBDRTcwQkFGNkRFQkE0Q0RGQjQ3MzMyREUwOTBGMUU2NjE2RDc0NTdBQjAxQ0Q5NjAyOUY4RTY5MDIzMTg4MkY2NTNGMjZGQjJFRAorCiswN0RDNDNFOTZERUY3MEZGRERGNUZGMDgwMkM4N0Y2MEZEQ0Q1QzI2M0E4QUFDRURENzg1NDU0QzYzRDdEMUU0RjA1NTAwODFCMzBDMUQKKworNDYwRDdFNzg1NTU0OEFDRDRFMzFCRjEwODkzRTc5M0NBNTZBOUUyQjM2RTk1QzE3RTdCMUFERkI4MjU4MjdGRTJBNkMwMDg4OEJGNjkyCisKK0ZCNjA4QTRCNUIyMUFDQjVFNTM5NjY3REZBMjQ3QTdDMTA4MTE4RDczRTQ1NTgxRTUzQTMwOTI0MDYxRUM1M0QxRThDOTY1MjdGRDIyOAorCis5MTA0MDU3OEUxMEZBOUIxQjg5NzIzMDIxNEI3MjI0QUE5NUJBRkRCQTZEQjdEQTlBNjVDNkQxOUJCNDk0RDRDMTBFNTA0MjVFODhBMDUKKworOERGMjk2MzdCRDM3REU4NDgyODE2RjhFQTU3MTg2MzlERDVDODA2NzFFNTJCOUVFOTY0NzAyMDRGMTdDOTM4Qjg2MTcxODQzMEFFQzg0CisKKzA0QTY3RTcxOUVEQzJDRkYxOTk2QjcxRkZFQkZFNzQ1QzVBMzAwNzU0NUNCNjg3MTZCMDQ5Mzk2MzNCNkVBREY3NjZCRDgyQUI4QUE0QQorCis1ODkxN0Y2NkIyMDg1OEU4QjgyNDQzMjAyOEVCNUQ0NEIyMEVDRjlBMzk0QTdEMkNGMEMwQUE2NjYyQzkzNDQyQzhFMDgxODUyQzc3OEMKKworRThCM0VERjY3NDJDQkI4MjQxMjQ3N0ZDREU3NjY4QTQzMUYyNTVBMDlEODk1NThENkE5NURCNEMxNkU0QThFQjQwNDIxRkJBNDg0RERBCisKKzYzNzFERkZBNjI5NzJGRUU2OTZCQzFDODdDQkM4QTBBNzg1NEY5QzUzQjUyMTQwQzQxRjNFNDFBN0NBNTgxODgyMUFGOTZDN0RDNDE5NAorCitFQzBDQkMwOEIyRTdCMzQ1N0ZFQTNFNTJDNDY0NjdFQkI4NEM3MzlGQjYxQkFGRjFFQTMzNDFFMUNCQjU2M0I5QjhBMzE0NzRBQThBMEUKKworQUVDMDRDNzkyQUU4QzFFREFCOTcxNDIyNTlGRjMyNTkxOEQ1MDNBODg0Q0RGNjY1RDA0OTRGRENENkU4OTU4RkEwMjM3M0FDMjhBRkEyCisKKzYyRUMwODdFQTRFMTIwRDIyRDI5MTA5MjgzNDAyNUI4RDVENUIxRkUyMjg4NzAxNzE2MEMwMEE0OEJGN0VBQkZCQTQzNkUyMjg2RUY2OAorCiszRkQ2NDFCMUJERUEwNUEzNjRCNjJFNDM0QjlFMjhBMTVGRjlCQTlFQzdFRTNFMjgwRkZCQzc5RkQ0NUEyOUY0MUI0MEYwOUNGQzI5QjIKKworNjg4RDY2MkYxNTYyNjE5MTNCM0ZBMzU2QTA1RUZDOUQ2Q0ExMjJGQjIwOEI0OUJCMzhFQzc1NDM3NTRDRDYwQkI2OUM0NTFFMUNFRTlDCisKKzE2QTZDODkwMEY2QUM0NEVCOEU4OTU2QjlFOUZDNDMzMzlGNkFCMkVGRDY3Q0M5OTQzRDNFOUI5NTdFMkFDNzA3RkI5QzAzNUI4OTMwMAorCis4MURCMjRCNkE4NjIxODlFRDc4QzZCMjY1QjVCQTdFMEY0QkU1MjBDQTBDNkQwQUE0RTJGMDZGMkUzQ0IxMDAwQjYyNDk0RTkyNEQwM0QKKworMDgxRkU4RkE4MDQxRTY0NTVFMEQyQkUxNUZENUQ5ODM5RjhFOUQxQzQ0OUVGQkY4MTM0MDQ1NkE3QzExRDNBQ0MxRjE3RUNENjAxQUQ5CisKKzgzRDIyOEExNDQyRkU5MzRFNjFGMkZFQUFFQjIyMkE0REM5NzRBNDlDQThBQTY0RkE1OEEwRTlDQzY0RTFEMTlFOENCRDM3RUE5OUU2MQorCitDQzM3Mzk5Q0U3QTRCMDAyRjM2MTI4RDkwRDQ4REQwRDkyOUMxNTBBOUI3OTFFMTM4MDQ5NDcyMzcxMkQ0RTk2Mjc2ODlCMjFDQUNGRjYKKworNTM1RTZGRkFEOUNCQjQ1RkY0MjI1MURCRkU0QUJDOTYwM0FDQzQ0MUFBQTIzRDZENENDNTE1OTI4QTVCMTZBOEU4RUEyNjVBM0Q1MEVECisKKzE1NzBEMzhGQThDRjFGNTJDRUQ0NEFFMzJDNjY5QTZBMzM0MDYxRDRDMTdFRTk1OTRCMThFRUQxQ0Y0OUM5REMyMENFNTlDRjk2NjkzOAorCiszQTYwMzVCODI4QUVEQTU0Q0Y4RUUzNUFCMTFBREUwQ0FBMDE3MTAzRUExQTE2RjgyODlEQzQ4MUZFN0EwMjdFOUQ1NjE3MEY2QUI2MTgKKworODFGRDlFNjMxNUU2RjRBRDg1MzIwOUMwNzIwMTQwMjM3RTNDNDQ0QjcxNEE0MTc3OTQ5NzVCOTQyNDU4QzE5NjVCRjhCRUQ0MjBGRjJFCisKKzEyQzBCQjZFOTc3NjI1QUYzRjEwQTE2MjUwRTYwMzNEQzQzOUQ2OTYyQzU5Qzc3RTVEOUI5OUZBRTZCREEyMUIwOUI4MkU0QTgzMkJDNQorCiswNEI0MDY1NDAwNjk3MjYyQ0Q5OUE5QzM4MjU5QkM5NTIyQTY2QzJFMkY0RURDODkyOENBQUY3N0I5QkYwNTBFMzYxREJFOUQ0REU3RTEKKworNzdGODRDODE1RjY2OEY4QkMyRUZCRDg2RTRDNUM1RjU1Q0E5REM1MTRFQjA3Q0U0MTVCRjU2RUUzNzIzMzVERTczRDEyREM5RTY3QkJBCisKKzZFNURGQkJCNzg5N0Q0QUEyMTRFNTFGQTMxNEU0OERFQURCQTk1MTMzMENGQzU0ODE4QzAyMDU1Mjk1MjA5MjZBMjA3NERGNjUxQzIwMAorCitCQUI5OTc5MkIzRkI1ODlGQTdBODFGQkI0MTdGOTRCQjA0NzhGRjVBMERDQjNDQzY0OUMwMERGNTQ2ODZENzZCNkFFNjFBRDBCRkZBOTYKKworRjQ1RUZCREI3RUFGOEQxQ0EzNDkyNDNCNjEyNkIyNkE4RUZBMzZCRjMwOTA0RkRERjVENUZGMTAyRDY3RTU1MjBCMzM5ODlEMTk2RDcwCisKKzAzMjk3Mzk1OTcxNzkzRTBDMjBBM0MxMjAyOUVCMENGQzgyOUQzN0Q3NzU0NTJBOUM0NDc5QkY2Q0U5QUQ5QzI1NTI1MzBERTk2MjhBQQorCis2RUE0NkZDMUVGMTlEQTM3RjdFQjc5RERBMDg4MTg2ODMyQzgxNzY4NjRFQzdCRkM1RTE4RTVFNzVDNTc5OTVCNzc2MTRDQTIxM0MwRDkKKworMUY2MThDMkI4OTlFOEJBOTMwNjVDNDcwNDc1RTBFOTE0RDM5OTA4QzUyOENBMENGQjE3OUY3RDg4QjM2OUIwRkU2MDcwMjBCMjY4NUZGCisKKzMwOEQ3NzlGMkUyMkQ5MjkxQTJCMkJCNTc0NUU3MzExODQxRjk1REI4RjkyOTU2NkEzQTdGQzM2NDI1ODkxQUZENURFOTk3QTIzRjhCOQorCis5REVDRkFBMUVCMEE2NTE1NTY3N0I1RUI1MTMzREI4RjNEREFEMDc0NURBOUJBNTcyNTE5QzkxNUIzNTM5ODU2NzY3MzRBODI4QzcwQTQKKworNkE5MDNBNDhGOTJDODQzQzNDNkJGNDI2MjNDNDI4MURCMEI0Mjk0MjQzQTgzMEVCQ0M0QjRDNzIyQjlENzk1Rjg3NUJEREEzMUFGN0RFCisKKzY4NjQwNzMwMTg1MzYxRjJCNzA0RjBDM0FDRTAyMUEwOEExMzM5M0U5NUYwQzE1M0FDMzA1QkQzRDZCMUY5Q0QxQkZENEU5MzBBRTdDNgorCis2RDkyREJBRTIxODc4RDMwN0M1QjAzQUQ5QUMxMTM1ODFFNTYyNUEwNUQxOTVBNTAzRjg0NjBDMDAwOTNBRDhBQzIxNTU4OThENjRENTYKKworMDdFRjQwMjI2NDA1ODJDOTcyNjVBMkYwRDU3OERDN0MzM0IyQThBMjhEQzExREY1NUM5MEYyQzM5RkU2QkQyOUE1RTBDMkM5Q0Q4MkEzCisKKzEzNkY2M0U2MDNFNTM3OTEzNTRFRkE5M0FFM0E2MDkwM0EzQjI4NEQwNTU1NjAyMzUyMTk5MDQ2RjdFNjM4MEFEMzRFNTkzQTQ3M0Q2RAorCitERTJCMjhDRkFEM0E3NTA0MTA4M0FFRTRGQjEyRDlFQjRCMDY5RTQwNUJDRkZGNUE5OEUzQzIyMjNDQUM4OEY3NzNBNUMwRUNCQjE2Q0YKKworMTJBNDgzNjQxODYyMDA5MDM3RDVDNTRBODJGREQ5MEQ0MEQ4RkQ2NjNFQkVDN0M5MUI1OTQ3REIyRkJGNDcxOEE2MjdCMTBDMDc4MzA3CisKKzY5OTE0MjM3NDcyNTEyNUJFMEExMURGODkzRDg5NzVENDNCREY4QUZCMTQ3NkEyREZCMkM4MzgxRTEzQ0I2OUE4QjQ5NEE2QThCMDAzMworCis5MjUzMzIzRTNFMjg1RTA1QTk4MzVGQ0Y0RkUyQUZDRDRENzgyQTAzRkY4MzExRjE1QTUxRTdGNTAzODVDNEExRUZBQTIzOTUwRTc5MTkKKworRDEwN0Y4MUM5REU5RDRBMTBGNjRFQUZCRThDQUQ4NUMwMjg3Q0M0RDRFODE1QjU2MTQ5M0Q3NEZDNjJGRUY3MkI1QUUwNTgxMjAzNUNGCisKKzREODg0MTk3NEQ5Q0U0MUI3MTFEQTQzOEQwMEVDNjAyQzkxMTI3NEY3QzdFMERENUYyMzAzNUM1RjE3MzdFQjE1MUQxMkJDQzczNkRDRQorCis0QjJBQ0IyNTY5N0Q3OURGRDlGNTk0QjREQUYxREI3RjU0MEUxMUZBOUQ0QTE1Qzg2OEM1OTVCQzM1QjRGNzQ0OTA2MjQzNjU5NDgxNDMKKworNTFBNzcxRTQ4NjRDRUJENkU5MjM3OEU3MDk0NjNDNkZFN0JFRUJFMEYzMjU2MTNCRDkzMDk0RUZFQzhCQUFDODk3NzJGQkZFNjU0MDc1CisKKzM1MUU2MkI4NDRCODAxMzFFNzUxQUM0RjM5NTA1REIyNkM4QzM0NDIyQzY2QTQwMzE2QUZCMTk4NjQ5ODAyMzE5RDFGRTRFMUU2NjA0MAorCisxQUIyMzQ5NzEyMDdBREVENkI0QTgwNkYwQ0ZFOTcxRDM1NzdDN0VDODAxMzU1RTVGODRBQ0IzQTMzQ0RGMjk2Q0IzM0NGNDJFNzRBQ0MKKworMDAzMTE3RDhGNzAwRkJEODRGMzRFQjlBREEzOEVFMDcxNkUxQUM4QUNFOTg4MkMxMEJCNEIzNjMzQTZEODc3REQ2NTc4QzFEQjAzNUI2CisKK0REOUU0RTJCMjM0OTM1MDA4NUUwNDI4QUFBQzE3NzU5NzcxQkM0RUREQTFBMkQ0MEZFMEIxNUI2NUE4RUJCNEMyOEE1MjZBNDlDNTZEMAorCitDMjRGRDIzNTY1M0M3OEYyQzQwMzc5QUVFNzkzOTM3RUQ2RjBCRjhGNENDQTgyNUMzMDVDMEYzRkRFRUJERThBQkE2MzUyRjFEQkYwNDkKKworNTVERjc2OTVCRkFBNTlFMTg5NEMxQzU3Q0JFMjlFNDhFQzJGNDRERTc3RTNDNDQ5RTEzQTI1MzU5MTI2OTI1RTRDNkM0NjQ5RjA0MzZCCisKKzAxODg0NTFFNDczNTEzREYzNEM0RkIyQTlBMzcxNDFFMjc4MTFDNkIzMzk1MkQ5QzNCQjAzMzZFNjIyREUxOTI2NDlDNUJDQjc2MTcwMAorCitDRTk0MjNFOUI1MkIyMEI3RTI5QjZDQTQ3MDIyMUQ1OTNBQzBDNUQ4OTUxRUUyQTU2RkVEOTlBOEEzRDAxODQ3M0MwQ0EyOEU0QTQ4MzEKKworRDZBODYxQTc2QzcxNjUzMTRCRjdBMjk5RENDQjU3RjdENENFMkFFRkQ5OTdBRDIxQzU1NjQ3REJFNEYwRkJCQTFGNDEzNjY3QjE5NjA0CisKKzY5RkU5N0IxNDRCRjJERDgyM0NGMjNFMjIzMTNFOEI4OUFCMjVDRTlDMTc0NkYxNDFFMjA0NkRFMjE3QURCRTE4QkNDM0JCQkUwNDY4RQorCiswM0YyNzdEM0Y5NUI1NkNBRjhFMkM1MUEwQUFFRENERkEyMjk0NjY2QTg1MzA4OEVGOTdCQzI3OUZCNTFGQTc4NDE5REEwQUE4M0JGNkQKKworOEVBQ0I4MTE4RTA0NjJFMDQwMUVBODMwMjNEQkFFNkFENTQyMEJCRDI1RTNERUE0NkZCM0I3QzkzNzYzNzNDOEUzNjJFNzRCMDFBRTBDCisKK0U5RDU5QzY5NDVFMTA4RTBFOTJDMjNGNjI2NjFCRkE1NDcwMEUyMDM2MjdCQ0FEMTFFNzg5NUFENTlCRTE4NTlBOUZGQjZGN0IwMTY4NQorCisyM0NCMTExNTUyMzAxOTE2MTA3RDdEMkE0MDM1NDNDQjg0QUVGRTQwNEI4RjE3MEVFNUI0MDg5ODFBODhBNjVDMzM1QjNGQzM0NTRDMDAKKworMTUzRkE5MkNDNDQyQkUwNTkwNzY2Rjc2NUUzMEY4MkZENDE0OTlERTY4OERBRTI3NDhENTcwOUJBNDdBODlFODI1ODEzQkVGNERBNkZBCisKK0VDNUQ3RUY2RTlDQjA5MTNCNUJDNkE2Nzc2QkY5QUM3NjY4NDg1REU4OEU2MjY1RjVDREYwQTg1NEZDODZERUIwNzBFNDBBNDFBMTI1MQorCisxMjkxRTFBNjQxOUM3Njk0RUNBNUVCQUM5REFDRUFDMzAzQzNFOUZFOEE2MkE2NDUyMUUxOEI0OUI1NkIzRUNBNkVCMEZGQTE0OEIyRjUKKworRTU1ODg1NzQyNjQyNDI4OEJCNTRERTE1NDUzRTFCMzIxRDRCMDRDOEQ3MjhCMzBCNzU2QjA1OTdBRTYxRjkyNDQ3QjNBNzU3MTMxNTM5CisKKzg3MDFBQTRGOEE2QjQ2QjQyODNENTBFMjZGNTc3MEVDNjQyNzU5MkYxNkE2NkNBQTgxOTlBRjg0RkYwNUEyNEE1RkJGRDE1ODhCNjExNAorCitFMjRDREYzOUE5OUU3QTZDRDBCQ0Q0NEUwRTg3NzZDOTQ2NUQ4NkNBM0UzQ0RFMzRCMzNEMzE3RUM3NUQ5NTM0MTFDOTA0NTAwMDNCMEIKKworOTQxODgxNjg2QzlCNEEzMjYwQzFEQzRGRTMxRjBBNTM1NzdENEE0NzUwQUM3Q0RENTJFQjMyNzRCNjE1OTdERDVDMTExQUY0NDE0NTZGCisKK0UwOTA4MjFCQzdCMjk4MDY3MTRDQUMwRUY1QjhERTJEQzgxM0Q0MkNEQzg1MzBGNkVCMUREODI2NTdFRTFCNkRDMzlCMEUyQkFEQzE3QQorCis3QTEzRTRFREYyQTg5M0I0MUNEQTc1NEQ2RUI2ODRENkE4RDQ5NkRGMzMxNDAxRkZBRkVEQUYzRkQ4MEJGMUEzNUMyRUNBNTRGNDJCQTQKKworOURCOEM3Q0Q3M0Q4MUY1RjEwNjA1MTVENDdFNkZDMDg3MTdCOUU5Mjk5QjI1NTUzNjI0MURCRkJDNjczOTQ1QTM4ODM5QjM1RDlDOEVBCisKKzFBQTQ0OUNEQTgwODA1QzRCMTRBNTQwODdFQUU5RTRFQkYwRTYxQzgzQTFCQ0M2QzgyNDMzMTNGNUM2RkJGRkVDRkM2QkRDNDM2OERFRQorCis3QUZENDg5RkQ0OERBRkQzNEM1OUZBNkQyREZBRTdFMkM4Qzk1QkUwNUQyQUFCQTZEOTg5RDQxQzdGMEE0MzA3RDExODgyODk2M0YyQ0YKKworQTY1MkJDRkFDMzNCMjI5OTFFNEY2RDgwRDg1MUMwNzIyMjA1NzAyMTU1RURCMDAwNTNCNURBRUM1MDc0NEFFNTVFOTE4NEJFQURBODNCCisKK0Y3Njk2NEY3RDM5NEZDMjdBQjgyREExQTY1RkRBNTZEMzY0OEQ5RjVBQTFGRUZCRkE3MUJEQzRCNjZFOEM0QTlERTQ5MzVGMEZDQkU0NworCis5NTg0OTMxNjE2OTY0ODBERUQzMzE0QjcwNzk5MDFGRTVBRUIxMEY4OUQ5RjE1M0Q2NTRBMEYwRTU4RDcwQjkyMkFDQjk2OUJEODAwQTAKKworRjNDRTQyMUZDRTM3MzE5RDM3N0Q5MDM3NDFBNjBGOEQ4M0FFOEZBQjFDOTk5QkQ4QzM5MTMxNkExQzBDRTZCM0YxODFERUEzRDJBRkJGCisKKzAyQUJFMTIzNzkzNDE5NEU5RjQyQTk3M0FCNDk3MUQzRTNDQjYzQURERENGRTlBNDdCRTc4RjI0NDY4RjgzRTY1MkU3RTY3RDg1M0Y0RAorCis1MDIwRDdBQ0RCRUQyNTBEMUNEQkU4NkQ1ODAxQ0Q1NjkxM0MyMEY4MTAxRjUwOUM5MEY5NzI2M0ZBQzZGRkRENkM4NzA1Q0JBMEVGRkQKKworNUVFQUUxQkUxMTg0MURDNDg0MDFBN0M0MUE1RjBFRDU5RkFDM0NERkI4QTJERkQyQUMwRjNDMTJDQzBFOTY0QjI1QjM0NEUxQjYyNDZBCisKKzI5MkQ0RTlFRTZGQTE4QkY3MUYxQkI3QTkxRUI1QjhGMEUyMEE0RkQ4NTkzQjgwMzMzNTk4MDIyNEQzNzI0MTdFMzY2MkQ5NjMwNTUyNAorCitGMjAwQjcwMTY4QUEzQjQ4NUJEODNERjdBNDJBNTc3MTg4MkZBNTk5RjBGQUQzNkM5QjQ2MzJFNTZENzUxRkVCNTc5RjUzMEE2QTRDMjAKKworQTkwOTc2NUNBREY5MDY1RTRCQzgwQkM1MkZEQTZBMjE4NkUyMkIyNTU5MDE3QTYyNkYyMzA1MjJERTcwODIxOTAxMjM1MUU5MjA1RjZBCisKKzQ1RTk2OEQ5NEQ0MTE2RUY1NUUxM0VGOTIxQjM3NDBDREY0NTU5NjIwNkJEQTI3MkIxNEE4QjJGNkM2RUQ3NDRCQ0NDOEJGRUFCOUI1MAorCis2MDg4REJCNTdEOEZFQzgzN0I0QjAwRjU3OTU5RUY1MTVDRThBOTgwMkY1NEFGMURFMDFGMDcxMTQ2RDlBNjhCRUIzODJGRTAzREQ3REUKKworQUEwMEFBMzJCRDU1MkQyRkQxQjA5RTkyRTMxRTM2MjM0MzRBNUEzNEU3MDJFRDAzNzVFMUE5N0Y4QjA5QUE1MkRDNEZBQjhBMTVGMDlGCisKK0FCRjBCRTQ3QUQwM0Q5OTcyMzZCNkI1NTZBRkE5QzRBM0U0MTM1REI0OTU2REIzOEY5MTQ0NDZEN0UwRkM2QUEyMUQ0MjMyQjBCRjVFQworCis2NkY0MzIxNEVFRkM4Q0Y5ODg1NEJCRDYyNTY2ODE0NDQ3ODk1OUE5ODNBMDFEQ0I0RkEyQkM4RkNERTA4RjNENERBQjQ3NEUwNUMzQUEKKworODBCOTFGRTRGNTNGMTAzRUZERkIxQTUwOTY5NkUwQjY2ODMwREU0NjZDRkU4MjQzMjkyREUzNEQ0RTlBQUU1MEVGRDUzOUMxMjBCQjNECisKK0MwRjdEM0VBRDFDMDMzRUY3RUFCQkUxMjk0Mjc2QzBGNzhDN0MwODlDNzZBMTAyNDg3MEVCQjA5RDQ5M0Q5QTRGMTZBM0U2NUI1QzVDOQorCitGMzgwREJGNTM2NUJCRTgzQUUxM0FENEU5NkM4NTIyNzRGQTZDQzgzNzBDRThGQUQ0NTQ0OUQ5MDUwRTdEMkVBRjM1MkYxNjlDQzdFRkEKKworNjdCMUJCRUNFNDg1QzJEQ0I2MDhBQTdCMkI2RjI3NjJCN0U0NjgyQkNDMzNFQTBFMzA1Q0MzOTVBM0Q3QTJDMkY3RTBFRkNGMkIxMDU1CisKK0YzMEU2MzE3NTdCQjVCRUEyMkQ5MDc0RkYyRDczNTg4RjlFOUREMTI0NzdENDRCRUVDQjlBMDNERDU0MzlDNDcyQ0ZFRURFMkJBRUQ5QQorCitGQkQ2N0FGRjgwNjc1OUJBMEFFMzRDRENCMTJDQTUyMzMyQzkzMjg2MzNDNDJGMTg5NERFNUY5RUM1MDEzNkFBMTI5M0M5RDg5MzcxNjAKKworMERGQjE0RTJFOTU0OTA4NTNCMDYwMUFDNzUyMkJFOEU1MTk3ODZDODdBQTVFMUVEMkI5NkNFMjIxMDA5QUE5QzU1QkM2MEFFQTRFOENFCisKK0ZEQjk3N0IyOEYwNTUxQzMwNkMyMkZGNDAxNjcyOEJBQjc4OUI2NUNFMDdGNjExQjlDODQ4MDg4MzdGODc2NUU1RDk0QjlDODY3QzBFMworCitBRkIwRUE0QTIxQTMyNENDMEEzQkMzNTAxQzM5QTlCQTkyOEIwOUU5QTg3NDA4MzE0REU2M0I3ODMzOTJENUJEOUIzQUNGNTZDQ0Q3MEIKKworNDkzM0MxNzI0NzMyMzc5QTYxNjAxMkRGRjlBOUUxNEQ1QTU1RjUwRDg0MTMzMzk1OEQ2RjM2QjU2OTI2MjI4RjQ3OTY0MjFFNDcwNzM1CisKKzRGQUI3NDMxODk5NDQ1MTE0QkNDRTVEMjcxMTdCRkVBNjVFRTExMTg1MDU3NjUxMzJCNzgzM0ZFOTk3ODg5OUFBQTFCRTNFM0Y4QUZDRgorCiswRTlFMTE0MEEyNkZDOUNBMTU0QTZCQkI4NEMzRTVGRDZDRDhCODI3MzJCRTAxNzlERUJBQ0FDNTM0MEM3OTQ5M0ExOEZBMkU1REY1OEEKKworNUYwQzY1NDZGNUE1ODM2QkQ2MUM5MDRBOEVCQUYxNkNEOTMzQTlCQzdGQTcyRkE3MkYzMTlBMEE2RUU4NkFEMjNDODRFNjcyRDE4Q0JCCisKKzA2OTZGMjJFMUM2OUVDRUZEMTVGQTUyNzA2RTVEQ0YzQ0I1MzExQjI4RDlBNjE0NDQ2Q0UwMzM1NDdFQzBFRjVGRkFFQ0YyQTA0RjFBNgorCitDM0RFOTFFRDJCM0ZCQTk0REQ3Nzk2RTQ1RDI2QUIwMEI5OUIzRTI5NTc1MUJENjQ3M0YwQkYzNkVCQ0EyOEZGQUIyNDUxRTkzREY0RTAKKworMjZCRjA4NDRGQUJDNkExMkVGMTVFQkE2NEE1Q0EwRTk3QzZERDA2Qjk0QkExQ0IyOURGQ0RBRDhDMjAzQzFDQjZGN0ExRkFGNEYzQjU4CisKKzVCREQwQkY5MjI1NDlDQjQ1REY4RjIxOTZDNzA5RjJCOUEzNUE0M0RCMDA0M0UyQkQwMjg3QTNDMzEzRUUzQzMzRjExOUYwOUE1NjE5RgorCitCMzUwRjQwMTFBOTMxMDBDRUUwODQ3RjFCREUxMkZFRThFMzIzQzhGQUUzNEQ1MzVEQjVBMERDODQ3NURFODI5OUUzQzlDRDZEOEIwQ0YKKworRDY0ODE2MTlDNjhFNzdEOTJGQTEwRDlFQkNDMTNFNDc0QUQyMkIxRjQ3RDNGMzYyRkM5NjhDRkMxQjVCNTJFQzI0RjE5QkE4OTQ5NjdFCisKK0VEODExRjM3NTI1QzI2MEFGRTBFMkY5QjMwMkQ2RkZEMDE5NzU0RUJDQzE0RTA1M0E5RUVEMTkwNUY0MDJCQTdCRDNEOEFGQjA5RDJBOAorCitFOTREMEFEQkMzQzJBREZBRkQyQTQwNTIyNTZENThCMjIxRDBBMjA5OTVGOUMzOTRGM0EzQUQ2NDM2Q0ZFNEYwMDMwQzdFOEMyMDk0RTIKKworMDkyRjUxOTFDMkM3MjFDQTk0MzMzNjlBRkMyMjFEMDE4NzJCRjY4Mjk4Njc3ODQxQTA2NTY3NzI2NDlFN0VCQUFDOEIxQjgxQTM4RTc1CisKKzVCMDJEREE0RDA4QjJGMzU3QzBDMTBFMTA2MDYzMkZGNzRGN0VERDVDRkU3RjlEQkIyMzJDM0EyMzFEMTI4QTMzNjhDNEQ5ODcyNDA0RAorCitGNDU3MTlCM0VBMDQ1NTgzNkI4OTNGMDdFMDc3NjJGMEEyRkE5RTAxMTAxMEEwODcyMzUzRjBDRDIyNDNFMTg2MEVDMzNGNzJFMTVFQjIKKworRURFRTFBOTEzOTdGRTZEMjcyOUZFRDFCM0E2NkZEMDA5RUE4REREQUREMUZGREM4Q0QzNjAzODc2RjhEMEM3QUQ2MDE2NEE5NkE2QzczCisKK0I4QThCNTA5ODVFMUZCREEzQURDNTAwMThEMzQxRjI4NTAzNkI1RUUyNTVEOTc1RjZDM0I1Njk4QUM0QTk0QjIzMTdCQUM2NTg4OTc4MworCis0REI3QkY1MkU5QjhEMjBGRDQ5ODE1MTVGQkVGMjM5NjNBN0Y4NjM2RDA4OTdFN0VBODg5MDFDRkFFMUZERDE4REE4NkMyNDY1MDdBMzQKKworNzY3MkFCQjExNkVENjA1QUM5QjRCNkU4OTlCOUU4RjY4NjcxNDBCRTg5REY1Q0Q1MkM2NUMyN0U4NjAxNzBBRUE2Q0FGMzAzQzg2MEE2CisKKzgwQTg1Mzk0REU2ODk2Q0Y5MjhCRUQ3NjE3MUY4OTA0QzVCQkY0MTk2QkFEOTA2NTY5QUM1QzcwNTdFRDEyMDFGMkFFODM5M0NCRjcwNAorCiswMDkxMjRBNkU1MjMxRDMyM0MzRkNFNkM0OENBMjM5RjE2OURGRjQ5NkI5NTEzMzJERUJBNUYwNkNFRTQ4QjZCQ0Y4MjRGMEZCNEJGRTUKKworNEMxMTQ3QkYyMDhDMkE5RDQ0MTMyRDA4OTVGQTdBODdGNkZBRDc4MEREQ0Y5NDU0NUY3MDMwRUYxODA4QjMwRUM2NTlGQTJCNkVBMDExCisKK0EzQzA2MDcwMzg4QkJBRUJFNDVGOEVBQTc1RjcyQkE1QjRFNTYzODBGQjdGQzMxNzlCREI1NUE5QTdDQUY4RDdGQjYwRUFENkRBOTM5QgorCiswOUU2OTE1OTQzMjY3MUM4OEUyMkIzNEQxMTVCNkRFQzU0OTU1NDU0RDYyMjg1NzA5NEI3MEMzMzU5RDZBMjJDMjM5RkUwMzg1M0NGRDkKKworOUI3RkE3M0Q0RUUzQ0QzNDEyNDQ4NkYwMUY1Q0YwNUE0MjNGRkQ3OTRGNTc3RjUwREU2Nzc2Nzc5MTA3QkQ1ODgwOEVFRkEyNERFMUJFCisKKzk0QkIyN0Y4MkExOTA2OEQ3RjlEQzY5NUVDODQ3MzM0MUY3M0ZFRDYyNkE0QTZFODlCNThENEVEMjAyNEY3OEFDNzY3ODgyOUZBNDBCNworCitDOEFBNzQwMEVFM0NFRkUxMjVGNjRFMUFCNDlDRTY3RkEyRjJEMUI4MUZDMzIyQUE2NEYxNjQ2M0MxMzRBRjUxQUE5QzNBMTU0QzdGRDQKKworMzBCQ0Y0NTMxRUE5QjYyMTFGOTIwMDZBQzFDNjE4OTRBN0RENUMzOEU2Q0I4Q0M2OEQ2QTA1QkI5NUIwQkRBRjY2OTcxRDM1N0VGQ0FECisKKzg5QkNCODEwOTQ2MkI3OTY5MjczODk1NjdGNzk3RTU4ODIzNzA2QUIyMjRGRjkyN0E3NjE2RjBFNDUyN0Q5MEIwREI5Njg5RDg1MEQ0QgorCis0RjE0NzA4MENCQkYzNDkzRTU2NEExQ0M0MzYyNzA3NUU3OUJGM0MzMDkxRTQ2NTBCOEU2MDdGNENDQ0JDQUZDRDNGNzc4QjdBMTQ2NEIKKworMTRBNEUyMjlGRDQxQjVCQzRBOTg4ODBGMDA4RUQ2M0ZEMjVBRTQ1MDRFRThCRDM4QjY0MUY2NUQwRjNGNjU5NjFBQzMxNUY0RDY4MTM5CisKKzdDMjQ3MEU4ODgxM0JDRkM3RTQxRkRBOTlBRUZFMTcwRTI3NEQ1M0REM0Q4NThEOEJCREExNTRCRkM5MzQ4MkM2NUZFQUU0QUQ3RTlBNAorCis3QUM5NTMwRjBBODJGRjQ2RThCRjIyRUM2NEIzQThCNjk1MjdFOTIyNDVCM0IyNzJDMzExRkNGOTk0NkU5MzQ3NkQ4MzhFQzBBRTU0RUEKKworOENCODk5MDg3Nzk0QTY3RTZCNEU5NjY2NEFGREQ2MTlGQzA3NEZBMDg5RjgzQTAyRkE0RkNCQjVCRTY5OEU1MDhGODdCQzBGNDgwNTFBCisKKzhBQTRERTNFQkYzRkQ5M0FCQ0Y1OEMxRkI2NDI1NzAyN0FGOEZENjlCN0NFRjA3NDk4RjQ4RjM5M0I0QjRFOUJERDY1MTkzMzJBNzgwQQorCitFNzIxNTJDRTE2OEUzOTlFNzVEQjQ0MTQ2MThCOUVGRkI0OTg2Qjg1QTk0Q0JEMEI5MTJFM0Q1Q0REQkE2Qjc4NEVBQzY2MDk2OUE4M0MKKworQ0YzQUY5MjhCNkU4NDU4NkI1RjFDRjM1M0VGREYwMjJEQTVERjEzMEU3RkZEMTY5OEE5QTdDMjZDODNGMTM1RkMzOUU5Q0VDQjg4NTVECisKKzk2MDFBMDhEOUU1QURDNTM5N0VFOUU2MzlBMTk4QTYxQTc5QjNDRjU5NjBBRkM0MTU4NEI1NkIwRUY1QzYwNEU0MkJERDAyMUU3MTZCNworCiszNzE4QUE3RkE3MDAyRDMyOUYyMkUzODk4QjUyRjMxMTFFOTc1RDUwNTRDOEMxQkM0OTFFREQ2N0NBRjg3NjUxNzkwMUNCNzgwNUZBODQKKworNDI3OTQzNUIyNkEyQjU0QzA4NkZFNDQzQzA3OUEzNzNCNjMwNTI4NjY0QzhGMjYyRDE0N0Y0NEYxOUIzNzYwRDRDQjREM0EzOEI4RTdCCisKKzg0OTJGM0ZDOTEwRTQ1QTIwMUZGQkI4QjNGMDZGODBDRDEzNUMzMjFFRjUxQjdBN0MzMEFGQjVBMTRENUVBODUxRTRCMjMyMzJCM0YwRQorCisyNzI2MDMxMjVERTk5QzZCMTc1NUM5RDNFOEI5RTkyRDMzQUE0RUVCNTVEMDdEMDYxNThGRkY5M0JDRUU5MjFDQkU2QTlCNjYwNUJFM0EKKworRDFDMjAzQUI5MDNBRUQ5MEExRjczNUQzMjg0NkVFOUJGN0FDQkQ3QkM0NzlGREFEODIwNEYwQTU2MDE0NzdFMkNBMDkyQzdDRDU3NjcxCisKK0UyQjE3OUI2MEE3Mjc5NEZCM0RFQkVCRTlFNDFFRjMzM0Y5NzAwN0JGRkRDMUExQzU1Qzc5RUI5Q0Y4NUFDMkRDQzIzNzAwRjQ4RDZFRQorCis2MjFEMDJGQUFCN0Q3RTdDNTEyQjkzOTM2MkFBREIxQUNEQjI1Qjc1RkUxQjkzNUYxNUY5MjJBRTRFMDM2MzJFQzlBQzFDQ0UxMTJGRDcKKworQ0M4NTEwQjg2OTIxMjA5Q0VGNUU2NkY1MkNBRjRFQUZEODNFNzcyQTY1M0IwQjEwRUE3REUzODE3NEE2NDU4MjI4RjkwMTQ2QTFDNUU1CisKK0YwNTdEMzg0Q0I1Q0U1MzFDMDJGN0JGMkJEMjA1MTdGMTgyNTk3MzEwMTU3QUVENjhDMjMyNUNDQUJDMjJGOUQzOEEzMkFGMTU3NTcwNworCitERUE1MTM5RTAzNjM2NzcxNjJEQjZFRTlENDY2MTlEQUM4OEQ5RDk3OTAyRDVDNTgzMzlGRjlCN0UzRERCREI3MjI2REVEMzZDMUNCNTEKKworQjUwQkE3NDRDQjJERTU5NjQxMjY5MTg4NzlEQkU3RDJGQTYxNkZCQTlENEQyOTY1MDIxRUREQThBODhGREZDMDg4NTNEQzFGRTk5NjE0CisKKzE1Qzc0MUIyMUZBN0Q3OUE2RjAyODFCRDA1NEU0OUM2RjE4OTNBMkE0QjM3MDhFNzI3MkY0MkM2QUU4QTVFN0M5NUNENjg3OTQ2NjE1MAorCitDQjk5RjQxMTBCMzkyREE3REY5MTQxOTU3MUVFMzFDOTI2QjM1NzFEQzBGRDczMDJFMjcxMjYzQzRBRkNGNzU1MzUyNTY1MUQ4RDU1ODcKKworN0FBNEUxMzMzMDkyRUQ1MkE5NjcyOTkwQkYzNEExQjYwRUMyNDMyNDE1MzBFNjdFOUYxRDdDQ0JCQTFCNTExQTI0NzkzRjI1MTFGM0U0CisKKzc2M0IwMkQ0MDg0Q0ZGMDk5QkQ4MzQwOEZFQUQwNDAzRTMzQTZCRUZCQ0FEOTU2NDIzMkZBQjdCQUJDOEJDQUY3ODVBNkVBNzRBQTg4MgorCitCNzRERTIyOUE2QzlEMTQwRTYxN0YxMEU5ODg0Njc3MDREMzE2OTU2MzcxMDY4MjVERTBGMzFDM0JCQUQ3RUVDMzE3QzJDQkY3Q0E3QjIKKworRTI1QTUzNjVDODIzNEI5QzU3QzlFMzg1M0M3QTU4MTk3MkIzMTg2QUE4NzA0NkMwOURBQTQ0MjlEQ0M1NkM3Q0Y3Rjk3NTA0MjhCOTc0CisKKzQ5RTZEOUUwRUUxMDRCQjJFODBEMDU3OTdENjFDNzFGNzc1MUM1NzI2RTFGRDdDNDQxMTc2QUJEMzI2MTNCNkQ3RUE5OEI0MjYyRjlGNQorCis2NjRBQThENEU5NDIyQUEwRjQ0QzRBMUM3OUMzMjE0MEY2RjM4QUJEMEZFOUQ3Q0Q4NTk5N0EzNTdDOTk5QTM3Njc0RjQ2MDM2MDkzNDkKKworQkVCQTRGODZEODE4MjkwRjZEMUU3NUNDNzA1NTVENjhBNzE3RUMwNjNCOTI5MzFGMjI3OEU0NjBBMjRBNTMzNzdEODUzMjJGQUMwM0JBCisKK0QwMDhFRDY0MDJGMzc2OEE3NUNFRUY0RUJGNzM4NTJBMjUxMkMxNDk5QjNENDUwMkUwNUU5QzRDNzdEOTYyNzA4REU3RkI0MDYyNjVBNworCitBN0IwQUUzOEU4NzlCRTg5MjJDNTg1RUY0QUNEQTJBNDQ1OUMyN0RFQUM1OTA5QUJDQzE1MDY0RUI2Qjk3NEVFRDk1NzAyMjg2RjhDMDQKKworRTU5MTg3MjQxRTM1N0JGMEZBMkYxQjFEMjU3NjM2NkREOTZCMTVFNDA4OTEwNDE0MzVEMzU0MjM0NERERENFQTk5ODJFNzg1MEJDRjEyCisKK0JGNjAwOTNGMEJCOTEyNzlFOEFDMkE0MERCNUM3RjA1ODY0MjJBOUI3NTE5QjVBMTRGMEU1QkU0OUJDMDgxODEzN0QwRDUxMkEyQkQ2RQorCis0NzU4NTVFQUZCRUY0NzAxOTA3MjFBNkU5MDk2NkNEOEY0N0Y4MDE3ODBCNjE4MUM5MkI2RDQwMUJCNzBBNjRDOTVCMTJBRTdEREQ5ODAKKworRDMyMzIzRUY1NjlDMDUxMDVBREMzQUI1REUxMjdCNDIxRUUxNDUzREY3RkM1QkUyMjc1RTU5NDFGQzlDN0ZFRTA5RjkzMTAzOURBNzBCCisKKzkyMDYwNEQ0MDcwMzM2OUI0N0Q4MDE0RTk1RjgyNzU2MzIzNEQzMkEwOEZDRjhCOTkwNzNGQkY3RTg3QTM0RDdGQTFBRjlFNkI1QzVDMAorCis4ODAyMjUwQUNCN0U5NDNEQTEwOEJCMjQ4NUE0MTMyNDgxOUNFODVBRDUxQ0E4M0ZDNzU3NUZENUU4RUUzNTNBQjhDNkI5QzJGM0RCOEUKKworQjNERUQ0NUYyMjcxMTE5MDMyMUEyRjZGOTUwOTdERDZBMEVEOTFFMERBNTRBQUZEMDVBNkI5RDM5OTIzOTUyNUNEODMzRTlBQTYyMzFDCisKK0Q0RjgzNUI3MzBFNTQ1OUMzOTlERjc2OTNEQzRDMUNBRUZBRDY0MTZCQzk1RjhCOUYwNTMzQzBBMjdEODZCNDJEODQ4MEZDOTA4QUE5MQorCitDMDQ2OEYwQkY3M0NDNUUyNjBFNUYwMEQ4MkM0MzlFOUE1ODFCMTlBNjFCNTAxNDYwNkQ1N0QxODZEOUY5NDY5MjE3QjQ0NzJEQjE2MDkKKworRkVEMTk0OUQyOUZGM0UyRTNGQUFCNTM2RkY3OTQ5QTI2MDQyQjlGQzU0MDhCN0IwNTlFRTM1QjBFMjg3RjREOENFRTUwRTU0MERCNzE2CisKKzY4MDJFRkJGMEZCNjBGMThFNUExRkE5NDJBNEUzRTY2RUU2OEVBNDRCOEZGNjZCM0IwNjY5RTU5QTgxQzYxNjYzMTI5ODcxNjRFNkRDNAorCitEQjc1MDlCMTE0NDQyODdBNUJFQzVCRUE5RkY2NTZENUE0MkMwRENCMTBGODNCMTRERjAyQkJGRTcyOUU5ODM5RTU5NDg5NURBODA0NDgKKworQjc2MEQ3QUI1RTU4QjY3NUFEQTQyMDk4OTI5RkJFRDM1RDYyQTU0NzM3RkU2RTYxMjU2OUI4REU0RUI2MDNGMURENkRCRkZFOEY3OUQ2CisKK0FFQTFCMDU5OTkxM0FBNzAwODNFQjk0RTI1MURCMjc3QkU5RjQ5MkU0RDEzQjJFNDJGQ0NGODI1QjM1ODlFQzRGOTQyN0JBNjU5QTU5QgorCis3M0RBQ0MzQzlEMkU5Q0Q3NzI2N0RFRkNGRENGMjExN0Y1MjA3QUVDNDE5ODEzMEIxQjU4NTg3NUE0OUI2RTAxQzhBNUZFNUVCQzQ2NzgKKworMkJEQkM0MzhCRTMyQTFDQUYxMzRFOUI1M0Q4Mjc2MUU5QjY4MkUwQTE5OEE4MTJGMjk2RTE5M0MyOTY0MTI1OTY5NzhERDNDNUVFRjBGCisKK0JFN0IzNTM1NjhDNTYyN0JDNjQ2N0M3NjdGOUVEODQxMkVFNDA1QzI0RjZERkU5NUFGNzI0MzdEMUFEOUI5OTJGRjMwNDU5RDIzMjQ5MQorCis2NDVFODQ1RkZGMDMyMTQ5NDlEMzNFMUE0OEVGMkE5OURCMjlERTZGRjgyRTcyMDUwRTBFNkUwOEU4NjNEQjU3MEFERjUxNUQ4MjkzMUIKKworQUU3MDQzN0U0OUMzOTc3Njc4NzRFMzQ1MTM0MTdBNDkyMzRCQkQ4OUYxOUZGQzNFRTNDRDlGNUJBNzExMkE0QkVDMDcwMTJDNzA5NTg1CisKKzk3RUNBNUE1MDEzNjVFMzUyNEE1MDBGQThBNDNBN0JBOTBGOTFFOENENTgyNUY2NTk0MDgyNURFODBGNUVGMTExOTg5NTJBMjU4QjVCQgorCitFQzVBQTI0NEY4Njc0QkUxNzY0QjUyNkRCNkI5RDI0NEM4ODY5ODBCMjVDN0VFNEFDRkVCRjc5MzQ5RTI2RjJEMkQ2NUZBMjgxMEQxQ0QKKworNEIzOTIzM0Y5NjM4NTQ2QTNGRjFFOEQwMTdFRjQ1OEYxODJDRjIyODM5MkFEMzBBNkU3REY3MTVDRDBCNTVGQTM3N0RGQTY4ODBGNTU0CisKKzM2N0E2RTM3MjgwNjVERjY1Q0FEMzBBRDkyNzk0Mzk2Mzk3M0Y2NTk2QzFDMUREMjlDMkM4NEIyMjRGODEzNjFENENBMkVEMkNDNjQ4MworCitBNTlGODMzQ0I4QTk2NEMyODFCMEJBMkM4MzQ3ODNDNTc1Mjk4NkI4RTcwNTgzRTZDOUFBMzMxMzJCRkM2Nzk5OEI5OTJGMjQ5RDBBRDcKKworNkMwMkJERDI5MjVCMzk1MDFBNjlFNEUwMEREMzUzNEM0NzREMDcxNUM5MTNFMjM2NjBCQjc2NUMyRTVGRTM3RjQ0NUFDNjA1RjYyREU5CisKK0M1MzNFRTkyNEVGRTIwNUM1MjhDMzcyNDAzNjk2ODg1RERENkJBREFGNjAyOTkzRjNERjQ5OTU3RTIxQjJFRTQwOUFBNjMzNkE4MTAzRQorCitCQ0MwQjMzQjhGRkQ4QzgxOEYyRDI1RDIyRTNCMEU0RTg3NENGNEFERTAzRjY5QzFCMDE3REE5Q0VEOUVBRkM2Q0JEODY3ODBDODE5QTkKKworQ0UwM0MyQUEyMDNDQUJEMjk5MjUxQjkwOTBGMjY1OUMzMjQ1QTg0NUI1MEVCMzZCQ0JDMDdBRDZGRTBBMTkxRDNFOEJEMEM5Qjk3MDBBCisKKzcwNkVBMzAyOEU4MDU1QjU4NUE2RDhGMzA1QzgwREQ1QURCRTFEQTQzMzY2OUUxRDlGNDU5RUExMDVCNUY2RDc1NkE5RkYzREY3MTYwNworCis5RkRBNzczMTJFNDQ3Rjc2NEMwRjE3OEI3RjEyOERBNEFDRTE3RjhENEYyMTM4NjRDMkFBRkFCMEQ1QkNFNDBBMTlBQzkyRkYyMUQ3QjEKKworRjFGM0NFQzMzODk1MUQ3MjkyMTQ3OTM3RUQwQkRCMENFQzI1NzhEMEJGRTEyRjdGMjFCNEQ3NkFERDFGNTU3RThBNTc2MTM5OTU5MUMyCisKK0Q0QTJDQjFGMEQ5NTY0NTg2NTY3QUU5MTY1NDUxREZGNUQ2MUUwOEYwNDIxQTg2MDZFNDlBNTUyRTE5RjhDQ0RDOTBDQTkyQzRCQzJBRAorCisyRkMzREMyOURGRjZFNTZCQTg1RDhFN0IwMzg4OTYyREI1QkIxMDdDQkFCNEZENDE3MEYyNEMyMURGRTJBM0VGMjlEREI4MkMwMkVGMzIKKworNEI5REIyQUMwOUMxQTVFQTdDNzFCMTU0NzU3M0I2OEZGOEMzMjE1QjgwM0NEM0VERTEyMkRFMUQ3MTQ5MkJEM0I3MUM1QTZERTUyRDUwCisKKzhFOTg2NzY1NjBFRDI3MzQwM0I5RDY1NUYyMzk1NzkwMDc3MDZDMDc4RUEzRURDMTIwRURGRUNBRjRGMTMzNzlBNDUyNkZCMzczMUEwOAorCis5NjkwQ0Y2RDc0RjJFOTVFMzMyRDFEREIzNkRGNDU4NzcxRjBGN0JGMzIxRTUyNDQ0N0I2RTA0QUMzMzAxMUU4NTVBMEUyNTU4MkYxMDQKKworNjlGMUI2QzE5MDg5QUYwMTNDMzhGMjYyNDgyNkE1NzMwNjQxCisKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitjbGVhcnRvbWFyayAle3Jlc3RvcmV9aWYKKworJSVFbmRQcm9jU2V0CislJUJlZ2luUHJvY1NldDogdGV4cHMucHJvCitUZVhEaWN0IGJlZ2luIC9yZntmaW5kZm9udCBkdXAgbGVuZ3RoIDEgYWRkIGRpY3QgYmVnaW57MSBpbmRleCAvRklEIG5lIDIKK2luZGV4IC9VbmlxdWVJRCBuZSBhbmR7ZGVmfXtwb3AgcG9wfWlmZWxzZX1mb3JhbGxbMSBpbmRleCAwIDYgLTEgcm9sbAorZXhlYyAwIGV4Y2ggNSAtMSByb2xsIFZSZXNvbHV0aW9uIFJlc29sdXRpb24gZGl2IG11bCBuZWcgMCAwXS9NZXRyaWNzCitleGNoIGRlZiBkaWN0IGJlZ2luIEVuY29kaW5ne2V4Y2ggZHVwIHR5cGUgL2ludGVnZXJ0eXBlIG5le3BvcCBwb3AgMSBzdWIKK2R1cCAwIGxle3BvcH17W31pZmVsc2V9e0ZvbnRNYXRyaXggMCBnZXQgZGl2IE1ldHJpY3MgMCBnZXQgZGl2IGRlZn0KK2lmZWxzZX1mb3JhbGwgTWV0cmljcyAvTWV0cmljcyBjdXJyZW50ZGljdCBlbmQgZGVmWzIgaW5kZXggY3VycmVudGRpY3QKK2VuZCBkZWZpbmVmb250IDMgLTEgcm9sbCBtYWtlZm9udCAvc2V0Zm9udCBsb2FkXWN2eCBkZWZ9ZGVmCisvT2JsaXF1ZVNsYW50e2R1cCBzaW4gUyBjb3MgZGl2IG5lZ31CIC9TbGFudEZvbnR7NCBpbmRleCBtdWwgYWRkfWRlZgorL0V4dGVuZEZvbnR7MyAtMSByb2xsIG11bCBleGNofWRlZiAvUmVFbmNvZGVGb250ey9FbmNvZGluZyBleGNoIGRlZn1kZWYKK2VuZAorJSVFbmRQcm9jU2V0CislJUJlZ2luUHJvY1NldDogc3BlY2lhbC5wcm8KK1RlWERpY3QgYmVnaW4gL1NEaWN0IDIwMCBkaWN0IE4gU0RpY3QgYmVnaW4gL0BTcGVjaWFsRGVmYXVsdHN7L2hzIDYxMiBOCisvdnMgNzkyIE4gL2hvIDAgTiAvdm8gMCBOIC9oc2MgMSBOIC92c2MgMSBOIC9hbmcgMCBOIC9DTElQIDAgTiAvcndpU2VlbgorZmFsc2UgTiAvcmhpU2VlbiBmYWxzZSBOIC9sZXR0ZXJ7fU4gL25vdGV7fU4gL2E0e31OIC9sZWdhbHt9Tn1CCisvQHNjYWxldW5pdCAxMDAgTiAvQGhzY2FsZXtAc2NhbGV1bml0IGRpdiAvaHNjIFh9QiAvQHZzY2FsZXtAc2NhbGV1bml0CitkaXYgL3ZzYyBYfUIgL0Boc2l6ZXsvaHMgWCAvQ0xJUCAxIE59QiAvQHZzaXpley92cyBYIC9DTElQIDEgTn1CIC9AY2xpcHsKKy9DTElQIDIgTn1CIC9AaG9mZnNldHsvaG8gWH1CIC9Adm9mZnNldHsvdm8gWH1CIC9AYW5nbGV7L2FuZyBYfUIgL0Byd2l7CisxMCBkaXYgL3J3aSBYIC9yd2lTZWVuIHRydWUgTn1CIC9AcmhpezEwIGRpdiAvcmhpIFggL3JoaVNlZW4gdHJ1ZSBOfUIKKy9AbGx4ey9sbHggWH1CIC9AbGx5ey9sbHkgWH1CIC9AdXJ4ey91cnggWH1CIC9AdXJ5ey91cnkgWH1CIC9tYWdzY2FsZQordHJ1ZSBkZWYgZW5kIC9ATWFjU2V0VXB7dXNlcmRpY3QgL21kIGtub3due3VzZXJkaWN0IC9tZCBnZXQgdHlwZQorL2RpY3R0eXBlIGVxe3VzZXJkaWN0IGJlZ2luIG1kIGxlbmd0aCAxMCBhZGQgbWQgbWF4bGVuZ3RoIGdley9tZCBtZCBkdXAKK2xlbmd0aCAyMCBhZGQgZGljdCBjb3B5IGRlZn1pZiBlbmQgbWQgYmVnaW4gL2xldHRlcnt9TiAvbm90ZXt9TiAvbGVnYWx7fQorTiAvb2R7dHhwb3NlIDEgMCBtdHggZGVmYXVsdG1hdHJpeCBkdHJhbnNmb3JtIFMgYXRhbi9wYSBYIG5ld3BhdGgKK2NsaXBwYXRoIG1hcmt7dHJhbnNmb3Jte2l0cmFuc2Zvcm0gbW92ZXRvfX17dHJhbnNmb3Jte2l0cmFuc2Zvcm0gbGluZXRvfQorfXs2IC0yIHJvbGwgdHJhbnNmb3JtIDYgLTIgcm9sbCB0cmFuc2Zvcm0gNiAtMiByb2xsIHRyYW5zZm9ybXsKK2l0cmFuc2Zvcm0gNiAyIHJvbGwgaXRyYW5zZm9ybSA2IDIgcm9sbCBpdHJhbnNmb3JtIDYgMiByb2xsIGN1cnZldG99fXt7CitjbG9zZXBhdGh9fXBhdGhmb3JhbGwgbmV3cGF0aCBjb3VudHRvbWFyayBhcnJheSBhc3RvcmUgL2djIHhkZiBwb3AgY3QgMzkKKzAgcHV0IDEwIGZ6IDAgZnMgMiBGL3xfX19fX19Db3VyaWVyIGZudCBpbnZlcnRmbGFne1BhaW50QmxhY2t9aWZ9TgorL3R4cG9zZXtweHMgcHlzIHNjYWxlIHBwciBhbG9hZCBwb3AgcG9ye25vZmxpcHN7cG9wIFMgbmVnIFMgVFIgcG9wIDEgLTEKK3NjYWxlfWlmIHhmbGlwIHlmbGlwIGFuZHtwb3AgUyBuZWcgUyBUUiAxODAgcm90YXRlIDEgLTEgc2NhbGUgcHByIDMgZ2V0CitwcHIgMSBnZXQgbmVnIHN1YiBuZWcgcHByIDIgZ2V0IHBwciAwIGdldCBuZWcgc3ViIG5lZyBUUn1pZiB4ZmxpcCB5ZmxpcAorbm90IGFuZHtwb3AgUyBuZWcgUyBUUiBwb3AgMTgwIHJvdGF0ZSBwcHIgMyBnZXQgcHByIDEgZ2V0IG5lZyBzdWIgbmVnIDAKK1RSfWlmIHlmbGlwIHhmbGlwIG5vdCBhbmR7cHByIDEgZ2V0IG5lZyBwcHIgMCBnZXQgbmVnIFRSfWlmfXtub2ZsaXBze1RSCitwb3AgcG9wIDI3MCByb3RhdGUgMSAtMSBzY2FsZX1pZiB4ZmxpcCB5ZmxpcCBhbmR7VFIgcG9wIHBvcCA5MCByb3RhdGUgMQorLTEgc2NhbGUgcHByIDMgZ2V0IHBwciAxIGdldCBuZWcgc3ViIG5lZyBwcHIgMiBnZXQgcHByIDAgZ2V0IG5lZyBzdWIgbmVnCitUUn1pZiB4ZmxpcCB5ZmxpcCBub3QgYW5ke1RSIHBvcCBwb3AgOTAgcm90YXRlIHBwciAzIGdldCBwcHIgMSBnZXQgbmVnCitzdWIgbmVnIDAgVFJ9aWYgeWZsaXAgeGZsaXAgbm90IGFuZHtUUiBwb3AgcG9wIDI3MCByb3RhdGUgcHByIDIgZ2V0IHBwcgorMCBnZXQgbmVnIHN1YiBuZWcgMCBTIFRSfWlmfWlmZWxzZSBzY2FsZWJ5OTZ7cHByIGFsb2FkIHBvcCA0IC0xIHJvbGwgYWRkCisyIGRpdiAzIDEgcm9sbCBhZGQgMiBkaXYgMiBjb3B5IFRSIC45NiBkdXAgc2NhbGUgbmVnIFMgbmVnIFMgVFJ9aWZ9TiAvY3AKK3twb3AgcG9wIHNob3dwYWdlIHBtIHJlc3RvcmV9TiBlbmR9aWZ9aWZ9TiAvbm9ybWFsc2NhbGV7UmVzb2x1dGlvbiA3MgorZGl2IFZSZXNvbHV0aW9uIDcyIGRpdiBuZWcgc2NhbGUgbWFnc2NhbGV7RFZJbWFnIGR1cCBzY2FsZX1pZiAwIHNldGdyYXl9CitOIC9wc2Z0c3tTIDY1NzgxLjc2IGRpdiBOfU4gL3N0YXJ0VGV4Rmlney9wc2YkU2F2ZWRTdGF0ZSBzYXZlIE4gdXNlcmRpY3QKK21heGxlbmd0aCBkaWN0IGJlZ2luIC9tYWdzY2FsZSB0cnVlIGRlZiBub3JtYWxzY2FsZSBjdXJyZW50cG9pbnQgVFIKKy9wc2YkdXJ5IHBzZnRzIC9wc2YkdXJ4IHBzZnRzIC9wc2YkbGx5IHBzZnRzIC9wc2YkbGx4IHBzZnRzIC9wc2YkeSBwc2Z0cworL3BzZiR4IHBzZnRzIGN1cnJlbnRwb2ludCAvcHNmJGN5IFggL3BzZiRjeCBYIC9wc2Ykc3ggcHNmJHggcHNmJHVyeAorcHNmJGxseCBzdWIgZGl2IE4gL3BzZiRzeSBwc2YkeSBwc2YkdXJ5IHBzZiRsbHkgc3ViIGRpdiBOIHBzZiRzeCBwc2Ykc3kKK3NjYWxlIHBzZiRjeCBwc2Ykc3ggZGl2IHBzZiRsbHggc3ViIHBzZiRjeSBwc2Ykc3kgZGl2IHBzZiR1cnkgc3ViIFRSCisvc2hvd3BhZ2V7fU4gL2VyYXNlcGFnZXt9TiAvY29weXBhZ2V7fU4gL3AgMyBkZWYgQE1hY1NldFVwfU4gL2RvY2xpcHsKK3BzZiRsbHggcHNmJGxseSBwc2YkdXJ4IHBzZiR1cnkgY3VycmVudHBvaW50IDYgMiByb2xsIG5ld3BhdGggNCBjb3B5IDQgMgorcm9sbCBtb3ZldG8gNiAtMSByb2xsIFMgbGluZXRvIFMgbGluZXRvIFMgbGluZXRvIGNsb3NlcGF0aCBjbGlwIG5ld3BhdGgKK21vdmV0b31OIC9lbmRUZXhGaWd7ZW5kIHBzZiRTYXZlZFN0YXRlIHJlc3RvcmV9TiAvQGJlZ2luc3BlY2lhbHtTRGljdAorYmVnaW4gL1NwZWNpYWxTYXZlIHNhdmUgTiBnc2F2ZSBub3JtYWxzY2FsZSBjdXJyZW50cG9pbnQgVFIKK0BTcGVjaWFsRGVmYXVsdHMgY291bnQgL29jb3VudCBYIC9kY291bnQgY291bnRkaWN0c3RhY2sgTn1OIC9Ac2V0c3BlY2lhbAore0NMSVAgMSBlcXtuZXdwYXRoIDAgMCBtb3ZldG8gaHMgMCBybGluZXRvIDAgdnMgcmxpbmV0byBocyBuZWcgMCBybGluZXRvCitjbG9zZXBhdGggY2xpcH1pZiBobyB2byBUUiBoc2MgdnNjIHNjYWxlIGFuZyByb3RhdGUgcndpU2Vlbntyd2kgdXJ4IGxseAorc3ViIGRpdiByaGlTZWVue3JoaSB1cnkgbGx5IHN1YiBkaXZ9e2R1cH1pZmVsc2Ugc2NhbGUgbGx4IG5lZyBsbHkgbmVnIFRSCit9e3JoaVNlZW57cmhpIHVyeSBsbHkgc3ViIGRpdiBkdXAgc2NhbGUgbGx4IG5lZyBsbHkgbmVnIFRSfWlmfWlmZWxzZQorQ0xJUCAyIGVxe25ld3BhdGggbGx4IGxseSBtb3ZldG8gdXJ4IGxseSBsaW5ldG8gdXJ4IHVyeSBsaW5ldG8gbGx4IHVyeQorbGluZXRvIGNsb3NlcGF0aCBjbGlwfWlmIC9zaG93cGFnZXt9TiAvZXJhc2VwYWdle31OIC9jb3B5cGFnZXt9TiBuZXdwYXRoCit9TiAvQGVuZHNwZWNpYWx7Y291bnQgb2NvdW50IHN1Yntwb3B9cmVwZWF0IGNvdW50ZGljdHN0YWNrIGRjb3VudCBzdWJ7CitlbmR9cmVwZWF0IGdyZXN0b3JlIFNwZWNpYWxTYXZlIHJlc3RvcmUgZW5kfU4gL0BkZWZzcGVjaWFse1NEaWN0IGJlZ2lufQorTiAvQGZlZHNwZWNpYWx7ZW5kfUIgL2xpe2xpbmV0b31CIC9ybHtybGluZXRvfUIgL3Jje3JjdXJ2ZXRvfUIgL25weworL1NhdmVYIGN1cnJlbnRwb2ludCAvU2F2ZVkgWCBOIDEgc2V0bGluZWNhcCBuZXdwYXRofU4gL3N0e3N0cm9rZSBTYXZlWAorU2F2ZVkgbW92ZXRvfU4gL2ZpbHtmaWxsIFNhdmVYIFNhdmVZIG1vdmV0b31OIC9lbGxpcHNley9lbmRhbmdsZSBYCisvc3RhcnRhbmdsZSBYIC95cmFkIFggL3hyYWQgWCAvc2F2ZW1hdHJpeCBtYXRyaXggY3VycmVudG1hdHJpeCBOIFRSIHhyYWQKK3lyYWQgc2NhbGUgMCAwIDEgc3RhcnRhbmdsZSBlbmRhbmdsZSBhcmMgc2F2ZW1hdHJpeCBzZXRtYXRyaXh9TiBlbmQKKyUlRW5kUHJvY1NldAorJSVCZWdpblByb2NTZXQ6IGNyb3AucHJvCitUZVhEaWN0IGJlZ2luIC9jWCAxOCBkZWYgL0NNe2dzYXZlIFRSIDAgY1ggbmVnIG1vdmV0byAwIGNYIGxpbmV0byBzdHJva2UKK2NYIG5lZyAwIG1vdmV0byBjWCAwIGxpbmV0byBzdHJva2UgZ3Jlc3RvcmV9ZGVmIGVuZCAvYm9wLWhvb2t7Y1ggZHVwIFRSCitnc2F2ZSAuMyBzZXRsaW5ld2lkdGggMCAwIENNIHZzaXplIGNYIDIgbXVsIHN1YiBkdXAgaHNpemUgY1ggMiBtdWwgc3ViCitkdXAgaXNsc3s0IDIgcm9sbH1pZiAwIENNIGV4Y2ggQ00gMCBleGNoIENNIGdyZXN0b3JlIDAgY1ggLTIgbXVsIFRSIGlzbHMKK3tjWCAtMiBtdWwgMCBUUn1pZn1kZWYKKyUlRW5kUHJvY1NldAorVGVYRGljdCBiZWdpbiBAZGVmc3BlY2lhbAorCisgL2Fycm93IHsgc2F2ZSA0IDEgcm9sbCAxNCBkaWN0IGJlZ2luIC95IGV4Y2ggZGVmIC94IGV4Y2ggZGVmIC9EIGV4Y2gKK2RlZiBjdXJyZW50cG9pbnQgL2IgZXhjaCBkZWYgL2EgZXhjaCBkZWYgL2R4IHggYSBzdWIgZGVmIC9keSB5IGIgc3ViCitkZWYgL2Fycm93bGVuIGR4IGR1cCBtdWwgZHkgZHVwIG11bCBhZGQgc3FydCBkZWYgL2FuZ2xlIGR5IGR4IGF0YW4KK2RlZiAwIHNldGdyYXkgYSBiIHRyYW5zbGF0ZSBhbmdsZSByb3RhdGUgL3hwIGFycm93bGVuIGRlZiAvbSB4cCBEIHN1YgorZGVmIDAuNSBzZXRsaW5ld2lkdGggWzMgMV0gMCBzZXRkYXNoIDAgMCBtb3ZldG8gbSAwIGxpbmV0byBzdHJva2UgL2JhY2sKK0QgOCBkaXYgbmVnIGRlZiAvdXAgRCA0IGRpdiBkZWYgbSAwIG1vdmV0byBiYWNrIHVwIHJsaW5ldG8geHAgMCBsaW5ldG8KK2Nsb3NlcGF0aCBmaWxsIG0gMCBtb3ZldG8gYmFjayB1cCBuZWcgcmxpbmV0byB4cCAwIGxpbmV0byBjbG9zZXBhdGgKK2ZpbGwgZW5kIHJlc3RvcmUgfSBkZWYgL2RyYXd0cmlhbmdsZSB7IC0xNDQgNzIgcmxpbmV0byAwIC0xNDQgcmxpbmV0bworY2xvc2VwYXRoIGZpbGwgfSBkZWYgL2Nyb3BtYXJrIHsgMiBjb3B5IG1vdmV0byAwIC0xOCBybW92ZXRvIDAgMzYgcmxpbmV0bworc3Ryb2tlIG1vdmV0byAtMTggMCBybW92ZXRvIDM2IDAgcmxpbmV0byBzdHJva2UgfSBkZWYgL2ZpbGxwYWdlIHsgLjkKK3NldGdyYXkgMCAwIG1vdmV0byAwIDc5MiBybGluZXRvIDYxMiAwIHJsaW5ldG8gMCAtNzkyIHJsaW5ldG8gZmlsbAorMCBzZXRncmF5IC4yNSBzZXRsaW5ld2lkdGggMTggMTggY3JvcG1hcmsgMTggNjg0IGNyb3BtYXJrIDU0OSA2ODQgY3JvcG1hcmsKKzU0OSAxNyBjcm9wbWFyayB9IGRlZiAvc2hvd3BhcnQgeyAxMCAtMjIgdHJhbnNsYXRlIC9TdG9uZVNhbnMtU2VtaWJvbGRJdGFsaWMKK2ZpbmRmb250IDE0MCBzY2FsZWZvbnQgc2V0Zm9udCBkdXAgc3RyaW5nd2lkdGggcG9wIC9zdyBleGNoIGRlZiBzdworbmVnIC00NiBtb3ZldG8gMCBzZXRncmF5IGR1cCBzaG93IHN3IDQgYWRkIG5lZyAtNDIgbW92ZXRvIDAuNyBzZXRncmF5CitzaG93IHN3IG5lZyAwIHRyYW5zbGF0ZSAvU3RvbmVTYW5zLVNlbWlib2xkSXRhbGljIGZpbmRmb250IDMwIHNjYWxlZm9udAorc2V0Zm9udCBkdXAgc3RyaW5nd2lkdGggcG9wIC9zdyBleGNoIGRlZiBzdyBuZWcgMCBtb3ZldG8gMCBzZXRncmF5CitzaG93IHN3IDEwIGFkZCBuZWcgMCB0cmFuc2xhdGUgLTYwMCAxMCBtb3ZldG8gMTIgMCAxMCBhcnJvdyB9IGRlZgorIAorQGZlZHNwZWNpYWwgZW5kIFRlWERpY3QgYmVnaW4KKzM3Mjk4MjUyIDQ2MTc4Nzg5IDEwMDAgNjAwIDYwMCAoYm9vay5kdmkpIEBzdGFydCAvRmEKKzEzM1szMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMworMzMgMzMgMzMgMzMgMzMgMzMgMzMgMzMgMzMgMVszMyAzMyAyWzMzIDMzIDMzIDMzIDMzIDMzCiszMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMyAzMworMzMgMzMgMzMgMzMgMVszMyAxWzMzIDNbMzMgMzMgMzMgMzMgMzMgMzMgMzMgMzMgMzMgMzMKKzMzIDMzIDNbMzMgMzMgM1szMyAzNlt7LjgyIEV4dGVuZEZvbnQgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTczCis2Ni42NjY2NjcgL1BQQ29kZSByZiAvRmIgMSAxNCBkZjwwMDAwMDFGRkMwMDAwMDAwMDAwMDFGRkZGQzAwMDAwMDAwMDBGRgorRkZGRjgwMDAwMDAwMDFGRjAwN0ZDMDAwMDAwMDA3RjAwMDA3RjAwMDAwMDAxRjgwMDAwMEZDMDAwMDAwM0YwMDAwMDA3RTAwCiswMDAwN0MwMDAwMDAxRjAwMDAwMEYwMDAwMDAwMDc4MDAwMDFFMDAwMDAwMDAzQzAwMDAzQzAwMDAwMDAwMUUwMDAwNzgwMDAKKzAwMDAwMEYwMDAwNzAwMDAwMDAwMDA3MDAwMEYwMDAwMDAwMDAwNzgwMDFFMDAwMDAwMDAwMDNDMDAxQzAwMDAwMDAwMDAxQworMDAzQzAwMDAwMDAwMDAxRTAwMzgwMDAwMDAwMDAwMEUwMDc4MDAwMDAwMDAwMDBGMDA3MDAwMDAwMDAwMDAwNzAwNzAwMDAwCiswMDAwMDAwNzAwRjAwMDAwMDAwMDAwMDc4MEUwMDAwMDAwMDAwMDAzODBFMDAwMDAwMDAwMDAwMzgwRTAwMDAwMDAwMDAwMDMKKzgwRTAwMDAwMDAwMDAwMDM4MEUwMDAwMDAwMDAwMDAzODBFMDAwMDAwMDAwMDAwMzgwRTAwMDAwMDAwMDAwMDM4MEUwMDAwMAorMDAwMDAwMDM4MEUwMDAwMDAwMDAwMDAzODBGMDAwMDAwMDAwMDAwNzgwNzAwMDAwMDAwMDAwMDcwMDcwMDAwMDAwMDAwMDA3CiswMDc4MDAwMDAwMDAwMDBGMDAzODAwMDAwMDAwMDAwRTAwM0MwMDAwMDAwMDAwMUUwMDFDMDAwMDAwMDAwMDFDMDAxRTAwMDAKKzAwMDAwMDNDMDAwRjAwMDAwMDAwMDA3ODAwMDcwMDAwMDAwMDAwNzAwMDA3ODAwMDAwMDAwMEYwMDAwM0MwMDAwMDAwMDFFMAorMDAwMUUwMDAwMDAwMDNDMDAwMDBGMDAwMDAwMDA3ODAwMDAwN0MwMDAwMDAxRjAwMDAwMDNGMDAwMDAwN0UwMDAwMDAxRjgwCiswMDAwRkMwMDAwMDAwN0YwMDAwN0YwMDAwMDAwMDFGRjAwN0ZDMDAwMDAwMDAwRkZGRkZGODAwMDAwMDAwMDFGRkZGQzAwMDAKKzAwMDAwMDAxRkZDMDAwMDAwMDM5MzU3Q0E4NDI+MTMgRCBFIC9GYyAxNDBbMTM1IDZbMTM1CiszWzEzNSAzWzEzNSAyWzEzNSA5N1t7LjgyIEV4dGVuZEZvbnQgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTUKKzI3NC45OTk5ODggL1BQQ29kZSByZiAvRmQgMTQ0WzM3IDJbMzcgN1szNyAxWzM3IDk4W3sKKy44MiBFeHRlbmRGb250IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH00IDc1LjAwMDAwMAorL1BQQ29kZUJvbGQgcmYgL0ZlIDEgMTIgZGY8MDAwMDNGQzAwMDAwMDAwMEZGRjgwMDAwMDAwN0UwN0MwMDAwMDAwRjgwMUYKKzAwMDAwMDNGMDAxRjgwMEMwMDdFMDAwRjgwMEMwMEZDMDAwN0MwMUMwMUY4MDAwN0UwMTgwM0YwMDAwN0UwMTgwN0UwMDAwMworRTAzODBGRTAwMDAzRjAzMDBGQzAwMDAzRjAzMDFGQzAwMDAzRjA3MDNGODAwMDAzRjA2MDNGODAwMDAzRjBFMDdGODAwMDAzCitGMEMwN0YwMDAwMDNGMUMwN0YwMDAwMDNGMTgwN0YwMDAwMDNGMzgwRkYwMDAwMDNGMzAwRkUwMDAwMDNGNzAwRkUwMDAwMDMKK0ZFMDBGRTAwMDAwM0ZDMDBGRTAwMDAwM0ZDMDBGQzAwMDAwM0Y4MDBGQzAwMDAwM0YwMDBGQzAwMDAwM0YwMDBGQzAwMDAwMworRjAwMEZDMDAwMDAzRjAwMDdFMDAwMDA3RjAwMDdFMDAwMDBGRjAwMDNFMDAwMDFERjgxODNGMDAwMDc5RjgxODFGMDAwMEUxCitGODM4MEY4MDA3QzBGODMwMDdFMDNGMDA3Q0YwMDFGRkY4MDAzRkMwMDAzRkMwMDAwRjgwMkUyNjdEQTQzNT4xMQorRCBFIC9GZiA4MlsyOCA1MVs0MiA0MiA2MCAxWzQ2IDI4IDMyIDMyIDFbNDIgMzcgNDYgMVsyMworMzcgMjMgMjMgMVs0MiAxWzMyIDQyIDM0IDM4IDM3IDExWzY1IDUxIDRbNjUgMls0NiA1WzQ2Cis1MSA2NSAxN1s0MiA0MiA0OVt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH0zMAorODMuMzMzMzM3IC9QYWxhdGluby1JdGFsaWMgcmYgL0ZnIDE0MFs2MSAyWzYxIDYxIDYxIDYxCis2MSA2MSAyWzYxIDJbNjEgNjEgNjEgMVs2MSA1NVs2MSA2MSA0MFt7CisuODIgRXh0ZW5kRm9udCBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MTQgMTI0Ljk5OTk5NworL1BQQ29kZSByZiAvRmggMTM0WzUzIDFbNTMgNTMgNTMgNTMgNTMgNTMgMVs1MyA1MyA1MworNTMgNTMgNTMgMVs1MyA1MyA1MyA1MyA1MyA1MyA1MyAxWzUzIDFbNTMgMTFbNTMgNls1MworMjlbNTMgNFs1MyA1MyA0MFt7LjgyIEV4dGVuZEZvbnQgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTI3CisxMDguMzMzMzMxIC9QUENvZGUgcmYgL0ZpIDEzNFszNyAzNyAzWzM3IDM3IDM3IDFbMzcgMzcKKzM3IDM3IDM3IDJbMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMVszNyAxNVszNyA4WzM3Cis3MFt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IC4xNjcgU2xhbnRGb250IC44MiBFeHRlbmRGb250IH0yMgorNzUuMDAwMDAwIC9QUENvZGUgcmYgL0ZqIDEzNFs0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MworMVs0MyA0MyA0MyA0MyA0MyAyWzQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDFbNDMgOFs0MworNDMgMls0MyAyWzQzIDQzIDQzIDQzIDJbNDMgMls0MyA0MyAxWzQzIDQzIDQzIDQzIDE3WzQzCis2WzQzIDM5W3sgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgLjE2NyBTbGFudEZvbnQgLjgyIEV4dGVuZEZvbnQgfQorMzkgODcuNDk5OTk3IC9QUENvZGUgcmYgL0ZrIDEzNFs3NCA4MCAxMTggNzQgODYgNjIgNjIKKzYyIDg4IDg4IDg0IDg4IDEzMiA0MyA4NCAxWzQzIDg4IDg4IDU3IDc2IDg4IDY5IDg5IDc5Cis3WzkxIDk4IDE0NSA5NiA5NiA4NCA3NCA4OSAxMDMgODYgMTAzIDk5IDEyOSA3NCAxWzQ0Cis0NCAxMDEgOTkgNjkgNzQgMTAxIDg5IDg5IDk5IDZbNDIgODQgODQgODQgODQgODQgODQgODQKKzg0IDg0IDg0IDc2IDQyIDQ2IDQyIDJbNTkgNTkgMzIgMzlbeyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9NjYKKzEzMy4zMzMzMzQgL1N0b25lU2Fucy1Cb2xkIHJmIC9GbCA4MlszMCAyNFs0NiA0NiAyNVs1MQorNDcgNzYgNTIgNTUgMzAgMzkgMzYgMVs1NSA1MCA1MyA4MSAyNyA1MSAxWzI3IDUzIDUxIDMwCis0NCA1NiA0MSA1MSA0NiAxMVs3MSA0WzU1IDNbNTYgMlszMSAyNlsyMyAxWzIzIDJbMzAgMzAKKzM3WzU1IDJbeyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MzUgOTEuNjY2NjY2CisvUGFsYXRpbm8tUm9tYW4gcmYgL0ZtIDgyWzMyIDNbNzEgNDZbNDggNTMgNDggODAgNTMgNTgKKzMyIDQyIDM3IDU4IDU4IDUzIDU4IDg1IDMyIDU4IDMyIDMyIDU4IDUzIDM3IDQ4IDU4IDQyCis1OCA0OCA4WzY0IDk1IDc0IDc0IDY0IDU4IDY5IDgwIDU4IDgwIDgwIDk1IDU4IDc0IDM3CiszNyA4MCA4MCA1MyA1OCA4MCA2OSA2NCA3NCA2WzI0IDQ4IDQ4IDNbNDggMls0OCAxWzI4CisyNCAxWzI0IDRbMjcgMzZbNTggMlt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH02MgorOTUuODMzMzM0IC9QYWxhdGluby1Cb2xkIHJmIC9GbiAxMzRbMTM4IDE0OSAyMjIgMTM5IDE2MAorMTE1IDExNSAxMTUgMVsxNjYgMTU4IDE2NSAyNDcgODAgMTU3IDFbODAgMTY1IDE2NiAxMDYKKzE0MiAxNjYgMTI5IDE2NiAxNDcgMTBbMTgwIDE4MCAxNTcgMTM5IDE2NiAxWzE2MSAxOTQKKzE4NSAyNDEgMTM4IDFbODIgODIgMTg5IDFbMTI5IDEzOCAxOTAgMTY2IDFbMTg1IDE5Wzg3Cis0NVt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH00MiAyNDkuOTk5OTk0IC9TdG9uZVNhbnMtQm9sZAorcmYgL0ZvIDEzNFsxODEgMlsxODEgMVsxMzYgMTQ5IDE0MCAxWzIxOCAyMTEgMjE1IDMxOQorOTQgMls5NCAxWzIxOCAxWzE5MSAyMTggMTY3IDIxNyAxODggMTJbMjA3IDE5NCAyWzIwNworM1sxODEgNFsyNjYgMVsxODkgMjYzIDJbMjMzIDY1W3sgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTI1CiszNDkuOTk5OTg4IC9TdG9uZVNhbnMtU2VtaWJvbGQgcmYgL0ZwIDE0MVsyNSAyWzM3IDM4Cis1NSAzWzE3IDFbMzggMVszMSAxMDFbeyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9NworNjYuNjY2NjY3IC9TdG9uZVNhbnMtU2VtaWJvbGRJdGFsaWMgcmYgL0ZxIDEyOVszNyAzNworMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcKKzM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3CiszNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNyAzNworMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcKKzM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3IDM3CiszNyAzNyAzM1t7LjgyIEV4dGVuZEZvbnQgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTk0Cis3NS4wMDAwMDAgL1BQQ29kZSByZiAvRnIgMTI5WzQzIDFbNDMgMVs0MyA0MyA0MyA0MyA0MworNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMKKzQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzCis0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MyA0MworNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMgNDMKKzQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDQzIDMzW3sKKy44MiBFeHRlbmRGb250IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH05MiA4Ny40OTk5OTcKKy9QUENvZGUgcmYgL0ZzIDgyWzI4IDUwWzQyIDQ2IDQyIDY5IDQ2IDUxIDI4IDM3IDMyIDUxCis1MSA0NiA1MSA3NCAyOCA1MSAyOCAyOCA1MSA0NiAzMiA0MiA1MSAzNyA1MSA0MiA3WzU1Cis1NSA4MyA2NSA2NSA1NSA1MSA2MCA2OSA1MSA2OSA2OSA4MyA1MSA2NSAzMiAzMiA2OSA2OQorNDYgNTEgNjkgNjAgNTUgNjUgMVszNyA0WzIxIDQyIDQyIDQyIDQyIDQyIDQyIDQyIDQyIDQyCis0MiAyNSAyMSAxWzIxIDJbMjggMjggMjMgMzZbNTEgMlt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH03MQorODMuMzMzMzM3IC9QYWxhdGluby1Cb2xkIHJmIC9GdCAxMzRbNTMgNTcgODUgNTMgNjEgNDQKKzQ0IDQ0IDFbNjQgNjEgNjMgOTUgMzEgNjAgMVszMSA2MyA2NCA0MSA1NSA2NCA0OSA2NCA1NworMTBbNjkgNjkgNjAgNTMgNjQgMVs2MiA3NCA3MSA5MyA1MyAxWzMyIDMyIDcyIDcxIDUwIDUzCis3MyA2NCA2NCA3MSA3WzYwIDYwIDYwIDYwIDYwIDYwIDYwIDYwIDYwIDYwIDU1IDFbMzMgNDVbeworIFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH01NSA5NS44MzMzMzQgL1N0b25lU2Fucy1Cb2xkCityZiAvRnUgMTMzWzYyIDY1IDcwIDEwNCA2NSA3NSA1NCA1NCA1NCA3NyA3NyA3NCA3NyAxMTUKKzM3IDczIDFbMzcgNzcgNzcgNTAgNjYgNzcgNjAgNzggNjkgN1s4MCA4NiAxMjcgODQgODQKKzczIDY1IDc4IDFbNzUgOTAgODYgMTEzIDY1IDgyIDM4IDM4IDg4IDg3IDYwIDY1IDg4IDc4Cis3OCA4NiA2WzM3IDczIDczIDczIDczIDczIDczIDczIDczIDczIDczIDY3IDM3IDQxIDM3Cis0WzI4IDM5W3sgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTY1IDExNi42NjY2NjkKKy9TdG9uZVNhbnMtQm9sZCByZiAvRnYgMTM0WzQxIDQzIDY1IDQxIDQ3IDI5IDMyIDI5IDUwCis1MCA0OCA0OSA3NCAyMCA0MCAxWzIwIDQ5IDQ5IDI1IDQyIDQ5IDQwIDQ5IDQyIDhbNTQgNzcKKzQ5IDU3IDQ2IDQzIDQ2IDY2IDQ1IDY2IDY1IDc3IDQwIDQ5IDIzIDIyIDU4IDYxIDQwIDQxCis2MSA1NyA0OCA1MSA2WzI0IDQ4IDQ4IDQ4IDQ4IDQ4IDQ4IDQ4IDQ4IDQ4IDQ4IDMyIDI0CisyOCAyNCAyWzI5IDI5IDE3IDM5W3sgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTY2Cis4My4zMzMzMzcgL1N0b25lU2FucyByZiAvRncgODJbMjggMjBbMjggODMgNDIgMVs0MiA0MgorMjJbNTAgMVs0MiA0NiA0MyA2OSA0NyA1MCAyNyAzNSAzMyA0NiA1MCA0NSA0OCA3MyAyNAorNDYgMTkgMjQgNDggNDYgMjggNDAgNTEgMzcgNDYgNDIgMjMgNDIgMVsyOCAxWzI4IDU1IDU1Cis1NSA4MyA2MCA2NSA1MSA0NCA1NSA2NSA1MCA2NSA2OSA3OSA1MSA2MCAyOCAyOCA2OSA2MworNDYgNTEgNjQgNTkgNTEgNjUgNVsyMSAyMSA0MiA0MiA0MiA0MiA0MiA0MiA0MiA0MiA0MgorNDIgNTAgMjEgMVsyMSA1MCAzMiAyOCAyOCAyMyA1WzIzIDI5WzUwIDUwIDJbeworIFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH04NiA4My4zMzMzMzcgL1BhbGF0aW5vLVJvbWFuCityZiAvRnggMTczWzMzIDI0WzI1IDI1IDI1IDI1IDI1IDI1IDI1IDI1IDI1IDI1IDQ4W3sKKyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MTEgNTAuMDAwMDAxIC9QYWxhdGluby1Sb21hbgorcmYgL0Z5IDgyWzMyIDUwWzQyIDQ4IDQ4IDY5IDQ4IDUzIDMyIDM3IDM3IDQ0IDQ4IDQyIDUzCis3NCAyNyA0MiAyNyAyNyA0OCA0OCAyNyAzNyA0OCAzOSA0NCA0MiA4WzY5IDkwIDY5IDc0Cis1OCA1MyA2NCA3NCA1OCA3NCA3NCA5MCA1MyA2NCAxWzMyIDc0IDY5IDUzIDU4IDc0IDY0Cis1OCA2OSA2WzI0IDNbNDggMVs0OCAxWzQ4IDQ4IDFbMjggMjQgMVsyNCA1OCAxWzMyIDMyCisyNyA3NCAzNVs1MCAyW3sgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTY0IDk1LjgzMzMzNAorL1BhbGF0aW5vLUl0YWxpYyByZiAvRnogMTM1WzUwIDFbNDcgMTJbMjMgMTA1W3sKKyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MyA5NS44MzMzMzQgL1N0b25lU2FucworcmYgL0ZBIDgyWzMyIDIwWzMyIDk1IDQ4IDU4IDQ4IDQ4IDI0WzQ4IDUzIDQ5IDgwIDU0IDU4CiszMSA0MCAzOCA1MyA1NyA1MiA1NiA4NCAyOCA1MyAyMiAyOCA1NiA1MyAzMiA0NiA1OCA0MgorNTMgNDggMVs0OCAxWzMyIDU4IDMyIDY0IDY0IDY0IDk1IDY5IDc0IDU5IDUwIDY0IDc1IDU4Cis3NSA3OSA5MCA1OCA2OSAzMiAzMiA3OSA3MyA1MyA1OCA3NCA2OCA1OCA3NCA3MSA0MiAzWzI0CisyNCA0OCA0OCA0OCA0OCA0OCA0OCA0OCA0OCA0OCA0OCA1OCAyNCAxWzI0IDFbMzcgMzIgMzIKKzI3IDc0IDRbMjcgMjlbNTggNTggMlt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH04OAorOTUuODMzMzM0IC9QYWxhdGluby1Sb21hbiByZiAvRkIgMTM0WzE0OSAxNDkgMlsxNjYgMTAwCisxMTYgMTE2IDFbMTQ5IDEzMyAxNjYgMVs4MyAyWzgzIDE0OSAxNDkgODMgMTE2IDE0OSAxMjIKKzEzOCAxMzMgMTFbMjMzIDE4MyAxNjYgMlsxODMgMjMzIDIzMyAxWzE2NiAyWzEwMCAxWzIxNgorMlsyMzMgMTk5IDE4MyAyMTYgMTdbODggNDdbeyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MzMKKzMwMC4wMDAwMDAgL1BhbGF0aW5vLUl0YWxpYyByZiAvRkMgMTQxWzQyIDJbNDggMlszMCAyWzMwCiszWzQyIDNbNDggMTNbNjAgMTFbNzggMls4NCAyMVsyNyA0Nlt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH0xMAorMTA4LjMzMzMzMSAvUGFsYXRpbm8tSXRhbGljIHJmIC9GRCA4MlszNiAyMVsxMDggMjlbNjAKKzU2IDkwIDYxIDY1IDM1IDQ2IDQzIDFbNjUgNTkgNjMgOTUgMzEgNjAgMVszMSA2MyA2MCAzNgorNTIgNjYgNDggNjAgNTQgMTlbMTAyIDJbMzYgMzYgMVs4MiAxWzY2IDIyWzI3IDFbMjcgNDRbeworIC4xNjcgU2xhbnRGb250IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH0zMiAxMDguMzMzMzMxCisvUGFsYXRpbm8tUm9tYW4gcmYgL0ZFIDE3MVsxMTIgODRbeyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MQorMTgzLjMzMzMzMSAvUGFsYXRpbm8tSXRhbGljIHJmIC9GRiAxMzlbMjQgMzIgMzAgMVs0NQorMVs0MyAxWzIyIDJbMjIgMVs0MiAzMls0MiA0WzU4IDdbMzcgMzcgNlszNyA0WzE5IDQ0W3sKKyAuMTY3IFNsYW50Rm9udCBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MTQgNzUuMDAwMDAwCisvUGFsYXRpbm8tUm9tYW4gcmYgL0ZHIDEgMTQgZGY8MDAwMDAwMDNGRkMwMDAwMDAwMDAwMDAwM0ZGRkZDMDAwMDAwMDAwMAorMDFGRkZGRkY4MDAwMDAwMDAwMDdGRkZGRkZFMDAwMDAwMDAwMUZGRTAwN0ZGODAwMDAwMDAwN0ZFMDAwMDdGRTAwMDAwMDAwCitGRjAwMDAwMEZGMDAwMDAwMDNGQzAwMDAwMDNGQzAwMDAwMDdGMDAwMDAwMDBGRTAwMDAwMEZDMDAwMDAwMDAzRjAwMDAwMUYKKzgwMDAwMDAwMDFGODAwMDAzRjAwMDAwMDAwMDBGQzAwMDA3RTAwMDAwMDAwMDA3RTAwMDBGQzAwMDAwMDAwMDAzRjAwMDBGOAorMDAwMDAwMDAwMDFGMDAwMUYwMDAwMDAwMDAwMDBGODAwM0YwMDAwMDAwMDAwMDBGQzAwM0UwMDAwMDAwMDAwMDA3QzAwN0MwCiswMDAwMDAwMDAwMDNFMDBGQzAwMDAwMDAwMDAwMDNGMDBGODAwMDAwMDAwMDAwMDFGMDFGMDAwMDAwMDAwMDAwMDBGODFGMDAKKzAwMDAwMDAwMDAwMEY4MUUwMDAwMDAwMDAwMDAwMDc4M0UwMDAwMDAwMDAwMDAwMDdDM0UwMDAwMDAwMDAwMDAwMDdDM0MwMAorMDAwMDAwMDAwMDAwM0M3QzAwMDAwMDAwMDAwMDAwM0U3QzAwMDAwMDAwMDAwMDAwM0U3ODAwMDAwMDAwMDAwMDAwMUU3ODAwCiswMDAwMDAwMDAwMDAxRTc4MDAwMDAwMDAwMDAwMDAxRUY4MDAwMDAwMDAwMDAwMDAxRkY4MDAwMDAwMDAwMDAwMDAxRkYwMDAKKzAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwMDBGRjAwMAorMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAwMEZGMDAwCiswMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDAwRkY4MDAwMDAwMDAwMDAwMDAxRkY4MDAwMDAwMDAwMDAwMDAxRjc4MDAKKzAwMDAwMDAwMDAwMDFFNzgwMDAwMDAwMDAwMDAwMDFFNzgwMDAwMDAwMDAwMDAwMDFFN0MwMDAwMDAwMDAwMDAwMDNFN0MwMAorMDAwMDAwMDAwMDAwM0UzQzAwMDAwMDAwMDAwMDAwM0MzRTAwMDAwMDAwMDAwMDAwN0MzRTAwMDAwMDAwMDAwMDAwN0MxRTAwCiswMDAwMDAwMDAwMDA3ODFGMDAwMDAwMDAwMDAwMDBGODFGMDAwMDAwMDAwMDAwMDBGODBGODAwMDAwMDAwMDAwMDFGMDBGQzAKKzAwMDAwMDAwMDAwM0YwMDdDMDAwMDAwMDAwMDAwM0UwMDNFMDAwMDAwMDAwMDAwN0MwMDNGMDAwMDAwMDAwMDAwRkMwMDFGMAorMDAwMDAwMDAwMDBGODAwMEY4MDAwMDAwMDAwMDFGMDAwMEZDMDAwMDAwMDAwMDNGMDAwMDdFMDAwMDAwMDAwMDdFMDAwMDNGCiswMDAwMDAwMDAwRkMwMDAwMUY4MDAwMDAwMDAxRjgwMDAwMEZDMDAwMDAwMDAzRjAwMDAwMDdGMDAwMDAwMDBGRTAwMDAwMDMKK0ZDMDAwMDAwM0ZDMDAwMDAwMEZGMDAwMDAwRkYwMDAwMDAwMDdGRTAwMDA3RkUwMDAwMDAwMDFGRkUwMDdGRjgwMDAwMDAwMAorMDdGRkZGRkZFMDAwMDAwMDAwMDFGRkZGRkY4MDAwMDAwMDAwMDAzRkZGRkMwMDAwMDAwMDAwMDAwM0ZGQzAwMDAwMDA0ODRFCis3QkJCNTM+MTMgRCBFIC9GSCA4MlsyNSA1MVszNyAzWzQyIDI1IDI5IDI5IDJbMzMgNDIgMVsyMQorMlsyMSAxWzM3IDIxIDI5IDFbMzAgMzUgMzMgMTZbNDYgM1s0MiA3WzU4IDUwIDY3W3sKKyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MjAgNzUuMDAwMDAwIC9QYWxhdGluby1JdGFsaWMKK3JmIC9GSSA4MlsyNSAyMVs3NSAzNyAyN1szNyA0MiAzOSA2MiA0MiA0NSAyNCAzMiAzMCA0MgorNDUgNDEgNDMgNjYgMjIgNDIgMTcgMjIgNDMgNDIgMjUgMzYgNDYgMzMgNDEgMzcgNls1MAorNTAgNTAgNzUgNTQgNTggNDYgMzkgNTAgNTkgNDUgNTkgNjIgNzEgNDYgNTQgMjUgMjUgNjIKKzU3IDQyIDQ2IDU4IDUzIDQ2IDU4IDZbMTkgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcgMzcKKzM3IDQ1IDE5IDFbMTkgNFsyMSA1OCAyWzM3IDFbMjEgMjlbNDUgNDUgMlt7CisgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTc1IDc1LjAwMDAwMCAvUGFsYXRpbm8tUm9tYW4KK3JmIC9GSiAxNDdbMjYgMTA4W3t9MSAzMy4zMzMzMzQgL1phcGZEaW5nYmF0cyByZiAvRksKKzEzNFszNyAzOSA1OCAxWzQzIDI2IDI5IDI2IDJbNDMgNDQgNjcgMTggMzYgMVsxOCA0NCA0NAorMjIgMzggNDQgMzYgMVszNyAxMls0MiAzOSA0MiAxWzQwIDU5IDFbNjkgNFs1MyAyWzM3IDU1Cis1MSA0MyA0NiAyMFsyMSA0NFt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH0zMworNzUuMDAwMDAwIC9TdG9uZVNhbnMgcmYgL0ZMIDEzNFs0NiA1MCAyWzUzIDM4IDM4IDM4IDFbNTUKKzUzIDU1IDgyIDI3IDJbMjcgNTUgNTUgMzUgNDcgNTUgNDMgNTUgNDkgN1s1NyAxWzkxIDJbNTIKKzQ2IDJbNTQgNjUgNjIgMVs0NiAyWzI3IDFbNjIgNDMgNDYgNjMgNTUgNTUgNjIgN1s1MiA1MgorNTIgNTIgNTIgNTIgNTIgNTIgNTIgNTIgMVsyNiAyOSAyNiA0NFt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH0KKzQ5IDgzLjMzMzMzNyAvU3RvbmVTYW5zLUJvbGQgcmYgL0ZNIDE0MFs2MyA1OSAyWzgyIDg3CisxWzQzIDgzIDFbNDMgODcgMls3MiAxWzY2IDFbNzUgOVsxNDkgMls5MiA2WzE0MSAxWzEwOAorNTAgNFs5MSAyMlszNyA0Nlt7IFRlWEJhc2UxRW5jb2RpbmcgUmVFbmNvZGVGb250IH0xOAorMTUwLjAwMDAwMCAvUGFsYXRpbm8tUm9tYW4gcmYgL0ZOIDEzNVsxNzQgMVsxOTQgMjEzIDExNgorM1syMTMgMTk0IDIxMyAzMTAgMTE2IDJbMTE2IDNbMTc0IDFbMTU1IDFbMTc0IDIwWzIxMworN1syOTAgMlsyNzEgNjVbeyBUZVhCYXNlMUVuY29kaW5nIFJlRW5jb2RlRm9udCB9MTYgMzQ5Ljk5OTk4OAorL1BhbGF0aW5vLUJvbGQgcmYgL0ZPIDEzOVs4OSA4OSAxMTVbe30yIDEwMC4wMDAwMDMgL1phcGZEaW5nYmF0cworcmYgL0ZQIDEzNVsxMzMgMVsxNDggMTYyIDg4IDNbMTYyIDE0OCAxNjIgMjM2IDg4IDJbODgKKzNbMTMzIDFbMTE4IDFbMTMzIDIwWzE2MiA3WzIyMSAyWzIwNyA2NVt7CisgVGVYQmFzZTFFbmNvZGluZyBSZUVuY29kZUZvbnQgfTE2IDI2Ni42NjY2NjkgL1BhbGF0aW5vLUJvbGQKK3JmIC9GUSAxMzlbNjcgNjcgMTE1W3t9MiA3NS4wMDAwMDAgL1phcGZEaW5nYmF0cyByZiBlbmQKKyUlRW5kUHJvbG9nCislJUJlZ2luU2V0dXAKKyUlRmVhdHVyZTogKlJlc29sdXRpb24gNjAwZHBpCitUZVhEaWN0IGJlZ2luCislJVBhcGVyU2l6ZTogTGV0dGVyCisKKyUlRW5kU2V0dXAKKyUlUGFnZTogNDQ1IDEKKzQ0NSA0NjggYm9wIDAgMCBhIEBiZWdpbnNwZWNpYWwgQHNldHNwZWNpYWwKKyBnc2F2ZSAuNTAgc2V0Z3JheSBuZXdwYXRoIDI3OCAxMCBtb3ZldG8gMCAxMDAgcmxpbmV0byAxMzIgMCBybGluZXRvCiswIC0xMDAgcmxpbmV0byAtMTMyIDAgcmxpbmV0byBjbG9zZXBhdGggZmlsbCAxIHNldGdyYXkgL1N0b25lU2Fucy1Cb2xkCitmaW5kZm9udCAxMiBzY2FsZWZvbnQgc2V0Zm9udCAyOTYgMTkgbW92ZXRvIDMgMCAoQ0hBUFRFUiAyNCkgYXNob3cKK2dyZXN0b3JlCisgCitAZW5kc3BlY2lhbAorMjk5IDM1NSBhIEZuKFBhcnNpbmcpODQgYihDb21tYW5kLSkyOTkgNjU0IHkoTGluZSlnKE9wdGlvbnMpMjk5CisxNTU3IHkgRm0oRnJvbSkyMSBiKHRoZSlmKGZvcnRoY29taW5nKWkoYm9vaylmKGVudGl0bGVkKWYoTGludXgpaAorKEFwcGxpY2F0aW9uKWcoRGV2ZWxvcG1lbnQpZihieSkyOTkgMTY2OSB5KE1pY2hhZWwpMzUKK2IoSy4paChKb2huc29uKWgoYW5kKWUoRXJpayloKFcpbCguKWcoVCktMTEgYihyb2FuLCkzOQorYihjb3B5cmlnaHQpZChcMjUxKWcoMTk5OCllKGJ5KWkoQWRkaXNvbikyOTkgMTc4MSB5KFcpLTcKK2IoZXNsZXkpMzggYihMb25nbWFuLCk0MyBiKEluYy4sKWYodG8pZChiZSlmKHB1Ymxpc2hlZClpKGluKWUoQXByaWwsKWsKKygxOTk4Lik3NyBiKEFsbCkzOCBiKHJpZ2h0cyloKHJlXDI1NSkyOTkgMTg5MyB5KHNlcnZlZC4pYyhUaGlzKTI0CitiKG1hdGVyaWFsKWUoaXMpaShtYWRlKWcoYXZhaWxhYmxlKWYod2l0aClnKHRoZSloKHBlcm1pc3Npb24paChvZilmCisodGhlKWYocHViXDI1NSkyOTkgMjAwNSB5KGxpc2hlciktNSBiKC4pMzQgYihUaGUpMjEgYihwdWJsaXNoZXIpNQorYignKS01IGIocykyMyBiKHBlcm1pc3Npb24pZyhpcylnKHJlcXVpcmVkKWYoZm9yKWgocmVwcm9kdWN0aW9uLClnCisoc3RvcmFnZSwpMjk5IDIxMTcgeShvciloKHRyYW5zbWl0dGFsKWYob2YpaCh0aGlzKWcobWF0ZXJpYWwuKTI5OQorMjMyOSB5KEZvcilnKG1vcmUpZyhpbmZvcm1hdGlvbiwpZyhzZWUpZihodHRwOi8pLTE0IGIoL3d3dyktOQorYiguYXdsLmNvbS9jc2VuZy9ib29rcy9sYWQvLikyOTkgMjU0MSB5IEZBKE1vc3QpNDEgYihMaW51eCllKHByKW4KKyhvZ3JhbXMpaChhbGxvdylmKHRoZSlnKHVzZXIpZyh0byloKHNwZWNpZnkpaChjb21tYW5kXDI1NWxpbmUpZQorKG9wdGlvbnMuKTI5OSAyNjUzIHkoU3VjaCkyMyBiKG9wdGlvbnMpaChwZXJmb3JtKWcoYSlmKHdpZGUpZyh2YXJpZXR5KWcKKyhvZilnKGZ1bmN0aW9ucylnKGJ1dClnKGFyKW4oZSlnKGZhaXJseSlmKHVuaWZvcm0paChpbikyOTkKKzI3NjUgeSh0aGVpcikzMSBiKHN5bnRheC4pNjAgYiBGbShTaG9ydCkzMyBiKG9wdGlvbnMpZworRkEoY29uc2lzdClnKG9mKWYoYSlnIEZyKC0paCBGQShjaGFyYWN0ZXIpZShmb2xsb3dlZCloKGJ5KWcoYSlnKHNpbmdsZSkKKzI5OSAyODc3IHkoYWxwaGFudW1lcmljKTI1IGIoY2hhcmFjdGVyKS03IGIoLik0MyBiIEZtKExvbmcpMjgKK2Iob3B0aW9ucylwIEZBKCwpZyhjb21tb24pZyhpbillKEdOVSloKHV0aWxpdGllcywpZyhjb25zaXN0KTI5OQorMjk4OSB5KG9mKWYodHdvKWcgRnIoLSlnIEZBKGNoYXJhY3RlcnMpZyhmb2xsb3dlZClnKGJ5KWcoYSlnKHN0cmluZylnCisobWFkZSlnKHVwKWcob2YpZyhsZXR0ZXJzLCloKG51bWJlcnMsKWYoYW5kKTI5OSAzMTAxCit5KGh5cGhlbnMuKTM0IGIoRWl0aGVyKTI0IGIodHlwZSlnKG9mKWcob3B0aW9uKWcobWF5KWgoYmUpZShmb2xsb3dlZCloCisoYnkpZyhhbilmKGFyKW4oZ3VtZW50LikzNCBiKEEpMjQgYihzcGFjZSkyOTkgMzIxMyB5KHNlcGFyYXRlcykxOQorYihhKWYoc2hvcnQpaChvcHRpb24pZihmciluKG9tKWgoaXRzKWcoYXIpbihndW1lbnRzOyloKGVpdGhlcilkKGEpaQorKHNwYWNlKWcob3IpZyhhbilmIEZyKD0pZyBGQShzZXBhcmF0ZXMpMjk5IDMzMjUgeShhKTIzCitiKGxvbmcpaChvcHRpb24pZyhmciluKG9tKWcoYW4pZihhciluKGd1bWVudC4pMjk5IDM1MzcKK3koVGhlciluKGUpYyhhciluKGUpaChtYW55KWcod2F5cylnKG9mKWgocGFyc2luZylmKGNvbW1hbmRcMjU1bGluZSlnCisob3B0aW9ucy4pMzQgYihUaGUpMTkgYihtb3N0KWoocG9wdWxhcikyOTkgMzY0OSB5KG1ldGhvZClrKGlzKWcKKyhwYXJzaW5nKWcodGhlKWcgRnIoYXJndilmIEZBKGFycmF5KWcoYnkpaChoYW5kLik0MCBiKFRoZSkyNQorYiBGcihnZXRvcHRcKFwpKWcgRkEoYW5kKWggRnIoZ2V0b3B0X2xvbmdcKFwpKTI5OSAzNzYxCit5IEZBKGxpYnJhcnkpNDAgYihmdW5jdGlvbnMpaChwciluKG92aWRlKWcoc29tZSloKGFzc2lzdGFuY2UpZyhmb3IpZgorKG9wdGlvbiloKHBhcnNpbmcuKTg2IGIgRnIoZ2V0b3B0XChcKSkyOTkgMzg3MyB5IEZBKGlzKTM4CitiKHByKW4ob3ZpZGVkKWgoYnkpZihtYW55KWYoVW5peCloKGltcGxlbWVudGF0aW9ucywpaihidXQpZChpdClmCisoc3VwcG9ydHMpaihvbmx5KWQoc2hvcnQpMjk5IDM5ODUgeShvcHRpb25zLilkKFRoZSkyMgorYiBGcihnZXRvcHRfbG9uZ1woXCkpZyBGQShmdW5jdGlvbilnKGlzKWgoYXZhaWxhYmxlKWUob24paChMaW51eCloKGFuZCkKK2YoYWxsb3dzKWgoYXV0b1wyNTUpMjk5IDQwOTcgeShtYXRlZCloKHBhcnNpbmcpZyhvZilmKGJvdGgpaChzaG9ydClnCisoYW5kKWYobG9uZyloKG9wdGlvbnMuKTI5OSA0MzA5IHkoQSkzMyBiKGxpYnJhcnkpZihjYWxsZWQpaChwb3B0KWgKKyhleGlzdHMpZyhzcGVjaVwwMDJjYWxseSlmKGZvcilnKG9wdGlvbilnKHBhcnNpbmcuKTYyCitiKEl0KTM0IGIoaW5jbHVkZXMpZShhKTI5OSA0NDIxIHkobnVtYmVyKTIyIGIob2YpaShhZHZhbnRhZ2VzKWcob3ZlcilmCisodGhlKWcgRnIoZ2V0b3B0XChcKSlnIEZBKGZ1bmN0aW9ucy4pMzIzMiA0Njk5IHkgRnQoNDQ1KXAKK2VvcAorJSVQYWdlOiA0NDYgMgorNDQ2IDQ2OSBib3AgLTE4NyAtMTE2IGEgRnQoNDQ2KTExOCBiIEZMKENoYXB0ZXIpMjkgYigyNCk4MworYiBGdihQYXJzaW5nKTIzIGIoQ29tbWFuZC1MaW5lKWYoT3B0aW9ucylwIC0xODcgLTc2IDM0MTMKKzQgdiAxMjggODMgYSBGQShcMjI1KTEwMCBiKEl0KTMzIGIoZG9lcyloKG5vdClmKG1ha2UpaCh1c2UpZihvZilnCisoZ2xvYmFsKWcodmFyaWFibGVzLCloKHdoaWNoKWUoYWxsb3dzKWgoaXQpZyh0byloKGJlKWYodXNlZCkyODYKKzE5NSB5KHdoZW4pMjIgYihtdWx0aXBsZSloKHBhc3NlcylqKGFyKW4oZSlkKG5lZWRlZClnKHRvKWgocGFyc2UpZworRnIoYXJndilwIEZBKC4pMTI4IDQwNyB5KFwyMjUpMTAwIGIoSXQpMjIgYihjYW4paChwYXJzZSlmKGFuKWcKKyhhcmJpdHJhcnkpZihhcnJheSlnKG9mKWkgRnIoYXJndilwIEZBKFwyNTVzdHlsZSlmKGVsZW1lbnRzLikzMworYihUaGlzKTIyIGIoYWxsb3dzKWcocG9wdCkyODYgNTE5IHkodG8paShiZSlmKHVzZWQpaChmb3IpZyhwYXJzaW5nKWYKKyhjb21tYW5kXDI1NWxpbmVcMjU1c3R5bGUpaChzdHJpbmdzKWcoZnIpbihvbSlnKGFueSlmKHNvdXIpbihjZS4pMTI4Cis3MzEgeShcMjI1KTEwMCBiKEl0KTMwIGIocHIpbihvdmlkZXMpaChhKWYoc3RhbmRhciluKGQpZyhtZXRob2QpZyhvZilnCisob3B0aW9uKWcoYWxpYXNpbmcuKTUyIGIoUHIpbihvZ3JhbXMpMzAgYih0aGF0KWcodXNlKTI4NgorODQzIHkocG9wdCljKGNhbilmKGVhc2lseSlnKGFsbG93KWYodXNlcnMpaCh0bylnKGFkZCloKG5ldyllCisoY29tbWFuZFwyNTVsaW5lKWgob3B0aW9ucywpaCh3aGljaCkyODYgOTU1IHkoYXIpbihlKWsoZGVcMDAybmVkKWcoYXMpaAorKGNvbWJpbmF0aW9ucylmKG9mKWgoYWxyKW4oZWFkeVwyNTVleGlzdGluZyllKG9wdGlvbnMuKTU1CitiKFRoaXMpMzAgYihhbGxvd3MpMjg2IDEwNjcgeSh0aGUpaCh1c2VyKWgodG8paChkZVwwMDJuZSllKG5ldyktOQorYigsKTMzIGIoY29tcGxleCloKGJlaGF2aW9ycylkKG9yKWgoY2hhbmdlKWYodGhlKWgoZGVmYXVsdClmKGJlXDI1NSkyODYKKzExNzkgeShoYXZpb3JzKTIzIGIob2YpaChleGlzdGluZylmKG9wdGlvbnMuKTExMSAxNDUzCit5KExpa2UpaCBGcihnZXRvcHRfbG9uZ1woXCkpcCBGQSgsKWUodGhlKWkocG9wdCloKGxpYnJhcnkpZChzdXBwb3J0cylqCisoc2hvcnQpZihhbmQpZyhsb25nKWYoc3R5bGUpaChvcHRpb25zLikxMTEgMTY2NSB5KFRoZSkyOQorYihwb3B0KWoobGlicmFyeSlkKGlzKWgoaGlnaGx5KWYocG9ydGFibGUpaChhbmQpZyhzaG91bGQpZyh3b3JrKWYob24paAorKGFueSlnKFBPU0lYKWcocGxhdFwyNTUpMTExIDE3NzcgeShmb3JtLik2OCBiKFRoZSkzNAorYihsYXRlc3QpaCh2ZXJzaW9uKWcoaXMpZyhhbHdheXMpZyhhdmFpbGFibGUpZShmciluKG9tKWkoZnRwOi8pLTE0CitiKC9mdHAuciluKGVkaGF0LmNvbS8pMTExIDE4ODkgeShwdWIvciluKGVkaGF0L2NvZGUvcG9wdC8pMTExCisyMTAwIHkoSXQpMzMgYihtYXkpZihiZSlnKHIpbihlZGlzdHJpYnV0ZWQpZih1bmRlcilnKGVpdGhlcilnKHRoZSloCisoR05VKWcoR2VuZXJhbClmKFB1YmxpYylnKExpY2Vuc2UpaChvcikxMTEgMjIxMyB5KHRoZSkyNAorYihHTlUpZyhMaWJyYXJ5KWYoR2VuZXJhbClmKFB1YmxpYyloKExpY2Vuc2UsKWgoYXQpZih0aGUpaChkaXN0cmlidXRvcikKKzcgYigncykyMyBiKGRpc2NyKW4oZXRpb24uKS0xODcgMjU0MSB5IEZrKDI0LjEpMTMxIGIoQmFzaWMpNDAKK2IocG9wdClqKFVzYWdlKXAgLTE4NyAyNjI2IDM0MTMgNSB2IDExMSAyODg4IGEgRnUoMjQuMS4xKTU5CitiKFRoZSkzOSBiKE9wdGlvbiloKFRhYmxlKTExMSAzMDk5IHkgRkEoQXBwbGljYXRpb25zKWQocHIpbihvdmlkZSlmCisocG9wdClnKHdpdGgpZihpbmZvcm1hdGlvbilmKG9uKWgodGhlaXIpZihjb21tYW5kXDI1NWxpbmUpaChvcFwyNTUpMTExCiszMjExIHkodGlvbnMpMjQgYih0aHIpbihvdWdoKWYoYW4pZyhhcnJheSlnKG9mKWggRnIoc3RydWN0KTQyCitiKHBvcHRPcHRpb24pMjMgYiBGQShzdHIpbyh1Y3R1ciluKGVzLikxMTEgMzQxNyB5IEZxKCNpbmNsdWRlKTM1CitiKDxwb3B0Lmg+KTExMSAzNjMzIHkoc3RydWN0KWgocG9wdE9wdGlvbillKHspMjU4IDM3NDEKK3koY29uc3QpaShjaGFyKWcoKilnKGxvbmdOYW1lOylmKC8qKWgobWF5KWcoYmUpaChOVUxMKWUoKi8pMjU4CiszODQ5IHkoY2hhciloKHNob3J0TmFtZTspMjkyIGIoLyopMzYgYihtYXkpZyhiZSloKCdcXDAnKWUoKi8pMjU4CiszOTU3IHkoaW50KWgoYXJnSW5mbzspMjU4IDQwNjUgeSh2b2lkKWcoKiloKGFyZzspNDQwCitiKC8qKTM2IGIoZGVwZW5kcylmKG9uKWkoYXJnSW5mbyllKCovKTI1OCA0MTcyIHkoaW50KWgodmFsOyk1NTEKK2IoLyopMzYgYigwKWgobWVhbnMpZShkbylpKG5vdClmKHJldHVybiwpZihqdXN0KWgodXBkYXRlKWYoZmxhZyloKCovKQorMTExIDQyODAgeSh9OylwIGVvcAorJSVQYWdlOiA0NDcgMworNDQ3IDQ3MCBib3AgMjIzNyAtMTE2IGEgRnYoMjQuMSk4MiBiKEJhc2ljKTIzIGIocG9wdClmKFVzYWdlKTExOQorYiBGdCg0NDcpcCAwIC03NiAzNDEzIDQgdiA0NDYgNzEgYSBGTChUYWJsZSkyNyBiKDI0LjEpODQKK2IgRnYocG9wdCkyMiBiKEFyZ3VtZW50KWkoVHlwZXMpcCA0NDYgMTAzIDI4MjAgNCB2IDQ0NgorMTIwIDQgMTcgdiAxMTY3IDEyMCBWIDI3NzUgMTIwIFYgMzI2MiAxMjAgViA0NDYgMjE5IDQKKzEwMCB2IDUzMiAxOTAgYSBGcyhWKS05IGIoYWx1ZSlwIDExNjcgMjE5IFYgNTAyIHcoRGVzY3JpcHRpb24pcAorMjc3NSAyMTkgViAxMTYwIHcgRnEoYXJnKTIwIGIgRnMoVCktNyBiKHlwZSlwIDMyNjIgMjE5CitWIDQ0NiAyMzYgNCAxNyB2IDExNjcgMjM2IFYgMjc3NSAyMzYgViAzMjYyIDIzNiBWIDQ0NgorMjM5IDI4MjAgNCB2IDQ0NiAyNDYgNCA3IHYgMTE2NyAyNDYgViAyNzc1IDI0NiBWIDMyNjIKKzI0NiBWIDQ0NiAyNDkgMjgyMCA0IHYgNDQ2IDI2NiA0IDE3IHYgMTE2NyAyNjYgViAyNzc1CisyNjYgViAzMjYyIDI2NiBWIDQ0NiAzNjUgNCAxMDAgdiA1MzIgMzM2IGEgRnEoUE9QVF9BUkdfTk9ORSlwCisxMTY3IDM2NSBWIDI0MCB3IEZ3KE5vKTIxIGIoYXIpbyhndW1lbnQpZihpcyloKGV4cGVjdGVkKXAKKzI3NzUgMzY1IFYgNjg4IHcgRnEoaW50KXAgMzI2MiAzNjUgViA0NDYgNDY1IFYgNTMyIDQzNgorYShQT1BUX0FSR19TVFJJTkcpcCAxMTY3IDQ2NSBWIDE2NiB3IEZ3KE5vKWcodHlwZSlnKGNoZWNraW5nKWcoc2hvdWxkKWgKKyhiZSllKHBlcmZvcm1lZClwIDI3NzUgNDY1IFYgMTY5IHcgRnEoY2hhcikzNSBiKCopcCAzMjYyCis0NjUgViA0NDYgNTY1IFYgNTMyIDUzNSBhKFBPUFRfQVJHX0lOVClwIDExNjcgNTY1IFYgMjc3Cit3IEZ3KEFuKTIxIGIoaW50ZWdlcilmKGFyKW8oZ3VtZW50KWgoaXMpZyhleHBlY3RlZClwCisyNzc1IDU2NSBWIDQxMCB3IEZxKGludClwIDMyNjIgNTY1IFYgNDQ2IDY2NCBWIDUzMiA2MzUKK2EoUE9QVF9BUkdfTE9ORylwIDExNjcgNjY0IFYgMjQwIHcgRncoQSlmKGxvbmcpaShpbnRlZ2VyKWYoaXMpZworKGV4cGVjdGVkKXAgMjc3NSA2NjQgViA2NTIgdyBGcShsb25nKXAgMzI2MiA2NjQgViA0NDYKKzY4MSA0IDE3IHYgMTE2NyA2ODEgViAyNzc1IDY4MSBWIDMyNjIgNjgxIFYgNDQ2IDY4NCAyODIwCis0IHYgMjk5IDkzMyBhIEZBKEVhY2gpMzQgYihtZW1iZXIpZihvZilnKHRoZSlnKHRhYmxlKWcoZGVcMDAybmVzKWcoYSloCisoc2luZ2xlKWYob3B0aW9uKWcodGhhdClnKG1heSloKGJlKWYocGFzc2VkKWkodG8pMjk5CisxMDQ1IHkodGhlKTI5IGIocHIpbihvZ3JhbS4pNTAgYihMb25nKTMwIGIoYW5kKWUoc2hvcnQpaShvcHRpb25zKWYoYXIpbgorKGUpZyhjb25zaWRlciluKGVkKWgoYSlmKHNpbmdsZSlmKG9wdGlvbilpKHRoYXQpMjk5IDExNTcKK3kobWF5KWsob2NjdXIpZyhpbilnKHR3bylnKGRpZiluKGZlciluKGVudClmKGZvcm1zLik2NQorYihUaGUpMzMgYihcMDAycnN0KWgodHdvKWcobWVtYmVycywpaSBGcihsb25nTmFtZSllIEZBKGFuZCkyOTkKKzEyNjkgeSBGcihzaG9ydE5hbWUpcCBGQSgsKTI1IGIoZGVcMDAybmUpZyh0aGUpZyhuYW1lcyloKG9mKWYodGhlKWcKKyhvcHRpb247KWkodGhlKWUoXDAwMnJzdCloKGlzKWcoYSlnKGxvbmcpZihuYW1lLClnKGFuZCloKHRoZSkyOTkKKzEzODEgeShsYXR0ZXIpZChpcyloKGEpZyhzaW5nbGUpZihjaGFyYWN0ZXIpLTcgYiguKTI5OQorMTU5MyB5KFRoZSkyMSBiIEZyKGFyZ0luZm8pZyBGQShtZW1iZXIpaCh0ZWxscylnKHBvcHQpaCh3aGF0KWUodHlwZSloCisob2YpZyhhciluKGd1bWVudClnKGlzKWcoZXhwZWN0ZWQpaChhZnRlcillKHRoZSkyOTkgMTcwNQoreShhciluKGd1bWVudC4pMzMgYihJZikyMyBiKG5vKWcob3B0aW9uKWcoaXMpZyhleHBlY3RlZCwpaAorRnIoUE9QVF9BUkdfTk9ORSlkIEZBKHNob3VsZClpKGJlKWcodXNlZC4pMzQgYihUaGUpMjIKK2IociluKGVzdCkyOTkgMTgxNyB5KG9mKWkodGhlKWYodmFsaWQpZyh2YWx1ZXMpaChhciluKGUpZihzdW1tYXJpemVkKWcKKyhpbiloKFQpLTkgYihhYmxlKTIyIGIoMjQuMS4pMjM1NSAxNzgzIHkgRngoMSkyOTkgMjAyOQoreSBGQShUaGUpaihuZXh0KWcoZWxlbWVudCwpZyBGcihhcmcpcCBGQSgsKWgoYWxsb3dzKWYocG9wdClpKHRvKWYKKyhhdXRvbWF0aWNhbGx5KWYodXBkYXRlKWgocHIpbihvZ3JhbSlnKHZhcmlcMjU1KTI5OSAyMTQxCit5KGFibGVzKTIxIGIod2hlbilnKHRoZSlnKG9wdGlvbiloKGlzKWcodXNlZC4pMzQgYihJZikyMgorYiBGcihhcmcpZiBGQShpcyloIEZyKE5VTEwpcCBGQSgsKWcoaXQpZihpcylpKGlnbm9yKW4oZWQpZShhbmQpaChwb3B0KWcKKyh0YWtlcyloKG5vKTI5OSAyMjUzIHkoc3BlY2lhbCkxOCBiKGFjdGlvbi4pMzMgYihPdGhlcndpc2UsKTE4CitiKGl0KWcoc2hvdWxkKWcocG9pbnQpaCh0bylmKGEpZyh2YXJpYWJsZSlmKG9mKWgodGhlKWcodHlwZSlnCisoaW5kaWNhdGVkKTI5OSAyMzY1IHkoaW4pMjMgYih0aGUpZyhyaWdodFwyNTVtb3N0KWgoY29sdW1uKWcob2YpZyhUKS05CitiKGFibGUpMjIgYigyNC4xLikyOTkgMjU3NyB5KElmKTQyIGIodGhlKWYob3B0aW9uKWcodGFrZXMpaChubylnKGFyKW4KKyhndW1lbnQpZShcKClwIEZyKGFyZ0luZm8paCBGQShpcyloIEZyKFBPUFRfQVJHX05PTkUpcAorRkEoXCksKWUodGhlKWgodmFyaWFibGUpMjk5IDI2ODkgeShwb2ludGVkKTIxIGIodG8pZyhieSlmCitGcihhcmcpaCBGQShpcylnKHNldClnKHRvKWcoMSlmKHdoZW4pZih0aGUpaChvcHRpb24paChpcylnKHVzZWQuKTM0CitiKElmKTIwIGIodGhlKWcob3B0aW9uKWgoZG9lcyloKHRha2UpMjk5IDI4MDEgeShhbikxNgorYihhciluKGd1bWVudCwpaSh0aGUpZih2YXJpYWJsZSllKHRoYXQpaSBGcihhcmcpZyBGQShwb2ludHMpaCh0bylnKGlzKWYKKyh1cGRhdGVkKWgodG8pZihyKW4oZVwwMDNlY3QpZyh0aGUpZyh2YWx1ZSlmKG9mKTI5OSAyOTEzCit5KHRoZSkyMyBiKGFyKW4oZ3VtZW50LikzNCBiKEFueSkyNCBiKHN0cmluZylmKGlzKWkoYWNjZXB0YWJsZSllKGZvciloCitGcihQT1BUX0FSR19TVFJJTkcpZSBGQShhciluKGd1bWVudHMsKWkoYnV0KTI5OSAzMDI1Cit5IEZyKFBPUFRfQVJHX0lOVCkxOSBiIEZBKGFuZCloIEZyKFBPUFRfQVJHX0xPTkcpZSBGQShhciluKGd1bWVudHMpaQorKGFyKW4oZSlnKGNvbnZlcnRlZClnKHRvKWcodGhlKWcoYXBwciluKG9wcmlhdGUpMjk5IDMxMzcKK3kodHlwZSwpayhhbmQpZihhbiloKGVyciluKG9yKWYoaXMpaChyKW4oZXR1cm5lZClmKGlmKWcodGhlKWcKKyhjb252ZXJzaW9uKWgoZmFpbHMuKTI5OSAzMzQ5IHkoVGhlKTMzIGIoXDAwMm5hbClnKG9wdGlvbiwpMzgKK2IgRnIodmFsKXAgRkEoLCllKGlzKWYodGhlKWYodmFsdWUpZihwb3B0J3MpaihwYXJzaW5nKWUoZnVuY3Rpb24pZgorKHNob3VsZClpKHIpbihldHVybikyOTkgMzQ2MSB5KHdoZW4pMjYgYih0aGUpaChvcHRpb24paChpcylnKGVuY291bnRlcikKK24oZWQuKTQ1IGIoSWYpMjcgYihpdCloKGlzKWcoMCwpZyh0aGUpZihwYXJzaW5nKWgoZnVuY3Rpb24pZihwYXJzZXMpaAorKHRoZSkyOTkgMzU3MyB5KG5leHQpMjMgYihjb21tYW5kXDI1NWxpbmUpaChhciluKGd1bWVudClmKHJhdGhlcilmCisodGhhbiloKHIpbihldHVybi4pMjk5IDM3ODUgeShUaGUpYyhcMDAybmFsKWcoc3RyKW8odWN0dXIpbihlKWgoaW4pZgorKHRoZSloKHRhYmxlKWYoc2hvdWxkKWgoaGF2ZSlmKGFsbClnKHRoZSloKHBvaW50ZXIpZyh2YWx1ZXMpZihzZXQpaCh0bykKK2ggRnIoTlVMTCkyOTkgMzg5NyB5IEZBKGFuZClpKGFsbCloKHRoZSlmKGFyaXRobWV0aWMpZyh2YWx1ZXMpZyhzZXQpaAorKHRvKWcoMCwpZyhtYXJraW5nKWYodGhlKWcoZW5kKWgob2YpZyh0aGUpZih0YWJsZS4pcAorMjk5IDQyMzQgODk3IDUgdiAyOTkgNDMxNSBhIEZ3KDEuKTI5IGIgRnEoZ2V0b3B0XChcKSlnCitGdyhjb25ub2lzc2V1cnMpaih3aWxsKWYobm90ZSlnKHRoYXQpZiBGcShhcmdJbmZvKWYgRncoaXMpaSh0aGUpZihvbmx5KQoraShcMDAyZWxkKWUob2YpaCBGcShzdHJ1Y3QpNDYgYihwb3B0T3B0aW9uKTM5MSA0NDA3IHkKK0Z3KHRoYXQpMjkgYihpcylnKG5vdClnKGRpcilvKGVjdGx5KWYoYW5hbG9nb3VzKWkodG8pZihhKWYoXDAwMmVsZCloCisoaW4pZyh0aGUpZyBGcShnZXRvcHRfbG9uZ1woXCkpZCBGdyhhcilvKGd1bWVudClpKHRhYmxlLik1MworYihUaGUpMzkxIDQ0OTggeShzaW1pbGFyaXR5KTIyIGIoYmV0d2VlbillKHRoZSloKHR3bylnKGFsbG93cyloKGZvcillCisoZWFzeSloKHRyYW5zaXRpb25zKWgoZnIpbyhvbSllIEZxKGdldG9wdF9sb25nXChcKSllCitGdyh0bylqKHBvcHQuKXAgZW9wCislJVBhZ2U6IDQ0OCA0Cis0NDggNDcxIGJvcCAtMTg3IC0xMTYgYSBGdCg0NDgpMTE4IGIgRkwoQ2hhcHRlcikyOSBiKDI0KTgzCitiIEZ2KFBhcnNpbmcpMjMgYihDb21tYW5kLUxpbmUpZihPcHRpb25zKXAgLTE4NyAtNzYgMzQxMworNCB2IDExMSA4NSBhIEZ1KDI0LjEuMik1OSBiKENyZWF0aW5nKTM5IGIoYSlmKENvbnRleHQpMTExCisyOTcgeSBGQShwb3B0KTMxIGIoY2FuKWYoaW50ZXJsZWF2ZSllKHRoZSloKHBhcnNpbmcpZyhvZiloKG11bHRpcGxlKWcKKyhjb21tYW5kXDI1NWxpbmUpZihzZXRzLik1MyBiKEl0KTMwIGIoYWxsb3dzKTExMSA0MDkKK3kodGhpcyllKGJ5KWcoa2VlcGluZylnKGFsbClmKHRoZSlnKHN0YXRlKWkoaW5mb3JtYXRpb24pZChmb3IpaShhKWcKKyhwYXJ0aWN1bGFyKWYoc2V0KWgob2YpZyhjb21tYW5kXDI1NSkxMTEgNTIxIHkobGluZSkyMgorYihhciluKGd1bWVudHMpaChpbilmKGEpaCBGcihwb3B0Q29udGV4dCllIEZBKGRhdGEpaShzdHIpbyh1Y3R1ciluKGUsKWcKKyhhbilmKG9wYXF1ZSloKHR5cGUpZyh0aGF0KWcoc2hvdWxkKTExMSA2MzMgeShub3QpaChiZSlmKG1vZGlcMDAyZWQpaQorKG91dHNpZGUpZih0aGUpZihwb3B0KWkobGlicmFyeSktMTEgYiguKTExMSA4NDUgeShOZXcpMjQKK2IocG9wdCloKGNvbnRleHRzKWcoYXIpbihlKWUoY3IpbihlYXRlZCloKGJ5KWcgRnIocG9wdEdldENvbnRleHRcKFwpKXAKK0ZBKC4pMTExIDEwNTEgeSBGcSgjaW5jbHVkZSkzNSBiKDxwb3B0Lmg+KTExMSAxMjY2IHkocG9wdENvbnRleHQpZworKHBvcHRHZXRDb250ZXh0XChjaGFyKWQoKilrKG5hbWUsKWcoaW50KWcoYXJnYywpZihjaGFyKWgoKiopaChhcmd2LCkKKzExMDQgMTM3NCB5KHN0cnVjdCllKHBvcHRPcHRpb24pZygqKWgob3B0aW9ucywpZihpbnQpaChmbGFnc1wpOykxMTEKKzE1ODYgeSBGQShUaGUpMjYgYihcMDAycnN0KWgocGFyYW1ldGVyKS03IGIoLCkyNiBiIEZyKG5hbWUpcAorRkEoLCloKGlzKWcodXNlZClnKG9ubHkpZyhmb3IpZihhbGlhcyloKGhhbmRsaW5nKWUoXChkaXNjdXNzZWQpagorKGxhdGVyXCkuKTExMSAxNjk4IHkoSXQpaChzaG91bGQpZihiZSlmKHRoZSloKG5hbWUpZihvZiloKHRoZSlnCisoYXBwbGljYXRpb24pZyh3aG9zZSlmKG9wdGlvbnMpaShhciluKGUpZShiZWluZylnKHBhcnNlZCwpMTExCisxODEwIHkob3IpZShzaG91bGQpZihiZSlnIEZyKE5VTEwpZyBGQShpZilnKG5vKWcob3B0aW9uKWgoYWxpYXNpbmcpZQorKGlzKWkoZGVzaXIpbihlZC4pMzYgYihUaGUpMjQgYihuZXh0KWcodHdvKWcoYXIpbihndW1lbnRzKTExMQorMTkyMiB5KHNwZWNpZnkpZyh0aGUpZihjb21tYW5kXDI1NWxpbmUpZyhhciluKGd1bWVudHMpZyh0byloKHBhcnNlLikzNAorYihUaGVzZSkyMiBiKGFyKW4oZSloKGdlbmVyYWxseSlmKHBhc3NlZCkxMTEgMjAzNCB5KHRvKTM3CitiIEZyKHBvcHRHZXRDb250ZXh0XChcKSllIEZBKGV4YWN0bHkpaShhcylnKHRoZXkpZih3ZXIpbihlKWcocGFzc2VkKWkKKyh0bylmKHRoZSlmKHByKW4ob2dyYW0ncyloIEZyKG1haW5cKFwpKTExMSAyMTQ2IHkgRkEoZnVuY3Rpb24uKTUwCitiKFRoZSkyOSBiIEZyKG9wdGlvbnMpZiBGQShwYXJhbWV0ZXIpaChwb2ludHMpaCh0bylnKHRoZSlmKHRhYmxlKWYob2YpaQorKGNvbW1hbmRcMjU1bGluZSllKG9wXDI1NSkxMTEgMjI1OSB5KHRpb25zLCkzMyBiKHdoaWNoKWQod2FzKWgKKyhkZXNjcmliZWQpaChpbillKHRoZSloKHByKW4oZXZpb3VzKWcoc2VjdGlvbi4pNTYgYihUaGUpMzAKK2IoXDAwMm5hbClnKHBhcmFtZXRlciktNyBiKCwpMTExIDIzNzEgeSBGcihmbGFncylwIEZBKCwpMjEKK2IoaXMpZyhub3QpZyhjdXJyKW4oZW50bHkpZSh1c2VkKWkoYnV0KWcoc2hvdWxkKWYoYWx3YXlzKWcoYmUpaAorKHNwZWNpXDAwMmVkKWcoYXMpZygwKWYoZm9yKWgoY29tcGF0XDI1NSkxMTEgMjQ4MyB5KGliaWxpdHkpaSh3aXRoKWcKKyhmdXR1ciluKGUpZyh2ZXJzaW9ucyloKG9mKWcodGhlKWYocG9wdClpKGxpYnJhcnkpLTExCitiKC4pMTExIDI2OTQgeShBKTI2IGIgRnIocG9wdENvbnRleHQpZiBGQShrZWVwcyloKHRyYWNrKWcob2YpZyh3aGljaCllCisob3B0aW9ucylqKGhhdmUpZChhbHIpbihlYWR5KWgoYmVlbilnKHBhcnNlZCloKGFuZCkxMTEKKzI4MDcgeSh3aGljaCloKHIpbihlbWFpbiwpaShhbW9uZylmKG90aGVyKWYodGhpbmdzLik0NworYihJZikyOCBiKGEpZyhwciluKG9ncmFtKWcod2lzaGVzKWcodG8paChyKW4oZXN0YXJ0KWYob3B0aW9uKTExMQorMjkxOSB5KHByKW4ob2Nlc3NpbmcpMjMgYihvZilmKGEpZyhzZXQpZyhvZilnKGFyKW4oZ3VtZW50cywpZyhpdClmKGNhbikKK2gociluKGVzZXQpZyh0aGUpZiBGcihwb3B0Q29udGV4dClnIEZBKGJ5KWgocGFzc2luZylnKHRoZSkxMTEKKzMwMzEgeShjb250ZXh0KWooYXMpZih0aGUpZihzb2xlKWgoYXIpbihndW1lbnQpZih0byloCitGcihwb3B0UmVzZXRDb250ZXh0XChcKSlwIEZBKC4pMTExIDMyNDIgeShXaGVuKWooYXIpbihndW1lbnQpZyhwciluCisob2Nlc3NpbmcpaChpcylnKGNvbXBsZXRlLCloKHRoZSlkKHByKW4ob2Nlc3MpaihzaG91bGQpZihmciluKGVlKWUodGhlKQoraCBGcihwb3B0LSkxMTEgMzM1NCB5KENvbnRleHQpMjIgYiBGQShhcyloKGl0KWYoY29udGFpbnMpaChkeW5hbWljYWxseSkKK2YoYWxsb2NhdGVkKWcoY29tcG9uZW50cy4pMzUgYihUaGUpMjEgYiBGcihwb3B0RnJlZUNvbi0pMTExCiszNDY3IHkodGV4dFwoXCkpMzIgYiBGQShmdW5jdGlvbilnKHRha2VzKWgoYSlmIEZyKHBvcHRDb250ZXh0KWcKK0ZBKGFzKWgoaXRzKWcoc29sZSlnKGFyKW4oZ3VtZW50KWUoYW5kKWkoZnIpbihlZXMpZih0aGUpZyhyKW4oZVwyNTUpMTExCiszNTc5IHkoc291ciluKGNlcykyNSBiKHRoZSllKGNvbnRleHQpaShpcylmKHVzaW5nLikxMTEKKzM3OTAgeShIZXIpbihlKWcoYXIpbihlKWYodGhlKWgocHIpbihvdG90eXBlcyloKG9mKWYoYm90aClmCitGcihwb3B0UmVzZXRDb250ZXh0XChcKSlmIEZBKGFuZClpIEZyKHBvcHRGcmVlQ29udGV4dFwoXCkpcAorRkEoLikxMTEgMzk5NiB5IEZxKCNpbmNsdWRlKTM1IGIoPHBvcHQuaD4pMTExIDQyMTIgeSh2b2lkKWgKKyhwb3B0RnJlZUNvbnRleHRcKHBvcHRDb250ZXh0KTMxIGIoY29uXCk7KTExMSA0MzIwIHkodm9pZCkzNgorYihwb3B0UmVzZXRDb250ZXh0XChwb3B0Q29udGV4dCkzMCBiKGNvblwpOylwIGVvcAorJSVQYWdlOiA0NDkgNQorNDQ5IDQ3MiBib3AgMjIzNyAtMTE2IGEgRnYoMjQuMSk4MiBiKEJhc2ljKTIzIGIocG9wdClmKFVzYWdlKTExOQorYiBGdCg0NDkpcCAwIC03NiAzNDEzIDQgdiAyOTkgODUgYSBGdSgyNC4xLjMpNTggYihQYXJzaW5nKTM5CitiKHRoZSloKENvbW1hbmQpZShMaW5lKTI5OSAyOTcgeSBGQShBZnRlcikyNiBiKGFuKWcoYXBwbGljYXRpb24paChoYXMpZworKGNyKW4oZWF0ZWQpZihhKWggRnIocG9wdENvbnRleHQpcCBGQSgsKWYoaXQpaChtYXkpZyhiZWdpbillKHBhcnNpbmcpaQorKGFyKW4oZ3VcMjU1KTI5OSA0MDkgeShtZW50cy4pMzQgYihUaGUpMjMgYiBGcihwb3B0R2V0TmV4dE9wdFwoXCkpZgorRkEocGVyZm9ybXMpaSh0aGUpZyhhY3R1YWwpZihhciluKGd1bWVudClnKHBhcnNpbmcuKTI5OQorNjE1IHkgRnEoI2luY2x1ZGUpMzUgYig8cG9wdC5oPikyOTkgODMxIHkoaW50KWgKKyhwb3B0R2V0TmV4dE9wdFwocG9wdENvbnRleHQpMzEgYihjb25cKTspMjk5IDEwNDIgeSBGQShUKS05CitiKGFraW5nKTQ0IGIodGhlKWgoY29udGV4dCloKGFzKWcoaXRzKWYoc29sZSloKGFyKW4oZ3VtZW50LClrKHRoaXMpNDUKK2IoZnVuY3Rpb24pZyhwYXJzZXMpaCh0aGUpZihuZXh0KTI5OSAxMTU0IHkoY29tbWFuZFwyNTVsaW5lKTM0CitiKGFyKW4oZ3VtZW50KWYoZm91bmQuKTY1IGIoQWZ0ZXIpMzQgYihcMDAybmRpbmcpZih0aGUpaChuZXh0KWcoYXIpbgorKGd1bWVudClmKGluKWgodGhlKTI5OSAxMjY2IHkob3B0aW9uKTI5IGIodGFibGUsKWcodGhlKWYoZnVuY3Rpb24pZworKFwwMDJsbHMpZyhpbilnKHRoZSlnKG9iamVjdClpKHBvaW50ZWQpZSh0byloKGJ5KWcodGhlKWYob3B0aW9uKWgKKyh0YWJsZSkyOTkgMTM3OSB5KGVudHJ5J3MpMTggYiBGcihhcmcpZyBGQShwb2ludGVyKWgoaWYpZihpdCloKGlzKWcKKyhub3QpZiBGcihOVUxMKXAgRkEoLilnKElmKWgodGhlKWYgRnIodmFsKWggRkEoZW50cnkpZihmb3IpZyh0aGUpZworKG9wdGlvbiloKGlzKWcobm9uXDI1NTAsKWcodGhlKTI5OSAxNDkxIHkoZnVuY3Rpb24paCh0aGVuKWcociluKGV0dXJucykKK2codGhhdClnKHZhbHVlLikzMiBiKE90aGVyd2lzZSwpMjAgYiBGcihwb3B0R2V0TmV4dE9wdFwoXCkpZgorRkEoY29udGludWVzKWkob24pMjk5IDE2MDMgeSh0bylqKHRoZSlmKG5leHQpaChhciluKGd1bWVudC4pMjk5CisxODE0IHkgRnIocG9wdEdldE5leHRPcHRcKFwpKWcgRkEociluKGV0dXJucyloKFwyNTUxKWcod2hlbilmKHRoZSloCisoXDAwMm5hbClnKGFyKW4oZ3VtZW50KWcoaGFzKWgoYmVlbillKHBhcnNlZCwpaihhbmQpMjk5CisxOTI2IHkob3RoZXIpMjAgYihuZWdhdGl2ZSlmKHZhbHVlcyloKHdoZW4pZihlcnIpbihvcnMpaShvY2N1ciktNworYiguKTMzIGIoVGhpcykyMCBiKG1ha2VzKWgoaXQpZihhKWgoZ29vZClnKGlkZWEpZih0byloKGtlZXApMjk5CisyMDM5IHkodGhlKWkgRnIodmFsKWggRkEoZWxlbWVudHMpZihpbilnKHRoZSloKG9wdGlvbnMpZyh0YWJsZSlmKGdyKW4KKyhlYXRlcilnKHRoYW4pZygwLikyOTkgMjI1MCB5KElmKTQ4IGIoYWxsKWYob2YpaCh0aGUpZihjb21tYW5kXDI1NWxpbmUpCitoKG9wdGlvbnMpZyhhciluKGUpZyhoYW5kbGVkKWYodGhyKW4ob3VnaClnIEZyKGFyZylnCitGQShwb2ludGVycywpMjk5IDIzNjIgeShjb21tYW5kXDI1NWxpbmUpMjMgYihwYXJzaW5nKWgoaXMpZyhyKW4oZWR1Y2VkKQorZyh0bylnKHRoZSlmKGZvbGxvd2luZylnKGxpbmUpZyhvZilnKGNvZGU6KTI5OSAyNTY4IHkKK0ZxKHJjKTM2IGIoPSloKHBvcHRHZXROZXh0T3B0XChwb3B0Y29uXCk7KTI5OSAyNzgwIHkKK0ZBKE1hbnkpMjEgYihhcHBsaWNhdGlvbnMpZyhyKW4oZXF1aXIpbihlKWcobW9yKW4oZSlnKGNvbXBsZXgpaAorKGNvbW1hbmRcMjU1bGluZSlmKHBhcnNpbmcpZyh0aGFuKWYodGhpcywpMjk5IDI4OTIgeShob3dldmVyKS03CitiKCwpMjIgYihhbmQpaSh1c2UpZih0aGUpZyhmb2xsb3dpbmcpZyhzdHIpbyh1Y3R1ciluKGUuKTI5OQorMzA5NyB5IEZxKHdoaWxlKTM1IGIoXChcKHJjKWgoPSloKHBvcHRHZXROZXh0T3B0XChwb3B0Y29uXClcKSkzMQorYig+KTM2IGIoMFwpKWgoeyk0NDYgMzIwNSB5KHN3aXRjaCllKFwocmNcKSloKHspNTkzIDMzMTMKK3koLyopZyhzcGVjaWZpYylmKGFyZ3VtZW50cylnKGFyZSloKGhhbmRsZWQpZihoZXJlKWgoKi8pNDQ2CiszNDIxIHkofSkyOTkgMzUyOSB5KH0pMjk5IDM3NDEgeSBGQShXaGVuKWYociluKGV0dXJuZWQpZyhvcHRpb25zKWkoYXIpbgorKGUpZihoYW5kbGVkLClpKHRoZSllKGFwcGxpY2F0aW9uKWcobmVlZHMpZyh0bylnKGtub3cpZyh0aGUpMjk5CiszODUzIHkodmFsdWUpMjEgYihvZiloKGFueSlnKGFyKW4oZ3VtZW50cylnKHRoYXQpZyh3ZXIpbihlKWYKKyhzcGVjaVwwMDJlZClpKGFmdGVyKWYodGhlKWcob3B0aW9uLikzNCBiKFRoZXIpbihlKTIwCitiKGFyKW4oZSlpKHR3bykyOTkgMzk2NSB5KHdheXMpZCh0bylnKGRpc2NvdmVyKWcodGhlbS4pMzIKK2IoT25lKTE4IGIoaXMpaSh0bylmKGFzaylnKHBvcHQpZyh0byloKFwwMDJsbCllKGluKWcoYSlnKHZhcmlhYmxlKWYKKyh3aXRoKWgodGhlKWcodmFsdWUpMjk5IDQwNzcgeShvZikyOCBiKHRoZSloKG9wdGlvbilmKHRociluKG91Z2gpZyh0aGUpCitnKG9wdGlvbiloKHRhYmxlJ3MpZiBGcihhcmcpZyBGQShlbGVtZW50cy4pNDggYihUaGUpMjgKK2Iob3RoZXIpZyhpcyloKHRvKWYodXNlKTI5OSA0MTg5IHkgRnIocG9wdEdldE9wdEFyZ1woXCkpcAorRkEoLilwIGVvcAorJSVQYWdlOiA0NTAgNgorNDUwIDQ3MyBib3AgLTE4NyAtMTE2IGEgRnQoNDUwKTExOCBiIEZMKENoYXB0ZXIpMjkgYigyNCk4MworYiBGdihQYXJzaW5nKTIzIGIoQ29tbWFuZC1MaW5lKWYoT3B0aW9ucylwIC0xODcgLTc2IDM0MTMKKzQgdiAxMTEgMTcwIGEgRnEoI2luY2x1ZGUpMzUgYig8cG9wdC5oPikxMTEgMzg2IHkoY2hhciloKCopaAorKHBvcHRHZXRPcHRBcmdcKHBvcHRDb250ZXh0KTMxIGIoY29uXCk7KTExMSA1OTggeSBGQShUaGlzKWMoZnVuY3Rpb24pZgorKHIpbihldHVybnMpaCh0aGUpZyhhciluKGd1bWVudClmKGdpdmVuKWcoZm9yKWgodGhlKWcoXDAwMm5hbClmKG9wdGlvbikKK2kociluKGV0dXJuZWQpZShieSkxMTEgNzEwIHkgRnIocG9wdEdldE5leHRPcHRcKFwpKXAKK0ZBKCwpYyhvcilpKGl0KWcociluKGV0dXJucylmIEZyKE5VTEwpZyBGQShpZiloKG5vKWYoYXIpbihndW1lbnQpZyh3YXMpCitoKHNwZWNpXDAwMmVkLikxMTEgMTA3MyB5IEZ1KDI0LjEuNCk1OSBiKExlZnRvdmVyKTM4CitiKEFyZ3VtZW50cykxMTEgMTI4NSB5IEZBKE1hbnkpMjQgYihhcHBsaWNhdGlvbnMpZyh0YWtlKWYoYW4paAorKGFyYml0cmFyeSllKG51bWJlcilnKG9mKWkoY29tbWFuZFwyNTVsaW5lKWYoYXIpbihndW1lbnRzLCkxMTEKKzEzOTcgeShzdWNoKWooYXMpZyhhKWcobGlzdClnKG9mKWcoXDAwMmxlKWYobmFtZXMuKTQwCitiKFdoZW4pMjUgYihwb3B0KWkoZW5jb3VudGVycyllKGFuKWcoYXIpbihndW1lbnQpZyh0aGF0KWcoZG9lcykxMTEKKzE1MDkgeShub3QpayhiZWdpbilmKHdpdGgpZyhhKWggRnIoLSlwIEZBKCwpaChpdClmKGFzc3VtZXMpaChpdClmKGlzKWcKKyhzdWNoKWcoYW4pZihhciluKGd1bWVudClnKGFuZCloKGFkZHMpaChpdClmKHRvKWcoYSlnKGxpc3QpMTExCisxNjIxIHkob2YpaShsZWZ0b3ZlcilmKGFyKW4oZ3VtZW50cy4pNTUgYihUaHIpbihlZSkzMAorYihmdW5jdGlvbnMpZyhhbGxvdylnKGFwcGxpY2F0aW9ucyloKHRvKWgoYWNjZXNzKWcoc3VjaCkxMTEKKzE3MzMgeShhciluKGd1bWVudHM6KTExMSAyMDA3IHkgRnIoY2hhcik0MyBiKCopZworKHBvcHRHZXRBcmdcKHBvcHRDb250ZXh0KWQoY29uXCk7KTQxMSAyMTE5IHkgRkEoVGhpcykzNQorYihmdW5jdGlvbilmKHIpbihldHVybnMpZyh0aGUpZyhuZXh0KWgobGVmdG92ZXIpZihhciluKGd1bWVudClnKGFuZClnCisobWFya3MpaShpdCllKGFzKTQxMSAyMjMxIHkocHIpbihvY2Vzc2VkLikxMTEgMjQ0MyB5CitGcihjaGFyKTQzIGIoKilnKHBvcHRQZWVrQXJnXChwb3B0Q29udGV4dClkKGNvblwpOyk0MTEKKzI1NTUgeSBGQShUaGUpMTUgYihuZXh0KWgobGVmdG92ZXIpZihhciluKGd1bWVudClnKGlzKWkociluKGV0dXJuZWQpZAorKGJ1dClpKG5vdClnKG1hcmtlZClnKGFzKWcocHIpbihvY2Vzc2VkLik0MTEgMjY2NyB5KFRoaXMpMzkKK2IoYWxsb3dzKWcoYW4pZihhcHBsaWNhdGlvbiloKHRvKWgobG9vaylmKGFoZWFkKWcoaW50bylnKHRoZSlmKGFyKW4KKyhndW1lbnQpaChsaXN0LCk0MTEgMjc3OSB5KHdpdGhvdXQpMjMgYihtb2RpZnlpbmcpaCh0aGUpZihsaXN0LikxMTEKKzI5OTEgeSBGcihjaGFyKTQzIGIoKiopZihwb3B0R2V0QXJnc1wocG9wdENvbnRleHQpZihjb25cKTspNDExCiszMTAzIHkgRkEoQWxsKTE2IGIodGhlKWcobGVmdG92ZXIpZihhciluKGd1bWVudHMpZyhhciluKGUpaChyKW4KKyhldHVybmVkKWUoaW4paShhKWYobWFubmVyKWcoaWRlbnRpY2FsKWcodG8paCBGcihhcmd2KXAKK0ZBKC4pNDExIDMyMTUgeShUaGUpaihcMDAybmFsKWcoZWxlbWVudClnKGluKWcodGhlKWcociluKGV0dXJuZWQpZworKGFycmF5KWcocG9pbnRzKWgodG8pZyBGcihOVUxMKXAgRkEoLClmKGluZGljYXRpbmcpZyh0aGUpNDExCiszMzI3IHkoZW5kKTI0IGIob2YpZyh0aGUpZihhciluKGd1bWVudHMuKS0xODcgMzY4MCB5CitGaygyNC4yKTEzMSBiKEVycm9yKTQxIGIoSGFuZGxpbmcpcCAtMTg3IDM3NjUgMzQxMyA1Cit2IDExMSA0MDI3IGEgRkEoQWxsKTI5IGIob2YpZyh0aGUpZyhwb3B0KWgoZnVuY3Rpb25zKWUodGhhdCloKGNhbilnKHIpbgorKGV0dXJuKWUoZXJyKW4ob3JzKWkociluKGV0dXJuKWYoaW50ZWdlcnMuKTQ5IGIoV2hlbikyOAorYihhbikxMTEgNDEzOSB5KGVyciluKG9yKWQob2NjdXJzLClpKGEpZShuZWdhdGl2ZSlmKGVyciluKG9yKWgoY29kZSloCisoaXMpZihyKW4oZXR1cm5lZC4pMzggYihUKS05IGIoYWJsZSkyNCBiKDI0LjIpaChzdW1tYXJpemVzKWcodGhlKTExMQorNDI1MSB5KGVyciluKG9yKWYoY29kZXMpZyh0aGF0KWcob2NjdXIpLTcgYiguKTM0IGIoSGVyKW4oZSkyNAorYihpcylnKGEpZyhtb3IpbihlKWcoZGV0YWlsZWQpZihkaXNjdXNzaW9uKWkob2YpZihlYWNoKWYoZXJyKW4ob3IpLTcKK2IoLilwIGVvcAorJSVQYWdlOiA0NTEgNworNDUxIDQ3NCBib3AgMjMyOSAtMTE2IGEgRnYoMjQuMik4MiBiKEVycm9yKTIzIGIoSGFuZGxpbmcpMTE4CitiIEZ0KDQ1MSlwIDAgLTc2IDM0MTMgNCB2IDQyMSA3MSBhIEZMKFRhYmxlKTI3IGIoMjQuMik4NAorYiBGdihwb3B0KTIyIGIoRXJyb3JzKXAgNDIxIDEwMyAyODcwIDQgdiA0MjEgMTIwIDQgMTcKK3YgMTM5OSAxMjAgViAzMjg3IDEyMCBWIDQyMSAyMTkgNCAxMDAgdiA1MDcgMTkwIGEgRnMoRXJyb3IpcAorMTM5OSAyMTkgViA3ODUgdyhEZXNjcmlwdGlvbilwIDMyODcgMjE5IFYgNDIxIDIzNiA0IDE3Cit2IDEzOTkgMjM2IFYgMzI4NyAyMzYgViA0MjEgMjM5IDI4NzAgNCB2IDQyMSAyNDYgNCA3Cit2IDEzOTkgMjQ2IFYgMzI4NyAyNDYgViA0MjEgMjQ5IDI4NzAgNCB2IDQyMSAyNjYgNCAxNwordiAxMzk5IDI2NiBWIDMyODcgMjY2IFYgNDIxIDM2NSA0IDEwMCB2IDUwNyAzMzYgYSBGcShQT1BUX0VSUk9SX05PQVJHKXAKKzEzOTkgMzY1IFYgMzg2IHcgRncoQW4pZihhcilvKGd1bWVudClmKGlzKWgobWlzc2luZyloKGZvcilmKGFuKWcKKyhvcHRpb24uKXAgMzI4NyAzNjUgViA0MjEgNDY1IFYgNTA3IDQzNiBhIEZxKFBPUFRfRVJST1JfQkFET1BUKXAKKzEzOTkgNDY1IFYgMzQ5IHcgRncoQW4pZyhvcHRpb24ncyloKGFyKW8oZ3VtZW50KWUoY291bGQpaChub3QpaChiZSllCisocGFyc2VkLilwIDMyODcgNDY1IFYgNDIxIDU2NSBWIDUwNyA1MzUgYSBGcShQT1BUX0VSUk9SX09QVFNUT09ERUVQKXAKKzEzOTkgNTY1IFYgMTY0IHcgRncoT3B0aW9uKWkoYWxpYXNpbmcpZihpcylnKG5lc3RlZClnKHRvbylnKGRlZXBseSktOQorYiguKXAgMzI4NyA1NjUgViA0MjEgNjY0IFYgNTA3IDYzNSBhIEZxKFBPUFRfRVJST1JfQkFEUVVPVEUpcAorMTM5OSA2NjQgViAyNzUgdyBGdyhRdW90YXRpb25zKTIyIGIoZG8pZihub3QpaChtYXRjaC4pcAorMzI4NyA2NjQgViA0MjEgNzY0IFYgNTA3IDczNSBhIEZxKFBPUFRfRVJST1JfQkFETlVNQkVSKXAKKzEzOTkgNzY0IFYgMjM4IHcgRncoQW4pZihvcHRpb24paChjb3VsZClmKG5vdClnKGJlKWcoY29udmVydGVkKWYodG8paAorKGEpZihudW1iZXIpLTYgYiguKXAgMzI4NyA3NjQgViA0MjEgODYzIFYgNTA3IDgzNCBhIEZxCisoUE9QVF9FUlJPUl9PVkVSRkxPVylwIDEzOTkgODYzIFYgMjc1IHcgRncoQSkyMSBiKGdpdmVuKWcobnVtYmVyKWcod2FzKQorZih0b28paShiaWcpZihvcilnKHRvbylnKHNtYWxsLilwIDMyODcgODYzIFYgNDIxIDg4MAorNCAxNyB2IDEzOTkgODgwIFYgMzI4NyA4ODAgViA0MjEgODgzIDI4NzAgNCB2IDI5OSAxMTMyCithIEZyKFBPUFRfRVJST1JfTk9BUkcpNTk5IDEyNDQgeSBGQShBbiljKG9wdGlvbiloKHRoYXQpZihyKW4oZXF1aXIpbgorKGVzKWgoYW4pZihhciluKGd1bWVudClmKHdhcylpKHNwZWNpXDAwMmVkKWcob24pZih0aGUpZyhjb21tYW5kKTU5OQorMTM1NyB5KGxpbmUsKTQwIGIoYnV0KWQobm8pZyhhciluKGd1bWVudClnKHdhcylnKGdpdmVuLik3NQorYihUaGlzKTM3IGIoY2FuKWgoYmUpZihyKW4oZXR1cm5lZClmKG9ubHkpaChieSk1OTkgMTQ2OQoreSBGcihwb3B0R2V0TmV4dE9wdFwoXCkpcCBGQSguKTI5OSAxNjgwIHkgRnIoUE9QVF9FUlJPUl9CQURPUFQpNTk5CisxNzkyIHkgRkEoQW4pMjYgYihvcHRpb24pZyh3YXMpaChzcGVjaVwwMDJlZClmKGluKWcgRnIoYXJndilnCitGQShidXQpZyhpcylnKG5vdClnKGluKWcodGhlKWcob3B0aW9uKWcodGFibGUuKTQxIGIoVGhpcyk1OTkKKzE5MDUgeShlcnIpbihvcikyMyBiKGNhbiloKGJlKWYociluKGV0dXJuZWQpZyhvbmx5KWcoZnIpbihvbSloCitGcihwb3B0R2V0TmV4dE9wdFwoXCkpcCBGQSguKTI5OSAyMTE2IHkgRnIoUE9QVF9FUlJPUl9PUFRTVE9PREVFUCk1OTkKKzIyMjggeSBGQShBKWYoc2V0KWgob2YpZihvcHRpb24pZyhhbGlhc2VzKWcoaXMpaChuZXN0ZWQpZih0b28paChkZWVwbHkpCistMTEgYiguKTM0IGIoQ3VyciluKGVudGx5KS0xMSBiKCwpMjIgYihwb3B0KWkoZm9sbG93cyk1OTkKKzIzNDAgeShvcHRpb25zKTMwIGIob25seSlmKDEwKWcobGV2ZWxzKWcodG8paChwciluKGV2ZW50KWYoaW5cMDAybml0ZSlmCisociluKGVjdXJzaW9uLik1MCBiKE9ubHkpMjkgYiBGcihwb3B0R2V0LSk1OTkgMjQ1MiB5KE5leHRPcHRcKFwpKTIzCitiIEZBKGNhbilnKHIpbihldHVybilnKHRoaXMpaChlcnIpbihvciktNyBiKC4pMjk5IDI2NjQKK3kgRnIoUE9QVF9FUlJPUl9CQURRVU9URSk1OTkgMjc3NiB5IEZBKEEpMTUgYihwYXJzZWQpZyhzdHJpbmcpZyhoYXMpZworKGEpZyhxdW90YXRpb24pZyhtaXNtYXRjaClnKFwoc3VjaClnKGFzKWcoYSlnKHNpbmdsZSlnKHF1b3RhdGlvbik1OTkKKzI4ODggeShtYXJrXCkuKTYyIGIgRnIocG9wdFBhcnNlQXJndlN0cmluZ1woXCkpcCBGQSgsKTMzCitiIEZyKHBvcHRSZWFkQ29uZmlnRmlsZVwoXCkpcCBGQSgsKWcob3IpZyBGcihwb3B0UmVhZERlLSk1OTkKKzMwMDAgeShmYXVsdENvbmZpZ1woXCkpMjIgYiBGQShjYW4paShyKW4oZXR1cm4pZSh0aGlzKWkoZXJyKW4ob3IpLTcKK2IoLikyOTkgMzIxMiB5IEZyKFBPUFRfRVJST1JfQkFETlVNQkVSKTU5OSAzMzI0IHkgRkEoQSkzOAorYihjb252ZXJzaW9uKWcoZnIpbihvbSlnKGEpZyhzdHJpbmcpZyh0byloKGEpZihudW1iZXIpZihcKClwCitGcihpbnQpaCBGQShvcilnIEZyKGxvbmcpcCBGQShcKSlmKGZhaWxlZCloKGR1ZSk1OTkgMzQzNgoreSh0bykyOCBiKHRoZSlnKHN0cmluZylnKGNvbnRhaW5pbmcpZihub25udW1lcmljKWYoY2hhcmFjdGVycy4pNDcKK2IoVGhpcykyOCBiKG9jY3VycyloKHdoZW4pNTk5IDM1NDggeSBGcihwb3B0R2V0TmV4dE9wdFwoXCkpYworRkEoaXMpaihwciluKG9jZXNzaW5nKWcoYW4pZihhciluKGd1bWVudClmKG9mKWgodHlwZSlnCitGcihQT1BUX0FSR19JTlQpZiBGQShvcik1OTkgMzY2MCB5IEZyKFBPUFRfQVJHX0xPTkcpcAorRkEoLikyOTkgMzg3MiB5IEZyKFBPUFRfRVJST1JfT1ZFUkZMT1cpNTk5IDM5ODQgeSBGQShBKWcKKyhzdHJpbmdcMjU1dG9cMjU1bnVtYmVyKWYoY29udmVyc2lvbilnKGZhaWxlZClnKGJlY2F1c2UpaCh0aGUpZihudW1iZXIpCitnKHdhcyloKHRvbyk1OTkgNDA5NiB5KGxhciluKGdlKTQxIGIob3IpaCh0b28pZyhzbWFsbC4pODgKK2IoTGlrZSk0MiBiIEZyKFBPUFRfRVJST1JfQkFETlVNQkVSKXAgRkEoLClkKHRoaXMpaihlcnIpbihvcilmKGNhbiloCisob2NcMjU1KTU5OSA0MjA4IHkoY3VyKTI4IGIob25seSloKHdoZW4pZSBGcihwb3B0R2V0TmV4dE9wdFwoXCkpZworRkEoaXMpaShwciluKG9jZXNzaW5nKWgoYW4pZShhciluKGd1bWVudClnKG9mKWgodHlwZSk1OTkKKzQzMjAgeSBGcihQT1BUX0FSR19JTlQpMjIgYiBGQShvcilpIEZyKFBPUFRfQVJHX0xPTkcpcAorRkEoLilwIGVvcAorJSVQYWdlOiA0NTIgOAorNDUyIDQ3NSBib3AgLTE4NyAtMTE2IGEgRnQoNDUyKTExOCBiIEZMKENoYXB0ZXIpMjkgYigyNCk4MworYiBGdihQYXJzaW5nKTIzIGIoQ29tbWFuZC1MaW5lKWYoT3B0aW9ucylwIC0xODcgLTc2IDM0MTMKKzQgdiAxMTEgODMgYSBGcihQT1BUX0VSUk9SX0VSUk5PKTQxMSAxOTUgeSBGQShBKTM2IGIoc3lzdGVtKWcoY2FsbClmKHIpCituKGV0dXJuZWQpZih3aXRoKWgoYW4pZihlcnIpbihvciktNyBiKCwpMzcgYihhbmQpZSBGcihlcnJubylnCitGQShzdGlsbClnKGNvbnRhaW5zKWcodGhlKTQxMSAzMDcgeShlcnIpbihvcikyMyBiKGZyKW4ob20paCh0aGUpZgorKHN5c3RlbSlpKGNhbGwuKTM0IGIoQm90aCkyNCBiIEZyKHBvcHRSZWFkQ29uZmlnRmlsZVwoXCkpZAorRkEoYW5kKWogRnIocG9wdFJlYWQtKTQxMSA0MTkgeShEZWZhdWx0Q29uZmlnXChcKSlmIEZBKGNhbilnKHIpbihldHVybikKK2codGhpcyloKGVyciluKG9yKS03IGIoLikxMTEgNjU2IHkoVCllKHdvKTM4IGIoZnVuY3Rpb25zKWYoYXIpbihlKWgKKyhhdmFpbGFibGUpZSh0bylpKG1ha2UpZyhpdClmKGVhc3kpaChmb3IpZyhhcHBsaWNhdGlvbnMpZyh0bylnKHByKW4KKyhvdmlkZSkxMTEgNzY4IHkoZ29vZCkyNSBiKGVyciluKG9yKWUobWVzc2FnZXMuKTExMSAxMDQyCit5IEZyKGNvbnN0KTQzIGIoY2hhcilmKCopaChwb3B0U3RyZXJyb3JcKGNvbnN0KWUoaW50KWgoZXJyb3JcKTspNDExCisxMTU0IHkgRkEoVGhpcykxOCBiKGZ1bmN0aW9uKWcodGFrZXMpaChhKWYocG9wdCloKGVyciluKG9yKWYoY29kZSloCisoYW5kKWcociluKGV0dXJucyllKGEpaShzdHJpbmcpZihkZXNjcmliaW5nKTQxMSAxMjY2Cit5KHRoZSkyNCBiKGVyciluKG9yKS03IGIoLCkyMyBiKGp1c3QpaChhcylnKHdpdGgpZih0aGUpZyhzdGFuZGFyKW4oZClpCitGcihzdHJlcnJvclwoXCkpZCBGQShmdW5jdGlvbi4pMTExIDE0NzggeSBGcihjaGFyKTQzCitiKCopZyhwb3B0QmFkT3B0aW9uXChwb3B0Q29udGV4dClkKGNvbiwpaShpbnQpaChmbGFnc1wpOyk0MTEKKzE1OTAgeSBGQShJZikzMiBiKGFuKWUoZXJyKW4ob3IpZyhvY2N1cnIpbihlZClpKGR1cmluZyllCitGcihwb3B0R2V0TmV4dE9wdFwoXCkpcCBGQSgsKWgodGhpcylnKGZ1bmN0aW9uKWcociluKGV0dXJucyk0MTEKKzE3MDIgeSh0aGUpMzggYihvcHRpb24pZyh0aGF0KWcoY2F1c2VkKWgodGhlKWUoZXJyKW4ob3IpLTcKK2IoLik3NyBiKElmKTM4IGIodGhlKWYgRnIoZmxhZ3MpaCBGQShhciluKGd1bWVudClmKGlzKWkoc2V0KWYodG8pNDExCisxODE0IHkgRnIoUE9QVF9CQURPUFRJT05fTk9BTElBUylwIEZBKCwpZSh0aGUpaShvdXRlcm1vc3QpaChvcHRpb24pZgorKGlzKWgociluKGV0dXJuZWQuKTc2IGIoT3RoZXIpbihcMjU1KTQxMSAxOTI2IHkod2lzZSwpMzEKK2IgRnIoZmxhZ3MpZSBGQShzaG91bGQpaChiZSlmKDAsKWkoYW5kKWUodGhlKWcob3B0aW9uKWgodGhhdClmKGlzKWgociluCisoZXR1cm5lZClmKG1heSloKGhhdmUpNDExIDIwMzggeShiZWVuKTIzIGIoc3BlY2lcMDAyZWQpaSh0aHIpbihvdWdoKWQKKyhhbilpKGFsaWFzLikxMTEgMjI3NSB5KFRoZXNlKTE2IGIodHdvKWgoZnVuY3Rpb25zKWYobWFrZSloKHBvcHQpZyhlcnIpCituKG9yKWYoaGFuZGxpbmcpZyh0cml2aWFsKWYoZm9yKWkobW9zdCloKGFwcGxpY2F0aW9ucy4pMTExCisyMzg3IHkoV2hlbikyNiBiKGFuKWYoZXJyKW4ob3IpZyhpcyloKGRldGVjdGVkKWcoZnIpbihvbSlnKG1vc3QpaChvZilmCisodGhlKWYoZnVuY3Rpb25zLCloKGFuKWYoZXJyKW4ob3IpZyhtZXNzYWdlKWgoaXMpMTExCisyNDk5IHkocHJpbnRlZCkzNSBiKGFsb25nKWcod2l0aClnKHRoZSlnKGVyciluKG9yKWYoc3RyaW5nKWkoZnIpbihvbSlmCitGcihwb3B0U3RyZXJyb3JcKFwpKXAgRkEoLik2OCBiKFdoZW4pMzUgYihhbilmKGVyciluKG9yKTExMQorMjYxMSB5KG9jY3VycykyNiBiKGR1cmluZyllKGFyKW4oZ3VtZW50KWgocGFyc2luZywpZyhjb2RlKWcoc2ltaWxpYXIpZworKHRvKWcodGhlKWcoZm9sbG93aW5nKWYoZGlzcGxheXMpaShhKTExMSAyNzIzIHkodXNlZnVsKWQoZXJyKW4ob3IpZworKG1lc3NhZ2UuKTExMSAyOTI5IHkgRnEoZnByaW50Zlwoc3RkZXJyLCkzNCBiKCJcMDQ1czopaChcMDQ1c1xcbiIsKTQwNQorMzAzNyB5KHBvcHRCYWRPcHRpb25cKG9wdENvbiwpZChQT1BUX0JBRE9QVElPTl9OT0FMSUFTXCksKTQwNQorMzE0NCB5KHBvcHRTdHJlcnJvclwocmNcKVwpOyktMTg3IDM0NzUgeSBGaygyNC4zKTEzMQorYihPcHRpb24pNDIgYihBbGlhc2luZylwIC0xODcgMzU2MCAzNDEzIDUgdiAxMTEgMzgyMgorYSBGQShPbmUpMjEgYihvZiloKHRoZSlmKHByaW1hcnkpZyhiZW5lXDAwMnRzKWYob2YpaSh1c2luZylmKHBvcHQpaAorKG92ZXIpZiBGcihnZXRvcHRcKFwpKWcgRkEoaXMpaCh0aGUpZihhYmlsaXR5KWYodG8paSh1c2UpMTExCiszOTM0IHkob3B0aW9uKTMwIGIoYWxpYXNpbmcuKTQ5IGIoVGhpcykyOSBiKGxldHMpaCh0aGUpZSh1c2VyKWgKKyhzcGVjaWZ5KWgob3B0aW9ucylnKHRoYXQpZihwb3B0KWgoZXhwYW5kcylnKGludG8pMTExCis0MDQ2IHkob3RoZXIpMjIgYihvcHRpb25zKWcod2hlbilmKHRoZXkpaChhciluKGUpZihzcGVjaVwwMDJlZC4pMzUKK2IoSWYpMjIgYih0aGUpZihzdGFuZGFyKW4oZClpKGdyKW4oZXApZihwciluKG9ncmFtKWgobWFkZSkxMTEKKzQxNTggeSh1c2UpaihvZilnKHBvcHQsKWgodXNlcnMpZihjb3VsZCloKGFkZClmKGEpZyBGcigtLXRleHQpZgorRkEob3B0aW9uKWgodGhhdClnKGV4cGFuZGVkKWcodG8pZyBGcigtaSk0NSBiKC1uKWcoLUUpZygtMikxMTEKKzQyNzAgeSBGQSh0bykyNSBiKGxldCllKHRoZW0paChtb3IpbihlKWcoZWFzaWx5KWYoXDAwMm5kKWgoaW5mb3JtYXRpb24pCitlKGluKWgodGV4dCloKFwwMDJsZXMuKXAgZW9wCislJVBhZ2U6IDQ1MyA5Cis0NTMgNDc2IGJvcCAyMjk4IC0xMTYgYSBGdigyNC4zKTgxIGIoT3B0aW9uKTIyIGIoQWxpYXNpbmcpMTE4CitiIEZ0KDQ1MylwIDAgLTc2IDM0MTMgNCB2IDI5OSA4NSBhIEZ1KDI0LjMuMSk1OCBiKFNwZWNpZnlpbmcpNDAKK2IoQWxpYXNlcykyOTkgMjk3IHkgRkEoQWxpYXNlcykxOCBiKGFyKW4oZSllKG5vcm1hbGx5KWgoc3BlY2lcMDAyZWQpaAorKGluKWYodHdvKWcocGxhY2VzOikzMiBiKC9ldGMvcG9wdCkxOCBiKGFuZClmKHRoZSlnKC5wb3B0KWgoXDAwMmxlKWYKKyhpbikyOTkgNDA5IHkodGhlKTI1IGIodXNlcik3IGIoJ3MpMjUgYihob21lKWgoZGlyKW4oZWN0b3J5KWYoXChmb3VuZClnCisodGhyKW4ob3VnaClnKHRoZSlnIEZyKEhPTUUpZyBGQShlbnZpciluKG9ubWVudClmKHZhcmlhYmxlXCkuKTI5OQorNTIxIHkoQm90aCkzMyBiKFwwMDJsZXMpaChoYXZlKWUodGhlKWgoc2FtZSloKGZvcm1hdCwpaChhbillKGFyYml0cmFyeSkKK2YobnVtYmVyKWcob2YpaChsaW5lcylnKGZvcm1hdHRlZCkyOTkgNjMzIHkobGlrZSkyMyBiKHRoaXM6KTI5OQorODQ1IHkgRmooYXBwbmFtZSk0MiBiIEZyKGFsaWFzKWcgRmoobmV3b3B0aW9uKWcoZXhwYW5zaW9uKTI5OQorMTA1NyB5IEZBKFRoZSkyNCBiIEZqKGFwcG5hbWUpaCBGQShpcyloKHRoZSlmKG5hbWUpZyhvZiloKHRoZSlmCisoYXBwbGljYXRpb24sKWgod2hpY2gpZShtdXN0KWooYmUpZSh0aGUpZyhzYW1lKWgoYXMpZyh0aGUpMjk5CisxMTY5IHkgRnIobmFtZSllIEZBKHBhcmFtZXRlcilnKHBhc3NlZClpKHRvKWYgRnIocG9wdEdldENvbnRleHRcKFwpKXAKK0ZBKC4pMzYgYihUaGlzKTI0IGIoYWxsb3dzKWcoZWFjaClnKFwwMDJsZSlnKHRvKWkoc3BlY2lmeSkyOTkKKzEyODEgeShhbGlhc2VzKWUoZm9yKWgobXVsdGlwbGUpZihwciluKG9ncmFtcy4pMzcgYihUaGUpMjQKK2IgRnIoYWxpYXMpZyBGQShrZXl3b3IpbihkKWcoc3BlY2lcMDAyZXMpaSh0aGF0KWUoYW4pZyhhbGlhcylnKGlzKTI5OQorMTM5MyB5KGJlaW5nKWgoZGVcMDAybmVkOylpKGN1cnIpbihlbnRseSlmKHBvcHQpaChjb25cMDAyZ3VyYXRpb24pZQorKFwwMDJsZXMpaShzdXBwb3J0KWcob25seSlmKGFsaWFzZXMsKWgoYnV0KTI5OSAxNTA1IHkob3RoZXIpaQorKGFiaWxpdGllcyloKG1heSlnKGJlKWcoYWRkZWQpZyhpbilnKHRoZSlnKGZ1dHVyKW4oZS4pNTIKK2IoVGhlKTI5IGIobmV4dCloKG9wdGlvbilnKGlzKWcodGhlKWcob3B0aW9uKTI5OSAxNjE3Cit5KHRoYXQpZChzaG91bGQpaChiZSlnKGFsaWFzZWQsKWcoYW5kKWcoaXQpZyhtYXkpZyhiZSlmKGVpdGhlcilnKGEpaAorKHNob3J0KWcob3IpZihhKWgobG9uZylnKG9wdGlvbi4pNDYgYihUaGUpMjk5IDE3MjkgeShyKW4oZXN0KTI5CitiKG9mKWgodGhlKWUobGluZSloKHNwZWNpXDAwMmVzKWgodGhlKWUoZXhwYW5zaW9uKWgoZm9yKWcodGhlKWcoYWxpYXMuKQorNTAgYihJdCkzMCBiKGlzKWYocGFyc2VkKWgoc2ltaWxhcmx5KTI5OSAxODQxIHkodG8pZihhKWcoc2hlbGwpZgorKGNvbW1hbmQsKWood2hpY2gpZChhbGxvd3MpaCBGcihcXClwIEZBKCwpaCBGcigiKXAgRkEoLClnKGFuZClmCitGcignKWcgRkEodG8pZyhiZSlnKHVzZWQpZyhmb3IpZyhxdW90aW5nLik0OSBiKElmKTI5CitiKGEpMjk5IDE5NTMgeShiYWNrc2xhc2gpMjIgYihpcylnKHRoZSlnKFwwMDJuYWwpZihjaGFyYWN0ZXIpZyhvbilnKGEpaAorKGxpbmUsKWYodGhlKWgobmV4dClmKGxpbmUpZyhpbiloKHRoZSlmKFwwMDJsZSlnKGlzKWkoYXNzdW1lZCkyOTkKKzIwNjYgeSh0bykyOCBiKGJlKWYoYSlnKGxvZ2ljYWwpZyhjb250aW51YXRpb24pZihvZilpKHRoZSlmKGxpbmUpZgorKGNvbnRhaW5pbmcpaCh0aGUpZyhiYWNrc2xhc2gsKWgoanVzdClnKGFzKWcoaW4pMjk5IDIxNzgKK3koc2hlbGwuKTI5OSAyMzg5IHkoVGhlKWkoZm9sbG93aW5nKWcoZW50cnkpaCh3b3VsZClmKGFkZClpKGEpZgorRnIoLS10ZXh0KWcgRkEob3B0aW9uKWcodG8paCh0aGUpZSBGcihncmVwKWggRkEoY29tbWFuZCwpaihhcykyOTkKKzI1MDEgeShzdWdnZXN0ZWQpMjQgYihhdClnKHRoZSlmKGJlZ2lubmluZylmKG9mKWkodGhpcylnKHNlY3Rpb24uKTI5OQorMjcxMyB5IEZyKGdyZXApNDIgYihhbGlhcyloKC0tdGV4dClmKC1pKWgoLW4pZigtRSloKC0yKTI5OQorMzA2OCB5IEZ1KDI0LjMuMik1OCBiKEVuYWJsaW5nKTM5IGIoQWxpYXNlcykyOTkgMzI3OQoreSBGQShBbikyMSBiKGFwcGxpY2F0aW9uKWYobXVzdClpKGVuYWJsZSlkKGFsaWFzKWgoZXhwYW5zaW9uKWgoZm9yKWcoYSkKK2YgRnIocG9wdENvbnRleHQpZyBGQShiZWZvciluKGUpZyhjYWxsaW5nKTI5OSAzMzkxIHkKK0ZyKHBvcHRHZXROZXh0QXJnXChcKSkzMyBiIEZBKGZvcilpKHRoZSlnKFwwMDJyc3QpZyh0aW1lLik2OAorYihUaGVyKW4oZSkzNCBiKGFyKW4oZSlnKHRociluKGVlKWgoZnVuY3Rpb25zKWYodGhhdCloKGRlXDAwMm5lKTI5OQorMzUwMyB5KGFsaWFzZXMpMjMgYihmb3IpaChhKWcoY29udGV4dC4pMjk5IDM3NzcgeSBGcihpbnQpNDIKK2IocG9wdFJlYWREZWZhdWx0Q29uZmlnXChwb3B0Q29udGV4dCllKGNvbiwpaShpbnQpaChmbGFnc1wpOyk1OTkKKzM4ODkgeSBGQShUaGlzKWQoZnVuY3Rpb24pZihyKW4oZWFkcyloKGFsaWFzZXMpZyhmciluKG9tKWgoL2V0Yy9wb3B0KWcKKyhhbmQpZih0aGUpZygucG9wdCloKFwwMDJsZSlmKGluKTU5OSA0MDAyIHkodGhlKTI5IGIodXNlcik3CitiKCdzKTI5IGIoaG9tZSlnKGRpciluKGVjdG9yeSktMTEgYiguKTUzIGIoQ3VyciluKGVudGx5KS0xMQorYigsKTI5IGIgRnIoZmxhZ3MpZyBGQShzaG91bGQpaChiZSlmIEZyKE5VTEwpcCBGQSgsKWcoYXMpZyhpdCloKGlzKTU5OQorNDExNCB5KHByKW4ob3ZpZGVkKTI0IGIob25seSlnKGZvcilmKGZ1dHVyKW4oZSlnKGV4cGFuc2lvbi4pcAorZW9wCislJVBhZ2U6IDQ1NCAxMAorNDU0IDQ3NyBib3AgLTE4NyAtMTE2IGEgRnQoNDU0KTExOCBiIEZMKENoYXB0ZXIpMjkgYigyNCk4MworYiBGdihQYXJzaW5nKTIzIGIoQ29tbWFuZC1MaW5lKWYoT3B0aW9ucylwIC0xODcgLTc2IDM0MTMKKzQgdiAxMTEgODMgYSBGcihpbnQpNDMgYihwb3B0UmVhZENvbmZpZ0ZpbGVcKHBvcHRDb250ZXh0KWMoY29uLClrKGNoYXIpCitmKCopaChmblwpOyk0MTEgMTk1IHkgRkEoVGhlKTE3IGIoXDAwMmxlKWgoc3BlY2lcMDAyZWQpaChieSlmCitGcihmbilnIEZBKGlzKWcob3BlbmVkKWcoYW5kKWcocGFyc2VkKWgoYXMpZihhKWcocG9wdCloCisoY29uXDAwMmd1cmF0aW9uKTQxMSAzMDcgeShcMDAybGUuKTY4IGIoVGhpcykzNSBiKGFsbG93cylmKHByKW4ob2dyYW1zKQoraSh0bylnKHVzZSlmKHByKW4ob2dyYW1cMjU1c3BlY2lcMDAyYyloKGNvblwwMDJndXJhdGlvbik0MTEKKzQxOSB5KFwwMDJsZXMuKTExMSA2MzEgeSBGcihpbnQpNDMgYihwb3B0QWRkQWxpYXNcKHBvcHRDb250ZXh0KWQoY29uLClqCisoc3RydWN0KWYocG9wdEFsaWFzKWcoYWxpYXMsKWcoaW50KWcoZmxhZ3NcKTspNDExIDc0MworeSBGQShPY2Nhc2lvbmFsbHkpLTExIGIoLCkzNyBiKHByKW4ob2Nlc3NlcylmKHdhbnQpZCh0byloKHNwZWNpZnkpZworKGFsaWFzZXMpZyh3aXRob3V0KWYoaGF2aW5nKWYodG8pNDExIDg1NSB5KHIpbihlYWQpMjQKK2IodGhlbSlmKGZyKW4ob20paChhKWYoY29uXDAwMmd1cmF0aW9uKWYoXDAwMmxlLikzNCBiKFRoaXMpMjMKK2IoZnVuY3Rpb24pZihhZGRzKWkoYSlnKG5ldyllKGFsaWFzKTQxMSA5NjcgeSh0bykzOSBiKGEpZihjb250ZXh0Lik3NworYihUaGUpMzggYiBGcihmbGFncylmIEZBKGFyKW4oZ3VtZW50KWgoc2hvdWxkKWcoYmUpZigwLCk0MgorYihhcyljKGl0KWcoaXMpaChjdXJyKW4oZW50bHkpNDExIDEwNzkgeShyKW4oZXNlcnZlZCkyMQorYihmb3IpZyhmdXR1ciluKGUpZShleHBhbnNpb24uKTMzIGIoVGhlKTIwIGIobmV3KWcoYWxpYXMpaChpcylnCisoc3BlY2lcMDAyZWQpZyhhcyloKGEpZSBGcihzdHJ1Y3QpNDExIDExOTEgeShwb3B0QWxpYXMpcAorRkEoLClqKHdoaWNoKWcoaXMpaChkZVwwMDJuZWQpZihhczopNDExIDEzODggeSBGcShzdHJ1Y3QpMzYKK2IocG9wdEFsaWFzKWUoeyk1NTggMTQ5NiB5KGNoYXIpaSgqKWgobG9uZ05hbWU7KTQzOSBiKC8qKTM2CitiKG1heSlnKGJlKWcoTlVMTClnKCovKTU1OCAxNjA0IHkoY2hhcilnKHNob3J0TmFtZTspNDc2CitiKC8qKTM2IGIobWF5KWcoYmUpZygnXFwwJylnKCovKTU1OCAxNzEyIHkoaW50KWcoYXJnYzspNTU4CisxODIwIHkoY2hhcilnKCoqKWgoYXJndjspNTUwIGIoLyopMzYgYihtdXN0KWcoYmUpZyhmcmVlXChcKWFibGUpZigqLykKKzQxMSAxOTI3IHkofTspNDExIDIxMzkgeSBGQShUaGUpZChcMDAycnN0KWgodHdvKWcoZWxlbWVudHMsKWkKK0ZyKGxvbmdOYW1lKWQgRkEoYW5kKWcgRnIoc2hvcnROYW1lKXAgRkEoLClqKHNwZWNpZnkpZSh0aGUpZyhvcHRpb24pNDExCisyMjUxIHkodGhhdCkyMyBiKGlzKWcoYWxpYXNlZC4pMzMgYihUaGUpMjIgYihcMDAybmFsKWcodHdvLCloCitGcihhcmdjKWYgRkEoYW5kKWcgRnIoYXJndilwIEZBKCwpaChkZVwwMDJuZSlmKHRoZSlnKGV4cGFuc2lvbilnKHRvKTQxMQorMjM2MyB5KHVzZSlpKHdoZW4pZSh0aGUpaShhbGlhc2VzKWYob3B0aW9uKWgoaXMpZyhlbmNvdW50ZXIpbihlZC4pLTE4NworMjcxNiB5IEZrKDI0LjQpMTMxIGIoUGFyc2luZyk0MSBiKEFyZ3VtZW50KWYoU3RyaW5ncylwCistMTg3IDI4MDEgMzQxMyA1IHYgMTExIDMwNjMgYSBGQShBbHRob3VnaCkyMSBiKHBvcHQpaShpcylnKHVzdWFsbHkpZQorKHVzZWQpaChmb3IpZihwYXJzaW5nKWgoYXIpbihndW1lbnRzKWcoYWxyKW4oZWFkeSlmKGRpdmlkZWQpaChpbnRvKTExMQorMzE3NSB5KGFuKWUgRnIoYXJndilwIEZBKFwyNTVzdHlsZSlmKGFycmF5KS0xMSBiKCwpMjAKK2Ioc29tZSloKHByKW4ob2dyYW1zKWcobmVlZCllKHRvKWgocGFyc2UpZyhzdHJpbmdzKWgodGhhdCllKGFyKW4oZSloCisoZm9ybWF0dGVkKTExMSAzMjg3IHkoaWRlbnRpY2FsbHkpMzAgYih0bylnKGNvbW1hbmQpaChsaW5lcy4pNTIKK2IoVCktOSBiKG8pMzAgYihmYWNpbGl0YXRlKWYodGhpcywpaihwb3B0KWYocHIpbihvdmlkZXMpZyhhKWYoZnVuY3Rpb24pCisxMTEgMzM5OSB5KHRoYXQpZihwYXJzZXMpaChhKWcoc3RyaW5nKWYoaW50bylnKGFuKWcoYXJyYXkpZihvZiloCisoc3RyaW5nLClpKHVzaW5nKWUocilvKHVsZXMpZyhzaW1pbGlhcilnKHRvKWcobm9ybWFsKTExMQorMzUxMiB5KHNoZWxsKTI0IGIocGFyc2luZy4pMTExIDM3MTcgeSBGcSgjaW5jbHVkZSkzNQorYig8cG9wdC5oPikxMTEgMzkzMyB5KGludCloKHBvcHRQYXJzZUFyZ3ZTdHJpbmdcKGNoYXIpMzEKK2IoKikzNyBiKHMsKWYoaW50KWcoKiloKGFyZ2NQdHIsKWUoY2hhciloKCoqKilnKGFyZ3ZQdHJcKTspMTExCis0MTQ1IHkgRkEoVGhlKTE5IGIoc3RyaW5nKWggRnIocylnIEZBKGlzKWcocGFyc2VkKWgoaW50bylmKGFuKWYKK0ZyKGFyZ3YpcCBGQShcMjU1c3R5bGUpaChhcnJheSktMTEgYiguKTMyIGIoVGhlKTE5IGIoaW50ZWdlcilnKHBvaW50ZWQpCitoKHRvKWcoYnkpZyh0aGUpMTExIDQyNTcgeShzZWNvbmQpMzMgYihwYXJhbWV0ZXIpLTcgYigsKTMyCitiIEZyKGFyZ2NQdHIpcCBGQSgsKWgoY29udGFpbnMpZSh0aGUpZyhudW1iZXIpZyhvZilnKGVsZW1lbnRzKWcKKyhwYXJzZWQsKWooYW5kKTExMSA0MzY5IHkodGhlKWMocG9pbnRlciloKHBvaW50ZWQpZih0byloKGJ5KWcodGhlKWYKKyhcMDAybmFsKWYocGFyYW1ldGVyKWgoaXMpaChzZXQpZyh0bylnKHBvaW50KWcodG8pZyh0aGUpZihuZXdseSlwCitlb3AKKyUlUGFnZTogNDU1IDExCis0NTUgNDc4IGJvcCAyMTU0IC0xMTYgYSBGdigyNC42KTgyIGIoU2FtcGxlKTIzIGIoQXBwbGljYXRpb24pMTE1CitiIEZ0KDQ1NSlwIDAgLTc2IDM0MTMgNCB2IDI5OSA4MyBhIEZBKGNyKW4oZWF0ZWQpMjggYihhcnJheSktMTEKK2IoLik0NSBiKFRoZSkyNyBiKGFycmF5KWcoaXMpaChkeW5hbWljYWxseSlnKGFsbG9jYXRlZClmKGFuZCloKHNob3VsZClmCisoYmUpaCBGcihmcmVlXChcKSlwIEZBKGVkKTI5OSAxOTUgeSh3aGVuKTIyIGIodGhlKWkoYXBwbGljYXRpb24pZihpcyloCisoXDAwMm5pc2hlZClmKHdpdGgpZyhpdC4pMjk5IDQwNyB5KFRoZSlpIEZyKGFyZ3ZQdHIpaAorRkEoY3IpbihlYXRlZCloKGJ5KWYgRnIocG9wdFBhcnNlQXJndlN0cmluZ1woXCkpZSBGQShpcylqKHN1aXRhYmxlKWYKKyh0byloKHBhc3MpZyhkaXIpbihlY3RseSlnKHRvKTI5OSA1MTkgeSBGcihwb3B0R2V0Q29udGV4dFwoXCkpcAorRkEoLikwIDgzOCB5IEZrKDI0LjUpMTMyIGIoSGFuZGxpbmcpNDEgYihFeHRyYSlmKEFyZ3VtZW50cylwCiswIDkyMyAzNDEzIDUgdiAyOTkgMTE4NSBhIEZBKFNvbWUpMzMgYihhcHBsaWNhdGlvbnMpZihpbXBsZW1lbnQpaCh0aGUpZgorKGVxdWl2YWxlbnQpZShvZilqKG9wdGlvbilmKGFsaWFzaW5nKWcoYnV0KWcobmVlZCkyOTkKKzEyOTcgeSh0bykzOSBiKGRvKWgoc28pZyh0aHIpbihvdWdoKWUoc3BlY2lhbClpKGxvZ2ljLik4MAorYihUaGUpMzggYiBGcihwb3B0U3R1ZmZBcmdzXChcKSlnIEZBKGZ1bmN0aW9uKWcoYWxsb3dzKWgoYW4pMjk5CisxNDA5IHkoYXBwbGljYXRpb24pMjQgYih0bylnKGluc2VydClmKG5ldylnKGFyKW4oZ3VtZW50cylnKGludG8paCh0aGUpZgorKGN1cnIpbihlbnQpZyBGcihwb3B0Q29udGV4dClwIEZBKC4pMjk5IDE2MTUgeSBGcSgjaW5jbHVkZSkzNQorYig8cG9wdC5oPikyOTkgMTgzMSB5KGludCloKHBvcHRTdHVmZkFyZ3NcKHBvcHRDb250ZXh0KTMxCitiKGNvbiwpMzYgYihjaGFyKWYoKiopaShhcmd2XCk7KTI5OSAyMDQyIHkgRkEoVGhlKWsocGFzc2VkKWoKK0ZyKGFyZ3YpZSBGQShtdXN0KWgoaGF2ZSlmKGEpaCBGcihOVUxMKWYgRkEocG9pbnRlcilnKGFzKWgoaXRzKWcKKyhcMDAybmFsKWUoZWxlbWVudC4pOTAgYihXaGVuKTI5OSAyMTU0IHkgRnIocG9wdEdldE5leHRPcHRcKFwpKTM5CitiIEZBKGlzKWoobmV4dClmKGNhbGxlZCwpayh0aGUpYyhcMjIzc3R1ZiluKGZlZFwyMjQpZihhciluKGd1bWVudHMpaAorKGFyKW4oZSlnKHRoZSlnKFwwMDJyc3QpZyh0bykyOTkgMjI2NiB5KGJlKWcocGFyc2VkLik4NworYihwb3B0KTQzIGIociluKGV0dXJucyllKHRvKWcodGhlKWcobm9ybWFsKWcoYXIpbihndW1lbnRzKWcob25jZSlnKGFsbCkKK2codGhlKWcoc3R1ZiluKGZlZCkyOTkgMjM3OCB5KGFyKW4oZ3VtZW50cykyMyBiKGhhdmUpZyhiZWVuKWcKKyhleGhhdXN0ZWQuKTAgMjcwNyB5IEZrKDI0LjYpMTMyIGIoU2FtcGxlKTQxIGIoQXBwbGljYXRpb24pcAorMCAyNzkyIFYgMjk5IDMwNTQgYSBGQShSb2JpbiwpMjggYih0aGUpZyhzYW1wbGUpZyhhcHBsaWNhdGlvbilnKG9uKWcKKyhwYWdlcyloKDI3NFwyMjYyODEpZChvZilpKENoYXB0ZXIpZigxNSwpaSh1c2VzKWYocG9wdCkyOTkKKzMxNjYgeShmb3IpMzYgYihpdHMpaShhciluKGd1bWVudCllKHBhcnNpbmcuKTczIGIoSXQpMzcKK2IocHIpbihvdmlkZXMpaChhKWUoZ29vZClpKGV4YW1wbGUpZihvZilnKGhvdylmKHRoZSlnKHBvcHQpMjk5CiszMjc4IHkobGlicmFyeSkyMiBiKGlzKWkoZ2VuZXJhbGx5KWYodXNlZC4pMjk5IDM0ODkgeShSUE0sKTMxCitiKGEpZyhwb3B1bGFyKWYoTGludXgpaChwYWNrYWdlKWcobWFuYWdlbWVudClmKHByKW4ob2dyYW0sKWsobWFrZXMpZAorKGhlYXZ5KWYodXNlKTI5OSAzNjAyIHkob2YpMjMgYihwb3B0J3MpZyhmZWF0dXIpbihlcy4pMzMKK2IoTWFueSkyMyBiKG9mKWcoaXRzKWcoY29tbWFuZFwyNTVsaW5lKWYoYXIpbihndW1lbnRzKWcoYXIpbihlKWcKKyhpbXBsZW1lbnRlZCkyOTkgMzcxNCB5KHRociluKG91Z2gpMzAgYihwb3B0KWkoYWxpYXNlcywpZyh3aGljaCllCisobWFrZXMpaChSUE0pZyhhbilmKGV4Y2VsbGVudClnKGV4YW1wbGUpaChvZilnKGhvdylmKHRvKTI5OQorMzgyNiB5KHRha2UpMzYgYihhZHZhbnRhZ2UpZyhvZiloKHRoZSlmKHBvcHQpaShsaWJyYXJ5KS0xMQorYiguKTczIGIoRm9yKTM3IGIobW9yKW4oZSlnKGluZm9ybWF0aW9uKWUob24paShSUE0sKWYoc2VlKTI5OQorMzkzOCB5KGh0dHA6LyktMTQgYigvd3d3KS05IGIoLnJwbS5vciluKGcpcCBlb3AKKyUlVHJhaWxlcgorZW5kCit1c2VyZGljdCAvZW5kLWhvb2sga25vd257ZW5kLWhvb2t9aWYKKyUlRU9GCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG9wdC5zcGVjLmluIGIvcG9wdC0xLjE2L3BvcHQuc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQ3MWJhCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvcHQuc3BlYy5pbgpAQCAtMCwwICsxLDgyIEBACisle2V4cGFuZDolJWdsb2JhbCBfcGtnY29uZmlnZGlyCSV7X2xpYmRpcn0vcGtnY29uZmlnfQorJWRlZmluZQlfbGliZGlyCS8le19saWJ9CisKK1N1bW1hcnk6IEEgQyBsaWJyYXJ5IGZvciBwYXJzaW5nIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgorTmFtZTogcG9wdAorVmVyc2lvbjogQFZFUlNJT05ACitSZWxlYXNlOiAxCitMaWNlbnNlOiBYIENvbnNvcnRpdW0KK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCitTb3VyY2U6IGh0dHA6Ly9ycG01Lm9yZy9maWxlcy9wb3B0LyV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuZ3oKK0J1aWxkUmVxdWlyZXM6IGdldHRleHQKK0J1aWxkUm9vdDogJXtfdG1wcGF0aH0vJXtuYW1lfS1yb290CisKKyVkZXNjcmlwdGlvbgorUG9wdCBpcyBhIEMgbGlicmFyeSBmb3IgcGFyc2luZyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4gUG9wdCB3YXMKK2hlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGUgZ2V0b3B0KCkgYW5kIGdldG9wdF9sb25nKCkgZnVuY3Rpb25zLCBidXQgaXQKK2ltcHJvdmVzIG9uIHRoZW0gYnkgYWxsb3dpbmcgbW9yZSBwb3dlcmZ1bCBhcmd1bWVudCBleHBhbnNpb24uIFBvcHQKK2NhbiBwYXJzZSBhcmJpdHJhcnkgYXJndltdIHN0eWxlIGFycmF5cyBhbmQgYXV0b21hdGljYWxseSBzZXQKK3ZhcmlhYmxlcyBiYXNlZCBvbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBQb3B0IGFsbG93cyBjb21tYW5kIGxpbmUKK2FyZ3VtZW50cyB0byBiZSBhbGlhc2VkIHZpYSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBpbmNsdWRlcyB1dGlsaXR5CitmdW5jdGlvbnMgZm9yIHBhcnNpbmcgYXJiaXRyYXJ5IHN0cmluZ3MgaW50byBhcmd2W10gYXJyYXlzIHVzaW5nCitzaGVsbC1saWtlIHJ1bGVzLgorCislcHJlcAorJXNldHVwIC1xCisKKyVidWlsZAorJWNvbmZpZ3VyZQorbWFrZQorCislaW5zdGFsbAorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorbWFrZSBERVNURElSPSRSUE1fQlVJTERfUk9PVCBpbnN0YWxsCislZmluZF9sYW5nIHBvcHQKKworJWNoZWNrCittYWtlIGNoZWNrIHx8IDoKKworJXRyYWNrCitwcm9nIHBvcHQgPSB7CisgICAgdmVyc2lvbiAgID0gJXt2ZXJzaW9ufQorICAgIHVybCAgICAgICA9IGh0dHA6Ly9ycG01Lm9yZy8le25hbWV9CisgICAgcmVnZXggICAgID0gJXtuYW1lfS0oXGQrXC5cZCtcLlxkKylcLnRhclwuZ3oKK30KKworJWNsZWFuCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCisKKyVmaWxlcyAtZiBwb3B0LmxhbmcKKyVkZWZhdHRyKC0scm9vdCxyb290KQorJXtfbGliZGlyfS9saWJwb3B0LioKKyV7X2luY2x1ZGVkaXJ9L3BvcHQuaAorJXtfbWFuZGlyfS9tYW4zL3BvcHQuMyoKKyV7X3BrZ2NvbmZpZ2Rpcn0vcG9wdC5wYworCislY2hhbmdlbG9nCisqIFdlZCBGZWIgMTcgMjAxMCBKZWZmIEpvaG5zb24gPGpiakBycG01Lm9yZz4KKy0gcmVsZWFzZSBwb3B0LTEuMTYgdGhyb3VnaCBycG01Lm9yZy4KKworKiBGcmkgQXByIDEwIDIwMDkgSmVmZiBKb2huc29uIDxqYmpAcnBtNS5vcmc+CistIHJlbGVhc2UgcG9wdC0xLjE1IHRocm91Z2ggcnBtNS5vcmcuCisKKyogVHVlIERlYyAxMSAyMDA3IEplZmYgSm9obnNvbiA8amJqQHJwbTUub3JnPgorLSByZWxlYXNlIHBvcHQtMS4xMyB0aHJvdWdoIHJwbTUub3JnLgorCisqIFR1ZSBKdWwgMTAgMjAwNyBKZWZmIEpvaG5zb24gPGpiakBycG01Lm9yZz4KKy0gcmVsZWFzZSBwb3B0LTEuMTIgdGhyb3VnaCBycG01Lm9yZy4KKworKiBTYXQgSnVuICA5IDIwMDcgSmVmZiBKb2huc29uIDxqYmpAcnBtNS5vcmc+CistIHJlbGVhc2UgcG9wdC0xLjExIHRocm91Z2ggcnBtNS5vcmcuCisKKyogVGh1IERlYyAxMCAxOTk4IE1pY2hhZWwgSm9obnNvbiA8am9obnNvbm1AcmVkaGF0LmNvbT4KKy0gcmVsZWFzZWQgMS4yLjI7IHNlZSBDSEFOR0VTCisKKyogVHVlIE5vdiAxNyAxOTk4IE1pY2hhZWwgSy4gSm9obnNvbiA8am9obnNvbm1AcmVkaGF0LmNvbT4KKy0gYWRkZWQgbWFuIHBhZ2UgdG8gZGVmYXVsdCBpbnN0YWxsCisKKyogVGh1IE9jdCAyMiAxOTk4IEVyaWsgVHJvYW4gPGV3dEByZWRoYXQuY29tPgorLSBzZWUgQ0hBTkdFUyBmaWxlIGZvciAxLjIKKworKiBUaHUgQXByIDA5IDE5OTggRXJpayBUcm9hbiA8ZXd0QHJlZGhhdC5jb20+CistIGFkZGVkIC4vY29uZmlndXJlIHN0ZXAgdG8gc3BlYyBmaWxlCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG9wdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvcG9wdC0xLjE2L3BvcHQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDFjOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvcHQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMCwwICsxLDU0NSBAQAorLy8gISQqVVRGOCokIQoreworCWFyY2hpdmVWZXJzaW9uID0gMTsKKwljbGFzc2VzID0geworCX07CisJb2JqZWN0VmVyc2lvbiA9IDQ1OworCW9iamVjdHMgPSB7CisKKy8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCisJCTBEMDA2QTEwMTEyNUZCRTgwMEEyRkEzMiAvKiB0ZXN0aXQuc2ggKi8gPSB7CisJCQlpc2EgPSBQQlhBZ2dyZWdhdGVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEQwMDZBMTcxMTI1RkMxQzAwQTJGQTMyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYQWdncmVnYXRlVGFyZ2V0ICJ0ZXN0aXQuc2giICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEQwMDZBMEYxMTI1RkJFODAwQTJGQTMyIC8qIFNoZWxsU2NyaXB0ICovLAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkwRDAwNkExNDExMjVGQkZEMDBBMkZBMzIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCSk7CisJCQluYW1lID0gdGVzdGl0LnNoOworCQkJcHJvZHVjdE5hbWUgPSB0ZXN0aXQuc2g7CisJCX07CisvKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMEQwMDY5OUQxMTI1RjBDNDAwQTJGQTMyIC8qIGxvb2t1cDMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEM0VBM0MzMTEyNUU1MjkwMDFDNjlFNiAvKiBsb29rdXAzLmMgKi87IH07CisJCTBEMDA2OTlGMTEyNUYwQ0UwMEEyRkEzMiAvKiBwb3B0Y29uZmlnLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNDOTExMjVFNTRCMDAxQzY5RTYgLyogcG9wdGNvbmZpZy5jICovOyB9OworCQkwRDAwNjlBMDExMjVGMEQxMDBBMkZBMzIgLyogcG9wdGhlbHAuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEM0VBM0NCMTEyNUU1NTMwMDFDNjlFNiAvKiBwb3B0aGVscC5jICovOyB9OworCQkwRDAwNjlBMTExMjVGMEQ1MDBBMkZBMzIgLyogcG9wdGludC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEQzRUEzQ0QxMTI1RTU1QjAwMUM2OUU2IC8qIHBvcHRpbnQuYyAqLzsgfTsKKwkJMEQwMDY5QTIxMTI1RjBEQTAwQTJGQTMyIC8qIHBvcHRwYXJzZS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEQzRUEzRDExMTI1RTU4NDAwMUM2OUU2IC8qIHBvcHRwYXJzZS5jICovOyB9OworCQkwRDAwNjlBMzExMjVGMEU5MDBBMkZBMzIgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNENTExMjVFNUE2MDAxQzY5RTYgLyogY29uZmlnLmggKi87IH07CisJCTBEMDA2OUE0MTEyNUYwRUMwMEEyRkEzMiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEM0VBM0QzMTEyNUU1OEUwMDFDNjlFNiAvKiBzeXN0ZW0uaCAqLzsgfTsKKwkJMEQwMDY5QTUxMTI1RjBGMTAwQTJGQTMyIC8qIHBvcHRpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEM0VBM0NGMTEyNUU1NkMwMDFDNjlFNiAvKiBwb3B0aW50LmggKi87IH07CisJCTBEMDA2OUE2MTEyNUYwRjQwMEEyRkEzMiAvKiBwb3B0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNDNzExMjVFNTNGMDAxQzY5RTYgLyogcG9wdC5oICovOyB9OworCQkwRDAwNjlDNjExMjVGNjAyMDBBMkZBMzIgLyogbGliaWNvbnYuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDAwNjlDNTExMjVGNjAyMDBBMkZBMzIgLyogbGliaWNvbnYuZHlsaWIgKi87IH07CisJCTBEMDA2OUVFMTEyNUY4MTkwMEEyRkEzMiAvKiB0ZXN0MS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEQwMDY5REQxMTI1RjczNjAwQTJGQTMyIC8qIHRlc3QxLmMgKi87IH07CisJCTBEM0JBRDEzMTEyNjAzMUUwMEIzRTgwQyAvKiBwb3B0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNDNTExMjVFNTM3MDAxQzY5RTYgLyogcG9wdC5jICovOyB9OworCQkwRDNCQUQxNDExMjYwMzFFMDBCM0U4MEMgLyogcG9wdC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEQzRUEzQzUxMTI1RTUzNzAwMUM2OUU2IC8qIHBvcHQuYyAqLzsgfTsKKwkJMEQzRUEzQzQxMTI1RTUyOTAwMUM2OUU2IC8qIGxvb2t1cDMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEM0VBM0MzMTEyNUU1MjkwMDFDNjlFNiAvKiBsb29rdXAzLmMgKi87IH07CisJCTBEM0VBM0M4MTEyNUU1M0YwMDFDNjlFNiAvKiBwb3B0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNDNzExMjVFNTNGMDAxQzY5RTYgLyogcG9wdC5oICovOyB9OworCQkwRDNFQTNDQTExMjVFNTRCMDAxQzY5RTYgLyogcG9wdGNvbmZpZy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEQzRUEzQzkxMTI1RTU0QjAwMUM2OUU2IC8qIHBvcHRjb25maWcuYyAqLzsgfTsKKwkJMEQzRUEzQ0MxMTI1RTU1MzAwMUM2OUU2IC8qIHBvcHRoZWxwLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNDQjExMjVFNTUzMDAxQzY5RTYgLyogcG9wdGhlbHAuYyAqLzsgfTsKKwkJMEQzRUEzQ0UxMTI1RTU1QjAwMUM2OUU2IC8qIHBvcHRpbnQuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEM0VBM0NEMTEyNUU1NUIwMDFDNjlFNiAvKiBwb3B0aW50LmMgKi87IH07CisJCTBEM0VBM0QwMTEyNUU1NkMwMDFDNjlFNiAvKiBwb3B0aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNDRjExMjVFNTZDMDAxQzY5RTYgLyogcG9wdGludC5oICovOyB9OworCQkwRDNFQTNEMjExMjVFNTg0MDAxQzY5RTYgLyogcG9wdHBhcnNlLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRDNFQTNEMTExMjVFNTg0MDAxQzY5RTYgLyogcG9wdHBhcnNlLmMgKi87IH07CisJCTBEM0VBM0Q0MTEyNUU1OEUwMDFDNjlFNiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEM0VBM0QzMTEyNUU1OEUwMDFDNjlFNiAvKiBzeXN0ZW0uaCAqLzsgfTsKKwkJMEQzRUEzRDYxMTI1RTVBNjAwMUM2OUU2IC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEQzRUEzRDUxMTI1RTVBNjAwMUM2OUU2IC8qIGNvbmZpZy5oICovOyB9OworCQkwREI5MjBCQTExMjYxODFFMDAwMjc3RjggLyogbGlicG9wdC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBEMDA2OTkyMTEyNUYwMzQwMEEyRkEzMiAvKiBsaWJwb3B0LmR5bGliICovOyB9OworLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCisJCTBEMDA2OUVGMTEyNUY4MzAwMEEyRkEzMiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwOEZCNzc5M0ZFODQxNTVEQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSBEMkFBQzA0NTA1NTQ2NEU1MDBEQjUxOEQ7CisJCQlyZW1vdGVJbmZvID0gbGlicG9wdC5hOworCQl9OworCQkwRDAwNkExMzExMjVGQkZEMDBBMkZBMzIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDhGQjc3OTNGRTg0MTU1REMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEQwMDY5RTkxMTI1RjgwQTAwQTJGQTMyOworCQkJcmVtb3RlSW5mbyA9IHRlc3QxOworCQl9OworCQkwREI5MjA5QjExMjYxNkE5MDAwMjc3RjggLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDhGQjc3OTNGRTg0MTU1REMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEQwMDY5OTExMTI1RjAzNDAwQTJGQTMyOworCQkJcmVtb3RlSW5mbyA9IGxpYnBvcHQuZHlsaWI7CisJCX07CisvKiBFbmQgUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTBEMDA2OTkyMTEyNUYwMzQwMEEyRkEzMiAvKiBsaWJwb3B0LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlicG9wdC5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJMEQwMDY5QzQxMTI1RjQzOTAwQTJGQTMyIC8qIHBvcHQuMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBwb3B0LjM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEMDA2OUM1MTEyNUY2MDIwMEEyRkEzMiAvKiBsaWJpY29udi5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWNvbnYuZHlsaWI7IHBhdGggPSB1c3IvbGliL2xpYmljb252LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKKwkJMEQwMDY5REQxMTI1RjczNjAwQTJGQTMyIC8qIHRlc3QxLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNzsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IHRlc3QxLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEMDA2OUVBMTEyNUY4MEEwMEEyRkEzMiAvKiB0ZXN0MSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdDE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBEMDA2QTA2MTEyNUZBREQwMEEyRkEzMiAvKiB0ZXN0aXQuc2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNzsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5zaDsgcGF0aCA9IHRlc3RpdC5zaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEQzQkFDRkMxMTI1RkY1MzAwQjNFODBDIC8qIHBvcHQucHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gcG9wdC5wczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEQzRUEzQzMxMTI1RTUyOTAwMUM2OUU2IC8qIGxvb2t1cDMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA3OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gbG9va3VwMy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRDNFQTNDNTExMjVFNTM3MDAxQzY5RTYgLyogcG9wdC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgZmlsZUVuY29kaW5nID0gNzsgcGF0aCA9IHBvcHQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEQzRUEzQzcxMTI1RTUzRjAwMUM2OUU2IC8qIHBvcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA3OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gcG9wdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRDNFQTNDOTExMjVFNTRCMDAxQzY5RTYgLyogcG9wdGNvbmZpZy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDc7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBwb3B0Y29uZmlnLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEM0VBM0NCMTEyNUU1NTMwMDFDNjlFNiAvKiBwb3B0aGVscC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDc7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBwb3B0aGVscC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRDNFQTNDRDExMjVFNTVCMDAxQzY5RTYgLyogcG9wdGludC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDc7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBwb3B0aW50LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEM0VBM0NGMTEyNUU1NkMwMDFDNjlFNiAvKiBwb3B0aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNzsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHBvcHRpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEQzRUEzRDExMTI1RTU4NDAwMUM2OUU2IC8qIHBvcHRwYXJzZS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDc7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBwb3B0cGFyc2UuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEQzRUEzRDMxMTI1RTU4RTAwMUM2OUU2IC8qIHN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDc7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzeXN0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEQzRUEzRDUxMTI1RTVBNjAwMUM2OUU2IC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDc7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDJBQUMwNDYwNTU0NjRFNTAwREI1MThEIC8qIGxpYnBvcHQuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGlicG9wdC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCisvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBEMDA2OTkwMTEyNUYwMzQwMEEyRkEzMiAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEQwMDY5QzYxMTI1RjYwMjAwQTJGQTMyIC8qIGxpYmljb252LmR5bGliIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMERCOTIwQkExMTI2MTgxRTAwMDI3N0Y4IC8qIGxpYnBvcHQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMEQwMDY5RTgxMTI1RjgwQTAwQTJGQTMyIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJRDI4OTk4NzQwNUU2OERDQjAwNEVEQjg2IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KKwkJMDhGQjc3OTRGRTg0MTU1REMwMkFBQzA3IC8qIHBvcHQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTA4RkI3Nzk1RkU4NDE1NURDMDJBQUMwNyAvKiBTb3VyY2UgKi8sCisJCQkJQzZBMEZGMkIwMjkwNzk3RjA0QzkxNzgyIC8qIERvY3VtZW50YXRpb24gKi8sCisJCQkJMUFCNjc0QURGRTlENTRCNTExQ0EyQ0JCIC8qIFByb2R1Y3RzICovLAorCQkJCTBEMDA2OUM1MTEyNUY2MDIwMEEyRkEzMiAvKiBsaWJpY29udi5keWxpYiAqLywKKwkJCSk7CisJCQluYW1lID0gcG9wdDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTA4RkI3Nzk1RkU4NDE1NURDMDJBQUMwNyAvKiBTb3VyY2UgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBEM0VBM0Q1MTEyNUU1QTYwMDFDNjlFNiAvKiBjb25maWcuaCAqLywKKwkJCQkwRDNFQTNDMzExMjVFNTI5MDAxQzY5RTYgLyogbG9va3VwMy5jICovLAorCQkJCTBEM0VBM0M1MTEyNUU1MzcwMDFDNjlFNiAvKiBwb3B0LmMgKi8sCisJCQkJMEQzRUEzQzcxMTI1RTUzRjAwMUM2OUU2IC8qIHBvcHQuaCAqLywKKwkJCQkwRDNFQTNDOTExMjVFNTRCMDAxQzY5RTYgLyogcG9wdGNvbmZpZy5jICovLAorCQkJCTBEM0VBM0NCMTEyNUU1NTMwMDFDNjlFNiAvKiBwb3B0aGVscC5jICovLAorCQkJCTBEM0VBM0NEMTEyNUU1NUIwMDFDNjlFNiAvKiBwb3B0aW50LmMgKi8sCisJCQkJMEQzRUEzQ0YxMTI1RTU2QzAwMUM2OUU2IC8qIHBvcHRpbnQuaCAqLywKKwkJCQkwRDNFQTNEMTExMjVFNTg0MDAxQzY5RTYgLyogcG9wdHBhcnNlLmMgKi8sCisJCQkJMEQzRUEzRDMxMTI1RTU4RTAwMUM2OUU2IC8qIHN5c3RlbS5oICovLAorCQkJCTBEMDA2OUREMTEyNUY3MzYwMEEyRkEzMiAvKiB0ZXN0MS5jICovLAorCQkJCTBEMDA2QTA2MTEyNUZBREQwMEEyRkEzMiAvKiB0ZXN0aXQuc2ggKi8sCisJCQkpOworCQkJbmFtZSA9IFNvdXJjZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFBQjY3NEFERkU5RDU0QjUxMUNBMkNCQiAvKiBQcm9kdWN0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRDJBQUMwNDYwNTU0NjRFNTAwREI1MThEIC8qIGxpYnBvcHQuYSAqLywKKwkJCQkwRDAwNjk5MjExMjVGMDM0MDBBMkZBMzIgLyogbGlicG9wdC5keWxpYiAqLywKKwkJCQkwRDAwNjlFQTExMjVGODBBMDBBMkZBMzIgLyogdGVzdDEgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQzZBMEZGMkIwMjkwNzk3RjA0QzkxNzgyIC8qIERvY3VtZW50YXRpb24gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBEM0JBQ0ZDMTEyNUZGNTMwMEIzRTgwQyAvKiBwb3B0LnBzICovLAorCQkJCTBEMDA2OUM0MTEyNUY0MzkwMEEyRkEzMiAvKiBwb3B0LjMgKi8sCisJCQkpOworCQkJbmFtZSA9IERvY3VtZW50YXRpb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRDAwNjk4RTExMjVGMDM0MDBBMkZBMzIgLyogSGVhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTBEMDA2OUEzMTEyNUYwRTkwMEEyRkEzMiAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBEMDA2OUE1MTEyNUYwRjEwMEEyRkEzMiAvKiBwb3B0aW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRDAwNjlBNjExMjVGMEY0MDBBMkZBMzIgLyogcG9wdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEQwMDY5QTQxMTI1RjBFQzAwQTJGQTMyIC8qIHN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CisJCUQyQUFDMDQzMDU1NDY0RTUwMERCNTE4RCAvKiBIZWFkZXJzICovID0geworCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEQzRUEzRDYxMTI1RTVBNjAwMUM2OUU2IC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEQzRUEzQzgxMTI1RTUzRjAwMUM2OUU2IC8qIHBvcHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBEM0VBM0QwMTEyNUU1NkMwMDFDNjlFNiAvKiBwb3B0aW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRDNFQTNENDExMjVFNThFMDAxQzY5RTYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKy8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTBEMDA2OTkxMTEyNUYwMzQwMEEyRkEzMiAvKiBsaWJwb3B0LmR5bGliICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBEMDA2OTk5MTEyNUYwNzYwMEEyRkEzMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGlicG9wdC5keWxpYiIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkwRDAwNjk4RTExMjVGMDM0MDBBMkZBMzIgLyogSGVhZGVycyAqLywKKwkJCQkwRDAwNjk4RjExMjVGMDM0MDBBMkZBMzIgLyogU291cmNlcyAqLywKKwkJCQkwRDAwNjk5MDExMjVGMDM0MDBBMkZBMzIgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gbGlicG9wdC5keWxpYjsKKwkJCXByb2R1Y3ROYW1lID0gbGlicG9wdC5keWxpYjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRDAwNjk5MjExMjVGMDM0MDBBMkZBMzIgLyogbGlicG9wdC5keWxpYiAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5keW5hbWljIjsKKwkJfTsKKwkJMEQwMDY5RTkxMTI1RjgwQTAwQTJGQTMyIC8qIHRlc3QxICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBEMDA2OUYzMTEyNUY4NEYwMEEyRkEzMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdDEiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEQwMDY5RTcxMTI1RjgwQTAwQTJGQTMyIC8qIFNvdXJjZXMgKi8sCisJCQkJMEQwMDY5RTgxMTI1RjgwQTAwQTJGQTMyIC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMERCOTIwOUMxMTI2MTZBOTAwMDI3N0Y4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkJMEQwMDY5RjAxMTI1RjgzMDAwQTJGQTMyIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9IHRlc3QxOworCQkJcHJvZHVjdE5hbWUgPSB0ZXN0MTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRDAwNjlFQTExMjVGODBBMDBBMkZBMzIgLyogdGVzdDEgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OworCQlEMkFBQzA0NTA1NTQ2NEU1MDBEQjUxOEQgLyogbGlicG9wdC5hICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDFERUI5MUVCMDg3MzNEQjcwMDEwRTlDRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGlicG9wdC5hIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCUQyQUFDMDQzMDU1NDY0RTUwMERCNTE4RCAvKiBIZWFkZXJzICovLAorCQkJCUQyQUFDMDQ0MDU1NDY0RTUwMERCNTE4RCAvKiBTb3VyY2VzICovLAorCQkJCUQyODk5ODc0MDVFNjhEQ0IwMDRFREI4NiAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBsaWJwb3B0LmE7CisJCQlwcm9kdWN0TmFtZSA9IHBvcHQ7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gRDJBQUMwNDYwNTU0NjRFNTAwREI1MThEIC8qIGxpYnBvcHQuYSAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQl9OworLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLworCQkwOEZCNzc5M0ZFODQxNTVEQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCQlpc2EgPSBQQlhQcm9qZWN0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDFERUI5MUVGMDg3MzNEQjcwMDEwRTlDRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgInBvcHQiICovOworCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4xIjsKKwkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCUVuZ2xpc2gsCisJCQkJSmFwYW5lc2UsCisJCQkJRnJlbmNoLAorCQkJCUdlcm1hbiwKKwkJCQkiIiwKKwkJCSk7CisJCQltYWluR3JvdXAgPSAwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogcG9wdCAqLzsKKwkJCXByb2plY3REaXJQYXRoID0gIiI7CisJCQlwcm9qZWN0Um9vdCA9ICIiOworCQkJdGFyZ2V0cyA9ICgKKwkJCQlEMkFBQzA0NTA1NTQ2NEU1MDBEQjUxOEQgLyogbGlicG9wdC5hICovLAorCQkJCTBEMDA2OTkxMTEyNUYwMzQwMEEyRkEzMiAvKiBsaWJwb3B0LmR5bGliICovLAorCQkJCTBEMDA2OUU5MTEyNUY4MEEwMEEyRkEzMiAvKiB0ZXN0MSAqLywKKwkJCQkwRDAwNkExMDExMjVGQkU4MDBBMkZBMzIgLyogdGVzdGl0LnNoICovLAorCQkJKTsKKwkJfTsKKy8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEQwMDZBMEYxMTI1RkJFODAwQTJGQTMyIC8qIFNoZWxsU2NyaXB0ICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkpOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3NoOworCQkJc2hlbGxTY3JpcHQgPSAiIyBzaGVsbCBzY3JpcHQgZ29lcyBoZXJlXG5leGl0IDAiOworCQl9OworLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEQwMDY5OEYxMTI1RjAzNDAwQTJGQTMyIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRDAwNjk5RDExMjVGMEM0MDBBMkZBMzIgLyogbG9va3VwMy5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEQzQkFEMTQxMTI2MDMxRTAwQjNFODBDIC8qIHBvcHQuYyBpbiBTb3VyY2VzICovLAorCQkJCTBEMDA2OTlGMTEyNUYwQ0UwMEEyRkEzMiAvKiBwb3B0Y29uZmlnLmMgaW4gU291cmNlcyAqLywKKwkJCQkwRDAwNjlBMDExMjVGMEQxMDBBMkZBMzIgLyogcG9wdGhlbHAuYyBpbiBTb3VyY2VzICovLAorCQkJCTBEMDA2OUExMTEyNUYwRDUwMEEyRkEzMiAvKiBwb3B0aW50LmMgaW4gU291cmNlcyAqLywKKwkJCQkwRDAwNjlBMjExMjVGMERBMDBBMkZBMzIgLyogcG9wdHBhcnNlLmMgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMEQwMDY5RTcxMTI1RjgwQTAwQTJGQTMyIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRDAwNjlFRTExMjVGODE5MDBBMkZBMzIgLyogdGVzdDEuYyBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworCQlEMkFBQzA0NDA1NTQ2NEU1MDBEQjUxOEQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTBEM0VBM0M0MTEyNUU1MjkwMDFDNjlFNiAvKiBsb29rdXAzLmMgaW4gU291cmNlcyAqLywKKwkJCQkwRDNCQUQxMzExMjYwMzFFMDBCM0U4MEMgLyogcG9wdC5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEQzRUEzQ0ExMTI1RTU0QjAwMUM2OUU2IC8qIHBvcHRjb25maWcuYyBpbiBTb3VyY2VzICovLAorCQkJCTBEM0VBM0NDMTEyNUU1NTMwMDFDNjlFNiAvKiBwb3B0aGVscC5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEQzRUEzQ0UxMTI1RTU1QjAwMUM2OUU2IC8qIHBvcHRpbnQuYyBpbiBTb3VyY2VzICovLAorCQkJCTBEM0VBM0QyMTEyNUU1ODQwMDFDNjlFNiAvKiBwb3B0cGFyc2UuYyBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OworLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKworLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTBEMDA2OUYwMTEyNUY4MzAwMEEyRkEzMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IEQyQUFDMDQ1MDU1NDY0RTUwMERCNTE4RCAvKiBsaWJwb3B0LmEgKi87CisJCQl0YXJnZXRQcm94eSA9IDBEMDA2OUVGMTEyNUY4MzAwMEEyRkEzMiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCTBEMDA2QTE0MTEyNUZCRkQwMEEyRkEzMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBEMDA2OUU5MTEyNUY4MEEwMEEyRkEzMiAvKiB0ZXN0MSAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEQwMDZBMTMxMTI1RkJGRDAwQTJGQTMyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKKwkJMERCOTIwOUMxMTI2MTZBOTAwMDI3N0Y4IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMEQwMDY5OTExMTI1RjAzNDAwQTJGQTMyIC8qIGxpYnBvcHQuZHlsaWIgKi87CisJCQl0YXJnZXRQcm94eSA9IDBEQjkyMDlCMTEyNjE2QTkwMDAyNzdGOCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJMEQwMDY5OTMxMTI1RjAzNTAwQTJGQTMyIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlFWEVDVVRBQkxFX1BSRUZJWCA9IGxpYjsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBZRVM7CisJCQkJR0NDX01PREVMX1RVTklORyA9IEc1OworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAyOworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSBIQVZFX0NPTkZJR19IOworCQkJCUlOU1RBTExfUEFUSCA9IC91c3IvbG9jYWwvbGliOworCQkJCU9USEVSX0xERkxBR1MgPSAiLWxpY29udiI7CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9IHBvcHQ7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkwRDAwNjk5NDExMjVGMDM1MDBBMkZBMzIgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOworCQkJCUVYRUNVVEFCTEVfUFJFRklYID0gbGliOworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IE5POworCQkJCUdDQ19NT0RFTF9UVU5JTkcgPSBHNTsKKwkJCQlJTlNUQUxMX1BBVEggPSAvdXNyL2xvY2FsL2xpYjsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gcG9wdDsKKwkJCQlaRVJPX0xJTksgPSBOTzsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMEQwMDY5RUMxMTI1RjgwQTAwQTJGQTMyIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBZRVM7CisJCQkJR0NDX01PREVMX1RVTklORyA9IEc1OworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSBIQVZFX0NPTkZJR19IOworCQkJCUlOU1RBTExfUEFUSCA9IC91c3IvbG9jYWwvYmluOworCQkJCU1BQ0hfT19UWVBFID0gbWhfZXhlY3V0ZTsKKwkJCQlPVEhFUl9MREZMQUdTID0gKAorCQkJCQkiLWxwb3B0IiwKKwkJCQkJIi1saWNvbnYiLAorCQkJCSk7CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3QxOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEQwMDY5RUQxMTI1RjgwQTAwQTJGQTMyIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlHQ0NfRU5BQkxFX0ZJWF9BTkRfQ09OVElOVUUgPSBOTzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJCQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9iaW47CisJCQkJUFJFQklORElORyA9IE5POworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3QxOworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwRDAwNkExMTExMjVGQkU4MDBBMkZBMzIgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RpdC5zaDsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBEMDA2QTEyMTEyNUZCRTgwMEEyRkEzMiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CisJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJR0NDX0VOQUJMRV9GSVhfQU5EX0NPTlRJTlVFID0gTk87CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGl0LnNoOworCQkJCVpFUk9fTElOSyA9IE5POworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkxREVCOTFFQzA4NzMzREI3MDAxMEU5Q0QgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POworCQkJCUdDQ19FTkFCTEVfRklYX0FORF9DT05USU5VRSA9IFlFUzsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDI7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9IEhBVkVfQ09ORklHX0g7CisJCQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9saWI7CisJCQkJIk5ldyBTZXR0aW5nIiA9ICIiOworCQkJCVBST0RVQ1RfTkFNRSA9IHBvcHQ7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkxREVCOTFFRDA4NzMzREI3MDAxMEU5Q0QgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlHQ0NfTU9ERUxfVFVOSU5HID0gRzU7CisJCQkJSU5TVEFMTF9QQVRIID0gL3Vzci9sb2NhbC9saWI7CisJCQkJUFJPRFVDVF9OQU1FID0gcG9wdDsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMURFQjkxRjAwODczM0RCNzAwMTBFOUNEIC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfMzJfNjRfQklUKSI7CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKKwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7CisJCQkJT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlQUkVCSU5ESU5HID0gTk87CisJCQkJU0RLUk9PVCA9IG1hY29zeDEwLjY7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkxREVCOTFGMTA4NzMzREI3MDAxMEU5Q0QgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzMyXzY0X0JJVCkiOworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCVBSRUJJTkRJTkcgPSBOTzsKKwkJCQlTREtST09UID0gbWFjb3N4MTAuNjsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisKKy8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLworCQkwRDAwNjk5OTExMjVGMDc2MDBBMkZBMzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYnBvcHQuZHlsaWIiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMEQwMDY5OTMxMTI1RjAzNTAwQTJGQTMyIC8qIERlYnVnICovLAorCQkJCTBEMDA2OTk0MTEyNUYwMzUwMEEyRkEzMiAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBEMDA2OUYzMTEyNUY4NEYwMEEyRkEzMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdDEiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMEQwMDY5RUMxMTI1RjgwQTAwQTJGQTMyIC8qIERlYnVnICovLAorCQkJCTBEMDA2OUVEMTEyNUY4MEEwMEEyRkEzMiAvKiBSZWxlYXNlICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBEMDA2QTE3MTEyNUZDMUMwMEEyRkEzMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCAidGVzdGl0LnNoIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBEMDA2QTExMTEyNUZCRTgwMEEyRkEzMiAvKiBEZWJ1ZyAqLywKKwkJCQkwRDAwNkExMjExMjVGQkU4MDBBMkZBMzIgLyogUmVsZWFzZSAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOworCQl9OworCQkxREVCOTFFQjA4NzMzREI3MDAxMEU5Q0QgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYnBvcHQuYSIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxREVCOTFFQzA4NzMzREI3MDAxMEU5Q0QgLyogRGVidWcgKi8sCisJCQkJMURFQjkxRUQwODczM0RCNzAwMTBFOUNEIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMURFQjkxRUYwODczM0RCNzAwMTBFOUNEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAicG9wdCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkxREVCOTFGMDA4NzMzREI3MDAxMEU5Q0QgLyogRGVidWcgKi8sCisJCQkJMURFQjkxRjEwODczM0RCNzAwMTBFOUNEIC8qIFJlbGVhc2UgKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKKwkJfTsKKy8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwl9OworCXJvb3RPYmplY3QgPSAwOEZCNzc5M0ZFODQxNTVEQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Cit9CmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvcG9wdGNvbmZpZy5jIGIvcG9wdC0xLjE2L3BvcHRjb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODQwZDBjCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvcHRjb25maWcuYwpAQCAtMCwwICsxLDU4MiBAQAorLyoqIFxpbmdyb3VwIHBvcHQKKyAqIFxmaWxlIHBvcHQvcG9wdGNvbmZpZy5jCisgKi8KKworLyogKEMpIDE5OTgtMjAwMiBSZWQgSGF0LCBJbmMuIC0tIExpY2Vuc2luZyBkZXRhaWxzIGFyZSBpbiB0aGUgQ09QWUlORworICAgZmlsZSBhY2NvbXBhbnlpbmcgcG9wdCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYXZhaWxhYmxlIGZyb20gCisgICBmdHA6Ly9mdHAucnBtLm9yZy9wdWIvcnBtL2Rpc3QuICovCisKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJwb3B0aW50LmgiCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmIGRlZmluZWQoSEFWRV9GTk1BVENIX0gpCisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCisjaWYgZGVmaW5lZChfX0xDTElOVF9fKQorLypALWRlY2x1bmRlZiAtZXhwb3J0aGVhZGVyIC1pbmNvbmRlZnMgLXByb3RvcGFyYW1tYXRjaCAtcmVkZWNsIC10eXBlIEAqLworZXh0ZXJuIGludCBmbm1hdGNoIChjb25zdCBjaGFyICpfX3BhdHRlcm4sIGNvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fZmxhZ3MpCisJLypAKi87CisvKkA9ZGVjbHVuZGVmID1leHBvcnRoZWFkZXIgPWluY29uZGVmcyA9cHJvdG9wYXJhbW1hdGNoID1yZWRlY2wgPXR5cGUgQCovCisjZW5kaWYJLyogX19MQ0xJTlRfXyAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfR0xPQl9IKQorI2luY2x1ZGUgPGdsb2IuaD4KKworI2lmIGRlZmluZWQoX19MQ0xJTlRfXykKKy8qQC1kZWNsdW5kZWYgLWV4cG9ydGhlYWRlciAtaW5jb25kZWZzIC1wcm90b3BhcmFtbWF0Y2ggLXJlZGVjbCAtdHlwZSBAKi8KK2V4dGVybiBpbnQgZ2xvYiAoY29uc3QgY2hhciAqX19wYXR0ZXJuLCBpbnQgX19mbGFncywKKwkJLypAbnVsbEAqLyBpbnQgKCpfX2VycmZ1bmMpIChjb25zdCBjaGFyICosIGludCksCisJCS8qQG91dEAqLyBnbG9iX3QgKl9fcGdsb2IpCisJLypAZ2xvYmFscyBlcnJubywgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyAqX19wZ2xvYiwgZXJybm8sIGZpbGVTeXN0ZW0gQCovOworCisvKiBYWFggb25seSBhbm5vdGF0aW9uIGlzIGEgd2hpdGUgbGllICovCitleHRlcm4gdm9pZCBnbG9iZnJlZSAoLypAb25seUAqLyBnbG9iX3QgKl9fcGdsb2IpCisJLypAbW9kaWZpZXMgKl9fcGdsb2IgQCovOworCisvKiBYWFggX0dOVV9TT1VSQ0UgaWZkZWYgYW5kL29yIHJldHJvZml0IGlzIG5lZWRlZCBmb3IgcG9ydGFiaWxpdHkuICovCitleHRlcm4gaW50IGdsb2JfcGF0dGVybl9wIChjb25zdCBjaGFyICpfX3BhdHRlcm4sIGludCBfX3F1b3RlKQorICAgICAgICAvKkAqLzsKKy8qQD1kZWNsdW5kZWYgPWV4cG9ydGhlYWRlciA9aW5jb25kZWZzID1wcm90b3BhcmFtbWF0Y2ggPXJlZGVjbCA9dHlwZSBAKi8KKyNlbmRpZgkvKiBfX0xDTElOVF9fICovCisKKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCisvKiBSZXR1cm4gbm9uemVybyBpZiBQQVRURVJOIGNvbnRhaW5zIGFueSBtZXRhY2hhcmFjdGVycy4KKyAgIE1ldGFjaGFyYWN0ZXJzIGNhbiBiZSBxdW90ZWQgd2l0aCBiYWNrc2xhc2hlcyBpZiBRVU9URSBpcyBub256ZXJvLiAgKi8KK3N0YXRpYyBpbnQKK2dsb2JfcGF0dGVybl9wIChjb25zdCBjaGFyICogcGF0dGVybiwgaW50IHF1b3RlKQorCS8qQCovCit7CisgICAgY29uc3QgY2hhciAqIHA7CisgICAgaW50IG9wZW4gPSAwOworCisgICAgZm9yIChwID0gcGF0dGVybjsgKnAgIT0gJ1wwJzsgKytwKQorICAgIHN3aXRjaCAoKnApIHsKKyAgICBjYXNlICc/JzoKKyAgICBjYXNlICcqJzoKKwlyZXR1cm4gMTsKKwkvKkBub3RyZWFjaGVkQCovIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworICAgIGNhc2UgJ1xcJzoKKwlpZiAocXVvdGUgJiYgcFsxXSAhPSAnXDAnKQorCSAgKytwOworCS8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworICAgIGNhc2UgJ1snOgorCW9wZW4gPSAxOworCS8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworICAgIGNhc2UgJ10nOgorCWlmIChvcGVuKQorCSAgcmV0dXJuIDE7CisJLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmCS8qICFkZWZpbmVkKF9fR0xJQkNfXykgKi8KKworLypAdW5jaGVja2VkQCovCitzdGF0aWMgaW50IHBvcHRHbG9iRmxhZ3MgPSAwOworCitzdGF0aWMgaW50IHBvcHRHbG9iX2Vycm9yKC8qQHVudXNlZEAqLyBVTlVTRUQoY29uc3QgY2hhciAqIGVwYXRoKSwKKwkJLypAdW51c2VkQCovIFVOVVNFRChpbnQgZWVycm5vKSkKKwkvKkAqLworeworICAgIHJldHVybiAxOworfQorI2VuZGlmCS8qIEhBVkVfR0xPQl9IICovCisKKy8qKgorICogUmV0dXJuIHBhdGgocykgZnJvbSBhIGdsb2IgcGF0dGVybi4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBwYXR0ZXJuCWdsb2IgcGF0dGVybgorICogQHJldHZhbCAqYWNwCQluby4gb2YgcGF0aHMKKyAqIEByZXR2YWwgKmF2cAkJYXJyYXkgb2YgcGF0aHMKKyAqIEByZXR1cm4JCTAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IHBvcHRHbG9iKC8qQHVudXNlZEAqLyBVTlVTRUQocG9wdENvbnRleHQgY29uKSwgY29uc3QgY2hhciAqIHBhdHRlcm4sCisJCS8qQG91dEAqLyBpbnQgKiBhY3AsIC8qQG91dEAqLyBjb25zdCBjaGFyICoqKiBhdnApCisJLypAbW9kaWZpZXMgKmFjcCwgKmF2cCBAKi8KK3sKKyAgICBjb25zdCBjaGFyICogcGF0ID0gcGF0dGVybjsKKyAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIHN1Y2Nlc3MgKi8KKworICAgIC8qIFhYWCBza2lwIHRoZSBhdHRlbnRpb24gbWFya2VyLiAqLworICAgIGlmIChwYXRbMF0gPT0gJ0AnICYmIHBhdFsxXSAhPSAnKCcpCisJcGF0Kys7CisKKyNpZiBkZWZpbmVkKEhBVkVfR0xPQl9IKQorICAgIGlmIChnbG9iX3BhdHRlcm5fcChwYXQsIDApKSB7CisJZ2xvYl90IF9nLCAqcGdsb2IgPSAmX2c7CisKKwlpZiAoIWdsb2IocGF0LCBwb3B0R2xvYkZsYWdzLCBwb3B0R2xvYl9lcnJvciwgcGdsb2IpKSB7CisJICAgIGlmIChhY3ApIHsKKwkJKmFjcCA9IChpbnQpIHBnbG9iLT5nbF9wYXRoYzsKKwkJcGdsb2ItPmdsX3BhdGhjID0gMDsKKwkgICAgfQorCSAgICBpZiAoYXZwKSB7CisvKkAtb25seXRyYW5zQCovCisJCSphdnAgPSAoY29uc3QgY2hhciAqKikgcGdsb2ItPmdsX3BhdGh2OworLypAPW9ubHl0cmFuc0AqLworCQlwZ2xvYi0+Z2xfcGF0aHYgPSBOVUxMOworCSAgICB9CisvKkAtbnVsbHN0YXRlQCovCisJICAgIGdsb2JmcmVlKHBnbG9iKTsKKy8qQD1udWxsc3RhdGVAKi8KKwl9IGVsc2UKKwkgICAgcmMgPSBQT1BUX0VSUk9SX0VSUk5POworICAgIH0gZWxzZQorI2VuZGlmCS8qIEhBVkVfR0xPQl9IICovCisgICAgeworCWlmIChhY3ApCisJICAgICphY3AgPSAxOworCWlmIChhdnAgJiYgKCphdnAgPSBjYWxsb2MoKHNpemVfdCkoMSArIDEpLCBzaXplb2YgKCoqYXZwKSkpICE9IE5VTEwpCisJICAgICgqYXZwKVswXSA9IHhzdHJkdXAocGF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qQGFjY2VzcyBwb3B0Q29udGV4dCBAKi8KKworaW50IHBvcHRTYW5lRmlsZShjb25zdCBjaGFyICogZm4pCit7CisgICAgc3RydWN0IHN0YXQgc2I7CisgICAgdWlkX3QgdWlkID0gZ2V0dWlkKCk7CisKKyAgICBpZiAoc3RhdChmbiwgJnNiKSA9PSAtMSkKKwlyZXR1cm4gMTsKKyAgICBpZiAoKHVpZF90KXNiLnN0X3VpZCAhPSB1aWQpCisJcmV0dXJuIDA7CisgICAgaWYgKCFTX0lTUkVHKHNiLnN0X21vZGUpKQorCXJldHVybiAwOworLypALWJpdHdpc2VzaWduZWRAKi8KKyAgICBpZiAoc2Iuc3RfbW9kZSAmIChTX0lXR1JQfFNfSVdPVEgpKQorCXJldHVybiAwOworLypAPWJpdHdpc2VzaWduZWRAKi8KKyAgICByZXR1cm4gMTsKK30KKworaW50IHBvcHRSZWFkRmlsZShjb25zdCBjaGFyICogZm4sIGNoYXIgKiogYnAsIHNpemVfdCAqIG5icCwgaW50IGZsYWdzKQoreworICAgIGludCBmZG5vOworICAgIGNoYXIgKiBiID0gTlVMTDsKKyAgICBvZmZfdCBuYiA9IDA7CisgICAgY2hhciAqIHMsICogdCwgKiBzZTsKKyAgICBpbnQgcmMgPSBQT1BUX0VSUk9SX0VSUk5POwkvKiBhc3N1bWUgZmFpbHVyZSAqLworCisgICAgZmRubyA9IG9wZW4oZm4sIE9fUkRPTkxZKTsKKyAgICBpZiAoZmRubyA8IDApCisJZ290byBleGl0OworCisgICAgaWYgKChuYiA9IGxzZWVrKGZkbm8sIDAsIFNFRUtfRU5EKSkgPT0gKG9mZl90KS0xCisgICAgIHx8IGxzZWVrKGZkbm8sIDAsIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEKKyAgICAgfHwgKGIgPSBjYWxsb2Moc2l6ZW9mKCpiKSwgKHNpemVfdCluYiArIDEpKSA9PSBOVUxMCisgICAgIHx8IHJlYWQoZmRubywgKGNoYXIgKiliLCAoc2l6ZV90KW5iKSAhPSAoc3NpemVfdCluYikKKyAgICB7CisJaW50IG9lcnJubyA9IGVycm5vOworCSh2b2lkKSBjbG9zZShmZG5vKTsKKwllcnJubyA9IG9lcnJubzsKKwlnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChjbG9zZShmZG5vKSA9PSAtMSkKKwlnb3RvIGV4aXQ7CisgICAgaWYgKGIgPT0gTlVMTCkgeworCXJjID0gUE9QVF9FUlJPUl9NQUxMT0M7CisJZ290byBleGl0OworICAgIH0KKyAgICByYyA9IDA7CisKKyAgIC8qIFRyaW0gb3V0IGVzY2FwZWQgbmV3bGluZXMuICovCisvKkAtYml0d2lzZXNpZ25lZEAqLworICAgIGlmIChmbGFncyAmIFBPUFRfUkVBREZJTEVfVFJJTU5FV0xJTkVTKQorLypAPWJpdHdpc2VzaWduZWRAKi8KKyAgICB7CisJZm9yICh0ID0gYiwgcyA9IGIsIHNlID0gYiArIG5iOyAqcyAmJiBzIDwgc2U7IHMrKykgeworCSAgICBzd2l0Y2ggKCpzKSB7CisJICAgIGNhc2UgJ1xcJzoKKwkJaWYgKHNbMV0gPT0gJ1xuJykgeworCQkgICAgcysrOworCQkgICAgY29udGludWU7CisJCX0KKwkJLypAZmFsbHRocm91Z2hAKi8KKwkgICAgZGVmYXVsdDoKKwkJKnQrKyA9ICpzOworCQkvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwkgICAgfQorCX0KKwkqdCsrID0gJ1wwJzsKKwluYiA9IChvZmZfdCkodCAtIGIpOworICAgIH0KKworZXhpdDoKKyAgICBpZiAocmMgIT0gMCkgeworLypALXVzZWRlZkAqLworCWlmIChiKQorCSAgICBmcmVlKGIpOworLypAPXVzZWRlZkAqLworCWIgPSBOVUxMOworCW5iID0gMDsKKyAgICB9CisgICAgaWYgKGJwKQorCSpicCA9IGI7CisvKkAtdXNlcmVsZWFzZWRAKi8KKyAgICBlbHNlIGlmIChiKQorCWZyZWUoYik7CisvKkA9dXNlcmVsZWFzZWRAKi8KKyAgICBpZiAobmJwKQorCSpuYnAgPSAoc2l6ZV90KW5iOworLypALWNvbXBkZWYgLW51bGxzdGF0ZSBAKi8JLyogWFhYIGNhbm5vdCBhbm5vdGF0ZSBjaGFyICoqIGNvcnJlY3RseSAqLworICAgIHJldHVybiByYzsKKy8qQD1jb21wZGVmID1udWxsc3RhdGUgQCovCit9CisKKy8qKgorICogQ2hlY2sgZm9yIGFwcGxpY2F0aW9uIG1hdGNoLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIHMJCWNvbmZpZyBhcHBsaWNhdGlvbiBuYW1lCisgKiByZXR1cm4JCTAgaWYgY29uZmlnIGFwcGxpY2F0aW9uIG1hdGNoZXMKKyAqLworc3RhdGljIGludCBjb25maWdBcHBNYXRjaChwb3B0Q29udGV4dCBjb24sIGNvbnN0IGNoYXIgKiBzKQorCS8qQCovCit7CisgICAgaW50IHJjID0gMTsKKworICAgIGlmIChjb24tPmFwcE5hbWUgPT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbi4gKi8KKwlyZXR1cm4gcmM7CisKKyNpZiBkZWZpbmVkKEhBVkVfR0xPQl9IKSAmJiBkZWZpbmVkKEhBVkVfRk5NQVRDSF9IKQorICAgIGlmIChnbG9iX3BhdHRlcm5fcChzLCAxKSkgeworLypALWJpdHdpc2VzaWduZWRAKi8KKwlzdGF0aWMgaW50IGZsYWdzID0gRk5NX1BBVEhOQU1FIHwgRk5NX1BFUklPRDsKKyNpZmRlZiBGTk1fRVhUTUFUQ0gKKwlmbGFncyB8PSBGTk1fRVhUTUFUQ0g7CisjZW5kaWYKKy8qQD1iaXR3aXNlc2lnbmVkQCovCisJcmMgPSBmbm1hdGNoKHMsIGNvbi0+YXBwTmFtZSwgZmxhZ3MpOworICAgIH0gZWxzZQorI2VuZGlmCisJcmMgPSBzdHJjbXAocywgY29uLT5hcHBOYW1lKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qQC1jb21wbWVtcGFzc0AqLwkvKiBGSVg6IGl0ZW0tPm9wdGlvbi5sb25nTmFtZSBrZXB0LCBub3QgZGVwZW5kZW50LiAqLworc3RhdGljIGludCBwb3B0Q29uZmlnTGluZShwb3B0Q29udGV4dCBjb24sIGNoYXIgKiBsaW5lKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSwgaW50ZXJuYWxTdGF0ZSBAKi8KKwkvKkBtb2RpZmllcyBjb24sIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCit7CisgICAgY2hhciAqYiA9IE5VTEw7CisgICAgc2l6ZV90IG5iID0gMDsKKyAgICBjaGFyICogc2UgPSBsaW5lOworICAgIGNvbnN0IGNoYXIgKiBhcHBOYW1lOworICAgIGNvbnN0IGNoYXIgKiBlbnRyeVR5cGU7CisgICAgY29uc3QgY2hhciAqIG9wdDsKKyAgICBzdHJ1Y3QgcG9wdEl0ZW1fcyBpdGVtX2J1ZjsKKyAgICBwb3B0SXRlbSBpdGVtID0gJml0ZW1fYnVmOworICAgIGludCBpLCBqOworICAgIGludCByYyA9IFBPUFRfRVJST1JfQkFEQ09ORklHOworCisgICAgaWYgKGNvbi0+YXBwTmFtZSA9PSBOVUxMKQorCWdvdG8gZXhpdDsKKyAgICAKKyAgICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKCppdGVtKSk7CisKKyAgICBhcHBOYW1lID0gc2U7CisgICAgd2hpbGUgKCpzZSAhPSAnXDAnICYmICFfaXNzcGFjZXB0cihzZSkpIHNlKys7CisgICAgaWYgKCpzZSA9PSAnXDAnKQorCWdvdG8gZXhpdDsKKyAgICBlbHNlCisJKnNlKysgPSAnXDAnOworCisgICAgaWYgKGNvbmZpZ0FwcE1hdGNoKGNvbiwgYXBwTmFtZSkpIGdvdG8gZXhpdDsKKworICAgIHdoaWxlICgqc2UgIT0gJ1wwJyAmJiBfaXNzcGFjZXB0cihzZSkpIHNlKys7CisgICAgZW50cnlUeXBlID0gc2U7CisgICAgd2hpbGUgKCpzZSAhPSAnXDAnICYmICFfaXNzcGFjZXB0cihzZSkpIHNlKys7CisgICAgaWYgKCpzZSAhPSAnXDAnKSAqc2UrKyA9ICdcMCc7CisKKyAgICB3aGlsZSAoKnNlICE9ICdcMCcgJiYgX2lzc3BhY2VwdHIoc2UpKSBzZSsrOworICAgIGlmICgqc2UgPT0gJ1wwJykgZ290byBleGl0OworICAgIG9wdCA9IHNlOworICAgIHdoaWxlICgqc2UgIT0gJ1wwJyAmJiAhX2lzc3BhY2VwdHIoc2UpKSBzZSsrOworICAgIGlmIChvcHRbMF0gPT0gJy0nICYmICpzZSA9PSAnXDAnKSBnb3RvIGV4aXQ7CisgICAgaWYgKCpzZSAhPSAnXDAnKSAqc2UrKyA9ICdcMCc7CisKKyAgICB3aGlsZSAoKnNlICE9ICdcMCcgJiYgX2lzc3BhY2VwdHIoc2UpKSBzZSsrOworICAgIGlmIChvcHRbMF0gPT0gJy0nICYmICpzZSA9PSAnXDAnKSBnb3RvIGV4aXQ7CisKKy8qQC10ZW1wdHJhbnNAKi8gLyogRklYOiBsaW5lIGFsaWFzIGlzIHNhdmVkICovCisgICAgaWYgKG9wdFswXSA9PSAnLScgJiYgb3B0WzFdID09ICctJykKKwlpdGVtLT5vcHRpb24ubG9uZ05hbWUgPSBvcHQgKyAyOworICAgIGVsc2UgaWYgKG9wdFswXSA9PSAnLScgJiYgb3B0WzJdID09ICdcMCcpCisJaXRlbS0+b3B0aW9uLnNob3J0TmFtZSA9IG9wdFsxXTsKKyAgICBlbHNlIHsKKwljb25zdCBjaGFyICogZm4gPSBvcHQ7CisKKwkvKiBYWFggaGFuZGxlIGdsb2JzIGFuZCBkaXJlY3RvcmllcyBpbiBmbj8gKi8KKwlpZiAoKHJjID0gcG9wdFJlYWRGaWxlKGZuLCAmYiwgJm5iLCBQT1BUX1JFQURGSUxFX1RSSU1ORVdMSU5FUykpICE9IDApCisJICAgIGdvdG8gZXhpdDsKKwlpZiAoYiA9PSBOVUxMIHx8IG5iID09IDApCisJICAgIGdvdG8gZXhpdDsKKworCS8qIEFwcGVuZCByZW1haW5pbmcgdGV4dCB0byB0aGUgaW50ZXJwb2xhdGVkIGZpbGUgb3B0aW9uIHRleHQuICovCisJaWYgKCpzZSAhPSAnXDAnKSB7CisJICAgIHNpemVfdCBuc2UgPSBzdHJsZW4oc2UpICsgMTsKKwkgICAgaWYgKChiID0gcmVhbGxvYyhiLCAobmIgKyBuc2UpKSkgPT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCQlnb3RvIGV4aXQ7CisJICAgICh2b2lkKSBzdHBjcHkoIHN0cGNweSgmYltuYi0xXSwgIiAiKSwgc2UpOworCSAgICBuYiArPSBuc2U7CisJfQorCXNlID0gYjsKKworCS8qIFVzZSB0aGUgYmFzZW5hbWUgb2YgdGhlIHBhdGggYXMgdGhlIGxvbmcgb3B0aW9uIG5hbWUuICovCisJeyAgIGNvbnN0IGNoYXIgKiBsb25nTmFtZSA9IHN0cnJjaHIoZm4sICcvJyk7CisJICAgIGlmIChsb25nTmFtZSAhPSBOVUxMKQorCQlsb25nTmFtZSsrOworCSAgICBlbHNlCisJCWxvbmdOYW1lID0gZm47CisJICAgIGlmIChsb25nTmFtZSA9PSBOVUxMKQkvKiBYWFggY2FuJ3QgaGFwcGVuLiAqLworCQlnb3RvIGV4aXQ7CisJICAgIC8qIFNpbmdsZSBjaGFyYWN0ZXIgYmFzZW5hbWVzIGFyZSB0cmVhdGVkIGFzIHNob3J0IG9wdGlvbnMuICovCisJICAgIGlmIChsb25nTmFtZVsxXSAhPSAnXDAnKQorCQlpdGVtLT5vcHRpb24ubG9uZ05hbWUgPSBsb25nTmFtZTsKKwkgICAgZWxzZQorCQlpdGVtLT5vcHRpb24uc2hvcnROYW1lID0gbG9uZ05hbWVbMF07CisJfQorICAgIH0KKy8qQD10ZW1wdHJhbnNAKi8KKworICAgIGlmIChwb3B0UGFyc2VBcmd2U3RyaW5nKHNlLCAmaXRlbS0+YXJnYywgJml0ZW0tPmFyZ3YpKSBnb3RvIGV4aXQ7CisKKy8qQC1tb2RvYnNlcnZlckAqLworICAgIGl0ZW0tPm9wdGlvbi5hcmdJbmZvID0gUE9QVF9BUkdGTEFHX0RPQ19ISURERU47CisgICAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBpdGVtLT5hcmdjOyBpKyssIGorKykgeworCWNvbnN0IGNoYXIgKiBmOworCWlmICghc3RybmNtcChpdGVtLT5hcmd2W2ldLCAiLS1QT1BUZGVzYz0iLCBzaXplb2YoIi0tUE9QVGRlc2M9IiktMSkpIHsKKwkgICAgZiA9IGl0ZW0tPmFyZ3ZbaV0gKyBzaXplb2YoIi0tUE9QVGRlc2M9Iik7CisJICAgIGlmIChmWzBdID09ICckJyAmJiBmWzFdID09ICciJykgZisrOworCSAgICBpdGVtLT5vcHRpb24uZGVzY3JpcCA9IGY7CisJICAgIGl0ZW0tPm9wdGlvbi5hcmdJbmZvICY9IH5QT1BUX0FSR0ZMQUdfRE9DX0hJRERFTjsKKwkgICAgai0tOworCX0gZWxzZQorCWlmICghc3RybmNtcChpdGVtLT5hcmd2W2ldLCAiLS1QT1BUYXJncz0iLCBzaXplb2YoIi0tUE9QVGFyZ3M9IiktMSkpIHsKKwkgICAgZiA9IGl0ZW0tPmFyZ3ZbaV0gKyBzaXplb2YoIi0tUE9QVGFyZ3M9Iik7CisJICAgIGlmIChmWzBdID09ICckJyAmJiBmWzFdID09ICciJykgZisrOworCSAgICBpdGVtLT5vcHRpb24uYXJnRGVzY3JpcCA9IGY7CisJICAgIGl0ZW0tPm9wdGlvbi5hcmdJbmZvICY9IH5QT1BUX0FSR0ZMQUdfRE9DX0hJRERFTjsKKwkgICAgaXRlbS0+b3B0aW9uLmFyZ0luZm8gfD0gUE9QVF9BUkdfU1RSSU5HOworCSAgICBqLS07CisJfSBlbHNlCisJaWYgKGogIT0gaSkKKwkgICAgaXRlbS0+YXJndltqXSA9IGl0ZW0tPmFyZ3ZbaV07CisgICAgfQorICAgIGlmIChqICE9IGkpIHsKKwlpdGVtLT5hcmd2W2pdID0gTlVMTDsKKwlpdGVtLT5hcmdjID0gajsKKyAgICB9CisvKkA9bW9kb2JzZXJ2ZXJAKi8KKwkKKy8qQC1udWxsc3RhdGVAKi8gLyogRklYOiBpdGVtLT5hcmd2W10gbWF5IGJlIE5VTEwgKi8KKyAgICBpZiAoIXN0cmNtcChlbnRyeVR5cGUsICJhbGlhcyIpKQorCXJjID0gcG9wdEFkZEl0ZW0oY29uLCBpdGVtLCAwKTsKKyAgICBlbHNlIGlmICghc3RyY21wKGVudHJ5VHlwZSwgImV4ZWMiKSkKKwlyYyA9IHBvcHRBZGRJdGVtKGNvbiwgaXRlbSwgMSk7CisvKkA9bnVsbHN0YXRlQCovCitleGl0OgorICAgIHJjID0gMDsJLyogWFhYIGZvciBub3csIGFsd2F5cyByZXR1cm4gc3VjY2VzcyAqLworICAgIGlmIChiKQorCWZyZWUoYik7CisgICAgcmV0dXJuIHJjOworfQorLypAPWNvbXBtZW1wYXNzQCovCisKK2ludCBwb3B0UmVhZENvbmZpZ0ZpbGUocG9wdENvbnRleHQgY29uLCBjb25zdCBjaGFyICogZm4pCit7CisgICAgY2hhciAqIGIgPSBOVUxMLCAqYmU7CisgICAgc2l6ZV90IG5iID0gMDsKKyAgICBjb25zdCBjaGFyICpzZTsKKyAgICBjaGFyICp0LCAqdGU7CisgICAgaW50IHJjOworICAgIGludCB4eDsKKworICAgIGlmICgocmMgPSBwb3B0UmVhZEZpbGUoZm4sICZiLCAmbmIsIFBPUFRfUkVBREZJTEVfVFJJTU5FV0xJTkVTKSkgIT0gMCkKKwlyZXR1cm4gKGVycm5vID09IEVOT0VOVCA/IDAgOiByYyk7CisgICAgaWYgKGIgPT0gTlVMTCB8fCBuYiA9PSAwKQorCXJldHVybiBQT1BUX0VSUk9SX0JBRENPTkZJRzsKKworICAgIGlmICgodCA9IG1hbGxvYyhuYiArIDEpKSA9PSBOVUxMKQorCWdvdG8gZXhpdDsKKyAgICB0ZSA9IHQ7CisKKyAgICBiZSA9IChiICsgbmIpOworICAgIGZvciAoc2UgPSBiOyBzZSA8IGJlOyBzZSsrKSB7CisJc3dpdGNoICgqc2UpIHsKKwkgIGNhc2UgJ1xuJzoKKwkgICAgKnRlID0gJ1wwJzsKKwkgICAgdGUgPSB0OworCSAgICB3aGlsZSAoKnRlICYmIF9pc3NwYWNlcHRyKHRlKSkgdGUrKzsKKwkgICAgaWYgKCp0ZSAmJiAqdGUgIT0gJyMnKQorCQl4eCA9IHBvcHRDb25maWdMaW5lKGNvbiwgdGUpOworCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKy8qQC11c2VkZWZAKi8JLyogWFhYICpzZSBtYXkgYmUgdW5pbml0aWFsaXplZCAqLworCSAgY2FzZSAnXFwnOgorCSAgICAqdGUgPSAqc2UrKzsKKwkgICAgLyogXCBhdCB0aGUgZW5kIG9mIGEgbGluZSBkb2VzIG5vdCBpbnNlcnQgYSBcbiAqLworCSAgICBpZiAoc2UgPCBiZSAmJiAqc2UgIT0gJ1xuJykgeworCQl0ZSsrOworCQkqdGUrKyA9ICpzZTsKKwkgICAgfQorCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgICp0ZSsrID0gKnNlOworCSAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKy8qQD11c2VkZWZAKi8KKwl9CisgICAgfQorCisgICAgZnJlZSh0KTsKKyAgICByYyA9IDA7CisKK2V4aXQ6CisgICAgaWYgKGIpCisJZnJlZShiKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBwb3B0UmVhZENvbmZpZ0ZpbGVzKHBvcHRDb250ZXh0IGNvbiwgY29uc3QgY2hhciAqIHBhdGhzKQoreworICAgIGNoYXIgKiBidWYgPSAocGF0aHMgPyB4c3RyZHVwKHBhdGhzKSA6IE5VTEwpOworICAgIGNvbnN0IGNoYXIgKiBwOworICAgIGNoYXIgKiBwZTsKKyAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIHN1Y2Nlc3MgKi8KKworICAgIGZvciAocCA9IGJ1ZjsgcCAhPSBOVUxMICYmICpwICE9ICdcMCc7IHAgPSBwZSkgeworCWNvbnN0IGNoYXIgKiogYXYgPSBOVUxMOworCWludCBhYyA9IDA7CisJaW50IGk7CisJaW50IHh4OworCisJLyogbG9jYXRlIHN0YXJ0IG9mIG5leHQgcGF0aCBlbGVtZW50ICovCisJcGUgPSBzdHJjaHIocCwgJzonKTsKKwlpZiAocGUgIT0gTlVMTCAmJiAqcGUgPT0gJzonKQorCSAgICAqcGUrKyA9ICdcMCc7CisJZWxzZQorCSAgICBwZSA9IChjaGFyICopIChwICsgc3RybGVuKHApKTsKKworCXh4ID0gcG9wdEdsb2IoY29uLCBwLCAmYWMsICZhdik7CisKKwkvKiB3b3JrLW9mZiBlYWNoIHJlc3VsdGluZyBmaWxlIGZyb20gdGhlIHBhdGggZWxlbWVudCAqLworCWZvciAoaSA9IDA7IGkgPCBhYzsgaSsrKSB7CisJICAgIGNvbnN0IGNoYXIgKiBmbiA9IGF2W2ldOworCSAgICBpZiAoYXZbaV0gPT0gTlVMTCkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworCSAgICAvKiBYWFggc2hvdWxkICdAJyBhdHRlbnRpb24gYmUgcHVzaGVkIGludG8gcG9wdFJlYWRDb25maWdGaWxlPyAqLworCSAgICBpZiAocFswXSA9PSAnQCcgJiYgcFsxXSAhPSAnKCcpIHsKKwkJaWYgKGZuWzBdID09ICdAJyAmJiBmblsxXSAhPSAnKCcpCisJCSAgICBmbisrOworCQl4eCA9IHBvcHRTYW5lRmlsZShmbik7CisJCWlmICgheHggJiYgcmMgPT0gMCkKKwkJICAgIHJjID0gUE9QVF9FUlJPUl9CQURDT05GSUc7CisJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CisJICAgIH0KKwkgICAgeHggPSBwb3B0UmVhZENvbmZpZ0ZpbGUoY29uLCBmbik7CisJICAgIGlmICh4eCAmJiByYyA9PSAwKQorCQlyYyA9IHh4OworCSAgICBmcmVlKCh2b2lkICopYXZbaV0pOworCSAgICBhdltpXSA9IE5VTEw7CisJfQorCWZyZWUoYXYpOworCWF2ID0gTlVMTDsKKyAgICB9CisKKy8qQC11c2VkZWZAKi8KKyAgICBpZiAoYnVmKQorCWZyZWUoYnVmKTsKKy8qQD11c2VkZWZAKi8KKworICAgIHJldHVybiByYzsKK30KKworaW50IHBvcHRSZWFkRGVmYXVsdENvbmZpZyhwb3B0Q29udGV4dCBjb24sIC8qQHVudXNlZEAqLyBVTlVTRUQoaW50IHVzZUVudikpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgX3BvcHRfc3lzY29uZmRpcltdID0gUE9QVF9TWVNDT05GRElSICIvcG9wdCI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgX3BvcHRfZXRjW10gPSAiL2V0Yy9wb3B0IjsKKyAgICBjaGFyICogaG9tZTsKKyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIHN1Y2Nlc3MgKi8KKworICAgIGlmIChjb24tPmFwcE5hbWUgPT0gTlVMTCkgZ290byBleGl0OworCisgICAgaWYgKHN0cmNtcChfcG9wdF9zeXNjb25mZGlyLCBfcG9wdF9ldGMpKSB7CisJcmMgPSBwb3B0UmVhZENvbmZpZ0ZpbGUoY29uLCBfcG9wdF9zeXNjb25mZGlyKTsKKwlpZiAocmMpIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICByYyA9IHBvcHRSZWFkQ29uZmlnRmlsZShjb24sIF9wb3B0X2V0Yyk7CisgICAgaWYgKHJjKSBnb3RvIGV4aXQ7CisKKyNpZiBkZWZpbmVkKEhBVkVfR0xPQl9IKQorICAgIGlmICghc3RhdCgiL2V0Yy9wb3B0LmQiLCAmc2IpICYmIFNfSVNESVIoc2Iuc3RfbW9kZSkpIHsKKwljb25zdCBjaGFyICoqIGF2ID0gTlVMTDsKKwlpbnQgYWMgPSAwOworCWludCBpOworCisJaWYgKChyYyA9IHBvcHRHbG9iKGNvbiwgIi9ldGMvcG9wdC5kLyoiLCAmYWMsICZhdikpID09IDApIHsKKwkgICAgZm9yIChpID0gMDsgcmMgPT0gMCAmJiBpIDwgYWM7IGkrKykgeworCQljb25zdCBjaGFyICogZm4gPSBhdltpXTsKKwkJaWYgKGZuID09IE5VTEwgfHwgc3Ryc3RyKGZuLCAiLnJwbW5ldyIpIHx8IHN0cnN0cihmbiwgIi5ycG1zYXZlIikpCisJCSAgICBjb250aW51ZTsKKwkJaWYgKCFzdGF0KGZuLCAmc2IpKSB7CisJCSAgICBpZiAoIVNfSVNSRUcoc2Iuc3RfbW9kZSkgJiYgIVNfSVNMTksoc2Iuc3RfbW9kZSkpCisJCQljb250aW51ZTsKKwkJfQorCQlyYyA9IHBvcHRSZWFkQ29uZmlnRmlsZShjb24sIGZuKTsKKwkJZnJlZSgodm9pZCAqKWF2W2ldKTsKKwkJYXZbaV0gPSBOVUxMOworCSAgICB9CisJICAgIGZyZWUoYXYpOworCSAgICBhdiA9IE5VTEw7CisJfQorICAgIH0KKyAgICBpZiAocmMpIGdvdG8gZXhpdDsKKyNlbmRpZgorCisgICAgaWYgKChob21lID0gZ2V0ZW52KCJIT01FIikpKSB7CisJY2hhciAqIGZuID0gbWFsbG9jKHN0cmxlbihob21lKSArIDIwKTsKKwlpZiAoZm4gIT0gTlVMTCkgeworCSAgICAodm9pZCkgc3RwY3B5KHN0cGNweShmbiwgaG9tZSksICIvLnBvcHQiKTsKKwkgICAgcmMgPSBwb3B0UmVhZENvbmZpZ0ZpbGUoY29uLCBmbik7CisJICAgIGZyZWUoZm4pOworCX0gZWxzZQorCSAgICByYyA9IFBPUFRfRVJST1JfRVJSTk87CisJaWYgKHJjKSBnb3RvIGV4aXQ7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByYzsKK30KKworcG9wdENvbnRleHQKK3BvcHRGaW5pKHBvcHRDb250ZXh0IGNvbikKK3sKKyAgICByZXR1cm4gcG9wdEZyZWVDb250ZXh0KGNvbik7Cit9CisKK3BvcHRDb250ZXh0Citwb3B0SW5pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2LAorCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdGlvbnMsIGNvbnN0IGNoYXIgKiBjb25maWdQYXRocykKK3sKKyAgICBwb3B0Q29udGV4dCBjb24gPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBhcmd2MDsKKworICAgIGlmIChhcmd2ID09IE5VTEwgfHwgYXJndlswXSA9PSBOVUxMIHx8IG9wdGlvbnMgPT0gTlVMTCkKKwlyZXR1cm4gY29uOworCisgICAgaWYgKChhcmd2MCA9IHN0cnJjaHIoYXJndlswXSwgJy8nKSkgIT0gTlVMTCkgYXJndjArKzsKKyAgICBlbHNlIGFyZ3YwID0gYXJndlswXTsKKyAgIAorICAgIGNvbiA9IHBvcHRHZXRDb250ZXh0KGFyZ3YwLCBhcmdjLCAoY29uc3QgY2hhciAqKilhcmd2LCBvcHRpb25zLCAwKTsKKyAgICBpZiAoY29uICE9IE5VTEwmJiBwb3B0UmVhZENvbmZpZ0ZpbGVzKGNvbiwgY29uZmlnUGF0aHMpKQorCWNvbiA9IHBvcHRGaW5pKGNvbik7CisKKyAgICByZXR1cm4gY29uOworfQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvcHRoZWxwLmMgYi9wb3B0LTEuMTYvcG9wdGhlbHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODU5OTgwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3BvcHRoZWxwLmMKQEAgLTAsMCArMSw5MjUgQEAKKy8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLSAqLworCisvKiogXGluZ3JvdXAgcG9wdAorICogXGZpbGUgcG9wdC9wb3B0aGVscC5jCisgKi8KKworLyogKEMpIDE5OTgtMjAwMiBSZWQgSGF0LCBJbmMuIC0tIExpY2Vuc2luZyBkZXRhaWxzIGFyZSBpbiB0aGUgQ09QWUlORworICAgZmlsZSBhY2NvbXBhbnlpbmcgcG9wdCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYXZhaWxhYmxlIGZyb20gCisgICBmdHA6Ly9mdHAucnBtLm9yZy9wdWIvcnBtL2Rpc3QuICovCisKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworI2RlZmluZSAgICAgICAgUE9QVF9VU0VfVElPQ0dXSU5TWgorI2lmZGVmIFBPUFRfVVNFX1RJT0NHV0lOU1oKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjZGVmaW5lCVBPUFRfV0NIQVJfSEFDSworI2lmZGVmIAlQT1BUX1dDSEFSX0hBQ0sKKyNpbmNsdWRlIDx3Y2hhci5oPgkJCS8qIGZvciBtYnNydG93Y3MgKi8KKy8qQGFjY2VzcyBtYnN0YXRlX3QgQCovCisjZW5kaWYKKyNpbmNsdWRlICJwb3B0aW50LmgiCisKKy8qQGFjY2VzcyBwb3B0Q29udGV4dEAqLworCisvKioKKyAqIERpc3BsYXkgYXJndW1lbnRzLgorICogQHBhcmFtIGNvbgkJY29udGV4dAorICogQHBhcmFtIGZvbwkJKHVudXNlZCkKKyAqIEBwYXJhbSBrZXkJCW9wdGlvbihzKQorICogQHBhcmFtIGFyZwkJKHVudXNlZCkKKyAqIEBwYXJhbSBkYXRhCQkodW51c2VkKQorICovCisvKkBleGl0c0AqLworc3RhdGljIHZvaWQgZGlzcGxheUFyZ3MocG9wdENvbnRleHQgY29uLAorCQkvKkB1bnVzZWRAKi8gVU5VU0VEKGVudW0gcG9wdENhbGxiYWNrUmVhc29uIGZvbyksCisJCXN0cnVjdCBwb3B0T3B0aW9uICoga2V5LCAKKwkJLypAdW51c2VkQCovIFVOVVNFRChjb25zdCBjaGFyICogYXJnKSwKKwkJLypAdW51c2VkQCovIFVOVVNFRCh2b2lkICogZGF0YSkpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtQCovCisJLypAbW9kaWZpZXMgZmlsZVN5c3RlbUAqLworeworICAgIGlmIChrZXktPnNob3J0TmFtZSA9PSAnPycpCisJcG9wdFByaW50SGVscChjb24sIHN0ZG91dCwgMCk7CisgICAgZWxzZQorCXBvcHRQcmludFVzYWdlKGNvbiwgc3Rkb3V0LCAwKTsKKworI2lmICFkZWZpbmVkKF9fTENMSU5UX18pCS8qIFhYWCBrZWVwIGJvdGggc3BsaW50ICYgdmFsZ3JpbmQgaGFwcHkgKi8KKyAgICBjb24gPSBwb3B0RnJlZUNvbnRleHQoY29uKTsKKyNlbmRpZgorICAgIGV4aXQoMCk7Cit9CisKKyNpZmRlZglOT1RZRVQKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGludCBzaG93X29wdGlvbl9kZWZhdWx0cyA9IDA7CisjZW5kaWYKKworLyoqCisgKiBFbXB0eSB0YWJsZSBtYXJrZXIgdG8gZW5hYmxlIGRpc3BsYXlpbmcgcG9wdCBhbGlhcy9leGVjIG9wdGlvbnMuCisgKi8KKy8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworc3RydWN0IHBvcHRPcHRpb24gcG9wdEFsaWFzT3B0aW9uc1tdID0geworICAgIFBPUFRfVEFCTEVFTkQKK307CisKKy8qKgorICogQXV0byBoZWxwIHRhYmxlIG9wdGlvbnMuCisgKi8KKy8qQC1jYXN0ZmNucHRyQCovCisvKkBvYnNlcnZlckAqLyAvKkB1bmNoZWNrZWRAKi8KK3N0cnVjdCBwb3B0T3B0aW9uIHBvcHRIZWxwT3B0aW9uc1tdID0geworICB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0NBTExCQUNLLCAodm9pZCAqKWRpc3BsYXlBcmdzLCAwLCBOVUxMLCBOVUxMIH0sCisgIHsgImhlbHAiLCAnPycsIDAsIE5VTEwsIChpbnQpJz8nLCBOXygiU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSIpLCBOVUxMIH0sCisgIHsgInVzYWdlIiwgJ1wwJywgMCwgTlVMTCwgKGludCkndScsIE5fKCJEaXNwbGF5IGJyaWVmIHVzYWdlIG1lc3NhZ2UiKSwgTlVMTCB9LAorICAgIFBPUFRfVEFCTEVFTkQKK30gOworCisvKkBvYnNlcnZlckAqLyAvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBwb3B0SGVscE9wdGlvbnMyW10gPSB7CisvKkAtcmVhZG9ubHl0cmFuc0AqLworICB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOVExfRE9NQUlOLCBQQUNLQUdFLCAwLCBOVUxMLCBOVUxMfSwKKy8qQD1yZWFkb25seXRyYW5zQCovCisgIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfQ0FMTEJBQ0ssICh2b2lkICopZGlzcGxheUFyZ3MsIDAsIE5VTEwsIE5VTEwgfSwKKyAgeyAiaGVscCIsICc/JywgMCwgTlVMTCwgKGludCknPycsIE5fKCJTaG93IHRoaXMgaGVscCBtZXNzYWdlIiksIE5VTEwgfSwKKyAgeyAidXNhZ2UiLCAnXDAnLCAwLCBOVUxMLCAoaW50KSd1JywgTl8oIkRpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIpLCBOVUxMIH0sCisjaWZkZWYJTk9UWUVUCisgIHsgImRlZmF1bHRzIiwgJ1wwJywgUE9QVF9BUkdfTk9ORSwgJnNob3dfb3B0aW9uX2RlZmF1bHRzLCAwLAorCU5fKCJEaXNwbGF5IG9wdGlvbiBkZWZhdWx0cyBpbiBtZXNzYWdlIiksIE5VTEwgfSwKKyNlbmRpZgorICB7ICIiLCAnXDAnLAkwLCBOVUxMLCAwLCBOXygiVGVybWluYXRlIG9wdGlvbnMiKSwgTlVMTCB9LAorICAgIFBPUFRfVEFCTEVFTkQKK30gOworCisvKkBvYnNlcnZlckAqLyAvKkB1bmNoZWNrZWRAKi8KK3N0cnVjdCBwb3B0T3B0aW9uICogcG9wdEhlbHBPcHRpb25zSTE4TiA9IHBvcHRIZWxwT3B0aW9uczI7CisvKkA9Y2FzdGZjbnB0ckAqLworCisjZGVmaW5lICAgICAgICBfUE9QVEhFTFBfTUFYTElORSAgICAgICAoKHNpemVfdCk3OSkKKwordHlwZWRlZiBzdHJ1Y3QgY29sdW1uc19zIHsKKyAgICBzaXplX3QgY3VyOworICAgIHNpemVfdCBtYXg7Cit9ICogY29sdW1uc190OworCisvKiogCisgKiBSZXR1cm4gbm8uIG9mIGNvbHVtbnMgaW4gb3V0cHV0IHdpbmRvdy4KKyAqIEBwYXJhbSBmcCAgICAgICAgICAgRklMRQorICogQHJldHVybiAgICAgICAgICAgICBuby4gb2YgY29sdW1ucyAKKyAqLyAKK3N0YXRpYyBzaXplX3QgbWF4Q29sdW1uV2lkdGgoRklMRSAqZnApCisJLypAKi8KK3sgICAKKyAgICBzaXplX3QgbWF4Y29scyA9IF9QT1BUSEVMUF9NQVhMSU5FOworI2lmIGRlZmluZWQoVElPQ0dXSU5TWikKKyAgICBzdHJ1Y3Qgd2luc2l6ZSB3czsKKyAgICBpbnQgZmRubyA9IGZpbGVubyhmcCA/IGZwIDogc3Rkb3V0KTsKKworICAgIG1lbXNldCgmd3MsIDAsIHNpemVvZih3cykpOworICAgIGlmIChmZG5vID49IDAgJiYgIWlvY3RsKGZkbm8sICh1bnNpZ25lZCBsb25nKVRJT0NHV0lOU1osICZ3cykpIHsKKwlzaXplX3Qgd3NfY29sID0gKHNpemVfdCl3cy53c19jb2w7CisJaWYgKHdzX2NvbCA+IG1heGNvbHMgJiYgd3NfY29sIDwgKHNpemVfdCkyNTYpCisJICAgIG1heGNvbHMgPSB3c19jb2wgLSAxOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtYXhjb2xzOworfSAgIAorCisvKioKKyAqIERldGVybWluZSBudW1iZXIgb2YgZGlzcGxheSBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nLgorICogQHBhcmFtIHMJCXN0cmluZworICogQHJldHVybgkJbm8uIG9mIGRpc3BsYXkgY2hhcmFjdGVycy4KKyAqLworc3RhdGljIGlubGluZSBzaXplX3Qgc3RyaW5nRGlzcGxheVdpZHRoKGNvbnN0IGNoYXIgKnMpCisJLypAKi8KK3sKKyAgICBzaXplX3QgbiA9IHN0cmxlbihzKTsKKyNpZmRlZglQT1BUX1dDSEFSX0hBQ0sKKyAgICBtYnN0YXRlX3QgdDsKKworICAgIG1lbXNldCAoKHZvaWQgKikmdCwgMCwgc2l6ZW9mICh0KSk7CS8qIEluIGluaXRpYWwgc3RhdGUuICAqLworICAgIC8qIERldGVybWluZSBudW1iZXIgb2YgZGlzcGxheSBjaGFyYWN0ZXJzLiAgKi8KKyAgICBuID0gbWJzcnRvd2NzIChOVUxMLCAmcywgbiwgJnQpOworI2Vsc2UKKyAgICBuID0gMDsKKyAgICBmb3IgKDsgKnM7IHMgPSBQT1BUX25leHRfY2hhcihzKSkKKwluKys7CisjZW5kaWYKKworICAgIHJldHVybiBuOworfQorCisvKioKKyAqIEBwYXJhbSBvcHQJCW9wdGlvbihzKQorICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovIHN0YXRpYyBjb25zdCBjaGFyICoKK2dldFRhYmxlVHJhbnNsYXRpb25Eb21haW4oLypAbnVsbEAqLyBjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqb3B0KQorCS8qQCovCit7CisgICAgaWYgKG9wdCAhPSBOVUxMKQorICAgIGZvciAoOyBvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnOyBvcHQrKykgeworCWlmIChvcHQtPmFyZ0luZm8gPT0gUE9QVF9BUkdfSU5UTF9ET01BSU4pCisJICAgIHJldHVybiBvcHQtPmFyZzsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogQHBhcmFtIG9wdAkJb3B0aW9uKHMpCisgKiBAcGFyYW0gdHJhbnNsYXRpb25fZG9tYWluCXRyYW5zbGF0aW9uIGRvbWFpbgorICovCisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovIHN0YXRpYyBjb25zdCBjaGFyICoKK2dldEFyZ0Rlc2NyaXAoY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQsCisJCS8qQC1wYXJhbXVzZUAqLyAvKiBGSVg6IGkxOG4gbWFjcm9zIGRpc2FibGVkIHdpdGggbGNsaW50ICovCisJCS8qQG51bGxAKi8gY29uc3QgY2hhciAqIHRyYW5zbGF0aW9uX2RvbWFpbikKKwkJLypAPXBhcmFtdXNlQCovCisJLypAKi8KK3sKKyAgICBpZiAoIXBvcHRBcmdUeXBlKG9wdCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKHBvcHRBcmdUeXBlKG9wdCkgPT0gUE9QVF9BUkdfTUFJTkNBTEwpCisJcmV0dXJuIG9wdC0+YXJnRGVzY3JpcDsKKyAgICBpZiAocG9wdEFyZ1R5cGUob3B0KSA9PSBQT1BUX0FSR19BUkdWKQorCXJldHVybiBvcHQtPmFyZ0Rlc2NyaXA7CisKKyAgICBpZiAob3B0LT5hcmdEZXNjcmlwKSB7CisJLyogU29tZSBzdHJpbmdzIG5lZWQgcG9wdCBsaWJyYXJ5LCBub3QgYXBwbGljYXRpb24sIGkxOG4gZG9tYWluLiAqLworCWlmIChvcHQgPT0gKHBvcHRIZWxwT3B0aW9ucyArIDEpCisJIHx8IG9wdCA9PSAocG9wdEhlbHBPcHRpb25zICsgMikKKwkgfHwgIXN0cmNtcChvcHQtPmFyZ0Rlc2NyaXAsIE5fKCJIZWxwIG9wdGlvbnM6IikpCisJIHx8ICFzdHJjbXAob3B0LT5hcmdEZXNjcmlwLCBOXygiT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOiIpKSkKKwkgICAgcmV0dXJuIFBPUFRfKG9wdC0+YXJnRGVzY3JpcCk7CisKKwkvKiBVc2UgdGhlIGFwcGxpY2F0aW9uIGkxOG4gZG9tYWluLiAqLworCXJldHVybiBEXyh0cmFuc2xhdGlvbl9kb21haW4sIG9wdC0+YXJnRGVzY3JpcCk7CisgICAgfQorCisgICAgc3dpdGNoIChwb3B0QXJnVHlwZShvcHQpKSB7CisgICAgY2FzZSBQT1BUX0FSR19OT05FOgkJcmV0dXJuIFBPUFRfKCJOT05FIik7CisjaWZkZWYJRFlJTkcKKyAgICBjYXNlIFBPUFRfQVJHX1ZBTDoJCXJldHVybiBQT1BUXygiVkFMIik7CisjZWxzZQorICAgIGNhc2UgUE9QVF9BUkdfVkFMOgkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyAgICBjYXNlIFBPUFRfQVJHX0lOVDoJCXJldHVybiBQT1BUXygiSU5UIik7CisgICAgY2FzZSBQT1BUX0FSR19TSE9SVDoJcmV0dXJuIFBPUFRfKCJTSE9SVCIpOworICAgIGNhc2UgUE9QVF9BUkdfTE9ORzoJCXJldHVybiBQT1BUXygiTE9ORyIpOworICAgIGNhc2UgUE9QVF9BUkdfTE9OR0xPTkc6CXJldHVybiBQT1BUXygiTE9OR0xPTkciKTsKKyAgICBjYXNlIFBPUFRfQVJHX1NUUklORzoJcmV0dXJuIFBPUFRfKCJTVFJJTkciKTsKKyAgICBjYXNlIFBPUFRfQVJHX0ZMT0FUOglyZXR1cm4gUE9QVF8oIkZMT0FUIik7CisgICAgY2FzZSBQT1BUX0FSR19ET1VCTEU6CXJldHVybiBQT1BUXygiRE9VQkxFIik7CisgICAgY2FzZSBQT1BUX0FSR19NQUlOQ0FMTDoJcmV0dXJuIE5VTEw7CisgICAgY2FzZSBQT1BUX0FSR19BUkdWOgkJcmV0dXJuIE5VTEw7CisgICAgZGVmYXVsdDoJCQlyZXR1cm4gUE9QVF8oIkFSRyIpOworICAgIH0KK30KKworLyoqCisgKiBEaXNwbGF5IGRlZmF1bHQgdmFsdWUgZm9yIGFuIG9wdGlvbi4KKyAqIEBwYXJhbSBsaW5lTGVuZ3RoCWRpc3BsYXkgcG9zaXRpb25zIHJlbWFpbmluZworICogQHBhcmFtIG9wdAkJb3B0aW9uKHMpCisgKiBAcGFyYW0gdHJhbnNsYXRpb25fZG9tYWluCXRyYW5zbGF0aW9uIGRvbWFpbgorICogQHJldHVybgorICovCitzdGF0aWMgLypAb25seUAqLyAvKkBudWxsQCovIGNoYXIgKgorc2luZ2xlT3B0aW9uRGVmYXVsdFZhbHVlKHNpemVfdCBsaW5lTGVuZ3RoLAorCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypALXBhcmFtdXNlQCovIC8qIEZJWDogaTE4biBtYWNyb3MgZGlzYWJsZWQgd2l0aCBsY2xpbnQgKi8KKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICogdHJhbnNsYXRpb25fZG9tYWluKQorCQkvKkA9cGFyYW11c2VAKi8KKwkvKkAqLworeworICAgIGNvbnN0IGNoYXIgKiBkZWZzdHIgPSBEXyh0cmFuc2xhdGlvbl9kb21haW4sICJkZWZhdWx0Iik7CisgICAgY2hhciAqIGxlID0gbWFsbG9jKDQqbGluZUxlbmd0aCArIDEpOworICAgIGNoYXIgKiBsID0gbGU7CisKKyAgICBpZiAobGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKyAgICAqbGUgPSAnXDAnOworICAgICpsZSsrID0gJygnOworICAgIGxlID0gc3RwY3B5KGxlLCBkZWZzdHIpOworICAgICpsZSsrID0gJzonOworICAgICpsZSsrID0gJyAnOworICBpZiAob3B0LT5hcmcpIHsJLyogWFhYIHByb2dyYW1tZXIgZXJyb3IgKi8KKyAgICBwb3B0QXJnIGFyZyA9IHsgLnB0ciA9IG9wdC0+YXJnIH07CisgICAgc3dpdGNoIChwb3B0QXJnVHlwZShvcHQpKSB7CisgICAgY2FzZSBQT1BUX0FSR19WQUw6CisgICAgY2FzZSBQT1BUX0FSR19JTlQ6CisJbGUgKz0gc3ByaW50ZihsZSwgIiVkIiwgYXJnLmludHBbMF0pOworCWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdfU0hPUlQ6CisJbGUgKz0gc3ByaW50ZihsZSwgIiVoZCIsIGFyZy5zaG9ydHBbMF0pOworCWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdfTE9ORzoKKwlsZSArPSBzcHJpbnRmKGxlLCAiJWxkIiwgYXJnLmxvbmdwWzBdKTsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHX0xPTkdMT05HOgorCWxlICs9IHNwcmludGYobGUsICIlbGxkIiwgYXJnLmxvbmdsb25ncFswXSk7CisJYnJlYWs7CisgICAgY2FzZSBQT1BUX0FSR19GTE9BVDoKKyAgICB7CWRvdWJsZSBhRG91YmxlID0gKGRvdWJsZSkgYXJnLmZsb2F0cFswXTsKKwlsZSArPSBzcHJpbnRmKGxlLCAiJWciLCBhRG91YmxlKTsKKyAgICB9CWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdfRE9VQkxFOgorCWxlICs9IHNwcmludGYobGUsICIlZyIsIGFyZy5kb3VibGVwWzBdKTsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHX01BSU5DQUxMOgorCWxlICs9IHNwcmludGYobGUsICIlcCIsIG9wdC0+YXJnKTsKKwlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHX0FSR1Y6CisJbGUgKz0gc3ByaW50ZihsZSwgIiVwIiwgb3B0LT5hcmcpOworCWJyZWFrOworICAgIGNhc2UgUE9QVF9BUkdfU1RSSU5HOgorICAgIHsJY29uc3QgY2hhciAqIHMgPSBhcmcuYXJndlswXTsKKwlpZiAocyA9PSBOVUxMKQorCSAgICBsZSA9IHN0cGNweShsZSwgIm51bGwiKTsKKwllbHNlIHsKKwkgICAgc2l6ZV90IGxpbWl0ID0gNCpsaW5lTGVuZ3RoIC0gKGxlIC0gbCkgLSBzaXplb2YoIlwiXCIpIik7CisJICAgIHNpemVfdCBzbGVuOworCSAgICAqbGUrKyA9ICciJzsKKwkgICAgc3RybmNweShsZSwgcywgbGltaXQpOyBsZVtsaW1pdF0gPSAnXDAnOyBsZSArPSAoc2xlbiA9IHN0cmxlbihsZSkpOworCSAgICBpZiAoc2xlbiA9PSBsaW1pdCAmJiBzW2xpbWl0XSkKKwkJbGVbLTFdID0gbGVbLTJdID0gbGVbLTNdID0gJy4nOworCSAgICAqbGUrKyA9ICciJzsKKwl9CisgICAgfQlicmVhazsKKyAgICBjYXNlIFBPUFRfQVJHX05PTkU6CisgICAgZGVmYXVsdDoKKwlsID0gX2ZyZWUobCk7CisJcmV0dXJuIE5VTEw7CisJLypAbm90cmVhY2hlZEAqLyBicmVhazsKKyAgICB9CisgIH0KKyAgICAqbGUrKyA9ICcpJzsKKyAgICAqbGUgPSAnXDAnOworCisgICAgcmV0dXJuIGw7Cit9CisKKy8qKgorICogRGlzcGxheSBoZWxwIHRleHQgZm9yIGFuIG9wdGlvbi4KKyAqIEBwYXJhbSBmcAkJb3V0cHV0IGZpbGUgaGFuZGxlCisgKiBAcGFyYW0gY29sdW1ucwlvdXRwdXQgZGlzcGxheSB3aWR0aCBjb250cm9sCisgKiBAcGFyYW0gb3B0CQlvcHRpb24ocykKKyAqIEBwYXJhbSB0cmFuc2xhdGlvbl9kb21haW4JdHJhbnNsYXRpb24gZG9tYWluCisgKi8KK3N0YXRpYyB2b2lkIHNpbmdsZU9wdGlvbkhlbHAoRklMRSAqIGZwLCBjb2x1bW5zX3QgY29sdW1ucywKKwkJY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQsCisJCS8qQG51bGxAKi8gY29uc3QgY2hhciAqIHRyYW5zbGF0aW9uX2RvbWFpbikKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCisJLypAbW9kaWZpZXMgZnAsIGZpbGVTeXN0ZW0gQCovCit7CisgICAgc2l6ZV90IG1heExlZnRDb2wgPSBjb2x1bW5zLT5jdXI7CisgICAgc2l6ZV90IGluZGVudExlbmd0aCA9IG1heExlZnRDb2wgKyA1OworICAgIHNpemVfdCBsaW5lTGVuZ3RoID0gY29sdW1ucy0+bWF4IC0gaW5kZW50TGVuZ3RoOworICAgIGNvbnN0IGNoYXIgKiBoZWxwID0gRF8odHJhbnNsYXRpb25fZG9tYWluLCBvcHQtPmRlc2NyaXApOworICAgIGNvbnN0IGNoYXIgKiBhcmdEZXNjcmlwID0gZ2V0QXJnRGVzY3JpcChvcHQsIHRyYW5zbGF0aW9uX2RvbWFpbik7CisgICAgLyogRGlzcGxheSBzaG9ydE5hbWUgaWZmIHByaW50YWJsZSBub24tc3BhY2UuICovCisgICAgaW50IHBydHNob3J0ID0gKGludCkoaXNwcmludCgoaW50KW9wdC0+c2hvcnROYW1lKSAmJiBvcHQtPnNob3J0TmFtZSAhPSAnICcpOworICAgIHNpemVfdCBoZWxwTGVuZ3RoOworICAgIGNoYXIgKiBkZWZzID0gTlVMTDsKKyAgICBjaGFyICogbGVmdDsKKyAgICBzaXplX3QgbmIgPSBtYXhMZWZ0Q29sICsgMTsKKyAgICBpbnQgZGlzcGxheXBhZCA9IDA7CisgICAgaW50IHh4OworCisgICAgLyogTWFrZSBzdXJlIHRoZXJlJ3MgbW9yZSB0aGFuIGVub3VnaCByb29tIGluIHRhcmdldCBidWZmZXIuICovCisgICAgaWYgKG9wdC0+bG9uZ05hbWUpCW5iICs9IHN0cmxlbihvcHQtPmxvbmdOYW1lKTsKKyAgICBpZiAoRl9JU1NFVChvcHQsIFRPR0dMRSkpIG5iICs9IHNpemVvZigiW25vXSIpIC0gMTsKKyAgICBpZiAoYXJnRGVzY3JpcCkJbmIgKz0gc3RybGVuKGFyZ0Rlc2NyaXApOworCisgICAgbGVmdCA9IG1hbGxvYyhuYik7CisgICAgaWYgKGxlZnQgPT0gTlVMTCkgcmV0dXJuOwkvKiBYWFggY2FuJ3QgaGFwcGVuICovCisgICAgbGVmdFswXSA9ICdcMCc7CisgICAgbGVmdFttYXhMZWZ0Q29sXSA9ICdcMCc7CisKKyNkZWZpbmUJcHJ0bG9uZwkob3B0LT5sb25nTmFtZSAhPSBOVUxMKQkvKiBYWFggc3BsaW50IG5lZWRzIGEgY2x1ZSAqLworICAgIGlmICghKHBydHNob3J0IHx8IHBydGxvbmcpKQorCWdvdG8gb3V0OworICAgIGlmIChwcnRzaG9ydCAmJiBwcnRsb25nKSB7CisJY2hhciAqZGFzaCA9IEZfSVNTRVQob3B0LCBPTkVEQVNIKSA/ICItIiA6ICItLSI7CisJbGVmdFswXSA9ICctJzsKKwlsZWZ0WzFdID0gb3B0LT5zaG9ydE5hbWU7CisJKHZvaWQpIHN0cGNweShzdHBjcHkoc3RwY3B5KGxlZnQrMiwgIiwgIiksIGRhc2gpLCBvcHQtPmxvbmdOYW1lKTsKKyAgICB9IGVsc2UgaWYgKHBydHNob3J0KSB7CisJbGVmdFswXSA9ICctJzsKKwlsZWZ0WzFdID0gb3B0LT5zaG9ydE5hbWU7CisJbGVmdFsyXSA9ICdcMCc7CisgICAgfSBlbHNlIGlmIChwcnRsb25nKSB7CisJLyogWFhYIC0tbG9uZyBhbHdheXMgcGFkZGVkIGZvciBhbGlnbm1lbnQgd2l0aC93aXRob3V0ICItWCwgIi4gKi8KKwljaGFyICpkYXNoID0gcG9wdEFyZ1R5cGUob3B0KSA9PSBQT1BUX0FSR19NQUlOQ0FMTCA/ICIiCisJCSAgIDogKEZfSVNTRVQob3B0LCBPTkVEQVNIKSA/ICItIiA6ICItLSIpOworCWNvbnN0IGNoYXIgKmxvbmdOYW1lID0gb3B0LT5sb25nTmFtZTsKKwljb25zdCBjaGFyICp0b2dnbGU7CisJaWYgKEZfSVNTRVQob3B0LCBUT0dHTEUpKSB7CisJICAgIHRvZ2dsZSA9ICJbbm9dIjsKKwkgICAgaWYgKGxvbmdOYW1lWzBdID09ICduJyAmJiBsb25nTmFtZVsxXSA9PSAnbycpIHsKKwkJbG9uZ05hbWUgKz0gc2l6ZW9mKCJubyIpIC0gMTsKKwkJaWYgKGxvbmdOYW1lWzBdID09ICctJykKKwkJICAgIGxvbmdOYW1lKys7CisJICAgIH0KKwl9IGVsc2UKKwkgICAgdG9nZ2xlID0gIiI7CisJKHZvaWQpIHN0cGNweShzdHBjcHkoc3RwY3B5KHN0cGNweShsZWZ0LCAiICAgICIpLCBkYXNoKSwgdG9nZ2xlKSwgbG9uZ05hbWUpOworICAgIH0KKyN1bmRlZglwcnRsb25nCisKKyAgICBpZiAoYXJnRGVzY3JpcCkgeworCWNoYXIgKiBsZSA9IGxlZnQgKyBzdHJsZW4obGVmdCk7CisKKwlpZiAoRl9JU1NFVChvcHQsIE9QVElPTkFMKSkKKwkgICAgKmxlKysgPSAnWyc7CisKKwkvKiBDaG9vc2UgdHlwZSBvZiBvdXRwdXQgKi8KKwlpZiAoRl9JU1NFVChvcHQsIFNIT1dfREVGQVVMVCkpIHsKKwkgICAgZGVmcyA9IHNpbmdsZU9wdGlvbkRlZmF1bHRWYWx1ZShsaW5lTGVuZ3RoLCBvcHQsIHRyYW5zbGF0aW9uX2RvbWFpbik7CisJICAgIGlmIChkZWZzKSB7CisJCWNoYXIgKiB0ID0gbWFsbG9jKChoZWxwID8gc3RybGVuKGhlbHApIDogMCkgKworCQkJCXN0cmxlbihkZWZzKSArIHNpemVvZigiICIpKTsKKwkJaWYgKHQpIHsKKwkJICAgIGNoYXIgKiB0ZSA9IHQ7CisJCSAgICBpZiAoaGVscCkKKwkJCXRlID0gc3RwY3B5KHRlLCBoZWxwKTsKKwkJICAgICp0ZSsrID0gJyAnOworCQkgICAgc3RyY3B5KHRlLCBkZWZzKTsKKwkJICAgIGRlZnMgPSBfZnJlZShkZWZzKTsKKwkJICAgIGRlZnMgPSB0OworCQl9CisJICAgIH0KKwl9CisKKwlpZiAob3B0LT5hcmdEZXNjcmlwID09IE5VTEwpIHsKKwkgICAgc3dpdGNoIChwb3B0QXJnVHlwZShvcHQpKSB7CisJICAgIGNhc2UgUE9QVF9BUkdfTk9ORToKKwkJYnJlYWs7CisJICAgIGNhc2UgUE9QVF9BUkdfVkFMOgorI2lmZGVmCU5PVE5PVwkvKiBYWFggcHVnIHVnbHkgbmVyZHkgb3V0cHV0ICovCisJICAgIHsJbG9uZyBhTG9uZyA9IG9wdC0+dmFsOworCQlpbnQgb3BzID0gRl9JU1NFVChvcHQsIExPR0lDQUxPUFMpOworCQlpbnQgbmVnYXRlID0gRl9JU1NFVChvcHQsIE5PVCk7CisKKwkJLyogRG9uJ3QgYm90aGVyIGRpc3BsYXlpbmcgdHlwaWNhbCB2YWx1ZXMgKi8KKwkJaWYgKCFvcHMgJiYgKGFMb25nID09IDBMIHx8IGFMb25nID09IDFMIHx8IGFMb25nID09IC0xTCkpCisJCSAgICBicmVhazsKKwkJKmxlKysgPSAnWyc7CisJCXN3aXRjaCAob3BzKSB7CisJCWNhc2UgUE9QVF9BUkdGTEFHX09SOgorCQkgICAgKmxlKysgPSAnfCc7CisJCSAgICAvKkBpbm5lcmJyZWFrQCovIGJyZWFrOworCQljYXNlIFBPUFRfQVJHRkxBR19BTkQ6CisJCSAgICAqbGUrKyA9ICcmJzsKKwkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisJCWNhc2UgUE9QVF9BUkdGTEFHX1hPUjoKKwkJICAgICpsZSsrID0gJ14nOworCQkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CisJCX0KKwkJKmxlKysgPSAob3B0LT5sb25nTmFtZSAhPSBOVUxMID8gJz0nIDogJyAnKTsKKwkJaWYgKG5lZ2F0ZSkgKmxlKysgPSAnfic7CisJCS8qQC1mb3JtYXRjb25zdEAqLworCQlsZSArPSBzcHJpbnRmKGxlLCAob3BzID8gIjB4JWx4IiA6ICIlbGQiKSwgYUxvbmcpOworCQkvKkA9Zm9ybWF0Y29uc3RAKi8KKwkJKmxlKysgPSAnXSc7CisJICAgIH0KKyNlbmRpZgorCQlicmVhazsKKwkgICAgY2FzZSBQT1BUX0FSR19JTlQ6CisJICAgIGNhc2UgUE9QVF9BUkdfU0hPUlQ6CisJICAgIGNhc2UgUE9QVF9BUkdfTE9ORzoKKwkgICAgY2FzZSBQT1BUX0FSR19MT05HTE9ORzoKKwkgICAgY2FzZSBQT1BUX0FSR19GTE9BVDoKKwkgICAgY2FzZSBQT1BUX0FSR19ET1VCTEU6CisJICAgIGNhc2UgUE9QVF9BUkdfU1RSSU5HOgorCQkqbGUrKyA9IChvcHQtPmxvbmdOYW1lICE9IE5VTEwgPyAnPScgOiAnICcpOworCQlsZSA9IHN0cGNweShsZSwgYXJnRGVzY3JpcCk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGNoYXIgKmxlbzsKKworCSAgICAvKiBYWFggYXJnRGVzY3JpcFswXSBkZXRlcm1pbmVzICItLWZvbz1iYXIiIG9yICItLWZvbyBiYXIiLiAqLworCSAgICBpZiAoIXN0cmNocigiID0oIiwgYXJnRGVzY3JpcFswXSkpCisJCSpsZSsrID0gKChwb3B0QXJnVHlwZShvcHQpID09IFBPUFRfQVJHX01BSU5DQUxMKSA/ICcgJyA6CisJCQkgKHBvcHRBcmdUeXBlKG9wdCkgPT0gUE9QVF9BUkdfQVJHVikgPyAnICcgOiAnPScpOworCSAgICBsZSA9IHN0cGNweShsZW8gPSBsZSwgYXJnRGVzY3JpcCk7CisKKwkgICAgLyogQWRqdXN0IGZvciAocG9zc2libGUpIHdpZGUgY2hhcmFjdGVycy4gKi8KKwkgICAgZGlzcGxheXBhZCA9IChpbnQpKChsZSAtIGxlbykgLSBzdHJpbmdEaXNwbGF5V2lkdGgoYXJnRGVzY3JpcCkpOworCX0KKwlpZiAoRl9JU1NFVChvcHQsIE9QVElPTkFMKSkKKwkgICAgKmxlKysgPSAnXSc7CisJKmxlID0gJ1wwJzsKKyAgICB9CisKKyAgICBpZiAoaGVscCkKKwl4eCA9IFBPUFRfZnByaW50ZihmcCwiICAlLSpzICAgIiwgKGludCkobWF4TGVmdENvbCtkaXNwbGF5cGFkKSwgbGVmdCk7CisgICAgZWxzZSB7CisJeHggPSBQT1BUX2ZwcmludGYoZnAsIiAgJXNcbiIsIGxlZnQpOyAKKwlnb3RvIG91dDsKKyAgICB9CisKKyAgICBsZWZ0ID0gX2ZyZWUobGVmdCk7CisgICAgaWYgKGRlZnMpCisJaGVscCA9IGRlZnM7CisKKyAgICBoZWxwTGVuZ3RoID0gc3RybGVuKGhlbHApOworICAgIHdoaWxlIChoZWxwTGVuZ3RoID4gbGluZUxlbmd0aCkgeworCWNvbnN0IGNoYXIgKiBjaDsKKwljaGFyIGZvcm1hdFsxNl07CisKKwljaCA9IGhlbHAgKyBsaW5lTGVuZ3RoIC0gMTsKKwl3aGlsZSAoY2ggPiBoZWxwICYmICFfaXNzcGFjZXB0cihjaCkpCisJICAgIGNoID0gUE9QVF9wcmV2X2NoYXIoY2gpOworCWlmIChjaCA9PSBoZWxwKSBicmVhazsJCS8qIGdpdmUgdXAgKi8KKwl3aGlsZSAoY2ggPiAoaGVscCArIDEpICYmIF9pc3NwYWNlcHRyKGNoKSkKKwkgICAgY2ggPSBQT1BUX3ByZXZfY2hhciAoY2gpOworCWNoID0gUE9QVF9uZXh0X2NoYXIoY2gpOworCisJLyoKKwkgKiAgWFhYIHN0cmR1cCBpcyBuZWNlc3NhcnkgdG8gYWRkIE5VTCB0ZXJtaW5hdG9yIHNvIHRoYXQgYW4gdW5rbm93bgorCSAqICBuby4gb2YgKHBvc3NpYmxlKSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgY2FuIGJlIGRpc3BsYXllZC4KKwkgKi8KKwl7ICAgY2hhciAqIGZtdGhlbHAgPSB4c3RyZHVwKGhlbHApOworCSAgICBpZiAoZm10aGVscCkgeworCQlmbXRoZWxwW2NoIC0gaGVscF0gPSAnXDAnOworCQlzcHJpbnRmKGZvcm1hdCwgIiUlc1xuJSUlZHMiLCAoaW50KSBpbmRlbnRMZW5ndGgpOworCQkvKkAtZm9ybWF0Y29uc3RAKi8KKwkJeHggPSBQT1BUX2ZwcmludGYoZnAsIGZvcm1hdCwgZm10aGVscCwgIiAiKTsKKwkJLypAPWZvcm1hdGNvbnN0QCovCisJCWZyZWUoZm10aGVscCk7CisJICAgIH0KKwl9CisKKwloZWxwID0gY2g7CisJd2hpbGUgKF9pc3NwYWNlcHRyKGhlbHApICYmICpoZWxwKQorCSAgICBoZWxwID0gUE9QVF9uZXh0X2NoYXIoaGVscCk7CisJaGVscExlbmd0aCA9IHN0cmxlbihoZWxwKTsKKyAgICB9CisKKyAgICBpZiAoaGVscExlbmd0aCkgZnByaW50ZihmcCwgIiVzXG4iLCBoZWxwKTsKKyAgICBoZWxwID0gTlVMTDsKKworb3V0OgorICAgIC8qQC1kZXBlbmRlbnR0cmFuc0AqLworICAgIGRlZnMgPSBfZnJlZShkZWZzKTsKKyAgICAvKkA9ZGVwZW5kZW50dHJhbnNAKi8KKyAgICBsZWZ0ID0gX2ZyZWUobGVmdCk7Cit9CisKKy8qKgorICogRmluZCBkaXNwbGF5IHdpZHRoIGZvciBsb25nZXN0IGFyZ3VtZW50IHN0cmluZy4KKyAqIEBwYXJhbSBvcHQJCW9wdGlvbihzKQorICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqIEByZXR1cm4JCWRpc3BsYXkgd2lkdGgKKyAqLworc3RhdGljIHNpemVfdCBtYXhBcmdXaWR0aChjb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJICAgICAgIC8qQG51bGxAKi8gY29uc3QgY2hhciAqIHRyYW5zbGF0aW9uX2RvbWFpbikKKwkvKkAqLworeworICAgIHNpemVfdCBtYXggPSAwOworICAgIHNpemVfdCBsZW4gPSAwOworICAgIGNvbnN0IGNoYXIgKiBhcmdEZXNjcmlwOworICAgIAorICAgIGlmIChvcHQgIT0gTlVMTCkKKyAgICB3aGlsZSAob3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZykgeworCWlmIChwb3B0QXJnVHlwZShvcHQpID09IFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUpIHsKKwkgICAgaWYgKG9wdC0+YXJnKQkvKiBYWFggcHJvZ3JhbSBlcnJvciAqLworCSAgICAgICAgbGVuID0gbWF4QXJnV2lkdGgob3B0LT5hcmcsIHRyYW5zbGF0aW9uX2RvbWFpbik7CisJICAgIGlmIChsZW4gPiBtYXgpIG1heCA9IGxlbjsKKwl9IGVsc2UgaWYgKCFGX0lTU0VUKG9wdCwgRE9DX0hJRERFTikpIHsKKwkgICAgbGVuID0gc2l6ZW9mKCIgICIpLTE7CisJICAgIC8qIFhYWCAtLWxvbmcgYWx3YXlzIHBhZGRlZCBmb3IgYWxpZ25tZW50IHdpdGgvd2l0aG91dCAiLVgsICIuICovCisJICAgIGxlbiArPSBzaXplb2YoIi1YLCAiKS0xOworCSAgICBpZiAob3B0LT5sb25nTmFtZSkgeworCQlsZW4gKz0gKEZfSVNTRVQob3B0LCBPTkVEQVNIKSA/IHNpemVvZigiLSIpIDogc2l6ZW9mKCItLSIpKSAtIDE7CisJCWxlbiArPSBzdHJsZW4ob3B0LT5sb25nTmFtZSk7CisJICAgIH0KKworCSAgICBhcmdEZXNjcmlwID0gZ2V0QXJnRGVzY3JpcChvcHQsIHRyYW5zbGF0aW9uX2RvbWFpbik7CisKKwkgICAgaWYgKGFyZ0Rlc2NyaXApIHsKKworCQkvKiBYWFggYXJnRGVzY3JpcFswXSBkZXRlcm1pbmVzICItLWZvbz1iYXIiIG9yICItLWZvbyBiYXIiLiAqLworCQlpZiAoIXN0cmNocigiID0oIiwgYXJnRGVzY3JpcFswXSkpIGxlbiArPSBzaXplb2YoIj0iKS0xOworCisJCS8qIEFkanVzdCBmb3IgKHBvc3NpYmxlKSB3aWRlIGNoYXJhY3RlcnMuICovCisJCWxlbiArPSBzdHJpbmdEaXNwbGF5V2lkdGgoYXJnRGVzY3JpcCk7CisJICAgIH0KKworCSAgICBpZiAoRl9JU1NFVChvcHQsIE9QVElPTkFMKSkgbGVuICs9IHNpemVvZigiW10iKS0xOworCSAgICBpZiAobGVuID4gbWF4KSBtYXggPSBsZW47CisJfQorCW9wdCsrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWF4OworfQorCisvKioKKyAqIERpc3BsYXkgcG9wdCBhbGlhcyBhbmQgZXhlYyBoZWxwLgorICogQHBhcmFtIGZwCQlvdXRwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBpdGVtcwkJYWxpYXMvZXhlYyBhcnJheQorICogQHBhcmFtIG5pdGVtcwluby4gb2YgYWxpYXMvZXhlYyBlbnRyaWVzCisgKiBAcGFyYW0gY29sdW1ucwlvdXRwdXQgZGlzcGxheSB3aWR0aCBjb250cm9sCisgKiBAcGFyYW0gdHJhbnNsYXRpb25fZG9tYWluCXRyYW5zbGF0aW9uIGRvbWFpbgorICovCitzdGF0aWMgdm9pZCBpdGVtSGVscChGSUxFICogZnAsCisJCS8qQG51bGxAKi8gcG9wdEl0ZW0gaXRlbXMsIGludCBuaXRlbXMsCisJCWNvbHVtbnNfdCBjb2x1bW5zLAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiB0cmFuc2xhdGlvbl9kb21haW4pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzIGZwLCBmaWxlU3lzdGVtIEAqLworeworICAgIHBvcHRJdGVtIGl0ZW07CisgICAgaW50IGk7CisKKyAgICBpZiAoaXRlbXMgIT0gTlVMTCkKKyAgICBmb3IgKGkgPSAwLCBpdGVtID0gaXRlbXM7IGkgPCBuaXRlbXM7IGkrKywgaXRlbSsrKSB7CisJY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQ7CisJb3B0ID0gJml0ZW0tPm9wdGlvbjsKKwlpZiAoKG9wdC0+bG9uZ05hbWUgfHwgb3B0LT5zaG9ydE5hbWUpICYmICFGX0lTU0VUKG9wdCwgRE9DX0hJRERFTikpCisJICAgIHNpbmdsZU9wdGlvbkhlbHAoZnAsIGNvbHVtbnMsIG9wdCwgdHJhbnNsYXRpb25fZG9tYWluKTsKKyAgICB9Cit9CisKKy8qKgorICogRGlzcGxheSBoZWxwIHRleHQgZm9yIGEgdGFibGUgb2Ygb3B0aW9ucy4KKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmcAkJb3V0cHV0IGZpbGUgaGFuZGxlCisgKiBAcGFyYW0gdGFibGUJCW9wdGlvbihzKQorICogQHBhcmFtIGNvbHVtbnMJb3V0cHV0IGRpc3BsYXkgd2lkdGggY29udHJvbAorICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqLworc3RhdGljIHZvaWQgc2luZ2xlVGFibGVIZWxwKHBvcHRDb250ZXh0IGNvbiwgRklMRSAqIGZwLAorCQkvKkBudWxsQCovIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogdGFibGUsCisJCWNvbHVtbnNfdCBjb2x1bW5zLAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiB0cmFuc2xhdGlvbl9kb21haW4pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzIGZwLCBjb2x1bW5zLT5jdXIsIGZpbGVTeXN0ZW0gQCovCit7CisgICAgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQ7CisgICAgY29uc3QgY2hhciAqc3ViX3RyYW5zZG9tOworICAgIGludCB4eDsKKworICAgIGlmICh0YWJsZSA9PSBwb3B0QWxpYXNPcHRpb25zKSB7CisJaXRlbUhlbHAoZnAsIGNvbi0+YWxpYXNlcywgY29uLT5udW1BbGlhc2VzLCBjb2x1bW5zLCBOVUxMKTsKKwlpdGVtSGVscChmcCwgY29uLT5leGVjcywgY29uLT5udW1FeGVjcywgY29sdW1ucywgTlVMTCk7CisJcmV0dXJuOworICAgIH0KKworICAgIGlmICh0YWJsZSAhPSBOVUxMKQorICAgIGZvciAob3B0ID0gdGFibGU7IG9wdC0+bG9uZ05hbWUgfHwgb3B0LT5zaG9ydE5hbWUgfHwgb3B0LT5hcmc7IG9wdCsrKSB7CisJaWYgKChvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lKSAmJiAhRl9JU1NFVChvcHQsIERPQ19ISURERU4pKQorCSAgICBzaW5nbGVPcHRpb25IZWxwKGZwLCBjb2x1bW5zLCBvcHQsIHRyYW5zbGF0aW9uX2RvbWFpbik7CisgICAgfQorCisgICAgaWYgKHRhYmxlICE9IE5VTEwpCisgICAgZm9yIChvcHQgPSB0YWJsZTsgb3B0LT5sb25nTmFtZSB8fCBvcHQtPnNob3J0TmFtZSB8fCBvcHQtPmFyZzsgb3B0KyspIHsKKwlpZiAocG9wdEFyZ1R5cGUob3B0KSAhPSBQT1BUX0FSR19JTkNMVURFX1RBQkxFKQorCSAgICBjb250aW51ZTsKKwlzdWJfdHJhbnNkb20gPSBnZXRUYWJsZVRyYW5zbGF0aW9uRG9tYWluKG9wdC0+YXJnKTsKKwlpZiAoc3ViX3RyYW5zZG9tID09IE5VTEwpCisJICAgIHN1Yl90cmFuc2RvbSA9IHRyYW5zbGF0aW9uX2RvbWFpbjsKKwkgICAgCisJLyogSWYgbm8gcG9wdCBhbGlhc2VzL2V4ZWNzLCBza2lwIHBvcHRBbGlhc09wdGlvbiBwcm9jZXNzaW5nLiAqLworCWlmIChvcHQtPmFyZyA9PSBwb3B0QWxpYXNPcHRpb25zICYmICEoY29uLT5udW1BbGlhc2VzIHx8IGNvbi0+bnVtRXhlY3MpKQorCSAgICBjb250aW51ZTsKKwlpZiAob3B0LT5kZXNjcmlwKQorCSAgICB4eCA9IFBPUFRfZnByaW50ZihmcCwgIlxuJXNcbiIsIERfKHN1Yl90cmFuc2RvbSwgb3B0LT5kZXNjcmlwKSk7CisKKwlzaW5nbGVUYWJsZUhlbHAoY29uLCBmcCwgb3B0LT5hcmcsIGNvbHVtbnMsIHN1Yl90cmFuc2RvbSk7CisgICAgfQorfQorCisvKioKKyAqIEBwYXJhbSBjb24JCWNvbnRleHQKKyAqIEBwYXJhbSBmcAkJb3V0cHV0IGZpbGUgaGFuZGxlCisgKi8KK3N0YXRpYyBzaXplX3Qgc2hvd0hlbHBJbnRybyhwb3B0Q29udGV4dCBjb24sIEZJTEUgKiBmcCkKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCisJLypAbW9kaWZpZXMgZnAsIGZpbGVTeXN0ZW0gQCovCit7CisgICAgc2l6ZV90IGxlbiA9IChzaXplX3QpNjsKKyAgICBpbnQgeHg7CisKKyAgICB4eCA9IFBPUFRfZnByaW50ZihmcCwgUE9QVF8oIlVzYWdlOiIpKTsKKyAgICBpZiAoIShjb24tPmZsYWdzICYgUE9QVF9DT05URVhUX0tFRVBfRklSU1QpKSB7CisJc3RydWN0IG9wdGlvblN0YWNrRW50cnkgKiBvcyA9IGNvbi0+b3B0aW9uU3RhY2s7CisJY29uc3QgY2hhciAqIGZuID0gKG9zLT5hcmd2ID8gb3MtPmFyZ3ZbMF0gOiBOVUxMKTsKKwlpZiAoZm4gPT0gTlVMTCkgcmV0dXJuIGxlbjsKKwlpZiAoc3RyY2hyKGZuLCAnLycpKSBmbiA9IHN0cnJjaHIoZm4sICcvJykgKyAxOworCS8qIFhYWCBQT1BUX2ZwcmludGYgbm90IG5lZWRlZCBmb3IgYXJndlswXSBkaXNwbGF5LiAqLworCWZwcmludGYoZnAsICIgJXMiLCBmbik7CisJbGVuICs9IHN0cmxlbihmbikgKyAxOworICAgIH0KKworICAgIHJldHVybiBsZW47Cit9CisKK3ZvaWQgcG9wdFByaW50SGVscChwb3B0Q29udGV4dCBjb24sIEZJTEUgKiBmcCwgLypAdW51c2VkQCovIFVOVVNFRChpbnQgZmxhZ3MpKQoreworICAgIGNvbHVtbnNfdCBjb2x1bW5zID0gY2FsbG9jKChzaXplX3QpMSwgc2l6ZW9mKCpjb2x1bW5zKSk7CisgICAgaW50IHh4OworCisgICAgKHZvaWQpIHNob3dIZWxwSW50cm8oY29uLCBmcCk7CisgICAgaWYgKGNvbi0+b3RoZXJIZWxwKQorCXh4ID0gUE9QVF9mcHJpbnRmKGZwLCAiICVzXG4iLCBjb24tPm90aGVySGVscCk7CisgICAgZWxzZQorCXh4ID0gUE9QVF9mcHJpbnRmKGZwLCAiICVzXG4iLCBQT1BUXygiW09QVElPTi4uLl0iKSk7CisKKyAgICBpZiAoY29sdW1ucykgeworCWNvbHVtbnMtPmN1ciA9IG1heEFyZ1dpZHRoKGNvbi0+b3B0aW9ucywgTlVMTCk7CisJY29sdW1ucy0+bWF4ID0gbWF4Q29sdW1uV2lkdGgoZnApOworCXNpbmdsZVRhYmxlSGVscChjb24sIGZwLCBjb24tPm9wdGlvbnMsIGNvbHVtbnMsIE5VTEwpOworCWZyZWUoY29sdW1ucyk7CisgICAgfQorfQorCisvKioKKyAqIERpc3BsYXkgdXNhZ2UgdGV4dCBmb3IgYW4gb3B0aW9uLgorICogQHBhcmFtIGZwCQlvdXRwdXQgZmlsZSBoYW5kbGUKKyAqIEBwYXJhbSBjb2x1bW5zCW91dHB1dCBkaXNwbGF5IHdpZHRoIGNvbnRyb2wKKyAqIEBwYXJhbSBvcHQJCW9wdGlvbihzKQorICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqLworc3RhdGljIHNpemVfdCBzaW5nbGVPcHRpb25Vc2FnZShGSUxFICogZnAsIGNvbHVtbnNfdCBjb2x1bW5zLAorCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJLypAbnVsbEAqLyBjb25zdCBjaGFyICp0cmFuc2xhdGlvbl9kb21haW4pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzIGZwLCBjb2x1bW5zLT5jdXIsIGZpbGVTeXN0ZW0gQCovCit7CisgICAgc2l6ZV90IGxlbiA9IHNpemVvZigiIFtdIiktMTsKKyAgICBjb25zdCBjaGFyICogYXJnRGVzY3JpcCA9IGdldEFyZ0Rlc2NyaXAob3B0LCB0cmFuc2xhdGlvbl9kb21haW4pOworICAgIC8qIERpc3BsYXkgc2hvcnROYW1lIGlmZiBwcmludGFibGUgbm9uLXNwYWNlLiAqLworICAgIGludCBwcnRzaG9ydCA9IChpbnQpKGlzcHJpbnQoKGludClvcHQtPnNob3J0TmFtZSkgJiYgb3B0LT5zaG9ydE5hbWUgIT0gJyAnKTsKKworI2RlZmluZQlwcnRsb25nCShvcHQtPmxvbmdOYW1lICE9IE5VTEwpCS8qIFhYWCBzcGxpbnQgbmVlZHMgYSBjbHVlICovCisgICAgaWYgKCEocHJ0c2hvcnQgfHwgcHJ0bG9uZykpCisJcmV0dXJuIGNvbHVtbnMtPmN1cjsKKworICAgIGxlbiA9IHNpemVvZigiIFtdIiktMTsKKyAgICBpZiAocHJ0c2hvcnQpCisJbGVuICs9IHNpemVvZigiLWMiKS0xOworICAgIGlmIChwcnRsb25nKSB7CisJaWYgKHBydHNob3J0KSBsZW4gKz0gc2l6ZW9mKCJ8IiktMTsKKwlsZW4gKz0gKEZfSVNTRVQob3B0LCBPTkVEQVNIKSA/IHNpemVvZigiLSIpIDogc2l6ZW9mKCItLSIpKSAtIDE7CisJbGVuICs9IHN0cmxlbihvcHQtPmxvbmdOYW1lKTsKKyAgICB9CisKKyAgICBpZiAoYXJnRGVzY3JpcCkgeworCisJLyogWFhYIGFyZ0Rlc2NyaXBbMF0gZGV0ZXJtaW5lcyAiLS1mb289YmFyIiBvciAiLS1mb28gYmFyIi4gKi8KKwlpZiAoIXN0cmNocigiID0oIiwgYXJnRGVzY3JpcFswXSkpIGxlbiArPSBzaXplb2YoIj0iKS0xOworCisJLyogQWRqdXN0IGZvciAocG9zc2libGUpIHdpZGUgY2hhcmFjdGVycy4gKi8KKwlsZW4gKz0gc3RyaW5nRGlzcGxheVdpZHRoKGFyZ0Rlc2NyaXApOworICAgIH0KKworICAgIGlmICgoY29sdW1ucy0+Y3VyICsgbGVuKSA+IGNvbHVtbnMtPm1heCkgeworCWZwcmludGYoZnAsICJcbiAgICAgICAiKTsKKwljb2x1bW5zLT5jdXIgPSAoc2l6ZV90KTc7CisgICAgfSAKKworICAgIGZwcmludGYoZnAsICIgWyIpOworICAgIGlmIChwcnRzaG9ydCkKKwlmcHJpbnRmKGZwLCAiLSVjIiwgb3B0LT5zaG9ydE5hbWUpOworICAgIGlmIChwcnRsb25nKQorCWZwcmludGYoZnAsICIlcyVzJXMiLAorCQkocHJ0c2hvcnQgPyAifCIgOiAiIiksCisJCShGX0lTU0VUKG9wdCwgT05FREFTSCkgPyAiLSIgOiAiLS0iKSwKKwkJb3B0LT5sb25nTmFtZSk7CisjdW5kZWYJcHJ0bG9uZworCisgICAgaWYgKGFyZ0Rlc2NyaXApIHsKKwkvKiBYWFggYXJnRGVzY3JpcFswXSBkZXRlcm1pbmVzICItLWZvbz1iYXIiIG9yICItLWZvbyBiYXIiLiAqLworCWlmICghc3RyY2hyKCIgPSgiLCBhcmdEZXNjcmlwWzBdKSkgZnByaW50ZihmcCwgIj0iKTsKKwlmcHJpbnRmKGZwLCAiJXMiLCBhcmdEZXNjcmlwKTsKKyAgICB9CisgICAgZnByaW50ZihmcCwgIl0iKTsKKworICAgIHJldHVybiBjb2x1bW5zLT5jdXIgKyBsZW4gKyAxOworfQorCisvKioKKyAqIERpc3BsYXkgcG9wdCBhbGlhcyBhbmQgZXhlYyB1c2FnZS4KKyAqIEBwYXJhbSBmcAkJb3V0cHV0IGZpbGUgaGFuZGxlCisgKiBAcGFyYW0gY29sdW1ucwlvdXRwdXQgZGlzcGxheSB3aWR0aCBjb250cm9sCisgKiBAcGFyYW0gaXRlbQkJYWxpYXMvZXhlYyBhcnJheQorICogQHBhcmFtIG5pdGVtcwluby4gb2YgYXJhL2V4ZWMgZW50cmllcworICogQHBhcmFtIHRyYW5zbGF0aW9uX2RvbWFpbgl0cmFuc2xhdGlvbiBkb21haW4KKyAqLworc3RhdGljIHNpemVfdCBpdGVtVXNhZ2UoRklMRSAqIGZwLCBjb2x1bW5zX3QgY29sdW1ucywKKwkJLypAbnVsbEAqLyBwb3B0SXRlbSBpdGVtLCBpbnQgbml0ZW1zLAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiB0cmFuc2xhdGlvbl9kb21haW4pCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzIGZwLCBjb2x1bW5zLT5jdXIsIGZpbGVTeXN0ZW0gQCovCit7CisgICAgaW50IGk7CisKKyAgICBpZiAoaXRlbSAhPSBOVUxMKQorICAgIGZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKywgaXRlbSsrKSB7CisJY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQ7CisJb3B0ID0gJml0ZW0tPm9wdGlvbjsKKyAgICAgICAgaWYgKHBvcHRBcmdUeXBlKG9wdCkgPT0gUE9QVF9BUkdfSU5UTF9ET01BSU4pIHsKKwkgICAgdHJhbnNsYXRpb25fZG9tYWluID0gKGNvbnN0IGNoYXIgKilvcHQtPmFyZzsKKwl9IGVsc2UKKwlpZiAoKG9wdC0+bG9uZ05hbWUgfHwgb3B0LT5zaG9ydE5hbWUpICYmICFGX0lTU0VUKG9wdCwgRE9DX0hJRERFTikpIHsKKwkgICAgY29sdW1ucy0+Y3VyID0gc2luZ2xlT3B0aW9uVXNhZ2UoZnAsIGNvbHVtbnMsIG9wdCwgdHJhbnNsYXRpb25fZG9tYWluKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIGNvbHVtbnMtPmN1cjsKK30KKworLyoqCisgKiBLZWVwIHRyYWNrIG9mIG9wdGlvbiB0YWJsZXMgYWxyZWFkeSBwcm9jZXNzZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBvcHREb25lX3MgeworICAgIGludCBub3B0czsKKyAgICBpbnQgbWF4b3B0czsKKy8qQG51bGxAKi8KKyAgICBjb25zdCB2b2lkICoqIG9wdHM7Cit9ICogcG9wdERvbmU7CisKKy8qKgorICogRGlzcGxheSB1c2FnZSB0ZXh0IGZvciBhIHRhYmxlIG9mIG9wdGlvbnMuCisgKiBAcGFyYW0gY29uCQljb250ZXh0CisgKiBAcGFyYW0gZnAJCW91dHB1dCBmaWxlIGhhbmRsZQorICogQHBhcmFtIGNvbHVtbnMJb3V0cHV0IGRpc3BsYXkgd2lkdGggY29udHJvbAorICogQHBhcmFtIG9wdAkJb3B0aW9uKHMpCisgKiBAcGFyYW0gdHJhbnNsYXRpb25fZG9tYWluCXRyYW5zbGF0aW9uIGRvbWFpbgorICogQHBhcmFtIGRvbmUJCXRhYmxlcyBhbHJlYWR5IHByb2Nlc3NlZAorICogQHJldHVybgorICovCitzdGF0aWMgc2l6ZV90IHNpbmdsZVRhYmxlVXNhZ2UocG9wdENvbnRleHQgY29uLCBGSUxFICogZnAsIGNvbHVtbnNfdCBjb2x1bW5zLAorCQkvKkBudWxsQCovIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0LAorCQkvKkBudWxsQCovIGNvbnN0IGNoYXIgKiB0cmFuc2xhdGlvbl9kb21haW4sCisJCS8qQG51bGxAKi8gcG9wdERvbmUgZG9uZSkKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCisJLypAbW9kaWZpZXMgZnAsIGNvbHVtbnMtPmN1ciwgZG9uZSwgZmlsZVN5c3RlbSBAKi8KK3sKKyAgICBpZiAob3B0ICE9IE5VTEwpCisgICAgZm9yICg7IChvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnKSA7IG9wdCsrKSB7CisgICAgICAgIGlmIChwb3B0QXJnVHlwZShvcHQpID09IFBPUFRfQVJHX0lOVExfRE9NQUlOKSB7CisJICAgIHRyYW5zbGF0aW9uX2RvbWFpbiA9IChjb25zdCBjaGFyICopb3B0LT5hcmc7CisJfSBlbHNlCisJaWYgKHBvcHRBcmdUeXBlKG9wdCkgPT0gUE9QVF9BUkdfSU5DTFVERV9UQUJMRSkgeworCSAgICBpZiAoZG9uZSkgeworCQlpbnQgaSA9IDA7CisJCWlmIChkb25lLT5vcHRzICE9IE5VTEwpCisJCWZvciAoaSA9IDA7IGkgPCBkb25lLT5ub3B0czsgaSsrKSB7CisJCSAgICBjb25zdCB2b2lkICogdGhhdCA9IGRvbmUtPm9wdHNbaV07CisJCSAgICBpZiAodGhhdCA9PSBOVUxMIHx8IHRoYXQgIT0gb3B0LT5hcmcpCisJCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworCQkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKwkJfQorCQkvKiBTa2lwIGlmIHRoaXMgdGFibGUgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQuICovCisJCWlmIChvcHQtPmFyZyA9PSBOVUxMIHx8IGkgPCBkb25lLT5ub3B0cykKKwkJICAgIGNvbnRpbnVlOworCQlpZiAoZG9uZS0+b3B0cyAhPSBOVUxMICYmIGRvbmUtPm5vcHRzIDwgZG9uZS0+bWF4b3B0cykKKwkJICAgIGRvbmUtPm9wdHNbZG9uZS0+bm9wdHMrK10gPSAoY29uc3Qgdm9pZCAqKSBvcHQtPmFyZzsKKwkgICAgfQorCSAgICBjb2x1bW5zLT5jdXIgPSBzaW5nbGVUYWJsZVVzYWdlKGNvbiwgZnAsIGNvbHVtbnMsIG9wdC0+YXJnLAorCQkJdHJhbnNsYXRpb25fZG9tYWluLCBkb25lKTsKKwl9IGVsc2UKKwlpZiAoKG9wdC0+bG9uZ05hbWUgfHwgb3B0LT5zaG9ydE5hbWUpICYmICFGX0lTU0VUKG9wdCwgRE9DX0hJRERFTikpIHsKKwkgICAgY29sdW1ucy0+Y3VyID0gc2luZ2xlT3B0aW9uVXNhZ2UoZnAsIGNvbHVtbnMsIG9wdCwgdHJhbnNsYXRpb25fZG9tYWluKTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIGNvbHVtbnMtPmN1cjsKK30KKworLyoqCisgKiBSZXR1cm4gY29uY2F0ZW5hdGVkIHNob3J0IG9wdGlvbnMgZm9yIGRpc3BsYXkuCisgKiBAdG9kbyBTdWItdGFibGVzIHNob3VsZCBiZSByZWN1cnNlZC4KKyAqIEBwYXJhbSBvcHQJCW9wdGlvbihzKQorICogQHBhcmFtIGZwCQlvdXRwdXQgZmlsZSBoYW5kbGUKKyAqIEByZXR2YWwgc3RyCQljb25jYXRlbmF0aW9uIG9mIHNob3J0IG9wdGlvbnMKKyAqIEByZXR1cm4JCWxlbmd0aCBvZiBkaXNwbGF5IHN0cmluZworICovCitzdGF0aWMgc2l6ZV90IHNob3dTaG9ydE9wdGlvbnMoY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gKiBvcHQsIEZJTEUgKiBmcCwKKwkJLypAbnVsbEAqLyBjaGFyICogc3RyKQorCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKwkvKkBtb2RpZmllcyBzdHIsICpmcCwgZmlsZVN5c3RlbSBAKi8KKwkvKkByZXF1aXJlcyBtYXhSZWFkKHN0cikgPj0gMCBAKi8KK3sKKyAgICAvKiBidWZzaXplIGxhcmdlciB0aGVuIHRoZSBhc2NpaSBzZXQsIGxhenkgYWxsb2NhdGlvbiBvbiB0b3AgbGV2ZWwgY2FsbC4gKi8KKyAgICBzaXplX3QgbmIgPSAoc2l6ZV90KTMwMDsKKyAgICBjaGFyICogcyA9IChzdHIgIT0gTlVMTCA/IHN0ciA6IGNhbGxvYygoc2l6ZV90KTEsIG5iKSk7CisgICAgc2l6ZV90IGxlbiA9IChzaXplX3QpMDsKKworICAgIGlmIChzID09IE5VTEwpCisJcmV0dXJuIDA7CisKKyAgICBpZiAob3B0ICE9IE5VTEwpCisgICAgZm9yICg7IChvcHQtPmxvbmdOYW1lIHx8IG9wdC0+c2hvcnROYW1lIHx8IG9wdC0+YXJnKTsgb3B0KyspIHsKKwlpZiAoIUZfSVNTRVQob3B0LCBET0NfSElEREVOKSAmJiBvcHQtPnNob3J0TmFtZSAmJiAhcG9wdEFyZ1R5cGUob3B0KSkKKwl7CisJICAgIC8qIERpc3BsYXkgc2hvcnROYW1lIGlmZiB1bmlxdWUgcHJpbnRhYmxlIG5vbi1zcGFjZS4gKi8KKwkgICAgaWYgKCFzdHJjaHIocywgb3B0LT5zaG9ydE5hbWUpICYmIGlzcHJpbnQoKGludClvcHQtPnNob3J0TmFtZSkKKwkgICAgICYmIG9wdC0+c2hvcnROYW1lICE9ICcgJykKKwkJc1tzdHJsZW4ocyldID0gb3B0LT5zaG9ydE5hbWU7CisJfSBlbHNlIGlmIChwb3B0QXJnVHlwZShvcHQpID09IFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUpCisJICAgIGlmIChvcHQtPmFyZykJLyogWFhYIHByb2dyYW0gZXJyb3IgKi8KKwkJbGVuID0gc2hvd1Nob3J0T3B0aW9ucyhvcHQtPmFyZywgZnAsIHMpOworICAgIH0gCisKKyAgICAvKiBPbiByZXR1cm4gdG8gdG9wIGxldmVsLCBwcmludCB0aGUgc2hvcnQgb3B0aW9ucywgcmV0dXJuIHByaW50IGxlbmd0aC4gKi8KKyAgICBpZiAocyAhPSBzdHIgJiYgKnMgIT0gJ1wwJykgeworCWZwcmludGYoZnAsICIgWy0lc10iLCBzKTsKKwlsZW4gPSBzdHJsZW4ocykgKyBzaXplb2YoIiBbLV0iKS0xOworICAgIH0KKy8qQC10ZW1wdHJhbnNAKi8JLyogTENMOiBsb2NhbCBzLCBub3Qgc3RyIGFyZywgaXMgYmVpbmcgZnJlZWQuICovCisgICAgaWYgKHMgIT0gc3RyKQorCWZyZWUocyk7CisvKkA9dGVtcHRyYW5zQCovCisgICAgcmV0dXJuIGxlbjsKK30KKwordm9pZCBwb3B0UHJpbnRVc2FnZShwb3B0Q29udGV4dCBjb24sIEZJTEUgKiBmcCwgLypAdW51c2VkQCovIFVOVVNFRChpbnQgZmxhZ3MpKQoreworICAgIGNvbHVtbnNfdCBjb2x1bW5zID0gY2FsbG9jKChzaXplX3QpMSwgc2l6ZW9mKCpjb2x1bW5zKSk7CisgICAgc3RydWN0IHBvcHREb25lX3MgZG9uZV9idWY7CisgICAgcG9wdERvbmUgZG9uZSA9ICZkb25lX2J1ZjsKKworICAgIG1lbXNldChkb25lLCAwLCBzaXplb2YoKmRvbmUpKTsKKyAgICBkb25lLT5ub3B0cyA9IDA7CisgICAgZG9uZS0+bWF4b3B0cyA9IDY0OworICBpZiAoY29sdW1ucykgeworICAgIGNvbHVtbnMtPmN1ciA9IGRvbmUtPm1heG9wdHMgKiBzaXplb2YoKmRvbmUtPm9wdHMpOworICAgIGNvbHVtbnMtPm1heCA9IG1heENvbHVtbldpZHRoKGZwKTsKKyAgICBkb25lLT5vcHRzID0gY2FsbG9jKChzaXplX3QpMSwgY29sdW1ucy0+Y3VyKTsKKyAgICAvKkAta2VlcHRyYW5zQCovCisgICAgaWYgKGRvbmUtPm9wdHMgIT0gTlVMTCkKKwlkb25lLT5vcHRzW2RvbmUtPm5vcHRzKytdID0gKGNvbnN0IHZvaWQgKikgY29uLT5vcHRpb25zOworICAgIC8qQD1rZWVwdHJhbnNAKi8KKworICAgIGNvbHVtbnMtPmN1ciA9IHNob3dIZWxwSW50cm8oY29uLCBmcCk7CisgICAgY29sdW1ucy0+Y3VyICs9IHNob3dTaG9ydE9wdGlvbnMoY29uLT5vcHRpb25zLCBmcCwgTlVMTCk7CisgICAgY29sdW1ucy0+Y3VyID0gc2luZ2xlVGFibGVVc2FnZShjb24sIGZwLCBjb2x1bW5zLCBjb24tPm9wdGlvbnMsIE5VTEwsIGRvbmUpOworICAgIGNvbHVtbnMtPmN1ciA9IGl0ZW1Vc2FnZShmcCwgY29sdW1ucywgY29uLT5hbGlhc2VzLCBjb24tPm51bUFsaWFzZXMsIE5VTEwpOworICAgIGNvbHVtbnMtPmN1ciA9IGl0ZW1Vc2FnZShmcCwgY29sdW1ucywgY29uLT5leGVjcywgY29uLT5udW1FeGVjcywgTlVMTCk7CisKKyAgICBpZiAoY29uLT5vdGhlckhlbHApIHsKKwljb2x1bW5zLT5jdXIgKz0gc3RybGVuKGNvbi0+b3RoZXJIZWxwKSArIDE7CisJaWYgKGNvbHVtbnMtPmN1ciA+IGNvbHVtbnMtPm1heCkgZnByaW50ZihmcCwgIlxuICAgICAgICIpOworCWZwcmludGYoZnAsICIgJXMiLCBjb24tPm90aGVySGVscCk7CisgICAgfQorCisgICAgZnByaW50ZihmcCwgIlxuIik7CisgICAgaWYgKGRvbmUtPm9wdHMgIT0gTlVMTCkKKwlmcmVlKGRvbmUtPm9wdHMpOworICAgIGZyZWUoY29sdW1ucyk7CisgIH0KK30KKwordm9pZCBwb3B0U2V0T3RoZXJPcHRpb25IZWxwKHBvcHRDb250ZXh0IGNvbiwgY29uc3QgY2hhciAqIHRleHQpCit7CisgICAgY29uLT5vdGhlckhlbHAgPSBfZnJlZShjb24tPm90aGVySGVscCk7CisgICAgY29uLT5vdGhlckhlbHAgPSB4c3RyZHVwKHRleHQpOworfQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvcHRpbnQuYyBiL3BvcHQtMS4xNi9wb3B0aW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmYTdkNgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wb3B0aW50LmMKQEAgLTAsMCArMSwxOTkgQEAKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJwb3B0aW50LmgiCisKKy8qIEFueSBwYWlyIG9mIDMyIGJpdCBoYXNoZXMgY2FuIGJlIHVzZWQuIGxvb2t1cDMuYyBnZW5lcmF0ZXMgcGFpcnMsIHdpbGwgZG8uICovCisjZGVmaW5lIF9KTFUzX2psdTMybHBhaXIgICAgICAgIDEKKyNkZWZpbmUJamx1MzJscGFpcglwb3B0Smx1MzJscGFpcgorI2luY2x1ZGUgImxvb2t1cDMuYyIKKworLypALXZhcnVzZSArY2hhcmludCAraWdub3Jlc2lnbnMgQCovCisvKkB1bmNoZWNrZWRAKi8gLypAb2JzZXJ2ZXJAKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHV0Zjhfc2tpcF9kYXRhWzI1Nl0gPSB7CisgICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgICAgMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLAorICAgIDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsNCw0LDQsNCw0LDQsNCw0LDUsNSw1LDUsNiw2LDEsMQorfTsKKy8qQD12YXJ1c2UgPWNoYXJpbnQgPWlnbm9yZXNpZ25zIEAqLworCitjb25zdCBjaGFyICoKK1BPUFRfcHJldl9jaGFyIChjb25zdCBjaGFyICpzdHIpCit7CisgICAgY29uc3QgY2hhciAqcCA9IHN0cjsKKworICAgIHdoaWxlICgxKSB7CisJcC0tOworCWlmICgoKHVuc2lnbmVkKSpwICYgMHhjMCkgIT0gKHVuc2lnbmVkKTB4ODApCisJICAgIHJldHVybiBwOworICAgIH0KK30KKworY29uc3QgY2hhciAqCitQT1BUX25leHRfY2hhciAoY29uc3QgY2hhciAqc3RyKQoreworICAgIGNvbnN0IGNoYXIgKnAgPSBzdHI7CisKKyAgICB3aGlsZSAoKnAgIT0gJ1wwJykgeworCXArKzsKKwlpZiAoKCh1bnNpZ25lZCkqcCAmIDB4YzApICE9ICh1bnNpZ25lZCkweDgwKQorCSAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKyNpZiAhZGVmaW5lZChQT1BUX2ZwcmludGYpCS8qIFhYWCBsb3NlIGFsbCB0aGUgZ29vcCAuLi4gKi8KKworI2lmIGRlZmluZWQoSEFWRV9EQ0dFVFRFWFQpICYmICFkZWZpbmVkKF9fTENMSU5UX18pCisvKgorICogUmViaW5kIGEgIlVURi04IiBjb2Rlc2V0IGZvciBwb3B0J3MgaW50ZXJuYWwgdXNlLgorICovCitjaGFyICoKK1BPUFRfZGdldHRleHQoY29uc3QgY2hhciAqIGRvbSwgY29uc3QgY2hhciAqIHN0cikKK3sKKyAgICBjaGFyICogY29kZXNldCA9IE5VTEw7CisgICAgY2hhciAqIHJldHZhbCA9IE5VTEw7CisKKyAgICBpZiAoIWRvbSkgCisJZG9tID0gdGV4dGRvbWFpbihOVUxMKTsKKyAgICBjb2Rlc2V0ID0gYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoZG9tLCBOVUxMKTsKKyAgICBiaW5kX3RleHRkb21haW5fY29kZXNldChkb20sICJVVEYtOCIpOworICAgIHJldHZhbCA9IGRnZXR0ZXh0KGRvbSwgc3RyKTsKKyAgICBiaW5kX3RleHRkb21haW5fY29kZXNldChkb20sIGNvZGVzZXQpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JQ09OVgorLyoqCisgKiBSZXR1cm4gbWFsbG9jJ2Qgc3RyaW5nIGNvbnZlcnRlZCBmcm9tIFVURi04IHRvIGN1cnJlbnQgbG9jYWxlLgorICogQHBhcmFtIGlzdHIJCWlucHV0IHN0cmluZyAoVVRGLTggZW5jb2RpbmcgYXNzdW1lZCkKKyAqIEByZXR1cm4JCWxvY2FsaXplZCBzdHJpbmcKKyAqLworc3RhdGljIC8qQG9ubHlAKi8gLypAbnVsbEAqLyBjaGFyICoKK3N0cmR1cF9sb2NhbGVfZnJvbV91dGY4ICgvKkBudWxsQCovIGNoYXIgKiBpc3RyKQorCS8qQCovCit7CisgICAgY2hhciAqIGNvZGVzZXQgPSBOVUxMOworICAgIGNoYXIgKiBvc3RyID0gTlVMTDsKKyAgICBpY29udl90IGNkOworCisgICAgaWYgKGlzdHIgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworI2lmZGVmIEhBVkVfTEFOR0lORk9fSAorICAgIGNvZGVzZXQgPSBubF9sYW5naW5mbyAoKG5sX2l0ZW0pQ09ERVNFVCk7CisjZW5kaWYKKworICAgIGlmIChjb2Rlc2V0ICE9IE5VTEwgJiYgc3RyY21wKGNvZGVzZXQsICJVVEYtOCIpICE9IDAKKyAgICAgJiYgKGNkID0gaWNvbnZfb3Blbihjb2Rlc2V0LCAiVVRGLTgiKSkgIT0gKGljb252X3QpLTEpCisgICAgeworCWNoYXIgKiBzaGlmdF9waW4gPSBOVUxMOworCXNpemVfdCBkYiA9IHN0cmxlbihpc3RyKTsKKy8qQG93bmVkQCovCisJY2hhciAqIGRzdHIgPSBtYWxsb2MoKGRiICsgMSkgKiBzaXplb2YoKmRzdHIpKTsKKwljaGFyICogcGluID0gaXN0cjsKKwljaGFyICogcG91dCA9IGRzdHI7CisJc2l6ZV90IGliID0gZGI7CisJc2l6ZV90IG9iID0gZGI7CisJc2l6ZV90IGVycjsKKworCWlmIChkc3RyID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCWVyciA9IGljb252KGNkLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwl3aGlsZSAoMSkgeworCSAgICAqcG91dCA9ICdcMCc7CisJICAgIGVyciA9IGljb252KGNkLCAmcGluLCAmaWIsICZwb3V0LCAmb2IpOworCSAgICBpZiAoZXJyICE9IChzaXplX3QpLTEpIHsKKwkJaWYgKHNoaWZ0X3BpbiA9PSBOVUxMKSB7CisJCSAgICBzaGlmdF9waW4gPSBwaW47CisJCSAgICBwaW4gPSBOVUxMOworCQkgICAgaWIgPSAwOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfSBlbHNlCisJICAgIHN3aXRjaCAoZXJybm8pIHsKKwkgICAgY2FzZSBFMkJJRzoKKwkgICAgewlzaXplX3QgdXNlZCA9IChzaXplX3QpKHBvdXQgLSBkc3RyKTsKKwkJZGIgKj0gMjsKKwkJZHN0ciA9IHJlYWxsb2MoZHN0ciwgKGRiICsgMSkgKiBzaXplb2YoKmRzdHIpKTsKKwkJaWYgKGRzdHIgIT0gTlVMTCkgeworCQkgICAgcG91dCA9IGRzdHIgKyB1c2VkOworCQkgICAgb2IgPSBkYiAtIHVzZWQ7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9ICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJICAgIGNhc2UgRUlOVkFMOgorCSAgICBjYXNlIEVJTFNFUToKKwkgICAgZGVmYXVsdDoKKwkJLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCSh2b2lkKSBpY29udl9jbG9zZShjZCk7CisJKnBvdXQgPSAnXDAnOworCW9zdHIgPSB4c3RyZHVwKGRzdHIpOworCWZyZWUoZHN0cik7CisgICAgfSBlbHNlCisJb3N0ciA9IHhzdHJkdXAoaXN0cik7CisKKyAgICByZXR1cm4gb3N0cjsKK30KKyNlbmRpZgorCitpbnQKK1BPUFRfZnByaW50ZiAoRklMRSAqIHN0cmVhbSwgY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uKQoreworICAgIGNoYXIgKiBiID0gTlVMTCwgKiBvYiA9IE5VTEw7CisgICAgaW50IHJjOworICAgIHZhX2xpc3QgYXA7CisKKyNpZiBkZWZpbmVkKEhBVkVfVkFTUFJJTlRGKSAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgIGlmICgocmMgPSB2YXNwcmludGYoJmIsIGZvcm1hdCwgYXApKSA8IDApCisJYiA9IE5VTEw7CisgICAgdmFfZW5kKGFwKTsKKyNlbHNlCisgICAgc2l6ZV90IG5iID0gKHNpemVfdCkxOworCisgICAgLyogSEFDSzogYWRkICsxIHRvIHRoZSByZWFsbG9jIG5vLiBvZiBieXRlcyAianVzdCBpbiBjYXNlIi4gKi8KKyAgICAvKiBYWFggTGlrZWx5IHVubmVlZGVkLCB0aGUgaXNzdWVzIHdydG8gdnNucHJpbnRmKDMpIHJldHVybiBiMHJrYWdlIGhhdmUKKyAgICAgKiB0byBkbyB3aXRoIHdoZXRoZXIgdGhlIGZpbmFsICdcMCcgaXMgY291bnRlZCAob3Igbm90KS4gVGhlIGNvZGUKKyAgICAgKiBiZWxvdyBhbHJlYWR5IGFkZHMgKzEgZm9yIHRoZSAocG9zc2libHkgYWxyZWFkeSBjb3VudGVkKSB0cmFpbGluZyBOVUwuCisgICAgICovCisgICAgd2hpbGUgKChiID0gcmVhbGxvYyhiLCBuYisxKSkgIT0gTlVMTCkgeworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXJjID0gdnNucHJpbnRmKGIsIG5iLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWlmIChyYyA+IC0xKSB7CS8qIGdsaWJjIDIuMSAqLworCSAgICBpZiAoKHNpemVfdClyYyA8IG5iKQorCQlicmVhazsKKwkgICAgbmIgPSAoc2l6ZV90KShyYyArIDEpOwkvKiBwcmVjaXNlIGJ1ZmZlciBsZW5ndGgga25vd24gKi8KKwl9IGVsc2UgCQkvKiBnbGliYyAyLjAgKi8KKwkgICAgbmIgKz0gKG5iIDwgKHNpemVfdCkxMDAgPyAoc2l6ZV90KTEwMCA6IG5iKTsKKwlvYiA9IGI7CisgICAgfQorI2VuZGlmCisKKyAgICByYyA9IDA7CisgICAgaWYgKGIgIT0gTlVMTCkgeworI2lmZGVmIEhBVkVfSUNPTlYKKwlvYiA9IHN0cmR1cF9sb2NhbGVfZnJvbV91dGY4KGIpOworCWlmIChvYiAhPSBOVUxMKSB7CisJICAgIHJjID0gZnByaW50ZihzdHJlYW0sICIlcyIsIG9iKTsKKwkgICAgZnJlZShvYik7CisJfSBlbHNlCisjZW5kaWYKKwkgICAgcmMgPSBmcHJpbnRmKHN0cmVhbSwgIiVzIiwgYik7CisJZnJlZSAoYik7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCisjZW5kaWYJLyogIWRlZmluZWQoUE9QVF9mcHJpbnRmKSAqLwpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvcHRpbnQuaCBiL3BvcHQtMS4xNi9wb3B0aW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjYmFjYQotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQtMS4xNi9wb3B0aW50LmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcZmlsZSBwb3B0L3BvcHRpbnQuaAorICovCisKKy8qIChDKSAxOTk4LTIwMDAgUmVkIEhhdCwgSW5jLiAtLSBMaWNlbnNpbmcgZGV0YWlscyBhcmUgaW4gdGhlIENPUFlJTkcKKyAgIGZpbGUgYWNjb21wYW55aW5nIHBvcHQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIGF2YWlsYWJsZSBmcm9tIAorICAgZnRwOi8vZnRwLnJwbS5vcmcvcHViL3JwbS9kaXN0LiAqLworCisjaWZuZGVmIEhfUE9QVElOVAorI2RlZmluZSBIX1BPUFRJTlQKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKioKKyAqIFdyYXBwZXIgdG8gZnJlZSgzKSwgaGlkZXMgY29uc3QgY29tcGlsYXRpb24gbm9pc2UsIHBlcm1pdCBOVUxMLCByZXR1cm4gTlVMTC4KKyAqIEBwYXJhbSBwCQltZW1vcnkgdG8gZnJlZQorICogQHJldHZhbAkJTlVMTCBhbHdheXMKKyAqLworLypAdW51c2VkQCovIHN0YXRpYyBpbmxpbmUgLypAbnVsbEAqLyB2b2lkICoKK19mcmVlKC8qQG9ubHlAKi8gLypAbnVsbEAqLyBjb25zdCB2b2lkICogcCkKKwkvKkBtb2RpZmllcyBwIEAqLworeworICAgIGlmIChwICE9IE5VTEwpCWZyZWUoKHZvaWQgKilwKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogQml0IG1hc2sgbWFjcm9zLiAqLworLypALWV4cG9ydHR5cGUgLXJlZGVmIEAqLwordHlwZWRlZgl1bnNpZ25lZCBpbnQgX19wYm1fYml0czsKKy8qQD1leHBvcnR0eXBlID1yZWRlZiBAKi8KKyNkZWZpbmUJX19QQk1fTkJJVFMJCSg4ICogc2l6ZW9mIChfX3BibV9iaXRzKSkKKyNkZWZpbmUJX19QQk1fSVgoZCkJCSgoZCkgLyBfX1BCTV9OQklUUykKKyNkZWZpbmUgX19QQk1fTUFTSyhkKQkJKChfX3BibV9iaXRzKSAxIDw8ICgoKHVuc2lnbmVkKShkKSkgJSBfX1BCTV9OQklUUykpCisvKkAtZXhwb3J0dHlwZSAtcmVkZWYgQCovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgX19wYm1fYml0cyBiaXRzWzFdOworfSBwYm1fc2V0OworLypAPWV4cG9ydHR5cGUgPXJlZGVmIEAqLworI2RlZmluZQlfX1BCTV9CSVRTKHNldCkJKChzZXQpLT5iaXRzKQorCisjZGVmaW5lCVBCTV9BTExPQyhkKQljYWxsb2MoX19QQk1fSVggKGQpICsgMSwgc2l6ZW9mKF9fcGJtX2JpdHMpKQorI2RlZmluZQlQQk1fRlJFRShzKQlfZnJlZShzKTsKKyNkZWZpbmUgUEJNX1NFVChkLCBzKSAgIChfX1BCTV9CSVRTIChzKVtfX1BCTV9JWCAoZCldIHw9IF9fUEJNX01BU0sgKGQpKQorI2RlZmluZSBQQk1fQ0xSKGQsIHMpICAgKF9fUEJNX0JJVFMgKHMpW19fUEJNX0lYIChkKV0gJj0gfl9fUEJNX01BU0sgKGQpKQorI2RlZmluZSBQQk1fSVNTRVQoZCwgcykgKChfX1BCTV9CSVRTIChzKVtfX1BCTV9JWCAoZCldICYgX19QQk1fTUFTSyAoZCkpICE9IDApCisKK2V4dGVybiB2b2lkIHBvcHRKbHUzMmxwYWlyKC8qQG51bGxAKi8gY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCAqcGMsIHVpbnQzMl90ICpwYikKKyAgICAgICAgLypAbW9kaWZpZXMgKnBjLCAqcGJAKi87CisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBUeXBlZGVmJ3MgZm9yIHN0cmluZyBhbmQgYXJyYXkgb2Ygc3RyaW5ncy4KKyAqLworLypALWV4cG9ydHR5cGVAKi8KK3R5cGVkZWYgY29uc3QgY2hhciAqIHBvcHRTdHJpbmc7Cit0eXBlZGVmIHBvcHRTdHJpbmcgKiBwb3B0QXJndjsKKy8qQD1leHBvcnR0eXBlQCovCisKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBBIHVuaW9uIHRvIHNpbXBsaWZ5IG9wdC0+YXJnIGFjY2VzcyB3aXRob3V0IGNhc3RpbmcuCisgKi8KKy8qQC1leHBvcnR0eXBlIC1maWVsZHVzZUAqLwordHlwZWRlZiB1bmlvbiBwb3B0QXJnX3UgeworLypAc2hhcmVkQCovCisgICAgdm9pZCAqIHB0cjsKKyAgICBpbnQgKiBpbnRwOworICAgIHNob3J0ICogc2hvcnRwOworICAgIGxvbmcgKiBsb25ncDsKKyAgICBsb25nIGxvbmcgKiBsb25nbG9uZ3A7CisgICAgZmxvYXQgKiBmbG9hdHA7CisgICAgZG91YmxlICogZG91YmxlcDsKKyAgICBjb25zdCBjaGFyICoqIGFyZ3Y7CisgICAgcG9wdENhbGxiYWNrVHlwZSBjYjsKKy8qQHNoYXJlZEAqLworICAgIHBvcHRPcHRpb24gb3B0OworfSBwb3B0QXJnOworLypAPWV4cG9ydHR5cGUgPWZpZWxkdXNlQCovCisKKy8qQC1leHBvcnR2YXJAKi8KKy8qQHVuY2hlY2tlZEAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfcG9wdEFyZ01hc2s7CisvKkB1bmNoZWNrZWRAKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX3BvcHRHcm91cE1hc2s7CisvKkA9ZXhwb3J0dmFyQCovCisKKyNkZWZpbmUJcG9wdEFyZ1R5cGUoX29wdCkJKChfb3B0KS0+YXJnSW5mbyAmIF9wb3B0QXJnTWFzaykKKyNkZWZpbmUJcG9wdEdyb3VwKF9vcHQpCQkoKF9vcHQpLT5hcmdJbmZvICYgX3BvcHRHcm91cE1hc2spCisKKyNkZWZpbmUJRl9JU1NFVChfb3B0LCBfRkxBRykJKChfb3B0KS0+YXJnSW5mbyAmIFBPUFRfQVJHRkxBR18jI19GTEFHKQorI2RlZmluZQlMRl9JU1NFVChfRkxBRykJCShhcmdJbmZvICYgUE9QVF9BUkdGTEFHXyMjX0ZMQUcpCisjZGVmaW5lCUNCRl9JU1NFVChfb3B0LCBfRkxBRykJKChfb3B0KS0+YXJnSW5mbyAmIFBPUFRfQ0JGTEFHXyMjX0ZMQUcpCisKKy8qIFhYWCBzaWNrIGhhY2sgdG8gcHJlc2VydmUgcHJldGVuc2Ugb2YgYSBwb3B0LTEueCBBQkkuICovCisjZGVmaW5lCXBvcHRTdWJzdGl0dXRlSGVscEkxOE4ob3B0KSBcCisgIHsgLypALW9ic2VydmVydHJhbnNAKi8gXAorICAgIGlmICgob3B0KSA9PSBwb3B0SGVscE9wdGlvbnMpIChvcHQpID0gcG9wdEhlbHBPcHRpb25zSTE4TjsgXAorICAgIC8qQD1vYnNlcnZlcnRyYW5zQCovIH0KKworc3RydWN0IG9wdGlvblN0YWNrRW50cnkgeworICAgIGludCBhcmdjOworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgcG9wdEFyZ3YgYXJndjsKKy8qQG9ubHlAKi8gLypAbnVsbEAqLworICAgIHBibV9zZXQgKiBhcmdiOworICAgIGludCBuZXh0OworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgY2hhciAqIG5leHRBcmc7CisvKkBvYnNlcnZlckAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqIG5leHRDaGFyQXJnOworLypAZGVwZW5kZW50QCovIC8qQG51bGxAKi8KKyAgICBwb3B0SXRlbSBjdXJyQWxpYXM7CisgICAgaW50IHN0dWZmZWQ7Cit9OworCitzdHJ1Y3QgcG9wdENvbnRleHRfcyB7CisgICAgc3RydWN0IG9wdGlvblN0YWNrRW50cnkgb3B0aW9uU3RhY2tbUE9QVF9PUFRJT05fREVQVEhdOworLypAZGVwZW5kZW50QCovCisgICAgc3RydWN0IG9wdGlvblN0YWNrRW50cnkgKiBvczsKKy8qQG93bmVkQCovIC8qQG51bGxAKi8KKyAgICBwb3B0QXJndiBsZWZ0b3ZlcnM7CisgICAgaW50IG51bUxlZnRvdmVyczsKKyAgICBpbnQgbmV4dExlZnRvdmVyOworLypAa2VlcEAqLworICAgIGNvbnN0IHN0cnVjdCBwb3B0T3B0aW9uICogb3B0aW9uczsKKyAgICBpbnQgcmVzdExlZnRvdmVyOworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqIGFwcE5hbWU7CisvKkBvbmx5QCovIC8qQG51bGxAKi8KKyAgICBwb3B0SXRlbSBhbGlhc2VzOworICAgIGludCBudW1BbGlhc2VzOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKKy8qQG93bmVkQCovIC8qQG51bGxAKi8KKyAgICBwb3B0SXRlbSBleGVjczsKKyAgICBpbnQgbnVtRXhlY3M7CisvKkBvbmx5QCovIC8qQG51bGxAKi8KKyAgICBwb3B0QXJndiBmaW5hbEFyZ3Y7CisgICAgaW50IGZpbmFsQXJndkNvdW50OworICAgIGludCBmaW5hbEFyZ3ZBbGxvY2VkOworLypAbnVsbEAqLworICAgIGludCAoKm1haW5jYWxsKSAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKy8qQGRlcGVuZGVudEAqLyAvKkBudWxsQCovCisgICAgcG9wdEl0ZW0gZG9FeGVjOworLypAb25seUAqLyAvKkBudWxsQCovCisgICAgY29uc3QgY2hhciAqIGV4ZWNQYXRoOworICAgIGludCBleGVjQWJzb2x1dGU7CisvKkBvbmx5QCovIC8qQHJlbG51bGxAKi8KKyAgICBjb25zdCBjaGFyICogb3RoZXJIZWxwOworLypAbnVsbEAqLworICAgIHBibV9zZXQgKiBhcmdfc3RyaXA7Cit9OworCisjaWYgZGVmaW5lZChQT1BUX2ZwcmludGYpCisjZGVmaW5lCVBPUFRfZGdldHRleHQJZGdldHRleHQKKyNlbHNlCisjaWZkZWYgSEFWRV9JQ09OVgorI2luY2x1ZGUgPGljb252Lmg+CisjaWYgZGVmaW5lZChfX0xDTElOVF9fKQorLypALWRlY2x1bmRlZiAtaW5jb25kZWZzIEAqLworZXh0ZXJuIC8qQG9ubHlAKi8gaWNvbnZfdCBpY29udl9vcGVuKGNvbnN0IGNoYXIgKl9fdG9jb2RlLCBjb25zdCBjaGFyICpfX2Zyb21jb2RlKQorCS8qQCovOworCitleHRlcm4gc2l6ZV90IGljb252KGljb252X3QgX19jZCwgLypAbnVsbEAqLyBjaGFyICoqIF9faW5idWYsCisJCSAgICAvKkBudWxsQCovIC8qQG91dEAqLyBzaXplX3QgKiBfX2luYnl0ZXNsZWZ0LAorCQkgICAgLypAbnVsbEAqLyAvKkBvdXRAKi8gY2hhciAqKiBfX291dGJ1ZiwKKwkJICAgIC8qQG51bGxAKi8gLypAb3V0QCovIHNpemVfdCAqIF9fb3V0Ynl0ZXNsZWZ0KQorCS8qQG1vZGlmaWVzIF9fY2QsCisJCSpfX2luYnVmLCAqX19pbmJ5dGVzbGVmdCwgKl9fb3V0YnVmLCAqX19vdXRieXRlc2xlZnQgQCovOworCitleHRlcm4gaW50IGljb252X2Nsb3NlKC8qQG9ubHlAKi8gaWNvbnZfdCBfX2NkKQorCS8qQG1vZGlmaWVzIF9fY2QgQCovOworLypAPWRlY2x1bmRlZiA9aW5jb25kZWZzIEAqLworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTEFOR0lORk9fSAorI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisjaWYgZGVmaW5lZChfX0xDTElOVF9fKQorLypALWRlY2x1bmRlZiAtaW5jb25kZWZzIEAqLworZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkKKwkvKkAqLzsKKy8qQD1kZWNsdW5kZWYgPWluY29uZGVmcyBAKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfRENHRVRURVhUKSAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorY2hhciAqUE9QVF9kZ2V0dGV4dChjb25zdCBjaGFyICogZG9tLCBjb25zdCBjaGFyICogc3RyKQorCS8qQCovOworI2VuZGlmCisKK2ludCAgIFBPUFRfZnByaW50ZiAoRklMRSogc3RyZWFtLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKwkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCisJLypAbW9kaWZpZXMgc3RyZWFtLCBmaWxlU3lzdGVtIEAqLzsKKyNlbmRpZgkvKiAhZGVmaW5lZChQT1BUX2ZwcmludGYpICovCisKK2NvbnN0IGNoYXIgKlBPUFRfcHJldl9jaGFyICgvKkByZXR1cm5lZEAqLyBjb25zdCBjaGFyICpzdHIpCisJLypAKi87CisKK2NvbnN0IGNoYXIgKlBPUFRfbmV4dF9jaGFyICgvKkByZXR1cm5lZEAqLyBjb25zdCBjaGFyICpzdHIpCisJLypAKi87CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFCTEVfTkxTKSAmJiBkZWZpbmVkKEhBVkVfTElCSU5UTF9IKQorI2luY2x1ZGUgPGxpYmludGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFCTEVfTkxTKSAmJiBkZWZpbmVkKEhBVkVfR0VUVEVYVCkgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKKyNkZWZpbmUgXyhmb28pIGdldHRleHQoZm9vKQorI2Vsc2UKKyNkZWZpbmUgXyhmb28pIGZvbworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEVOQUJMRV9OTFMpICYmIGRlZmluZWQoSEFWRV9EQ0dFVFRFWFQpICYmICFkZWZpbmVkKF9fTENMSU5UX18pCisjZGVmaW5lIERfKGRvbSwgc3RyKSBQT1BUX2RnZXR0ZXh0KGRvbSwgc3RyKQorI2RlZmluZSBQT1BUXyhmb28pIERfKCJwb3B0IiwgZm9vKQorI2Vsc2UKKyNkZWZpbmUgRF8oZG9tLCBzdHIpIHN0cgorI2RlZmluZSBQT1BUXyhmb28pIGZvbworI2VuZGlmCisKKyNkZWZpbmUgTl8oZm9vKSBmb28KKwpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3BvcHRwYXJzZS5jIGIvcG9wdC0xLjE2L3BvcHRwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOTZjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvcG9wdHBhcnNlLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qKiBcaW5ncm91cCBwb3B0CisgKiBcZmlsZSBwb3B0L3BvcHRwYXJzZS5jCisgKi8KKworLyogKEMpIDE5OTgtMjAwMiBSZWQgSGF0LCBJbmMuIC0tIExpY2Vuc2luZyBkZXRhaWxzIGFyZSBpbiB0aGUgQ09QWUlORworICAgZmlsZSBhY2NvbXBhbnlpbmcgcG9wdCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYXZhaWxhYmxlIGZyb20gCisgICBmdHA6Ly9mdHAucnBtLm9yZy9wdWIvcnBtL2Rpc3QuICovCisKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworI2RlZmluZSBQT1BUX0FSR1ZfQVJSQVlfR1JPV19ERUxUQSA1CisKK2ludCBwb3B0RHVwQXJndihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCWludCAqIGFyZ2NQdHIsIGNvbnN0IGNoYXIgKioqIGFyZ3ZQdHIpCit7CisgICAgc2l6ZV90IG5iID0gKGFyZ2MgKyAxKSAqIHNpemVvZigqYXJndik7CisgICAgY29uc3QgY2hhciAqKiBhcmd2MjsKKyAgICBjaGFyICogZHN0OworICAgIGludCBpOworCisgICAgaWYgKGFyZ2MgPD0gMCB8fCBhcmd2ID09IE5VTEwpCS8qIFhYWCBjYW4ndCBoYXBwZW4gKi8KKwlyZXR1cm4gUE9QVF9FUlJPUl9OT0FSRzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJaWYgKGFyZ3ZbaV0gPT0gTlVMTCkKKwkgICAgcmV0dXJuIFBPUFRfRVJST1JfTk9BUkc7CisJbmIgKz0gc3RybGVuKGFyZ3ZbaV0pICsgMTsKKyAgICB9CisJCisgICAgZHN0ID0gbWFsbG9jKG5iKTsKKyAgICBpZiAoZHN0ID09IE5VTEwpCQkJLyogWFhYIGNhbid0IGhhcHBlbiAqLworCXJldHVybiBQT1BUX0VSUk9SX01BTExPQzsKKyAgICBhcmd2MiA9ICh2b2lkICopIGRzdDsKKyAgICBkc3QgKz0gKGFyZ2MgKyAxKSAqIHNpemVvZigqYXJndik7CisgICAgKmRzdCA9ICdcMCc7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJYXJndjJbaV0gPSBkc3Q7CisJZHN0ID0gc3RwY3B5KGRzdCwgYXJndltpXSk7CisJZHN0Kys7CS8qIHRyYWlsaW5nIE5VTCAqLworICAgIH0KKyAgICBhcmd2MlthcmdjXSA9IE5VTEw7CisKKyAgICBpZiAoYXJndlB0cikgeworCSphcmd2UHRyID0gYXJndjI7CisgICAgfSBlbHNlIHsKKwlmcmVlKGFyZ3YyKTsKKwlhcmd2MiA9IE5VTEw7CisgICAgfQorICAgIGlmIChhcmdjUHRyKQorCSphcmdjUHRyID0gYXJnYzsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHBvcHRQYXJzZUFyZ3ZTdHJpbmcoY29uc3QgY2hhciAqIHMsIGludCAqIGFyZ2NQdHIsIGNvbnN0IGNoYXIgKioqIGFyZ3ZQdHIpCit7CisgICAgY29uc3QgY2hhciAqIHNyYzsKKyAgICBjaGFyIHF1b3RlID0gJ1wwJzsKKyAgICBpbnQgYXJndkFsbG9jZWQgPSBQT1BUX0FSR1ZfQVJSQVlfR1JPV19ERUxUQTsKKyAgICBjb25zdCBjaGFyICoqIGFyZ3YgPSBtYWxsb2Moc2l6ZW9mKCphcmd2KSAqIGFyZ3ZBbGxvY2VkKTsKKyAgICBpbnQgYXJnYyA9IDA7CisgICAgc2l6ZV90IGJ1ZmxlbiA9IHN0cmxlbihzKSArIDE7CisgICAgY2hhciAqIGJ1ZiwgKiBidWZPcmlnID0gTlVMTDsKKyAgICBpbnQgcmMgPSBQT1BUX0VSUk9SX01BTExPQzsKKworICAgIGlmIChhcmd2ID09IE5VTEwpIHJldHVybiByYzsKKyAgICBidWYgPSBidWZPcmlnID0gY2FsbG9jKChzaXplX3QpMSwgYnVmbGVuKTsKKyAgICBpZiAoYnVmID09IE5VTEwpIHsKKwlmcmVlKGFyZ3YpOworCXJldHVybiByYzsKKyAgICB9CisgICAgYXJndlthcmdjXSA9IGJ1ZjsKKworICAgIGZvciAoc3JjID0gczsgKnNyYyAhPSAnXDAnOyBzcmMrKykgeworCWlmIChxdW90ZSA9PSAqc3JjKSB7CisJICAgIHF1b3RlID0gJ1wwJzsKKwl9IGVsc2UgaWYgKHF1b3RlICE9ICdcMCcpIHsKKwkgICAgaWYgKCpzcmMgPT0gJ1xcJykgeworCQlzcmMrKzsKKwkJaWYgKCEqc3JjKSB7CisJCSAgICByYyA9IFBPUFRfRVJST1JfQkFEUVVPVEU7CisJCSAgICBnb3RvIGV4aXQ7CisJCX0KKwkJaWYgKCpzcmMgIT0gcXVvdGUpICpidWYrKyA9ICdcXCc7CisJICAgIH0KKwkgICAgKmJ1ZisrID0gKnNyYzsKKwl9IGVsc2UgaWYgKF9pc3NwYWNlcHRyKHNyYykpIHsKKwkgICAgaWYgKCphcmd2W2FyZ2NdICE9ICdcMCcpIHsKKwkJYnVmKyssIGFyZ2MrKzsKKwkJaWYgKGFyZ2MgPT0gYXJndkFsbG9jZWQpIHsKKwkJICAgIGFyZ3ZBbGxvY2VkICs9IFBPUFRfQVJHVl9BUlJBWV9HUk9XX0RFTFRBOworCQkgICAgYXJndiA9IHJlYWxsb2MoYXJndiwgc2l6ZW9mKCphcmd2KSAqIGFyZ3ZBbGxvY2VkKTsKKwkJICAgIGlmIChhcmd2ID09IE5VTEwpIGdvdG8gZXhpdDsKKwkJfQorCQlhcmd2W2FyZ2NdID0gYnVmOworCSAgICB9CisJfSBlbHNlIHN3aXRjaCAoKnNyYykgeworCSAgY2FzZSAnIic6CisJICBjYXNlICdcJyc6CisJICAgIHF1b3RlID0gKnNyYzsKKwkgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisJICBjYXNlICdcXCc6CisJICAgIHNyYysrOworCSAgICBpZiAoISpzcmMpIHsKKwkJcmMgPSBQT1BUX0VSUk9SX0JBRFFVT1RFOworCQlnb3RvIGV4aXQ7CisJICAgIH0KKwkgICAgLypAZmFsbHRocm91Z2hAKi8KKwkgIGRlZmF1bHQ6CisJICAgICpidWYrKyA9ICpzcmM7CisJICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBpZiAoc3RybGVuKGFyZ3ZbYXJnY10pKSB7CisJYXJnYysrLCBidWYrKzsKKyAgICB9CisKKyAgICByYyA9IHBvcHREdXBBcmd2KGFyZ2MsIGFyZ3YsIGFyZ2NQdHIsIGFyZ3ZQdHIpOworCitleGl0OgorICAgIGlmIChidWZPcmlnKSBmcmVlKGJ1Zk9yaWcpOworICAgIGlmIChhcmd2KSBmcmVlKGFyZ3YpOworICAgIHJldHVybiByYzsKK30KKworLyogc3RpbGwgaW4gdGhlIGRldiBzdGFnZS4KKyAqIHJldHVybiB2YWx1ZXMsIHBlcmhhcHMgMT09IGZpbGUgZXJybworICogMj09IGxpbmUgdG8gbG9uZworICogMz09IHVtbS4uLi4gbW9yZT8KKyAqLworaW50IHBvcHRDb25maWdGaWxlVG9TdHJpbmcoRklMRSAqZnAsIGNoYXIgKiogYXJnc3RycCwKKwkJLypAdW51c2VkQCovIFVOVVNFRChpbnQgZmxhZ3MpKQoreworICAgIGNoYXIgbGluZVs5OTldOworICAgIGNoYXIgKiBhcmdzdHI7CisgICAgY2hhciAqIHA7CisgICAgY2hhciAqIHE7CisgICAgY2hhciAqIHg7CisgICAgc2l6ZV90IHQ7CisgICAgc2l6ZV90IGFyZ3ZsZW4gPSAwOworICAgIHNpemVfdCBtYXhsaW5lbGVuID0gc2l6ZW9mKGxpbmUpOworICAgIHNpemVfdCBsaW5lbGVuOworICAgIHNpemVfdCBtYXhhcmd2bGVuID0gKHNpemVfdCk0ODA7CisKKyAgICAqYXJnc3RycCA9IE5VTEw7CisKKyAgICAvKiAgIHwgICB0aGlzX2lzICAgPSAgIG91cl9saW5lCisgICAgICoJICAgICBwICAgICAgICAgICAgIHEgICAgICB4CisgICAgICovCisKKyAgICBpZiAoZnAgPT0gTlVMTCkKKwlyZXR1cm4gUE9QVF9FUlJPUl9OVUxMQVJHOworCisgICAgYXJnc3RyID0gY2FsbG9jKG1heGFyZ3ZsZW4sIHNpemVvZigqYXJnc3RyKSk7CisgICAgaWYgKGFyZ3N0ciA9PSBOVUxMKSByZXR1cm4gUE9QVF9FUlJPUl9NQUxMT0M7CisKKyAgICB3aGlsZSAoZmdldHMobGluZSwgKGludCltYXhsaW5lbGVuLCBmcCkgIT0gTlVMTCkgeworCXAgPSBsaW5lOworCisJLyogbG9vcCB1bnRpbCBmaXJzdCBub24tc3BhY2UgY2hhciBvciBFT0wgKi8KKwl3aGlsZSggKnAgIT0gJ1wwJyAmJiBfaXNzcGFjZXB0cihwKSApCisJICAgIHArKzsKKworCWxpbmVsZW4gPSBzdHJsZW4ocCk7CisJaWYgKGxpbmVsZW4gPj0gbWF4bGluZWxlbi0xKSB7CisJICAgIGZyZWUoYXJnc3RyKTsKKwkgICAgcmV0dXJuIFBPUFRfRVJST1JfT1ZFUkZMT1c7CS8qIFhYWCBsaW5lIHRvbyBsb25nICovCisJfQorCisJaWYgKCpwID09ICdcMCcgfHwgKnAgPT0gJ1xuJykgY29udGludWU7CS8qIGxpbmUgaXMgZW1wdHkgKi8KKwlpZiAoKnAgPT0gJyMnKSBjb250aW51ZTsJCS8qIGNvbW1lbnQgbGluZSAqLworCisJcSA9IHA7CisKKwl3aGlsZSAoKnEgIT0gJ1wwJyAmJiAoIV9pc3NwYWNlcHRyKHEpKSAmJiAqcSAhPSAnPScpCisJICAgIHErKzsKKworCWlmIChfaXNzcGFjZXB0cihxKSkgeworCSAgICAvKiBhIHNwYWNlIGFmdGVyIHRoZSBuYW1lLCBmaW5kIG5leHQgbm9uIHNwYWNlICovCisJICAgICpxKys9J1wwJzsKKwkgICAgd2hpbGUoICpxICE9ICdcMCcgJiYgX2lzc3BhY2VwdHIocSkgKSBxKys7CisJfQorCWlmICgqcSA9PSAnXDAnKSB7CisJICAgIC8qIHNpbmdsZSBjb21tYW5kIGxpbmUgb3B0aW9uIChpZSwgbm8gbmFtZT12YWwsIGp1c3QgbmFtZSkgKi8KKwkgICAgcVstMV0gPSAnXDAnOwkJLyoga2lsbCBvZmYgbmV3bGluZSBmcm9tIGZnZXRzKCkgY2FsbCAqLworCSAgICBhcmd2bGVuICs9ICh0ID0gKHNpemVfdCkocSAtIHApKSArIChzaXplb2YoIiAtLSIpLTEpOworCSAgICBpZiAoYXJndmxlbiA+PSBtYXhhcmd2bGVuKSB7CisJCW1heGFyZ3ZsZW4gPSAodCA+IG1heGFyZ3ZsZW4pID8gdCoyIDogbWF4YXJndmxlbioyOworCQlhcmdzdHIgPSByZWFsbG9jKGFyZ3N0ciwgbWF4YXJndmxlbik7CisJCWlmIChhcmdzdHIgPT0gTlVMTCkgcmV0dXJuIFBPUFRfRVJST1JfTUFMTE9DOworCSAgICB9CisJICAgIHN0cmNhdChhcmdzdHIsICIgLS0iKTsKKwkgICAgc3RyY2F0KGFyZ3N0ciwgcCk7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoKnEgIT0gJz0nKQorCSAgICBjb250aW51ZTsJLyogWFhYIGZvciBub3csIHNpbGVudGx5IGlnbm9yZSBib2d1cyBsaW5lICovCisJCQorCS8qICpxIGlzIGFuIGVxdWFsIHNpZ24uICovCisJKnErKyA9ICdcMCc7CisKKwkvKiBmaW5kIG5leHQgbm9uLXNwYWNlIGxldHRlciBvZiB2YWx1ZSAqLworCXdoaWxlICgqcSAhPSAnXDAnICYmIF9pc3NwYWNlcHRyKHEpKQorCSAgICBxKys7CisJaWYgKCpxID09ICdcMCcpCisJICAgIGNvbnRpbnVlOwkvKiBYWFggc2lsZW50bHkgaWdub3JlIG1pc3NpbmcgdmFsdWUgKi8KKworCS8qIG5vdywgbG9vcCBhbmQgc3RyaXAgYWxsIGVuZGluZyB3aGl0ZXNwYWNlICovCisJeCA9IHAgKyBsaW5lbGVuOworCXdoaWxlIChfaXNzcGFjZXB0cigtLXgpKQorCSAgICAqeCA9ICdcMCc7CS8qIG51bGwgb3V0IGxhc3QgY2hhciBpZiBzcGFjZSAoaW5jbHVkaW5nIGZnZXRzKCkgTkwpICovCisKKwkvKiByZXN0IG9mIGxpbmUgYWNjZXB0ICovCisJdCA9IChzaXplX3QpKHggLSBwKTsKKwlhcmd2bGVuICs9IHQgKyAoc2l6ZW9mKCInIC0tPSciKS0xKTsKKwlpZiAoYXJndmxlbiA+PSBtYXhhcmd2bGVuKSB7CisJICAgIG1heGFyZ3ZsZW4gPSAodCA+IG1heGFyZ3ZsZW4pID8gdCoyIDogbWF4YXJndmxlbioyOworCSAgICBhcmdzdHIgPSByZWFsbG9jKGFyZ3N0ciwgbWF4YXJndmxlbik7CisJICAgIGlmIChhcmdzdHIgPT0gTlVMTCkgcmV0dXJuIFBPUFRfRVJST1JfTUFMTE9DOworCX0KKwlzdHJjYXQoYXJnc3RyLCAiIC0tIik7CisJc3RyY2F0KGFyZ3N0ciwgcCk7CisJc3RyY2F0KGFyZ3N0ciwgIj1cIiIpOworCXN0cmNhdChhcmdzdHIsIHEpOworCXN0cmNhdChhcmdzdHIsICJcIiIpOworICAgIH0KKworICAgICphcmdzdHJwID0gYXJnc3RyOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3N5c3RlbS5oIGIvcG9wdC0xLjE2L3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzU4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvc3lzdGVtLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qKgorICogXGZpbGUgcG9wdC9zeXN0ZW0uaAorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZChfX0xDTElOVF9fKQorLypALWRlY2x1bmRlZkAqLworLypAdW5jaGVja2VkQCovCitleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKKy8qQHVuY2hlY2tlZEAqLworZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CisvKkA9ZGVjbHVuZGVmQCovCisjZW5kaWYKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKy8qIFhYWCBpc3NwYWNlKDMpIGhhcyBpMThuIGVuY29kaW5nIHNpZ25lZG5lc3NzIGlzc3VlcyBvbiBTb2xhcmlzLiAqLworI2RlZmluZQlfaXNzcGFjZXB0cihfY2hwKQlpc3NwYWNlKChpbnQpKCoodW5zaWduZWQgY2hhciAqKShfY2hwKSkpCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZmRlZiBIQVZFX01DSEVDS19ICisjaW5jbHVkZSA8bWNoZWNrLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKEhBVkVfVU5JU1REX0gpICYmICFkZWZpbmVkKF9fTENMSU5UX18pCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmZGVmIF9fTmVYVAorLyogYWNjZXNzIG1hY3JvcyBhcmUgbm90IGRlY2xhcmVkIGluIG5vbiBwb3NpeCBtb2RlIGluIHVuaXN0ZC5oIC0KKyBkb24ndCB0cnkgdG8gdXNlIHBvc2l4IG9uIE5lWFRzdGVwIDMuMyAhICovCisjaW5jbHVkZSA8bGliYy5oPgorI2VuZGlmCisKKy8qQC1pbmNvbmRlZnNAKi8KKy8qQG1heWV4aXRAKi8gLypAb25seUAqLyAvKkBvdXRAKi8gLypAdW51c2VkQCovCit2b2lkICogeG1hbGxvYyAoc2l6ZV90IHNpemUpCisJLypAZ2xvYmFscyBlcnJubyBAKi8KKwkvKkBlbnN1cmVzIG1heFNldChyZXN1bHQpID09IChzaXplIC0gMSkgQCovCisJLypAbW9kaWZpZXMgZXJybm8gQCovOworCisvKkBtYXlleGl0QCovIC8qQG9ubHlAKi8gLypAdW51c2VkQCovCit2b2lkICogeGNhbGxvYyAoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkKKwkvKkBlbnN1cmVzIG1heFNldChyZXN1bHQpID09IChubWVtYiAtIDEpIEAqLworCS8qQCovOworCisvKkBtYXlleGl0QCovIC8qQG9ubHlAKi8gLypAdW51c2VkQCovCit2b2lkICogeHJlYWxsb2MgKC8qQG51bGxAKi8gLypAb25seUAqLyB2b2lkICogcHRyLCBzaXplX3Qgc2l6ZSkKKwkvKkBlbnN1cmVzIG1heFNldChyZXN1bHQpID09IChzaXplIC0gMSkgQCovCisJLypAbW9kaWZpZXMgKnB0ciBAKi87CisKKy8qQG1heWV4aXRAKi8gLypAb25seUAqLyAvKkB1bnVzZWRAKi8KK2NoYXIgKiB4c3RyZHVwIChjb25zdCBjaGFyICpzdHIpCisJLypAKi87CisvKkA9aW5jb25kZWZzQCovCisKKyNpZiAhZGVmaW5lZChIQVZFX1NUUENQWSkKKy8qIENvcHkgU1JDIHRvIERFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1wwJyBpbiBERVNULiAgKi8KK3N0YXRpYyBpbmxpbmUgY2hhciAqIHN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqIHNyYykgeworICAgIHJlZ2lzdGVyIGNoYXIgKmQgPSBkZXN0OworICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnMgPSBzcmM7CisKKyAgICBkbworCSpkKysgPSAqczsKKyAgICB3aGlsZSAoKnMrKyAhPSAnXDAnKTsKKyAgICByZXR1cm4gZCAtIDE7Cit9CisjZW5kaWYKKworLyogTWVtb3J5IGFsbG9jYXRpb24gdmlhIG1hY3JvIGRlZnMgdG8gZ2V0IG1lYW5pbmdmdWwgbG9jYXRpb25zIGZyb20gbXRyYWNlKCkgKi8KKyNpZiBkZWZpbmVkKEhBVkVfTUNIRUNLX0gpICYmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lCXZtZWZhaWwoKQkoZnByaW50ZihzdGRlcnIsICJ2aXJ0dWFsIG1lbW9yeSBleGhhdXN0ZWQuXG4iKSwgZXhpdChFWElUX0ZBSUxVUkUpLCBOVUxMKQorI2RlZmluZQl4bWFsbG9jKF9zaXplKSAJCShtYWxsb2MoX3NpemUpID8gOiB2bWVmYWlsKCkpCisjZGVmaW5lCXhjYWxsb2MoX25tZW1iLCBfc2l6ZSkJKGNhbGxvYygoX25tZW1iKSwgKF9zaXplKSkgPyA6IHZtZWZhaWwoKSkKKyNkZWZpbmUJeHJlYWxsb2MoX3B0ciwgX3NpemUpCShyZWFsbG9jKChfcHRyKSwgKF9zaXplKSkgPyA6IHZtZWZhaWwoKSkKKyNkZWZpbmUgeHN0cmR1cChfc3RyKSAgIChzdHJjcHkoKG1hbGxvYyhzdHJsZW4oX3N0cikrMSkgPyA6IHZtZWZhaWwoKSksIChfc3RyKSkpCisjZWxzZQorI2RlZmluZQl4bWFsbG9jKF9zaXplKSAJCW1hbGxvYyhfc2l6ZSkKKyNkZWZpbmUJeGNhbGxvYyhfbm1lbWIsIF9zaXplKQljYWxsb2MoKF9ubWVtYiksIChfc2l6ZSkpCisjZGVmaW5lCXhyZWFsbG9jKF9wdHIsIF9zaXplKQlyZWFsbG9jKChfcHRyKSwgKF9zaXplKSkKKyNkZWZpbmUJeHN0cmR1cChfc3RyKQlzdHJkdXAoX3N0cikKKyNlbmRpZiAgLyogZGVmaW5lZChIQVZFX01DSEVDS19IKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAqLworCisjaWYgZGVmaW5lZChIQVZFX19fU0VDVVJFX0dFVEVOVikgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKKyNkZWZpbmUJZ2V0ZW52KF9zKQlfX3NlY3VyZV9nZXRlbnYoX3MpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX2F0dHJpYnV0ZV9fKQorI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpIAorI2VuZGlmCisjZGVmaW5lIFVOVVNFRCh4KSB4IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorCisjaW5jbHVkZSAicG9wdC5oIgpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3RkaWN0LmMgYi9wb3B0LTEuMTYvdGRpY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmUwODU5Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3RkaWN0LmMKQEAgLTAsMCArMSwxMzIgQEAKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInBvcHQuaCIKKworc3RhdGljIGludCBfZGVidWcgPSAwOworc3RhdGljIGludCBfdmVyYm9zZSA9IDE7CitzdGF0aWMgY29uc3QgY2hhciAqIGRpY3RmbiA9ICIvdXNyL3NoYXJlL2RpY3Qvd29yZHMiOworc3RhdGljIHBvcHRCaXRzIGRpY3RiaXRzID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIHRvdGFsOworICAgIHVuc2lnbmVkIGhpdHM7CisgICAgdW5zaWduZWQgbWlzc2VzOworfSBlOworCitzdGF0aWMgaW50IGxvYWREaWN0KGNvbnN0IGNoYXIgKiBmbiwgcG9wdEJpdHMgKiBhcCkKK3sKKyAgICBjaGFyIGJbQlVGU0laXTsKKyAgICBzaXplX3QgbmIgPSBzaXplb2YoYik7CisgICAgRklMRSAqIGZwID0gZm9wZW4oZm4sICJyIik7CisgICAgY2hhciAqIHQsICp0ZTsKKyAgICBpbnQgbmxpbmVzID0gLTE7CisKKyAgICBpZiAoZnAgPT0gTlVMTCB8fCBmZXJyb3IoZnApKSBnb3RvIGV4aXQ7CisKKyAgICBubGluZXMgPSAwOworICAgIHdoaWxlICgodCA9IGZnZXRzKGIsIG5iLCBmcCkpICE9IE5VTEwpIHsKKwl3aGlsZSAoKnQgJiYgaXNzcGFjZSgqdCkpIHQrKzsKKwlpZiAoKnQgPT0gJyMnKSBjb250aW51ZTsKKwl0ZSA9IHQgKyBzdHJsZW4odCk7CisJd2hpbGUgKHRlLS0gPiB0ICYmIGlzc3BhY2UoKnRlKSkgKnRlID0gJ1wwJzsKKwlpZiAoKnQgPT0gJ1wwJykgY29udGludWU7CisJaWYgKGFwKSB7CitpZiAoX2RlYnVnKQorZnByaW50ZihzdGRlcnIsICI9PT4gcG9wdFNhdmVCaXRzKCVwLCBcIiVzXCIpXG4iLCAqYXAsIHQpOworCSAgICAodm9pZCkgcG9wdFNhdmVCaXRzKGFwLCAwLCB0KTsKKwl9CisJbmxpbmVzKys7CisgICAgfQorZXhpdDoKKyAgICBpZiAoZnApICh2b2lkKSBmY2xvc2UoZnApOworICAgIHJldHVybiBubGluZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb25zW10gPSB7CisgIHsgImRlYnVnIiwgJ2QnLCBQT1BUX0JJVF9TRVR8UE9QVF9BUkdGTEFHX1RPR0dMRSwgJl9kZWJ1ZywgMSwKKyAgICAgICAgIlNldCBkZWJ1Z2dpbmcuIiwgTlVMTCB9LAorICB7ICJ2ZXJib3NlIiwgJ3YnLCBQT1BUX0JJVF9TRVR8UE9QVF9BUkdGTEFHX1RPR0dMRSwgJl92ZXJib3NlLCAxLAorICAgICAgICAiU2V0IHZlcmJvc2l0eS4iLCBOVUxMIH0sCisKKyAgUE9QVF9BVVRPQUxJQVMKKyAgUE9QVF9BVVRPSEVMUAorICBQT1BUX1RBQkxFRU5ECit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQoreworICAgIHBvcHRDb250ZXh0IG9wdENvbiA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqKiBhdiA9IE5VTEw7CisgICAgcG9wdEJpdHMgYXZiaXRzID0gTlVMTDsKKyAgICBpbnQgZWMgPSAyOwkJLyogYXNzdW1lIGZhaWx1cmUgKi8KKyAgICBpbnQgcmM7CisKKyNpZiBkZWZpbmVkKEhBVkVfTUNIRUNLX0gpICYmIGRlZmluZWQoSEFWRV9NVFJBQ0UpCisgICAgbXRyYWNlKCk7ICAgLyogVHJhY2UgbWFsbG9jIG9ubHkgaWYgTUFMTE9DX1RSQUNFPW10cmFjZS1vdXRwdXQtZmlsZS4gKi8KKyNlbmRpZgorCisgICAgLyogWFhYIFNjYWxlIHRoZSBCbG9vbSBmaWx0ZXJzIGluIHBvcHQuICovCisgICAgaWYgKChyYyA9IGxvYWREaWN0KGRpY3RmbiwgTlVMTCkpIDw9IDApCisJZ290byBleGl0OworICAgIF9wb3B0Qml0c0sgPSAyOworICAgIF9wb3B0Qml0c00gPSAwOworICAgIF9wb3B0Qml0c04gPSBfcG9wdEJpdHNLICogcmM7CisKKyAgICBvcHRDb24gPSBwb3B0R2V0Q29udGV4dCgidGRpY3QiLCBhcmdjLCBhcmd2LCBvcHRpb25zLCAwKTsKKworICAgIC8qIFJlYWQgYWxsIHRoZSBvcHRpb25zIChpZiBhbnkpLiAqLworICAgIHdoaWxlICgocmMgPSBwb3B0R2V0TmV4dE9wdChvcHRDb24pKSA+IDApIHsKKyAgICAgICAgY2hhciAqIG9wdEFyZyA9IHBvcHRHZXRPcHRBcmcob3B0Q29uKTsKKwlpZiAob3B0QXJnKSBmcmVlKG9wdEFyZyk7CisgICAgICAgIHN3aXRjaCAocmMpIHsKKyAgICAgICAgZGVmYXVsdDoJZ290byBleGl0OwlicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocmMgPCAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRkaWN0OiAlczogJXNcbiIsCisgICAgICAgICAgICAgICAgcG9wdEJhZE9wdGlvbihvcHRDb24sIFBPUFRfQkFET1BUSU9OX05PQUxJQVMpLAorICAgICAgICAgICAgICAgIHBvcHRTdHJlcnJvcihyYykpOworCWdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiAoKHJjID0gbG9hZERpY3QoZGljdGZuLCAmZGljdGJpdHMpKSA8PSAwKQorCWdvdG8gZXhpdDsKKworICAgIGF2ID0gcG9wdEdldEFyZ3Mob3B0Q29uKTsKKyAgICBpZiAoKHJjID0gcG9wdEJpdHNBcmdzKG9wdENvbiwgJmF2Yml0cykpICE9IDApCisJZ290byBleGl0OworICAgIGlmIChhdmJpdHMpIHsKKwlwb3B0Qml0cyBJYml0cyA9IE5VTEw7CisJKHZvaWQpIHBvcHRCaXRzVW5pb24oJkliaXRzLCBkaWN0Yml0cyk7CisJcmMgPSBwb3B0Qml0c0ludGVyc2VjdCgmSWJpdHMsIGF2Yml0cyk7CisJZnByaW50ZihzdGRvdXQsICI9PT09PSAlcyB3b3JkcyBhcmUgaW4gJXNcbiIsIChyYyA/ICJTb21lIiA6ICJObyIpLCBkaWN0Zm4pOworCWlmIChJYml0cykgZnJlZShJYml0cyk7CisgICAgfQorICAgIGlmIChhdiAmJiBhdmJpdHMpCisgICAgd2hpbGUgKCphdikgeworCXJjID0gcG9wdEJpdHNDaGsoZGljdGJpdHMsICphdik7CisJaWYgKHJjIDwgMCkgZ290byBleGl0OworCWUudG90YWwrKzsKKwlpZiAocmMgPiAwKSB7CisJICAgIGlmIChfdmVyYm9zZSkKKwkJZnByaW50ZihzdGRvdXQsICIlczpcdFlFU1xuIiwgKmF2KTsKKwkgICAgZS5oaXRzKys7CisJfSBlbHNlIHsKKwkgICAgaWYgKF92ZXJib3NlKQorCQlmcHJpbnRmKHN0ZG91dCwgIiVzOlx0Tk9cbiIsICphdik7CisJICAgIGUubWlzc2VzKys7CisJfQorCWF2Kys7CisgICAgfQorCisgICAgZWMgPSAwOworCitleGl0OgorICAgIGZwcmludGYoc3Rkb3V0LCAiPT09PT0gcG9wdEJpdHMgTjoldSBNOiV1IEs6JXUgKCV1S2IpIHRvdGFsKCV1KSA9IGhpdHMoJXUpICsgbWlzc2VzKCV1KVxuIiwKKwlfcG9wdEJpdHNOLCBfcG9wdEJpdHNNLCBfcG9wdEJpdHNLLCAoKChfcG9wdEJpdHNNLzgpKzEpKzEwMjMpLzEwMjQsIGUudG90YWwsIGUuaGl0cywgZS5taXNzZXMpOworICAgIGlmIChhdmJpdHMpIGZyZWUoYXZiaXRzKTsKKyAgICBvcHRDb24gPSBwb3B0RnJlZUNvbnRleHQob3B0Q29uKTsKKyNpZiBkZWZpbmVkKEhBVkVfTUNIRUNLX0gpICYmIGRlZmluZWQoSEFWRV9NVFJBQ0UpCisgICAgbXVudHJhY2UoKTsgICAvKiBUcmFjZSBtYWxsb2Mgb25seSBpZiBNQUxMT0NfVFJBQ0U9bXRyYWNlLW91dHB1dC1maWxlLiAqLworI2VuZGlmCisgICAgcmV0dXJuIGVjOworfQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3Rlc3QtcG9wdHJjIGIvcG9wdC0xLjE2L3Rlc3QtcG9wdHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNTM3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvdGVzdC1wb3B0cmMKQEAgLTAsMCArMSwxMyBAQAordGVzdDEgYWxpYXMgLS1zaW1wbGUgLS1hcmcyIFwKKwktLVBPUFRkZXNjPSQic2ltcGxlIGRlc2NyaXB0aW9uIiAtLVBPUFRhcmdzPSQiQVJHIgordGVzdDEgYWxpYXMgLS10d28gLS1hcmcxIC0tYXJnMiBhbGlhcwordGVzdDEgYWxpYXMgLS10YWtlcmVzdCAtLQordGVzdDEgYWxpYXMgLVQgLS1hcmcyCit0ZXN0MSBhbGlhcyAtTyAtLWFyZzEKKwordGVzdDEgYWxpYXMgLS1ncmFiIC0tYXJnMiAiJ2ZvbyAhIzorJyIKK3Rlc3QxIGFsaWFzIC0tZ3JhYmJhciAtLWdyYWIgYmFyCisKK3Rlc3QxIGV4ZWMgLS1lY2hvLWFyZ3MgL2Jpbi9lY2hvCit0ZXN0MSBhbGlhcyAtZSAtLWVjaG8tYXJncwordGVzdDEgZXhlYyAtYSAvYmluL2VjaG8KZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi90ZXN0LXBvcHRyYy5pbiBiL3BvcHQtMS4xNi90ZXN0LXBvcHRyYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDUzNzBmCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3Rlc3QtcG9wdHJjLmluCkBAIC0wLDAgKzEsMTMgQEAKK3Rlc3QxIGFsaWFzIC0tc2ltcGxlIC0tYXJnMiBcCisJLS1QT1BUZGVzYz0kInNpbXBsZSBkZXNjcmlwdGlvbiIgLS1QT1BUYXJncz0kIkFSRyIKK3Rlc3QxIGFsaWFzIC0tdHdvIC0tYXJnMSAtLWFyZzIgYWxpYXMKK3Rlc3QxIGFsaWFzIC0tdGFrZXJlc3QgLS0KK3Rlc3QxIGFsaWFzIC1UIC0tYXJnMgordGVzdDEgYWxpYXMgLU8gLS1hcmcxCisKK3Rlc3QxIGFsaWFzIC0tZ3JhYiAtLWFyZzIgIidmb28gISM6KyciCit0ZXN0MSBhbGlhcyAtLWdyYWJiYXIgLS1ncmFiIGJhcgorCit0ZXN0MSBleGVjIC0tZWNoby1hcmdzIC9iaW4vZWNobwordGVzdDEgYWxpYXMgLWUgLS1lY2hvLWFyZ3MKK3Rlc3QxIGV4ZWMgLWEgL2Jpbi9lY2hvCmRpZmYgLS1naXQgYS9wb3B0LTEuMTYvdGVzdDEuYyBiL3BvcHQtMS4xNi90ZXN0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNTg2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvdGVzdDEuYwpAQCAtMCwwICsxLDM2MiBAQAorLyogKEMpIDE5OTgtMjAwMiBSZWQgSGF0LCBJbmMuIC0tIExpY2Vuc2luZyBkZXRhaWxzIGFyZSBpbiB0aGUgQ09QWUlORworICAgZmlsZSBhY2NvbXBhbnlpbmcgcG9wdCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYXZhaWxhYmxlIGZyb20KKyAgIGZ0cDovL2Z0cC5ycG0ub3JnL3B1Yi9ycG0vZGlzdC4gKi8KKworI2luY2x1ZGUgInN5c3RlbS5oIgorCisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBpbnQgcGFzczIgPSAwOworc3RhdGljIHZvaWQgb3B0aW9uX2NhbGxiYWNrKC8qQHVudXNlZEAqLyBVTlVTRUQocG9wdENvbnRleHQgY29uKSwKKwkJLypAdW51c2VkQCovIFVOVVNFRChlbnVtIHBvcHRDYWxsYmFja1JlYXNvbiByZWFzb24pLAorCQljb25zdCBzdHJ1Y3QgcG9wdE9wdGlvbiAqIG9wdCwKKwkJY2hhciAqIGFyZywgdm9pZCAqIGRhdGEpCisJLypAZ2xvYmFscyBmaWxlU3lzdGVtIEAqLworCS8qQG1vZGlmaWVzIGZpbGVTeXN0ZW0gQCovCit7CisgICAgaWYgKHBhc3MyKQorCWZwcmludGYoc3Rkb3V0LCAiY2FsbGJhY2s6ICVjICVzICVzICIsIG9wdC0+dmFsLCAoY2hhciAqKSBkYXRhLCBhcmcpOworfQorCisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBpbnQgYXJnMSA9IDA7CisvKkB1bmNoZWNrZWRAKi8gLypAb2JzZXJ2ZXJAKi8KK3N0YXRpYyBjaGFyICogYXJnMiA9ICIobm9uZSkiOworLypAdW5jaGVja2VkQCovCitzdGF0aWMgaW50IGFyZzMgPSAwOworLypAdW5jaGVja2VkQCovCitzdGF0aWMgaW50IGluYyA9IDA7CisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBpbnQgc2hvcnRvcHQgPSAwOworCisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBpbnQgYVZhbCA9IDE0MTQyMTsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGludCBiVmFsID0gMTQxNDIxOworLypAdW5jaGVja2VkQCovCitzdGF0aWMgdW5zaWduZWQgaW50IGFGbGFnID0gMHg4YWNlVTsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIHVuc2lnbmVkIGludCBiRmxhZyA9IDB4OGFjZVU7CisKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIHNob3J0IGFTaG9ydCA9IChzaG9ydCk0NTIzOworLypAdW5jaGVja2VkQCovCitzdGF0aWMgc2hvcnQgYlNob3J0ID0gKHNob3J0KTQ1MjM7CisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBpbnQgYUludCA9IDI3MTgyODsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGludCBiSW50ID0gMjcxODI4OworLypAdW5jaGVja2VkQCovCitzdGF0aWMgbG9uZyBhTG9uZyA9IDczODkwNTYwOUw7CisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBsb25nIGJMb25nID0gNzM4OTA1NjA5TDsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGxvbmcgbG9uZyBhTG9uZ0xvbmcgPSA3Mzg5MDU2MDlMTDsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGxvbmcgbG9uZyBiTG9uZ0xvbmcgPSA3Mzg5MDU2MDlMTDsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGZsb2F0IGFGbG9hdCA9IDMuMTQxNTkyNjUzNTsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGZsb2F0IGJGbG9hdCA9IDMuMTQxNTkyNjUzNTsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGRvdWJsZSBhRG91YmxlID0gOS44Njk2MDQ0MDEwODkzNTg2MTg4MzsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIGRvdWJsZSBiRG91YmxlID0gOS44Njk2MDQ0MDEwODkzNTg2MTg4MzsKKworLypAdW5jaGVja2VkQCovIC8qQG9ubHlAKi8gLypAbnVsbEAqLworc3RhdGljIGNvbnN0IGNoYXIgKiogYUFyZ3YgPSBOVUxMOworLypAdW5jaGVja2VkQCovIC8qQG9ubHlAKi8gLypAbnVsbEAqLworc3RhdGljIHZvaWQgKiBhQml0cyA9IE5VTEw7CisvKkB1bmNoZWNrZWRAKi8gLypAb2JzZXJ2ZXJAKi8KK3N0YXRpYyBjb25zdCBjaGFyICphdHRyaWJ1dGVzW10gPSB7CisgICAgImZvbyIsICJiYXIiLCAiYmF6IiwgImJpbmciLCAiYmFuZyIsICJib29tIgorfTsKKy8qQHVuY2hlY2tlZEAqLworc3RhdGljIHNpemVfdCBuYXR0cmlidXRlcyA9IChzaXplb2YoYXR0cmlidXRlcykgLyBzaXplb2YoYXR0cmlidXRlc1swXSkpOworCisvKkB1bmNoZWNrZWRAKi8gLypAbnVsbEAqLworc3RhdGljIGNoYXIgKiBvU3RyID0gKGNoYXIgKikgLTE7CisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBpbnQgc2luZ2xlRGFzaCA9IDA7CisKKy8qQHVuY2hlY2tlZEAqLyAvKkBvYnNlcnZlckAqLworc3RhdGljIGNoYXIgKiBsU3RyID0KKyJUaGlzIHRlc3RzIGRlZmF1bHQgc3RyaW5ncyBhbmQgZXhjZWVkcyB0aGUgLi4uIGxpbWl0LiAiCisiMTIzNDU2Nzg5KzEyMzQ1Njc4OSsxMjM0NTY3ODkrMTIzNDU2Nzg5KzEyMzQ1Njc4OSsgIgorIjEyMzQ1Njc4OSsxMjM0NTY3ODkrMTIzNDU2Nzg5KzEyMzQ1Njc4OSsxMjM0NTY3ODkrICIKKyIxMjM0NTY3ODkrMTIzNDU2Nzg5KzEyMzQ1Njc4OSsxMjM0NTY3ODkrMTIzNDU2Nzg5KyAiCisiMTIzNDU2Nzg5KzEyMzQ1Njc4OSsxMjM0NTY3ODkrMTIzNDU2Nzg5KzEyMzQ1Njc4OSsgIjsKKy8qQHVuY2hlY2tlZEAqLyAvKkBudWxsQCovCitzdGF0aWMgY2hhciAqIG5TdHIgPSBOVUxMOyAKKworLypAdW5jaGVja2VkQCovCitzdGF0aWMgc3RydWN0IHBvcHRPcHRpb24gbW9yZUNhbGxiYWNrQXJnc1tdID0geworICB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0NBTExCQUNLfFBPUFRfQ0JGTEFHX0lOQ19EQVRBLAorCSh2b2lkICopb3B0aW9uX2NhbGxiYWNrLCAwLAorCU5VTEwsIE5VTEwgfSwKKyAgeyAiY2IyIiwgJ2MnLCBQT1BUX0FSR19TVFJJTkcsIE5VTEwsIChpbnQpJ2MnLAorCSJUZXN0IGFyZ3VtZW50IGNhbGxiYWNrcyIsIE5VTEwgfSwKKyAgUE9QVF9UQUJMRUVORAorfTsKKworLypAdW5jaGVja2VkQCovCitzdGF0aWMgc3RydWN0IHBvcHRPcHRpb24gY2FsbGJhY2tBcmdzW10gPSB7CisgIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfQ0FMTEJBQ0ssICh2b2lkICopb3B0aW9uX2NhbGxiYWNrLCAwLAorCSJzYW1wbGVkYXRhIiwgTlVMTCB9LAorICB7ICJjYiIsICdjJywgUE9QVF9BUkdfU1RSSU5HLCBOVUxMLCAoaW50KSdjJywKKwkiVGVzdCBhcmd1bWVudCBjYWxsYmFja3MiLCBOVUxMIH0sCisgIHsgImxvbmdvcHQiLCAnXDAnLCAwLCBOVUxMLCAoaW50KSdsJywKKwkiVW51c2VkIG9wdGlvbiBmb3IgaGVscCB0ZXN0aW5nIiwgTlVMTCB9LAorICBQT1BUX1RBQkxFRU5ECit9OworCisvKkB1bmNoZWNrZWRAKi8KK3N0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBtb3JlQXJnc1tdID0geworICB7ICJpbmMiLCAnSScsIDAsICZpbmMsIDAsICJBbiBpbmNsdWRlZCBhcmd1bWVudCIsIE5VTEwgfSwKKyAgUE9QVF9UQUJMRUVORAorfTsKKworLypAdW5jaGVja2VkQCovCitzdGF0aWMgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9uc1tdID0geworICB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsICZtb3JlQ2FsbGJhY2tBcmdzLCAwLAorCSJhcmcgZm9yIGNiMiIsIE5VTEwgfSwKKyAgeyAiYXJnMSIsICdcMCcsIDAsICZhcmcxLCAwLCAiRmlyc3QgYXJndW1lbnQgd2l0aCBhIHJlYWxseSBsb25nIgorCSAgICAiIGRlc2NyaXB0aW9uLiBBZnRlciBhbGwsIHdlIGhhdmUgdG8gdGVzdCBhcmd1bWVudCBoZWxwIgorCSAgICAiIHdyYXBwaW5nIHNvbWVob3csIHJpZ2h0PyIsIE5VTEwgfSwKKyAgeyAiYXJnMiIsICcyJywgUE9QVF9BUkdfU1RSSU5HIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFyZzIsIDAsCisJIkFub3RoZXIgYXJndW1lbnQiLCAiQVJHIiB9LAorICB7ICJhcmczIiwgJzMnLCBQT1BUX0FSR19JTlQsICZhcmczLCAwLAorCSJBIHRoaXJkIGFyZ3VtZW50IiwgIkFOQVJHIiB9LAorICB7ICJvbmVkYXNoIiwgJ1wwJywgUE9QVF9BUkdGTEFHX09ORURBU0gsICZzaG9ydG9wdCwgMCwKKwkiUE9QVF9BUkdGTEFHX09ORURBU0g6IE9wdGlvbiB0YWtlcyBhIHNpbmdsZSAtIiwgTlVMTCB9LAorICB7ICJoaWRkZW4iLCAnXDAnLCBQT1BUX0FSR19TVFJJTkcgfCBQT1BUX0FSR0ZMQUdfRE9DX0hJRERFTiwgTlVMTCwgMCwKKwkiUE9QVF9BUkdGTEFHX0hJRERFTjogQSBoaWRkZW4gb3B0aW9uICgtLWhlbHAgc2hvdWxkbid0IGRpc3BsYXkpIiwKKwlOVUxMIH0sCisgIHsgIm9wdGlvbmFsIiwgJ1wwJywgUE9QVF9BUkdfU1RSSU5HIHwgUE9QVF9BUkdGTEFHX09QVElPTkFMLCAmb1N0ciwgMCwKKwkiUE9QVF9BUkdGTEFHX09QVElPTkFMOiBUYWtlcyBhbiBvcHRpb25hbCBzdHJpbmcgYXJndW1lbnQiLCBOVUxMIH0sCisKKyAgeyAidmFsIiwgJ1wwJywgUE9QVF9BUkdfVkFMIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFWYWwsIDEyNTk5MiwKKwkiUE9QVF9BUkdfVkFMOiAxMjU5OTIgMTQxNDIxIiwgMH0sCisKKyAgeyAiaW50IiwgJ2knLCBQT1BUX0FSR19JTlQgfCBQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxULCAmYUludCwgMCwKKwkiUE9QVF9BUkdfSU5UOiAyNzE4MjgiLCBOVUxMIH0sCisgIHsgInNob3J0IiwgJ3MnLCBQT1BUX0FSR19TSE9SVCB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZhU2hvcnQsIDAsCisJIlBPUFRfQVJHX1NIT1JUOiA0NTIzIiwgTlVMTCB9LAorICB7ICJsb25nIiwgJ2wnLCBQT1BUX0FSR19MT05HIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFMb25nLCAwLAorCSJQT1BUX0FSR19MT05HOiA3Mzg5MDU2MDkiLCBOVUxMIH0sCisgIHsgImxvbmdsb25nIiwgJ0wnLCBQT1BUX0FSR19MT05HTE9ORyB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZhTG9uZ0xvbmcsIDAsCisJIlBPUFRfQVJHX0xPTkdMT05HOiA3Mzg5MDU2MDkiLCBOVUxMIH0sCisgIHsgImZsb2F0IiwgJ2YnLCBQT1BUX0FSR19GTE9BVCB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZhRmxvYXQsIDAsCisJIlBPUFRfQVJHX0ZMT0FUOiAzLjE0MTU5IiwgTlVMTCB9LAorICB7ICJkb3VibGUiLCAnZCcsIFBPUFRfQVJHX0RPVUJMRSB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZhRG91YmxlLCAwLAorCSJQT1BUX0FSR19ET1VCTEU6IDkuODY5NiIsIE5VTEwgfSwKKworICAgeyAicmFuZGludCIsICdcMCcsIFBPUFRfQVJHX0lOVHxQT1BUX0FSR0ZMQUdfUkFORE9NLCAmYUludCwgMCwKKwkiUE9QVF9BUkdGTEFHX1JBTkRPTTogZXhwZXJpbWVudGFsIiwgTlVMTCB9LAorICAgeyAicmFuZHNob3J0IiwgJ1wwJywgUE9QVF9BUkdfU0hPUlR8UE9QVF9BUkdGTEFHX1JBTkRPTSwgJmFTaG9ydCwgMCwKKwkiUE9QVF9BUkdGTEFHX1JBTkRPTTogZXhwZXJpbWVudGFsIiwgTlVMTCB9LAorICAgeyAicmFuZGxvbmciLCAnXDAnLCBQT1BUX0FSR19MT05HfFBPUFRfQVJHRkxBR19SQU5ET00sICZhTG9uZywgMCwKKwkiUE9QVF9BUkdGTEFHX1JBTkRPTTogZXhwZXJpbWVudGFsIiwgTlVMTCB9LAorICAgeyAicmFuZGxvbmdsb25nIiwgJ1wwJywgUE9QVF9BUkdfTE9OR0xPTkd8UE9QVF9BUkdGTEFHX1JBTkRPTSwgJmFMb25nTG9uZywgMCwKKwkiUE9QVF9BUkdGTEFHX1JBTkRPTTogZXhwZXJpbWVudGFsIiwgTlVMTCB9LAorCisgICB7ICJhcmd2IiwgJ1wwJywgUE9QVF9BUkdfQVJHViwgJmFBcmd2LCAwLAorCSJQT1BUX0FSR19BUkdWOiBhcHBlbmQgc3RyaW5nIHRvIGFyZ3YgYXJyYXkgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIsIlNUUklORyJ9LAorICAgeyAiYml0cyIsICdcMCcsIFBPUFRfQVJHX0JJVFNFVHxQT1BUX0FSR0ZMQUdfRE9DX0hJRERFTiwgJmFCaXRzLCAwLAorCSJQT1BUX0FSR19CSVRTRVQ6IGFkZCBzdHJpbmcgdG8gYml0IHNldCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIiwiU1RSSU5HIn0sCisKKyAgeyAiYml0c2V0IiwgJ1wwJywgUE9QVF9CSVRfU0VUIHwgUE9QVF9BUkdGTEFHX1RPR0dMRSB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZhRmxhZywgMHg3Nzc3LAorCSJQT1BUX0JJVF9TRVQ6IHw9IDB4Nzc3NyIsIDB9LAorICB7ICJiaXRjbHIiLCAnXDAnLCBQT1BUX0JJVF9DTFIgfCBQT1BUX0FSR0ZMQUdfVE9HR0xFIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFGbGFnLCAweGY4NDIsCisJIlBPUFRfQklUX0NMUjogJj0gfjB4Zjg0MiIsIDB9LAorICB7ICJiaXR4b3IiLCAnXDAnLCBQT1BUX0FSR19WQUwgfCBQT1BUX0FSR0ZMQUdfWE9SIHwgUE9QVF9BUkdGTEFHX1NIT1dfREVGQVVMVCwgJmFGbGFnLCAoMHg4YWNlXjB4ZmVlZCksCisJIlBPUFRfQVJHRkxBR19YT1I6IF49ICgweDhhY2VeMHhmZWVkKSIsIDB9LAorCisgIHsgIm5zdHIiLCAnXDAnLCBQT1BUX0FSR19TVFJJTkcgfCBQT1BUX0FSR0ZMQUdfU0hPV19ERUZBVUxULCAmblN0ciwgMCwKKwkiUE9QVF9BUkdfU1RSSU5HOiAobnVsbCkiLCBOVUxMfSwKKyAgeyAibHN0ciIsICdcMCcsIFBPUFRfQVJHX1NUUklORyB8IFBPUFRfQVJHRkxBR19TSE9XX0RFRkFVTFQsICZsU3RyLCAwLAorCSJQT1BUX0FSR19TVFJJTkc6IFwiMTIzNDU2Nzg5Li4uXCIiLCBOVUxMfSwKKworICB7IE5VTEwsICctJywgUE9QVF9BUkdfTk9ORSB8IFBPUFRfQVJHRkxBR19ET0NfSElEREVOLCAmc2luZ2xlRGFzaCwgMCwKKwlOVUxMLCBOVUxMIH0sCisgIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfSU5DTFVERV9UQUJMRSwgJm1vcmVBcmdzLCAwLAorCU5VTEwsIE5VTEwgfSwKKyAgeyBOVUxMLCAnXDAnLCBQT1BUX0FSR19JTkNMVURFX1RBQkxFLCAmY2FsbGJhY2tBcmdzLCAwLAorCSJDYWxsYmFjayBhcmd1bWVudHMiLCBOVUxMIH0sCisgIFBPUFRfQVVUT0FMSUFTCisgIFBPUFRfQVVUT0hFTFAKKyAgUE9QVF9UQUJMRUVORAorfTsKKworc3RhdGljIHZvaWQgcmVzZXRWYXJzKHZvaWQpCisJLypAZ2xvYmFscyBhcmcxLCBhcmcyLCBhcmczLCBpbmMsIHNob3J0b3B0LAorCQlhVmFsLCBhRmxhZywgYVNob3J0LCBhSW50LCBhTG9uZywgYUxvbmdMb25nLCBhRmxvYXQsIGFEb3VibGUsCisJCWFBcmd2LCBhQml0cywgb1N0ciwgc2luZ2xlRGFzaCwgcGFzczIgQCovCisJLypAbW9kaWZpZXMgYXJnMSwgYXJnMiwgYXJnMywgaW5jLCBzaG9ydG9wdCwKKwkJYVZhbCwgYUZsYWcsIGFTaG9ydCwgYUludCwgYUxvbmcsIGFMb25nTG9uZywgYUZsb2F0LCBhRG91YmxlLAorCQlhQXJndiwgYUJpdHMsIG9TdHIsIHNpbmdsZURhc2gsIHBhc3MyIEAqLworeworICAgIGFyZzEgPSAwOworICAgIGFyZzIgPSAiKG5vbmUpIjsKKyAgICBhcmczID0gMDsKKyAgICBpbmMgPSAwOworICAgIHNob3J0b3B0ID0gMDsKKworICAgIGFWYWwgPSBiVmFsOworICAgIGFGbGFnID0gYkZsYWc7CisKKyAgICBhU2hvcnQgPSBiU2hvcnQ7CisgICAgYUludCA9IGJJbnQ7CisgICAgYUxvbmcgPSBiTG9uZzsKKyAgICBhTG9uZ0xvbmcgPSBiTG9uZ0xvbmc7CisgICAgYUZsb2F0ID0gYkZsb2F0OworICAgIGFEb3VibGUgPSBiRG91YmxlOworCisgICAgaWYgKGFBcmd2KSB7CisJaW50IGk7CisJZm9yIChpID0gMDsgYUFyZ3ZbaV0gIT0gTlVMTDsgaSsrKSB7CisvKkAtdW5xdWFsaWZpZWR0cmFuc0AqLworCSAgICBmcmVlKCh2b2lkICopYUFyZ3ZbaV0pOworLypAPXVucXVhbGlmaWVkdHJhbnNAKi8KKwkgICAgYUFyZ3ZbaV0gPSBOVUxMOworCX0KKwlmcmVlKGFBcmd2KTsKKwlhQXJndiA9IE5VTEw7CisgICAgfQorICAgIGlmIChhQml0cykKKwkodm9pZCkgcG9wdEJpdHNDbHIoYUJpdHMpOworCisgICAgb1N0ciA9IChjaGFyICopIC0xOworCisgICAgc2luZ2xlRGFzaCA9IDA7CisgICAgcGFzczIgPSAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQorCS8qQGdsb2JhbHMgcGFzczIsIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCisJLypAbW9kaWZpZXMgcGFzczIsIGZpbGVTeXN0ZW0sIGludGVybmFsU3RhdGUgQCovCit7CisgICAgaW50IHJjOworICAgIGludCBlYyA9IDA7CisgICAgcG9wdENvbnRleHQgb3B0Q29uOworICAgIGNvbnN0IGNoYXIgKiogcmVzdDsKKyAgICBpbnQgaGVscCA9IDA7CisgICAgaW50IHVzYWdlID0gMDsKKworI2lmIGRlZmluZWQoSEFWRV9NQ0hFQ0tfSCkgJiYgZGVmaW5lZChIQVZFX01UUkFDRSkKKyAgICAvKkAtbW9kdW5jb24gLW5vZWZmZWN0dW5jb25AKi8KKyAgICBtdHJhY2UoKTsgICAvKiBUcmFjZSBtYWxsb2Mgb25seSBpZiBNQUxMT0NfVFJBQ0U9bXRyYWNlLW91dHB1dC1maWxlLiAqLworICAgIC8qQD1tb2R1bmNvbiA9bm9lZmZlY3R1bmNvbkAqLworI2VuZGlmCisKKy8qQC1tb2RvYnNlcnZlckAqLworICAgIHJlc2V0VmFycygpOworLypAPW1vZG9ic2VydmVyQCovCisvKkAtdGVtcHRyYW5zQCovCisgICAgb3B0Q29uID0gcG9wdEdldENvbnRleHQoInRlc3QxIiwgYXJnYywgYXJndiwgb3B0aW9ucywgMCk7CisvKkA9dGVtcHRyYW5zQCovCisgICAgKHZvaWQpIHBvcHRSZWFkQ29uZmlnRmlsZShvcHRDb24sICIuL3Rlc3QtcG9wdHJjIik7CisgICAgKHZvaWQpIHBvcHRSZWFkRGVmYXVsdENvbmZpZyhvcHRDb24sIDEpOworCisgICAgcG9wdFNldEV4ZWNQYXRoKG9wdENvbiwgIi4iLCAxKTsKKworI2lmIDEKKyAgICB3aGlsZSAoKHJjID0gcG9wdEdldE5leHRPcHQob3B0Q29uKSkgPiAwKQkvKiBSZWFkIGFsbCB0aGUgb3B0aW9ucyAuLi4gKi8KKwl7fTsKKworICAgIHBvcHRSZXNldENvbnRleHQob3B0Q29uKTsJCQkvKiAuLi4gYW5kIHRoZW4gc3RhcnQgb3Zlci4gKi8KKy8qQC1tb2RvYnNlcnZlckAqLworICAgIHJlc2V0VmFycygpOworLypAPW1vZG9ic2VydmVyQCovCisjZW5kaWYKKworICAgIHBhc3MyID0gMTsKKyAgICBpZiAoKHJjID0gcG9wdEdldE5leHRPcHQob3B0Q29uKSkgPCAtMSkgeworCWZwcmludGYoc3RkZXJyLCAidGVzdDE6IGJhZCBhcmd1bWVudCAlczogJXNcbiIsCisJCXBvcHRCYWRPcHRpb24ob3B0Q29uLCBQT1BUX0JBRE9QVElPTl9OT0FMSUFTKSwKKwkJcG9wdFN0cmVycm9yKHJjKSk7CisJZWMgPSAyOworCWdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiAoaGVscCkgeworCXBvcHRQcmludEhlbHAob3B0Q29uLCBzdGRvdXQsIDApOworCWdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKHVzYWdlKSB7CisJcG9wdFByaW50VXNhZ2Uob3B0Q29uLCBzdGRvdXQsIDApOworCWdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgImFyZzE6ICVkIGFyZzI6ICVzIiwgYXJnMSwgYXJnMik7CisKKyAgICBpZiAoYXJnMykKKwlmcHJpbnRmKHN0ZG91dCwgIiBhcmczOiAlZCIsIGFyZzMpOworICAgIGlmIChpbmMpCisJZnByaW50ZihzdGRvdXQsICIgaW5jOiAlZCIsIGluYyk7CisgICAgaWYgKHNob3J0b3B0KQorCWZwcmludGYoc3Rkb3V0LCAiIHNob3J0OiAlZCIsIHNob3J0b3B0KTsKKyAgICBpZiAoYVZhbCAhPSBiVmFsKQorCWZwcmludGYoc3Rkb3V0LCAiIGFWYWw6ICVkIiwgYVZhbCk7CisgICAgaWYgKGFGbGFnICE9IGJGbGFnKQorCWZwcmludGYoc3Rkb3V0LCAiIGFGbGFnOiAweCV4IiwgYUZsYWcpOworICAgIGlmIChhU2hvcnQgIT0gYlNob3J0KQorCWZwcmludGYoc3Rkb3V0LCAiIGFTaG9ydDogJWhkIiwgYVNob3J0KTsKKyAgICBpZiAoYUludCAhPSBiSW50KQorCWZwcmludGYoc3Rkb3V0LCAiIGFJbnQ6ICVkIiwgYUludCk7CisgICAgaWYgKGFMb25nICE9IGJMb25nKQorCWZwcmludGYoc3Rkb3V0LCAiIGFMb25nOiAlbGQiLCBhTG9uZyk7CisgICAgaWYgKGFMb25nTG9uZyAhPSBiTG9uZ0xvbmcpCisJZnByaW50ZihzdGRvdXQsICIgYUxvbmdMb25nOiAlbGxkIiwgYUxvbmdMb25nKTsKKy8qQC1yZWFsY29tcGFyZUAqLworICAgIGlmIChhRmxvYXQgIT0gYkZsb2F0KQorCWZwcmludGYoc3Rkb3V0LCAiIGFGbG9hdDogJWciLCAoZG91YmxlKWFGbG9hdCk7CisgICAgaWYgKGFEb3VibGUgIT0gYkRvdWJsZSkKKwlmcHJpbnRmKHN0ZG91dCwgIiBhRG91YmxlOiAlZyIsIGFEb3VibGUpOworLypAPXJlYWxjb21wYXJlQCovCisgICAgaWYgKGFBcmd2ICE9IE5VTEwpIHsKKwljb25zdCBjaGFyICoqYXYgPSBhQXJndjsKKwljb25zdCBjaGFyICogYXJnOworCWZwcmludGYoc3Rkb3V0LCAiIGFBcmd2OiIpOworCXdoaWxlICgoYXJnID0gKmF2KyspICE9IE5VTEwpCisJICAgIGZwcmludGYoc3Rkb3V0LCAiICVzIiwgYXJnKTsKKyAgICB9CisgICAgaWYgKGFCaXRzKSB7CisJY29uc3QgY2hhciAqIHNlcGFyYXRvciA9ICIgIjsKKwlzaXplX3QgaTsKKwlmcHJpbnRmKHN0ZG91dCwgIiBhQml0czoiKTsKKyAJZm9yIChpID0gMDsgaSA8IG5hdHRyaWJ1dGVzOyBpKyspIHsKKwkgICAgaWYgKCFwb3B0Qml0c0NoayhhQml0cywgYXR0cmlidXRlc1tpXSkpCisJCWNvbnRpbnVlOworCSAgICBmcHJpbnRmKHN0ZG91dCwgIiVzJXMiLCBzZXBhcmF0b3IsIGF0dHJpYnV0ZXNbaV0pOworCSAgICBzZXBhcmF0b3IgPSAiLCI7CisJfQorICAgIH0KKy8qQC1udWxscGFzc0AqLworICAgIGlmIChvU3RyICE9IChjaGFyICopLTEpCisJZnByaW50ZihzdGRvdXQsICIgb1N0cjogJXMiLCAob1N0ciA/IG9TdHIgOiAiKG5vbmUpIikpOworLypAPW51bGxwYXNzQCovCisgICAgaWYgKHNpbmdsZURhc2gpCisJZnByaW50ZihzdGRvdXQsICIgLSIpOworCisgICAgaWYgKHBvcHRQZWVrQXJnKG9wdENvbikgIT0gTlVMTCkgeworCXJlc3QgPSBwb3B0R2V0QXJncyhvcHRDb24pOworCWlmIChyZXN0KSB7CisJICAgIGZwcmludGYoc3Rkb3V0LCAiIHJlc3Q6Iik7CisJICAgIHdoaWxlICgqcmVzdCkgeworCQlmcHJpbnRmKHN0ZG91dCwgIiAlcyIsICpyZXN0KTsKKwkJcmVzdCsrOworCSAgICB9CisJfQorICAgIH0KKworICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKKworZXhpdDoKKyAgICBvcHRDb24gPSBwb3B0RnJlZUNvbnRleHQob3B0Q29uKTsKKyNpZiBkZWZpbmVkKEhBVkVfTUNIRUNLX0gpICYmIGRlZmluZWQoSEFWRV9NVFJBQ0UpCisgICAgLypALW1vZHVuY29uIC1ub2VmZmVjdHVuY29uQCovCisgICAgbXVudHJhY2UoKTsgICAvKiBUcmFjZSBtYWxsb2Mgb25seSBpZiBNQUxMT0NfVFJBQ0U9bXRyYWNlLW91dHB1dC1maWxlLiAqLworICAgIC8qQD1tb2R1bmNvbiA9bm9lZmZlY3R1bmNvbkAqLworI2VuZGlmCisgICAgcmV0dXJuIGVjOworfQpkaWZmIC0tZ2l0IGEvcG9wdC0xLjE2L3Rlc3QyLmMgYi9wb3B0LTEuMTYvdGVzdDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDE0YjkwCi0tLSAvZGV2L251bGwKKysrIGIvcG9wdC0xLjE2L3Rlc3QyLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgICAgUG9wdCBMaWJyYXJ5IFRlc3QgUHJvZ3JhbSBOdW1iZXIgVG9vIAorICAgIAorICAgIC0tPiAiYSByZWFsIHdvcmxkIHRlc3Qgb2YgcG9wdCBidWdzIiA8LS0KKworICAgIENvcHlyaWdodCAoQykgMTk5OSBVUyBJbnRlcmFjdGl2ZSwgSW5jLgorCisgICAgVGhpcyBwcm9ncmFtIGNhbiBiZSB1c2VkIHVuZGVyIHRoZSBHUEwgb3IgTEdQTCBhdCB5b3VyCisgICAgd2hpbSBhcyBsb25nIGFzIHRoaXMgQ29weXJpZ2h0IHJlbWFpbnMgYXR0YWNoZWQuICAKKyovCisKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworY2hhciAqUGF0aG5hbWVPZktleUZpbGUJCT0gTlVMTDsKK2NoYXIgKlBhdGhuYW1lT2ZPZmZlckZpbGUJPSBOVUxMOworCitjaGFyICp0eEhvc3QJCQk9IE5VTEw7CitpbnQgICB0eFNzbFBvcnQJCQk9IDQ0MzsKK2ludCAgIHR4U3RvcmVJZAkJCT0gMDsKKworY2hhciAqY29udGVudFByb3RvY29sCQk9IE5VTEw7CitjaGFyICpjb250ZW50SG9zdAkJPSBOVUxMOworaW50ICAgY29udGVudFBvcnQJCT0gODA7CitjaGFyICpjb250ZW50UGF0aAkJPSBOVUxMOworCitjaGFyICpkYlBhc3N3b3JkCQk9IE5VTEw7CitjaGFyICpkYlVzZXJOYW1lCQk9IE5VTEw7CisKK2NoYXIgKnJjZmlsZSA9ICJjcmVhdGV1c2VyLWRlZmF1bHRzIjsKK2NoYXIgKnVzZXJuYW1lPU5VTEw7CisKK2NoYXIgKnBhc3N3b3JkCQkJPSBOVUxMOworY2hhciAqZmlyc3RuYW1lCQkJPSBOVUxMOworY2hhciAqbGFzdG5hbWUJCQk9IE5VTEw7CitjaGFyICphZGRyMQkJCT0gTlVMTDsKK2NoYXIgKmFkZHIyCQkJPSBOVUxMOworY2hhciAqY2l0eQkJCT0gTlVMTDsKK2NoYXIgKnN0YXRlCQkJPSBOVUxMOworY2hhciAqcG9zdGFsCQkJPSBOVUxMOworY2hhciAqY291bnRyeQkJCT0gTlVMTDsKKworY2hhciAqZW1haWwJCQk9IE5VTEw7CisKK2NoYXIgKmRheXBob25lCQkJPSBOVUxMOworY2hhciAqZmF4CQkJPSBOVUxMOworCisKK2ludCAKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndikgeworCisgICAgcG9wdENvbnRleHQgb3B0Q29uOyAgIC8qIGNvbnRleHQgZm9yIHBhcnNpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMgKi8KKyAgICBzdHJ1Y3QgcG9wdE9wdGlvbiB1c2VyT3B0aW9uc1RhYmxlW10gPSB7CisgICAgICAgIHsgImZpcnN0IiwgJ2YnLCBQT1BUX0FSR19TVFJJTkcsICZmaXJzdG5hbWUsIDAsCisgICAgICAgICAgICAidXNlcidzIGZpcnN0IG5hbWUiLCAiZmlyc3QiIH0sCisgICAgICAgIHsgImxhc3QiLCAnbCcsIFBPUFRfQVJHX1NUUklORywgJmxhc3RuYW1lLCAwLAorICAgICAgICAgICAgInVzZXIncyBsYXN0IG5hbWUiLCAibGFzdCIgfSwKKyAgICAgICAgeyAidXNlcm5hbWUiLCAndScsIFBPUFRfQVJHX1NUUklORywgJnVzZXJuYW1lLCAwLAorICAgICAgICAgICAgInN5c3RlbSB1c2VyIG5hbWUiLCAidXNlciIgfSwKKyAgICAgICAgeyAicGFzc3dvcmQiLCAncCcsIFBPUFRfQVJHX1NUUklORywgJnBhc3N3b3JkLCAwLAorICAgICAgICAgICAgInN5c3RlbSBwYXNzd29yZCBuYW1lIiwgInBhc3N3b3JkIiB9LAorICAgICAgICB7ICJhZGRyMSIsICcxJywgUE9QVF9BUkdfU1RSSU5HLCAmYWRkcjEsIDAsCisgICAgICAgICAgICAibGluZSAxIG9mIGFkZHJlc3MiLCAiYWRkcjEiIH0sCisgICAgICAgIHsgImFkZHIyIiwgJzInLCBQT1BUX0FSR19TVFJJTkcsICZhZGRyMiwgMCwKKyAgICAgICAgICAgICJsaW5lIDIgb2YgYWRkcmVzcyIsICJhZGRyMiIgfSwKKyAgICAgICAgeyAiY2l0eSIsICdjJywgUE9QVF9BUkdfU1RSSU5HLCAmY2l0eSwgMCwKKyAgICAgICAgICAgICJjaXR5IiwgImNpdHkiIH0sCisgICAgICAgIHsgInN0YXRlIiwgJ3MnLCBQT1BUX0FSR19TVFJJTkcsICZzdGF0ZSwgMCwKKyAgICAgICAgICAgICJzdGF0ZSBvciBwcm92aW5jZSIsICJzdGF0ZSIgfSwKKyAgICAgICAgeyAicG9zdGFsIiwgJ1AnLCBQT1BUX0FSR19TVFJJTkcsICZwb3N0YWwsIDAsCisgICAgICAgICAgICAicG9zdGFsIG9yIHppcCBjb2RlIiwgInBvc3RhbCIgfSwKKyAgICAgICAgeyAiemlwIiwgJ3onLCBQT1BUX0FSR19TVFJJTkcsICZwb3N0YWwsIDAsCisgICAgICAgICAgICAicG9zdGFsIG9yIHppcCBjb2RlIiwgInBvc3RhbCIgfSwKKyAgICAgICAgeyAiY291bnRyeSIsICdDJywgUE9QVF9BUkdfU1RSSU5HLCAmY291bnRyeSwgMCwKKyAgICAgICAgICAgICJ0d28gbGV0dGVyIElTTyBjb3VudHJ5IGNvZGUiLCAiY291bnRyeSIgfSwKKyAgICAgICAgeyAiZW1haWwiLCAnZScsIFBPUFRfQVJHX1NUUklORywgJmVtYWlsLCAwLAorICAgICAgICAgICAgInVzZXIncyBlbWFpbCBhZGRyZXNzIiwgImVtYWlsIiB9LAorICAgICAgICB7ICJkYXlwaG9uZSIsICdkJywgUE9QVF9BUkdfU1RSSU5HLCAmZGF5cGhvbmUsIDAsCisgICAgICAgICAgICAiZGF5IHRpbWUgcGhvbmUgbnVtYmVyIiwgImRheXBob25lIiB9LAorICAgICAgICB7ICJmYXgiLCAnRicsIFBPUFRfQVJHX1NUUklORywgJmZheCwgMCwKKyAgICAgICAgICAgICJmYXggbnVtYmVyIiwgImZheCIgfSwKKyAgICAgICAgeyBOVUxMLCAwLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KKyAgICB9OworICAgIHN0cnVjdCBwb3B0T3B0aW9uIHRyYW5zYWN0T3B0aW9uc1RhYmxlW10gPSB7CisgICAgICAgIHsgImtleWZpbGUiLCAnXDAnLCBQT1BUX0FSR19TVFJJTkcsICZQYXRobmFtZU9mS2V5RmlsZSwgMCwKKyAgICAgICAgICAgICJ0cmFuc2FjdCBvZmZlciBrZXkgZmlsZSAoZmxhdF9PLmtmKSIsICJrZXktZmlsZSIgfSwKKyAgICAgICAgeyAib2ZmZXJmaWxlIiwgJ1wwJywgUE9QVF9BUkdfU1RSSU5HLCAmUGF0aG5hbWVPZk9mZmVyRmlsZSwgMCwKKyAgICAgICAgICAgICJvZmZlciB0ZW1wbGF0ZSBmaWxlIChvc2wub2ZyKSIsICJvZmZlci1maWxlIiB9LAorICAgICAgICB7ICJzdG9yZWlkIiwgJ1wwJywgUE9QVF9BUkdfSU5ULCAmdHhTdG9yZUlkLCAwLAorICAgICAgICAgICAgInN0b3JlIGlkIiwgInN0b3JlLWlkIiB9LAorICAgICAgICB7ICJyY2ZpbGUiLCAnXDAnLCBQT1BUX0FSR19TVFJJTkcsICZyY2ZpbGUsIDAsCisgICAgICAgICAgICAiZGVmYXVsdCBjb21tYW5kIGxpbmUgb3B0aW9ucyAoaW4gcG9wdCBmb3JtYXQpIiwgInJjZmlsZSIgfSwKKyAgICAgICAgeyAidHhob3N0IiwgJ1wwJywgUE9QVF9BUkdfU1RSSU5HLCAmdHhIb3N0LCAwLAorICAgICAgICAgICAgInRyYW5zYWN0IGhvc3QiLCAidHJhbnNhY3QtaG9zdCIgfSwKKyAgICAgICAgeyAidHhzc2xwb3J0IiwgJ1wwJywgUE9QVF9BUkdfSU5ULCAmdHhTc2xQb3J0LCAwLAorICAgICAgICAgICAgInRyYW5zYWN0IHNlcnZlciBzc2wgcG9ydCAiLCAidHJhbnNhY3Qgc3NsIHBvcnQiIH0sCisgICAgICAgIHsgImNuaG9zdCIsICdcMCcsIFBPUFRfQVJHX1NUUklORywgJmNvbnRlbnRIb3N0LCAwLAorICAgICAgICAgICAgImNvbnRlbnQgaG9zdCIsICJjb250ZW50LWhvc3QiIH0sCisgICAgICAgIHsgImNucGF0aCIsICdcMCcsIFBPUFRfQVJHX1NUUklORywgJmNvbnRlbnRQYXRoLCAwLAorICAgICAgICAgICAgImNvbnRlbnQgdXJsIHBhdGgiLCAiY29udGVudC1wYXRoIiB9LAorICAgICAgICB7IE5VTEwsIDAsIDAsIE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgcG9wdE9wdGlvbiBkYXRhYmFzZU9wdGlvbnNUYWJsZVtdID0geworICAgICAgICB7ICJkYnBhc3N3b3JkIiwgJ1wwJywgUE9QVF9BUkdfU1RSSU5HLCAmZGJQYXNzd29yZCwgMCwKKyAgICAgICAgICAgICJEYXRhYmFzZSBwYXNzd29yZCIsICJEQiBwYXNzd29yZCIgfSwKKyAgICAgICAgeyAiZGJ1c2VybmFtZSIsICdcMCcsIFBPUFRfQVJHX1NUUklORywgJmRiVXNlck5hbWUsIDAsCisgICAgICAgICAgICAiRGF0YWJhc2UgdXNlciBuYW1lIiwgIkRCIFVzZXJOYW1lIiB9LAorICAgICAgICB7IE5VTEwsIDAsIDAsIE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb25zVGFibGVbXSA9IHsKKwl7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsICBOVUxMLCAwLAorICAgICAgICAgICAgIlRyYW5zYWN0IE9wdGlvbnMgKG5vdCBhbGwgd2lsbCBhcHBseSkiLCBOVUxMIH0sCisJeyBOVUxMLCAnXDAnLCBQT1BUX0FSR19JTkNMVURFX1RBQkxFLCAgTlVMTCwgMCwKKyAgICAgICAgICAgICJUcmFuc2FjdCBEYXRhYmFzZSBOYW1lcyIsIE5VTEwgfSwKKwl7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsICBOVUxMLCAwLAorICAgICAgICAgICAgIlVzZXIgRmllbGRzIiwgTlVMTCB9LAorICAgICAgICBQT1BUX0FVVE9IRUxQCisgICAgICAgIHsgTlVMTCwgMCwgMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCB9CisgICAgfTsKKworICAgIG9wdGlvbnNUYWJsZVswXS5hcmcgPSB0cmFuc2FjdE9wdGlvbnNUYWJsZTsKKyAgICBvcHRpb25zVGFibGVbMV0uYXJnID0gZGF0YWJhc2VPcHRpb25zVGFibGU7CisgICAgb3B0aW9uc1RhYmxlWzJdLmFyZyA9IHVzZXJPcHRpb25zVGFibGU7CisKKyNpZiBkZWZpbmVkKEhBVkVfTUNIRUNLX0gpICYmIGRlZmluZWQoSEFWRV9NVFJBQ0UpCisgICAgbXRyYWNlKCk7ICAgLyogVHJhY2UgbWFsbG9jIG9ubHkgaWYgTUFMTE9DX1RSQUNFPW10cmFjZS1vdXRwdXQtZmlsZS4gKi8KKyNlbmRpZgorCisgICAgb3B0Q29uID0gcG9wdEdldENvbnRleHQoImNyZWF0ZXVzZXIiLCBhcmdjLCBhcmd2LCBvcHRpb25zVGFibGUsIDApOworICAgIHBvcHRSZWFkQ29uZmlnRmlsZShvcHRDb24sIHJjZmlsZSApOworCisgICAgLyogYWx0aG91Z2ggdGhlcmUgYXJlIG5vIG9wdGlvbnMgdG8gYmUgcGFyc2VkLCBjaGVjayBmb3IgLS1oZWxwICovCisgICAgcG9wdEdldE5leHRPcHQob3B0Q29uKTsKKworICAgIG9wdENvbiA9IHBvcHRGcmVlQ29udGV4dChvcHRDb24pOworCisgICAgcHJpbnRmKCAiZGJ1c2VybmFtZSAlc1x0ZGJwYXNzd29yZCAlc1xuIgorICAgICAgICAgICAgInR4aG9zdCAlc1x0dHhzc2xwb3J0ICVkXHR0eHN0b3JlaWQgJWRcdHBhdGhvZmtleWZpbGUgJXNcbiIKKwkgICAgInVzZXJuYW1lICVzXHRwYXNzd29yZCAlc1x0Zmlyc3RuYW1lICVzXHRsYXN0bmFtZSAlc1xuIgorCSAgICAiYWRkcjEgJXNcdGFkZHIyICVzXHRjaXR5ICVzXHRzdGF0ZSAlc1x0cG9zdGFsICVzXG4iCisJICAgICJjb3VudHJ5ICVzXHRlbWFpbCAlc1x0ZGF5cGhvbmUgJXNcdGZheCAlc1xuIiwKKyAgICAgICAgZGJVc2VyTmFtZSwgZGJQYXNzd29yZCwKKyAgICAgICAgdHhIb3N0LCB0eFNzbFBvcnQsIHR4U3RvcmVJZCwgUGF0aG5hbWVPZktleUZpbGUsCisgICAgICAgIHVzZXJuYW1lLCBwYXNzd29yZCwgZmlyc3RuYW1lLCBsYXN0bmFtZSwKKyAgICAgICAgYWRkcjEsYWRkcjIsIGNpdHksIHN0YXRlLCBwb3N0YWwsCisgICAgICAgIGNvdW50cnksIGVtYWlsLCBkYXlwaG9uZSwgZmF4KTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3BvcHQtMS4xNi90ZXN0aXQuc2ggYi9wb3B0LTEuMTYvdGVzdGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhN2I0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9wb3B0LTEuMTYvdGVzdGl0LnNoCkBAIC0wLDAgKzEsMTc5IEBACisjIS9iaW4vc2gKKworcnVuKCkgeworICAgIHByb2c9JDE7IHNoaWZ0CisgICAgbmFtZT0kMTsgc2hpZnQKKyAgICBhbnN3ZXI9JDE7IHNoaWZ0CisKKyAgICBlY2hvIFJ1bm5pbmcgdGVzdCAkbmFtZS4KKworICAgIHJlc3VsdD1gSE9NRT0kYnVpbGRkaXIgJGJ1aWxkZGlyLyRwcm9nICQqYAorICAgIGlmIFsgIiRhbnN3ZXIiICE9ICIkcmVzdWx0IiBdOyB0aGVuCisJZWNobyAiVGVzdCBcIiRwcm9nICQqXCIgZmFpbGVkIHdpdGg6IFwiJHJlc3VsdFwiICE9IFwiJGFuc3dlclwiICIKKwlleGl0IDIKKyAgICBmaQorfQorCitydW5fZGlmZigpIHsKKyAgICBwcm9nPSQxOyBzaGlmdAorICAgIG5hbWU9JDE7IHNoaWZ0CisgICAgaW5fZmlsZT0kMTsgc2hpZnQKKyAgICBhbnN3ZXJfZmlsZT0kMTsgc2hpZnQKKworICAgIG91dD0kYnVpbGRkaXIvdG1wLm91dAorICAgIGRpZmZfZmlsZT0kYnVpbGRkaXIvdG1wLmRpZmYKKworICAgIGVjaG8gUnVubmluZyB0ZXN0ICRuYW1lLgorCisgICAgJGJ1aWxkZGlyLyRwcm9nICRpbl9maWxlID4gJG91dAorICAgIHJldD0kPworICAgIGRpZmYgJG91dCAkYW5zd2VyX2ZpbGUgPiAkZGlmZl9maWxlCisgICAgZGlmZl9yZXQ9JD8KKworICAgIGlmIFsgIiRkaWZmX3JldCIgIT0gIjAiIF07IHRoZW4KKyAgICAgICBlY2hvICJUZXN0IFwiJG5hbWVcIiBmYWlsZWQgb3V0cHV0IGlzIGluICRvdXQsIGRpZmYgaXM6IgorICAgICAgIGNhdCAkZGlmZl9maWxlCisgICAgICAgZXhpdCAyCisgICAgZmkKKyAgICBybSAkb3V0ICRkaWZmX2ZpbGUKK30KKworYnVpbGRkaXI9YHB3ZGAKK3NyY2Rpcj0kYnVpbGRkaXIKK2NkICR7c3JjZGlyfQordGVzdDE9JHtidWlsZGRpcn0vdGVzdDEKK2VjaG8gIlJ1bm5pbmcgdGVzdHMgaW4gYHB3ZGAiCisKKyNtYWtlIC1xIHRlc3RjYXNlcworCitydW4gdGVzdDEgInRlc3QxIC0gMSIgImFyZzE6IDEgYXJnMjogKG5vbmUpIiAtLWFyZzEKK3J1biB0ZXN0MSAidGVzdDEgLSAyIiAiYXJnMTogMCBhcmcyOiBmb28iIC0tYXJnMiBmb28KK3J1biB0ZXN0MSAidGVzdDEgLSAzIiAiYXJnMTogMSBhcmcyOiBzb21ldGhpbmciIC0tYXJnMSAtLWFyZzIgc29tZXRoaW5nCitydW4gdGVzdDEgInRlc3QxIC0gNCIgImFyZzE6IDAgYXJnMjogYW5vdGhlciIgLS1zaW1wbGUgYW5vdGhlcgorcnVuIHRlc3QxICJ0ZXN0MSAtIDUiICJhcmcxOiAxIGFyZzI6IGFsaWFzIiAtLXR3bworcnVuIHRlc3QxICJ0ZXN0MSAtIDYiICJhcmcxOiAxIGFyZzI6IChub25lKSByZXN0OiAtLWFyZzIiIC0tYXJnMSAtLSAtLWFyZzIgCitydW4gdGVzdDEgInRlc3QxIC0gNyIgImFyZzE6IDAgYXJnMjogYWJjZCByZXN0OiAtLWFyZzEiIC0tc2ltcGxlIGFiY2QgLS0gLS1hcmcxIAorcnVuIHRlc3QxICJ0ZXN0MSAtIDgiICJhcmcxOiAxIGFyZzI6IChub25lKSByZXN0OiAtLWFyZzIiIC0tYXJnMSAtLXRha2VyZXN0IC0tYXJnMiAKK3J1biB0ZXN0MSAidGVzdDEgLSA5IiAiYXJnMTogMCBhcmcyOiBmb28iIC0yIGZvbworcnVuIHRlc3QxICJ0ZXN0MSAtIDEwIiAiYXJnMTogMCBhcmcyOiAobm9uZSkgYXJnMzogNTAiIC0zIDUwCitydW4gdGVzdDEgInRlc3QxIC0gMTEiICJhcmcxOiAwIGFyZzI6IGJhciIgLVQgYmFyCitydW4gdGVzdDEgInRlc3QxIC0gMTIiICJhcmcxOiAxIGFyZzI6IChub25lKSIgLU8gCitydW4gdGVzdDEgInRlc3QxIC0gMTMiICJhcmcxOiAxIGFyZzI6IGZvbyIgLU9UIGZvbworcnVuIHRlc3QxICJ0ZXN0MSAtIDE0IiAiYXJnMTogMCBhcmcyOiAobm9uZSkgaW5jOiAxIiAtLWluYworcnVuIHRlc3QxICJ0ZXN0MSAtIDE1IiAiYXJnMTogMCBhcmcyOiBmb28gaW5jOiAxIiAtSSAtLWFyZzIgZm9vCitQT1NJWF9NRV9IQVJERVI9MSA7IGV4cG9ydCBQT1NJWF9NRV9IQVJERVIKK3J1biB0ZXN0MSAidGVzdDEgLSAxNiIgImFyZzE6IDEgYXJnMjogKG5vbmUpIHJlc3Q6IGZvbyAtLWFyZzIgc29tZXRoaW5nIiAtLWFyZzEgZm9vIC0tYXJnMiBzb21ldGhpbmcKK3Vuc2V0IFBPU0lYX01FX0hBUkRFUgorUE9TSVhMWV9DT1JSRUNUPTEgOyBleHBvcnQgUE9TSVhMWV9DT1JSRUNUCitydW4gdGVzdDEgInRlc3QxIC0gMTciICJhcmcxOiAxIGFyZzI6IChub25lKSByZXN0OiBmb28gLS1hcmcyIHNvbWV0aGluZyIgLS1hcmcxIGZvbyAtLWFyZzIgc29tZXRoaW5nCit1bnNldCBQT1NJWExZX0NPUlJFQ1QKK3J1biB0ZXN0MSAidGVzdDEgLSAxOCIgImNhbGxiYWNrOiBjIHNhbXBsZWRhdGEgYmFyIGFyZzE6IDEgYXJnMjogKG5vbmUpIiAtLWFyZzEgLS1jYiBiYXIKK3J1biB0ZXN0MSAidGVzdDEgLSAxOSIgIiIgLS1lY2hvLWFyZ3MKK3J1biB0ZXN0MSAidGVzdDEgLSAyMCIgIi0tYXJnMSIgLS1lY2hvLWFyZ3MgLS1hcmcxCitydW4gdGVzdDEgInRlc3QxIC0gMjEiICItLWFyZzIgc29tZXRoaW5nIiAtVCBzb21ldGhpbmcgLWUKK3J1biB0ZXN0MSAidGVzdDEgLSAyMiIgIi0tYXJnMiBzb21ldGhpbmcgbW9yZSBhcmdzIiAtVCBzb21ldGhpbmcgLWEgbW9yZSBhcmdzCitydW4gdGVzdDEgInRlc3QxIC0gMjMiICItLWVjaG8tYXJncyAtYSIgLS1lY2hvLWFyZ3MgLWUgLWEKK3J1biB0ZXN0MSAidGVzdDEgLSAyNCIgImFyZzE6IDAgYXJnMjogKG5vbmUpIHNob3J0OiAxIiAtb25lZGFzaAorcnVuIHRlc3QxICJ0ZXN0MSAtIDI1IiAiYXJnMTogMCBhcmcyOiAobm9uZSkgc2hvcnQ6IDEiIC0tb25lZGFzaAorcnVuIHRlc3QxICJ0ZXN0MSAtIDI2IiAiY2FsbGJhY2s6IGMgYXJnIGZvciBjYjIgZm9vIGFyZzE6IDAgYXJnMjogKG5vbmUpIiAtLWNiMiBmb28KK3J1biB0ZXN0MSAidGVzdDEgLSAyNyIgImFyZzE6IDAgYXJnMjogKG5vbmUpIHJlc3Q6IC0iIC0KK3J1biB0ZXN0MSAidGVzdDEgLSAyOCIgImFyZzE6IDAgYXJnMjogZm9vIHJlc3Q6IC0iIC0gLTIgZm9vCitydW4gdGVzdDEgInRlc3QxIC0gMjkiICJhcmcxOiAwIGFyZzI6IGJiYmIiIC0tYXJnMj1hYWFhIC0yIGJiYmIKK3J1biB0ZXN0MSAidGVzdDEgLSAzMCIgImFyZzE6IDAgYXJnMjogJ2ZvbyBiaW5nbycgcmVzdDogYm9nZ2xlIiAtLWdyYWIgYmluZ28gYm9nZ2xlCitydW4gdGVzdDEgInRlc3QxIC0gMzEiICJhcmcxOiAwIGFyZzI6ICdmb28gYmFyJyByZXN0OiBib2dnbGUiIC0tZ3JhYmJhciBib2dnbGUKKworcnVuIHRlc3QxICJ0ZXN0MSAtIDMyIiAiYXJnMTogMCBhcmcyOiAobm9uZSkgYUludDogMTIzNDU2Nzg5IiAtaSAxMjM0NTY3ODkKK3J1biB0ZXN0MSAidGVzdDEgLSAzMyIgImFyZzE6IDAgYXJnMjogKG5vbmUpIGFJbnQ6IDEyMzQ1Njc4OSIgLS1pbnQgMTIzNDU2Nzg5CitydW4gdGVzdDEgInRlc3QxIC0gMzQiICJhcmcxOiAwIGFyZzI6IChub25lKSBhU2hvcnQ6IDEyMzQ1IiAtcyAxMjM0NQorcnVuIHRlc3QxICJ0ZXN0MSAtIDM1IiAiYXJnMTogMCBhcmcyOiAobm9uZSkgYVNob3J0OiAxMjM0NSIgLS1zaG9ydCAxMjM0NQorcnVuIHRlc3QxICJ0ZXN0MSAtIDM2IiAiYXJnMTogMCBhcmcyOiAobm9uZSkgYUxvbmc6IDExMjM0NTY3ODkiIC1sIDExMjM0NTY3ODkKK3J1biB0ZXN0MSAidGVzdDEgLSAzNyIgImFyZzE6IDAgYXJnMjogKG5vbmUpIGFMb25nOiAxMTIzNDU2Nzg5IiAtLWxvbmcgMTEyMzQ1Njc4OQorcnVuIHRlc3QxICJ0ZXN0MSAtIDM4IiAiYXJnMTogMCBhcmcyOiAobm9uZSkgYUxvbmdMb25nOiAxMTExMTIzNDU2Nzg5IiAtTCAxMTExMTIzNDU2Nzg5CitydW4gdGVzdDEgInRlc3QxIC0gMzkiICJhcmcxOiAwIGFyZzI6IChub25lKSBhTG9uZ0xvbmc6IDExMTExMjM0NTY3ODkiIC0tbG9uZ2xvbmcgMTExMTEyMzQ1Njc4OQorCitydW4gdGVzdDEgInRlc3QxIC0gNDAiICJhcmcxOiAwIGFyZzI6IChub25lKSBhRmxvYXQ6IDEwLjEiIC1mIDEwLjEKK3J1biB0ZXN0MSAidGVzdDEgLSA0MSIgImFyZzE6IDAgYXJnMjogKG5vbmUpIGFGbG9hdDogMTAuMSIgLS1mbG9hdCAxMC4xCitydW4gdGVzdDEgInRlc3QxIC0gNDIiICJhcmcxOiAwIGFyZzI6IChub25lKSBhRG91YmxlOiAxMC4xIiAtZCAxMC4xCitydW4gdGVzdDEgInRlc3QxIC0gNDMiICJhcmcxOiAwIGFyZzI6IChub25lKSBhRG91YmxlOiAxMC4xIiAtLWRvdWJsZSAxMC4xCisKK3J1biB0ZXN0MSAidGVzdDEgLSA0NCIgImFyZzE6IDAgYXJnMjogKG5vbmUpIG9TdHI6IChub25lKSIgLS1vcHRpb25hbAorcnVuIHRlc3QxICJ0ZXN0MSAtIDQ1IiAiYXJnMTogMCBhcmcyOiAobm9uZSkgb1N0cjogeWFkZGEiIC0tb3B0aW9uYWw9eWFkZGEKK3J1biB0ZXN0MSAidGVzdDEgLSA0NiIgImFyZzE6IDAgYXJnMjogKG5vbmUpIG9TdHI6IHlhZGRhIiAtLW9wdGlvbmFsIHlhZGRhCitydW4gdGVzdDEgInRlc3QxIC0gNDciICJhcmcxOiAwIGFyZzI6IChub25lKSBvU3RyOiBwaW5nIHJlc3Q6IHBvbmciIC0tb3B0aW9uYWw9cGluZyBwb25nCitydW4gdGVzdDEgInRlc3QxIC0gNDgiICJhcmcxOiAwIGFyZzI6IChub25lKSBvU3RyOiBwaW5nIHJlc3Q6IHBvbmciIC0tb3B0aW9uYWwgcGluZyBwb25nCitydW4gdGVzdDEgInRlc3QxIC0gNDkiICJhcmcxOiAwIGFyZzI6IChub25lKSBhQXJndjogQSBCIHJlc3Q6IEMiIC0tYXJndiBBIC0tYXJndiBCIEMKKworcnVuIHRlc3QxICJ0ZXN0MSAtIDUwIiAiYXJnMTogMCBhcmcyOiBmb289YmFyIiAtMmZvbz1iYXIKK3J1biB0ZXN0MSAidGVzdDEgLSA1MSIgImFyZzE6IDAgYXJnMjogZm9vPWJhciIgLTI9Zm9vPWJhcgorCitydW4gdGVzdDEgInRlc3QxIC0gNTIiICJhcmcxOiAwIGFyZzI6IChub25lKSBhRmxhZzogMHhmZWVkIiAtLWJpdHhvcgorcnVuIHRlc3QxICJ0ZXN0MSAtIDUzIiAiYXJnMTogMCBhcmcyOiAobm9uZSkgYUZsYWc6IDB4ZmZmZiIgLS1iaXRzZXQKK3J1biB0ZXN0MSAidGVzdDEgLSA1NCIgImFyZzE6IDAgYXJnMjogKG5vbmUpIGFGbGFnOiAweDI4YyIgLS1iaXRjbHIKK3J1biB0ZXN0MSAidGVzdDEgLSA1NSIgImFyZzE6IDAgYXJnMjogKG5vbmUpIGFGbGFnOiAweDg4ODgiIC0tbm9iaXRzZXQKK3J1biB0ZXN0MSAidGVzdDEgLSA1NiIgImFyZzE6IDAgYXJnMjogKG5vbmUpIGFGbGFnOiAweGZhY2UiIC0tbm9iaXRjbHIKKworcnVuIHRlc3QxICJ0ZXN0MSAtIDU3IiAiYXJnMTogMCBhcmcyOiAobm9uZSkgYUJpdHM6IGZvbyxiYXoiIC0tYml0cyBmb28sYmFyLGJheiwhYmFyCisKK3J1biB0ZXN0MSAidGVzdDEgLSA1OCIgIlwKK1VzYWdlOiBsdC10ZXN0MSBbLUk/XSBbLWN8LS1jYjI9U1RSSU5HXSBbLS1hcmcxXSBbLTJ8LS1hcmcyPUFSR10KKyAgICAgICAgWy0zfC0tYXJnMz1BTkFSR10gWy1vbmVkYXNoXSBbLS1vcHRpb25hbD1TVFJJTkddIFstLXZhbF0KKyAgICAgICAgWy1pfC0taW50PUlOVF0gWy1zfC0tc2hvcnQ9U0hPUlRdIFstbHwtLWxvbmc9TE9OR10KKyAgICAgICAgWy1MfC0tbG9uZ2xvbmc9TE9OR0xPTkddIFstZnwtLWZsb2F0PUZMT0FUXSBbLWR8LS1kb3VibGU9RE9VQkxFXQorICAgICAgICBbLS1yYW5kaW50PUlOVF0gWy0tcmFuZHNob3J0PVNIT1JUXSBbLS1yYW5kbG9uZz1MT05HXQorICAgICAgICBbLS1yYW5kbG9uZ2xvbmc9TE9OR0xPTkddIFstLWFyZ3Y9U1RSSU5HXSBbLS1iaXRzZXRdIFstLWJpdGNscl0KKyAgICAgICAgWy0tYml0eG9yXSBbLS1uc3RyPVNUUklOR10gWy0tbHN0cj1TVFJJTkddIFstSXwtLWluY10KKyAgICAgICAgWy1jfC0tY2I9U1RSSU5HXSBbLS1sb25nb3B0XSBbLT98LS1oZWxwXSBbLS11c2FnZV0gWy0tc2ltcGxlPUFSR10iIC0tdXNhZ2UKK3J1biB0ZXN0MSAidGVzdDEgLSA1OSIgIlwKK1VzYWdlOiBsdC10ZXN0MSBbT1BUSU9OLi4uXQorICAgICAgLS1hcmcxICAgICAgICAgICAgICAgICAgICAgIEZpcnN0IGFyZ3VtZW50IHdpdGggYSByZWFsbHkgbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLiBBZnRlciBhbGwsIHdlIGhhdmUgdG8gdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50IGhlbHAgd3JhcHBpbmcgc29tZWhvdywgcmlnaHQ/CisgIC0yLCAtLWFyZzI9QVJHICAgICAgICAgICAgICAgICAgQW5vdGhlciBhcmd1bWVudCAoZGVmYXVsdDogXCIobm9uZSlcIikKKyAgLTMsIC0tYXJnMz1BTkFSRyAgICAgICAgICAgICAgICBBIHRoaXJkIGFyZ3VtZW50CisgICAgICAtb25lZGFzaCAgICAgICAgICAgICAgICAgICAgUE9QVF9BUkdGTEFHX09ORURBU0g6IE9wdGlvbiB0YWtlcyBhIHNpbmdsZSAtCisgICAgICAtLW9wdGlvbmFsWz1TVFJJTkddICAgICAgICAgUE9QVF9BUkdGTEFHX09QVElPTkFMOiBUYWtlcyBhbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBhcmd1bWVudAorICAgICAgLS12YWwgICAgICAgICAgICAgICAgICAgICAgIFBPUFRfQVJHX1ZBTDogMTI1OTkyIDE0MTQyMQorICAtaSwgLS1pbnQ9SU5UICAgICAgICAgICAgICAgICAgIFBPUFRfQVJHX0lOVDogMjcxODI4IChkZWZhdWx0OiAyNzE4MjgpCisgIC1zLCAtLXNob3J0PVNIT1JUICAgICAgICAgICAgICAgUE9QVF9BUkdfU0hPUlQ6IDQ1MjMgKGRlZmF1bHQ6IDQ1MjMpCisgIC1sLCAtLWxvbmc9TE9ORyAgICAgICAgICAgICAgICAgUE9QVF9BUkdfTE9ORzogNzM4OTA1NjA5IChkZWZhdWx0OiA3Mzg5MDU2MDkpCisgIC1MLCAtLWxvbmdsb25nPUxPTkdMT05HICAgICAgICAgUE9QVF9BUkdfTE9OR0xPTkc6IDczODkwNTYwOSAoZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Mzg5MDU2MDkpCisgIC1mLCAtLWZsb2F0PUZMT0FUICAgICAgICAgICAgICAgUE9QVF9BUkdfRkxPQVQ6IDMuMTQxNTkgKGRlZmF1bHQ6IDMuMTQxNTkpCisgIC1kLCAtLWRvdWJsZT1ET1VCTEUgICAgICAgICAgICAgUE9QVF9BUkdfRE9VQkxFOiA5Ljg2OTYgKGRlZmF1bHQ6IDkuODY5NikKKyAgICAgIC0tcmFuZGludD1JTlQgICAgICAgICAgICAgICBQT1BUX0FSR0ZMQUdfUkFORE9NOiBleHBlcmltZW50YWwKKyAgICAgIC0tcmFuZHNob3J0PVNIT1JUICAgICAgICAgICBQT1BUX0FSR0ZMQUdfUkFORE9NOiBleHBlcmltZW50YWwKKyAgICAgIC0tcmFuZGxvbmc9TE9ORyAgICAgICAgICAgICBQT1BUX0FSR0ZMQUdfUkFORE9NOiBleHBlcmltZW50YWwKKyAgICAgIC0tcmFuZGxvbmdsb25nPUxPTkdMT05HICAgICBQT1BUX0FSR0ZMQUdfUkFORE9NOiBleHBlcmltZW50YWwKKyAgICAgIC0tYXJndiBTVFJJTkcgICAgICAgICAgICAgICBQT1BUX0FSR19BUkdWOiBhcHBlbmQgc3RyaW5nIHRvIGFyZ3YgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpCisgICAgICAtLVtub11iaXRzZXQgICAgICAgICAgICAgICAgUE9QVF9CSVRfU0VUOiB8PSAweDc3NzcKKyAgICAgIC0tW25vXWJpdGNsciAgICAgICAgICAgICAgICBQT1BUX0JJVF9DTFI6ICY9IH4weGY4NDIKKyAgICAgIC0tYml0eG9yICAgICAgICAgICAgICAgICAgICBQT1BUX0FSR0ZMQUdfWE9SOiBePSAoMHg4YWNlXjB4ZmVlZCkKKyAgICAgIC0tbnN0cj1TVFJJTkcgICAgICAgICAgICAgICBQT1BUX0FSR19TVFJJTkc6IChudWxsKSAoZGVmYXVsdDogbnVsbCkKKyAgICAgIC0tbHN0cj1TVFJJTkcgICAgICAgICAgICAgICBQT1BUX0FSR19TVFJJTkc6IFwiMTIzNDU2Nzg5Li4uXCIgKGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHRlc3RzIGRlZmF1bHQgc3RyaW5ncyBhbmQgZXhjZWVkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gbGltaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5KzEyMzQ1Njc4OSsxMjM0NTY3ODkrMTIzNDU2Nzg5KzEyMzQ1Njc4OSsgMTIzNDU2Nzg5KzEyMzQ1Njc4OSsxMjM0NTY3ODkrMTIzNDU2Nzg5KzEyMzQ1Njc4OSsgMTIzNDU2Ny4uLlwiKQorCithcmcgZm9yIGNiMgorICAtYywgLS1jYjI9U1RSSU5HICAgICAgICAgICAgICAgIFRlc3QgYXJndW1lbnQgY2FsbGJhY2tzCisgIC1JLCAtLWluYyAgICAgICAgICAgICAgICAgICAgICAgQW4gaW5jbHVkZWQgYXJndW1lbnQKKworQ2FsbGJhY2sgYXJndW1lbnRzCisgIC1jLCAtLWNiPVNUUklORyAgICAgICAgICAgICAgICAgVGVzdCBhcmd1bWVudCBjYWxsYmFja3MKKyAgICAgIC0tbG9uZ29wdCAgICAgICAgICAgICAgICAgICBVbnVzZWQgb3B0aW9uIGZvciBoZWxwIHRlc3RpbmcKKworT3B0aW9ucyBpbXBsZW1lbnRlZCB2aWEgcG9wdCBhbGlhcy9leGVjOgorICAgICAgLS1zaW1wbGU9QVJHICAgICAgICAgICAgICAgIHNpbXBsZSBkZXNjcmlwdGlvbgorCitIZWxwIG9wdGlvbnM6CisgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZQorICAgICAgLS11c2FnZSAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgYnJpZWYgdXNhZ2UgbWVzc2FnZSIgLS1oZWxwCisKKyNydW5fZGlmZiB0ZXN0MyAidGVzdDMgLSA1MSIgdGVzdDMtZGF0YS8wMS5pbnB1dCB0ZXN0My1kYXRhLzAxLmFuc3dlcgorI3J1bl9kaWZmIHRlc3QzICJ0ZXN0MyAtIDUyIiB0ZXN0My1kYXRhLzAyLmlucHV0IHRlc3QzLWRhdGEvMDIuYW5zd2VyCisjcnVuX2RpZmYgdGVzdDMgInRlc3QzIC0gNTMiIHRlc3QzLWRhdGEvMDMuaW5wdXQgdGVzdDMtZGF0YS8wMy5hbnN3ZXIKKworZWNobyAiIgorZWNobyAiUGFzc2VkLiIKZGlmZiAtLWdpdCBhL3BvcHQudGFyLmd6IGIvcG9wdC50YXIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4YzUyYgotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQudGFyLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvcHQudXJsIGIvcG9wdC51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3BvcHQudXJsCkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9ycG01Lm9yZy9maWxlcy9wb3B0L3BvcHQtMS4xNi50YXIuZ3oKZGlmZiAtLWdpdCBhL3BvcHQudmVyc2lvbiBiL3BvcHQudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzE1MTk2Ci0tLSAvZGV2L251bGwKKysrIGIvcG9wdC52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzEuMTYK